function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function CheckDelFormAndSubmit(formName) {   
     form = document.forms[formName];
     elems = form.elements;    
      
     var checkedItemsExist = false;   
       
     for(var i=0 ; i<elems.length ; i++){
        if(elems[i].checked){
            checkedItemsExist = true;
            break;
        }
     }
     
     if(checkedItemsExist){        
    	if(funcExists("CheckDelFormAndSubmit_beforeSubmit")){
    		if(CheckDelFormAndSubmit_beforeSubmit(formName)){
    			form.submit();
    		}
    	}else if(confirm(getResString(FORM_DEL_CONFIRM))){
    		form.submit();            
        }
     }else{
        alert(getResString(FORM_NO_REC_SELECTED));
     }
}

function hideDiv(id) {
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'none';
	}
	else {
		if (document.layers) { // Netscape 4
			document.id.display = 'none';
		}
		else { // IE 4
			document.all.id.style.display = 'none';
		}
	}
}

function showDiv(id) {		  
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(id).style.display = 'block';
	}
	else {
		if (document.layers) { // Netscape 4
			document.id.display = 'block';
		}
		else { // IE 4
			document.all.id.style.display = 'block';
		}
	}
}

function toggle_visibility(id) {
	var e = document.getElementById(id);
	if(e.style.display == 'none')
		e.style.display = 'block';
	else
		e.style.display = 'none';
}

//---PUIU------------------------------------------------------

function validateForm(theForm){	
	var validatorClassName = theForm.getAttribute("validator");

	//check if validator class exists
	if(!funcExists(validatorClassName)){
		alert("For the developer: validator class: \""+validatorClassName+"\" does not exist.");
		return false;
	}
	
	//process spaw
	var spawCtrlNames = new Array();
	if(varExists("SpawEngine")){
		//update spaw editor pages
		SpawEngine.updateFields();
		
		//get all spaw textarea names
		for(var i=0 ; i<SpawEngine.editors.length ; i++){
			spawCtrlNames.push(SpawEngine.editors[i].name);
		}
	}
				
	var validator = eval("new " + validatorClassName + "(theForm)");	
	var fields = theForm.elements;	
	var retVal = true;
	var validationAttribute, validationTypes, validationType;	
	var valids = validator.on_Begin();
		
	if(!isArray(valids)){
		valids = new Array();
	}
	
	for(var i=0 ; i<fields.length ; i++){
		if(
			!inArray(fields[i].id, spawCtrlNames) &&
			(
				fields[i].disabled == true || 
				fields[i].style.visibilty=="hidden" || 
				fields[i].style.display=="none" || 
				(funcExists("validateCtrlHook") && !validateCtrlHook(fields[i]))
			)
			){
				valids[fields[i].name] = true;
				continue;
		}
		
		validationAttribute = fields[i].getAttribute("valid");
		
		if(!validationAttribute)
			continue;
			
		validationTypes = validationAttribute.split("|");	
					
		for(var j=0 ; j<validationTypes.length ; j++){
			validationType = trim(validationTypes[j]);
		
			if(eval("typeof validator.on_" + validationType) == "function"){
				valids[fields[i].name] = 
					eval("validator.on_" + validationType + "(\"" + fields[i].name + "\")") 						
					? (valids[fields[i].name] == false ? false : true)
					: false;					
				retVal = valids[fields[i].name] ? retVal : false;				
			}
		}
	}
	
	return eval("typeof validator.on_End") == "function" ? validator.on_End(valids) : retVal;
}

