
/**
Definicion de las validaciones que se tendran en cuenta para los diferentes formatos :
*/


//Constantes para el manejo de las validaciones, con el tipo de validacion
var VACIO               = 0;
var NUMERO_ENTERO		= 1;
var NUMERO_DECIMAL		= 2;
var SELECCION			= 3;
var FECHA				= 4;

var fuenteInicio		= "<FONT face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'> <B>";
var fuenteFin			= "</B></FONT>";
var espacios			= "&nbsp;&nbsp;&nbsp;&nbsp;";
var mensajeError		= "";
var messageObj          = null;
var encabezado          = "";
var cerrar              = "";

/**
f1				==> Representa el primer campo del cual se va a obtener el valor
f2				==> Representa el segundo campo del cual se va a obtener el valor, sino existe debe ser null
tipo			==> Tipo de validacion a realizar (Ver la lista de variables)
mensaje			==> Mensaje en caso de error
*/
function Validacion(f1, f2, tipo, mensaje){	
	this.fuente1 			= f1;
	this.fuente2 			= f2;
	this.tipoValidacion 	= tipo;
	this.mensajePropuesto 	= mensaje;
	this.posicion			= -1;
	
}

/**
f1				==> Representa el primer campo del cual se va a obtener el valor
f2				==> Representa el segundo campo del cual se va a obtener el valor, sino existe debe ser null
tipo			==> Tipo de validacion a realizar (Ver la lista de variables)
mensaje			==> Mensaje en caso de error, tiene el prefijo del label y el id de la label
*/
function ValidacionIdioma(f1, f2, tipo, mensaje){	
	this.fuente1 			= f1;
	this.fuente2 			= f2;
	this.tipoValidacion 	= tipo;
	this.mensajePropuesto 	= mensaje;
	this.posicion			= -1;
	
}

/**
f1				==> Representa el primer campo del cual se va a obtener el valor
f2				==> Representa el segundo campo del cual se va a obtener el valor, sino existe debe ser null
tipo			==> Tipo de validacion a realizar (Ver la lista de variables)
mensaje			==> Mensaje en caso de error, tiene el prefijo del label y el id de la label
p				==> Posicion que se desea validar
*/
function ValidacionIdiomaPosicion(f1, f2, tipo, mensaje, p){	
	this.fuente1 			= f1;
	this.fuente2 			= f2;
	this.tipoValidacion 	= tipo;
	this.mensajePropuesto 	= mensaje;
	this.posicion			= p;
	
}


