var prohibitedChars="'\""; // characters prohibited to ensure security
var prohibitedCharstoInform="',\""; // characters not allowed to print out them to inform the user
var longMaxLogin=40
var longMinLogin=4
var longMaxPassword=20
var longMinPassword=5

var a, mes, dia, anyo, febrero;
    
function anyoBisiesto(anyo)
{
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;

        /*
        * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
        * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
        */
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
    
    /**
    * funcion principal de validacion de la fecha
    * argumento fecha > cadena de texto de la fecha introducida por el usuario
    */
    function fechaCorrecta( )
    {
       /**
       * obtenemos la fecha introducida y la separamos en dia, mes y año
       */
       a=document.forms[0].fecha.value;
       dia=a.split("/")[0];
       mes=a.split("/")[1];
       anyo=a.split("/")[2];

    
       if ((dia==null)||(mes==null)||(anyo==null)){
       	alert ("La fecha introducida es incorrecta. Por favor introduzca una en formato dd/mm/aaaa");
        document.forms[0].fecha.focus();
        document.forms[0].fecha.select();       	
        return false;
	}
       
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           alert("El mes introducido no es válido. Por favor, introduzca un mes correcto formato dd-mm-aaaa");
           document.forms[0].fecha.focus();
           document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente 
       * al año introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           alert("El día introducido no es valido. Por favor, introduzca un día correcto formato dd-mm-aaaa");
           document.forms[0].fecha.focus();
           document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           alert("El día introducido no es válido. Por favor, introduzca un día correcto formato dd-mm-aaaa");
           document.forms[0].fecha.focus();
           document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           alert("El día introducido no es válido. Por favor, introduzca un dia correcto formato dd-mm-aaaa");
           document.forms[0].fecha.focus();
           document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes año introducido es menor que 1990 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1990) || (anyo>2100))
       {
           alert("El año introducido no es valido. Por favor, introduzca un año entre 1990 y 2100");
           document.forms[0].fecha.focus();
           document.forms[0].fecha.select();
	   return false;
       } 
      else
	  return true;
    }    

    /**
    * funcion principal de validacion de la fecha
    * argumento fecha > cadena de texto de la fecha introducida por el usuario
    */
    function fechaEsCorrecta(fecha)
    {
       /**
       * obtenemos la fecha introducida y la separamos en dia, mes y año
       */
       a=fecha
       dia=a.split("/")[0];
       mes=a.split("/")[1];
       anyo=a.split("/")[2];

    
       if ((dia==null)||(mes==null)||(anyo==null)){
       	alert ("La fecha introducida es incorrecta. Por favor introduzca una en formato dd/mm/aaaa");
        return false;
	}
       
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           alert("El mes introducido no es válido. Por favor, introduzca un mes correcto formato dd/mm/aaaa");
           return false;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente 
       * al año introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           alert("El día introducido no es valido. Por favor, introduzca un día correcto formato dd/mm/aaaa");
           return false;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           alert("El día introducido no es válido. Por favor, introduzca un día correcto formato dd/mm/aaaa");
           return false;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           alert("El día introducido no es válido. Por favor, introduzca un dia correcto formato dd/mm/aaaa");
           return false;
       }
       /**
       * si el mes año introducido es menor que 1990 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1990) || (anyo>2100))
       {
           alert("El año introducido no es valido. Por favor, introduzca un año entre 1990 y 2100");
	   return false;
       } 
      else
	  return true;
    }    

/*****
 *
 * Checks if the email is correct
 * 
 * @param: src: the string to be checked
 * @return: true or false
 *
 *****/
 
function emailOK(src) {

   var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
   return regex.test(src);
}	

/*****
 *
 * to check if the telephone number contains only numbers or +
 * 
 * @param: the string of the telephone number
 * @return: true or false depending on the result
 *
 *****/

function  telNumOK(t) {		

	var valsOK="+0123456789";		
	var thisChar;
	var counter=0;
	for (var i=0; i<t.length; i++){
		thisChar=t.substring(i, i+1);
		if (valsOK.indexOf(thisChar)!=-1) counter++;
		}
		if (counter==t.length) return true;	else	return false;	
}

