function txtLimit(el,limit){
	limit = parseInt(limit);
	if(el.value.length>limit) {
		alert("Data limit for " + el.desc + " is "+limit+" characters.\nPlease shorten your information.");
		el.focus();
		/*el.select(); */
		return false;
	} else return true;
}

function txtMinLimit(el,limit)
{
	el.value = el.value.replace(/(^\s*)|(\s*$)/g, "");
	if(el.value.length==0) return true;
	limit = parseInt(limit);
	if(el.value.length<limit)
	{
		alert("Please enter at least "+limit+" characters for "+el.desc+".");
		el.focus();
		/*el.select(); */
		return false;
	}
	else
	return true;
}

function NE(el)
{
	//el.value = el.value.replace(/(^\s*)|(\s*$)/g, "");
	switch(el.type.toUpperCase())
	{
		case "FILE" :
		case "TEXTAREA":
		case "PASSWORD":
		case "TEXT" : if(el.value.replace(/(^\s*)|(\s*$)/g, "")==""){el.focus();return false;} else return true; break;
		case "CHECKBOX" : if(!el.checked){el.focus();return false;} else return true; break;
		case "SELECT-ONE" : if(el.selectedIndex == -1){el.focus();return false;}
		if(el.options[el.selectedIndex].value==""){el.focus();return false;} else return true; break;
		case "SELECT-MULTIPLE" : if(el.selectedIndex==-1){el.focus();return false;} else return true; break;
		default : return true;
	}
}


function isChar(el,mode){
	var valid=1;
	elValue = el.value;
	if(el.value.length==0) return true;
	if(mode==0){var regex = new RegExp(/^[a-zA-Z]+$/); valid=regex.test(el.value)}
	if(mode==1){var regex = new RegExp(/^[a-zA-Z0-9\s]+$/); valid=regex.test(el.value)}
	if(mode==2){var regex = new RegExp(/^[a-zA-Z0-9.,_\-\s]+$/); valid=regex.test(el.value)}
	if(mode==3){var regex = new RegExp(/^[a-zA-Z0-9.,_\-\s]+$/); valid=regex.test(el.value)}
	if(mode==4){var regex = new RegExp(/^[a-zA-Z][a-zA-Z0-9._\-]*$/); valid=regex.test(el.value)}
	if(mode==5){var regex = new RegExp(/^[a-zA-Z0-9]+$/); valid=regex.test(el.value)}

	if(!valid) {el.focus();el.select();return false;}
	else return true;
}

function isFloat(e1)
{
	var valid = 1;
	e1Value = e1.value;
	if(e1.value==null)	return false;
	if(e1Value.length==0)	return false;
	var DecimalFound = false;
	for (var i = 0; i < e1Value.length; i++) {
		var ch = e1Value.charAt(i);
		if (i == 0 && ch == "-") {
			return false;
		}
		if (ch == "." && !DecimalFound) {
			DecimalFound = true;
			continue;
		}
		if (ch < "0" || ch > "9") {
			return false;
		}
	}
	return true;
}

function isInteger(e1)
{
	var valid = 1;
	e1Value = e1.value;
	if(e1.value==null)	return false;
	if(e1Value.length==0)	return false;
	var DecimalFound = false;

	for (var i = 0; i < e1Value.length; i++) {
		var ch = e1Value.charAt(i);
		if (i == 0 && ch == "-") {
			return false;
		}
		if (ch == "." && !DecimalFound) {
			DecimalFound = true;
			return false;
		}
		if (ch < "0" || ch > "9") {
			return false;
		}
	}
	return true;
}
function checkPhone(el) 
{
	//var phone2 = /^\d{10,15}$/
	//var phone2 = /[0-9a-zA-Z'-']{10,15}/
	//var phone2 = /^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]{10,15}$/
	var phone2 = /^(([a-zA-Z0-9-()+][a-zA-Z0-9-()]*[a-zA-Z0-9-()]{9,19}))$/
	var phone3 = /^[a-zA-Z]*$/
	var phone4 = /^[-()+]*$/
	var flag = 0;
	if (phone2.test(el.value)) {
		if(phone3.test(el.value))
		{
			el.focus();el.select();
			return false;
		}
		else if(phone4.test(el.value))
		{
			el.focus();el.select();
			return false;
		}
		else
		{
			return true;
		}
 	}
		else {
		el.focus();el.select();
 		return false;
 	}
}

function checkEMP(el) 
{
	var phone2 = /^\d{1,5}$/
	if (phone2.test(el.value)) {
   		return true;
 	} else {
		el.focus();el.select();
 		return false;
 	}
}


function validEmail(el){
	var elval= el.value.replace(/[\n\r\s]+/,"");
	if(elval =="") return true;
	var str=el.value;
	var filter=/^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/	;
	if (filter.test(str))
	testresults=true;
	else {el.focus();el.select();testresults=false;}
	return (testresults);
}

