// Rollover Tip
// v01

function getElem (elem) {
	if(typeof elem == 'object') {
		return elem;
	} else if(typeof elem != 'string') {
		return false;
	} else if(document.getElementById) {
		 return document.getElementById(elem);
	} else {
		return false;
	}
}

function getElementsByClassName (oClassNames, strTagName, oElm) {
    if (typeof strTagName != 'string') { strTagName = '*'; }
    oElm = (typeof oElm != 'undefined') ? getElem(oElm) : document;
	var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object") {
		for(var i=0; i<oClassNames.length; i++) {
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	} else {
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j = 0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k = 0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;                      
			}
        }
        if(bMatchesAll) {
            arrReturnElements.push(oElement);
        }
	}
	return (arrReturnElements);
}

function getPageScroll () {
	var a = new Array();
	if (typeof self.pageXOffset == 'number') {
		a['x'] = self.pageXOffset;
		a['y'] = self.pageYOffset;
	} else if (	(typeof document.compatMode == 'string') &&
				(document.compatMode.indexOf('CSS') >= 0) &&
				(document.documentElement) &&
				(typeof document.documentElement.scrollLeft == 'number')) {
		a['x'] = document.documentElement.scrollLeft;
		a['y'] = document.documentElement.scrollTop;
	} else if (	(document.body) &&
				(typeof document.body.scrollLeft == 'number')) {
		a['x'] = document.body.scrollLeft;
		a['y'] = document.body.scrollTop;
	}
	return a;
}

function getPageSize () {

	var w = getWindowSize();
	var p = new Array();

	if (window.innerHeight && window.scrollMaxY) {	
		p['width'] = document.body.scrollWidth;
		p['height'] = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight) {
		p['width'] = document.body.scrollWidth;
		p['height'] = document.body.scrollHeight;
	} else {
		p['width'] = document.body.offsetWidth;
		p['height'] = document.body.offsetHeight;
	}

	//if(p['width'] < w['width']) {	
	//	p['width'] = w['width'];
	//}

	p['width'] = Math.max(p['width'], w['width']);

	//if(p['height'] < w['height']) {
	//	p['height'] = w['height'];
	//}

	p['height'] = Math.max(p['height'], w['height']);

	return p;

}

function getWindowSize () {
	var a = new Array();
	if (self.innerHeight) {
		a['width'] = self.innerWidth;
		a['height'] = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		a['width'] = document.documentElement.clientWidth;
		a['height'] = document.documentElement.clientHeight;
	} else if (document.body) {
		a['width'] = document.body.clientWidth;
		a['height'] = document.body.clientHeight;
	}
	return a;
}

function getElemOffset (elem, loc) {
	var offset = (loc == 'left') ? elem.offsetLeft : elem.offsetTop;
	if (!offset) { return 0; }
	elemParent = elem.offsetParent;
	while (elemParent != null) {
		offset = (loc == 'left') ? offset + elemParent.offsetLeft : offset + elemParent.offsetTop;
		elemParent = elemParent.offsetParent;
	}
	return offset;
}

function rolloverTipShow (event) {

	objClick = getEventTarget(event);
	if(!objClick) { return true; }
	var objTipShow = document.getElementById('rollover-tip-show');
	if(!objTipShow) { return true; }
	if(objTipShow.style.display == 'block') { return false; }
	var objTipText = getElementsByClassName('message', null, objClick.parentNode);
	if(!objTipText) { return true; }
	objTipText = objTipText[0];

 	objTipShow.style.visibility = 'hidden';
 	objTipShow.style.display = 'block';
	objTipShow.innerHTML = '';
	objTipShow.appendChild(objTipText.cloneNode(true));

	var a = new Array();
	var s = getPageScroll();
	var w = getWindowSize();
	a['top'] = getElemOffset(objClick, 'top') + objClick.offsetHeight - objTipShow.offsetHeight;
	a['top'] = Math.max(a['top'], s['y'] + 5);
	a['left'] = getElemOffset(objClick, 'left') - objTipShow.offsetWidth - 7;
	objTipShow.style.left = a['left'] + 'px';
	objTipShow.style.top = a['top'] + 'px';

	objTipShow.style.visibility = 'visible';

}

function rolloverTipHide (event) {
	objClick = getEventTarget(event);
	event = getEvent(event);
	if(event && (event.type == 'mouseout')) {
		var pos = new Array();
		pos['left'] = getElemOffset(objClick, 'left');
		pos['top'] = getElemOffset(objClick, 'top');
		pos['right'] = pos['left'] + objClick.offsetWidth;
		pos['bottom'] = pos['top'] + objClick.offsetHeight;
		if(	(event.clientX > pos['left']) &&
			(event.clientX < pos['right']) &&
			(event.clientY > pos['top']) &&
			(event.clientY < pos['bottom']) ) {
			return true;
		}
	}
	var objTipShow = document.getElementById('rollover-tip-show');
	if (objTipShow) {
		objTipShow.style.display = 'none';
	}
	stopEvent(event);
	return false;
}

function rolloverTipShowHide (event) {
	objClick = getEventTarget(event);
	var objTipShow = document.getElementById('rollover-tip-show');
	if(!objTipShow) { return true; }
	if(objTipShow.style.display == 'none') {
		rolloverTipShow(objClick, event);
	} else {
		rolloverTipHide(objClick, event);
	}
	return false;
}

function rolloverTipInit () {
	var objTipShow = document.getElementById('rollover-tip-show');
	if(!objTipShow) { return; }
	var elems = getElementsByClassName('rollover-tip');
	if(!elems) { return; }
	for(var i in elems) {
		var objLink = getElementsByClassName('rollover-tip-link', null, elems[i]);
		if(objLink) {
			objLink = objLink[0];
			objLink.onmouseover = function(event){rolloverTipShow(event,this); return false;};
			objLink.onmouseout = function(event){rolloverTipHide(event,this); return false;};
			objLink.onclick = function(event){rolloverTipHide(event,this); return false;};
			//objLink.href = '#';
			objTipShow.onclick = function(event){rolloverTipShowHide(event,this); return false;};
			objTipShow.onmouseout = function(event){rolloverTipHide(event,this); return false;};
		}
	}
}

function getEventTarget (event) {
	event = getEvent(event);
	var target = (event.target) ? event.target : event.srcElement;
	if(target && (target.nodeType == 3 || target.nodeType == 4)) {
		target = target.parentNode;
	}
	return target;
}

function getEvent (event) {
	return (event) ? event : window.event;
}

function stopEvent (event) {
	event = getEvent(event);
	if (event.preventDefault) {
		event.preventDefault();
		event.stopPropagation();
	} else {
		event.returnValue = false;
		event.cancelBubble = true;
	}
}

function addEvent (elem, eventType, func) { 
	if (elem.addEventListener) { 
		elem.addEventListener(eventType, func, false); 
		return true; 
	} else if (elem.attachEvent) { 
		return elem.attachEvent('on' + eventType, func); 
	} else { 
		return false; 
	} 
}

function addLoadEvent (func) {
	if (!(document.getElementById && document.createTextNode)) { return; }
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload =	function(){if(oldonload){oldonload();}func();}
	}
}

addLoadEvent(rolloverTipInit);