function  formatDecimal(t) {		
	
	var strTemp;
	strTemp="";
	for (var i=0; i<t.length; i++){
		if (t.substring(i, i+1)==',') strTemp=strTemp+'.';
			else strTemp=strTemp+t.substring(i, i+1);
		}
//		alert (strTemp);
		return strTemp;	
}

function  formatApostrofe(t) {		
	
	var strTemp;
	strTemp="";
	for (var i=0; i<t.length; i++){
		if (t.substring(i, i+1)=="'") strTemp=strTemp+'’';
			else strTemp=strTemp+t.substring(i, i+1);
		}
//		alert (strTemp);
		return strTemp;	
}

/*****
 *
 * returns if the passed string is a valid number
 *
 * @param t: string to be checked
 * @return: true or false depending on the result
 *
 *****/

function  numOK2(t) {		

var valsOK="0123456789";		
var thisChar;
var counter=0;
for (var i=0; i<t.length; i++) 
	{
	thisChar=t.substring(i, i+1);
	if (valsOK.indexOf(thisChar)!=-1) counter++;
	}
	if (counter==t.length) return true;	else	return false;	
}

function  isRealOk(t) {		

   var regex = /^-?\d+(\,\d+)?$/
   return regex.test(t);
   
}

function  numOK(t) {		

   var regex = /^-?\d+?$/
   return regex.test(t);
   
}

/*****
 *
 * to check if the passed string contains 'illegal' characters defined as global variable
 *
 * @param t: string to be checked
 * @return: true or false depending on the result
 *
 *****/

function  charsOK(t) {		

var valWrong=prohibitedChars;		
var thisChar;
var counter=0;
for (var i=0; i<t.length; i++){
	thisChar=t.substring(i, i+1);
	if (valWrong.indexOf(thisChar)!=-1) counter++;
	}
	if (counter>0) return false;	else	return true;	
}

/*****
 *
 * Checks if the passed value is empty or not
 *
 * @param dt: string to be checked
 * @return: true or false depending on the result
 *
 *****/

function isEmpty (dt) {
for (var i=0; i<dt.length; i++){
	if (dt.substring(i, i+1)!=" ")	return false;
	}
return true;
}

function validarCategoria() {

if (isEmpty(document.forms[0].titulo_es.value)) {
           alert("El campo de título en Español no puede estar vacío");
           document.forms[0].titulo_es.focus();
           document.forms[0].titulo_es.select();
	   return false;
	}

document.forms[0].titulo_es.value=formatApostrofe(document.forms[0].titulo_es.value);

if (charsOK(document.forms[0].titulo_es.value)==false)
	{
        alert("El campo de título en Español contiene caracteres no válidos: "+prohibitedCharstoInform);
        document.forms[0].titulo_es.focus();
        document.forms[0].titulo_es.select();
	return false;
	}
  
  //
  if (isEmpty(document.forms[0].titulo_pt.value)) {
           alert("El campo de título en Portugués no puede estar vacío");
           document.forms[0].titulo_pt.focus();
           document.forms[0].titulo_pt.select();
	   return false;
	}

document.forms[0].titulo_pt.value=formatApostrofe(document.forms[0].titulo_pt.value);

if (charsOK(document.forms[0].titulo_pt.value)==false)
	{
        alert("El campo de título en Portugués contiene caracteres no válidos: "+prohibitedCharstoInform);
        document.forms[0].titulo_pt.focus();
        document.forms[0].titulo_pt.select();
	return false;
	}
  //

  if (isEmpty(document.forms[0].titulo_fr.value)) {
           alert("El campo de título en Francés no puede estar vacío");
           document.forms[0].titulo_fr.focus();
           document.forms[0].titulo_fr.select();
	   return false;
	}

document.forms[0].titulo_fr.value=formatApostrofe(document.forms[0].titulo_fr.value);

if (charsOK(document.forms[0].titulo_fr.value)==false)
	{
        alert("El campo de título en Portugués Francés caracteres no válidos: "+prohibitedCharstoInform);
        document.forms[0].titulo_fr.focus();
        document.forms[0].titulo_fr.select();
	return false;
	}  
  
return true;
} 

