// JavaScript Document

function loadXMLDoc(url)
{
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest)
	{
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject)
	{
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req)
		{
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange()
{
    // only if req shows "loaded"
    if (req.readyState == 4)
	{
        // only if "OK"
        if (req.status == 200)
		{
            buildNews();
         } else {
            alert("Unable to retrieve Hot News information:\n" + req.statusText);
        }
    }
}

function buildNews()
{
    var hotnews = document.getElementById("articles");
    var items = req.responseXML.getElementsByTagName("article");
	var headline;
	var url;
	// loop through <item> elements, and add each nested
    // <title> element to Topics select element
    for (var i = 0; i < items.length; i++)
	{
		// define out div section for 1 newsitem catch for IE vs other Browsers
		try {
   			newsitem = document.createElement("<div class=\"newsitem\">");
		} catch (e) {
    		newsitem = document.createElement("div");
    		newsitem.setAttribute("class","newsitem");
		}
		// add headline to section
		create_headline(newsitem, getElementTextNS("", "headline", items[i], 0), getElementTextNS("", "hyperlink", items[i], 0));
		// retrieve individual lines from the story
		var lines = items[i].getElementsByTagName('story')[0].getElementsByTagName('line');
		for (var j = 0;j < lines.length; j++)
		{
			append_story(newsitem, getElementTextNS("", "line", items[i], j));
		}
        //appendToNews(newsitem, "newsitem", headline);
		hotnews.appendChild(newsitem);
    }
}

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 append_story(newsitem, content)
{
	var format = document.createElement("p");
	var email_regex = /([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})/ig;
	var newline_regex = /\\n/ig;
	// scan for email addresses and replace with mailto tag
	var text = content.replace(email_regex, "<a href=\"mailto:$1\">$1</a>");
	// scan for newline characters and insert <br/> as needed
	format.innerHTML = text.replace(newline_regex, '<br/>');
	// append the story line to the newsitem 
	newsitem.appendChild(format);	
}

function create_headline(newsitem, headline, url)
{
	var format = document.createElement("h4");
	var hyperlink;
	
	if (url !== "#" && url !== null)
	{
		hyperlink = document.createElement("a");
		hyperlink.setAttribute("href",url);
		hyperlink.innerHTML = headline;
		format.appendChild(hyperlink);
	} else
	{
		format.innerHTML = headline;
	}
	newsitem.appendChild(format);
}