function resetForm(formName){
	var theForm = document.forms[formName];
	
	//reset simple controls
	theForm.reset();
	
	//reset spaw fields
	var elms = theForm.elements;
	var txtAreaId, SpawObj, SpawPgObj;	
	for(var i=0 ; i<elms.length ; i++){
		if(elms[i].type.toLowerCase() == "textarea"){
			txtAreaId = elms[i].id;
			if((SpawObj=varExists(txtAreaId+"_obj", true)) && (SpawPgObj=varExists(txtAreaId+"_page", true))){
				SpawObj.updatePageDoc(SpawPgObj);
			}
		}		
	}	
	
	//reset form validator
	var validatorClassName = theForm.getAttribute("validator");
	if(validatorClassName && funcExists(validatorClassName)){
		var validator = eval("new " + validatorClassName + "(theForm)");	
		validator.reset();
	}
}

function getSpawContent(spawCtrlName, pgNr){
	SpawEngine.updateFields();
	return document.getElementById(spawCtrlName+"___"+pgNr).value;
}

function getRadioGrpVal(grpName){
	var radios = document.getElementsByName(grpName);
	
	if(!radios)
		return null;
	
	for(var i=0 ; i<radios.length ; i++){
		if(radios[i].checked)
			return radios[i].value;	
	}
	
	return null;	
}

function trim(str){
    return str.replace(/^\s+|\s+$/g, '');
}

function trimHTML(str){
	str = str.replace(/&nbsp;/mig, "");//remove &nbsp;
	str = str.replace(/< *br *\/+>/mig, "");//remove <br/>
	str = trim(str);//remove space
	return str;
}

function endsWith(str, search){
	return (str.lastIndexOf(search) == str.length-search.length);
}

function startsWith(str, search){
	return (str.indexOf(search) == 0);
}

function getVal(formName, fieldName){
    return document.forms[formName].elements[fieldName].value;
}

function setDVstyle(ctrlName, className){
	var item = document.getElementById(ctrlName);
	if(item)
		item.className = className;
}

function setErrDvStyle(ctrlName, setErrorStyle){
	var item = document.getElementById(ctrlName);
	
	if(!item)
		return;
		
	if(item.className != '' && setErrorStyle == true)
		item.className += endsWith(item.className, "Error") ? '' : "Error";
	else if(item.className != '' && setErrorStyle == false)
		item.className = endsWith(item.className, "Error") ? item.className.substring(0, item.className.lastIndexOf("Error")) : item.className;
}

function funcExists(fctName){
    if(typeof fctName == 'string' && eval('typeof ' + fctName) == 'function')
        return true;
    return false;
}

function varExists(varName, returnTheValue){  
    if(typeof varName == 'string' && eval('typeof ' + varName) != 'undefined'){
    	if(returnTheValue)
        	return eval(varName);
        else
        	return true;
    }
        
    return false;
}

function isArray(testObject) { 
     var retVal = 
     	(testObject && 
        //!(testObject.propertyIsEnumerable('length')) && 
        typeof testObject === 'object' && 
        typeof testObject.length === 'number');
        
     return retVal;
}


function inArray(val, arr){
	for(key in arr){
		if(arr[key] == val){
			return true;
		}
	}
	return false;
}

function keyExists(val, arr){
	for(key in arr){
		if(key == val){
			return true;
		}
	}
	return false;
}

function isEmpty(sText){
    return (trim(sText) == '');
}

//email validation-------------------------------------
var emailRegex = /^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/i;
var emailRegexBrk = /^<[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]>$/i;
var nameEmailPairRegex = /^[^<>]* <[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]>$/i;
var groupRegex = /^<group:[^<>]+>$/;
	
function isEmail(str){
	return str.match(emailRegex);
}

function isNotValidEmailAndGroup(str){
	if(isEmpty(str)){
		return true;
	}	

	var addrs = str.split(";");
	for(var i=0 ; i<addrs.length ; i++){
		if(isEmpty(addrs[i])){
			continue;
		}
		
		addrs[i] = trim(addrs[i]);	

		if(!addrs[i].match(nameEmailPairRegex) && !addrs[i].match(emailRegex) && !addrs[i].match(emailRegexBrk) && !addrs[i].match(groupRegex)){
			return addrs[i];
		}
	}
	
	return false;	
}