function procesarHTML (cadena)
{
	
var kdnaLink=" class=enlace target=_blank ";
var kdnaEstilo="span ";
var kdnaFinEstilo="span><br";
var nuevaCadena="";

if ( (cadena.substring(0, ((cadena.length)-1))=='<p>&nbsp;</p>')|| (cadena.substring(0, ((cadena.length)-1))=='<p></p>') ||
	 (cadena.substring(0, ((cadena.length)-1))=='<P>&nbsp;</P>')|| (cadena.substring(0, ((cadena.length)-1))=='<P></P>') ) {nuevaCadena="";}
else {	
	for (var i=0; i<cadena.length; i++){
		if (cadena.substring(i, i+1)=='"') {nuevaCadena+="\"";}
			else if (cadena.substring(i, i+1)=="'") {nuevaCadena+="’";}
			//cambiacomillas...
			else {		
			if (i>0) {
				switch ( cadena.substring (i-1, i) + cadena.substring(i, i+1) )
					{
					case '<A' || '<a': nuevaCadena+=cadena.substring(i, i+1); if (cadena.substring(i+1, i+kdnaLink.length+1) != kdnaLink) {nuevaCadena=nuevaCadena+kdnaLink;}
									break;
					default : nuevaCadena+=cadena.substring(i, i+1);
				}
			 } else {nuevaCadena+=cadena.substring(i, i+1);}
		}
	}/* for */
}

return nuevaCadena;
}

