var rssRequest;
var rssTargetElement;

function fetchFeed(feedUrl, toElement) 
{ 
	rssTargetElement = toElement;
	rssRequest = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			rssRequest = new XMLHttpRequest();
        } catch(e) {
			rssRequest = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	rssRequest = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		rssRequest = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		rssRequest = false;
        	}
		}
    }
	if(rssRequest) {
		rssRequest.onreadystatechange = processRssRequestChange;
		rssRequest.open("GET", feedUrl, true);
		rssRequest.send("");
	}
}

function fetchFeedViaFrame(frameElement, feedUrl, toElement) 
{ 
	rssTargetElement = toElement;
	rssRequest = false;
	
    // branch for native XMLHttpRequest object
    
}

function processRssRequestChange() {
    // only if req shows "loaded"
    if (rssRequest.readyState == 4) {
        // only if "OK"
        if (rssRequest.status == 200) {
            // ...processing statements go here...
            
            updateRssResultsToElement();
            
        } else {
            alert("There was a problem retrieving the XML data:\n" +
                rssRequest.statusText);
        }
    }
}

function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "n/a";
    }
}

function updateRssResultsToElement()
{
    var items = rssRequest.responseXML.getElementsByTagName("item");
    
    var result = "";
    
    // loop through <item> elements, and add each nested
    // <title> element to Topics select element
    for (var i = 0; i < items.length; i++) {
    	var itemTitle = getElementTextNS("", "title", items[i], 0);
    	var itemLink = getElementTextNS("", "link", items[i], 0);
    	var itemName = "#" + itemLink.split("#")[1]; // parsed everything after the # (inclusive)
    	
    
    	result += '<p><a name="' + itemName +'"><em>' + itemTitle + '</em></a></p>';
    	result += getElementTextNS("", "description", items[i], 0);
    	result += "<hr/>";
    }
    document.getElementById(rssTargetElement).innerHTML = result;
}

	
