// JavaScript Document
//Libreria de validacion y funciones varias de formularios y ventanas V.0.3   
//Avelino Linares avelino.linares@gmail.com
//Modificada 11-agosto-2006  2:00

/*
	*****V.0.3*********
	-Función de validate con múltiples lenguajes
	-Agregada la función para presentar los numeros en formato de moneda con 2 decimales con o sin signo
	-Agregada la función para ocultar y mostrar elementos
	-Arreglado el problema de la validación de textos con acentos en letras mayúsculas
	-Agregada función para agregar celdas
*/

function trim(str){
	return str.replace(/^\s*|\s*$/g,"");
}

function vacio(formulario,campo,nombreCampo){
/*
***********************************************************************
*Para verificar si el campo definido por formulario y campo esta vacio*
***********************************************************************
*/
	textoCampo=trim(document.forms[formulario].elements[campo].value);
	if(textoCampo==""){
		falla="El campo "+ nombreCampo +" es requerido";	
	}else{
		falla="ok";	
	}
	return falla;
}

function validate(formulario,campo,tipo,requerido,nombre,lang,elementoError,errorClassName,errorDetalle,errorDetalleOculto, normalClass,tamanoMinimo,tamanoMaximo){
		if(lang=="eng"){
			elCampo="The field ";	
			required=" is required.";
			onlyLetters=" only allow letters.";
			numberLetters=" only allow number and letters.";
			onlyNumber=" only allow numbers.";
			digit=" only allow numerical characters";
			email=" have and invalid email.";
			dash=" only allow numbers and '-'";
			Select="Please select a value in ";
			phone=" only alow numbers '-','(' and ')' ";
		}
		if(lang=="esp"){
			elCampo="El campo ";	
			required=" es requerido.";
			onlyLetters=" s&oacute;lo admite letras.";
			numberLetters=" s&oacute;lo adminte n&uacute;meros y letras.";
			onlyNumber=" s&oacute;lo adminte n&uacute;meros.";
			digit=" s&oacute;lo admite caracteres num&eacute;ricos";
			email=" tiene un email inv&aacute;lido.";
			dash=" s&oacute;lo admite n&uacute;meros y '-'";
			Select="Por favor seleccione un valor en ";
			phone=" s&oacute;lo admite '-','(' y ')' ";
			phone2=" debe estar en formato 2222-2222 ";			
		}
	
		textoCampo=document.forms[formulario].elements[campo].value;
		
		//alert(document.forms[formulario].elements[campo].name);
		Error="ok";
		if( requerido && vacio(formulario,campo) != "ok"){
			Error=elCampo + nombre + required;
		}else{
		  //alert(textoCampo);
		  if(textoCampo!=""){

			switch(tipo){
			
				case "SoloTexto":
										//Comprobando que solo acepte caracteres alfabeticos
										var er= /^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|Á|É|Í|Ó|Ú|Ñ|\s|)+$/;
										if(!er.test(textoCampo)){
											Error=elCampo + nombre + onlyLetters;
										}
				break;
				
				case "Alfanum":						
										var er= /^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|Á|É|Í|Ó|Ú|Ñ|\s|[0-9])+$/;
										
										if(!er.test(textoCampo)){
											Error=elCampo + nombre + numberLetters;
										}
				break;

				case "Signo":						
										var er= /^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|Á|É|Í|Ó|Ú|Ñ|\s|\.|\¿|\?|\¡|\!|\,|[0-9])+$/;
										
										if(!er.test(textoCampo)){
											Error=elCampo + nombre + numberLetters;
										}
				break;
				
				
				case "Number":						
										if(isNaN(textoCampo)){
											Error=elCampo + nombre + onlyNumber;
										}
				break;
				

				case "Digito":						
										var er= /^([0-9])+$/;
										
										if(!er.test(textoCampo)){
											Error=elCampo + nombre + digit;
										}
				break;
				
				

				case "Email":						
										var er = /^(.+\@.+\..+)$/;
										if(!er.test(textoCampo)){
											//alert("No cumple");	
											Error=elCampo + nombre + email ;
										}
				break;
				
				
			
				case "Guion":						
										var er=/^(\-|[0-9])+$/;
										
										if(!er.test(textoCampo)){
											Error=elCampo + nombre + dash;
										}
				break;
				
				case "Select":						
										//Para validar que un select no quede con su valor default     
										if(document.forms[formulario].elements[campo].options[document.forms[formulario].elements[campo].selectedIndex].value=="Default" && requerido){
											Error=Select+elCampo.toLowerCase()+nombre;
										}
				break;
				case "Telefono":						
										//Para validar telefonos 
										var er=/^(\-|[0-9]|\+|\s|\(|\))+$/;
										
										if(!er.test(textoCampo)){
											Error=elCampo+ nombre +phone;
										}
				break;
				
				case "TelefonoNacional":						
										//Para validar telefonos 
										var er=/\d{4}-\d{4}/;
										

										if(!er.test(document.forms[formulario].elements[campo].value)){
											Error=elCampo+ nombre +phone2;
										}
				break;
				
				case "Archivo":		
										var er= /^([a-z]|[A-Z]|\.|\s|\_||[0-9]|\-)+$/;
										
										if(!er.test(textoCampo)){
											Error="El nombre del archivo "+nombre+" es inválido";
										}

				break;
				case "Usuario":		
										var er= /^([a-z]|[A-Z]|\.|\_|[0-9]|\-)+$/;
										
										if(!er.test(textoCampo)){
											Error="El campo "+nombre+" contiene caracteres inv&aacute;lidos";
										}

				break;
				
				case "URL":		
			
										var er= /(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?/;
										
										if(!er.test(textoCampo.toLowerCase())){
											Error="El URL en el campo "+nombre+" no es v&aacute;lido";
										}

				break;
						 	



				case "Todo":						

				break;
				
				
				default:
							alert("No se han definido validaciones"+document.forms[formulario].elements[campo].name);
				
				
			}
	 	 }
	  	
		}
		//alert(nombre+"->"+textoCampo.length+"->bandera->"+(textoCampo.length<tamanoMinimo));
		if(Error!="ok"){
			mostrarDetalleError(elementoError,errorDetalle, Error)
			document.forms[formulario].elements[campo].className=errorClassName;
			//alert(nombre+"->"+textoCampo.length+"->bandera->"+(textoCampo.length<tamanoMinimo));
		}else{
			 ocultarDetalleError(elementoError,errorDetalleOculto)
			 document.forms[formulario].elements[campo].className=normalClass;					 

			if(requerido && vacio(formulario,campo) == "ok"){
				 if(textoCampo.length<tamanoMinimo){
					Error="Debe introducir al menos "+tamanoMinimo+" caracteres"
					mostrarDetalleError(elementoError,errorDetalle,Error)
					document.forms[formulario].elements[campo].className=errorClassName;
				 }else{
					 //alert(textoCampo.length);
					 if(textoCampo.length>tamanoMaximo){
						Error="Debe introducir menos de "+tamanoMaximo+" caracteres."
						mostrarDetalleError(elementoError,errorDetalle, Error)
						document.forms[formulario].elements[campo].className=errorClassName;
					 }else{
						 ocultarDetalleError(elementoError,errorDetalleOculto)
						 document.forms[formulario].elements[campo].className=normalClass;					 
					 }	 
				}
			}


		}

