﻿
function putInView(obj, parent) {
	if (!parent) parent = document.documentElement;
	var maxY = getPixelTop(obj) - getPixelTop(parent) + obj.clientHeight;
	var reqY = maxY - parent.clientHeight + 20;
	if (parent.scrollTop < reqY) {
		parent.scrollTop = reqY;
	}
	var objTop = getPixelTop(obj) - getPixelTop(parent);
	if (parent.scrollTop > objTop) {
		parent.scrollTop = objTop - 20;
	}
}

function getWindowSize(axis) {
	var width = 0, heigth = 0;
	if (typeof (window.innerWidth) == 'number') {
		//Non-IE
		width = window.innerWidth;
		height = window.innerHeight;
	}
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		//IE 6+ in 'standards compliant mode'
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	}
	else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
		//IE 4 compatible
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}
	if (axis == "width") return width;
	if (axis == "height") return height;
}
function getWindowWidth() { return getWindowSize("width"); }
function getWindowHeight() { return getWindowSize("height"); }


// == Hover Element == //
function hoverElement(element, props) {
	var overElement = null;
	var offsetX = 0; var upOffsetY = 0; var downOffsetY = 0;
	var sameX = false; var sameY = false;
	var absLeft = -1; var absTop = -1;
	var overMouse = null; var jQEvent = null;
	var doNotPutInView = null;
	
	if (props) {
		if (props.overElement) overElement = props.overElement;
		if (props['offsetX'] != null) offsetX = props['offsetX'];
		if (props['upOffsetY'] != null) upOffsetY = props['upOffsetY'];
		if (props['downOffsetY'] != null) downOffsetY = props['downOffsetY'];
		if (props['sameX'] != null) sameX = props['sameX'];
		if (props['sameY'] != null) sameY = props['sameY'];
		if (props.left != null) absLeft = props.left;
		if (props.top != null) absTop = props.top;
		if (props.overMouse != null) overMouse = props.overMouse;
		if (props.jQEvent != null) jQEvent = props.jQEvent;
		if (props.doNotPutInView != null) doNotPutInView = props.doNotPutInView;
	}
	
	if (!overElement && event) {
		if (event) {
			overElement = event.srcElement;
			if ($(overElement).parents('a')[0]) {
				overElement = $(overElement).parents('a')[0];
			}
		}
	}

	element.style.position = "absolute";
	element.style.display = "inherit";

	var left = absLeft;
	if (left == -1) {
		if (overMouse && jQEvent)
			left = props.jQEvent.pageX;
		else {
			left = getPixelLeft(overElement);
		}
		if (!sameX) {
			left += ($(overElement).width() / 2);
			left -= $(element).width() / 2;
		}
		if ((left + element.clientWidth) > document.documentElement.clientWidth) {
			left = document.documentElement.clientWidth - element.clientWidth - 10;
		}
		if (left < 0) left = getPixelLeft(overElement);
		left += offsetX;
	}

	if (overElement.tagName.toLowerCase() == "tr") {
		overElement = $(overElement).children("td")[0];
	}
	var top = absTop;
	if (top == -1) {
		if (overMouse && jQEvent) {
			top = jQEvent.pageY;
		}
		else {
			top = getPixelTop(overElement);
		}
		if (!sameY) {
			if ((top - document.documentElement.scrollTop) > ((document.documentElement.clientHeight - 30) / 2)) {
				top -= element.offsetHeight - upOffsetY;
				if (top <= 10) { 
					top = getPixelTop(overElement);
					top += $(overElement).height() + downOffsetY; 
				}
			}
			else {
				top += $(overElement).height() + downOffsetY;
			}
		}
		else {
			if (props.offsetY != null) {
				top += props.offsetY;
			}
		}
	}

	element.style.top = top + "px";
	element.style.left = left + "px";
	if (!doNotPutInView) putInView(element);
}



// == LOCATION ROUTINES == //
function getLocation(obj, XorY) {
	var loc = 0;
	while (obj) {
		if (XorY == "X") loc += obj.offsetLeft;
		if (XorY == "Y") loc += obj.offsetTop;
    obj = obj.offsetParent;
  }
	return loc;
}
function getPixelTop(obj) { return getLocation(obj, "Y"); }
function getPixelLeft(obj) { return getLocation(obj, "X"); }

// == VISIBILITY FUNCTIONS == //
function displayElementsByClassName(sClassName, bShow) {
	var elements = getElementsByClassName(sClassName);
	for (var L = 0; L <= elements.length - 1; L++) {
		if (!bShow)
			hideElement(elements[L]);
		else
			showElement(elements[L]);
	}
}
function displayElement(element, bShow) {
	if (bShow) {
		element.style.display = "";
		element.style.position = "";
		element.style.top = "";
		element.style.left = "";
		element.style.visibiilty = "";
		element.style.padding = "";
	}
	else {
		element.style.display = "none";
		element.style.position = "absolute";
		element.style.top = "-1000px";
		element.style.left = "-1000px";
		element.style.visibiilty = "hidden";
		element.style.height = "0px";
	}
}
function showElement(element) {
	element.style.display = "";
	element.style.position = "";
	element.style.top = "";
	element.style.left = "";
	element.style.visibiilty = "";
	element.hidden = false;
}
function hideElement(element) {
	element.style.display = "none";
	element.style.position = "absolute";
	element.style.top = "-1000px";
	element.style.left = "-1000px";
	element.style.visibiilty = "hidden";
	element.style.height = "0px";
	element.hidden = true;
}
function displayElementsByTagName(sTagName, oParent, bShow) {
	var cmbs, i, bIsChild;
	cmbs = document.getElementsByTagName(sTagName);
	for (i in cmbs) {
		if (cmbs[i].id != null) {
			bIsChild = true;
			if (oParent) bIsChild = isChild(oParent, cmbs[i]);
			if (bIsChild && bShow) cmbs[i].style.visibility = "visible";
			if (bIsChild && !bShow) cmbs[i].style.visibility = "hidden";
		}
	}
}
