
/* Element */


function Element_GetXY(ObjRefOrId)
{
	var oR = {x:0, y:0};

	var o = typeof(ObjRefOrId) == 'string' ? document.getElementById(ObjRefOrId) : ObjRefOrId;
	if(!o) return oR;


	if(o.getBoundingClientRect)
	{
		var r = o.getBoundingClientRect(), 
			x = document.documentElement.scrollLeft || document.body.scrollLeft, 
			y = document.documentElement.scrollTop || document.body.scrollTop;
		oR = {x: r.left + x - 2, y: r.top + y - 2};
	}
	else
	{
		if(document.getBoxObjectFor)
		{
			var r = document.getBoxObjectFor(o);
			oR = {x: r.x, y: r.y};
		}
		else
		{
			var p = o.offsetParent;
			if (p != o)
			{
				while (p)
				{
					oR.x += p.offsetLeft;
					oR.y += p.offsetTop;
					p=p.offsetParent;
				}
			}
		}
	}

	return oR;
}



function Element_GetWidth(ObjRefOrId)
{
	var iW, o = typeof(ObjRefOrId) == 'string' ? document.getElementById(ObjRefOrId) : ObjRefOrId;
	if(!o) return 0;

	if(o.style.display == 'none')
	{
		o.style.display = '';
		iW = o.offsetWidth;
		o.style.display = 'none';
	}
	else
		iW = o.offsetWidth;

	return iW;
}



function Element_GetHeight(ObjRefOrId)
{
	var iH, o = typeof(ObjRefOrId) == 'string' ? document.getElementById(ObjRefOrId) : ObjRefOrId;
	if(!o) return 0;

	if(o.style.display == 'none')
	{
		o.style.display = '';
		iH = o.offsetHeight;
		o.style.display = 'none';
	}
	else
		iH = o.offsetHeight;

	return iH;
}



function Element_SetWidth(ObjRefOrId, Height)
{
	var iW, o = typeof(ObjRefOrId) == 'string' ? document.getElementById(ObjRefOrId) : ObjRefOrId;
	if(!o) return;
	
	o.style.width = parseInt(Height) + 'px';
}



function Element_SetDisplay(ObjRefOrId, Show)
{
	var o = typeof(ObjRefOrId) == 'string' ? document.getElementById(ObjRefOrId) : ObjRefOrId;
	if (o) 
		o.style.display = Show ? '' : 'none';
}





/* Event */


function Event_AddListner(ObjRef, EvtName, FncRef)
{
	if(!ObjRef)return;
	if(window.attachEvent)ObjRef.attachEvent("on"+EvtName.toLowerCase(),FncRef);
	else if(window.addEventListener)ObjRef.addEventListener(EvtName.toLowerCase(),FncRef, false);
}





/* Menu */


var Menu_Obj = null;


function Menu_Show(MenuElementId, ClickedElementRef, CallbackFnc, CallbackFncParams)
{
	if(Menu_Obj)
	{
		Menu_Obj.MenuElementRef.style.display = 'none';

		if(Menu_Obj.ClickedElementRef == ClickedElementRef)
		{
			Menu_Obj = null;
			return;
		}
	}

	Menu_Obj =
	{
		ClickedElementRef:	ClickedElementRef,
		MenuElementId:		MenuElementId,
		CallbackFnc:		CallbackFnc,
		CallbackFncParams:	CallbackFncParams
	};

	var o = document.getElementById(MenuElementId);
	if(o)
	{
		Menu_Obj.MenuElementRef = o;

		var oXY = Element_GetXY(ClickedElementRef);

		o.style.display = '';
		o.style.left	= (oXY.x + Element_GetWidth(ClickedElementRef) - Element_GetWidth(o)) + 'px';
		o.style.top		= (oXY.y + Element_GetHeight(ClickedElementRef) + 10) + 'px';
		

		var f = typeof(CallbackFnc) == 'function' ? CallbackFnc : eval(CallbackFnc);

		if(typeof(f) == 'function')
		{
			f(CallbackFncParams);
		}
	}
}


function Menu_Hide(ev)
{
	if(Menu_Obj)
	{
		var t = (window.event ? window.event.srcElement : (ev ? ev.target : null));
		
		if (t == Menu_Obj.ClickedElementRef) return;

		if(Menu_Obj.MenuElementRef)
			Menu_Obj.MenuElementRef.style.display = 'none';

		Menu_Obj = null;
	}
}


function Menu_AddBodyClickHandler()
{
	Event_AddListner(window.document.body, 'click', Menu_Hide);
}


Event_AddListner(window, 'load', Menu_AddBodyClickHandler);





/* PopUp Window */


function PopUp_Open(URL, Width, Height)
{
	var w = screen.availWidth, h = screen.availHeight, l = 0, t = 0;
	
	l = Math.round((w-Width-10)/2);
	t = Math.round((h-Height-30)/2);

	window.open(URL,'PopUpWindow', "width="+Width+",height="+Height+",left="+l+",top="+t+",location=0,menubar=0,resizable=1,scrollbars=1,status=1,toolbar=0");
}





/* Cookies */


function Cookie_Get(sName)
{
	var i, v = document.cookie.split(';'), vT;
	
	for (i = 0; i < v.length; i++)
	{
		vT = v[i].split(sName + '=');	if (vT.length > 1) return vT[1];
	}

	return null;
}

function Cookie_Set(sName, sValue, iSeconds)
{
	var sE = "";

	if (iSeconds)
	{
		var d = new Date();
		d.setTime(d.getTime() + iSeconds * 1000);
		sE = '; expires=' + d.toGMTString();
	} 

	document.cookie = sName + '=' + sValue + sE + '; path=/';
}

function Cookie_Delete(sName)
{
	Cookie_Set(sName, '', -1);
}

/* CSS Class */

function addClassName(oElm, strClassName) {
    var strCurrentClass = oElm.className;
    if (!new RegExp(strClassName, "i").test(strCurrentClass)) {
        oElm.className = strCurrentClass + ((strCurrentClass.length > 0) ? " " : "") + strClassName;
    }
}


function removeClassName(oElm, strClassName) {
    var oClassToRemove = new RegExp((strClassName + "\s?"), "i");
    oElm.className = oElm.className.replace(oClassToRemove, "").replace(/^\s?|\s?$/g, "");
}
function AttachClick(sName)
{
    var o = document.getElementById("info1");
    if (o)
    {
        o.onmouseover = function() {
            addClassName(this, "hover");
        }
        o.onmouseout = function() {
            removeClassName(this, "hover");
        }
        o.onclick = function() {
        var links = this.getElementsByTagName("a");
        if (links)
            {
                window.location = links[0].href;
            }
        }
    }
}



/* String */

function String_Trim(s)
{
	return typeof(s) == 'undefined' ? '' : s.toString().replace(/^\s+|\s+$/g, '');
}


/* Email */

function CheckEmailAddress(field)
{
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	var goodEmail = filter.test(field);
	return goodEmail
}

/* date validation */

var minYear = 1900;
function daysInFebruary (year){
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
