//*************************************************************
//* Crea una fecha en javascript a partir de un texto en 
//* formato (dd/mm/aaaa)
//*************************************************************
function creaFecha(value) {
     
      var fechaIn = value;
      var dia = fechaIn.substr(0, fechaIn.indexOf('/'));
      fechaIn = fechaIn.substr(fechaIn.indexOf('/')+1);
      var mes = fechaIn.substr(0, fechaIn.indexOf('/'));
      var anio = fechaIn.substr(fechaIn.indexOf('/')+1);
      var fechaOut = new Date(anio, mes-1, dia);
      return fechaOut;
}

//*************************************************************
//* Calcula la diferencia entre dos fechas
//*************************************************************
function dateDiff(fecha1, fecha2) {
   var diff = fecha1 - fecha2;
   var days = Math.floor(diff/1000/60/60/24);
   var value = days/365;
   return (isNaN(value))?0:value;
}

//*************************************************************
//* Comprueba que la fecha de inicio es menor que la fecha de fin
//*************************************************************
function validaRangoFechas(fechaInicio, fechaFin) {

  if (fechaInicio == '' || fechaFin == '') return true;

  var fini = creaFecha(fechaInicio);
  var ffin = creaFecha(fechaFin);
  if (dateDiff(ffin, fini) < 0) {
   return false;
  }
  return true;
}
//*************************************************************
//* Validar una fecha con formato (DD/MM/AAAA)
//*************************************************************
function esFechaValida(obj)
{
   var sDiaAux;
   var sMesAux;
   var sDia;
   var sMes;
   var sAnno;
   var iIniMes;
   var iFinMes;
   var iIniAnio;
   var iFinAnio;
   var iLongitud;
   var iPos;
   var iCar;
   var fecha = obj.value;
   
   // Si la fecha no se ha completado
   if (fecha.length == 0)
      return true;

  // Inicializar variables

   iIniMes = 3;       // El mes comenzará en carácter 3
   iFinMes = 5;       // El mes finaliza antes del carácter 5
   iLongitud = 10;    // La longitud de la fecha será de 10 caracteres


   // Comprobar que todos los caracteres sean numéricos o '/'
   for (iPos = 0; iPos <= fecha.length-1; iPos++)
   {
      iCar = fecha.charAt(iPos);
      if ((iCar < '0' || iCar > '9') && (iCar !='/')) 
         return false;	
   }

   // Obtener el día
   sDiaAux = fecha.substring (0,2);

   // El primer carácter del día no puede ser '/'
   if (sDiaAux.charAt(0) == '/')
      return false;

   // Si el segundo carácter del día es '/'
   if (sDiaAux.charAt(1) == '/')
   {
      // El día es menor de 10 y se le añade '0'
      sDia = '0' + sDiaAux.charAt(0);
      iIniMes = iIniMes - 1;
      iFinMes = iFinMes - 1;
      iLongitud = iLongitud - 1;
   }
   else
   {
      // El día es de dos caracteres

      // Si el tercer caracter no es '/'
      if (fecha.charAt(2) != '/')
         return (false);

      sDia = sDiaAux;
   }

   // Si el día no es correcto
   if (sDia < '01' || sDia > '31')
      return (false);


   // Inicializar las posiciones de inicio y fin del año
   iIniAnio = iIniMes + 3;
   iFinAnio = iFinMes + 5;

   // Obtener el mes
   sMesAux = fecha.substring (iIniMes,iFinMes);

   // El primer carácter del mes no puede ser '/'
   if (sMesAux.charAt(0) == '/')
      return false;

   // Si el segundo carácter del mes es '/'
   if (sMesAux.charAt(1) == '/')
   {
      // El mes es menor de 10 y se le añade '0'
      sMes = '0' + sMesAux.charAt(0);
      iIniAnio = iIniAnio - 1;
      iFinAnio = iFinAnio - 1;
      iLongitud = iLongitud - 1;
   }
   else
   {
      // El mes es de dos caracteres
      sMes = sMesAux;
   }

   // Si el mes no es correcto
   if (sMes < '01' || sMes > '12')
      return (false);

   // Si la fecha no se ha completado
   if (fecha.length > iLongitud)
      return(false);

   // Obtener el año
   sAnno = fecha.substring (iIniAnio,iFinAnio);

   // Ningún carácter del año puede ser '/'
   if ((sAnno.charAt(0) == '/') || (sAnno.charAt(1) == '/') || (sAnno.charAt(2) == '/') || (sAnno.charAt(3) == '/'))
      return false;

   // Si el año no es de 4 dígitos
   if (sAnno.length < 4)
	 return (false);

   // Validar si es un mes de 30 días
   if (((sMes == '04') || (sMes == '06') || (sMes == '09') || (sMes == '11')) && (sDia > '30'))
   {
      return (false);
   }
   else
   {
      // Si es febrero
      if ((sMes == '02'))
      {
         // El día no puede ser mayor que 29
         if (sDia > '29')
         {
            return (false);
         }
         else
         {
            // Si el día es 29
            if (sDia == '29')
            {
               // Debe ser un año bisiesto
               // Son bisiestos los divibles entre 4 pero no entre 100, pero sí entre 400

               resto = sAnno % 4;
               if (resto != 0)
               {
                  return (false);
               }
               else
               {
                  resto = sAnno % 100;
                  if (resto == 0)
                  {
                     resto = sAnno % 400;
                     if (resto != 0)
                     {
                        return (false);
                     }
                  }
               }
            }
         }
      } 
   }
   if (sAnno < '1900' | sAnno > '2999')
   {
    return (false);

   } 
   // La fecha es correcta
   return true;
}

