// JavaScript Document

//attach Event Listeners properly
/*
function attachEventListener(target,eventType,functionRef,capture)
{
	if(typeof target.addEventListener != "undefined")
	{
		target.addEventListener(eventType, functionRef, capture);
	}
	else if(typeof target.attachEvent != "undefined")
	{
		var functionString = eventType + functionRef;
		target["e"+functionString] = functionRef;
		
		target[functionString] = function(event)
		{
			if(typeof event == "undefined")
			{
				event = window.event;
			}
			target["e"+functionString](event);
		};
		
		target.attachEvent("on" + eventType, target[functionString]);
		
	}
	else
	{
		eventType = "on" + eventType;
		
		if(typeof target[eventType] == "function")
		{
			var oldListener = target[eventType];
			
			target[eventType] = function()
			{
				oldListener();
				
				return functionRef();
			}
		}
		else
		{
			target[eventType] = functionRef;
		}
	}
}*/
function attachEventListener(target, eventType, functionRef,      
   capture)      
{      
 if (typeof target.addEventListener != "undefined")      
 {      
   target.addEventListener(eventType, functionRef, capture);      
 }      
 else if (typeof target.attachEvent != "undefined")      
 {      
   target.attachEvent("on" + eventType, functionRef);      
 }      
 else      
 {      
   eventType = "on" + eventType;      
     
   if (typeof target[eventType] == "function")      
   {      
     var oldListener = target[eventType];      
     
     target[eventType] = function()      
     {      
       oldListener();      
     
       return functionRef();      
     };      
   }      
   else      
   {      
     target[eventType] = functionRef;      
   }      
 }      
}

//detach event listeners
function detachEventListener(target, eventType, functionRef, capture)
{
	if(typeof target.removeEventListener != "undefined")
	{
		target.removeEventListener(eventType, functionRef, capture);
	}
	else if(typeof target.detachEvent != "undefined")
	{
		var functionString = eventType + functionRef;
		
		target.detachEvent("on" + eventType, target[functionString]);
		
		target["e"+functionString] = null;
		
		target[functionString] = null;
	}
	else
	{
		target["on" + eventType] = null;
	}
}

//stop bubbling
function stopEvent(event)
{
	if (typeof event.stopPropagation != "undefined")
	{
		event.stopPropagation();
	}
	else
	{
		event.cancelBubble = true;
	}
}

//return element width and height
function getDimensions(element)
{
	var width = element.offsetWidth;
	var height = element.offsetHeight;
	
	return [width, height];
}

//return the dimensions of an element
function getPosition(element)
{
	var positionX = 0;
	var positionY = 0;
	
	while(element != null)
	{
		positionX += element.offsetLeft;
		positionY += element.offsetTop;
		element = element.offsetParent;
	}
	
	return [positionX, positionY];
}

//get scrolling Position
function getScrollingPosition()
{
	var position = [0,0];
	if(typeof window.pageYOffset != "undefined")
	{
		position = [
			window.pageXOffset,
			window.pageYOffset
		];
	}
	else if((typeof document.documentElement.scrollTop != "undefined") && (document.documentElement.scrollTop > 0 || document.documentElement.scrollLeft > 0))
	{
		position = [
			document.documentElement.scrollLeft,
			document.documentElement.scrollTop
		];
	}
	else if(typeof document.body.scrollTop != "undefined")
	{
		position = [
			document.body.scrollLeft,
			document.body.scrollTop
		];
	}
	
	return position;
}

//return the cursor position
function getCursorPosition(event)
{
	if(typeof event == "undefined")
	{
		event = window.event;
	}	
	
	var scrollingPosition = getScrollingPosition();
	var cursorPosition = [0,0];
	
	if(typeof event.pageX != "undefined" && typeof event.x != "undefined")
	{
		cursorPosition[0] = event.pageX;
		cursorPosition[1] = event.pageY;
	}
	else
	{
		cursorPosition[0] = event.clientX + scrollingPosition[0];
		cursorPosition[1] = event.clientY + scrollingPosition[1];
	}
	
	return cursorPosition;
}

