/**************************************************
	File: validations.js
	Include-file for validations
**************************************************/


var doc = "document.";
var alphabets= /[a-zA-Z]/;
var nameFilter= /^[a-zA-Z\'\-\s]+$/;
var startNameFilter = /^[a-zA-Z]$/;
var nameGenFilter = /^[0-9a-zA-Z\-\s\'\!\@\#\$\%\^\&\*\(\)\-\_\+\?\.\:\;\[\]\/\,\"\=]+$/;
var startGenNameFilter = nameGenFilter;
var phoneFilter = /^[0-9\-\(\)\s\+]+$/;
var startPhoneFilter = /^[0-9\+\(]$/;
var numberFilter = /^[0-9]+$/;
var numberFloatFilter = /^[-+]?[0-9]+(\.[0-9]+)?$/;
//var emailFilter=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
var emailFilter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i ;
var unameFilter = /^[0-9a-zA-Z\-\_\.]+$/;
var stringFilter = /^[a-zA-Z\s]+$/;

// Checking a field whether it is blank after trimming the white spaces at the ends.
function checkBlank(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(inputVal.length == 0){
   return errorAlert(formName,fieldName, "The field \""+fieldNameString+"\" should have a valid content.");
 }
 return true;
}
//check the existance of alphabets
function checkAlpha(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!alphabets.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}

//check the existance of alphabets
function checkNumber(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!numberFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}

//check the existance of alphabets
function checkFloatNumber(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!numberFloatFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}

// Check for a valid name.
function checkName(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 if(!regName(formName,fieldName,fieldNameString)){
   return false;
}
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(findUniqueChars(inputVal).length <= 1){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}
function checkLastName(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 if(!regName(formName,fieldName,fieldNameString)){
   return false;
}
 return true;
}

function checkPhone(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!phoneFilter.test(inputVal) || !startPhoneFilter.test(inputVal.charAt(0))){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 if(findUniqueChars(inputVal).length <= 1 || inputVal.length < 6){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}

function checkZip(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!numberFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}

function checkPasswords(formName,fieldName1,fieldName2,passMinLen,passMaxLen){
 if(!checkBlank(formName,fieldName1,"Password")){
   return false;
 }
 var inputVal1 = Trim(eval(doc+formName+"."+fieldName1+".value"));
 var inputVal2 = Trim(eval(doc+formName+"."+fieldName2+".value"));
 if(inputVal1 != inputVal2){
   return errorAlert(formName,fieldName1,"Passwords do not match. Please try again.");
 }
 if(!checkPasswordLength(formName,fieldName1,passMinLen,passMaxLen)){
   return false;
 }
 return true;
}
function checkCountry(formName,fieldName,fieldNameString){
 if(!checkBlank(formName,fieldName,fieldNameString)){
   return false;
 }
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!stringFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid \""+fieldNameString+"\"");
 }
 return true;
}
// Supporting Functions.
// check a general name.
function checkPasswordLength(formName,fieldName,passMinLen,passMaxLen){
var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(inputVal.length < passMinLen || inputVal.length > passMaxLen){
    return errorAlert(formName,fieldName,"The password string should have a length between "+passMinLen+" and "+passMaxLen);
 }
 return true;
}
function regGenName(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!nameGenFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid Characters in the field \""+fieldNameString+"\"");
 }
 if(!startGenNameFilter.test(inputVal.charAt(0))){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 if(findUniqueChars(inputVal).length <= 1){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}
// check for a valid name
function regName(formName,fieldName,fieldNameString){
 var inputVal = Trim(eval(doc+formName+"."+fieldName+".value"));
 if(!nameFilter.test(inputVal)){
   return errorAlert(formName,fieldName,"Invalid Characters in the field \""+fieldNameString+"\"");
 }
 if(!startNameFilter.test(inputVal.charAt(0))){
   return errorAlert(formName,fieldName, "The \""+fieldNameString+"\" you entered does not seem to be valid.");
 }
 return true;
}

function findUniqueChars(str){
 arrChars = str.split('');
 checkArr = unique(arrChars);
 return checkArr;
}
function unique(a) {
	tmp = new Array(0);
	for(i=0;i<a.length;i++){
		if(!contains(tmp, a[i])){
			tmp.length+=1;
			tmp[tmp.length-1]=a[i];
		}
	}
	return tmp;
}
function contains(a, e) {
	for(j=0;j<a.length;j++)if(a[j]==e)return true;
	return false;
}
// Error Alerter.
function errorAlert(formName,fieldName, msg){
 alert(msg);
 eval(doc+formName+"."+fieldName+".focus()");
 return false;
}
// Trim Function. Function to trim the starting and ending white spaces of a string.
function Trim(str) {
 return LTrim(RTrim(str));
}
function LTrim(str) { 
 for (var ii=0; ii<str.length && str.charAt(ii)<=" " ; ii++) ;
 return str.substring(ii,str.length);
}
function RTrim(str) {
 for (var ii=str.length-1; ii>=0 && str.charAt(ii)<=" " ; ii--) ;
 return str.substring(0,ii+1);
}