// ------------------------------------------
// Popups Management
// ------------------------------------------
function popup(page, args) {
	var width = 0;
	var height = 0;
	var scrollbars = 0;
	var name = (page.split('.'))[0];
	var url	 = "/popups/" + page;
	var hideAllWindows = false;

	name="popup";
	
	switch (page) 
	{
		case "FileUpload.aspx":
			width = 354;
			height = 130;
			scrollbars = 0;
			break;
		case "SendToAFriend.aspx":
			name="sendtoafriend";
			width = 450;
			height = 350;
			scrollbars = 0;
			break;
		default:
			width = 600;
			height = 300;
			scrollbars = 1;
			url	 = page;
			break;
	}

	var left = (window.screen.width - width) / 2;
	var top  = (window.screen.height - height) / 2;
	if (args != undefined) url += args;
	
	// open blank window with same name	in order to close previous opened window
	if (hideAllWindows) {
		window.focus();
		var w = window.open('blank.html', name, 'top=3000,left=3000');
		w.close();
	}
	w = window.open(url, name, 'width=' + width + ',height=' + height + ',top=' + top + ',left=' + left + ',scrollbars=' + scrollbars);
	w.focus();
}

// --------------------------------------------------
// Set focus on first incorrect field and show an alert
// --------------------------------------------------
function showValidatorMessage(field, type, args) {
	var msg = '';
	if (field != '') window.document.forms[0][field].focus();
	switch(type)
	{
		case 1:
			msg = 'Por favor, rellene los campos requeridos.';
			break;
		case 2:
			msg = 'Las claves introducidas no coinciden.';
			break;
		case 3:
			msg = 'La Fecha introducida tiene un formato incorrecto\n(dd/mm/aaaa).';
			break;
		case 4:
			msg = 'El Email introducido tiene un formato incorrecto.';
			break;
		case 5:
			msg = 'La Fecha de Caducidad supera a la Fecha de Publicacion en el maximo permitido (' + args + " dias).";
			break;
		case 6:
			msg = 'La Fecha introducida no debe ser anterior a la fecha actual.';
			break;
		case 7:
			msg = 'La Fecha de Caducidad debe ser mayor que la Fecha de Publicacion.';
			break;
		case 8:
			msg = 'Los e-mails introducidos no coinciden.';
			break;
		case 9:
			msg = 'Ha excedido el número maximo de elementos.';
			break;
		case 10:
			msg = 'Por favor, introduzca el Email de la solicitud.';
			break;
			
	}	
	alert(msg);
}

// -----------------------------------------------------
// Default button 
// -----------------------------------------------------
function KeyDownHandler(btn)
    {
        // process only the Enter key
        if (event.keyCode == 13)
        {
            // cancel the default submit
            event.returnValue=false;
            event.cancel = true;
            // submit the form by programmatically clicking the specified button
            window.document.forms[0][btn].click();
        }
    }

// ---------------------------------------------------
// DateTime server control validation
// ---------------------------------------------------
	function DateTimeValidatorEvaluateIsValid(val) {
		var value = ValidatorGetValue(val.controltovalidate);
		if (ValidatorTrim(value).length == 0)
			return true;        
		return DateTimeValidator_CheckValue(value);
	}

// ---------------------------------------------------
// CIF Validation. Ej.: A58818501
// ---------------------------------------------------
function checkCif(field){ 
	if (field.value == "") return;
	var validationResult = checkFiscalID(field);
	if (validationResult < 1 || validationResult > 2) {
			alert("El NIF/CIF introducido no es correcto. Ej.:A12345678");
			field.focus();			
			return false;
        }
    } 