return Error;
}

function mostrarDetalleError(elemento,clase, mensaje){
	//alert("mostrarError"+mensaje+"->"+elemento+"->"+clase);
	contenedor=document.getElementById(elemento);
	contenedor.innerHTML=mensaje;
	contenedor.className=clase;
}
function ocultarDetalleError(elemento,clase){
//	alert("ocultarError"+clase+"->"+elemento);
	contenedor=document.getElementById(elemento);
	contenedor.className=clase;
}

function tamano(formulario,campo,size){
	error=vacio(formulario,campo);
	if(error=="ok"){
		if(document.forms[formulario].elements[campo].value.length > size){
			error="El campo " + document.forms[formulario].elements[campo].name +" solo puede contener "+ size +" caracteres";	
		}
	
	}
	return error;
	
}

function canonica(fecha,destino){
/* Valida la fecha y la convierte a canonica 
	aaaa-mm-dd Formati usado por MySql*/
			var cano=new Array;
			var flag=new Boolean;
			flag=true;
			alerta="Fecha Invalida";
			//alert(fecha);
			cano = fecha.split("-"); 
				if(cano.length>=4){
					alerta+="\n-Demasiados Argumentos";
					flag=false;
				}else{
					dia=cano[0];
					mes=parseInt(cano[1],10);
					year=cano[2];
					//dia=parseInt(dia);
					//mes=parseInt(mes);
					//year=parseInt(year);
					
					if(mes>12){
						alerta+="\n-Mes invalido";
						flag=false;
					}
					
					if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12){
						if(dia>31){
						alerta+="\n-Dia invalido \n";
							flag=false;
						}	
					}
					if(mes==4 || mes==6 || mes==9 || mes==11){
						if(dia > 30){
						alerta +="\n-Dia invalido \n";
							flag=false;
						}	
					}
					
			
			bici=year/4;
			bic=String(bici);
	
			var esto=new Array;
			esto=bic.split(".");
					
			if(esto.length<=1){
				if(mes==2){
					if(dia>29){
						alerta+="\n-Dia inválido \n";
						flag=false;
				
					}
				}
			
			}else{
				if(mes==2){
					if(dia>28){
						alerta+="\n-Dia inválido \n";
						flag=false;

					}
				}
			}
					if(year<1930){
						alerta+="\n-Por favor use años de 4 digitos \n";
						flag=false;
					}
				}
		
		var meses=new Array();
		
		meses[1]="Jan";		
		meses[2]="Feb";		
		meses[3]="Mar";		
		meses[4]="Apr";	
		meses[5]="May";	
		meses[6]="Jun";	
		meses[7]="Jul";	
		meses[8]="Aug";	
		meses[9]="Sep";	
		meses[10]="Oct";	
		meses[11]="Nov";	
		meses[12]="Dec";			
	/*	var meses=new Array();
		
		meses[1]="01";		
		meses[2]="02";		
		meses[3]="03";		
		meses[4]="04";	
		meses[5]="05";	
		meses[6]="06";	
		meses[7]="07";	
		meses[8]="08";	
		meses[9]="09";	
		meses[10]="10";	
		meses[11]="11";	
		meses[12]="12";*/
		
		
		if(flag && !isNaN(year) && !isNaN(mes) && !isNaN(dia)){
				//destino.value=year+"/"+meses[mes]+"/"+dia;
				if(dia<10){
					//dia="0"+dia;				
				}
				
				destino.value=year+meses[mes]+dia;
				alerta="ok";
				//document.anios.anho.value=year;
		}else{
				destino.value="Fecha Invalida";
		}
			
		//alert(document.f1.FechaCanonica.value);
		flag=false;
		return alerta;

}