function validPhone2(date)
{
	return true;
}

function err(el,tp){
	var prefix = new Array();
	var suffix = new Array();

	prefix["BLANK"] = "Please enter";
	suffix["BLANK"] = "";
	prefix["FILE"] = "Please";
	suffix["FILE"] = "";
	prefix["MINLENGTH"] = "The ";
	suffix["MINLENGTH"] = "has less letters.";
	prefix["LIMIT"] = "The Limit for";
	suffix["LIMIT"] = "has exceeded. Please shorten it.";
	prefix["INT"] = "";
	suffix["INT"] = " accepts only integer data.";
	prefix["FLOAT"] = "";
	suffix["FLOAT"] = "accepts only float data.";
	prefix["CHAR1"] = "";
	suffix["CHAR1"] = " can contain alphabets only.";
	prefix["CHAR2"] = "";
	suffix["CHAR2"] = " can contain either space,numeric or alphabets";
	prefix["CHAR3"] = "";
	suffix["CHAR3"] = " can contain alphabets,numeric, space, hyphen, underscore or dot only.";
	prefix["CHAR4"] = "";
	suffix["CHAR4"] = " must start with an alphabet.";
	prefix["CHAR5"] = "";
	suffix["CHAR5"] = "should start with alphabet and accepts alphanumeric, hyphen, underscore & dot";
	prefix["CHAR6"] = "";
	suffix["CHAR6"] = "can contain alphanumeric only";
	prefix["EMAIL"] = "Please enter valid";
	suffix["EMAIL"] = "";
	prefix["IP"] = "";
	suffix["IP"] = " provided by you is either invalid or special which cannot be used here.";
	prefix["URL"] = "Invalid ";
	suffix["URL"] = "";
	prefix["PATH"] = "Invalid ";
	suffix["PATH"] = "";
	prefix["FILETYPE"] = "You have selected invalid file type for ";
	suffix["FILETYPE"] = "";

	prefix["DUPLICATE"] = "Please verify your";
	suffix["DUPLICATE"] = "";

	prefix["COMBO"] = "Please select";
	suffix["COMBO"] = "";
	prefix["CHECKBOX"] = "Please check";
	suffix["CHECKBOX"] = "";
	prefix["DATE"] = "";
	suffix["DATE"] = " is not a valid date or not in mm/dd/yyyy format";
	prefix["IMG1"] = "";
	suffix["IMG1"] = " can contain jpg, gif only";
	prefix["PHONE1"] = "Invalid ";
	suffix["PHONE1"] = "";
	prefix["PHONE2"] = "Invalid ";
	suffix["PHONE2"] = "";
	prefix["EMP"] = "Please enter numbers only in ";
	suffix["EMP"] = "";


	if((el.prefix) || (el.suffix))
	{
		var errStr ="";
		if(el.prefix) errStr+=el.prefix+" ";

		errStr+=el.desc;

		if(el.suffix) errStr+=" "+el.suffix;

		alert(errStr);
	}
	else{
		if(suffix[tp.toUpperCase()].length>0)
		alert(prefix[tp.toUpperCase()]+" "+toProperCase(el.desc)+" "+ suffix[tp.toUpperCase()]+".");
		else
		alert(prefix[tp.toUpperCase()]+" "+el.desc+".");
	}
	el.focus();

}

function toProperCase(pstrValue){
	var strUpperCase = pstrValue.toUpperCase()
	var strProperCase = strUpperCase.substring(0,1)+strUpperCase.substring(1).toLowerCase();
	return strProperCase;
}

/*<-----------------------PARENT FUNCTIONS-----------------------------------> */
function Validator(frmname)
{
	k=true;
	this.formobj=document.forms[frmname];
	if(!this.formobj)
	{
		alert("BUG: couldnot get Form object " + frmname);
		k=false;
		return;
	}


	/*
	if(this.formobj.onsubmit)
	{
	this.formobj.old_onsubmit = this.formobj.onsubmit;
	this.formobj.onsubmit=null;
	}
	else
	{
	this.formobj.old_onsubmit = null;
	}
	*/
	/*Function redirections */
	this.addValidation = addValidation;
	/* this.formobj.onsubmit=validateAll; */
	this.validateAll=validateAll;
	this.ValidateElement=ValidateElement;
	this.countChars=countChars;
	this.formobj.err = err;
	this.sequence = 0;
	this.updateAlert = updateAlert;

}

function updateAlert(fix,alertID,content){
	if (fix.toLowerCase()=="prefix") this.formobj.prefix[alertID]=content;
	else this.formobj.suffix[alertID]=content;
}

