
// trim: quita los espacios en blanco a ambos lados de s.
function trim(s) 
{
    return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}
// Función privada para retornar el mensaje de error o '' si la válidación tiene éxito.
function validationResult (isValid, errorMessage)
{	
    if (isValid)
    {
    	return '';
    }
    else
    {
	    return '* ' + errorMessage + '\n';
	}
}
		
// Valida si el campo está informado o no
// Params:  field: campo a validar, ej: document.forms[0].name
//			errorMessage: String con el mensaje de error
function validateRequired (field, errorMessage)
{
	var isValid = true;
	var value = '';    
	if (field.type == 'text' ||
	    field.type == 'textarea' ||
	    field.type == 'file' ||
	    field.type == 'select-one' ||
	    field.type == 'radio' ||
	    field.type == 'password') 
	    {
			// get field's value
			if (field.type == "select-one")
			{
				var si = field.selectedIndex;
				if (si >= 0)
				{
					value = field.options[si].value;
				}
			}	
			else
			{
				value = field.value;
			}
		    if (trim(value).length == 0)
		    {
				isValid = false;
		    }
		}
	return validationResult	(isValid, errorMessage);
}

//
// Valida el tamaño mínimo de un campo.
// Params:  field: campo a validar, ej: document.forms[0].name
//			minLength= longitud mínima
//			errorMessage: String con el mensaje de error
function validateMinLength(field, minLength, errorMessage)
{
	var isValid = true;
    if (field.type == 'text' ||
        field.type == 'textarea')
    {
        var iMin = parseInt(minLength);
	    if ((trim(field.value).length > 0) && (field.value.length < iMin))
	    {
            isValid = false;
        }
    }
    return validationResult	(isValid, errorMessage);
}

// Valida el tamaño máximo de un campo.
// Params:  field: campo a validar, ej: document.forms[0].name
//			maxLength= longitud máxima
//			errorMessage: String con el mensaje de error
function validateMaxLength(field, maxLength, errorMessage)
{
    var isValid = true;
    if (field.type == 'text' ||
        field.type == 'textarea') 
    {
        var iMax = parseInt(maxLength);
        if (field.value.length > iMax)
        {
            isValid = false;
        }
    }
    return validationResult	(isValid, errorMessage);
}  


// Valida si el campo está informado o no. Si lo está además valida la long. máxima
// Params:  field: campo a validar, ej: document.forms[0].name
//			maxLength= longitud máxima
//			errorMessage: String con el mensaje de error
function validateRequiredMaxLength (field, maxLength, errorMessage)
{
  var valid = '';
  valid= validateRequired (field, errorMessage);
  if (valid == '')
	{
		valid= validateMaxLength (field, maxLength, errorMessage);
	}
  return valid;       
}

// Valida si los dos campos son iguales
// Params:  field1 y fields2 campos a comparar,
//			errorMessage: String con el mensaje de error
function validateTwoFields(field, field2,errorMessage) {
  var i = 0;
  var value = "";
  var secondValue = "";
  var si;
  var isValid = true;
  
  if ((field.type == 'text' ||
      field.type == 'textarea' ||
      field.type == 'select-one' ||
      field.type == 'radio' ||
      field.type == 'password') &&
      ( field2.type == 'text' ||
      field2.type == 'textarea' ||
      field2.type == 'select-one' ||
      field2.type == 'radio' ||
      field2.type == 'password')) {
	
	
  		// get field value
  		if (field.type == "select-one")
  		{
  			si = field.selectedIndex;
  			if (si >= 0)
  			{
  				value = field.options[si].value;
  			}
  		}	
  		else
  		{
  			value = field.value;
  		}
  		
  		
  		// get field value
  		if (field2.type == "select-one")
  		{
  			si = field2.selectedIndex;
  			if (si >= 0)
  			{
  				secondValue = field2.options[si].value;
  			}
  		}	
  		else
  		{
  			secondValue = field2.value;
  		}
  		
  	  if (value != secondValue) {        
        isValid = false;
      }
  }
  return validationResult	(isValid, errorMessage);
}
// Valida que el mail sea correcto y que esté informado
// Params:  field campo que tiene que cumplir que sea un 
//			maxLength= longitud máxima
//			errorMessage: String con el mensaje de error
function requiredValidateEmail(field, maxlength,errorMessage) {
 
  var isValid = true;
  var valid = '';
  valid= validateMaxLength (field,maxlength, errorMessage);
  if (valid == ''){
     valid=  validateEmail(field.value,errorMessage);
  }
  return valid;
  
}

