//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// FUNCIONES GENERALES PARA CLIENTE
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
aPrefijo = new Array(945, 967, 96, 950, 920, 924, 971, 93, 947, 927, 956, 964, 926, 957, 981, 969,
	972, 958, 949, 943, 959, 974, 953, 987, 973, 941, 982, 91, 95, 968, 948, 988, 98, 979, 928,
	986, 923, 922, 942, 921, 95, 975, 977, 978, 925, 96, 983, 94, 980, 976, 956, 95);
//-----------------------------------------------------------------------
function isLetter(c)
{
	return(((c >= "a")&&(c<="z"))||((c >= "A")&&(c <= "Z")));
}
//-----------------------------------------------------------------------
function isDate(f)
{
	//	Comprueba si el formato de una fecha es correcto.
	
	if (f.indexOf('/') == -1)
		return(false);
		
	d = f.substring(0, f.indexOf('/'));
	m = f.substring(f.indexOf('/')+1, f.lastIndexOf('/'));
	a = f.substring(f.lastIndexOf('/')+1, f.length);
	
	if (isNaN(a) || isNaN(d) || isNaN(m))
		return false;
		
	if ((d < 1) || (d > 31))
		return false;
		
	if ((m < 1) || (m > 12))
		return false;
		
	if ((a < 1) || (a > 9999))
		return false;
		
	if (((m == 4) || (m == 6) || (m == 9) || (m == 11)) && (d > 30)) // Meses de 30 dias
		return false;
		
	if ((m == 2) && (a%4 == 1) && (d > 28)) // Para bisiestos
		return false;
		
	return true;
}
//-----------------------------------------------------------------------
function isDigit(c)
{
	return((c >= "0")&&(c <= "9"));
}
//-----------------------------------------------------------------------
function isACorrectInterval(n1, n2)
{
	if (isNaN(n1))
		return(false);
		
	if (isNaN(n2))
		return(false);
		
	if (n1 > n2)
		return(false);
		
	return(true);
}
//-----------------------------------------------------------------------
function isACorrectPeriod(n1, n2)
{
	var date1;
	var date2;
	var d1;
	var d2;
	
	if ((!isDate(n1))||(!isDate(n2)))
		return false;
		
	var date1 = n1.split("/");
	var date2 = n2.split("/");
	var d1 = new Date(date1[2], date1[1], date1[0]);
	var d2 = new Date(date2[2], date2[1], date2[0]);

	if (d1>d2)
		return(false);
	
	return(true);
}
//-----------------------------------------------------------------------
function charInString(c, s)
{   
	for (i = 0; i<s.length; i++)
		if (s.charAt(i) == c) 
			return(true);
			
    return false;
}
//-----------------------------------------------------------------------
function isFloat(s)
{
	var i;
	var c;

	if (s.length == 0)
		return false;

	 for (i = 0; i<s.length; i++){
			c = s.charAt(i);
			if (!isDigit(c)  && c !=','){ /*&& c !='.'*/
			return false;
			}
	 }

	 return true;
}
//-----------------------------------------------------------------------
function isInteger(s)
{   
	var i;
	var c;
	
	if (s.length == 0) 
		return false;
	
    for (i = 0; i<s.length; i++){
        c = s.charAt(i);

        if (!isDigit(c)) 
			return false;
    }

    return true;
}
//-----------------------------------------------------------------------
function isPositive(n)
{
	return(n > 0);
}
//-----------------------------------------------------------------------
function isNegative(n)
{
	return(n < 0);
}
//-----------------------------------------------------------------------
function isZero(n)
{
	return(n == 0);
}
//-----------------------------------------------------------------------
function validarNif(n)
{
	var nifChars1 = "ABCDEFGHPQSKLXabcdefghpqsklx";
	var nifChars2 = "ABCDEFGHTabcdefght";
	var nifChars3 = "TRWAGMYFPDXBNJZSQVHLCKE";
	var i;
	var longitud;
	var cero = false;
	var ss = '';
	var s = '';
	
	for(i=0;i<n.length;i++)
		if (isDigit(n.charAt(i)) || isLetter(n.charAt(i)))
			s = s + n.charAt(i);

	for(i=0;i<s.length;i++)	{
		if(s.charAt(i) != '0' || cero){
			ss = ss + s.charAt(i);
			cero = true;
			}
		}
		
	s = ss;				
		
	if(s.length==0) {
			return '';
		}
	if(s.length > 9) {
			return '';
		}

	for(i=1;i<s.length-2;i++)	{
		if(!isDigit(s.charAt(i))){
			return '';
			}
	}

	// Si el primero y el último son numeros, el formato no es correcto
	if((isDigit(s.charAt(0))) && (isDigit(s.charAt(s.length-1)))) {
		return '';
	}

	// Si el primero es un numero, el ultimo seguro que es una letra
	if(isDigit(s.charAt(0))) {
		// VALIDAR FORMATO #3
		baseStr = s.substring(0,s.length-1);
		letra=s.charAt(s.length-1);
		letra=letra.toUpperCase();
	} else {
		// VALIDAR FORMATO #2
		baseStr = s.substring(1,s.length);
		letra=s.charAt(0);
		letra=letra.toUpperCase();
	}
	
	if(!isInteger(baseStr)) { return false; }
	baseInt = parseInt(baseStr);
	indice = baseInt % 23;

	if(letra==nifChars3.charAt(indice)) {
		return baseStr+letra;
	} else {
		return '';
	}
}
//-----------------------------------------------------------------------
function validarEmail(s)
{
    var i = 1;
    var sLength = s.length;

    if (sLength < 5) return false;
   
    while ((i < sLength) && (s.charAt(i) != "@")) i++;

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    while ((i < sLength) && (s.charAt(i) != ".")) i++;

    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}
