//this file will validate all the fields of every form

function isDate(dateStr) {

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?

	if (matchArray == null) {
		alert("Ingrese la fecha en el siguiente formato: dd/mm/aaaa ó dd-mm-aaaa.");
		return false;
	}

	month = matchArray[3]; // p@rse date into variables
	day = matchArray[1];
	year = matchArray[5];

	if (month < 1 || month > 12) { // check month range
		alert("Numero de mes incorrecto.");
		return false;
	}

	if (day < 1 || day > 31) {
	alert("Numero de dia incorrecto");
	return false;
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
	alert("El mes "+month+" no tiene 31 dias.!")
	return false;
	}


	if (month == 2) { // check for february 29th
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day > 29 || (day==29 && !isleap)) {
	alert("Febrero del " + year + " no tiene " + day + " dias!");
	return false;
	}
	}
	return true; // date is valid
}


function isHora(horaStr) {

	var horaPat1 = /^(\d{1,2})(\/|:)(\d{1,2})$/;
	var matchArray1 = horaStr.match(horaPat1); // is the format ok?

	var horaPat2 = /^(\d{1,2})(\/|:)(\d{1,2})(\/|:)(\d{1,2})$/;
	var matchArray2 = horaStr.match(horaPat2); // is the format ok?

	if (matchArray1 == null && matchArray2 == null) {
		alert("Ingrese la hora en el siguiente formato: hh:mm");
		return false;
	}
	return true; // date is valid
}