function textCounter(campo, divContador, limite, classNormal, classError) {
/*
	Cuenta la longitud de text area y la limita
*/	

contador=document.getElementById(divContador);

if (campo.value.length > limite){ 
	// si es muy largo lo cortamos
	campo.value = campo.value.substring(0,limite);

	}else{
		if (limite - campo.value.length == 0){
			contador.className=classError;	
			contador.innerHTML="ha llegado al maximo de caracteres";
		}else{
			contador.className=classNormal;	
			contador.innerHTML = limite - campo.value.length +" caracteres restantes."; 
		}
	}
}

function mostrarErrores(errores,formulario){
	//	alert("comienza mostrar errores");
	cuentaErrores=0;  //Contador de todos los errores
	alerta="Se han encontrado los siguientes errores: \n";
	for(i=0;i<=errores.length-1;i++){
		if(errores[i]!="ok"){
			cuentaErrores++;
			alerta+="-"+errores[i]+"\n";
			//alert(i+"->"+alerta);
		}					
	}

	 if(cuentaErrores==0){
		//alert(formulario.name);
		if(formulario){
			//alert("Se envia");
			//formulario.submit();
		}else{
			return true;	
		}
	}else{
		//alert(alerta);	
		return false;
	}
}

function convertirFecha(fecha){
	var date=new Array();
	date=fecha.split("-");
	document.frm.fecha.value=date[2]+"-"+date[1]+"-"+date[0];
}


function abrirVentana(url,title,width,height){

  var left = (screen.width/2) - width/2;
  var top = (screen.height/2) - height/2;

  var styleStr = 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=no,copyhistory=yes,width='+width+',height='+height+',left='+left+',top='+top+',screenX='+left+',screenY='+top;

  window.open(url,title, styleStr);


}
	
function fondoUno(src,color_entrada) { 
    src.style.background=color_entrada;
} 
function fondoDos(src,color_default) { 
    src.style.background=color_default;
}
function dolar(num,symbol) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) num = "0";
		cents = Math.floor((num*100+0.5)%100); 
		num = Math.floor(num).toString();
		if(cents < 10) cents = "0" + cents; 

		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
				num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3)); 
		}
		if(symbol){
			return ('$'+num + '.' + cents);
		}else{
			return (num + '.' + cents); 
		}
}
function capas(actuales,clase1,destinos,clase2){
	//actuales y destinos tienen que ser arreglos	
//	alert(actuales.length);
	for(i=0;i<=actuales.length-1;i++){
		document.getElementById(actuales[i]).className=clase1;		
//		alert(document.getElementById(actuales[0]).className);
	}
	
	for(i=0;i<=destinos.length-1;i++){
		document.getElementById(destinos[i]).className=clase2;		
	}
	

}