//----------------------------------------------------

function isNumeric(sText){
	if(isEmpty(sText))
		return false;
		
	var parts = sText.split('.');
	
	if(parts.length > 2)
		return false;
		
	for(var i=0 ; i<parts.length ; i++){
		if(!isInteger(parts[i]))
			return false;
	}
	
	return true;		
}

function isNegNumeric(sText){
	if(isEmpty(sText) || !startsWith(sText, "-") || !isNumeric(sText.substr(1))){
		return false;
	}

    return true;
}

function isInteger(s){	
	var validChars = "0123456789";
	return allCharsIncluded(s, validChars);
}

function isNegInteger(s){
	if(isEmpty(s) || !startsWith(s, "-") || !isInteger(s.substr(1))){
		return false;
	}

    return true;
}

function isAlpha(s){
	var validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	return allCharsIncluded(s, validChars);
}

function isAlphaNum(s){
	var validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	return allCharsIncluded(s, validChars);
}

function allCharsIncluded(s, validChars){
	if(isEmpty(s)){
		return false;
	}
	
    for(var i = 0; i < s.length; i++){  
        if(validChars.indexOf(s.charAt(i)) < 0){
        	return false;
        }
    }
    return true;	
}

function isDate(fld){
	//mm-dd-yyyy or mm/dd/yyyy
	var minYear = 2008;
	var maxYear = 2037;
    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    if ((fld.match(RegExPattern)) && (fld != '')){
    	var a = fld.split("-");
    	if(a.length < 3){
    		a = fld.split("/");
    	}
    	return !(parseInt(a[2])<minYear || parseInt(a[2])>maxYear);
    }
    return false;
}

function isMySQLDate(fld){
	fld = fld.split("-");
	if(fld.length != 3){
		return false;
	}
	return isDate(fld[1]+"-"+fld[2]+"-"+fld[0]);
}

function isTime(timeStr){
	//HH:MM:SS AM/PM
	//seconds and AM/PM are optional.
	
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	
	var matchArray = timeStr.match(timePat);
	if (matchArray == null)
		return false;
			
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];
	
	if(second=="")
		second = null; 
	
	if(ampm=="")
		ampm = null 

	if(hour < 0  || hour > 23)
		return false;
	
	if((hour < 1 || hour > 12) && ampm != null)
		return false;

	if(minute < 0 || minute > 59)
		return false;

	if (second != null && (second < 0 || second > 59)) {
		return false;
	}
		
	return true;
}

function timeConv_AmPmTo24(timeStr){//hh:mm AP|PM, 12 noon: 12:00PM
	var explTime, hh, mm, ampm;
	
	explTime = timeStr.split(" ");
	
	if(explTime.length < 2)
		return timeStr;
	
	ampm = explTime[1];
	explTime = explTime[0].split(":");
	hh = explTime[0];
	mm = explTime[1];	
	
	return (ampm == "AM" ? (hh=="12" ? "00:"+mm : hh+":"+mm) : (hh=="12" ? "12:"+mm : ((parseInt(hh.replace(/0+?([^0]+)/g, "$1"))+12)%24)+":"+mm));
}

function hasScript($str){
	var RegExPattern = /< *script/;
	if (($str.match(RegExPattern)) && ($str != ''))
        return true;
    return false;	
}