function validarUsuario() {

if (isEmpty(document.forms[0].empresa.value)) {
           alert("El campo del nombre de la empresa no puede estar vacío");
           document.forms[0].empresa.focus();
           document.forms[0].empresa.select();
	   return false;
	}

  document.forms[0].empresa.value=formatApostrofe(document.forms[0].empresa.value);
  
if (charsOK(document.forms[0].empresa.value)==false) {
           alert("El campo del nombre de la empresa contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].empresa.focus();
           document.forms[0].empresa.select();
	   return false;
	}

if (isEmpty(document.forms[0].ncliente.value)) {
           alert("El campo de número de cliente no puede estar vacío");
           document.forms[0].ncliente.focus();
           document.forms[0].ncliente.select();
	   return false;
	}

  document.forms[0].ncliente.value=formatApostrofe(document.forms[0].ncliente.value);
  
if (charsOK(document.forms[0].ncliente.value)==false) {
           alert("El campo de número de cliente contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].ncliente.focus();
           document.forms[0].ncliente.select();
	   return false;
	}

  if (isEmpty(document.forms[0].nif.value)) {
           alert("El campo de NIF no puede estar vacío");
           document.forms[0].nif.focus();
           document.forms[0].nif.select();
	   return false;
	}

  document.forms[0].nif.value=formatApostrofe(document.forms[0].nif.value);
  
if (charsOK(document.forms[0].nif.value)==false) {
           alert("El campo de NIF contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].nif.focus();
           document.forms[0].nif.select();
	   return false;
	}

if (isEmpty(document.forms[0].descuento.value)) {
        alert ("Es necesario introducir un valor para el descuento del cliente");
				document.forms[0].descuento.select();
				document.forms[0].descuento.focus();
        return false;											
				}
if (isRealOk(document.forms[0].descuento.value)==false) {
        alert ("El descuento del cliente no es un valor decimal válido (como separador decimal use la coma, ejemplo 2500,52)");
				document.forms[0].descuento.select();											
				document.forms[0].descuento.focus();
				return false;											
				}    
  
if (isEmpty(document.forms[0].nombre.value)) {
           alert("El campo del nombre de la persona de contacto no puede estar vacío");
           document.forms[0].nombre.focus();
           document.forms[0].nombre.select();
	   return false;
	}

document.forms[0].nombre.value=formatApostrofe(document.forms[0].nombre.value);
  
if (charsOK(document.forms[0].nombre.value)==false) {
           alert("El campo del nombre de la persona de contacto contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].nombre.focus();
           document.forms[0].nombre.select();
	   return false;
	}

if (isEmpty(document.forms[0].email.value)) {
           alert("El campo de E-Mail no puede estar vacío");
           document.forms[0].email.focus();
           document.forms[0].email.select();
	   return false;
	}

if (emailOK(document.forms[0].email.value)==false){
           alert("La dirección de E-Mail introducida no es correcta");
           document.forms[0].email.focus();
           document.forms[0].email.select();
	   return false;
	 }
   
  document.forms[0].email.value=formatApostrofe(document.forms[0].email.value);
  
if (charsOK(document.forms[0].email.value)==false) {
           alert("El campo de E-Mail de la empresa contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].email.focus();
           document.forms[0].email.select();
	   return false;
	}

if (isEmpty(document.forms[0].telefono.value)) {
           alert("El campo del teléfono no puede estar vacío");
           document.forms[0].telefono.focus();
           document.forms[0].telefono.select();
	   return false;
	}

if (telNumOK(document.forms[0].telefono.value)==false){
           alert("El número de teléfono introducido no es correcto. Sólo puede contener números y '+'");
           document.forms[0].telefono.focus();
           document.forms[0].telefono.select();
	   return false;
	 }
/*
if (isEmpty(document.forms[0].fax.value)) {
           alert("El campo del fax no puede estar vacío");
           document.forms[0].fax.focus();
           document.forms[0].fax.select();
	   return false;
	}
*/
if (telNumOK(document.forms[0].fax.value)==false){
           alert("El número de fax introducido no es correcto. Sólo puede contener números y '+'");
           document.forms[0].fax.focus();
           document.forms[0].fax.select();
	   return false;
	 }   
   
if (isEmpty(document.forms[0].direccion.value)) {
           alert("El campo Dirección no puede estar vacío");
           document.forms[0].direccion.focus();
           document.forms[0].direccion.select();
	   return false;
	}

  document.forms[0].direccion.value=formatApostrofe(document.forms[0].direccion.value);
  
if (charsOK(document.forms[0].direccion.value)==false) {
           alert("El campo Dirección contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].direccion.focus();
           document.forms[0].direccion.select();
	   return false;
	}

if (isEmpty(document.forms[0].ciudad.value)) {
           alert("El campo Ciudad no puede estar vacío");
           document.forms[0].ciudad.focus();
           document.forms[0].ciudad.select();
	   return false;
	}

  document.forms[0].ciudad.value=formatApostrofe(document.forms[0].ciudad.value);  
  
if (charsOK(document.forms[0].ciudad.value)==false) {
           alert("El campo Ciudad contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].ciudad.focus();
           document.forms[0].ciudad.select();
	   return false;
	}	
  
if (isEmpty(document.forms[0].provincia.value)) {
           alert("El campo Provincia no puede estar vacío");
           document.forms[0].provincia.focus();
           document.forms[0].provincia.select();
	   return false;
	}

  document.forms[0].provincia.value=formatApostrofe(document.forms[0].provincia.value);
  
if (charsOK(document.forms[0].provincia.value)==false) {
           alert("El campo Provincia contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].provincia.focus();
           document.forms[0].provincia.select();
	   return false;
	}	  

if (isEmpty(document.forms[0].cp.value)) {
           alert("El campo Código Postal no puede estar vacío");
           document.forms[0].cp.focus();
           document.forms[0].cp.select();
	   return false;
	}

  document.forms[0].cp.value=formatApostrofe(document.forms[0].cp.value);
  
if (charsOK(document.forms[0].cp.value)==false) {
           alert("El campo Código Postal contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].cp.focus();
           document.forms[0].cp.select();
	   return false;
	}
  
if (isEmpty(document.forms[0].pais.value)) {
           alert("El campo País no puede estar vacío");
           document.forms[0].pais.focus();
           document.forms[0].pais.select();
	   return false;
	}

  document.forms[0].pais.value=formatApostrofe(document.forms[0].pais.value);
  
if (charsOK(document.forms[0].pais.value)==false) {
           alert("El campo País contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].pais.focus();
           document.forms[0].pais.select();
	   return false;
	}  

if (isEmpty(document.forms[0].login.value)) {
           alert("El campo de usuario no puede estar vacío");
           document.forms[0].login.focus();
           document.forms[0].login.select();
	   return false;
	}

  document.forms[0].login.value=formatApostrofe(document.forms[0].login.value);  
  
if (charsOK(document.forms[0].login.value)==false) {
           alert("El campo de usuario contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].login.focus();
           document.forms[0].login.select();
	   return false;
	}

if (isEmpty(document.forms[0].password.value)) {
           alert("El campo de la contraseña no puede estar vacío");
           document.forms[0].password.focus();
           document.forms[0].password.select();
	   return false;
	}

  document.forms[0].password.value=formatApostrofe(document.forms[0].password.value);
  
if (charsOK(document.forms[0].password.value)==false) {
           alert("El campo de contraseña contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].password.focus();
           document.forms[0].password.select();
	   return false;
	}
	
if ((document.forms[0].login.value.length>longMaxLogin)||(document.forms[0].login.value.length<longMinLogin)) {
           alert("La longitud mínima del usuario debe ser "+longMinLogin+" y la máxima "+longMaxLogin);
           document.forms[0].login.focus();
           document.forms[0].login.select();
	   return false;
	}

if (document.forms[0].password.value!="" && (document.forms[0].password.value.length>longMaxPassword || document.forms[0].password.value.length<longMinPassword ) ) {
           alert("La longitud mínima de la password Web debe ser "+longMinPassword+" y la máxima "+longMaxPassword);
           document.forms[0].password2.value="";
           document.forms[0].password.focus();
           document.forms[0].password.select();
	   return false;
	}

if (document.forms[0].password.value!="" && (document.forms[0].password.value!=document.forms[0].password2.value ) ) {
           alert("Las contraseñas introducidas no coinciden");
           document.forms[0].password2.value="";
           document.forms[0].password.focus();
           document.forms[0].password.select();
	   return false;
	}

  document.forms[0].observaciones.value=formatApostrofe(document.forms[0].observaciones.value);
  
if (charsOK(document.forms[0].observaciones.value)==false) {
           alert("El campo de observaciones contiene caracteres no permitidos "+prohibitedCharstoInform);
           document.forms[0].observaciones.focus();
           document.forms[0].observaciones.select();
	   return false;
	}

return true;
} 

function entrarFila(src,color_entrada) {
src.bgColor=color_entrada;
src.style.cursor="hand";
}

function salirFila(src,color_default) {
src.bgColor=color_default;
src.style.cursor="default";
}

function entrarCelda(n,color_entrada) {

document.getElementById("mini"+n).bgColor='#F7D5D6'; //D3E2E9
document.getElementById("mini"+n).style.cursor="hand";
document.getElementById("mini"+n).style.cursor="pointer";
document.getElementById("mini"+n).style.border = 'solid #FE6F6F 1px'; //A0BDEB

document.getElementById("fila"+n).bgColor=color_entrada;
document.getElementById("fila"+n).style.cursor="hand";
document.getElementById("fila"+n).style.cursor="pointer";

}

function salirCelda(n,color_default) {
document.getElementById("mini"+n).bgColor='#ffffff';
document.getElementById("mini"+n).style.cursor="default";
document.getElementById("mini"+n).style.border = 'solid #ffffff 1px';

document.getElementById("fila"+n).bgColor=color_default;
document.getElementById("fila"+n).style.cursor="default";
}

function entrarCeldaSinTabla(n,color_entrada) {

document.getElementById("mini"+n).bgColor='#F7D5D6'; //D3E2E9
document.getElementById("mini"+n).style.cursor="hand";
document.getElementById("mini"+n).style.cursor="pointer";
document.getElementById("mini"+n).style.border = 'solid #FE6F6F 1px'; //A0BDEB
}

function salirCeldaSinTabla(n,color_default) {
document.getElementById("mini"+n).bgColor='#ffffff';
document.getElementById("mini"+n).style.cursor="default";
document.getElementById("mini"+n).style.border = 'solid #ffffff 1px';
}