// ================================================================================================
// browser check:
var agent = navigator.userAgent.toLowerCase();
var isIE = (agent.indexOf('msie') != -1);
var isOpera	= (agent.indexOf('opera') != -1);
var isSafari = (agent.indexOf('safari') != -1);

String.prototype.trim = function(){ 
	return this.replace(/^\s+/g, '').replace(/\s+$/g, ''); 
}
// ================================================================================================
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}
// ================================================================================================
var addEvent;
if (document.addEventListener) {
    addEvent = function(element, type, handler) {
        element.addEventListener(type, handler, null);
    };
} else if (document.attachEvent) {
    addEvent = function(element, type, handler) {
        element.attachEvent("on" + type, handler);
    };
} else {
    addEvent = new Function; // not supported
}
// ================================================================================================
function getElementsByClassName(parentNode,node,classname) {
	var a = [];
	var re = new RegExp('(^| )'+classname+'( |$)');
	var els = parentNode.getElementsByTagName(node);
	for(var i=0,j=els.length; i<j; i++){
		if(re.test(els[i].className))a.push(els[i]);
	}
	return a;
}
// ================================================================================================
function returnRandom(lower, upper) {
	var range = upper-lower+1; 
	var l = ("" + range).length; 
	var randomNumber = (Math.floor(Math.random() * Math.pow(10,l)) % range) + parseInt(lower); 
	return randomNumber; 
}
// ================================================================================================
function expandList(node){
	node.firstChild.style.top = (node.getAttribute("status") == "closed")? "-21px" : "0px";
	node.setAttribute("status",( (node.getAttribute("status") == "closed")? "open" : "closed"));
	display(node.getAttribute("menu"),(node.getAttribute("status") == "open")? true : false);
}
function display(div,toggle){
	oDiv = $(div);
	oSub = getElementsByClassName($(div),"div","expand")[0];
	oSub.style.display = "block";
	start = (toggle)? 0 : parseInt(oSub.offsetHeight);
	target = (toggle)? parseInt(oSub.offsetHeight) : -(parseInt(oSub.offsetHeight));
	// initiate timer
	running = false;
	timer = null;
	duration = (isIE)? 15 : 25;
	step = 0;
	clearInterval(timer);
	animate();
};
function animate(){
	if(running){
		if (step < duration) {
			var ease = easeOutQuad(step,start,target,duration);
			oSub.style.clip = "rect(auto auto "+ Math.round(ease)+"px" +" auto)";
			oDiv.style.height = Math.round(ease)+"px";
			step++;
		} else {
			clearInterval(timer);
			running = false;
			if(target < 0){ oSub.style.display = "none" };
		}
	} else {
		running = true;
		timer = setInterval(animate,15);
	}
};
function easeOutQuad(t,b,c,d){
	return -c*(t/=d)*(t-2)+b;
};
// ================================================================================================
// addEvent(window,"load",initTooltips);
function initTooltips(){
	if(!document.getElementById || !document.getElementsByTagName) return;
	tipContainer = document.createElement("span");
	tipContainer.id="tip";
	tipContainer.setAttribute("id","tip");
	tipContainer.style.position="absolute";
	tipContainer.style.zIndex = 1000;
	document.getElementsByTagName("body")[0].appendChild(tipContainer);
	var links = $("leftColumn").getElementsByTagName("A");
	for(a=0;a<links.length;a++){
    	enableTooltips(links[a]);
    }
}
function enableTooltips(el){
	var toolText = el.getAttribute("title");
	if(toolText.length > 0){
		el.removeAttribute("title");
		// create element layout
		var tooltip = document.createElement("div");
		tooltip.id = "tooltip";
		tooltip.setAttribute("id","tooltip");
		// create internal divs
		var hl = document.createElement("div");
		hl.className = "highlight";
		var t = document.createElement("div");
		t.className = "top";
		var tr = document.createElement("div");
		t.appendChild(tr);
		var m = document.createElement("div");
		m.className = "middle";
		var c = document.createElement("div");
		c.className = "content";
		var wn = document.createElement("div");
		wn.className = "title";
		wn.appendChild(document.createTextNode("what's new"));
		c.appendChild(wn);
		c.appendChild(document.createTextNode(toolText));
		m.appendChild(c);
		var b = document.createElement("div");
		b.className = "bottom";
		var br = document.createElement("div");
		b.appendChild(br);
		// append all to tooltip
		tooltip.appendChild(t);
		tooltip.appendChild(m);
		tooltip.appendChild(b);
		tooltip.appendChild(hl);
		if(isIE && !isOpera){
			t.style.backgroundImage = 'none';
			tr.style.backgroundImage = 'none';
			m.style.backgroundImage = 'none';
			b.style.backgroundImage = 'none';
			br.style.backgroundImage = 'none';
			hl.style.backgroundImage = 'none';
			t.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/shad_tlcorner.png',sizingMethod='crop')";
			tr.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/shad_trcorner.png',sizingMethod='crop')";
			m.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/shad_bkgd.png',sizingMethod='scale')";
			b.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/shad_blcorner.png',sizingMethod='crop')";
			br.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/shad_brcorner.png',sizingMethod='crop')";
			hl.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/shad_highlight.png',sizingMethod='crop')";
		}
		// set tooltip function to each element
		el.tooltip = tooltip;
		el.onmouseover = showTooltip;
		el.onmouseout = hideTooltip;
		el.onmousemove = Locate;
	}
}