//-----------------------------------------------------------------------
function validarCorreo(dir) {

	var caracteres_validos;
	var i;
	
	caracteres_validos = '1234567890QWERTYUIOPASDFGHJKLZXCVBNM_-.@qwertyuiopasdfghjklzxcvbnm';
	
	if (
		(dir.charAt(dir.length-1)=='-') ||
		(dir.charAt(dir.length-1)=='.') ||
		(dir.charAt(dir.length-1)=='@') ||
		(dir.charAt(dir.length-1)=='_')
		) {
		
		return false;
	}
	
	if (
		(dir.charAt(0)=='-') ||
		(dir.charAt(0)=='.') ||
		(dir.charAt(0)=='@') ||
		(dir.charAt(0)=='_')
		) {
		return false;
	}

	var j;
	j=0;
	for (i=0; i<dir.length; i++) {
		if (caracteres_validos.search(dir.charAt(i))==-1) {
			return false;
		}
		if (dir.charAt(i)=='@') j++;
	}

	//Si hay más de una @ la dirección es incorrecta
	if (j>1) {
		return false;
	}
	if (j==0) {
		return false;
	}
	
	if (dir.indexOf('.')==-1) return false;
	
	if (dir.indexOf('@.')!=-1) return false;
	if (dir.indexOf('.@')!=-1) return false;
	
	return true;
	
}
//-----------------------------------------------------------------------
function validarDC(entidad, sucursal, dc, numcuenta)
{
	var pesosDC = new Array(10);
	pesosDC[1] = 6;
	pesosDC[2] = 3;
	pesosDC[3] = 7;
	pesosDC[4] = 9;
	pesosDC[5] = 10;
	pesosDC[6] = 5;
	pesosDC[7] = 8;
	pesosDC[8] = 4;
	pesosDC[9] = 2;
	pesosDC[10] = 1;
	var j;
	var entsuc = entidad+sucursal;
	var sumapesos1=0;
	var sumapesos2=0;

	for (j=entsuc.length;j>0;j--)
		 sumapesos1+=((entsuc.charAt(j-1))*(pesosDC[(entsuc.length-j)+1]));

	var dc11=(sumapesos1%11);
	var dc1 = 11-dc11;

	if (dc1==11)
		dc1=0;
	if (dc1==10)
		dc1=1;

	for (j=numcuenta.length;j>0;j--)
		 sumapesos2+=((numcuenta.charAt(j-1))*pesosDC[(numcuenta.length-j)+1]);

	var dc21=(sumapesos2%11);
	var dc2 = 11-dc21;

	if (dc2==11)
		dc2=0;
	if (dc2==10)
		dc2=1;

	var dccorrecto=(dc1*10)+dc2;
	if(dccorrecto==dc)
		return true;

	return false;
}
//-----------------------------------------------------------------------
function validarPrefijo(n, codprov)
{
	var s;
	s = '';
	var p;
	
	for(i=0; i<n.length; i++)
		if ((n.charAt(i) >= '0') && (n.charAt(i) <= '9'))
			s = s + n.charAt(i);
			
	if (s.length < 4) 
		return '';
	
	if ((s.substr(0, 3) == '900') || (s.substr(0, 3) == '902') || (s.substr(0, 1) == '6'))
		return s;

	p = new String(aPrefijo[codprov-1]);

	if (s.substr(0, p.length) != pref[codprov-1])
		return '';

	return s;
}
//-----------------------------------------------------------------------
function validarClave(str)
{
	for (i=0; i<str.length; i++)
		if (((!isLetter(str.charAt(i))) || (str.charAt(i)=='ñ') || (str.charAt(i)=='Ñ')) &&
			(!isDigit(str.charAt(i))))
			return(false);
			
	return(true);
}
//-----------------------------------------------------------------------
function ptas2euros(p)
{
	var fPrecio;
	var fDecimal;
	var fLider;
	
	fPrecio = p/166.386;
		
	fDecimal = Math.floor((fPrecio-Math.floor(fPrecio))*100);
	fLider = Math.floor((((fPrecio-Math.floor(fPrecio))*100)-fDecimal)*10);
	
	if (fLider >= 5)
		fLider = 0.01;
	else 
		fLider = 0;
	
	if (fDecimal > 0)
		fDecimal = fDecimal/100.0;

	fPrecio = Math.floor(fPrecio);
	fPrecio = fPrecio+(fDecimal+fLider);
	return(fPrecio);
}
//-----------------------------------------------------------------------
function euros2ptas(e)
{
	return(e * 166.386);
}
//-----------------------------------------------------------------------
function validardigitos(digitos){
 for (i=0;i<digitos.length;i++)
     if (digitos.charAt(i)<'0' || digitos.charAt(i)>'9'){
        return(0);
     }   
 return(1);
}
//-----------------------------------------------------------------------
function validartelefono(digitos){
 if  (digitos.substr(0, 1) == '6'  || digitos.substr(0, 1) == '9')
 	{
		 for (i=0;i<digitos.length;i++)
			 if (digitos.charAt(i)<'0' || digitos.charAt(i)>'9'){
				return(1);
			 }   
		 return(0);
	 }   		 
	else {
 			return(1);
 		}	 
}