/**
Metodo que dado el arreglo de Validacion devuelve true o false y llena todos los mensajes correspondientes
*/
function validarBasico(arreglo, validarConIdioma){
	var objeto 			= null;
	var valorFuente1	= null; 
	var div				= null;
	var errores			= null;
	var longitud 		= arreglo.length;
	var aux				= 0;
	
	errores 			= "<ul>";
	for(i=0;i<longitud;i++){
		//Validaciones
		objeto = arreglo[i];
		if(objeto.tipoValidacion == VACIO) {
			//Validacion sobre vacio, opera solo sobre el primer parametro, si existen dos el segundo se ignora
			//Se debe recuperar el valor en un vector, ya que puede ser iterador
			valorFuente1	= recuperarValor(objeto.fuente1,objeto.posicion);
			aux				= valorFuente1.length;
			
			for(j=0;j<aux;j++){
				contenido 		= valorFuente1[j].value;
				if(vacio(contenido)){
					if(validarConIdioma == false){
						traduccion		= getTraduceMensaje(objeto.mensajePropuesto);
					}
					else{
						traduccion		= getTraduceMensajeIdioma(objeto.mensajePropuesto);
					}
					errores 	 	= errores  + "<li>" + traduccion + espacios + "</li>";
					break; //Si es iterador un solo error es suficiente									
				}
			}
		}
		else if(objeto.tipoValidacion == SELECCION) {
			//Validacion sobre seleccion, opera solo sobre el primer parametro, si existen dos el segundo se ignora
			//Se debe recuperar el valor en un vector, ya que puede ser iterador
			
			valorFuente1	= recuperarValor(objeto.fuente1,objeto.posicion);
			aux				= valorFuente1.length;
			for(j=0;j<aux;j++){
				contenido 		= valorFuente1[j].value;
				if(!seleccionado(contenido)){
					if(validarConIdioma == false){
						traduccion		= getTraduceMensaje(objeto.mensajePropuesto);
					}
					else{
						traduccion		= getTraduceMensajeIdioma(objeto.mensajePropuesto);
					}
					errores 	 	= errores  + "<li>" + traduccion + espacios + "</li>";									
					break; //Si es iterador un solo error es suficiente									
				}
			}
		}
		else if(objeto.tipoValidacion == NUMERO_ENTERO) {
			//Validacion sobre numero entero, opera solo sobre el primer parametro, si existen dos el segundo se ignora
			//Se debe recuperar el valor en un vector, ya que puede ser iterador
			
			valorFuente1	= recuperarValor(objeto.fuente1,objeto.posicion);
			aux				= valorFuente1.length;
			for(j=0;j<aux;j++){
				contenido 		= valorFuente1[j].value;
				if(!numeroEntero(contenido)){
					if(validarConIdioma == false){
						traduccion		= getTraduceMensaje(objeto.mensajePropuesto);
					}
					else{
						traduccion		= getTraduceMensajeIdioma(objeto.mensajePropuesto);
					}
					errores 	 	= errores  + "<li>" + traduccion + espacios + "</li>";									
					break; //Si es iterador un solo error es suficiente									
				}
			}
		}
		else if(objeto.tipoValidacion == NUMERO_DECIMAL) {
			//Validacion sobre numero decimal, opera solo sobre el primer parametro, si existen dos el segundo se ignora
			//Se debe recuperar el valor en un vector, ya que puede ser iterador
			
			valorFuente1	= recuperarValor(objeto.fuente1,objeto.posicion);
			aux				= valorFuente1.length;
			for(j=0;j<aux;j++){
				contenido 		= valorFuente1[j].value;
				if(!numeroDecimal(contenido)){
					if(validarConIdioma == false){
						traduccion		= getTraduceMensaje(objeto.mensajePropuesto);
					}
					else{
						traduccion		= getTraduceMensajeIdioma(objeto.mensajePropuesto);
					}
					errores 	 	= errores  + "<li>" + traduccion + espacios + "</li>";									
					break; //Si es iterador un solo error es suficiente									
				}
			}
		}
		else if(objeto.tipoValidacion == FECHA) {
		
			//Validacion sobre fecha, opera solo sobre el primer parametro, si existen dos el segundo se ignora
			//Se debe recuperar el valor en un vector, ya que puede ser iterador
			
			valorFuente1	= recuperarValor(objeto.fuente1,objeto.posicion);
			aux				= valorFuente1.length;
			for(j=0;j<aux;j++){
				contenido 		= valorFuente1[j].value;
				if(!fecha(contenido)){
					if(validarConIdioma == false){
						traduccion		= getTraduceMensaje(objeto.mensajePropuesto);
					}
					else{
						traduccion		= getTraduceMensajeIdioma(objeto.mensajePropuesto);
					}
					errores 	 	= errores  + "<li>" + traduccion + espacios + "</li>";									
					break; //Si es iterador un solo error es suficiente									
				}
			}
		}		
	}
	errores 			= errores + "</ul>";
	if(errores != "<ul></ul>"){
		if(validarConIdioma == false){
			mostrarErrores(true,false)
			document.getElementById('zonamensaje').innerHTML = fuenteInicio + errores + fuenteFin;
		}
		else{
			mensajeError 	= fuenteInicio + errores + fuenteFin;
                        prepararMensaje();
                        displayStaticMessage(mensajeError);

			//nuevoError      = document.createElement("script")
                        //alert(mensajeError);
                        //nuevoError.src 	= "error.js";
                        //document.body.appendChild(nuevoError);
		}
	
		return false;
	}
	else{
		return true;
	}
	
}

function prepararMensaje(){
  var msgEncabezado                     = "";
  var msgCerrar                         = "";

  messageObj                            = new DHTML_modalMessage();

  //IDIOMAS
  if(idioma == "ingles"){
           msgEncabezado			= 	"Se presentaron los siguientes errores: ";
           msgCerrar				= 	"Cerrar" ;
  }
  else if(idioma == "portugues"){
           msgEncabezado			= 	"Se presentaron los siguientes errores: ";
           msgCerrar				= 	"Cerrar" ;
  }
  else{
           msgEncabezado			= 	"Se presentaron los siguientes errores: ";
           msgCerrar				= 	"Cerrar" ;
  }

  messageObj.setShadowOffset(15);	// Large shadow
  encabezado                            = 	"<FONT face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#000000'> <B>" +
                                                  msgEncabezado +
                                                  "</B></FONT>";
  cerrar				= 	"<FONT face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#00FF00'> <B>" +
                                                  "<p><a href=\'#\' onclick=\'closeMessage();return false\'>"+msgCerrar+"</a>" +
                                                  "</B></FONT>";

}

