//general validation functions

var numb = '0123456789';
var lwr = 'abcdefghijklmnopqrstuvwxyz';
var upr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function isValid(parm,val) {
  if (parm == "") return true;
  for (i=0; i<parm.length; i++) {
    if (val.indexOf(parm.charAt(i),0) == -1) return false;
  }
  return true;
}

function isNum(parm) {return isValid(parm,numb);}
function isLower(parm) {return isValid(parm,lwr);}
function isUpper(parm) {return isValid(parm,upr);}
function isAlpha(parm) {return isValid(parm,lwr+upr);}
function isAlphanum(parm) {return isValid(parm,lwr+upr+numb);}
function isDecimal(parm) {return isValid(parm,numb+'.');}


function stripChars(s, bag) {
	var i;
	var returnString = "";

	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.

	for(i = 0; i < s.length; i++) {   
		// Check that current character isn't whitespace.
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1)
			returnString += c;
	}
	
	return returnString;
}

function IsLettre(aChar) {
	var bIsLetter;
	aChar = aChar.toLowerCase();
	
	if (aChar >= "a" && aChar <= "z") {
		bIsLetter = true;
	}
	else {
		bIsLetter = false;
	}
	
	return bIsLetter;
}
 
function IsDigit(aChar) {
	var bIsDigit;

	if (aChar =="0" || aChar =="1" || aChar =="2" || aChar =="3" || 
	 aChar =="4" || aChar =="5" || aChar =="6" || aChar =="7" || 
	 aChar =="8" || aChar =="9") {
		bIsDigit = true;
	}
	else {
		bIsDigit = false;
	}
	
	return bIsDigit;
}

function IsNumeric(s) {
	var bIsNumeric;
//	var re = /^\d{1,}$/
//	if(!re.test(s)) {
//		return false;
//	}
//	return true;

	bIsNumeric = true;
	for(var i=0;i<s.length;i++) {
		if(!IsDigit(s.substring(i,i+1)))
			bIsNumeric = false;
	}
	
	return bIsNumeric;
}


function CheckDecimal(s, sMessage) {
	var bIsDecimal;
	if (!isDecimal(s.value))
	{
		alert(sMessage);
		bIsDecimal = false;
	}
	else
		bIsDecimal = true;
	
	return bIsDecimal;
}
function CheckTel(obj, sMessage) {
	var bCheckTel;
	var i, str;
	var bCheck = true;
	
	var oForm = obj.form; 
	var sCountry = obj.name.replace(/Phone$/i, "Country"); 
	
	if (sCountry.search('Country') == -1 ) {
		sCountry = obj.name.replace(/Fax$/i, "Country"); 
	}
	
	var oCountry; 
	if (oForm.elements[sCountry]) {
		oCountry= oForm.elements[sCountry];
		sCountry = ((oCountry.type == "select") ? 
			oCountry.options[oCountry.selectedIndex].value : 
			oCountry.value);
		
		sCountry = sCountry.toUpperCase();
		if (sCountry == "CA" || sCountry == "US") { 
			bCheck = true;
		}
		else {
			bCheck = false;
		}
	}
						
	if (bCheck) { 
		
		str = obj.value.toString();
		str = stripChars(str,'()- ');
	
		if(str.length > 0) {
			if ((str.length == 10) && IsNumeric(str)) {
				obj.value = str.substring(0, 3) + ' ' + str.substring(3, 6) + '-' + str.substring(6, 10);
				bCheckTel = true;
			}
			else {
				alert(sMessage);
				obj.select();
				bCheckTel = false;
			}
		}
		else {
			bCheckTel = true;
		}
	}
	else {
	
		bCheckTel = true;
	}	
	
	return bCheckTel;
}

function CheckDate(obj, sMessage) {
	if (obj.value == "") return;
	//if (!sMessage) sMessage = prmBadDate;

	// check for the date input format, template: dd/mm/yyyy
	var sTest;
	var arrTest = new Array();

	arrTest = obj.value.match(/(^\d{1,2})[\/\.\-](\d{1,2})[\/\.\-](\d{4}$)/);
	if (arrTest && IsValidDate(arrTest[1], arrTest[2], arrTest[3])) {
		sTest = arrTest[1] +  '/' + arrTest[2] + '/' + arrTest[3];
		obj.value = sTest.replace(/0(\d\/)/g, "$1");
		return new Date(arrTest[3], arrTest[2] - 1, arrTest[1]);
	} else {
		if (sMessage) alert(sMessage);
		obj.select ();
		return null;
	}

}

function IsValidDate() {
	var maxDays, dd, mm, yyyy;

	// check number of arguments, convert strings to numbers
	if (arguments.length == 2) {
		yyyy = -1;
	} else if (arguments.length == 3) {
		yyyy = parseInt(arguments[2], 10);
	} else {
		return false;
	}
	dd = parseInt (arguments[0], 10);
	mm = parseInt (arguments[1], 10);

	// check for the month and date range
	if (isNaN(mm) || isNaN (dd) || isNaN(yyyy) || (mm < 1) || (mm > 12) || (dd < 1)) {
		return false;
	}
	// determine the maximum days of the given month
	switch (mm) {
		case 2:
			if ((yyyy % 4 != 0) || (yyyy % 100 == 0) && (yyyy % 400 != 0)) {
				maxDays = 28;
			} else {
				maxDays = 29;
			}
			break;
		case 4: case 6: case 9: case 11:
			maxDays = 30;
			break;
		default:
			maxDays = 31;
			break;
	}
	// check for the upper date bound
	if (dd > maxDays) {
		return false;
	}

	return true;
}

function CheckPwd(oControl, sMessage) { 
	var pwd = oControl.value; 
	
	if ((pwd.length > 0)&&(pwd.search(/^\w{4,10}$/gi) == -1)) { 
		alert(sMessage);
		oControl.value = ""; 
		oControl.focus();
		return false;
	} else { 
		return true; 
	}	
} 

function CheckConfirm(oSrc, oConfirm, sMessage) { 
	var i; 

	if ((oSrc.value == "")||(oConfirm.value == "")) { 
		oConfirm.value = "";
		return true;
	} else if (oSrc.value == oConfirm.value) { 
		return true; 
	} else { 
		alert(sMessage); 
		oConfirm.select();
		return false;
	} 
} 

function CheckText(oControl, sReg, sMessage) { 
	var sValue = oControl.value.replace(/\s+/gi, "");
	var bValid = (sValue == ""); 
	var re; 
				
	if (sReg == "d") { 
		bValid = bValid || (!isNaN(sValue)); 
	} else { 
		bValid = bValid || (sValue.search(new RegExp(sReg, "gi")) != -1);
	} 
	
	if (bValid) oControl.value = sValue;
	else if (sMessage) alert(sMessage); 

	return bValid; 
}

function CheckEmail(sControl, sMessage) {
	var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;

	if (email.test(sControl.value))
		return true;
	else {
		alert(sMessage);
		sControl.focus();
		return false;		
	}
}
