if (window.Event)
{
	window.Event.pointerX = function(event)
	{
    	try
    	{
    		return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
    	}
    	catch(e)
    	{
    	}
  	};

	window.Event.pointerY = function(event)
	{
		try
		{
			return event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop));
		}
		catch(e)
		{
		}
	};
}

function gotoURL(url, target, callback)
{
	if (!url)
	{
		url = "/";
	}

	if ('function' == typeof callback)
	{
		callback(url);
	}

	if(target && '_self' != target)
	{
		popupURL(url, target);
	}
	else
	{
		if (window.event)
		{
			var src = window.event.srcElement;
			if (('A' != src.tagName) && (('IMG' != src.tagName) || ('A' != src.parentElement.tagName)))
			{
				if (window.event.shiftKey)
				{
					window.open(url);
				}
				else
				{
					document.location = url;
				}
			}
		}
		else
		{
			document.location = url;
		}
	}
}

function popupURL(url, target)
{
	window.open(url, target);
}

function getLeftPos(obj)
{
	var res = 0;
	while (obj)
	{
		res += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return res;
}

function getTopPos(obj)
{
	var res = 0;
	while (obj)
	{
		res += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return res;
}


function mm_act(obj, img, cl, num, selected)
{
	obj.selected = selected;
	if ('act' == cl)
	{
		showMenu(obj, num);
	}
	else
	{
		hideMenu(obj, num);
	}
	if (selected)
	{
		return;
	}
}

function mm_highlight(obj, act)
{
	if (obj.selected)
	{
		return;
	}
	if (act)
	{
		cl = obj.classAct;
	}
	else
	{
		cl = obj.classInact;
	}

	if ( 'undefined' == typeof cl)
	{
		return;
	}

	while (obj)
	{
		obj = obj.parentNode;
		if (obj && 'LI' == obj.tagName)
		{
			//alert(a.href+': '+cl);
			obj.className = cl;
			break;
		}
	}
}
function verifyPasswordStrength(passwd)
{
	var intLevel = 0;
	var intLen = passwd.length;

	// regular expressions
	var lc = /^([a-z]*)$/; //lowercase letters
	var uc = /^([A-Z]*)$/; //uppercase letters
	var uclc = /^([A-Za-z]*)$/; //upper & lower case letters
	var nm = /^([0-9]*)$/; //numbers
	var lcnm = /^([a-z0-9]*)$/; //lower-case letters and numbers
	var ucnm = /^([A-Z0-9]*)$/; //upper-case letters and numbers
	var uclcnm = /^([A-Za-z0-9]*)$/; //upper- and lower-case letters and numbers

	if (0 == intLen)
	{
		return 0;
	}

	if (passwd.match(nm))
	{
		if (intLen < 6)
		{
			intLevel = 1;
		}
		else if (intLen > 5 && intLen < 8)
		{
			intLevel = 2;
		}
		else {
			intLevel = 3;
		}
	}
	else if (passwd.match(lc))
	{
		if (intLen < 6)
		{
			intLevel = 1;
		}
		else if (intLen > 5 && intLen < 8)
		{
			intLevel = 2;
		}
		else {
			intLevel = 3;
		}
	}
	else if (passwd.match(uclc))
	{
		if (intLen < 6)
		{
			intLevel = 1;
		}
		else if (intLen > 5 && intLen < 8)
		{
			intLevel = 3;
		}
		else {
			intLevel = 3;
		}
	}
	else if (passwd.match(lcnm))
	{
		if (intLen < 6)
		{
			intLevel = 2;
		}
		else if (intLen > 5 && intLen < 8)
		{
			intLevel = 3;
		}
		else {
			intLevel = 4;
		}
	}
	else if (passwd.match(ucnm))
	{
		if (intLen < 6)
		{
			intLevel = 2;
		}
		else if (intLen > 5 && intLen < 8)
		{
			intLevel = 4;
		}
		else {
			intLevel = 5;
		}
	}
	else if (passwd.match(uclcnm))
	{
		if (intLen < 6)
		{
			intLevel = 3;
		}
		else if (intLen > 5 && intLen < 8)
		{
			intLevel = 5;
		}
		else {
			intLevel = 6;
		}
	}

	return intLevel;
}

(getBaseUrl = function (type)
{
	type = type || 'baseRootUrl';

	if ('undefined' == typeof window['baseUrl'])
	{
		var bases = document.getElementsByTagName('base');
		var base;
		if (0 < bases.length)
		{
			base = bases[bases.length - 1].href;
		}
		else
		{
			base = document.location.href
		}
		window['baseRootUrl'] = window['baseUrl'] = base.substr(0, base.lastIndexOf('/') + 1);
		var k = 0, s = 0;
		while (0 < (s = base.indexOf('/', s) + 1) && 2 > k++);
		if (0 < s && 3 == k)
		{
			window['baseRootUrl'] = base.substr(0, s);
		}
		var links = document.getElementsByTagName('link');
		for (k = 0; k < links.length; k++)
		{
			if ('start' == links[k].rel)
			{
				window['appRootUrl'] = links[k].href;
			}
			else if ('section' == links[k].rel)
			{
				window['appParentUrl'] = links[k].href;
			}
		}
	}
	return window[type];
}).call(window);

String.prototype.sprintf = function () {
	var fstring = this.toString();

	var pad = function(str,ch,len) { var ps='';
			for(var i=0; i<Math.abs(len); i++) {
			ps+=ch;
		}
			return len>0?str+ps:ps+str;
	};
	var processFlags = function(flags,width,rs,arg) {
			var pn = function(flags,arg,rs) {
					if(arg>=0) {
							if(flags.indexOf(' ')>=0) {
					rs = ' ' + rs;
				} else if(flags.indexOf('+')>=0) {
					rs = '+' + rs;
				}
					} else {
							rs = '-' + rs;
			}
					return rs;
			};
			var iWidth = parseInt(width,10);
			if(width.charAt(0) == '0') {
					var ec=0;
					if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) {
				ec++;
			}
					if(rs.length<(iWidth-ec)) {
				rs = pad(rs,'0',rs.length-(iWidth-ec));
			}
					return pn(flags,arg,rs);
			}
			rs = pn(flags,arg,rs);
			if(rs.length<iWidth) {
					if(flags.indexOf('-')<0) {
				rs = pad(rs,' ',rs.length-iWidth);
			} else {
				rs = pad(rs,' ',iWidth - rs.length);
			}
			}
			return rs;
	};
	var converters = [];
	converters.c = function(flags,width,precision,arg) {
			if (typeof(arg) == 'number') {
			return String.fromCharCode(arg);
		} else if (typeof(arg) == 'string') {
			return arg.charAt(0);
		} else {
			return '';
		}
	};
	converters.d = function(flags,width,precision,arg) {
			return converters.i(flags,width,precision,arg);
	};
	converters.u = function(flags,width,precision,arg) {
			return converters.i(flags,width,precision,Math.abs(arg));
	};
	converters.i =  function(flags,width,precision,arg) {
			var iPrecision=parseInt(precision, 10);
			var rs = ((Math.abs(arg)).toString().split('.'))[0];
			if(rs.length<iPrecision) {
			rs=pad(rs,' ',iPrecision - rs.length);
		}
			return processFlags(flags,width,rs,arg);
	};
	converters.E = function(flags,width,precision,arg) {
			return (converters.e(flags,width,precision,arg)).toUpperCase();
	};
	converters.e = function(flags,width,precision,arg) {
			iPrecision = parseInt(precision, 10);
			if(isNaN(iPrecision)) {
			iPrecision = 6;
		}
			rs = (Math.abs(arg)).toExponential(iPrecision);
			if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) {
			rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
		}
			return processFlags(flags,width,rs,arg);
	};
	converters.f = function(flags,width,precision,arg) {
			iPrecision = parseInt(precision, 10);
			if(isNaN(iPrecision)) {
			iPrecision = 6;
		}
			rs = (Math.abs(arg)).toFixed(iPrecision);
			if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) {
			rs = rs + '.';
		}
			return processFlags(flags,width,rs,arg);
	};
	converters.G = function(flags,width,precision,arg) {
			return (converters.g(flags,width,precision,arg)).toUpperCase();
	};
	converters.g = function(flags,width,precision,arg) {
			iPrecision = parseInt(precision, 10);
			absArg = Math.abs(arg);
			rse = absArg.toExponential();
			rsf = absArg.toFixed(6);
			if(!isNaN(iPrecision)) {
					rsep = absArg.toExponential(iPrecision);
					rse = rsep.length < rse.length ? rsep : rse;
					rsfp = absArg.toFixed(iPrecision);
					rsf = rsfp.length < rsf.length ? rsfp : rsf;
			}
			if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) {
			rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
		}
			if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) {
			rsf = rsf + '.';
		}
			rs = rse.length<rsf.length ? rse : rsf;
			return processFlags(flags,width,rs,arg);
	};
	converters.o = function(flags,width,precision,arg) {
			var iPrecision=parseInt(precision, 10);
			var rs = Math.round(Math.abs(arg)).toString(8);
			if(rs.length<iPrecision) {
			rs=pad(rs,' ',iPrecision - rs.length);
		}
			if(flags.indexOf('#')>=0) {
			rs='0'+rs;
		}
			return processFlags(flags,width,rs,arg);
	};
	converters.X = function(flags,width,precision,arg) {
			return (converters.x(flags,width,precision,arg)).toUpperCase();
	};
	converters.x = function(flags,width,precision,arg) {
			var iPrecision=parseInt(precision, 10);
			arg = Math.abs(arg);
			var rs = Math.round(arg).toString(16);
			if(rs.length<iPrecision) {
			rs=pad(rs,' ',iPrecision - rs.length);
		}
			if(flags.indexOf('#')>=0) {
			rs='0x'+rs;
		}
			return processFlags(flags,width,rs,arg);
	};
	converters.s = function(flags,width,precision,arg) {
			var iPrecision=parseInt(precision, 10);
			var rs = arg;
			if(rs.length > iPrecision) {
			rs = rs.substring(0,iPrecision);
		}
			return processFlags(flags,width,rs,0);
	};

	farr = fstring.split('%');
	retstr = farr[0];
	fpRE = /^([-+ #]*)(?:(\d*)\$|)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
	for(var i = 1; i<farr.length; i++) {
			fps=fpRE.exec(farr[i]);
			if(!fps) {
			continue;
		}
		var my_i = fps[2] ? fps[2] : i;
			if(arguments[my_i-1] || !isNaN(arguments[my_i-1]) ) {
					retstr+=converters[fps[5]](fps[1],fps[3],fps[4],arguments[my_i-1]);
			}
			retstr += fps[6];
	}
	return retstr;
};

function setClass(obj, cl)
{
	if (obj.className != cl)
	{
		obj.className = cl;
	}
}

function chbCheckAll(formObj, checkName, checkVal){
	var el = formObj.elements;
	for (count = 0; count < el.length; count++)
		if (el[count].name == checkName + '[]')
			if (!el[count].disabled) el[count].checked = checkVal;
}


function chbExamAll(formObj, checkName, resName){
	var checkCount = 0;
	var boxCount = 0;
	var el = formObj.elements;
	for (count = 0; count < el.length; count++)
		if (el[count].name == checkName + '[]'){
			boxCount++;
			if (el[count].checked || el[count].disabled) checkCount++;
		}
	formObj.elements[resName].checked = (checkCount == boxCount);
}

function chbIsAllEmpty(formObj, checkName){
	var checkCount = 0;
	var boxCount = 0;
	var el = formObj.elements;
	for (count = 0; count < el.length; count++)
		if (el[count].name == checkName + '[]'){
			boxCount++;
			if (el[count].checked) checkCount++;
		}
	return(checkCount == 0);
}

function chbIsOnlyOne(formObj, checkName){
	var checkCount = 0;
	var boxCount = 0;
	var el = formObj.elements;
	for (count = 0; count < el.length; count++){
		if (el[count].name == checkName + '[]'){
			boxCount++;
			if (el[count].checked) checkCount++;
		}
	}
	return(checkCount == 1);
}

// name - cookie name
// value - cookie value
// [expires] - Date object (by default cookie expires at the end of browser session)
// [path]
// [domain]
// [secure]
function setCookie(name, value, expires, path, domain, secure)
{
	var curCookie = name + "=" + escape(value) +
								((expires) ? "; expires=" + expires.toGMTString() : "") +
								((path) ? "; path=" + path : "") +
								((domain) ? "; domain=" + domain : "") +
								((secure) ? "; secure" : "")

	//alert(curCookie);
	if ((name + "=" + escape(value)).length <= 4000)
	{
		document.cookie = curCookie;
	}
}

// name - cookie name
function getCookie(name)
{
				var prefix = name + "="
				var cookieStartIndex = document.cookie.indexOf(prefix)
				if (cookieStartIndex == -1)
								return null
				var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
				if (cookieEndIndex == -1)
								cookieEndIndex = document.cookie.length
				return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}

// name - cookie name
// [path]
// [domain]
function deleteCookie(name, path, domain)
{
	if (getCookie(name))
	{
		document.cookie = name+"="+
								((path) ? "; path=" + path : "") +
								((domain) ? "; domain=" + domain : "") +
								"; expires=Thu, 01-Jan-70 00:00:01 GMT"
	}
}