function displayStaticMessage(messageContent,cssClass){
	tabla =
	"<html>															 	"+
	"<table width = '100%' cellpadding='0' cellspacing='0'>                                                                         "+
	"	<tr bgcolor='#E1EAEF'>                                                                                                  	"+
	"		<td align='left'>                                                                                               		"+
	encabezado +
	"		</td> 														"+
	"		<td align='right'>                                                                                              		"+
	"			<a href='#' onclick='closeMessage();return false'>                                                      			"+
	"				<img src = '/public/images/imgCerrar.png'                                                						"+
	"					border = '0'>                                                                           					"+
	"			</a>													"+
	"		</td> 														"+
	"	</tr>															"+
	"	<tr>															"+
	"		<td align='left' colspan='2'>                                                                                   		"+
	messageContent +
	"		</td> 														"+
	"	</tr>															"+
	"</table> 															"+
	"</html> 															";




	messageContent = tabla;

	messageObj.setHtmlContent(messageContent);
	messageObj.setSize(400,120);
	messageObj.setCssClassMessageBox(cssClass);
	messageObj.setSource(false);	// no html source since we want to use a static message here.
	messageObj.setShadowDivVisible(true);	// Disable shadow for these boxes
	messageObj.display();
}

function closeMessage(){
	messageObj.close();
}


//Metodo para mostrar los mensajes en el servidor, esots mensajes, siempre deben ser mostrados
//al final de la pagina, para no generar conflicto
function mensajeServidor(mensaje){
    mensaje = "<ul><li>"+mensaje+"</li></ul>";
    mensajeError 	= fuenteInicio + mensaje + fuenteFin;
    prepararMensaje();
    displayStaticMessage(mensajeError);
//    nuevoError          = document.createElement("script")
//    nuevoError.src 	= "error.js";
//    document.body.appendChild(nuevoError);
}

//Metodo para mostrar los mensajes en el servidor, esots mensajes, siempre deben ser mostrados
//al final de la pagina, para no generar conflicto
function visualizar(mensaje){
    mensaje = "<ul><li>"+mensaje+"</li></ul>";
    mensajeError 	= fuenteInicio + mensaje + fuenteFin;
    prepararMensaje();
    displayStaticMessage(mensajeError);
//    nuevoError          = document.createElement("script")
//    nuevoError.src 	= "error.js";
//    document.body.appendChild(nuevoError);
}


/**
Metodo que dado el arreglo de Validacion devuelve true o false y llena todos los mensajes correspondientes
La validacion se hace en espanol
*/
function validar(arreglo){
	return validarBasico(arreglo, false);
}

/**
Metodo que dado el arreglo de Validacion devuelve true o false y llena todos los mensajes correspondientes
La validacion se hace con formato idioma
*/
function validarIdioma(arreglo){
	return validarBasico(arreglo, true);
}


//Metodo que toma el mensaje y realiza la traduccion, lo hace usando expresiones regulares
function getTraduceMensaje(arreglo){
	iM			= 0;
	reg			= null;
	longitudM 	= arreglo.length;
	
	if(longitudM < 2)
		return null;
	else{
		plantilla = arreglo[0];
		for(iM = 1; iM<longitudM;iM++){
			plantilla 		= plantilla.replace(new RegExp("@"+(iM-1),"g"),arreglo[iM]);
		}
		return plantilla;
	}
}

//Metodo que toma el mensaje y realiza la traduccion, lo hace usando expresiones regulares
function getTraduceMensajeIdioma(arreglo){
	iM			= 0;
	reg			= null;
	longitudM 	= arreglo.length;
	
	if(longitudM < 2)
		return null;
	else{
		plantilla = arreglo[0];
		plantilla = eval(plantilla+"_"+idioma);
		for(iM = 1; iM<longitudM;iM++){
			texto			= document.getElementById(arreglo[iM])!= null ? document.getElementById(arreglo[iM]).innerHTML : arreglo[iM];
			plantilla 		= plantilla.replace(new RegExp("@"+(iM-1),"g"),texto);
		}
		return plantilla;
	}
}

//Metodo que permite saber si un texto esta vacio
function vacio(mensaje){
	if(mensaje.length<=0)
		return true;

	return false;
}
//Metodo que permite saber si un texto esta seleccionado, es decir, diferente de vacio y de -1
function seleccionado(mensaje){
	if(vacio(mensaje) || mensaje == "-1" || mensaje == "%%")
		return false;

	return true;
}


