/*
  -------------------------------------------------------------------------
	                    JavaScript Form Validator Class                             
  -------------------------------------------------------------------------  
*/  

	function Validator(frmname){
	  this.formobj = document.forms[frmname];
		if(!this.formobj){
		 // alert("BUG: couldnot get Form object "+frmname);
		return false;
			return;
		}
		if(this.formobj.onsubmit){
			this.formobj.old_onsubmit = this.formobj.onsubmit;
			this.formobj.onsubmit=null;
		}else{
			this.formobj.old_onsubmit = null;
		}
		this.formobj.onsubmit=form_submit_handler; 
		this.addValidation = add_validation;
		this.setAddnlValidationFunction=set_addnl_vfunction;
		this.setAddnlValidationFunctionAdmin=set_addnl_vfunctionAdmin;
		this.clearAllValidations = clear_all_validations;
	}

	// ---------To check the Password & confirm Password (Registration)

	function set_addnl_vfunction(DoCustomValidation){
	  this.formobj.addnlvalidation = DoCustomValidation;
	}

	function DoCustomValidation(){
  		if(frmRegister.txtPassword.value != frmRegister.txtConfirmPassword.value){
			alert('Confirm password does not match with new password !! ');
			return false;
  		}else{
  			return true;
  		}
	}

//function checkConfirmPassword(frmname){
//	alert ("hi");
//	this.formobj=document.forms[frmname];
//	if(this.formobj.txtPassword.value ! = this.formobj.txtConfirmPassword.value){
//		alert('Confirm password does not match with new password !! ');
//		return false;
//	}else{
//		return true;
//	}
//}

//----------


// ---------To check the Password & confirm Password (Change Password Admin)



	function set_addnl_vfunctionAdmin(DoCustomValidationAdmin){
	  this.formobj.addnlvalidation = DoCustomValidationAdmin;
	}



function DoCustomValidationAdmin(){
  if(frmChangePassword.txtNewPassword.value != frmChangePassword.txtConfirmPassword.value)  {
    alert('Confirm password does not match with new password !! ');
	frmChangePassword.txtNewPassword.value="";
	frmChangePassword.txtNewPassword.focus();
	frmChangePassword.txtNewPassword.style.backgroundColor="#FFFFCC";
    return false;
  }else {
    return true;
  }
}

//----------

function clear_all_validations(){
	for(var itr=0;itr < this.formobj.elements.length;itr++){
		this.formobj.elements[itr].validationset = null;
	}
}

function form_submit_handler(){
	for(var itr=0;itr < this.elements.length;itr++){
		if(this.elements[itr].validationset && !this.elements[itr].validationset.validate()){
			return false;
		}
	}
	if(this.addnlvalidation){
	  str =" var ret = "+this.addnlvalidation+"()";
	  eval(str);
    if(!ret) return ret;
    
	}
	return true;
}

function add_validation(itemname,descriptor,errstr){
  	if(!this.formobj){
	  	alert("BUG: the form object is not set properly.");
		return;
	}//if
	var itemobj = this.formobj[itemname];
  	if(!itemobj){
  		//	  alert("BUG: Couldnot get the input object named: "+itemname);
		return;
	}
	if(!itemobj.validationset){
	  itemobj.validationset = new ValidationSet(itemobj);
	}
  	itemobj.validationset.add(descriptor,errstr);
}

function ValidationDesc(inputitem,desc,error){
  	this.desc=desc;
	this.error=error;
	this.itemobj = inputitem;
	this.validate=vdesc_validate;
}

function vdesc_validate(){
 if(!V2validateData(this.desc,this.itemobj,this.error)) {
    this.itemobj.focus();
	this.itemobj.style.backgroundColor="#FFFFCC";
	return false;
 }
 return true;
}

function ValidationSet(inputitem){
    this.vSet=new Array();
	this.add= add_validationdesc;
	this.validate= vset_validate;
	this.itemobj = inputitem;
}