/**
 * Valida que el formato del mail sea correcto
 * http://javascript.internet.com
 */
  function validateEmail(emailStr,errorMessage) {
  var isValid = true;
     if (emailStr.length == 0) {
         isValid = 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) {
         isValid = false;
         return validationResult	(isValid, errorMessage);
     }

     var user=matchArray[1];
     var domain=matchArray[2];
    
     if (user.match(userPat) == null) {         
         isValid = false;
         return validationResult	(isValid, errorMessage);
     }
     var IPArray = domain.match(ipDomainPat);
     if (IPArray != null) {
         for (var i = 1; i <= 4; i++) {
            if (IPArray[i] > 255) {
              isValid = false;
              return validationResult	(isValid, errorMessage);
            }
         }
         isValid = true;
         return validationResult	(isValid, errorMessage);
     }
    
     var domainArray=domain.match(domainPat);
     if (domainArray == null) {
      isValid = false;
      return validationResult	(isValid, errorMessage);
  
     }
     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)) {
         isValid = false;
         return validationResult	(isValid, errorMessage);
  
     }
     if (len < 2) {
         isValid = false;
         return validationResult	(isValid, errorMessage);
  
     }
    return validationResult	(isValid, errorMessage);
  }

 /**
 * Valida que el valor sea un Entero positivo
 * http://javascript.internet.com
 */
  function validateInteger(numberStr,errorMessage) {
  	var isValid = true;   
  	var ok = "";
  	
  	for (var i = 0; i < numberStr.length; i++) {
  		var ch = numberStr.substring(i, i+1);
  		if (ch < "0" || "9" < ch) { 
  			isValid = false;
  		}
  		else ok += ch;
  	}  
  	return validationResult	(isValid, errorMessage);
	
  }           
  
  
  /**
 * Valida que el valor sea un Entero positivo
 * http://javascript.internet.com
 */
  function validateRequiredInteger(numberStr,errorMessage) {
  	var isValid = true;   
  	var ok = "";
  	if (numberStr.length == 0){
  	 isValid = false;
  	}else{
  	  for (var i = 0; i < numberStr.length; i++) {
  		  var ch = numberStr.substring(i, i+1);
  		  if (ch < "0" || "9" < ch) { 
  			  isValid = false;
  		  }
  		  else ok += ch;
  		}
  	}  
  	return validationResult	(isValid, errorMessage);
	
  }         
  
  function validateFloat(floatStr,errorMessage) {
    var isValid = true;   
  	var ok = "";
   
  	for (var i = 0; i < floatStr.length; i++) {
  		var ch = floatStr.substring(i, i+1);
  		if ( (ch != ".") && (ch < "0" || "9" < ch)) { 
  			isValid = false;
  		}
  		else ok += ch;
  	}  
  	return validationResult	(isValid, errorMessage);
  
  }
  function validateDate(dateField, errorMessage){

  	var isValid = true; 
  	var dateFieldOld = new Date(dateField);

  	if (isWhitespace(dateField.value) || dateField.value=='dd/mm/aaaa')
  	{
  		dateField.value = ""			
  		isValid = false;	
    }
     
  	var pieces = dateField.value.split("/");
  	var date = new Date(Date.parse(pieces[1]+"/"+pieces[0]+"/"+pieces[2]));
  	if (isValid && isNaN(date))
  	{
     dateField.value ="";    
     dateField.focus();
     isValid = false;     
  	}

  	
  	if (isValid){
    	var d = date.getDate();
    	if (d < 10) d = new String("0" + d);
    	
    	var m = date.getMonth()+1;
    	if (m < 10) m = new String("0" + m);
    	
    	if (date.getFullYear() > 2070){ 
    		var y = '2070';
      }
      else{
    		if (date.getFullYear() < 1900){ 
    			var y = '1900';
        }else{
    			var y = new String(date.getFullYear());
    		}
    	}
    	dateFieldOld.value = d + "/" + m + "/" + y;
    
    	var pField = dateField.value.split("/");
    	var pFieldOld = dateFieldOld.value.split("/");
    	//alert (dateField.value);
    	//alert(dateFieldOld.value);
    	var d = pField[0];
    	var m = pField[1];
    	if (d.length<2){
    		d = '0'+d;
    	}
    	if (m.length<2){
    		m = '0'+m;
    	}
    	
    	if (d==pFieldOld[0] && m==pFieldOld[1] && pField[2]==pFieldOld[2] ){
    		dateField.value = dateFieldOld.value;
    		isValid = true;
    	}	
    	else
    	{
    		dateField.value = ""
    		isValid = false;
    	}	
  	}
  	return validationResult	(isValid, errorMessage);  
  }
  
  function validInterval(dateFieldBegin,dateFieldEnd, errorMessage){

  	var isValid = true; 

  	//begin date 
  	var pieces = dateFieldBegin.value.split("/");
  	var dateBegin = new Date(Date.parse(pieces[1]+"/"+pieces[0]+"/"+pieces[2]));
  	
  	//end date
  	pieces = dateFieldEnd.value.split("/");
  	var dateEnd = new Date(Date.parse(pieces[1]+"/"+pieces[0]+"/"+pieces[2]));
  	
    if ( dateBegin <= dateEnd){
      isValid = true;
    }else{
      isValid = false;
    }
  	return validationResult	(isValid, errorMessage);  
  }
  
  function checkMaxLength(t,bColor,maxlength,fieldName) {
  	var displayStart, displayCounting, rtn=true;
  	if (!t.maxlength)
  		t.maxlength = maxlength;		//default for textarea - I often use 800.
  	if (t.value.length > t.maxlength) {
  		t.style.color='red';
  		t.focus();  
  		rtn = false;
  	}
  	else
  		t.style.color='';
  	return rtn;
  }
