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(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");

	if(!funcExists(validatorClassName)){
		alert("For the developer: validator class: \""+validatorClassName+"\" does not exist.");
		return false;
	}
				
	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(fields[i].disabled == true || fields[i].style.display == "none"){
			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;
}

//creat puiu
function validateCtrls(theForm, ctrlsVModes){		
	//ctrlsVModes = {"StudName" : "VALID_NOTEMPTY|VALID_INTEGER", "StudGrade" : "VALID_NOTEMPTY"}
	//or
	//ctrlsVModes = new Array(); ctrlsVModes["StudName"] = "VALID_NOTEMPTY|VALID_INTEGER";
			
	var validatorClassName = theForm.getAttribute("validator");

	if(!funcExists(validatorClassName))
		return true;
				
	var validator = eval("new " + validatorClassName + "(theForm)");	
		
	var vModes, vMode;
	var retVal = true;
	var valids = validator.on_Begin();
	
	for(var ctrlName in ctrlsVModes){
		vModes = ctrlsVModes[ctrlName].split("|");
		for(var i in vModes){
			vMode = trim(vModes[i]);
			if(eval("typeof validator.on_" + vMode) == "function"){
				valids[ctrlName] = 
					eval("validator.on_" + vMode + "(\"" + ctrlName + "\")") 						
					? (valids[ctrlName] == false ? false : true)
					: false;					
				retVal = (valids[ctrlName] ? retVal : false);				
			}
		}
	}

	return eval("typeof validator.on_End") == "function" ? validator.on_End(valids) : retVal;
}

function validateAndSubmit(theForm){
	if(validateForm(theForm))
		theForm.submit();
}

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 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 isEmpty(sText){
    return (trim(sText) == '');
}

function isEmail(str){
    var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)

	if (str.indexOf(at)==-1) return false
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) return false
 	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || ldot+1==lstr) return false
	if (str.indexOf(at,(lat+1))!=-1) return false
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) return false
	if (str.indexOf(dot,(lat+2))==-1) return false		
	if (str.indexOf(" ")!=-1) return false
	
	return true		
}

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 isInteger(s){
	if(isEmpty(s))
		return false;
		
	var i;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function isNegInteger(s){
	if(isEmpty(s) || !startsWith("-"))
		return false;
		
	s = s.substr(1);
		
	var i;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function isDate(fld){
	//(mm-dd-yyyy)
    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 != ''))
        return true;
    return false;
}

function isTime(timeStr){
	// Checks if time is in HH:MM:SS AM/PM format.
	// The 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_24ToAmPm(timeStr){//hh:mm
	
	
}

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) {
    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) {
            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();
}

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 resetForm(formName){
	document.forms[formName].reset();
	
	//reset spaw
	var elms = document.forms[formName].elements;
	var txtAreaId, obj, pg;
	
	for(var i=0 ; i<elms.length ; i++){
		if(elms[i].type.toLowerCase() == "textarea"){
			txtAreaId = elms[i].id;
			if((obj=varExists(txtAreaId+"_obj", true)) && (pg=varExists(txtAreaId+"_page", true))){
				obj.updatePageDoc(pg);
			}
		}		
	}	
}

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];
		}
	}
}