// JavaScript Document

addLoadEvent(prepareLinks);


function addLoadEvent(func) {
	var oldonload=window.onload;
	if (typeof window.onload != 'function') {
		window.onload=func;
	} else {
		window.onload=function() {
			oldonload();
			func();
			}
	}
}


function prepareLinks() {
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	var glossary=document.getElementById("glossary");
	var links=glossary.getElementsByTagName("a");
	for (var i=0; i < links.length; i++) {		
			links[i].onclick=function () {
				getGlossary(this.href);
				return false;
			}
	}
}

function getHTTPObject() {
	var xhr=false;
	if (window.XMLHttpRequest) {
		xhr=new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			xhr=new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
			xhr=new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				xhr=false;
			}
		}
	}
	return xhr;
}

function getGlossary(href) {
	var id=href.split("#")[1];
	var url="/includes/getglossaryitem.asp";
	var qs="ID="+id;
	var request=getHTTPObject();
	if (request) {
		request.onreadystatechange=function() {
			displayResponse(request, id);
		};
		request.open("POST", url, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.send(qs);
	}
}

function displayResponse(request, id) {
	if (request.readyState==4) {
		if (request.status==200 || request.status==304) {
			var glossary=document.getElementById("glossary");
			var dl=glossary.getElementsByTagName("dd");
			for (var i=0; i < dl.length; i++) {
				var html=dl[i].innerHTML;
				if (html.length > 0) {
					dl[i].style.display="none";
				}
			}		
			var dd=document.getElementById("dd"+id);			
			if (dd) {
				dd.innerHTML=request.responseText;
				dd.style.display="block";
				fadeUp(dd,198,203,222);

			} 				
		}
	}
}

function fadeUp(element,red,green,blue) {
	if (element.fade) {
		clearTimeout(element.fade);
	}
	element.style.backgroundColor="rgb("+red+","+green+","+blue+")";
	if (red==247 && green==247 & blue==255) {
		return;
	}
	var newred=red +Math.ceil((247-red)/10);
	var newgreen=green+Math.ceil((247-green)/10);
	var newblue=blue+Math.ceil((255-blue)/10);
	var repeat=function() {
		fadeUp(element,newred,newgreen,newblue)
	};
	element.fade=setTimeout(repeat,50);
}