
/******************************************************************************/     
/*** Validación del formulario - Development for DukeNet **********************/
/******************************************************************************/     

/******************************************************************************/     
/****************** CONSTANTES ************************************************/
/******************************************************************************/     

//Objetos base para las validaciones
sTEXT    ="ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÜabcdefghijklmnñopqrstuvwxyzáéíóúü. "; 
sALFA    ="ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚÜabcdefghijklmnñopqrstuvwxyzáéíóúü. 0123456789,.-*";
sINTEGER ="0123456789";
sDECIMAL ="0123456789.,";
sEMAIL   ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.@";
sUSER    ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
sDOMAIN  ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
sPHONE   ="0123456789 -_/";
sDATE    ="0123456789-/";


//Códigos de los tipos de validación
cEMPTY	=0;
cINT 	=1; // Enteros
cDEC	=2; // Decimal
cLONG 	=3; // Enteros con limite maximo de largo 
cTEXT 	=4; // Textos, sin incluir números
cALFA 	=5; // Textos alfanumericos
cEMAIL	=6; // Email
cDATE	=7; // Fecha en formato dd/mm/aaaa
cPHONE 	=8; // Telefono
cDOMAIN	=9; // Dominios
cUSER	=10; // Usuarios


//Para estandarizar la notacion de las constantes
cFALSE     =false;
cTRUE      =true;
cOFF       =0;
cON        =1;
cCHOICE    =-1;
cMAXLONG   =250;

//Códigos de los mensajes de error
cMSGERROR    =1;
cMSGPLEASE   =2;
cMSGEMPTY    =3;
cMSGCHARERROR=4;
cMSGINFO     =5;
cMSGEMAIL    =6;
cMSGDATE     =7;
cMSGDOMAIN   =8;

//Mensajes de error
vMessageError= new Array();
error= new fCreateError();
  
vMessageError[cMSGERROR]    ="ERROR: \n";
vMessageError[cMSGPLEASE]   ="Por favor reingrese su '";
//vMessageError[cMSGPLEASE]   ="Please re-enter your ";
vMessageError[cMSGEMPTY]    ="No puede omitir el contenido del campo";
//vMessageError[cMSGEMPTY]    ="This field must be completed";
vMessageError[cMSGINFO]     ="La información ingresada no es válida";
//vMessageError[cMSGINFO]     ="The data you entered is not valid";
vMessageError[cMSGCHARERROR]="Caracter erróneo en la posición ";
//vMessageError[cMSGCHARERROR]="Wrong character in position number";
vMessageError[cMSGEMAIL]   ="El formato del email debe ser 'usuario@servidor'";
//vMessageError[cMSGEMAIL]   =". ";
vMessageError[cMSGDATE]    ="Ingrese la fecha en formato 'dd/mm/aaaa' o 'dd-mm-aaaa'";
//vMessageError[cMSGDATE]    =". ";
vMessageError[cMSGDOMAIN]    ="Ingrese el nombre del dominio de la forma 'servidor'";
//vMessageError[cMSGDATE]    =". ";

/******************************************************************************/     
/****************** FUNCIONES NIVEL1 ******************************************/     
/******************************************************************************/     
// Crea un objeto que guarda un indice a la posición y al mensaje de error
function fCreateError()
{
  this.vMessage  =0;
  this.vPosition =0;
  this.vNameField="None";
  return this;
}



//Comprueba si el campo vObject no es vacío
function fIsEmpty(vObject){ 
	if(vObject.value.length==0) {
	    error.vMessage =cMSGEMPTY;
	    error.vPosition=1; 
    	return cTRUE;
  	}
  	else
		return cFALSE;
}


//Comprueba si el campo vObject no es vacío
function fIsNotEmpty(vObject){ 
	if(vObject.value.length==0) {
	    error.vMessage =cMSGEMPTY;
	    error.vPosition=1; 
    	return cFALSE;
  	}
  	else
		return cTRUE;
}
   

// Funcion generica para todos los tipos simples (para Int, Dec, Text y Alfa)
function fIsSimple(vCharacter,sSIMPLE){ 
//	alert ("string: "+sSIMPLE+"\nCaracter: "+vCharacter);
	return (sSIMPLE.indexOf(vCharacter)>=0);
}


/******************************************************************************/     
/****************** FUNCIONES NIVEL2 ******************************************/     
/******************************************************************************/     


//Comprueba si contenido de vObject es un Entero
function fCheckSimple(vObject, vSIMPLEtemp) {
	for (var i=0; i<vObject.value.length; i++) {
		if (!fIsSimple(vObject.value.charAt(i),vSIMPLEtemp)) {
 			error.vMessage =cMSGCHARERROR;
	        error.vPosition=i+1;
    	    return cFALSE;
		}
	}
    return cTRUE;
}