//-----------------------------------------------------------
// Indica el tipo de CIF NIF pasado 
//-----------------------------------------------------------
// Returns:     0: No es ni NIF ni CIF
//		1: Es NIF
//		2: Es CIF
//		3: Es Tarjeta de residencia para extranjeros
//
//-----------------------------------------------------------
function checkFiscalID(field) {

   var numero;
   var result;
   var no_zeros;
   var i;

   numero = '0123456789';
   result = 0;
  // Se descartan los ceros de la izquierda
  for( i = 0; i < field.value.length; i++)
    if( field.value.charAt(i) != "0")
     break;
  no_zeros = field.value.substring(i);

  if( numero.indexOf( no_zeros.charAt(0)) != -1) 
  {
      // Entra aquí cuando el primer caracter es un número
      if (NIFLetter(no_zeros)) result=1;
  } 
  else {
  	if (no_zeros.charAt(0) == "X"){
		no_zeros2 = no_zeros.substring(1);
	 	if (NIFLetter(no_zeros2)) result=3;
        }
	else  if (ValidateCIF(no_zeros)) result=2;
  };
  return(result);
}

//------------------------------------------------------------
// Retorna la letra correspondiente a un dni de una persona 
// juridica u organismo                  
//------------------------------------------------------------

function ValidateCIF(cif1)
{
   var Retorno = true;
   var Entidad;
   var StEntidad;
   var Provincia;
   var NumeroSec;
   var CaracterControl, CaracterControlEntrada;
   var TablaControl = 'JABCDEFGHI';
   var otras = 'ABCDEFGHSPQX';
   var numero = '0123456789';
   var Suma = 0;
   var Suma1 = 0;
   var Suma2 = 0;
   var nAux = 0;
   var tmp = '';
   tmp = "" + cif1;
   Entidad = tmp.charAt(0);
   Entidad = Entidad.toUpperCase();
   if( otras.indexOf( Entidad) == -1) {
      return false;
   }
   Provincia = tmp.substring(1,3);
   NumeroSec = tmp.substring(3,8);
   NumeroSec2 = tmp.substring(1,8);
   CaracterControlEntrada = tmp.substring( 8);
   CaracterControlEntrada = CaracterControlEntrada.toUpperCase();
   if( (Entidad >= "A") && (Entidad <= "H") ) {
         StEntidad = "JURIDICA";
   }
   else if( (Entidad == "S") || (Entidad == "Q") ) {
      StEntidad="ORGANISMO";
   }
   else if( Entidad == "X") //  Extranjero residente
   {
      return NIFLetter( tmp);
   }
   if( Retorno != false) {           // Entidad correcta
      for (var i = 0; i < NumeroSec2.length; i++) {
         if( numero.indexOf( NumeroSec2.charAt( i)) == -1) {
            return false;
         }
      }
      if( parseInt( NumeroSec, 10) == 0)
      {
         Retorno = false;
      }
      else if( (StEntidad == "JURIDICA") || (StEntidad == "ORGANISMO"))
      {
         Suma2 = 0;
         Suma1 = parseInt( NumeroSec2.charAt( 1), 10) + parseInt( NumeroSec2.charAt( 3), 10) + parseInt( NumeroSec2.charAt( 5), 10 );
         for( var i = 0; i < 7; i += 2) {
            nAux = parseInt( NumeroSec2.charAt( i), 10) * 2;
            if (nAux > 9) {
               Suma2 = Suma2 + parseInt( nAux / 10, 10) + nAux % 10;
            } else {
               Suma2 = Suma2 + nAux;
            }
         }
         Suma = Suma1 + Suma2;
         i = 10 - Suma % 10;
         if( i > 9) { 
            i = 0;
         };
         if( StEntidad == "JURIDICA") {
            CaracterControl = i;
         } else {
            CaracterControl = TablaControl.charAt( i);
         }
         if (CaracterControl != CaracterControlEntrada) {
            	CaracterControl = TablaControl.charAt( i);
         	if (CaracterControl != CaracterControlEntrada) 
  	     	 	  Retorno = false;                         
         };
      }
   }

   return Retorno;
}

//----------------------------------------------------------------------------
// Comprueba la letra que corresponde al dni correspondiente
//----------------------------------------------------------------------------
function NIFLetter(nif1)
{
   var cadena  = "";
   var letras='TRWAGMYFPDXBNJZSQVHLCKET'
   var NumDNI=0;
   var Indice=0;
   var divis = 0
   
   nif1 = nif1.toUpperCase();
   
   if( nif1.charAt(0) != 'X')	// Españoles
      cadena += nif1
   else 			// Extranjeros
      cadena += nif1.substring(1,11);
   
   
   correcto = cadena.charAt(cadena.length-1);
   correcto = correcto.toUpperCase();
   
   NumDNI = parseInt(cadena,10);
   
   divis = isNaN(parseInt(NumDNI/23,10))?0:parseInt(NumDNI/23,10);

   Indice = NumDNI - (23 * divis);
   
   if( (Indice >= 0) && (Indice < 24) ) {
      if( letras.charAt(Indice) == correcto) 
         return true
      else
         return false
   } 
   else
      return false;
}

//----------------------------------------------------------------------------
// Cambia el cursor si se pasa el mouse por algún texto indicado
//----------------------------------------------------------------------------
function setCursor(element) {
    element.style.cursor="hand";
}
function restoreCursor(element) {
    element.style.cursor = "default";
}