function addValidation(el_desc,el,req,minLen,maxLen,Type, dup, additional, prefix,suffix, inline)
{
	var itemobj = this.formobj[el];
	if(!itemobj)
	{
		alert("BUG: Could not get the input object named: "+ el_desc);
		return;
	}
	else{

		itemobj.validated = true;
		itemobj.desc = el_desc;
		itemobj.req = req;
		itemobj.sequence = this.sequence++;
		if(minLen) itemobj.minLen = minLen;
		if(maxLen) {itemobj.maxLen = maxLen;if(itemobj.type.toUpperCase()=="TEXT" && itemobj.maxLen!=0)itemobj.maxLength=maxLen};
		if(Type) itemobj.Type = trimEL(Type.toUpperCase());
		if(dup) itemobj.dup = dup;
		itemobj.additional = additional;
		if(prefix) itemobj.prefix = prefix;
		if(suffix) itemobj.suffix = suffix;
		if(inline == "1"){
			if(!this.ValidateElement(itemobj)){
				return false;
			}else{
				return true;
			}

		}
	}
}

function ValidateElement(el){
	if(el.validated){
		if(((el.type).toUpperCase=="TEXT")||((el.type).toUpperCase=="TEXTAREA")) el.value=trimEL(el.value);
		/*Conditional checking starts here */
		if(el.req) if(el.req!=0)
		if(!NE(el))
		{
			switch(el.type.toUpperCase())
			{
				case "FILE" : this.formobj.err(el,"FILE");  break;
				case "TEXTAREA":
				case "PASSWORD":
				case "TEXT" : this.formobj.err(el,"BLANK");  break;
				case "CHECKBOX" : this.formobj.err(el,"CHECKBOX"); ; break;
				case "SELECT-ONE" :
				this.formobj.err(el,"COMBO"); break;
				case "SELECT-MULTIPLE" : this.formobj.err(el,"COMBO"); break;
				default : this.formobj.err(el,"BLANK");
			}

			return false
		};
		if(el.Type=="INT") if(el.value != "" && !isInteger(el)){this.formobj.err(el,"INT"); return false};
		if(el.Type=="FLOAT") if(el.value != "" && !isFloat(el)){this.formobj.err(el,"FLOAT"); return false};
		if(el.minLen) if(el.minLen!=0) if(!txtMinLimit(el,el.minLen)){return false};
		if(el.maxLen) if(el.maxLen!=0) if(!txtLimit(el,el.maxLen)){return false};
		if(el.Type=="CHAR1") if(el.value != "" && !isChar(el,0)){this.formobj.err(el,"CHAR1"); return false};
		if(el.Type=="CHAR2") if(el.value != "" && !isChar(el,1)){this.formobj.err(el,"CHAR2"); return false};
		if(el.Type=="CHAR3") if(el.value != "" && !isChar(el,2)){this.formobj.err(el,"CHAR3"); return false};
		if(el.Type=="CHAR4") if(el.value != "" && !isChar(el,3)){this.formobj.err(el,"CHAR4"); return false};
		if(el.Type=="CHAR5") if(el.value != "" && !isChar(el,4)){this.formobj.err(el,"CHAR5"); return false};
		if(el.Type=="CHAR6") if(el.value != "" && !isChar(el,5)){this.formobj.err(el,"CHAR6"); return false};
		if(el.Type=="EMAIL") if(el.value != "" && !validEmail(el)){this.formobj.err(el,"EMAIL"); return false;}
		if(el.Type=="IP") if(el.value != "" && !isIP(el)){return false;}
		if(el.Type=="URL") if(el.value != "" && !validURL(el)){this.formobj.err(el,"URL"); return false;}
		if(el.Type=="PATH") if(el.value != "" && !validPATH(el)){this.formobj.err(el,"PATH"); return false;}
		if(el.Type=="IMG") if(!checkExt(el,"IMG")){this.formobj.err(el,"FILETYPE"); return false;}
		if(el.Type=="DOC" || el.Type=="JPG" || el.Type=="XLS" || el.Type=="PDF" ||el.Type=="TXT" )
		if(!checkExt(el, el.Type)){this.formobj.err(el,"FILETYPE"); return false;}
		if(el.Type=="COMBO") if(el.selectedIndex == 0) {this.formobj.err(el, "COMBO"); return false; }
		if(el.dup){if(this.formobj[el.dup]) if(el.value != this.formobj[el.dup].value) {this.formobj.err(el, "DUPLICATE"); return false; }}
		if(el.Type=="DATE")if(!isDate(el)){this.formobj.err(el,"DATE"); return false};
		if(el.Type=="IMG1")if(!validImage(el.value, el.additional)){this.formobj.err(el,"IMG1"); return false};
		if(el.Type=="PHONE1")if(!validPhone1(el, el.additional)){this.formobj.err(el,"PHONE1"); return false};
		if(el.Type=="PHONE2")if(!validPhone2(el, el.additional)){this.formobj.err(el,"PHONE2"); return false};
		if(el.Type=="CHECKPHONE")if(!checkPhone(el)){this.formobj.err(el,"PHONE2"); return false};
		if(el.Type=="CHECKEMP")if(!checkEMP(el)){this.formobj.err(el,"EMP"); return false};
		

		/*Conditional checking ends here */
	}
	return true;
}
/*Final submission time validation */
function validateAll()
{
	var i=0;

	var sortedElement = new Array(); /* store element in order they added in validatd class */
	/* this gives the way to apply validation sequence as they entered in validator class
	not the way they arranged on form.
	*/
	while(this.formobj.elements.length!=i){
		var el = this.formobj.elements[i];
		if(el.validated)
		{
			sortedElement[el.sequence] = el;
		}
		i++;
	}

	for(i=0;i<sortedElement.length; i++){
		var el = sortedElement[i];
		if(!this.ValidateElement(el)){
			return false;
		}
	}
	return true;
}