//Comprueba el email (Primero los caracteres y luego la estructura)
function fCheckEmail(vObject) {
	for (var i=0; i<vObject.value.length; i++) {
		if (!fIsSimple(vObject.value.charAt(i),sEMAIL)) {
 			error.vMessage =cMSGEMAIL;
    	    return cFALSE;
		}
	}
	if (vObject.value.length==0) return cTRUE;

// Formato del email
	emailRe=/([a-zA-Z0-9_.-]+)@([a-zA-Z0-9_.-]+)\.([a-zA-Z]+)/;	
	vObjectValue=vObject.value;
//	alert ("Valor del parametro email: "+vObjectValue);
	
	myArray = emailRe.exec(vObjectValue);
	if (myArray) {
		salida=myArray[0];
		if (vObjectValue==salida){
			return cTRUE;}
		else{
			error.vMessage =cMSGEMAIL;
			return cFALSE;
			}	
		}
	else {
		error.vMessage =cMSGEMAIL;
		return cFALSE;
		}	
}

// Validacion de Fecha (Primero los caracteres y luego la estructura)
function fCheckDate(vObject) {
	for (var i=0; i<vObject.value.length; i++) {
		if (!fIsSimple(vObject.value.charAt(i),sDATE)) {
 			error.vMessage =cMSGDATE;
    	    return cFALSE;
		}
	}
	if (vObject.value.length==0) return cTRUE;

// Formato de la fecha
	dateRe=/([0-3][0-9])([\/\-])([0-1][0-9])([\/\-])([1-2][0-9][0-9][0-9])/;	
	vObjectValue=vObject.value;

	myArray = dateRe.exec(vObjectValue);
	if (myArray) {
		salida=myArray[0];
		if (vObjectValue==salida){
			return cTRUE;}
		else{
			error.vMessage =cMSGDATE;
			return cFALSE;
			}	
		}
	else {
		error.vMessage =cMSGDATE;
		return cFALSE;
		}	
}


//Comprueba el dominio (Primero los caracteres y luego la estructura)
function fCheckDomain(vObject) {
	for (var i=0; i<vObject.value.length; i++) {
		if (!fIsSimple(vObject.value.charAt(i),sDOMAIN)) {
 			error.vMessage =cMSGDOMAIN;
    	    return cFALSE;
		}
	}
	if (vObject.value.length==0) return cTRUE;

// Formato del dominio
	domainRe=/([a-zA-Z0-9_.-]+)\.([a-zA-Z]+)/;	
	vObjectValue=vObject.value;

	myArray = domainRe.exec(vObjectValue);
	if (myArray) {
		salida=myArray[0];
//		alert ("Salida: "+salida);
		if (vObjectValue==salida){
			return cTRUE;}
		else{
//			alert ("strings: "+vObjectValue + "\nSource:  "+domainRe.source);
			error.vMessage =cMSGDOMAIN;
			return cFALSE;
			}	
		}
	else {
//		alert ("strings: "+vObjectValue + "\nSource:  "+domainRe.source);
		error.vMessage =cMSGDOMAIN;
		return cFALSE;
		}	
}



// Muestra el mensaje de error
function fShowError(vObject){
  switch (error.vMessage){
  	case cMSGEMPTY:
  	case cMSGEMAIL:
  	case cMSGDATE:
  	case cMSGDOMAIN:
	   alert(vMessageError[cMSGERROR]+vMessageError[cMSGPLEASE]+
			error.vNameField+"'.\n("+vMessageError[error.vMessage]+")");

	break;	
	default:
	   alert(vMessageError[cMSGERROR]+vMessageError[cMSGPLEASE]+error.vNameField+"'\n("+
	      vMessageError[cMSGINFO]+". "+vMessageError[cMSGCHARERROR]+error.vPosition+")");
	break;
  }
}

// Ejecuta la validación pedida
function fValidate(vObject, vTypeValidate)
{
  switch(vTypeValidate) {
  case cEMPTY:
	return fIsNotEmpty(vObject); break;
  case cINT:
    return fCheckSimple(vObject, sINTEGER); break;
  case cDEC:
    return fCheckSimple(vObject, sDECIMAL); break;
  case cTEXT:
    return fCheckSimple(vObject, sTEXT); break;
  case cALFA:
    return fCheckSimple(vObject, sALFA); break;
  case cEMAIL:
    return fCheckEmail(vObject); break;
  case cDATE:
    return fCheckDate(vObject); break;
  case cPHONE:
    return fCheckSimple(vObject, sPHONE); break;
  case cDOMAIN:
    return fCheckDomain(vObject, sDOMAIN); break;
  case cUSER:
    return fCheckSimple(vObject, sUSER); break;
  }
}


// Funcion para validar un campo en particular a traves de onBlur
function validar(vElement, vTypeValidate,vElementLabel,vRequired) {
	var vError=cOFF;
	if (!vElementLabel) {vElementLabel=vElement.name;}  
	if (!vRequired){ vRequired=false;}
  
  	if((vRequired==true) && (fIsEmpty(vElement)))  {
		error.vNameField=vElementLabel;
		fShowError(vElement);
		vElement.focus();
		vError=cON;
		return false;
		}
		
	if(!fValidate(vElement, vTypeValidate)) {
		error.vNameField=vElementLabel;
		fShowError(vElement);
		vElement.focus();
		vError=cON;
		return false;			
	}
			
return true;	
}


