var xmlGlossary;
var xmlReferences;
var mouseX;
var mouseY;


function loadXMLDoc(xmlurl) {
    var xmlHttp;
    if(window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.open("GET", xmlurl, false);
    xmlHttp.send(null);

// alert(xmlHttp.responseXML.getElementsByTagName("term").length);

    return xmlHttp.responseXML;
}


function getDefinition(name) {
    if(xmlGlossary == null) {
        xmlGlossary = loadXMLDoc("http://erbc.vassar.edu/assets/js/sp_glossary.xml");
    }
    var glossaryItems = xmlGlossary.getElementsByTagName("term");
// alert(glossaryItems[0].getElementsByTagName("label")[0].childNodes[0].nodeValue);
    for(var i=0; i<glossaryItems.length; i++){
        var term = glossaryItems[i].getElementsByTagName("label")[0].childNodes[0].nodeValue;
        if(term == name) {
            return glossaryItems[i].getElementsByTagName("definition")[0].childNodes[0].nodeValue;
        }
    }
    return "No definition found for \""+name+"\"";
}

function getSource(name) {
    if(xmlReferences == null) {
        xmlReferences = loadXMLDoc("http://erbc.vassar.edu/assets/js/references.xml");
    }
    var referenceItems = xmlReferences.getElementsByTagName("item");
    for(var i=0; i<referenceItems.length; i++){
        var term = referenceItems[i].getElementsByTagName("short")[0].childNodes[0].nodeValue;
        if(term == name) {
            return referenceItems[i].getElementsByTagName("long")[0].childNodes[0].nodeValue;
        }
    }
    return "No source found for \""+name+"\"";
}


function createToolTip(text, type) {
    var tooltip = document.createElement('p');
    tooltip.setAttribute('id','tooltip');
    tooltip.setAttribute('class', type);
    tooltip.innerHTML = text;
    tooltip.style.position = "absolute";
        mouseY+=10;
    tooltip.style.top = mouseY+"px";
    tooltip.style.left = mouseX+"px";
    return tooltip;
}

function displayToolTip_G(name) {
 removeToolTip();
 document.getElementsByTagName('body')[0].parentNode.appendChild(createToolTip("<strong>"+name+"</strong>"+": " + getDefinition(name), "glossarytip"));
}

function displayToolTip_R(name) {
 removeToolTip();
 document.getElementsByTagName('body')[0].parentNode.appendChild(createToolTip(getSource(name), "referencetip"));
}

function removeToolTip() {
  if(document.getElementById('tooltip')){
    document.getElementsByTagName('body')[0].parentNode.removeChild(document.getElementById('tooltip'));
  }

}

function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{
  if (!e) e = window.event; // works on IE, but not NS (we rely on NS
// passing us the event)

  if (e)
  {
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mouseX = e.pageX;
      mouseY = e.pageY;
    }
    else if (e.clientX || e.clientY)
    { // works on IE6,FF,Moz,Opera7
      mouseX = e.clientX + document.body.scrollLeft;
      mouseY = e.clientY + document.body.scrollTop;
    }  
  }
}

document.onmousemove = getMouseXY;

function displayDefinition(term){
    var links = document.getElementById('gloss_term_list').getElementsByTagName('a');
    for(var i=0;i<links.length;i++){
        if(links[i].innerHTML == term){
             links[i].setAttribute('class', 'selected_term');
        } else {
             links[i].setAttribute('class', '');
        }
    }
    document.getElementById('definition_display').innerHTML = "<b>"+term+"</b><br /><br />"+getDefinition(term); 
}


function searchGlossary(e)
{
 var keynum;
 var keychar;
 
if(xmlGlossary == null) { xmlGlossary = loadXMLDoc("http://erbc.vassar.edu/assets/js/sp_glossary.xml");
}

 if(window.event) // IE
   {
    keynum = e.keyCode;
   }
 else if(e.which) // Netscape/Firefox/Opera
   {
    keynum = e.which;
   }
 
 var input = document.getElementById('search').value;
 
 //if(keynum==8) //backspace was pressed, remove last character
 //{
 // input = document.getElementById('search').value;
 // input = input.slice(0,input.length-1);
 //}
 //else
// {
//  keychar = String.fromCharCode(keynum);
 // input = document.getElementById('search').value + keychar;
// }
 
 var displayArray = [];
 var glossaryItems = xmlGlossary.getElementsByTagName("term");
 
 for(var i=0;i<glossaryItems.length; i++){
  var term = glossaryItems[i].getElementsByTagName("label")[0].childNodes[0].nodeValue;
var lc_term = term.toLowerCase();
  if(lc_term.indexOf(input.toLowerCase())===0 && input!=""){
   displayArray.push(term);
  }
 }
 
 if(displayArray.length == 0){

     if(document.getElementById('search').value == ""){
          document.getElementById('textsearch').innerHTML = "";
      } else {
     document.getElementById('textsearch').innerHTML = "No matches found for \""+document.getElementById('search').value+"\"";
}
} else {

 
 displayArray.sort();
 
 document.getElementById('textsearch').innerHTML = "";  
 
 for(i=0;i<displayArray.length; i++){
  document.getElementById('textsearch').innerHTML += "<p><a onmousedown=\"replaceGlossaryBox('"+displayArray[i]+"')\">"+displayArray[i]+"</a></p>";
 }
 }
} 

function replaceGlossaryBox(term)
{
   document.getElementById('textsearch').innerHTML = "<p><strong>"+term+":</strong>"+getDefinition(term)+"</p>";
}

// new function



function searchMainGlossary(e)
{
 var keynum;
 var keychar;
 
if(xmlGlossary == null) { xmlGlossary = loadXMLDoc("http://erbc.vassar.edu/assets/js/sp_glossary.xml");
}

 if(window.event) // IE
   {
    keynum = e.keyCode;
   }
 else if(e.which) // Netscape/Firefox/Opera
   {
    keynum = e.which;
   }
 
 var input = "";
 
 if(keynum==8) //backspace was pressed, remove last character
 {
  input = document.getElementById('search').value;
  input = input.slice(0,input.length-1);
 }
 else
 {
  keychar = String.fromCharCode(keynum);
  input = document.getElementById('search').value + keychar;
 }
 
 var displayArray = [];
 var glossaryItems = xmlGlossary.getElementsByTagName("term");


 if (input==""){
 for(var i=0;i<glossaryItems.length; i++){ var term = glossaryItems[i].getElementsByTagName("label")[0].childNodes[0].nodeValue; displayArray.push(term); }
} else {
 
 for(var i=0;i<glossaryItems.length; i++){
  var term = glossaryItems[i].getElementsByTagName("label")[0].childNodes[0].nodeValue;
  if(indexOfIgnoreCase(term,input)===0 && input!=""){
   displayArray.push(term);
  }
 }
}
 
 displayArray.sort();
 
 document.getElementById('gloss_term_list').innerHTML = "";  
 
  for(i=0;i<displayArray.length; i++){
	var list_item = document.createElement('li');
	var a_item = document.createElement('a');
       	
	a_item.setAttribute('onmousedown', "displayDefinition('"+displayArray[i]+"')");
        a_item.innerHTML = displayArray[i];

        list_item.appendChild(a_item);
  	document.getElementById('gloss_term_list').appendChild(list_item);
   }
} 

function indexOfIgnoreCase(arg1, arg2) {
	return arg1.toLowerCase().indexOf(arg2.toLowerCase());
}

// Extra Stuff!

function displayMovieTitle(title) {
       document.getElementById('movie_title').innerHTML = "<p>"+title+"</p>";
}