function showTooltip(e){
	$("tip").appendChild(this.tooltip);
	Locate(e);
}
function hideTooltip(e){
	var t = $("tip");
	if(t.childNodes.length>0) t.removeChild(t.firstChild);
}
function Locate(e){
	var posx=0,posy=0;
	if(e == null) e = window.event;
	if(e.pageX || e.pageY){
    	posx = e.pageX; posy = e.pageY;
    } else if(e.clientX || e.clientY){
    	if(document.documentElement.scrollTop){
        	posx = e.clientX+document.documentElement.scrollLeft;
        	posy = e.clientY+document.documentElement.scrollTop;
        } else {
        	posx = e.clientX+document.body.scrollLeft;
        	posy = e.clientY+document.body.scrollTop;
        }
    }
	$("tip").style.top = (posy+10)+"px";
	$("tip").style.left = (posx+15)+"px";
}
// ================================================================================================
// addEvent(window,'load',loadFlash);
function loadFlash(){
	var flashHTML = "";
	var movieIDs = "oeHeader|oeMenu|oeMainContent|oeGallery";
	var divcontainer = "jstoswf";
	if(!document.getElementById(divcontainer)){
		var divholder = document.createElement("div");
		divholder.id = divcontainer;
		document.body.appendChild(divholder);
	}
	document.getElementById(divcontainer).innerHTML = "";
	flashHTML = "<object type='application/x-shockwave-flash' data='flash/jsGateway.swf?lc="+movieIDs+"' width='0' height='0'><param name='movie' value='flash/jsGateway.swf?lc="+movieIDs+"'></object>";
	document.getElementById(divcontainer).innerHTML = flashHTML;
}
// ================================================================================================
function setFlashHeight(divid, newH){
	if(document.all && !document.getElementById) {
		document.all[divid].style.pixelHeight = newH+"px";
	}else{
		document.getElementById(divid).style.height = newH+"px";
	}
}
function canResizeFlash(){
	var ua = navigator.userAgent.toLowerCase();
	var opera = ua.indexOf("opera");
	if( document.getElementById ){
		if(opera == -1) return true;
		else if(parseInt(ua.substr(opera+6, 1)) >= 7) return true;
	}
	return false;
}
// ================================================================================================
function popup(node,id){
	var cat = node.parentNode.getAttribute("rel");
	newwindow = window.open("popup.asp?cat="+cat+"&id="+id,"previewWindow","width=750,height=370,top="+((screen.height-350)/2)+",left="+((screen.width-750)/2));
	if (window.focus) {newwindow.focus()}
	return false;
}
// ================================================================================================
addEvent(window,'load',emailCloak);
function emailCloak() {
	if (document.getElementById) {
		var alltags = document.all? document.all : document.getElementsByTagName("*");
		for (i=0; i < alltags.length; i++) {
		  if (alltags[i].className == "emailCloak") {
			var oldText = alltags[i].firstChild;
			var emailAddress = alltags[i].firstChild.nodeValue;
			var display = emailAddress.split(":");
			var name = display[0].trim();
			var email = display[1].trim();
			var user = email.substring(0, email.indexOf("("));
			var website = email.substring(email.indexOf(")")+1, email.length);
			var newText = user+"@"+website;
			var a = document.createElement("a");
			a.href = "mailto:"+newText;
			var address = document.createTextNode(newText);
			a.appendChild(address);
			a.firstChild.nodeValue = name;
			alltags[i].replaceChild(a,oldText);
		  }
		}
	}
}
// ================================================================================================
if(document.getElementById && isIE && !isOpera) {
	addEvent(window,'load',resetBkgdForIE);
}
function resetBkgdForIE() {
	// set main background
	var oMenu = getElementsByClassName($("leftColumn"),"div","section");
	var oML = oMenu.length;
	if(oML){
		for(var m=0;m<oML;m++){
			oMenu[m].style.backgroundImage = 'none';
			oMenu[m].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/menu_bkgd_fadeIE.png',sizingMethod='crop')";
		}
	}
	// set footer image
	var oBottom = getElementsByClassName($("leftColumn"),"div","sectionBottom");
	var oMB = oBottom.length;
	if(oMB){
		for(var b=0;b<oMB;b++){
			oBottom[b].style.backgroundImage = 'none';
			oBottom[b].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/menu_bottom.png',sizingMethod='crop')";
		}
	}
}
// ================================================================================================
addEvent(window,'load',initMenuList);
function initMenuList(){
	var menu = getElementsByClassName(document,"dl","expandable");
	if(menu.length > 0){
		for(var dl=0;dl<menu.length;dl++){
			// ===== Make Definition Term clickable ===== 
			var menuDT= menu[dl].getElementsByTagName("dt");
			for(var dt=0;dt<menuDT.length;dt++){
				menuDT[dt].className = "menuBtnOpen";
				menuDT[dt].onclick = function(){
					var nextSib = this.nextSibling; 
					while (nextSib!= null){ 
						if(nextSib.nodeType==1){ //Mozilla includes #text nodes in sibling list 
							if(nextSib.nodeName.toLowerCase()=="dd"){ 
								nextSib.style.display = (nextSib.style.display == "none")? "block" : "none";
								this.className = (nextSib.style.display == "none")? "menuBtnOpen" : "menuBtnClose";
							} else{ 
								break; 
							} 
						} 
						nextSib = nextSib.nextSibling; 
					}
				} 
			}
			
			// ===== Hide Definition Description ===== 
			var menuDD = menu[dl].getElementsByTagName("dd");
			for(var dd=0;dd<menuDD.length;dd++){
				menuDD[dd].style.display = "none";
			}
		}
	}
}