//Metodo que valida si un numero es entero
function numeroEntero(mensaje){

	if(vacio(mensaje))
		return false;
	
	//Quitar los puntos
	mensaje 		= mensaje.replace(new RegExp("[.]","g"),""); //Corchetes es el caracter comodin o de escape
	//Quitar las comas y poner puntos
	mensaje 		= mensaje.replace(new RegExp(",","g"),".");
	
	if(mensaje.indexOf(".") != -1) //Tiene Decimal
		return false;

	return true;
	
}

//Metodo que valida si un numero es decimal
function numeroDecimal(mensaje){

	if(vacio(mensaje))
		return false;
	
	return true;
	
}

//Metodo que valida si una fecha es valida
function fecha(mensaje) {
	if(vacio(mensaje)){
		return false;
	}
	if(mensaje.length == 10){
	}
	else{
		return false;
	}


	anno 	= parseInt(mensaje.substring(0,4),10); //Es necesario indicar la base, pues si el numero es 08, asume que el 0 le indica que es un octal
	mes 	= parseInt(mensaje.substring(5,7),10);
	dia 	= parseInt(mensaje.substring(8,10),10);

	if( !isNaN(dia) && !isNaN(mes) && !isNaN(anno) && dia >= 1 && anno >= 1900){
		/* Meses de 31 dias */

		if(( mes == 1 || mes == 3 || mes == 5 || mes == 7|| mes == 8 || mes == 10 || mes == 12)&& dia > 31) 
			return false;

		/* Meses de 30 dias */
		if((mes == 4 || mes == 6 || mes == 9 || mes == 11)&& dia > 30)
			return false;

		/* Febrero y bisiestos. */
		if( mes == 2 &&( dia > 29 ||( dia == 29 &&((anno % 400 != 0)&& ((anno % 4 != 0) || (anno % 100 == 0)))))) 
			return false;

		return true;
	}
	else{
		return false;
	}
	
}

//Permite saber si se muestra o no el panel de errores
function mostrarErrores(mostrarExternos,mostrarInternos){

	with (document.getElementById('errores').style)
		display="none";

	with (document.getElementById('erroresinternos').style)
		display="none";

	if(mostrarExternos){
		with (document.getElementById('errores').style)
			display="";
	}
	if(mostrarInternos){
		with (document.getElementById('erroresinternos').style)
			display="none";
	}
}

//Metodo que recupera el valor del objeto, independientemente de su tipado
function recuperarValor(objeto, posicion){
	var resultado 	= null;
	var longitudR 	= 0;
	//Capturar el nombre
	if(objeto.length > 1){
		//Es posible que sea un combo
		if(eval("objeto[0].name")!=null){
			campo 			= objeto[0].name;
		}
		else{
			campo 			= objeto.name;
		}
	}
	else{
		campo 			= objeto.name;
	}
	
	if(eval("document.forms[0].elements['"+campo+"'][0]")!=null){
		//Pueden ser combos o cajas con Iteradores
		if(eval("document.forms[0].elements['"+campo+"'].options")!=null){
		
			//Son combos. Analizar si tienen Iteradores o no
			if(eval("document.forms[0].elements['"+campo+"'][0][0]")!=null){
				//Tienen Iteradores
		 		objeto = eval("document.forms[0].elements['"+campo+"']["+indiceGlobal+"]");
		 		
			}
			else{
				//No tienen Iteradores
		 		objeto = eval("document.forms[0].elements['"+campo+"']");
		 		//Retornar la respuesta
		 		resultado 		= new Array(1);
		 		resultado[0] 	= objeto;
		 		
			}
		}
		else{
			//Son cajas con Iteradores.
	 		objeto 		= eval("document.forms[0].elements['"+campo+"']");
	 		//Mirar si la posicion cuenta
	 		if(posicion == -1){
		 		longitudR 	= objeto.length;
	 		}
	 		else{
	 			//Validacion con posicion aplica para un solo elemento
	 			longitudR = 1;
	 		}
	 		resultado	= new Array(longitudR);
	 		
	 		for(iR=0;iR<longitudR;iR++){
	 		
		 		if(posicion == -1){
		 			resultado[iR] = objeto[iR];
		 		}
		 		else{
		 			resultado[iR] = objeto[posicion];
		 		}
	 		}
	 		
		}
	}
	else{
		//Caja sin Iterador.
		
 		objeto = eval("document.forms[0].elements['"+campo+"']");

 		//Retornar la respuesta
 		resultado 		= new Array(1);
 		resultado[0] 	= objeto;
 		
	}
	return resultado;
}
