//<![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 = 10;
// extra width
var MSGOFFSET = 3;
// time displaying in seconds
var MSGHIDE = 4;

	// build out 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.backgroundColor = 'orange';
			document.getElementById(targetDiv).focus();
		}
	}

	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) {
		resetErrors();
		var obj = document.getElementById(formName);
		for (var i = 0; i < obj.length; i++) {
		    var elem = obj.elements[i];
		    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;
	}
	
	
//]]>

