// JavaScript Document

var timeout	= 500;
var close_timeout	= 0;
var menu_id	= 0;

// open hidden layer
function menu_open(id)
{	
	// cancel timeout
	cancel_timeout();

	// hide previous menu
	if(menu_id) menu_id.style.visibility = 'hidden';

	// show new menu
	menu_id = document.getElementById(id);
	menu_id.style.visibility = 'visible';

}

// close visible layer
function menu_close()
{
	if(menu_id) menu_id.style.visibility = 'hidden';
}

// set timeout for menu close
function set_timeout()
{
	close_timeout = window.setTimeout(menu_close, timeout);
}

// clear menu close timeout
function cancel_timeout()
{
	if(close_timeout)
	{
		window.clearTimeout(close_timeout);
		close_timeout = null;
	}
}

function present_text(message)
{
	if (message)
	{
		document.getElementById('message').innerHTML = message;
	}
}

function restore_text()
{
	document.getElementById('message').innerHTML = "Use your mouse/pointer to select an industry";
}

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("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);
}