//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// 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 ((Number(d) < 1) || (Number(d) > 31))
		return false;

	if ((Number(m) < 1) || (Number(m) > 12))
		return false;

	if ((Number(a) < 1) || (Number(a) > 9999))
		return false;

	if (((Number(m) == 4) || (Number(m) == 6) || (Number(m) == 9) || (Number(m) == 11)) && (Number(d) > 30)) // Meses de 30 dias
		return false;

	if ((Number(m) == 2) && (Number(a)%4 != 0) && (Number(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 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 isFloat(s)
{
	var i;
	var c;

	if (s.length == 0)
		return false;

	 for (i = 0; i<s.length; i++){
         	c = s.charAt(i);
		 //alert(c=='.');
		 //alert(c==',');
                 if (!isDigit(c) && c !='.' && c !=',')
			return false;
	 }

	 return true;
}
//-----------------------------------------------------------------------
function isPositive(n)
{
	if (isNaN(n))
		return(false);

	return(n > 0);
}
//-----------------------------------------------------------------------
function isNegative(n)
{
	if (isNaN(n))
		return(false);

	return(n < 0);
}
//-----------------------------------------------------------------------
function isZero(n)
{
	if (isNaN(n))
		return(false);

	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 comprobarfecha(strFecha){
//Comprueba si el formato de una fecha es correcto.
//No controla los meses que tengan menos de 31 días
		if (strFecha.indexOf('/') == -1)
			return false;
		Dia = strFecha.substring(0, strFecha.indexOf('/'));
		Mes = strFecha.substring(strFecha.indexOf('/')+1, strFecha.lastIndexOf('/'));
		Ano = strFecha.substring(strFecha.lastIndexOf('/')+1, strFecha.length);
		if (isNaN(Ano) || isNaN(Dia) || isNaN(Mes))
			return false;
		if ((Dia < 1) || (Dia > 31))
			return false;
		if ((Mes < 1) || (Mes > 12))
			return false;
		if ((Ano.length > 4) || (Ano.length < 4))
			return false;

		return true;
}
//-----------------------------------------------------------------------
function comprobarCantidad(n)
{
return (!isNaN(n));
}
/*************************************************************************************************/
//Función limita a maxlen el total de caracteres incluidos en objetotext (textarea,text..),
//al mismo tiempo que en el control de salida (inputsalida) indicamos el número actual de caracterés que se incluyen
//en el control
function validarLenText(objetotext,maxlen,inputsalida){
var longitud;

longitud=objetotext.value.length;
if (longitud > maxlen){
	longitud=maxlen;
	objetotext.value=objetotext.value.substr(0,maxlen);
	alert('La longitud máxima permitida es '+maxlen+',el resto de caracteres serán ignorados');

}
inputsalida.value=maxlen-longitud;
}

/*************************************************************************************************/
//Función limita a maxlen el total de caracteres incluidos en objetotext (textarea,text..),
//al mismo tiempo que en el control de salida (inputsalida) indicamos el número actual de caracterés que se incluyen
//en el control
function validarLenTextArea(objetotext,maxlen){
var longitud;

longitud=objetotext.value.length;
if (longitud > maxlen){
	longitud=maxlen;
	objetotext.value=objetotext.value.substr(0,maxlen);
	alert('La longitud máxima permitida es '+maxlen+', el resto de caracteres serán ignorados');

}
}

function TrimIzquierda(cadena)
{
	var resultado = "";
	var i = len = 0;

	if (cadena+"" == "undefined" || cadena == null)
	return null;

	cadena += "";

	if (cadena.length == 0)
		resultado = "";
	else
	{
		len = cadena.length;

	 while ((i <= len) && (cadena.charAt(i) == " "))
		i++;

		resultado = cadena.substring(i, len);
	}

	return resultado;
}

function TrimDerecha(cadena)
{
	var resultado = "";
	var i = 0;

	if (cadena+"" == "undefined" || cadena == null)
		return null;

	cadena += "";

	if (cadena.length == 0)
		resultado = "";
	else
	{
	i = cadena.length - 1;
	while ((i >= 0) && (cadena.charAt(i) == " "))
			i--;

	 resultado = cadena.substring(0, i + 1);
	}

	return resultado;
}

function Trim(cadena)
{
	cadena = TrimIzquierda(cadena);
	cadena = TrimDerecha(cadena);

	return cadena;
}

function Ltrim(str)
{

	var whitespace=new String(' \t\n\r');
	var s=new String(str);

	if (whitespace.indexOf(s.charAt(0)) != -1)
	{

		var j=0, i=s.length;

		while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
			j++;

		s=s.substring(j, i);
	}
	return s;
}

//------------------------------------------------------------------

function Rtrim(str)
{
	var whitespace=new String(' \t\n\r');
	var s=new String(str);

	if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
	{

		var j=0, i = s.length-1;

		while (i > j && whitespace.indexOf(s.charAt(i)) != -1)

		i--;
		s = s.substring(j, i+1);

}

return s;

}

//------------------------------------------------------------------

function TrimAvanzado(str)
{
	return rtrim(ltrim(str));
}

//------------------------------------------------------------------

function Normaliza(str)
{

	var s = trim(str);

	while (s.indexOf(' ') != -1)
		s = s.replace(/ /i, ' ');

	return s;
}

//------------------------------------------------------------------

function ValidarFormulario(formulario,busqueda)
{
	for (i = 0; i < formulario.length; i++)
	{
		var elemento = formulario.elements[i];
		var completo, correcto, longitudminima, obligatorio;

	    //alert(formulario.elements[i].name + ': ' + formulario.elements[i].value + ' Etiqueta: ' + elemento.etiqueta + ' Tipo: ' + elemento.tipo);
           // alert(elemento.name +'type: ' + elemento.type + '--- select: ' + elemento.type.toString().indexOf('select') + '; value: ' + Trim(elemento.value).length + ';texto:' + elemento.options[elemento.selectedIndex].text );
		completo = true;
		correcto = true;
		longitudminima = true;
        obligatorio = false;

		if (elemento.etiqueta != null && !busqueda && elemento.etiqueta.charAt(0) == '*')
        {
         	obligatorio = true;

			if ( ((elemento.type == 'file' || elemento.type == 'text' || elemento.type == 'textarea'
            || elemento.type == 'password' || elemento.type.toString().indexOf('select') >= 0 )
            && Trim(elemento.value).length <= 0 || (elemento.type.toString().indexOf('select') >= 0 && (elemento.value == 0 || elemento.value == ''))))
				completo = false;
        }

		if (completo && 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
      	    		{
                       if(obligatorio)
        	               	alert('El Formato de Teléfono del campo "' + elemento.etiqueta.substring(1, elemento.etiqueta.length) + '" es incorrecto');
                       else
		                   	alert('El Formato de Teléfono del campo "' + elemento.etiqueta + '" es incorrecto');
						return false;
            		}
        		}
        		if (elemento.tipo.toLowerCase() == 'float') correcto = isFloat(elemento.value);
        		if (elemento.tipo.toLowerCase() == 'email') correcto = validarEmail(elemento.value);
        		if (elemento.tipo.toLowerCase() == 'nif') correcto = validarNif(elemento.value);
        	}
       }

	//alert(elemento.etiqueta);
		if (!completo)
		{
         if(obligatorio)
			alert('El campo "' + elemento.etiqueta.substring(1, elemento.etiqueta.length) + '" es obligatorio');
         else
        	 alert('El campo "' + elemento.etiqueta + '" es obligatorio');

			return false;
		}

		if (! longitudminima)
		{
         if(obligatorio)
			alert('El campo "' + elemento.etiqueta.substring(1, elemento.etiqueta.length) + '" ha de tener una longitud mínima de ' + elemento.minlength + ' caracteres');
         else
        	alert('El campo "' + elemento.etiqueta + '" ha de tener una longitud mínima de ' + elemento.minlength + ' caracteres');

			return false;
		}

		if (!correcto)
		{
         if(obligatorio)
			alert('El Formato del campo "' + elemento.etiqueta.substring(1, elemento.etiqueta.length) + '" es incorrecto');
         else
	        alert('El Formato del campo "' + elemento.etiqueta + '" es incorrecto');

			return false;
		}

	}

	return true;
}