function validateEmail(email) 
{ 
//  email validation checking. 

   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 validateData 
*  Checks each field in a form 
*  Called from validateForm function 
*/ 
function validateData(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 "ob": 
       case "required": 
        { 
          if (objValue.type == 'radio'){
			nombre = objValue.name
			ob = document.getElementsByName(nombre)
			ok = false;
			for (lI = 0; lI < ob.length ; lI++){
				if (ob[lI].checked){ok = true;}
			}
			if (ok == false){
	             strError = objValue.texto + " : Campo Requerido."; 
	             alert(strError); 
	             return false; 
	          	 break;             			
			}

          }else{
	          if(eval(objValue.value.length) == 0){ 
	             if(!strError || strError.length ==0) { 
	               strError = objValue.texto + " : Campo Requerido."; 
	             }//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.texto + " : "+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.texto + ": El campo debe tener " + cmdvalue + " caracteres como minimo."; 
              }//if               
              alert(strError + "\n[Tamaño actual = " + objValue.value.length + " ]"); 
              return false;                 
            }//if 
            break; 
           }//case minlen 
       case "alnum": 
       case "alphanumeric": 
          { 
             var charpos = objValue.value.search("[^A-Za-z0-9-'\r\n \,áéíóúñ:Ñ@#$Ñ()¿?¡!_!¡[]/\t/;:.]"); 
             if(objValue.value.length > 0 &&  charpos >= 0) 
             { 
              if(!strError || strError.length ==0) 
               { 
                 strError = objValue.texto+": Solamente caracteres alphanumericos permitidos."; 
               }//if 
               alert(strError + "\n [Error caracter en posicion " + 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.texto+": Solamente caracteres numericos permitidos."; 
               }//if               
               alert(strError + "\n [Error caracter en posicion " + eval(charpos+1)+"]"); 
               return false; 
             }//if 
             break;               
          }//numeric 
       case "al": 
       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.texto+": Solamente caracteres alfabeticos permitidos."; 
               }//if                             
               alert(strError + "\n [Error caracter en posicion " + eval(charpos+1)+"]"); 
               return false; 
             }//if 
             break; 
          }//alpha 

          

        case "password": 
       case "pass": {  
			
			objValue
            var charpos = objValue.value.search("[^A-Za-z0-9#$_@\/&\-]"); 
            if(objValue.value.length > 0 &&  charpos >= 0) { 
            	if(!strError || strError.length ==0) {   
                	strError = objValue.texto+ ": Caracteres permitidos: A-Za-z0-9#$_@-&/"; 
               	}//if                             
            	alert(strError + "\n [Error en el caracter numero " + eval(charpos+1)+"]"); 
               	return false; 
            }

			nombre = (objValue.name);
			el1 = document.getElementsByName(nombre)[0]
			el2 = document.getElementsByName(nombre)[1]
			
			if (el1.value != el2.value){
				alert("Las contraseñas 1 y 2 deben ser iguales")
               	return false; 
			}
            break;
   	}





          case "address": 
			case "dir": 
          case "addr": 
          { 
             var charpos = objValue.value.search("[^a-zA-Z0-9-@.,#+\/& ]"); 
             if(objValue.value.length > 0 &&  charpos >= 0) 
             { 
                 if(!strError || strError.length ==0) 
               { 
                 strError = objValue.texto+": Caracteres permitidos: a-z A-Z 0-9 - . , # @ + / &"; 
               }//if                             
               alert(strError + "\n [Error en el caracter numero " + eval(charpos+1)+"]"); 
               return false; 
             }//if 
             break; 
          }//address



           case "fecha": 
            case "date":{ 
             var charpos = objValue.value.search("[^0-9-]"); 
             if(objValue.value.length > 0) { 
                 if (!isDate (objValue.value)){
                 	return false; 
                 }
			 }
             break; 
          }//cardexpire
          
           case "hora": { 
             if(objValue.value.length > 0) { 
                 if (!isHora (objValue.value)){
                 	return false; 
                 }
			 }
             break; 
            }//cardexpire
                    
          

             case "cardexpire":{ 
             var charpos = objValue.value.search("[^0-9-]"); 
             if(objValue.value.length > 0 &&  charpos >= 0) { 
                 if(!strError || strError.length ==0){ 
                 	strError = objValue.texto+": Only 0-9-  allowed ";
                 }//if                             
                 alert(strError + "\n [Error caracter en posicion " + eval(charpos+1)+"]"); 
                 return false; 
             }//if 
             break; 
          }//cardexpire


       case "email": 
         { 
			if (objValue.value != ''){
	              if(!validateEmail(objValue.value)) 
	              { 
	                if(!strError || strError.length ==0) 
	                { 
	                   strError = objValue.texto+": Direccion de e-mail no valida."; 
	                }//if                                               
	                alert(strError); 
	                return false; 
	              }//if 
			}
          break; 
         }//case email 
 




         case "courseNo": 
        
          {     re =new RegExp("^([a-zA-Z]{4})([0-9]{4}$)");
		         var v=re.test(objValue.value);
				
				 if (!v)
				 {
					 alert(objValue.name+": The first four characters should be alphabetic characters and the last four characters should be digits. ");
					 return false;
				 }
				 break;
			  
            
          }//courseNo

        


            case "sectionNumber": 
        
          {     re = new RegExp("^([0])[1-5]{1}$");
		         var v=re.test(objValue.value);
				
				 if (!v)
				 {
					 alert(objValue.name+":Only 01, 02, 03, 04, or 05 is allowed ");
					 return false;
				 }
				 break;
			  
            
          }//sectionNumber

      


           // 
          case "term": 
        
          {    if(!(objValue.value.toUpperCase() == "Spring".toUpperCase() |
			  objValue.value.toUpperCase() == "Summer".toUpperCase() | 
			  objValue.value.toUpperCase() == "Fall".toUpperCase()))
			  {
				
					 alert(objValue.name+" Only Spring, Summer, or Fall is allowed ");
					 return false;
				
				
			  
              }
			   break;
          }//term




       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.match(cmdvalue)) 
           { 
             if(!strError || strError.length ==0) 
             { 
               strError = objValue.name+": Invalid characters found "; 
             }//if                                                               
             alert(strError); 
             return false;                   
           }//if 
          break; 
        }//case regexp 

       case "select": 
       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.texto+": Debe Seleccionar una opcion."; 
             }//if                                                               
             alert(strError); 
             return false;                                   
            } 
            break; 
        }//case dontselect 
   }//switch 
   return true; 
} 

/* 
* function validateForm 
* the function will
* returns false if the validation fails; true if success 
* */

function validateForm(objFrm) { 
	for (i = 0; i < objFrm.elements.length; i++){
		//alert(objFrm.elements[i].validate)
		if (objFrm.elements[i].validate == 'true'){
			tmpString = objFrm.elements[i].validate_string
			tmpArr = tmpString.split(' -- ')
			for(var itrdesc=0; itrdesc < tmpArr.length ;itrdesc++){ 
				tmpArr1 = tmpArr[itrdesc].split (", ") 
		    	if(validateData(tmpArr1[0],  objFrm.elements[i], tmpArr1[1]) == false) { 
			    	objFrm.elements[i].focus(); 
			        return false; 
				}
			} 
		}
	}
	
	objFrm.submit()
}
 
