﻿var onLoadFuncs = null;
var onKeyDownFnHandler = null;
var onKeyUpFnHandler = null;
var onClickHandler = null;

function addOnLoadFunc(func) {
	if (onLoadFuncs == null) {
		onLoadFuncs = new Array();
	}
	onLoadFuncs[onLoadFuncs.length] = func;
}

function execOnLoadFuncs() {
	if (onLoadFuncs != null) {
		for (var i = 0; i < onLoadFuncs.length; i++) {
			try {
				var func = onLoadFuncs[i];
				if (func != null) {
					func();
				}
			}
			catch (ex) {
				alert('JS Exception in function ' + func + ': ' + ex.message);
			}
		}
	}
}

function checkKBUp(evnt) {
	if (onKeyUpFnHandler != null) {
		try {
			return onKeyUpFnHandler(evnt.shiftKey, evnt.keyCode);
		}
		catch (ex) {
			return true;
		}
	}
}

function checkKBDown(evnt) {
	if (onKeyDownFnHandler != null) {
		try {
			return onKeyDownFnHandler(evnt.shiftKey, evnt.keyCode);
		}
		catch (ex) {
			return true;
		}
	}
}

function fnTrapKP() {
	if (document.all) {
		if (event.keyCode == 13) {
			event.returnValue = false;
			event.cancelBubble = true;
		}
	}
}

function checkOnClick(evnt) {
	if (onClickHandler != null) {
		try {
			return onClickHandler(evnt);
		}
		catch (ex) {
			return true;
		}
	}
}

function initEvents() {
	if (window.addEventListener) {
		window.addEventListener("load", execOnLoadFuncs, false);
	}
	else if (window.attachEvent) {
		window.attachEvent("onload", execOnLoadFuncs);
	}

	var body = document.getElementsByTagName("body");
	if (body.length) {
		body[0].onclick = function() { return checkOnClick(event) };
		body[0].onkeyup = function() { return checkKBUp(event) };
		body[0].onkeydown = function() { return checkKBDown(event) };
	}
}

function getposOffset(what, offsettype) {
	var scroll = (offsettype.indexOf('Left') >= 0) ? what.scrollLeft : -what.scrollTop;
	return (what.offsetParent) ? (what[offsettype] - scroll) + this.getposOffset(what.offsetParent, offsettype) : what[offsettype];
}

function getScrollableParent(what) {
	var parent = what.offsetParent;
	if (parent != null) {
		if (parent.tagName == 'BODY' || parent.tagName == 'body') {
			return parent;
		}
		if (parent.tagName == 'DIV' || parent.tagName == 'div') {
			if ($(parent).css('overflow') == 'auto') return parent;
			
		}
		return getScrollableParent(parent);
	}
	else {
		return what;
	}
}

function getIsParent(what, parent) {
	var parentNode = what.parentNode;
	if (!parentNode) {
		return false;
	}
	else if (parentNode.tagName == 'BODY') {
		return parent.tagName == 'BODY';
	}
	else if (parentNode == parent) {
		return true;
	}
	else {
		return getIsParent(parentNode, parent);
	}
}
    
function getScrollSize(isWidth) {
	if (self.pageYOffset) {
		return isWidth ? self.pageXOffset : self.pageYOffset;
	}
	else if (document.documentElement) {
		if (isWidth && document.documentElement.scrollLeft) {
			return document.documentElement.scrollLeft;
		}
		if (!isWidth && document.documentElement.scrollTop) {
			return document.documentElement.scrollTop;
		}
	}
	else if (document.body) {
		return isWidth ? scrollLeft : document.body.scrollTop;
	}
	return 0;
}

function getViewportSize(isWidth) {
    if (window.innerHeight != window.undefined) {
        return isWidth ? window.innerWidth : window.innerHeight ;
    }    
    if (document.compatMode == 'CSS1Compat') {
        return isWidth ? document.documentElement.clientWidth : document.documentElement.clientHeight;
    }
    if (document.body) {
    	return isWidth ? document.body.clientWidth : document.body.clientHeight;
    }
    return window.undefined;
}

initEvents();
evt = ''; // Defeat the Chrome bug