function addLoadListener(fn){
    if(typeof window.addEventListener !='undefined')    window.addEventListener('load',fn,false);
    else if(typeof document.addEventListener !='undefined')    document.addEventListener('load',fn,false);
    else if(typeof window.attachEvent !='undefined')    window.attachEvent('onload',fn);
    else{
        var oldfn=window.onload
        if(typeof window.onload !='function')    window.onload=fn;
        else    window.onload=function(){oldfn();fn();}
    }
}

//find the target element of an event
function getEventTarget(event)      
{      
	var targetElement = null;      
	 
	if (typeof event.target != "undefined")      
	{      
	targetElement = event.target;      
	}      
	else      
	{      
	targetElement = event.srcElement;      
	}      
	 
	while (targetElement.nodeType == 3 &&      
	 targetElement.parentNode != null)      
	{      
	targetElement = targetElement.parentNode;      
	}      
	 
	return targetElement;      
}

//find all of the elements in the document that
//have the rollover applied to them
//and assign the listener
function initRollover()
{
	var browser = navigator.appName; //find the browser name
	var elements;
	if(browser == "Microsoft Internet Explorer"){
		elements = document.getElementsByTagName("*");
	}else{
		elements = document.getElementsByName("rollover-element");
	}
	//loop through elements
	//to assign the rollover
	for(var i=0; i < elements.length; i++)
	{
		if(browser == "Microsoft Internet Explorer"){
			if(elements[i].name == "rollover-element")
			{
				attachEventListener(elements[i],"mouseover",drawRolloverDiv,false);
				attachEventListener(elements[i],"mousemove",drawRolloverDiv,false);
				attachEventListener(elements[i],"mouseout",closeRolloverDiv,false);
			}
		}else{
			attachEventListener(elements[i],"mouseover",drawRolloverDiv,false);
			attachEventListener(elements[i],"mousemove",drawRolloverDiv,false);
			attachEventListener(elements[i],"mouseout",closeRolloverDiv,false);
		}
	}
}

//draw the div
function drawRolloverDiv(event)
{
	
	var my_div;
	if(document.getElementById("drawRolloverDiv"))
	{
		my_div = document.getElementById("drawRolloverDiv");
	}else{
		if(typeof event == "undefined")
		{
			event = window.event;
		}
		var target = getEventTarget(event);
		var classes = target.className.split(" ");
		var my_class;
		var pattern = /(params:)(.+)/;
		for(var i=0; i < classes.length; i++)
		{
			if(pattern.test(classes[i]))
			{
				my_class = classes[i];
				break;
			}
		}
		my_class = my_class.replace("params:","");
		var params=my_class.split("-");
		var html = drawPopupHTML(params);
		my_div = document.createElement("div");
		my_div.setAttribute("id", "drawRolloverDiv");
		my_div.setAttribute("className", "rollover-popup");
		my_div.innerHTML = html;
		document.body.appendChild(my_div);
	}
	
	positionRolloverDiv(my_div, event);
}

//function remove the div
function closeRolloverDiv()
{
	var my_div;
	if(document.getElementById("drawRolloverDiv"))
	{
		my_div = document.getElementById("drawRolloverDiv");
		var parent = my_div.parentNode;
		parent.removeChild(my_div);
	}
}

function positionRolloverDiv(div, event)
{	
	var positions = getCursorPosition(event);
	div.style.position = "absolute";
	div.style.left = (positions[0]) + 10 + "px";
	div.style.top = (positions[1]) + 10 + "px";
	div.setAttribute("className", "rollover-popup");
}

function drawPopupHTML(params)
{
	var html = "";
	if(params[0] != "undefined")
	{
		html += "<img src='"+params[0]+"' /><br /><br />";
	}
	return html;
}