function comparaFecha(date1,date2){
	arreglo1=new Array();
	arreglo2=new Array();
							
	arreglo1=date1.split("-");
	arreglo2=date2.split("-");
	
	if(arreglo1[0]<=arreglo2[0]){
		//alert("año menor o igual");
		if(arreglo1[0]==arreglo2[0]){
				if(arreglo1[1]<=arreglo2[1] ){
					//alert("mes menor o igual");
					if(arreglo1[1]==arreglo2[1]){
						if(arreglo1[2]<arreglo2[2]){
							flagMenor="ok";
						}else{
							flagMenor="Las fecha de inicio tiene que ser menor que la fecha final.";
						}						
					}else{
						flagMenor="ok";
					}
				}else{
					flagMenor="Las fecha de inicio tiene que ser menor que la fecha final.";
				}	
		}else{
				flagMenor="ok";				
		}					
	}else{
		flagMenor="Las fecha de inicio tiene que ser menor que la fecha final.";
	}
	return flagMenor;
}

function capa(id,clase){
	document.getElementById(id).className=clase;		
}

function acentos(x) {
	// version 040623
	// Spanish - Español
	// Portuguese - Portugués - Português
	// Italian - Italiano
	// French - Francés - Français
	// Also accepts and converts single and double quotation marks, square and angle brackets
	// and miscelaneous symbols.
	// Also accepts and converts html entities for all the above.
//	if (navigator.appVersion.toLowerCase().indexOf("windows") != -1) {return x}
	x = x.replace(/¡/g,"\xA1");	x = x.replace(/&iexcl;/g,"\xA1")
	x = x.replace(/¿/g,"\xBF");	x = x.replace(/&iquest;/g,"\xBF")
	x = x.replace(/À/g,"\xC0");	x = x.replace(/&Agrave;/g,"\xC0")
	x = x.replace(/à/g,"\xE0");	x = x.replace(/&agrave;/g,"\xE0")
	x = x.replace(/Á/g,"\xC1");	x = x.replace(/&Aacute;/g,"\xC1")
	x = x.replace(/á/g,"\xE1");	x = x.replace(/&aacute;/g,"\xE1")
	x = x.replace(/Â/g,"\xC2");	x = x.replace(/&Acirc;/g,"\xC2")
	x = x.replace(/â/g,"\xE2");	x = x.replace(/&acirc;/g,"\xE2")
	x = x.replace(/Ã/g,"\xC3");	x = x.replace(/&Atilde;/g,"\xC3")
	x = x.replace(/ã/g,"\xE3");	x = x.replace(/&atilde;/g,"\xE3")
	x = x.replace(/Ä/g,"\xC4");	x = x.replace(/&Auml;/g,"\xC4")
	x = x.replace(/ä/g,"\xE4");	x = x.replace(/&auml;/g,"\xE4")
	x = x.replace(/Å/g,"\xC5");	x = x.replace(/&Aring;/g,"\xC5")
	x = x.replace(/å/g,"\xE5");	x = x.replace(/&aring;/g,"\xE5")
	x = x.replace(/Æ/g,"\xC6");	x = x.replace(/&AElig;/g,"\xC6")
	x = x.replace(/æ/g,"\xE6");	x = x.replace(/&aelig;/g,"\xE6")
	x = x.replace(/Ç/g,"\xC7");	x = x.replace(/&Ccedil;/g,"\xC7")
	x = x.replace(/ç/g,"\xE7");	x = x.replace(/&ccedil;/g,"\xE7")
	x = x.replace(/È/g,"\xC8");	x = x.replace(/&Egrave;/g,"\xC8")
	x = x.replace(/è/g,"\xE8");	x = x.replace(/&egrave;/g,"\xE8")
	x = x.replace(/É/g,"\xC9");	x = x.replace(/&Eacute;/g,"\xC9")
	x = x.replace(/é/g,"\xE9");	x = x.replace(/&eacute;/g,"\xE9")
	x = x.replace(/Ê/g,"\xCA");	x = x.replace(/&Ecirc;/g,"\xCA")
	x = x.replace(/ê/g,"\xEA");	x = x.replace(/&ecirc;/g,"\xEA")
	x = x.replace(/Ë/g,"\xCB");	x = x.replace(/&Euml;/g,"\xCB")
	x = x.replace(/ë/g,"\xEB");	x = x.replace(/&euml;/g,"\xEB")
	x = x.replace(/Ì/g,"\xCC");	x = x.replace(/&Igrave;/g,"\xCC")
	x = x.replace(/ì/g,"\xEC");	x = x.replace(/&igrave;/g,"\xEC")
	x = x.replace(/Í/g,"\xCD");	x = x.replace(/&Iacute;/g,"\xCD")
	x = x.replace(/í/g,"\xED");	x = x.replace(/&iacute;/g,"\xED")
	x = x.replace(/Î/g,"\xCE");	x = x.replace(/&Icirc;/g,"\xCE")
	x = x.replace(/î/g,"\xEE");	x = x.replace(/&icirc;/g,"\xEE")
	x = x.replace(/Ï/g,"\xCF");	x = x.replace(/&Iuml;/g,"\xCF")
	x = x.replace(/ï/g,"\xEF");	x = x.replace(/&iuml;/g,"\xEF")
	x = x.replace(/Ñ/g,"\xD1");	x = x.replace(/&Ntilde;/g,"\xD1")
	x = x.replace(/ñ/g,"\xF1");	x = x.replace(/&ntilde;/g,"\xF1")
	x = x.replace(/Ò/g,"\xD2");	x = x.replace(/&Ograve;/g,"\xD2")
	x = x.replace(/ò/g,"\xF2");	x = x.replace(/&ograve;/g,"\xF2")
	x = x.replace(/Ó/g,"\xD3");	x = x.replace(/&Oacute;/g,"\xD3")
	x = x.replace(/ó/g,"\xF3");	x = x.replace(/&oacute;/g,"\xF3")
	x = x.replace(/Ô/g,"\xD4");	x = x.replace(/&Ocirc;/g,"\xD4")
	x = x.replace(/ô/g,"\xF4");	x = x.replace(/&ocirc;/g,"\xF4")
	x = x.replace(/Õ/g,"\xD5");	x = x.replace(/&Otilde;/g,"\xD5")
	x = x.replace(/õ/g,"\xF5");	x = x.replace(/&otilde;/g,"\xF5")
	x = x.replace(/Ö/g,"\xD6");	x = x.replace(/&Ouml;/g,"\xD6")
	x = x.replace(/ö/g,"\xF6");	x = x.replace(/&ouml;/g,"\xF6")
	x = x.replace(/Ø/g,"\xD8");	x = x.replace(/&Oslash;/g,"\xD8")
	x = x.replace(/ø/g,"\xF8");	x = x.replace(/&oslash;/g,"\xF8")
	x = x.replace(/Ù/g,"\xD9");	x = x.replace(/&Ugrave;/g,"\xD9")
	x = x.replace(/ù/g,"\xF9");	x = x.replace(/&ugrave;/g,"\xF9")
	x = x.replace(/Ú/g,"\xDA");	x = x.replace(/&Uacute;/g,"\xDA")
	x = x.replace(/ú/g,"\xFA");	x = x.replace(/&uacute;/g,"\xFA")
	x = x.replace(/Û/g,"\xDB");	x = x.replace(/&Ucirc;/g,"\xDB")
	x = x.replace(/û/g,"\xFB");	x = x.replace(/&ucirc;/g,"\xFB")
	x = x.replace(/Ü/g,"\xDC");	x = x.replace(/&Uuml;/g,"\xDC")
	x = x.replace(/ü/g,"\xFC");	x = x.replace(/&uuml;/g,"\xFC")
	
	x = x.replace(/\"/g,"\x22")
	x = x.replace(/\'/g,"\x27")
	x = x.replace(/\</g,"\x3C")
	x = x.replace(/\>/g,"\x3E")
	x = x.replace(/\[/g,"\x5B")
	x = x.replace(/\]/g,"\x5D")

	x = x.replace(/¢/g,"\xA2");	x = x.replace(/&cent;/g,"\xA2") 
	x = x.replace(/£/g,"\xA3");	x = x.replace(/&pound;/g,"\xA3")
	x = x.replace(/€/g,"\u20AC");	x = x.replace(/&euro;/g,"\u20AC") 
	x = x.replace(/©/g,"\xA9");	x = x.replace(/&copy;/g,"\xA9") 
	x = x.replace(/®/g,"\xAE");	x = x.replace(/&reg;/g,"\xAE") 
	x = x.replace(/ª/g,"\xAA");	x = x.replace(/&ordf;/g,"\xAA") 
	x = x.replace(/º/g,"\xBA");	x = x.replace(/&ordm;/g,"\xBA") 
	x = x.replace(/°/g,"\xB0");	x = x.replace(/&deg;/g,"\xB0") 
	x = x.replace(/±/g,"\xB1");	x = x.replace(/&plusmn;/g,"\xB1")
	x = x.replace(/×/g,"\xD7");	x = x.replace(/&times;/g,"\xD7") 
	
		
	return x
}




