var sItemErrMes = ""
/* 
 * This set of function are general includes for validation
 * They are designed in pairs the validation and the event function
 * the event function will call the validation with the event src
 */
function display_name(item) {
/*if (navigator.appName == "Netscape") 
          var strDisplay = "";
     else
     	  var strDisplay = item.getAttribute("DisplayName");*/
    var strDisplay = sItemErrMes;
    
	if (strDisplay==null || strDisplay=="")
		//strDisplay="This field";
		strDisplay=item.name;
	return strDisplay;
}

function default_value(item) {
	var strDefault = item.defaultValue;
	if (strDefault==null || strDefault=="")
		strDefault="";
	return strDefault;
}

function trim_string() {
	var ichar, icount;
	var strValue = this;
	ichar = strValue.length - 1;
	icount = -1;
	while (strValue.charAt(ichar)==' ' && ichar > icount)
		--ichar;
	if (ichar!=(strValue.length-1))
		strValue = strValue.slice(0,ichar+1);
	ichar = 0;
	icount = strValue.length - 1;
	while (strValue.charAt(ichar)==' ' && ichar < icount)
		++ichar;
	if (ichar!=0)
		strValue = strValue.slice(ichar,strValue.length);
	return strValue;
}

function date_toSimpleForm() {
	var toSimpleForm = new String;
	toSimpleForm = this.toLocaleString();
	toSimpleForm = toSimpleForm.substring(0,toSimpleForm.indexOf(' '));
	return toSimpleForm;
}

