/*

  -------------------------------------------------------------------------

	                    JavaScript Form Validator Class                                 

	

    -------------------------------------------------------------------------  

*/  

function Validator(frmname)

	{

		

	  this.formobj=document.forms[frmname];

	

		if(!this.formobj)

		{

		  alert("BUG: couldnot get Form object "+frmname);

			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;

  }

}



//----------







// ---------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) 

{ 

    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 "req": 

        case "required": 

         { 

			

           if(eval(objValue.value.length) == 0) 

           { 

              if(!strError || strError.length ==0) 

              { 

                strError ="Required Field !!"; 

				//objValue.name.focus();

			   

              

			  }//if 

              //show_error(strError);
			  alert(strError); 

              return false; 

           }//if 



			var at=objValue.value.charAt(0);

			if(at==null) {

		  

			alert("Please Enter Valid Character !!");

			

		    return false

			}



           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; 

					  }

				//}//else 

			  

			  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               

                //show_error(strError);	
				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                                               
				 //show_error(strError);	
                 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 

    }//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 show_error(error)
{
	document.getElementById('error_div').innerHTML = error;
	document.getElementById('error_div').style.display = 'block';	
}



