//<![CDATA[


// check for msie
var MSIE = (navigator.appName.toLowerCase().indexOf("microsoft")>-1) ? true : false;
// used by function 'leftPosition' in case of msie 
var MSIE_LEFTSHIFT = 200;
var MSIE_TOPSHIFT = 155;

var MSGTIMER = 20;
// how fast to appear and disappear
var MSGSPEED = 20;
// extra width
var MSGOFFSET = 3;
// time displaying in seconds
var MSGHIDE = 6;

	// build the divs, set attributes and call the fade function //

	function errorInfoMsg(target, string, displayDivIdPrefix, x, y, wdth, hght, autohide) {
		var msg;
		var msgcontent;
		if( ( string == null || string.length == 0 ) || 
				(!document.getElementById(target) && (x==null || y==null) ) ) 
				{
			alert("Missing params for js function 'errorInfoMsg'\nSet either valid 'target' or string or 'x' and 'y'");
			return false;
		}
		if (displayDivIdPrefix==null || displayDivIdPrefix == '') {
			displayDivIdPrefix = 'errorSmallView';
		}
		if(!document.getElementById(displayDivIdPrefix+'Msg')) {
			msg = document.createElement('div');
			msg.id = displayDivIdPrefix+'Msg';
			msgcontent = document.createElement('div');
			msgcontent.id = displayDivIdPrefix+'Content';
			document.body.appendChild(msg);
			msg.appendChild(msgcontent);
			msg.style.filter = 'alpha(opacity=0)';
			msg.style.opacity = 0;
			msg.alpha = 0;
		} 
		else {
			msg = document.getElementById(displayDivIdPrefix+'Msg');
			msgcontent = document.getElementById(displayDivIdPrefix+'Content');
		}
		msgcontent.innerHTML = string;
		msg.style.display = 'block';
		var msgheight = msg.offsetHeight;
		if(document.getElementById(target)) {
			var targetdiv = document.getElementById(target);
			targetdiv.focus();
			var targetheight = targetdiv.offsetHeight;
			var targetwidth = targetdiv.offsetWidth;
		}
		var topposition = (y!=null) ? y : topPosition(targetdiv) - ((msgheight - targetheight) / 2);
		var leftposition = (x!=null) ? x : leftPosition(targetdiv) + targetwidth;
		topposition = Math.floor(topposition);
		leftposition = Math.floor(leftposition);
		msg.style.top = topposition + 'px';
		msg.style.left = leftposition + 'px';
		if (wdth != null) {
			msg.style.width = wdth + 'px';
		}
		if (hght != null ) {
			msg.style.height = hght + 'px';
		}
		clearInterval(msg.timer);
		msg.timer = setInterval("fadeMsg(1, '"+displayDivIdPrefix+"')", MSGTIMER);
		if(!autohide) {
			autohide = MSGHIDE;  
		}
		window.setTimeout("hideMsg('"+displayDivIdPrefix+"')", (autohide * 1000));
	}
	
	function hideMsg(displayDivIdPrefix) {
		var msg = document.getElementById(displayDivIdPrefix+'Msg');
		if(!msg.timer) {
			msg.timer = setInterval("fadeMsg(0, '"+displayDivIdPrefix+"')", MSGTIMER);
		}
	}

	// fade the message box //
	function fadeMsg(flag, displayDivIdPrefix) {
		if(flag == null) {
			flag = 1;
		}
		var msg = document.getElementById(displayDivIdPrefix+'Msg');
		var value;
		if(flag == 1) {
			value = msg.alpha + MSGSPEED;
		} 
		else {
			value = msg.alpha - MSGSPEED;
		}
		msg.alpha = value;
		msg.style.opacity = (value / 100);
		msg.style.filter = 'alpha(opacity=' + value + ')';
		if(value >= 99) {
			clearInterval(msg.timer);
			msg.timer = null;
		} 
		else if(value <= 1) {
			msg.style.display = "none";
			clearInterval(msg.timer);
		}
	}

	/**
	 * calculate the position of the element in 
	 * relation to the left of the browser
	 */
	function leftPosition(target) {
		var left = 0;
		if(target.offsetParent) {
			while(1) {
				left += target.offsetLeft;
				if(!target.offsetParent) {
					break;
				}
				target = target.offsetParent;
			}
		} else if(target.x) {
			left += target.x;
		}
		if ( MSIE ) {
			// left shift for MSIE
			return left;// - MSIE_LEFTSHIFT;	
		}
		return left;
	}
	
	/** 
	 * calculate the position of the element in 
	 * relation to the top of the browser window 
	 */
	function topPosition(target) {
		var top = 0;
		if(target.offsetParent) {
			while(1) {
				top += target.offsetTop;
				if(!target.offsetParent) {
					break;
				}
				target = target.offsetParent;
			}
		} else if(target.y) {
			top += target.y;
		}
		if ( MSIE ) {
			// top shift for MSIE
			return top - MSIE_TOPSHIFT;	
		}
		return top;
	}

	/**
	 * clears the error divs
	 **/ 
	function resetErrors() {
		var errorDivs = document.getElementsByTagName('div');
		for (j=0; j<errorDivs.length; j++) {
			if (errorDivs[j].id && errorDivs[j].id.indexOf('_error')>-1) {
				if (errorDivs[j].innerHTML.length > 0) {
					errorDivs[j].innerHTML = '';
					var inputFieldKey = errorDivs[j].id.substring(0, errorDivs[j].id.lastIndexOf('_'));
					document.getElementById(inputFieldKey).style.backgroundColor = 'white';
				}
			}
		}	
	}

	/**
	 * sets the error divs
	 **/ 
	function setInputError(targetDiv, errorTxt) {
		if (document.getElementById(targetDiv) && document.getElementById(targetDiv + '_error') ) {
			document.getElementById(targetDiv + '_error').innerHTML = errorTxt+'<br/>';
			document.getElementById(targetDiv).style.background = 'orange';
			try {
				document.getElementById(targetDiv).focus();
			} catch ( ex ) {}
		}
	}

	function genericValidate(formName) {
		var done = resetErrors();
		var obj = document.getElementById(formName); 
		var ids = '';
		for (var i = 0; i < obj.length; i++) {
		    var elem = obj.elements[i];
		    ids += ' | ' + elem.id;
		    if (elem.type=='text' || elem.type.indexOf('select')>-1 || elem.type.indexOf('textarea')>-1 || elem.type.indexOf('file')>-1) {
		    	if (obj[elem.id + '_check']) {
		    		if (obj[elem.id + '_check'].value == 'file') {
				    	var func = obj[elem.id + '_check'].value + "Check('" + escape(obj[elem.id].value) + "', '" + elem.id + "_ctnr')";
		    		}
		    		else { 
			    		var func = obj[elem.id + '_check'].value + "Check('" + escape(obj[elem.id].value) + "')";
		    		}
			    	if (! eval(func)) {
			    		if (obj[elem.id + '_msg']) {
				    		setInputError(elem.id, obj[elem.id + '_msg'].value);
				    		return false;
			    		}
			    	}
		    	}
		    }
		}
		return true;
	}
	
	function resetForm(formName, iconCtnrArray, dontTouch) {
		resetErrors();
		var obj = document.getElementById(formName);
		outerloop:
		for (var i = 0; i < obj.length; i++) {
		    var elem = obj.elements[i];
			if (dontTouch!=null && dontTouch.length>0) {
				for ( var it in dontTouch) {
					if (elem.id == dontTouch[it]) {
						continue outerloop;
					}
				}
			}
		    if ( (elem.type=='hidden' && (elem.id.indexOf('_id')>-1 || elem.id.indexOf('id')>-1)) || elem.type=='text' || elem.type.indexOf('textarea')>-1) {
		    	elem.value = '';
		    }
		    else if (elem.type.indexOf('select')>-1 ) {
		    	elem.selectedIndex = 0;	
		    	elem.options[0].value = '';
		    }
		    else if (elem.type.indexOf('checkbox')>-1 ) {
		    	elem.checked = false;	
		    }
		}
		if (iconCtnrArray!=null) {
			if (iconCtnrArray.constructor.toString().indexOf("Array") != -1) {
				for (i=0; i<iconCtnrArray.length; i++) {
					if ( document.getElementById(iconCtnrArray[i])) {
						resetImageCtnr(iconCtnrArray[i]);	
					}
				}
			}
		}
		return false;
	}
	
	function resetImageCtnr(ctnrId) {
		if (document.getElementById(ctnrId)) {
			document.getElementById(ctnrId).innerHTML = '';
		}		
	}
	
	// resets the selector value if index = 0 is selected
	function checkSelection(selectorId) {
		if (document.getElementById(selectorId).selectedIndex == 0) {
			document.getElementById(selectorId).options[0].value = '';	
		}
	}
	
	function urlDecode(psEncodeString) {
		// Create a regular expression to search all +s in the string
		var lsRegExp = /\+/g;
		// Return the decoded string
		return unescape(String(psEncodeString).replace(lsRegExp, " "));
	}

	function pauseProcess(millis) {
		var date = new Date();
		var curDate = null;
		
		do { curDate = new Date(); 
		}
		while(curDate-date < millis);
	}
	
	function getPosition(element) {
		var elem = element, tagname = "", x = 0, y = 0, w = 0, h = 0;
		
		while (elem!=null && (typeof(elem)=="object") && (typeof(elem.tagName)!="undefined") ) {
			y += elem.offsetTop;    
			w += elem.offsetWidth; 
			x += elem.offsetLeft;    
			h += elem.offsetHeight; 
			tagname = elem.tagName.toUpperCase(); 
			if (tagname=="BODY")
				elem=0;
			
			if (typeof(elem)=="object")
			if (typeof(elem.offsetParent)=="object")
			elem=elem.offsetParent;
		}
		
		position = new Object();
		position.x = x;
		position.y = y;
		position.w = w;
		position.h = h;
		return position;
	}
	
	function moveToPos(objid, x, y) {
		document.getElementById(objid).style.visibility = 'visible';
		document.getElementById(objid).style.left = x+'px';	
		document.getElementById(objid).style.top = y+'px';	
	}
	
	function hideObj(obj) {
		moveToPos(obj, -1000, -1000);
		document.getElementById(obj).style.visibility = 'hidden';
		return true;
	}

	/** other stuff from here **/
	
	function getMouseDownPos(e) {
		var posx = 0;
		var posy = 0;
		if (!e) var e = window.event;
		if (e.pageX || e.pageY) 	{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		return [posx, posy];
	}	
	
	
	/**
	 * scroll frames externally with javascript
	 * see calendar manager for example
	 *
	 * NOTE:
	 * you can only have one timer at a time within a page.
	 */
	var timer_id;
	function scroll_iframe(frm,inc,dir) {
		if (timer_id) clearTimeout(timer_id);
			if (window.frames[frm]) {
				if (dir == "v") { 
					window.frames[frm].scrollBy(0, inc);
				}
				else { 
					window.frames[frm].scrollBy(inc, 0);
				}
				timer_id = setTimeout("scroll_iframe('" + frm + "'," + inc + ",'" + dir + "')", 20);
		}
	}
	
	/**
	 * clear the timer object
	 */
	function stopScroll() { 
		if (timer_id) {
			clearTimeout(timer_id); 
		}
	}

window.size = function()
{
	var w = 0;
	var h = 0;

	//IE
	if(!window.innerWidth)
	{
		//strict mode
		if(!(document.documentElement.clientWidth == 0))
		{
			w = document.documentElement.clientWidth;
			h = document.documentElement.clientHeight;
		}
		//quirks mode
		else
		{
			w = document.body.clientWidth;
			h = document.body.clientHeight;
		}
	}
	//w3c
	else
	{
		w = window.innerWidth;
		h = window.innerHeight;
	}
	return {width:w,height:h};
}

window.center = function()
{
	var hWnd = (arguments[0] != null) ? arguments[0] : {width:0,height:0};

	var _x = 0;
	var _y = 0;
	var offsetX = 0;
	var offsetY = 0;

	//IE
	if(!window.pageYOffset)
	{
		//strict mode
		if(!(document.documentElement.scrollTop == 0))
		{
			offsetY = document.documentElement.scrollTop;
			offsetX = document.documentElement.scrollLeft;
		}
		//quirks mode
		else
		{
			offsetY = document.body.scrollTop;
			offsetX = document.body.scrollLeft;
		}
	}
	//w3c
	else
	{
		offsetX = window.pageXOffset;
		offsetY = window.pageYOffset;
	}

	_x = ((this.size().width-hWnd.width)/2)+offsetX;
	_y = ((this.size().height-hWnd.height)/2)+offsetY;

	return{x:_x,y:_y};
}
//]]>