function add_validationdesc(desc,error){
  this.vSet[this.vSet.length]= new ValidationDesc(this.itemobj,desc,error);
}

function vset_validate(){
	for(var itr=0;itr<this.vSet.length;itr++){
		if(!this.vSet[itr].validate()){
			return false;
		}
	}
	return true;
}

function validateEmailv2(email){
// a very simple email validation checking. 
// you can add more complex email checking if it helps 
    if(email.length <= 0){
	  return true;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null ){
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }

    if(splitted[2] != null){
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null){
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
	return false;
}



function V2validateData(strValidateStr,objValue,strError){ 
	//alert(strValidateStr);
    var epos = strValidateStr.search("="); 
    var  command  = ""; 
    var  cmdvalue = ""; 
    var  textboxname = (objValue.name).substring(3);//To Print the textboxname while error occurs
	if(epos >= 0){ 
     	command  = strValidateStr.substring(0,epos); 
     	cmdvalue = strValidateStr.substr(epos+1); 
    }else{
     	command = strValidateStr; 
    } 
    switch(command){
//    	case "checkBox":{
//    		alert("here");
//    		break;
//    	}
        case "req": 
        case "required": 
         { 
         	if(eval(objValue.value.length) == 0){ 
         		if(!strError || strError.length ==0){ 
                	strError ="Required Field !!";
                	//objValue.name.focus();
			  }//if 
              alert(strError); 
              return false;
           }//if 
           break;             
         }//case required 

        case "maxlength":
        case "maxlen":{ 
             if(eval(objValue.value.length) >  eval(cmdvalue)){ 
               if(!strError || strError.length ==0){ 
                 strError = cmdvalue+"characters maximum "; 
               }//if
               alert(strError); 
               return false; 
             }//if 

             break; 

          }//case maxlen 

        case "minlength": 
        case "minlen":  { 
             if(eval(objValue.value.length) <  eval(cmdvalue)) { 
               if(!strError || strError.length ==0) { 
                 strError = cmdvalue + " characters minimum !! "; 
               }//if               
               alert(strError); 
               return false;
             }//if 
             break;
            }//case minlen 

        case "alnum": 
        case "alphanumeric": {
              var charpos = objValue.value.search("[^A-Za-z0-9 ]"); 
			  var At=objValue.value.charAt(0);
			  if(isNaN(objValue.value.charAt(0))==0){
			  	alert("Please Enter Valid character !!");
			  	return false;
			  }else if(objValue.value.length > 0 &&  charpos >= 0){
						if(!strError || strError.length ==0) { 
							  strError ="Only alpha-numeric characters allowed !!"; 
							}//if 					
						alert(strError);
					return false; 
					  }
			  break; 
       }//case alphanumeric 

        case "alnumlogin": 
        case "alphanumericlogin": 

           { 

			  

              var charpos = objValue.value.search("[^A-Za-z0-9_-]"); 

              var At=objValue.value.charAt(0);

			  if(isNaN(objValue.value.charAt(0))==0){

			  alert("Enter valid Login Name !!");

			  return false;

			  }else if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

               if(!strError || strError.length ==0) 

                { 

                  strError ="Only alpha-numeric, undescores, dash are allowed !! "; 

                }//if               

                return false; 

              }//if 

              break; 

			 

           }//case alphanumericlogin 

		  

        case "num": 

        case "numeric": 

           { 

              var charpos = objValue.value.search("[^0-9]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                if(!strError || strError.length ==0) 

                { 

                  strError = "Only digits allowed "; 

                }//if               

                alert(strError); 

                return false; 

              }//if 

              break;               

           }//numeric 

        case "alphabetic": 

        case "alpha": 

           { 

              var charpos = objValue.value.search("[^A-Za-z]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = "Only alphabetic characters allowed !!"; 

                }//if                             

                alert(strError); 

                return false; 

              }//if 

              break; 

           }//alpha 

					

		 case "alphabeticumerictrim": 

         case "alpha1numtrim": 

          { 

			/*var at=objValue.value.charAt(0);

			if(at==0) {

			alert("Enter the first character without white space");

		    return false

			}*/

			if(objValue.value.length < 0 &&  charpos < 0 ) 

              {

                  if(!strError || strError.length ==0) 

                { 

                  strError = "Only alphabetic characters allowed !!"; 

                }//if                             

                alert(strError); 

                return false; 

              }//if 

              break; 

           }//alphalnumtrim 

		

		 case "whitespaceatbegining": 

         case "whitespatbeg": 

          { 

			var at=objValue.value.charAt(0);

			if(at==0) {

			alert("Enter the first character without white space !!");

		    return false

			}

		break;

		 }

	case "validUrl":
	{
		var goodurl =objValue.value.match("^((http:\/\/www\.|https:\/\/www\.|ftp:\/\/|www\.|www\.)([a-zA-Z0-9]+)(\.[a-zA-Z]{2,3}))$");	
		
		if (!goodurl)
		{
		   alert("Please enter a valid website URL");
		   objValue.focus();
		   return false;
		}
		else{
			return true;
		}
	break;		
	}
	
	case "validLinkUrl":
	{
		var goodurl =objValue.value.match("^((http:\/\/www\.|https:\/\/www\.|ftp:\/\/|www\.|www\.)([a-zA-Z0-9]+)(\.[a-zA-Z]{2,3}\/[a-zA-Z\.]+))$");	
		
		if (!goodurl)
		{
		   alert("Please enter a valid website URL.");
		   objValue.focus();
		   return false;
		}
		else{
			return true;
		}
	break;		
	}
	case "specialCharacter":
	{
		var goodChararter =objValue.value.match("^([a-zA-Z0-9-&(\)\. ]+)$");	
		
		if (!goodChararter)
		{
		   alert("Please do not enter any special character.");
		   objValue.focus();
		   return false;
		}
		else{
			return true;
		}
	break;		
	}
			 

	

		case "alnumhyphen":

			{

              var charpos = objValue.value.search("[^A-Za-z0-9\-_]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = "characters allowed are A-Z,a-z,0-9,- and _"; 

                }//if                             

                alert(strError); 

                return false; 

              }//if 			

			break;

			}

		

        case "email": 

          { 

               if(!validateEmailv2(objValue.value)) 

               { 

                 if(!strError || strError.length ==0) 

                 { 

                    strError ="Enter a valid Email address !! "; 

					 

                 }//if                                               

                 alert(strError); 

                 return false; 

               }//if 



				var at=objValue.value.charAt(0);

				if(objValue.value.indexOf('@.') != -1 || objValue.value.indexOf('.@') != -1 || objValue.value.indexOf('..') != -1 || at=='.'){

				alert("Enter a valid Email address !! ");

				}

				

				/*

				if(at==".") {

				alert("Enter a valid Email address ");

				return false

				}*/



           break; 

          }//case email 

        case "lt": 

        case "lessthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert("Should be a number !!"); 

              return false; 

            }//if 

            if(eval(objValue.value) >=  eval(cmdvalue)) 

            { 

              if(!strError || strError.length ==0) 

              { 

                strError = " value should be less than "+ cmdvalue; 

              }//if               

              alert(strError); 

              return false;                 

             }//if             

            break; 

         }//case lessthan 

        case "gt": 

        case "greaterthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert("Should be a number !!"); 

              return false; 

            }//if 

             if(eval(objValue.value) <=  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError =" value should be greater than "+ cmdvalue; 

               }//if               

               alert(strError); 

               return false;                 

             }//if             

            break; 

         }//case greaterthan 

        case "regexp": 

         { 

		 	if(objValue.value.length > 0)

			{

	            if(!objValue.value.match(cmdvalue)) 

	            { 

	              if(!strError || strError.length ==0) 

	              { 

	                strError = " Invalid characters found !! "; 

	              }//if                                                               

	              alert(strError); 

	              return false;                   

	            }//if 

			}

           break; 

         }//case regexp 

        case "dontselect": 

         { 

            if(objValue.selectedIndex == null) 

            { 

              alert("BUG: dontselect command for non-select Item."); 

              return false; 

            } 

            if(objValue.selectedIndex == eval(cmdvalue)) 

            { 

             if(!strError || strError.length ==0) 

              { 

              strError =" Please Select one option !! "; 

              }//if                                                               

              alert(strError); 

              return false;                                   

             } 

             break; 

         }//case dontselect 
		
		
		//*************************************************************************************
		//				Case			:		chkselect
		//				Use				:		to check if a value is selected for dropdown
		//				Developed By	:		Amardeep Singh
		//				Developed Date	:		22-12-2006
		//				Modified By		:
		//				Modified Date	:		
		//*************************************************************************************

        case "chkselect":
		{
			if(objValue.selectedIndex == "" || objValue.selectedIndex == 0)
			{
				if(!strError || strError.length ==0)
				{
					strError =" Please Select one option !! ";
				}//if
				
				alert(strError);
				return false;
			}
			
			break;
		}//case chkselect
		
		case "chkChecked":
		{
			alert ("hi");
			return false;
//			if(objValue.checked == false ){
//				if(!strError || strError.length ==0){
//					strError =" Please Select one option !! ";
//				}				
//				alert(strError);
//				return false;
//			}			
//			break;
		}

		//*************************************************************************************
		//				Case			:		chkMultiselect
		//				Use				:		to check if a value is selected for multi-select
		//										form elements
		//				Developed By	:		Amardeep Singh
		//				Developed Date	:		22-12-2006
		//				Modified By		:
		//				Modified Date	:		
		//*************************************************************************************

        case "optMultiselect":
		{
			
		//	alert(objValue.form.elements.length);return false;
			iFlagChecked = 0;
		//	alert(objValue.options.length);return false;
			for(var itr=0;itr < objValue.options.length;itr++)
			{
				if(objValue.options[itr].selected == true)
				{
					iFlagChecked = 1;
				}
			}
			if(!iFlagChecked)
			{
				if(!strError || strError.length == 0)
				{
					strError =" Please Select one option !! ";
				}//if
				
				alert(strError);
				return false;
			}
			
			break;
		}//case chkMultiselect
		
		
		//*************************************************************************************
		//				Case			:		chkDateToday
		//				Use				:		to check if a value is selected for multi-select
		//										form elements
		//				Developed By	:		Amardeep Singh
		//				Developed Date	:		22-12-2006
		//				Modified By		:
		//				Modified Date	:		
		//*************************************************************************************

        case "chkMultiselect":{
			//alert(objValue);return false;
		//	alert(objValue.form.elements.length);return false;
			iFlagChecked = 0;
		//	alert(objValue.options.length);return false;
			for(var itr=0;itr < objValue.options.length;itr++)
			{
				if(objValue.options[itr].selected == true)
				{
					iFlagChecked = 1;
				}
			}
			if(!iFlagChecked)
			{
				if(!strError || strError.length == 0)
				{
					strError =" Please Select one option !! ";
				}//if
				
				alert(strError);
				return false;
			}
			
			break;
		}//case chkMultiselect
	}//switch 
    return true; 
}
function ltrim ( s ){
	return s.replace( /^\s*/, "" )
}

