var http_request = false;
var year;
var linkBase = 'gl_';
var arrTerms = [];
var basePath = 'http://';
function makeRequest(url, parameters, p_year) {
    http_request = false;
    year = p_year;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
        http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
        try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    http_request.onreadystatechange = searchGlossary;
    http_request.open('GET', url + parameters, true);
    http_request.send(null);
}

function searchGlossary() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200 || http_request.status == 0) {
        
        var word;
        var xmldoc = http_request.responseXML;
        for (j=0; j<arrTerms.length; j++)
		{
			word = arrTerms[j];
			var root = xmldoc.getElementsByTagName('glossary').item(0);
	        
			for (var iNode = 0; iNode < root.childNodes.length; iNode++) {
				var node = root.childNodes.item(iNode);
				if (node.nodeType == 1)		//ff check for 'phantom nodes'
				{
					if (node.getAttribute('value') == year || node.getAttribute('value') == 'All')
					{
						for (i = 0; i < node.childNodes.length; i++) {
							var term = node.childNodes.item(i);
							if (term.nodeType == 1)		//ff check for 'phantom nodes'
							{
								if (term.getAttribute('word') == word)
									if (document.getElementById(linkBase + word))
									{
										var strTooltip = '<div id="ToolTipTextWrap"></div><p>' + term.getAttribute('definition') + '</p>';
										document.getElementById(linkBase + word).title = strTooltip;
										addTooltips(document.getElementById(linkBase + word), strTooltip);
									}
							}
						}
					}
				}
			}
		}
        } else {
        alert('There was a problem with the request. - ' + http_request.status);
        }
    }
}
function getDefinitions(year) {
    makeRequest(basePath + 'data/glossary.xml', '', year);
}

function loadDefinitions(arrTerms, year){
	this.arrTerms = arrTerms;
	getDefinitions(year);
}



// ####################################
// CODE FOR TOOL-TIPS
// ####################################

//Edit the informaiton between the quotes below with the path to your image.
var imagePath = basePath + "images/tooltips/tooltiparrow.gif";

var offsetfromcursorX=-7; //Customize x offset of tooltip
var offsetfromcursorY=23; //Customize y offset of tooltip

var offsetdivfrompointerX=13; //Customize x offset of tooltip DIV relative to pointer image
var offsetdivfrompointerY=13; //Customize y offset of tooltip DIV relative to pointer image. Tip: Set it to (height_of_pointer_image-1).

document.write('<div id="theToolTip"></div>'); //write out tooltip DIV
document.write('<img id="ToolTipPointer" src="'+imagePath+'">'); //write out pointer image

var ie=document.all;
var ns6=document.getElementById && !document.all;
var enabletip=false;
if (ie||ns6) {
	var tipobj=document.all? document.all["theToolTip"] : document.getElementById? document.getElementById("theToolTip") : "";
}

var pointerobj=document.all? document.all["ToolTipPointer"] : document.getElementById? document.getElementById("ToolTipPointer") : "";

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}

function ddrivetip(thetext, thewidth, thecolor){
if (ns6||ie){
if (typeof thewidth!=="undefined") {tipobj.style.width=thewidth+"px";}
if (typeof thecolor!=="undefined" && thecolor!=="") {tipobj.style.backgroundColor=thecolor;}
tipobj.innerHTML=thetext;
enabletip=true;
return false;
}
}

function positiontip(e){
if (enabletip){
var nondefaultpos=false;
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var winwidth=ie&&!window.opera? ietruebody().clientWidth : window.innerWidth-20;
var winheight=ie&&!window.opera? ietruebody().clientHeight : window.innerHeight-20;

var rightedge=ie&&!window.opera? winwidth-event.clientX-offsetfromcursorX : winwidth-e.clientX-offsetfromcursorX;
var bottomedge=ie&&!window.opera? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY;

var leftedge=(offsetfromcursorX<0)? offsetfromcursorX*(-1) : -1000;

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth){
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=curX-tipobj.offsetWidth+"px";
nondefaultpos=true;
}
else if (curX<leftedge)
{tipobj.style.left="5px";}
else{
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetfromcursorX-offsetdivfrompointerX+"px";
pointerobj.style.left=curX+offsetfromcursorX+"px";
}

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight){
tipobj.style.top=curY-tipobj.offsetHeight-offsetfromcursorY+"px";
nondefaultpos=true;
}
else{
tipobj.style.top=curY+offsetfromcursorY+offsetdivfrompointerY+"px";
pointerobj.style.top=curY+offsetfromcursorY+"px";
}
tipobj.style.visibility="visible";
if (!nondefaultpos) {pointerobj.style.visibility="visible";}
else{
pointerobj.style.visibility="hidden";}
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false;
tipobj.style.visibility="hidden";
pointerobj.style.visibility="hidden";
tipobj.style.left="-1000px";
tipobj.style.backgroundColor='';
tipobj.style.width='';
}
}

function addTooltips(thisElement, thisTitle){

thisElement.setAttribute("tooltiptext",thisTitle);
thisElement.removeAttribute("title");
thisElement.onmouseover=function gomouseover(){ddrivetip(this.getAttribute("tooltiptext"))};
thisElement.onmouseout=function gomouseout(){hideddrivetip();};
}
document.onmousemove=positiontip;