/*<---------------------PARENT FUNCTIONS ENDS-----------------------------------> */

/*Count characters in different text box*/
function countChars(strpCharObject,strpCntObject)
{
	var el = eval("strpCharObject");
	var strVal=strpCharObject.value;
	if(strpCharObject.value!=""){
		var str=strpCharObject.value;
		var Bal=el.maxLen-str.length;
		if(Bal>=0){strpCntObject.value=Bal};
		if(Bal<=0){
			sub=strVal.substr(0,20);
			strpCharObject.value=sub;
		}
	}
	if(strpCharObject.value==""){
		strpCntObject.value=el.maxLen;
	}
}

function trimEL(el)
{
	var str = el.replace(/[\n\r\s]+/,"");
	if(str!=="") while(str.charAt(0)==" "){str = str.substring(1,str.length)}
	if(str!=="") while(str.charAt(str.length-1)==" "){str = str.substring(0,(str.length)-1)}
	return str;
}

function getExt(file)
{
	var ext = trimEL(file);
	return ext.substring(ext.lastIndexOf(".")+1,ext.length);
}

function inArray(data, arr)
{
	if(arr.length)
	{
		for(i=0;i<arr.length;i++)
		if(arr[i]==data)
		return true;
		return false;
	}
	return false;
}

function ValidateAlphaNumeric( text )
{
	for ( c=0; c < text.length; c ++ )
	{
		alpha =(text.charCodeAt ( c ) == 95)||(text.charCodeAt ( c ) == 46)||(text.charCodeAt ( c ) == 45)||( text.charCodeAt ( c ) >= 48 && text.charCodeAt ( c ) <=57 ) || ( text.charCodeAt ( c ) >= 48 && text.charCodeAt ( c ) <=57 ) || ( text.charCodeAt ( c ) >= 65 && text.charCodeAt ( c ) <=90 ) || ( text.charCodeAt ( c ) >= 97 &&  text.charCodeAt ( c ) <=122 )
		if ( !alpha ) {
			return true;
		}
	}
	return false;
}

/*
function added by dipa for Setting a maxlength on a textarea.
*/
function textCounter( field, countfield, maxlimit ) {
var remainVal=0;
  if ( field.value.length > maxlimit )
  {
    field.value = field.value.substring( 0, maxlimit );
   // alert( 'You can enter maximum '+ maxlimit +' characters.' );
    return false;
  }
  else
  {
  	
  	remainVal = maxlimit - field.value.length;
  	
    countfield.value = remainVal;
  }
}

/*
function added by abhay for Setting a maxlength on a textarea.
*/
function textQuoteCounter( field, countfield, maxlimit ) {
var remainVal=0;
  if ( field.value.length > maxlimit )
  {
    field.value = field.value.substring( 0, maxlimit );
    //alert( 'You can enter maximum '+ maxlimit +' characters.' );
    //alert( 'Please remove some text from QUOTE in order to post your reply.' );
	return false;
  }
  else
  {
  	
  	remainVal = maxlimit - field.value.length;
  	
    countfield.value = remainVal;
  }
}


function textCounterMsg( field, countfield,msg, maxlimit ) {
var remainVal=0;

//msg = document.getElementById('lblMsg');
  if ( field.value.length > maxlimit )
  {
	
    field.value = field.value.substring( 0, maxlimit );	
	msg.value =  'You can enter maximum '+ maxlimit +' characters.';
	//msg.innerHTML = 'You can enter maximum '+ maxlimit +' characters.';
    //alert( 'You can enter maximum '+ maxlimit +' characters.' );
    return false;
  }
  else
  {
  	remainVal = maxlimit - field.value.length;
  	
    countfield.value = remainVal;
  }
}