function dump(arr,level,showFcts) {
    var dumped_text = "";
    if(!level) level = 0;

    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') { 
        for(var item in arr) {
        	if(!showFcts && typeof arr[item] == "function"){
        		continue;
        	}
            var value = arr[item];
     
            if(typeof(value) == 'object') {
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += dump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else {
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
} 

function addWindowOnLoadEvent(func){ 
	var oldonload = window.onload; 
	
	if(!oldonload)
		window.onload = func;
	else if(typeof window.onload != 'function'){ 
		window.onload = function(){ 
	  		eval(oldonload);
	  		func();
		}
	}else{ 
		window.onload = function(){ 
	    	oldonload(); 
	  		func(); 
		} 
	} 
}

function ignoreEvent(e){ 
 	if (!e || !e.stopPropagation) 
		window.event.cancelBubble = true; 
	else
		e.stopPropagation();
}

//ARRAY/ASSOC ARRAY functions ----------------------------------
function isKey(evnt, keyNumber){
	var keynum
	var keychar
	var numcheck
	
	if(window.event) // IE
	{
		keynum = evnt.keyCode
	}
	else if(evnt.which) // Netscape/Firefox/Opera
	{
		keynum = evnt.which
	}
	
	return (keynum == keyNumber);
}

function implode(sep, arr){
	var str="", i=0;
	
	for(var idx in arr){	
		if(isInteger(idx)){		
			str += (i==0 ? "" : sep) + arr[idx];
		}
		i++;
	}
	
	return str;
}

function implodeObj(sep, obj){
	var arr = new Array();	
	for(var idx in obj){		
		arr.push(obj[idx]);
	}	
	return arr.join(sep);
}

function arrayRemValue(arr, val){
	var newArr = new Array();
	for(var i in arr){
		if((typeof arr[i] != "function") && arr[i] != val){
			newArr.push(arr[i]);
		}
	}	
	return newArr;
}

function arrayRemKey(arr, key){
	var newArr = new Array();
	for(var k in arr){
		if((typeof arr[k] != "function") && k != key){
			newArr[k] = arr[k];
		}
	}	
	return newArr;
}

function arrayIntersect(arr1, arr2) {
    var temp = [];
    for(var i = 0; i < arr1.length; i++){
        for(var k = 0; k < arr2.length; k++){
            if(arr1[i] == arr2[k]){
                temp.push( arr1[i]);
                break;
            }
        }
    }
    return temp;
}

//-------------------------------------------

function getIframeDocument(iframeName){
	var oIframe = document.getElementById(iframeName);
  	var oDoc = (oIframe.contentWindow || oIframe.contentDocument);
  	
  	if (oDoc.document){
  		oDoc = oDoc.document;
  	}
  	
  	return oDoc;
}

function preloadImages(imagesArr){
	var imgObj = new Image();
	
	for(var i in imagesArr){
		if(isInteger(i)){
			imgObj.src = imagesArr[i];
		}
	}
}

function preloadImages2(){
	var imgObj = new Array();
	var args = preloadImages2.arguments;
	for(var i=0 ; i<args.length ; i++){
		imgObj[i] = new Image;
		imgObj[i].src = args[i];
	}
}

function getFormFieldsAsArray(theForm){
	var fields = theForm.elements;
	var retArr = new Array();
	for(var i=0 ; i<fields.length ; i++){
		if(fields[i].name){
			retArr[fields[i].name] = fields[i].value;
		}		
	}
	return retArr;
}

function getAsQString(theArray, urlEncoder){
	var retArr = new Array();
	for(var fieldName in theArray){
		retArr.push(urlEncoder 
			? urlEncoder.encode(fieldName)+"="+urlEncoder.encode(theArray[fieldName])
			: fieldName+"="+theArray[fieldName]
		);
	}
	return retArr.join("&");
}

function getScreenSize(){
	var o = function(){};
	if (self.innerHeight){ // all except Explorer
		o.width = self.innerWidth;
		o.height = self.innerHeight;
	}else if (document.documentElement && document.documentElement.clientHeight){// Explorer 6 Strict Mode
		o.width = document.documentElement.clientWidth;
		o.height = document.documentElement.clientHeight;
	}else if (document.body){ // other Explorers	
		o.width = document.body.clientWidth;
		o.height = document.body.clientHeight;
	}
	return o;
}

//dropdown fcts--------------------------------

function addOptionToSel(sel, text, val, selected){
	newOpt = document.createElement('option');		
	newOpt.text = text;
	newOpt.value = val;	
	newOpt.selected = (selected ? true : false);
	try{
		sel.add(newOpt,null);
	}catch(ex){
		sel.add(newOpt);
	}	
}

function selectVal(sel, val){
	for(var i=0 ; i<sel.length ; i++){
		if(sel.options[i].value == val){
			sel.options[i].selected = true;
			break;
		}		
	}	
}

function selectAllOpts(sel){
	for(var i=0 ; i<sel.length ; i++){
		sel.options[i].selected = true;
	}	
}

function deselectAll(sel){
	for(var i=sel.length-1 ; i>=0 ; i--){
		sel.options[i].selected = false;
	}	
}

function removeSelOpts(sel){
	for(var i=sel.length-1 ; i>=0 ; i--){
		if(sel.options[i].selected == true){
			sel.remove(i);
		}
	}	
}

function removeAllOpts(sel){
	for(var j=sel.length-1 ; j>=0 ; j--){
		sel.remove(j);
	}
}

function removeValFromSel(sel, val){
	for(var i=sel.length-1 ; i>=0 ; i--){
		if(sel.options[i].value == val){
			sel.remove(i);
		}
	}
}

function containsVal(sel, val, doTrim){
	for(var i=0 ; i<sel.length ; i++){
		if((!doTrim && sel.options[i].value == val) || (doTrim && trim(sel.options[i].value) == trim(val))){
			return true;
		}
	}
	return false;
}

function countSelected(sel){
	var cnt = 0;
	for(var i=sel.length-1 ; i>=0 ; i--){
		if(sel.options[i].selected == true){
			cnt++;
		}
	}	
	return cnt;
}

function addOptGroupToSel(sel, label){
	var optgrp = document.createElement("optgroup");
	optgrp.label = label;
	sel.appendChild(optgrp);
	return optgrp;
}

function addOptionToOptgroup(optgrp, text, val, selected){
	opt = document.createElement("option");
	opt.value = val;
	if(typeof(opt.innerText) != 'undefined'){
		opt.innerText = text;
	}else{			
		opt.text = text;
	}
	opt.selected = (selected ? true : false);
	optgrp.appendChild(opt);	
}

function removeEmptyOptgroups(sel){
	for(var i=sel.childNodes.length-1 ; i>=0 ; i--){
		if(sel.childNodes[i].nodeName == "OPTGROUP" && !sel.childNodes[i].childNodes.length){
			sel.removeChild(sel.childNodes[i]);
		}
	}
}

//-------------------------------------

function removeAllChildNodes(elem){
	for(var i=elem.childNodes.length-1 ; i>=0 ; i--){
		elem.removeChild(elem.childNodes[i]);
	}
}

//-------------------------------------

function GetWindowHeight(){
        var y = 0;
        if (self.innerHeight){
                y = self.innerHeight;
        }
        else if (document.documentElement && document.documentElement.clientHeight){
                y = document.documentElement.clientHeight;
        }
        else if (document.body){
                y = document.body.clientHeight;
        }
        return y;
}

function GetWindowWidth(){
        var x = 0;
        if (self.innerHeight){
                x = self.innerWidth;
        }
        else if (document.documentElement && document.documentElement.clientHeight){
                x = document.documentElement.clientWidth;
        }
        else if (document.body){
                x = document.body.clientWidth;
        }
        return x;
}

function strip_tags(html){ 
	if(arguments.length < 3) {
		html = html.replace(/<\/?(?!\!)[^>]*>/gi, '');
	}else{
		var allowed = arguments[1];
		var specified = eval("["+arguments[2]+"]");
		if(allowed){
			var regex='</?(?!(' + specified.join('|') + '))\b[^>]*>';
			html=html.replace(new RegExp(regex, 'gi'), '');
		}else{
			var regex='</?(' + specified.join('|') + ')\b[^>]*>';
			html=html.replace(new RegExp(regex, 'gi'), '');
		}
	}
	return html;
}