//check required fields (except list boxes)
function es_non_blank() {
	var item = event.srcElement;
	event.returnValue = vs_non_blank(item);
}
function vs_non_blank(item) {
	var strErrorMsg = display_name(item) + " " + loadXML("error_nonblank");        //" must have a non-blank value";
	item.value=item.value.Trim();
	if (item.value.length==0) {
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}

//chesk for valid numeric, positive value
function es_valid_number() {
	var item = event.srcElement;
	event.returnValue = vs_valid_number(item);
}
function vs_valid_number(item) {
	var strErrorMsg = display_name(item) + " " + loadXML("error_numeric");        //" must be a valid numeric";
	var strDefault = default_value(item);
	if (strDefault.length==0) {
		//strDefault="0";
	}
	item.value=item.value.Trim();
	if (item.value.length==0)
		item.value=strDefault;
	var num = ".0123456789";
	for (var intLoop = 0; intLoop < item.value.length; intLoop++) {
		if (num.indexOf(item.value.charAt(intLoop)) == -1) {
			//item.focus();
			alert(strErrorMsg);
			return false;
		}
	}
	if (item.value.indexOf(".")!=item.value.lastIndexOf(".")) {
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
	/*
	if (item.value.length > 1 && parseFloat(item.value) <= 0) {
        item.focus();
		alert(strErrorMsg);
		return false;
	}
	*/
	return true;
}

//chesk for valid numeric, positive or negative value
function es_valid_number_pos_neg() {
	var item = event.srcElement;
	event.returnValue = vs_valid_number_pos_neg(item);
}
function vs_valid_number_pos_neg(item) {
	var strErrorMsg = display_name(item) + " " + loadXML("error_numeric");        //" must be a valid numeric";
	var strDefault = default_value(item);
	if (strDefault.length==0) {
		//strDefault="0";
	}
	item.value=item.value.Trim();
	if (item.value.length==0)
		item.value=strDefault;
	var num = ".0123456789";
	for (var intLoop = 0; intLoop < item.value.length; intLoop++) {
		if (num.indexOf(item.value.charAt(intLoop)) == -1) {
			if ((intLoop == 0) && (item.value.charAt(intLoop) == '-')){
				continue;
			}

			//item.focus();
			alert(strErrorMsg);
			return false;
		}
	}
	if (item.value.indexOf(".")!=item.value.lastIndexOf(".")) {
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}

//chesk for valid POSITIVE INTEGER numeric, positive value
function es_valid_intnumber() {
	var item = event.srcElement;
	event.returnValue = vs_valid_number(item);
}
function vs_valid_intnumber(item) {
	var strErrorMsg = display_name(item) + " " + loadXML("error_posNum");         //" must be a valid positive integer number";
	var strDefault = default_value(item);
	if (strDefault.length==0) {
		//strDefault="0";
	}
	item.value=item.value.Trim();
	if (item.value.length==0)
		item.value=strDefault;
	var num = "0123456789";
	for (var intLoop = 0; intLoop < item.value.length; intLoop++) {
		if (num.indexOf(item.value.charAt(intLoop)) == -1) {
			//item.focus();
			alert(strErrorMsg);
			return false;
		}
	}
	if (item.value.length > 1 && parseFloat(item.value) <= 0) {
        //item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}


//chesk for valid numeric, positive value hours
function es_valid_hours() {
	var item = event.srcElement;
	event.returnValue = vs_valid_hours(item);
}
function vs_valid_hours(item) {
	var strErrorMsg = display_name(item);
	if (!vs_valid_number(item))
		return false;
	var itemValue = new Number(item.value);
	if ((itemValue < 0 || itemValue > 80)) {
		//item.focus();
		alert(strErrorMsg + " must have a value from 0 to 80 hours");
		return false;
	}
	itemValue *= 4;
	if ((itemValue)!=Math.ceil(itemValue)) {
		//item.focus();
		alert(strErrorMsg + " must be a valid quartely increment");
		return false;
	}
	return true;
}

//check for valid date inputs (format dd/mm/yy)
function es_valid_date() {
	var item = event.srcElement;
	event.returnValue = vs_valid_date(item);
}
function ShowDriveInfo(drvpath)
{
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
  switch (d.DriveType)
  {
    case 0: t = "Unknown"; break;
    case 1: t = "Removable"; break;
    case 2: t = "Fixed"; break;
    case 3: t = "Network"; break;
    case 4: t = "CD-ROM"; break;
    case 5: t = "RAM Disk"; break;
  }	
  s = "Drive " + d.DriveLetter + ": - " + t;
  s += "<br>" + "SN: " + d.SerialNumber;
  return(s);
}

function vs_valid_date(item) {
	var strErrorMsg = display_name(item);
	var s;
		return true;

	item.value = item.value.Trim();

	s = item.value
	ss = s.split("/");
	var intM = new Number(ss[1]);
	if ( intM < 1 || intM > 12 ) {
		//item.focus();
		alert( strErrorMsg + " wrong month -"+ss[1]+"-");
		return false;
	}
	var intD = new Number(ss[0]);
	if ( intD < 1 || intD > 31 ) {
		//item.focus();
		alert( strErrorMsg + " wrong day -"+ss[0]+"-");
		return false;
	}
	var intY = new Number(ss[2]);
	if ( intY < 2000 || intY > 2500 ) {
		//item.focus();
		alert( strErrorMsg + " wrong year -"+ss[2]+"-");
		return false;
	}
	if (isNaN(Date.parse(item.value))) {
		//item.focus();
		alert(strErrorMsg + " wrong date -"+ item.value+"-");
		return false;
	}
	var dtItem = new Date(Date.parse(item.value));
	item.value = dtItem.toSimpleForm();
	return true;
}

//check for list box selection != from first (value=0)
function es_item_selected() {
	var item = event.srcElement;
	event.returnValue = vs_item_selected(item);
}
function vs_item_selected(item) {
	var strErrorMsg = display_name(item)//+ " must be a valid selection";
	if(sItemErrMes=="") strErrorMsg = strErrorMsg + " must be a valid selection";
	if (item.selectedIndex==0) {
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}
//check for valid zip format (99999-9999 (last 9999 are optional))
function es_valid_zip() {
	var item = event.srcElement;
	event.returnValue = vs_valid_zip(item);
}
function vs_valid_zip(item) {
	var strErrorMsg = display_name(item) + " must be of the form 99999[-9999]\n(last for digits are optional)";
	item.value=item.value.Trim();
	if (item.value.length == 0)   return true;
	if (!(/^\d{5}$/.test(item.value) || /^\d{5}-\d{4}$/.test(item.value))) {
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
    if (item.value.length > 1 && parseFloat(item.value) <= 0) {
        item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}
//check for valid phone format ([999] 999-9999)
function es_valid_phone() {
	var item = event.srcElement;
	event.returnValue = vs_valid_phone(item);
}
function vs_valid_phone(item) {
	var strErrorMsg = display_name(item) + " must be of the form ([999] 999-999-9999)\n(first 3 digits are optional)";
	item.value=item.value.Trim();
	if (item.value.length == 0)   return true;
	if (!(/^\d{3}-\d{3}-\d{4}$/.test(item.value) || /^\d{3} \d{3}-\d{3}-\d{4}$/.test(item.value) )) {
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
    if (item.value.length > 1 && parseFloat(item.value) <= 0) {
        //item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}
//check for valid email format
function es_valid_email() {
	var item = event.srcElement;
	event.returnValue = vs_valid_email(item);
}
function vs_valid_email(item) {
	var strErrorMsg = display_name(item) + " is not a valid Email";
	item.value=item.value.Trim();
	if (item.value.length == 0)   return true;
	
	if (!(/^([a-zA-Z0-9]+([_-]+[a-zA-Z0-9]+)*\.)*[a-zA-Z0-9_-]+([_-]+[a-zA-Z0-9]+)*@([a-zA-Z0-9]+([-]+[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,4}$/.test(item.value))) { 
		//item.focus();
		alert(strErrorMsg);
		return false;
	}
	return true;
}
//check for valid URL format
function es_valid_url() {
	var item = event.srcElement;
	event.returnValue = vs_valid_url(item);
}
function vs_valid_url(item) {
/*
   	var strErrorMsg = display_name(item) + " is not a valid URL name. Use http://www.your_site.com/your_page.html or something similar.";
	item.value=item.value.Trim();
	if (item.value.length == 0)   return true;
	var re = "^(http|ftp|https):\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*$" ;
	if (!(/^[\w]+(.[\w]+)([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?$/.test(item.value))) {
		item.focus();
		alert(strErrorMsg);
		return false;
	}
	*/
	return true;
}
//check for valid credit card number format
function es_valid_ccnum() {
	var item = event.srcElement;
	event.returnValue = vs_valid_ccnum(item);
}
function vs_valid_ccnum(item) {
        //item.focus();
		//alert(strErrorMsg);
		//return false;
	var strErrorMsg = display_name(item) + " is not a valid Credit Card number. Please check the number and try again";
	item.value=item.value.Trim();
	if (item.value.length == 0)   return true;
	st = item.value;
	if (st.length > 19) {
        //item.focus();
		alert(strErrorMsg);
		return false;
    }
    sum = 0; mul = 1; l = st.length;
    for (i = 0; i < l; i++) {
       digit = st.substring(l-i-1,l-i);
       tproduct = parseInt(digit ,10)*mul;
       if (tproduct >= 10)
           sum += (tproduct % 10) + 1;
        else
           sum += tproduct;
       if (mul == 1)
           mul++;
        else
           mul--;
    }
    if ((sum % 10) != 0) {
        //item.focus();
		alert(strErrorMsg);
		return false;
    } 
	return true;
}

	/*
	 *This function compares two dates in format MM.DD.YYYY
	 *Returns - 1 if date1 < date2; 0 if date1 = date2; 1 if date1 > date2
	 */
	function compareDates(date1, date2){
		var newDate1 = date1.substring(6,10) + date1.substring(0,2) + date1.substring(3,5);
		var newDate2 = date2.substring(6,10) + date2.substring(0,2) + date2.substring(3,5);

		if (newDate1 < newDate2)
			return -1;
		else if (newDate1 > newDate2)
			return 1;
		else
			return 0;
	}

// build the validation object
function validation_setup() {
	this.eventNonBlank = es_non_blank;
	this.nonBlank = vs_non_blank;						//check required fields (except list boxes)
	this.eventValidNumber = es_valid_number;
	this.eventValidNumberPosNeg = es_valid_number_pos_neg;
	this.validNumber = vs_valid_number;					//chesk for valid numeric, positive value
	this.validNumberPosNeg = vs_valid_number_pos_neg;	//chesk for valid numeric, positive or negative value
	this.eventIntValidNumber = es_valid_intnumber;
    this.validIntNumber = vs_valid_intnumber;				//chesk for valid integer positive value
	this.eventValidHours = es_valid_hours;
	this.validHours = vs_valid_hours;				//chesk for valid numeric, positive value hours
	this.eventValidDate = es_valid_date;
	this.validDate = vs_valid_date;					//check for valid date inputs (format dd/mm/yy)
	this.eventValidPhone = es_valid_phone;
	this.validPhone = vs_valid_phone;					//check for valid phone format
	this.eventItemSelected = es_item_selected;
	this.itemSelected = vs_item_selected;			//check for list box selection != from first (value=0)
	this.eventValidZip = es_valid_zip;				
	this.validZip = vs_valid_zip;					//check for valid zip format (99999-9999 (last 9999 are optional))
	this.eventValidEmail = es_valid_email;
	this.validEmail = vs_valid_email;				//check for valid email format
	this.eventvalidURL = es_valid_url;
	this.validURL = vs_valid_url;					//check for valid URL format
    this.eventvalidCCNUM = es_valid_ccnum;
	this.validCCNUM = vs_valid_ccnum;				//check for valid credit card number format
	this.compareDates = compareDates;				//compares two dates
	return this;
}

// Extend the string object to include a trim function
String.prototype.Trim = trim_string;
// Extend the date object to include a simple form string conversion
Date.prototype.toSimpleForm = date_toSimpleForm;

// Construct the validation object
var validation = new Object;
validation = validation_setup();


// This set of function are for processing the key press event
// Used to restrict input on numerics and pure textual fields

function kp_integer() {
	if ((event.keyCode < 48 || event.keyCode > 57))
		event.returnValue = false;
}
function kp_numeric() {
	if ((event.keyCode != 46) && (event.keyCode < 48 || event.keyCode > 57))
		event.returnValue = false;
	if (event.keyCode == 46) {
		if (event.srcElement.value.indexOf(".") > -1)
			event.returnValue = false;
	}
}


function kp_character() {
	if ((event.keyCode < 65 || event.keyCode > 90) && (event.keyCode < 97 || event.keyCode > 122))
		event.returnValue = false;
}
function kp_convert_upper() {
	if ((event.keyCode >= 97 && event.keyCode <= 122))
		event.keyCode -= 32;
}
function kp_convert_lower() {
	if ((event.keyCode >= 65 && event.keyCode <= 90))
		event.keyCode += 32;
}


function kp_setup() {
	this.Integer = kp_integer;
	this.Numeric = kp_numeric;
	this.Character = kp_character;
	this.ConvertUpper = kp_convert_upper;
	this.ConvertLower = kp_convert_lower;
	return this;
}

var keyPressInput = new Object;
keyPressInput = kp_setup();

if (typeof xmlDoc== 'undefined'){
    var xmlDoc, loadStatus;
    var lang="en";
    var xmlFile = "../Admin/Langs-"+lang+".xml";
    if (window.ActiveXObject){
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.onreadystatechange=verify;
        loadStatus = xmlDoc.load(xmlFile);
        
    }else {
        xmlDoc=document.implementation.createDocument("","",null)
        if (xmlDoc.load) 
            loadStatus = xmlDoc.load(xmlFile);
        else {
            if (window.XMLHttpRequest) {
                xmlDoc = new XMLHttpRequest();
                if (xmlDoc) {
                    xmlDoc.open("GET", xmlFile, false);
                    xmlDoc.onreadystatechange= function(){
                        if (xmlDoc.readyState == 4) {
                         if (xmlDoc.status == 200) {
                                xmlDoc = xmlDoc.responseXML;
                                loadStatus=true;
                          }}
                    }
                      xmlDoc.send();
               }
            }
        }            
    }

    function loadXML(tag){
        var sRez='';
       
        if (loadStatus){
            xmlObj=xmlDoc.documentElement;
            if (xmlObj) 
              if (xmlObj.getElementsByTagName(tag).item(0))
                if (window.ActiveXObject)
                    sRez = xmlObj.getElementsByTagName(tag).item(0).text;
                else
                    sRez = xmlObj.getElementsByTagName(tag).item(0).textContent;
                    
        } 
        return sRez;
    }  
    function verify()
    {
     // 0 Object is not initialized
     // 1 Loading object is loading data
     // 2 Loaded object has loaded data
     // 3 Data from object can be worked with
     // 4 Object completely initialized
     if (xmlDoc.readyState != 4)
     {
       return false;
     }
    }
    
 }

