/*

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

	                    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 ValidationDesc_1(inputitem,inputitem1,desc,error)

{
	
  this.desc=desc;

	this.error=error;

	this.itemobj = inputitem;
	this.itemobj1 = inputitem1;

	this.validate1=vdesc_validate_1;

}

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 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 trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function countDot(sText)
{
	
   var dotcount = 0; 

  for (i = 0; i < sText.length; i++) 
   { 
      if (sText.charAt(i) == ".") 
      {
         dotcount++;
      }
   }
   return dotcount;
}


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); 
	 
	 a  = cmdvalue.value;
    } 

    else 

    { 

     command = strValidateStr; 

    } 

    switch(command) 

    { 

        case "req": 

        case "required": 

         { 
		
		   if(eval(objValue.value.length) == 0 || trim(objValue.value).length==0) 

           { 

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

              { 

                strError = objValue.name + " : Required Field"; 

              }//if 

              alert(strError); 

              return false; 

           }//if 

           break;             

         }//case required 
		 //for html tags
		 
		case "tag_checking": 
		
        case "tag_check": 

         { 
		 	str_Error = false;
		 	strfind	  =	objValue.value.search(/</);
		 
		 	if(strfind<0) {
				
				if((objValue.value.search(/>/))<0) {
					str_Error = false;
				}
				else {
					
					str_Error = true;
				}
				
			}
			else {
				str_Error = true;
			}
		  	 if(str_Error ==true) 

              { 

                 
				alert(strError);
				return false; 

              }//if            

           break;             

         }//case tag_check 
		//end of tag check
		case "script_checking": 
		
        case "script_check": 

         { 
		 	str_Error = false;
		 	strfind	  =	objValue.value.search(/<script/i);
		 	if(strfind<0) {
				
				if((objValue.value.search(/script>/i))<0) {
					str_Error = false;
				}
				else {
					
					str_Error = true;
				}
				
			}
			else {
				str_Error = true;
			}
		  	 if(str_Error ==true) 

              { 

                 
				alert(strError);
				return false; 

              }//if            

           break;             

         }//case script_check 
		//end of script check
        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 + " ]"); 

			   alert(strError); 

               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 + "\n [Error character position " + eval(charpos+1)+"]"); 

				alert(strError); 

				return false; 

              }//if 

              break; 

           }//case alphanumeric 

		   

		case "alphaspaces":

			{ 

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

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

              { 

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

                { 

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

                }//if 

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

				alert(strError); 

				return false; 

              }//if 

              break; 

           }//case alphaspaces 

		

		case "alphaspacesnum":

			{ 

              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-spaces characters allowed "; 

                }//if 

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

				alert(strError); 

				return false; 

              }//if 

              break; 

           }//case alphaspaces 

		

		

        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 + "\n [Error character position " + eval(charpos+1)+"]"); 

				alert(strError); 

                return false; 

              }//if 

              break;               

           }//numeric 

		   

		case "numpercent": 

           {

              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 + "\n [Error character position " + eval(charpos+1)+"]"); 

				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 = 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 "numhyphen":

			{

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

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

              { 

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

                { 

                  strError = objValue.name+": characters allowed are 0-9 and -"; 

                }//if                             

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

                return false; 

              }//if 			

			break;

			}

			

			case "numdot":

			{

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

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

              { 

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

                { 

                  strError = objValue.name+": characters allowed are 0-9 and ."; 

                }//if                             

                alert(strError ); 

                return false; 

              }//if 			

			break;

			}
			case "dot_count":
			{
			 
              if(objValue.value.length > 0 ) 
              {
			  		 if(countDot(objValue.value)>1) 
               		{ 						
						 alert(strError); 
               			  return false; 						
					}
					
              }//if 			

			break;

			}
				
			

        case "email": 

          { 

               if(!validateEmailv2(objValue.value)) 

               { 

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

                 { 

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

                 }//if                                               

                 alert(strError); 

                 return false; 

               }//if 

           break; 

          }//case equal 

		  case "equal": 
          { 
		  
		  		
				if(objValue.value!=cmdvalue) 
            	{ 
				
               		//strError = objValue.name+": Enter a valid Email address "; 
					if(!strError || strError.length ==0) 
               		{ 
                  		strError = objValue.name+":Equal ."; 
                	}//if
					alert(strError); 

                 	return false; 
				}
           break; 

          }//case equal
		  
		   case "equal_zero": 
          { 
		  		  		
				if(objValue.value==cmdvalue) 
            	{ 
				
               		//strError = objValue.name+": Enter a valid Email address "; 
					if(!strError || strError.length ==0) 
               		{ 
                  		strError = objValue.name+":Equal ."; 
                	}//if
					alert(strError); 

                 	return false; 
				}
           break; 

          }//case equal
		  
		  case "url": 
          { 
				if(objValue.value.length>0) 
            	{ 				
					var urlregex= "/http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/";
					//var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
					var urlregex1 = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
					var urlregex = new RegExp("^(ftp|https?):\/\/(www\.)?[a-z0-9\-\.]{3,}\.[a-z]{3}$");
					//var urlregex3 = new RegExp("/http:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/");
					
					if(urlregex.test(objValue.value)) {
						return true;
					}
					else
					{					
						if(urlregex1.test(objValue.value)) {
							return true;
						}
						else
						{
							alert(strError); 	
							return false; 
						}
					}	
				}
           break; 

          }//case url 
		 
		  case "imgext": 
          { 
				if(objValue.value.length>0) 
            	{ 				
					var exts = "jpg|gif|png|bmp|mpg|mpeg|jpeg|pjpeg|pjpg";
					
					var re = new RegExp("^.+\.("+exts+")$","i");
					if(!re.test(objValue.value))
					{	
						alert("Extension not allowed for file: \"" + objValue.value + "\"\nOnly these extensions are allowed: "+exts.replace(/\|/g,',')+" \n\n");
						return false; 
					}
				}
           break; 

          }//case imgext 
		  case "docext": 
          { 
				if(objValue.value.length>0) 
            	{ 				
					var exts = "doc|txt|xls|pdf|rar|zip|csv|avi|7z|gz|avi";
					var re = new RegExp("^.+\.("+exts+")$","i");
					if(!re.test(objValue.value))
					{	
						alert("Extension not allowed for file: \"" + objValue.value + "\"\nOnly these extensions are allowed: "+exts.replace(/\|/g,',')+" \n\n");
						return false; 
					}
				}
           break; 

          }//case docext 
		 
		  case "docextonly": 
          { 
				if(objValue.value.length>0) 
            	{ 				
					var exts = "doc|pdf|docx";
					var re = new RegExp("^.+\.("+exts+")$","i");
					if(!re.test(objValue.value))
					{	
						alert("Extension not allowed for file: \"" + objValue.value + "\"\nOnly these extensions are allowed: "+exts.replace(/\|/g,',')+" \n\n");
						return false; 
					}
				}
           break; 

          }//case docextonly 
	
        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 == 0) {
				return false;
			}
			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 "alphaspecial":

			{ 

              var charpos = objValue.value.search("[^A-Za-z '_.,\-]"); 

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

              { 

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

                { 

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

                }//if 

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

				alert(strError); 

				return false; 

              }//if 

              break; 

           }//case alphaspaces

		   case "alphanumspecial":

			{ 

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

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

              { 

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

                { 

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

                }//if 

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

				alert(strError); 

				return false; 

              }//if 

              break; 

           }//case alphaspaces
		   case "tags":

			{ 

			  if(objValue.value.length > 0) 
              { 
			  	str = objValue.value;
				if(str.match(/([\<])([^\>]{1,})*([\>])/i)!=null)
              	{
					alert(strError); 
					return false; 
				}
              }//if 

              break; 

           }//case alphaspaces
		   case "date_valid":

			{ 

			  if(objValue.value.length > 0) 

              { 
		       var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
				
				if (!objValue.value.match(RegExPattern)) {
              	 if(!strError || strError.length ==0) { 
	                  strError = 'Please enter valid date as mm/dd/yyyy,mm-dd-yyyy,mm:dd:yyyy'; 
	                }//if
					alert(strError); 
					return false; 
			   }				

              }//if 

              break; 

           }//case date_valid
		   case "date_currcomp":

			{ 
				
			  if(objValue.value.length > 0) 
              { 
			  	
				var str1  = objValue.value;
				
				var dt1   = parseInt(str1.substring(8,10),10);			
			    var mon1  = parseInt(str1.substring(5,7),10);			
				mon1      = mon1-1;
			    var yr1   = parseInt(str1.substring(0,4),10);
				
			    var date1 = new Date(yr1, mon1, dt1);			
				
				var str2  = new Date();
				
				var dt1   = str2.getDate();			
			    var mon1  = str2.getMonth();			
			    var yr1   = str2.getFullYear();
				
			    var date2 = new Date(yr1, mon1, dt1);	

				if(date1 < date2) {
      				alert(strError); 
      				return false;

   				} 
			   
              }//if 

              break; 

           }//case date_comp
		   
		    case "time_comp":

			{ 
			  if(objValue.value.length > 0) 
              { 
		       		time1 = new Date('','','',objValue.value);
					var str2 = new Date();
					
					var hrs = str2.getHours();
					var mn	= str2.getMinutes();
					var sec = str2.getSeconds();
					
					
					time1 = new Date('','','',hrs,mn,sec);//new Date('','','',objValue.value);
					time2 = new Date('','','',hrs,mn,sec);
					
					
					if(time1 < time2) {              	 
						alert(strError); 
						return false; 
					}
              }//if 
			return false;
              break; 

           }//case time_comp
		   
		   case "time_valid":
		   {			   
		  
			   if(objValue.value.length > 0) 
             	 { 			 
				 	timeStr     = objValue.value;
			   		//var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
					var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?())?$/;

					var matchArray = timeStr.match(timePat);
					if (matchArray == null) {
						alert("Time is not in a valid format.");
						return false;
					}
					
					hour = matchArray[1];
					minute = matchArray[2];
					second = matchArray[4];
					ampm = matchArray[6];
					if (second=="") { second = null; }
					if (ampm=="") { ampm = null }
					/*if (hour < 0  || hour > 23) {
						alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
						return false;
					}*/

					/*if (hour <= 12 && ampm == null) {
						if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
						alert("You must specify AM or PM.");
						return false;
						   }
						}*/
						/*if  (hour > 12 && ampm != null) {
							alert("You can't specify AM or PM for military time.");
							return false;
						}*/
						if (minute<0 || minute > 59) {
							alert ("Minute must be between 0 and 59.");
							return false;
							}
						if (second != null && (second < 0 || second > 59)) {
						alert ("Second must be between 0 and 59.");
						return false;
						}
						//return false;
				 }
			    break; 
 			}//case time_valid
    }//switch 

    return true; 

}

/*

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

*/
