/* crossbrowser getElementById() function */
//if(typeof window.Get_DOM_Node == "undefined") {
	window.Get_DOM_Node = window.__$ = document.all ? function(n){return document.all[n]} : (document.getElementById ? (function(n){return document.getElementById(n)}) : null);
//}

function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

// ------------------------------

/*
	To be compatible with Mozilla FireFox function which works with object "event"
	should receive it obviously by reference in argument list.
	Example: onmousemove="Get_MouseCoords(event);"
*/
function Get_MouseCoords(evt) {
	var evt = evt||window.event;
	var x = evt.x || evt.clientX;
	var y = evt.y || evt.clientY;
	return [x, y];
}
function Get_MouseCoord_X(event) {
	var coords = Get_MouseCoords(event);
	return coords[0];
}
function Get_MouseCoord_Y(event) {
	var coords = Get_MouseCoords(event);
	return coords[1];
}
// ------------------------------

function Find_AbsoluteDocObjCoords(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft, curtop];
}
function Find_AbsoluteDocObjCoord_X(obj) {
	var coords = Find_AbsoluteDocObjCoords(obj);
	return coords[0];
}
function Find_AbsoluteDocObjCoord_Y(obj) {
	var coords = Find_AbsoluteDocObjCoords(obj);
	return coords[1];
}
// ------------------------------

function Trim_Str (str) {
	return trim(str, false);
}
// used for compability with php form class
function trim(s, p) {
	if (typeof s != 'string') {
		return s;
	}
	return s.replace(p ? p : /^\s*|\s*$/g, '');
}
function stripTags(str) {
	return str.replace(/(<([^>]*)>)/g, '');
}
// ------------------------------

function Change_LayerVisibility(id, forceOpen, forceClose) {
	var layer = Get_DOM_Node(id); if (!layer) return false;

	if ((Check_LayerVisibility(layer) === 'hidden' && !forceClose) || forceOpen) {
		//layer.style.visibility = 'visible';
		layer.style.display = 'block';
	}
	else if ((Check_LayerVisibility(layer) === 'visible' && !forceOpen) || forceClose) {
		//layer.style.visibility = 'hidden';
		layer.style.display = 'none';
	}
	return false;
}

function Check_LayerVisibility(layer) {

	if (typeof(layer) == 'string'){layer = Get_DOM_Node(layer);}
	else if(typeof(layer) != 'object') {return 'undef';}

	//if (layer.style.visibility == '') layer.style.visibility = Get_ElementCurrentStyle(layer, 'visibility');
	if (layer.style.display == '') layer.style.display = Get_ElementCurrentStyle(layer, 'display');

	//if (layer.style.visibility == 'hidden' && layer.style.display == 'none') {
	if (layer.style.display == 'none') {
		return 'hidden';
	}
	//else if (layer.style.visibility == 'visible' && layer.style.display == 'block') {
	else if (layer.style.display == 'block') {
		return 'visible';
	}
	return 'undef';
}

function Get_ElementCurrentStyle(element, CssStyleProperty) {
	if (!element) return false;
	if (element.currentStyle) {
		return element.currentStyle[CssToJavascriptStyle(CssStyleProperty)];
	}else if (window.getComputedStyle) {
		var compStyle = window.getComputedStyle(element, '');
		return compStyle.getPropertyValue(CssStyleProperty);
	}else {
		return '';
	}
}

function CssToJavascriptStyle(CssProperty) {
	var stringArray = CssProperty.toLowerCase().split('-');
	if (stringArray.length == 1) {
		return stringArray[0];
	}
	var ret = (CssProperty.indexOf("-") == 0) ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1) : stringArray[0];
	for (var i = 1; i < stringArray.length; i++) {
		var s = stringArray[i];
		ret += s.charAt(0).toUpperCase() + s.substring(1);
	}
	return ret;
};
// ------------------------------

/* Fire Events function */

var isBrowsMSIE = document.attachEvent != null;
var isBrowsGecko = !document.attachEvent && document.addEventListener;

/* Crossbrowser attachEvent | addEventListener */
function Attach_EventListener(element, action, callback, capture) {
	capture = (capture) ? true : false;
	element = (element) ? element : document;
	if (isBrowsMSIE && element.attachEvent) {
			element.attachEvent("on"+action, callback);
	}
	else if (isBrowsGecko && element.addEventListener) {
		element.addEventListener(action, callback, capture);
	}
}
/* Crossbrowser attachEvent | addEventListener */
function Detach_EventListener(element, action, callback, capture) {
	capture = (capture) ? true : false;
	element = (element) ? element : document;
	if (isBrowsMSIE && element.detachEvent) {
		element.detachEvent("on"+action, callback);
	}
	else if (isBrowsGecko && element.removeEventListener) {
		element.removeEventListener(action, callback, capture);
	}
}

/* Crossbrowser stop event propogation */
function Cancel_EventPropagation(element, event, cancelDefault, cancelPropogation) {

	cancelPropogation = (cancelPropogation === false) ? false : true;
	cancelDefault = (cancelDefault === false) ? false : true;

	if (isBrowsMSIE) {
		if (element) {
			if (element.returnValue) {
				if (cancelDefault) element.returnValue = false;
			}
			if (element.cancelBubble) {
				if (cancelPropogation) element.cancelBubble = true;
			}
		}
		if (cancelDefault) window.event.returnValue = false;
		if (cancelPropogation) window.event.cancelBubble = true;
	}
	else if (isBrowsGecko && event) {
		if (element) {
			if (element.preventDefault) {
				if (cancelDefault) element.preventDefault();
			}
			if (element.stopPropagation) {
				if (cancelPropogation) element.stopPropagation();
			}
		}
		if (cancelDefault) event.preventDefault();
		if (cancelPropogation) event.stopPropagation();
	}
}

// ------------------------------