// JavaScript Document

// global flag
var isIE = false;

// global request and XML document objects
var req;

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

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("", "story", items[i], 0));
		//}
        //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("h2");
	var hyperlink;
	
	if (url !== "#" && url !== null)
	{
		hyperlink = document.createElement("a");
		hyperlink.setAttribute("href",url);
		hyperlink.setAttribute("target","_blank");
		hyperlink.innerHTML = headline;
		format.appendChild(hyperlink);
	} else
	{
		format.innerHTML = headline;
	}
	newsitem.appendChild(format);
}