function rtrim ( s ){
	return s.replace( /\s*$/, "" );
}

function trim ( s ){
	return rtrim(ltrim(s));
}

function textCounter(field, maxlimit) {
	if (field.value.length > maxlimit) // if too long...trim it!
	field.value = field.value.substring(-1, maxlimit);
}

		
		
//*************************************************************************************
//				function			:		compareDates
//				Use					:		to compare if a passed "to" date is greater than "from" date
//				Developed By		:		Amardeep Singh
//				Developed Date		:		02-01-2007
//				Modified By			:
//				Modified Date		:		
//*************************************************************************************


function compareDates(dateFrom,dateTo,flagEqual)
	{
		dateFromValue = dateFrom.value;
		dateToValue = dateTo.value;
		flagWrngDate = 0;
		
//		alert(dateToValue);
//		if(dateFromValue==dateToValue){
//			alert("From Date and To Dates can not be equal.");
//			return false;
//		}
		intYearFrom = dateFromValue.substring(0,4);
		intYearTo = dateToValue.substring(0,4);
		intMonthFrom = dateFromValue.substring(5,7);
		intMonthTo = dateToValue.substring(5,7);
		intDateFrom = dateFromValue.substring(8,10);
		intDateTo = dateToValue.substring(8,10);
		if(intYearFrom > intYearTo){
			flagWrngDate = 1;
		}
		else{
			if(intYearFrom == intYearTo && intMonthFrom > intMonthTo){
				flagWrngDate = 1;
			}
			else{
				if(intYearFrom == intYearTo && intMonthFrom == intMonthTo &&  intDateFrom > intDateTo){
					flagWrngDate = 1;
				}
				else{
					if(intYearFrom == intYearTo && intMonthFrom == intMonthTo &&  intDateFrom == intDateTo && !flagEqual){
						flagWrngDate = 0;
					}
				}
			}
		}
		
		
		if(flagWrngDate){
			if(flagWrngDate)
				alert("To date cannot be less than From date.");
			else
				alert("Dates can not be left blank.");
			dateFrom.focus();
			dateFrom.style.backgroundColor="#FFFFCC";
			dateTo.style.backgroundColor="#FFFFCC";
			return false;
		}
		return true;
	}	
		
