/*

  -------------------------------------------------------------------------

	                    JavaScript Form Validator 

                                Version 2.0.2

	Copyright 2003 JavaScript-coder.com. All rights reserved.

	You use this script in your Web pages, provided these opening credit

    lines are kept intact.

	The Form validation script is distributed free from JavaScript-Coder.com



	You may please add a link to JavaScript-Coder.com, 

	making it easy for others to find this script.

	Checkout the Give a link and Get a link page:

	http://www.javascript-coder.com/links/how-to-link.php



    You may not reprint or redistribute this code without permission from 

    JavaScript-Coder.com.

	

	JavaScript Coder

	It precisely codes what you imagine!

	Grab your copy here:

		http://www.javascript-coder.com/

    -------------------------------------------------------------------------  

*/

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.clearAllValidations = clear_all_validations;

}

function set_addnl_vfunction(functionname)

{

  this.formobj.addnlvalidation = functionname;

}

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();

		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 validateEmail(emailStr) {

       if (emailStr.length == 0) {

           return true;

       }

       var emailPat=/^(.+)@(.+)$/;

       var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";

       var validChars="\[^\\s" + specialChars + "\]";

       var quotedUser="(\"[^\"]*\")";

       var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;

       var atom=validChars + '+';

       var word="(" + atom + "|" + quotedUser + ")";

       var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

       var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");

       var matchArray=emailStr.match(emailPat);

       if (matchArray == null) {

           return false;

       }

       var user=matchArray[1];

       var domain=matchArray[2];

       if (user.match(userPat) == null) {

           return false;

       }

       var IPArray = domain.match(ipDomainPat);

       if (IPArray != null) {

           for (var i = 1; i <= 4; i++) {

              if (IPArray[i] > 255) {

                 return false;

              }

           }

           return true;

       }

       var domainArray=domain.match(domainPat);

       if (domainArray == null) {

           return false;

       }

       var atomPat=new RegExp(atom,"g");

       var domArr=domain.match(atomPat);

       var len=domArr.length;

       if ((domArr[domArr.length-1].length < 2) ||

           (domArr[domArr.length-1].length > 3)) {

           return false;

       }

       if (len < 2) {

           return false;

       }

       return true;

}



/* Function to validate date */

function validateDate(txtDate,fieldName) 

{

      var txtValueDate=txtDate.value;

      if (!txtValueDate)  

        return true;



        var in_date = stripCharString(txtValueDate," ");

        in_date = in_date.toUpperCase();

        //alert(in_date);

        var date_is_bad = 0;  



        if (!allowInString(in_date,"/0123456789-"))

        {	

			alert(fieldName+": Please enter date in 'dd/mm/yyyy' format.");

			return false;

        }

        if (!date_is_bad)

        {

            	var date_pieces = new Array();

            	date_pieces = in_date.split("/");



		if (date_pieces.length == 2 && isNaN(parseInt(date_pieces[1]))==false)

		{ 

			var d = new Date();

                 	in_date = in_date + "/" + get_full_year(d);

                 	date_pieces = in_date.split("/");

            	}

		else if (date_pieces.length !=3)

		{

			alert(fieldName+": enter date in 'dd/mm/yyyy' format.");

			return false;

		}

	

		var dd = parseInt(date_pieces[0],10);

		var mm = parseInt(date_pieces[1],10);

		var yy = parseInt(date_pieces[2]);

	

		if (dd < 1 || dd > 31)

		{ 

			alert(fieldName+": Invalid day, please re-enter.");

			return false;

		}

	

		if (dd < 10)

		{

			dd = "0" + dd;

			//alert(dd);

		}



		if (mm < 1 || mm > 12)

		{

			alert(fieldName+": Invalid month, please re-enter.");

			return false;

		}

		if (mm < 10)

		{

			mm = "0" + mm;

			//alert(mm);

		}

		if (mm == 4 || mm == 6 || mm == 9 || mm == 11)

		{

			if (dd == 31)

			{

				alert(fieldName+": There is no 31st in this month, please re-enter.");

				return false; 

			}

		}

		if (mm == 2)

		{

			if (dd > 29)

			{

				alert(fieldName+": Invalid day, please re-enter.");

				return false; 

			}

			else if (dd == 29 & (yy/4) != parseInt(yy/4))

			{

				alert(fieldName+": There is no Feb 29 in this year.");

				return false; 

			}

		}



		if ( isNaN(parseInt(date_pieces[2]))==true)

		{

	    		alert(fieldName+": Please enter date in 'dd/mm/yyyy' format.");

         		return false;	

		}

		else

		{

	        	if (date_pieces[2].length != 2 && date_pieces[2].length != 4)

	         	{

                		alert(fieldName+": Invalid year, please re-enter.");

				return false;

                	}

        	    	else if (date_pieces[2].length == 2)

	        	{

				if (yy > 69  && yy < 100)

				{

					yy =  yy + 1900;

				}

	        		if (yy <= 69)

				{

		 			yy = yy + 2000;

				}

        	    	}

		}

        }		

   

        return_date = dd + "/" + mm + "/" + yy;

        txtDate.value = return_date;        

        return true;

}  