//-----------------------------------------------------------------------
function comprobarfecha(strFecha)
{
	
	//Primero compruebo que los campos no este vacios
	if (strFecha == ""){
		return false;
	}
	var diaIni
	var mesIni
	var anyoIni
	
	// Separo la fecha en dia, mes y año
	diaIni = (strFecha.substring(0,2));
	mesIni = (strFecha.substring(3,5));
	anyoIni = (strFecha.substring(6,10));
	//Compruebo la longitud de los campos
	if((diaIni.length!=2)||(mesIni.length!=2)||(anyoIni.length!=4)){
		return false;
	}
	//Compruebo el contenido de la fecha
	if (isNaN(diaIni)||isNaN(mesIni)||isNaN(anyoIni)){
		return false;
	}
	//Compruebo que los meses sean del 1 al 12
	if((mesIni > 12)||(mesIni<0)){
		return false;
	}
	//Compruebo que no haya mas dígitos despues del año
	if(strFecha.substring(10,11)!=""){
		return false;
	}
	//Compruebo si el año es bisiesto
	var bis
	bis = 0;
	if((anyoIni % 4 == 0) && (anyoIni % 100 !=0) || (anyoIni % 400 == 0)) {
	bis = 1;
	}
	//Compruebo que los dias no superen al ultimo día del mes
	if((mesIni==01) && (diaIni>31)){
		return false;
	} 
	if((mesIni==02) && (diaIni>29) && (bis==1)||(mesIni==02) && (diaIni>28) && (bis==0)){
		return false;
	}if((mesIni==03) && (diaIni>31)){
		return false;
	}
	if(diaIni<1){
		return false;
	}
	if((mesIni==04) && (diaIni>30)){
		return false;
	}
	if(mesIni<1){
		return false;
	}
	if((mesIni==05) && (diaIni>31)){
		return false;
	}
	if((mesIni==06) && (diaIni>30)){
		return false;
	}
	if((mesIni==07) && (diaIni>31)){
		return false;
	}
	if((mesIni==08) && (diaIni>31)){
		return false;
	}
	if((mesIni==09) && (diaIni>30)){
		return false;
	}
	if((mesIni==10) && (diaIni>31)){
		return false;
	}
	if((mesIni==11) && (diaIni>30)){
		return false;
	}
	if((mesIni==12) && (diaIni>31)){
		return false;
	}
	if(anyoIni<1){
		return false;
	}
	//Por último comprueba que el separador es /
	var separadorIni
	separadorIni = strFecha;
	if((separadorIni.substring(2,3)!= "/")||(separadorIni.substring(5,6)!="/")){
		return false;
	}
	return true;
}
/************************************************************************/
function ValidarFormulario(formulario)
{
	for (i = 0; i < formulario.length; i++){
		var elemento = formulario.elements[i];
		var completo,correcto,longitudminima;
		completo = true; correcto = true; longitudminima = true;
		if (elemento.etiqueta != null && elemento.etiqueta.charAt(0) == '*'){

			if (elemento.type == 'radio'){
				objeto = eval('formulario.'+elemento.name);
				chequeado = false;
				for (j=0;j<objeto.length;j++)
				    if (objeto[j].checked) chequeado=true;
				if (!chequeado){
					alert('Debe elegir una opción para el campo "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length));					
					return false;
				}
//				for(i=0;elemento.length)
			}
			if (elemento.type == 'checkbox'){
				objeto = eval('formulario.'+elemento.name);
				if (!objeto.checked){
					alert('Debe Marcar la casilla "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length));					
					return false;
				}
			}			
			
			if ( ((elemento.type == 'file' || elemento.type == 'text'|| elemento.type == 'password' || elemento.type == 'textarea')
			&& Trim(elemento.value).length <= 0) || (elemento.type.toString().charAt(0) == 's' && elemento.selectedIndex <= 0) )
				completo = false;
				
		}			//alert(elemento.selectedIndex + " " + elemento.etiqueta + " " + elemento.value + " " + elemento.type + " " + completo);

/*
					Añadimos ademas la comprobación de cada campo del formulario en base al tipo de datos que debe
		contener para asegurarnos que el formato es correcto, además de si la longitud del mismo es la
		mínima exigida.
		Para ellos utilizaremos los siguientes tipos de datos
		int, float, date, email
		*/
		if (!completo && elemento.minlength != null){
						 if ( elemento.type.toLowerCase() == 'text'  && Trim(elemento.value).length < Number(elemento.minlength))
			 longitudminima = false;
		}
		if (completo && longitudminima && elemento.tipo != null){
						 if ( elemento.type.toLowerCase() == 'text'  && elemento.value.length > 0){
			 if (elemento.tipo.toLowerCase() == 'date') correcto = isDate(elemento.value);
			 if (elemento.tipo.toLowerCase() == 'int') correcto = isInteger(elemento.value);
			 if (elemento.tipo.toLowerCase() == 'tlf'){
									 if (isInteger(elemento.value) && elemento.value.length>=9 )
					 correcto = true;
					else{
											alert('El Formato de Teléfono del campo "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" es incorrecto');
					return false;
					}
			 }
			 if (elemento.tipo.toLowerCase() == 'sexo'){
			    if (elemento.value.toLowerCase() == 'h' || elemento.value.toLowerCase() =='m' )
					correcto = true;
				else correcto = false;
			 }			 
			 if (elemento.tipo.toLowerCase() == 'float') correcto = isFloat(elemento.value);
			 if (elemento.tipo.toLowerCase() == 'email') correcto = validarCorreo(elemento.value);
 		    if (elemento.tipo.toLowerCase() == 'nif') correcto = validarNif(elemento.value);
			if (elemento.tipo.toLowerCase() == 'ccc'){
				if (elemento.value != '00000000000000000000')
					correcto = validarDC(elemento.value.substring(0,4),elemento.value.substring(4,8),elemento.value.substring(8,10),elemento.value.substring(10,20));			
				else
					correcto = false
			}			

						 }
		}
		if (! completo)
		{
			alert('El campo "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" es obligatorio');
			return false;
		}
		if (! longitudminima)
		{
			alert('El campo "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" ha de tener una Longitud mínima de ' + elemento.minlength + ' caracteres');
			return false;
		}
		if (! correcto){
			if (elemento.tipo.toLowerCase() == 'ccc'){
					alert('Los dígitos de"' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" son incorrectos, compruebelos de nuevo ');				
				return false;				
			}
			
			if (elemento.tipo.toLowerCase() == 'date'){
					alert('El Formato de "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" ha de ser dd/mm/aaaa');				
				return false;				
			}
			
			if (elemento.tipo.toLowerCase() == 'sexo'){
					alert('El Formato de "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" ha de ser H (Hombre) o M (Mujer)');				
				return false;				
			}			
			
			alert('El Formato del campo "' + elemento.etiqueta.substring(elemento.etiqueta.charAt(0) == '*' ? 1:0, elemento.etiqueta.length) + '" es Incorrecto');
			return false;
		}
	}
	return true;
}