//*************************************************************************************
//				function			:		chkDateLater
//				Use					:		to compare if a passed "to" date is greater than "from" date
//				Developed By		:		Amardeep Singh
//				Developed Date		:		02-01-2007
//				Modified By			:
//				Modified Date		:		
//*************************************************************************************


function chkDateLater(dateValue,flagEqual)
	{
		dateTodayValue = new Date;
		datePValue = dateValue.value;
		flagWrngDate = 0;
		
		intYearFrom = dateTodayValue.getFullYear();
		intYearTo = datePValue.substring(0,4);
		intMonthFrom = dateTodayValue.getMonth()+1;
		intMonthTo = datePValue.substring(5,7);
		intDateFrom = dateTodayValue.getDate()
		intDateTo = datePValue.substring(8,10);
		if(intYearFrom > intYearTo){
			flagWrngDate = 1;
		}
		else{
			if(intYearFrom == intYearTo && intMonthFrom > intMonthTo){
				flagWrngDate = 1;
			}
			else{
				if(intYearFrom == intYearTo && intMonthFrom == intMonthTo &&  intDateFrom > intDateTo){
					flagWrngDate = 1;
				}
				else{
					if(intYearFrom == intYearTo && intMonthFrom == intMonthTo &&  intDateFrom == intDateTo && !flagEqual){
						flagWrngDate = 1;
					}
				}
			}
		}
		
		if(flagWrngDate){
			if(flagEqual)
				alert("Selected date cannot be less than current date.");
			else
				alert("Selected date cannot be less than or equal to current date.");
			dateValue.focus();
			dateValue.style.backgroundColor="#FFFFCC";
			return false;
		}
		return true;
	}

//function isObject(a)
//	{
//	 	return (typeof a == 'object' && !!a) || isFunction(a);
//	}
//function checkConfirmPassword(frmname1){
//	formobj = document.forms[frmname1];
//	if((formobj.txtPassword.value) ! = (formobj.txtConfirmPassword.value)){
//		alert('Confirm password does not match with new password !! ');
//		return false;
//	}else{
//		return true;
//	}
//}
	function checkFloat(value){
		floatValue=isNaF(value)
		alert(floatValue);
		if (isNaN(floatValue)) {
			alert("Only numeric values allowed ");
		   this.focus();
		  } else {
		   return true;
		} 
		
	}