function get_full_year(d)

{

	var y = ""

		

	if (d.getFullYear() != null)

	{

		y = d.getFullYear();

	

		if (y < 1970)

		{

			 y+= 100;		

		}

		else

		{	

	        y = d.getYear();

	        if (y > 69  && y < 100)

			{

				 y += 1900;

			}

	        if (y < 1000)

			{

				 y += 2000;

			}

		}

	}

    return y;

}



/* The following functions were written by Gordon McComb

 More information can be found here: http://www.javaworld.com/javaworld/jw-02-1997/jw-02-javascript.html)*/

function stripCharString (InString, CharString)

{

        var OutString="";

		

		for (var Count=0; Count < InString.length; Count++)

		{

        	var TempChar=InString.substring (Count, Count+1);

		    var Strip = false;

		    

			for (var Countx = 0; Countx < CharString.length; Countx++)

			{

		        var StripThis = CharString.substring(Countx, Countx+1)

        		

				if (TempChar == StripThis)

				{

                	Strip = true;

		            break;

        		}

      		}

      		if (!Strip)

			{

        		OutString=OutString+TempChar;

			}

   		}

        return (OutString);

}



function allowInString (InString, RefString)

{

        if(InString.length==0)

		{

			return (false);

		}

		

        for (var Count=0; Count < InString.length; Count++)

		{

        	var TempChar= InString.substring (Count, Count+1);

      		

			if (RefString.indexOf (TempChar, 0)==-1)

			{  

        		return (false);

			}

   		}

   		return (true);

}

/* Function to validate double*/
function validateDouble(str)
{
	if(str!=""){
		regex = /^[\d]+[\d\.]*[\d]+$/;
		//if(!regex.test(str)) {
		if(isNaN(str)){
			return false;
		}
	}
	return true;
}


function V2validateData(strValidateStr,objValue,strError) 

{ 

    var epos = strValidateStr.search("="); 

    var  command  = ""; 

    var  cmdvalue = ""; 

    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 = objValue.name + " : Required Field"; 

              }//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 = objValue.name + " : "+cmdvalue+" characters maximum "; 

               }//if 

               alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 

               return false; 

             }//if 

             break; 

          }//case maxlen 

        case "minlength": 

        case "minlen": 

           { 

             if(eval(objValue.value.length) <  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError = objValue.name + " : " + cmdvalue + " characters minimum  "; 

               }//if               

               alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 

               return false;                 

             }//if 

             break; 

            }//case minlen 

        case "alnum": 

        case "alphanumeric": 

           { 

              var charpos = objValue.value.search("[^A-Za-z0-9]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

               if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": Only alpha-numeric characters allowed "; 

                }//if 
				
				alert(strError);
                //alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break; 

           }//case alphanumeric 

        case "num": 

        case "numeric": 

           { 

              var charpos = objValue.value.search("[^0-9]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": Only digits allowed "; 

                }//if               

				alert(strError);
                //alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                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 = objValue.name+": Only alphabetic characters allowed "; 

                }//if                             

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break; 

           }//alpha 

		case "alnumhyphen":

			{

              var charpos = objValue.value.search("[^A-Za-z0-9\-_]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _"; 

                }//if                             

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 			

			break;

			}

        case "email": 

          { 

               if(!validateEmail(objValue.value)) 

               { 

                 if(!strError || strError.length ==0) 

                 { 

                    strError = objValue.name+": Enter a valid Email address "; 

                 }//if                                               

                 alert(strError); 

                 return false; 

               }//if 

           break; 

          }//case email 

        case "lt": 

        case "lessthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert(objValue.name+": Should be a number "); 

              return false; 

            }//if 

            if(eval(objValue.value) >=  eval(cmdvalue)) 

            { 

              if(!strError || strError.length ==0) 

              { 

                strError = objValue.name + " : value should be less than "+ cmdvalue; 

              }//if               

              alert(strError); 

              return false;                 

             }//if             

            break; 

         }//case lessthan 

        case "gt": 

        case "greaterthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert(objValue.name+": Should be a number "); 

              return false; 

            }//if 

             if(eval(objValue.value) <=  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError = objValue.name + " : 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 = objValue.name+": 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 = objValue.name+": Please Select one option "; 

              }//if                                                               

              alert(strError); 

              return false;                                   

             } 

             break; 

         }//case dontselect 

        case "date": 

          { 

               if(!validateDate(objValue,strError)) 

               { 

                 return false; 

               }//if 

               break; 

          }//case date
		  
		  case "double": 

          { 

               if(!validateDouble(objValue.value)) 

               { 

                 if(!strError || strError.length ==0) 

                 { 
					strError = objValue.name+": Please enter a double value."; 
				}else{ //if 
				     alert(strError); 
	                 return false; 
				}
               }//if 

           break; 

          }//case double

    }//switch 

    return true; 

}

/*

	Copyright 2003 JavaScript-coder.com. All rights reserved.

*/



