/*
Pagina: BEGeneral.js
Proposito: Librería de funciones generales.
Programador: Alejandro Jait, Leonardo Alvarez
Fecha: 04/01/2001

Moficaciones:
-------------
*/

//Funciones para manejo de mensajes
//---------------------------------                                             


//isEmail:
//Valida un mail
//--------------
function isEmail(email) {
    invalidChars = " ~\'^\`\"*+=\\|][(){}$&!#%/:,;";

    // Check for null
    if (email == "") {
        return true;
    }

    // Check for invalid characters as defined above
    for (i=0; i<invalidChars.length; i++) {
        badChar = invalidChars.charAt(i);
        if (email.indexOf(badChar,0) > -1) {
            return false;
        }
    }
    lengthOfEmail = email.length;
    if ((email.charAt(lengthOfEmail - 1) == ".") || (email.charAt(lengthOfEmail - 2) == ".")) {
        return false;
    }
    Pos = email.indexOf("@",1);
    if (email.charAt(Pos + 1) == ".") {
        return false;
    }
    while ((Pos < lengthOfEmail) && ( Pos != -1)) {
        Pos = email.indexOf(".",Pos);
        if (email.charAt(Pos + 1) == ".") {
            return false;
        }
        if (Pos != -1) {
            Pos++;
        }
    }

    // There must be at least one @ symbol
    atPos = email.indexOf("@",1);
    if (atPos == -1) {
        return false;
    }

    // But only ONE @ symbol
    if (email.indexOf("@",atPos+1) != -1) {
        return false;
    }

    // Also check for at least one period after the @ symbol
    periodPos = email.indexOf(".",atPos);
    if (periodPos == -1) {
        return false;
    }
    if (periodPos+3 > email.length) {
        return false;
    }
    return true;
}
//AgregarMensaje:
//--------------
//Agrega un mensaje con un enter (se usa para manejo de errores).
function AgregarMensaje(sMensaje, sNuevoMensaje)
{
   var sTexto = sMensaje;

   if (sNuevoMensaje != '')
   {
      sTexto = sTexto + '\n';
   }
   
   sTexto = sTexto + sNuevoMensaje;
 
   return sTexto;   
}

//Funciones de Fechas
//-------------------

//Clase Fecha:
//-----------

// Ejemplos de uso del constructor:
// var fecha = new Fecha('27/12/1973');
// var fecha = new Fecha('1/12/1973');
// var fecha = new Fecha('1/12/03');
// var fecha = new Fecha('actual');

// Propiedades:
//   fecha       -> objeto Date
//   fechaValida -> booleana

// Métodos:
//   leerNumero() -> devuelve 19731227
//   leerTexto()  -> devuelve '19731227'

function Fecha_leerNumero()
{
	var nResultado = 0;
   	
	if (this.fechaValida)
	{
	   nResultado = this.fecha.getFullYear() * 10000 + (this.fecha.getMonth() + 1) * 100 + this.fecha.getDate();
		// recordar que getMonth() devuelve el mes con un valor entre 0 y 11.
	}
	return(nResultado);
}

function Fecha_leerTexto()
{
	var sResultado = '';
   	
	if (this.fechaValida)
	{
		sResultado = (this.leerNumero()).toString();
	}
	return(sResultado);
}

function Fecha(sFecha)
{
	this.length = 4;
	this.fecha = new Date();
	this.fechaValida = false;
	this.leerNumero = Fecha_leerNumero;
	this.leerTexto = Fecha_leerTexto;

	if (sFecha == 'actual')
	{
		this.fechaValida = true;
	}
	else
	{
		var sItem = sFecha.split('/');

		if (sItem.length == 3)
		{
			var nDia, nMes, nAno;
   			
			nDia = parseInt(sItem[0], 10);
			nMes = parseInt(sItem[1], 10);
			nAno = parseInt(sItem[2], 10);
     			
			if (! (isNaN(nDia) || isNaN(nMes) || isNaN(nAno)))
			{
				if (nAno >=0 && nAno <= 99)
				{
					nAno += 2000;
				}
				if (nDia >= 1 && nDia <= 31 && nMes >= 1 && nMes <= 12 && (nAno >= 1900 && nAno <= 9999))
				{
					this.fecha = new Date(nAno, nMes - 1, nDia);	// el mes debe estar entre 0 y 11.
					this.fechaValida = true;
				}
			}
		}
	}
}

//EsFechaValida:
//-------------
//Valida que la fecha sea válida.
function EsFechaValida(sFecha)
{
   var sItem = sFecha.split('/');

   if (sItem.length == 2)
   {
   	var nDia, nMes;
      			
   	nDia = parseInt(sItem[0], 10);
   	nMes = parseInt(sItem[1], 10);
        			
   	if (! (isNaN(nDia) || isNaN(nMes)))
   	{
         if ((nDia == 31 && (nMes == 1 || nMes == 3 || nMes == 5 || nMes == 7 || nMes == 8 || nMes == 10 || nMes == 12)) || nDia < 31)
         {
   		   if ((nDia <= 28 && nMes == 2) || !(nMes == 2))  
   		   { 
   		      if (nDia >= 1 && nDia <= 31 && nMes >= 1 && nMes <= 12)
   		      {
   		         return true;
   		      }
   		   }
   	   }
   	}
   }
   
   return false;
}


//EsFechaValida2:
//-------------
//Valida que la fecha sea válida. Admite como valida dd/mm
function EsFechaValida2(sFecha)
{
   var sItem = sFecha.split('/');

   if (sFecha == 'dd/mm')
   {
      return true;
   }
   else
   {   
    

   if (sItem.length == 2)
   {
   	var nDia, nMes;
      			
   	nDia = parseInt(sItem[0], 10);
   	nMes = parseInt(sItem[1], 10);
        			
   	if (! (isNaN(nDia) || isNaN(nMes)))
   	{
         if ((nDia == 31 && (nMes == 1 || nMes == 3 || nMes == 5 || nMes == 7 || nMes == 8 || nMes == 10 || nMes == 12)) || nDia < 31)
         {
   		   if (nDia >= 1 && nDia <= 31 && nMes >= 1 && nMes <= 12)
   		   {
   		      return true;
   		   }
   	   }
   	}
   }
   }
   return false;
}


// Fin Clase Fecha
// ---------------


//Validarfecharango:
//-----------------
//Valida que la fecha de salida este dentro de los proximos xxx meses
function Validarfecharango(dFechaDesde, cuantosmeses)
{
   var aArrayDesde = dFechaDesde.split('/');
   var dDate = new Date();                   
 
   if (aArrayDesde[1] == dDate.getMonth() + 1)
   {                            
      if (aArrayDesde[0] < dDate.getDate())
      {                                              
         return false;
      }
   }
   else
   {   
      if (Math.abs(aArrayDesde[1]) < dDate.getMonth() + 1)
      {
         aArrayDesde[1] = Math.abs(aArrayDesde[1]) + 12;
      }
   }                                            
   if (Math.abs(aArrayDesde[1]) > Math.abs(dDate.getMonth() + cuantosmeses))
   {
      return false; 
   }
   return true;
}

//Validar2Fechas:
//--------------
//Valida que la FechaDesde sea Menor o Igual que la FechaHasta.
function Validar2Fechas(dFechaDesde, dFechaHasta)
{
   var nDesde;
   var nHasta;
   var iAnoDesde, iAnoHasta;
	var aArrayDesde = dFechaDesde.split('/');
	var aArrayHasta = dFechaHasta.split('/');
   var dDate = new Date();                            

	if (aArrayDesde[1].length == 1)
	{
		aArrayDesde[1] = '0' + aArrayDesde[1];
   }
	if (aArrayDesde[0].length == 1)
	{
		aArrayDesde[0] = '0' + aArrayDesde[0];
	}
	if (aArrayHasta[1].length == 1)
	{
		aArrayHasta[1] = '0' + aArrayHasta[1];
   }
	if (aArrayHasta[0].length == 1)
	{
		aArrayHasta[0] = '0' + aArrayHasta[0];
	}                         
   
   if (aArrayDesde[1] <= 12)
   {              
      iAnoDesde = dDate.getYear();
   }
   else
   {                                      
      iAnoDesde = dDate.getYear() + 1;
   }                     

   if (aArrayHasta[1] == dDate.getMonth())
   {
      if (aArrayHasta[0] >= dDate.getDay())
      {
         iAnoHasta = dDate.getYear();
      }
      else
      {
         iAnoHasta = dDate.getYear() + 1;
      }
   }
   else
   {
      if (aArrayHasta[1] > dDate.getMonth())
      {
         iAnoHasta = dDate.getYear();
      }
      else
      {
         iAnoHasta = dDate.getYear() + 1;
      }
   }         
	nDesde = iAnoDesde + aArrayDesde[1] + aArrayDesde[0];
	nHasta = iAnoHasta + aArrayHasta[1] + aArrayHasta[0];

	if (Number(nDesde) <= Number(nHasta))
	{
	   return true;
	}
	else
	{
	   return false;
	}
}
           

//sFechaCompleta
function sFechaCompleta(sFecha)
{
	var aArrayFecha = sFecha.split('/');

	if (aArrayFecha[1].length == 1)
	{
		aArrayFecha[1] = '0' + aArrayFecha[1];
   }
	if (aArrayFecha[0].length == 1)
	{
		aArrayFecha[0] = '0' + aArrayFecha[0];
	}
	return aArrayFecha[0] + '/' + aArrayFecha[1];
 }



//Validar2Fechas2:
//--------------
// Valida que la FechaDesde sea Menor o Igual que la FechaHasta. 
// Si ambas son dd/mm, devuelve true.
function Validar2Fechas2(dFechaDesde, dFechaHasta)
{
   var nDesde;
   var nLimiteDesde;
   var nMesDesde;
   var nHasta;
   var iAnoDesde, iAnoHasta;
   var aArrayDesde = dFechaDesde.split('/');
   var aArrayHasta = dFechaHasta.split('/');
   var dDate = new Date();                            

   if ((dFechaDesde == 'dd/mm') && (dFechaHasta == 'dd/mm'))
   {
       return true;
   }
   else
   {    
	   if (aArrayDesde[1].length == 1)
	   {	aArrayDesde[1] = '0' + aArrayDesde[1];
       }
	   if (aArrayDesde[0].length == 1)
	   {	aArrayDesde[0] = '0' + aArrayDesde[0];
	   }
	   if (aArrayHasta[1].length == 1)
	   {	aArrayHasta[1] = '0' + aArrayHasta[1];
       }
	   if (aArrayHasta[0].length == 1)
	   {	aArrayHasta[0] = '0' + aArrayHasta[0];
	   }                         

       if (aArrayDesde[1] <= dDate.getMonth())
       {	iAnoDesde = dDate.getYear() + 1;
       }
       else
       {	iAnoDesde = dDate.getYear();
       }                     

	   if (aArrayHasta[1] <= aArrayDesde[1])
	   {	iAnoHasta = iAnoDesde + 1;
	   }

	   if (aArrayHasta[1] == aArrayDesde[1])
	   {	if (aArrayHasta[0] <= aArrayDesde[0])
	   		{	iAnoHasta = iAnoDesde + 1;
			}
			else
	   		{	iAnoHasta = iAnoDesde;
			}
	   }

	   if (aArrayHasta[1] > aArrayDesde[1])
	   {	iAnoHasta = iAnoDesde;
	   }

	   nMesDesde = Number(aArrayDesde[1]) + 10;
	   nDesde = iAnoDesde + aArrayDesde[1] + aArrayDesde[0];

	   if (nMesDesde > 12)
	   {	nMesDesde = nMesDesde - 12;
	   		if (nMesDesde < 10)
			{	nLimiteDesde = String(iAnoDesde + 1) + '0' + String(nMesDesde) + aArrayDesde[0];
			}else
			{	nLimiteDesde = String(iAnoDesde + 1) + String(nMesDesde) + aArrayDesde[0];
			}
	   }
	   else
	   {    if (nMesDesde < 10)
			{	nLimiteDesde = String(iAnoDesde) + '0' + String(nMesDesde) + aArrayDesde[0];
			}else
			{	nLimiteDesde = String(iAnoDesde + 1) + String(nMesDesde) + aArrayDesde[0];
			}
	   }
	   nHasta = iAnoHasta + aArrayHasta[1] + aArrayHasta[0];

	   if (Number(nDesde) <= Number(nHasta))
	   {	if(Number(nLimiteDesde) <= Number(nHasta))
	   		{	return false;
			}
			else
			{	return true;
			}
	   }
	   else
	   {	return false;
  	   }
	}
}
           

//sFechaCompleta
function sFechaCompleta(sFecha)
{
	var aArrayFecha = sFecha.split('/');

	if (aArrayFecha[1].length == 1)
	{
		aArrayFecha[1] = '0' + aArrayFecha[1];
   }
	if (aArrayFecha[0].length == 1)
	{
		aArrayFecha[0] = '0' + aArrayFecha[0];
	}
	return aArrayFecha[0] + '/' + aArrayFecha[1];
 }





//teclaNumeroEntero:
//------------------
//controla que sea un número
function teclaNumeroEntero()
{
  if ((event.keyCode < 48) || (event.keyCode > 57))
    return false
  else
    return true;
};

//TestCreditCard
//--------------
//Valida tarjeta de crédito.
function ValidarTarjetaCredito(sTarjeta)
{
   var fDbl;
   var nChar;
   var nCheckSum;
   var nCharPos;
	
   fDbl = false;
   nCheckSum = 0;
	
   if ((sTarjeta.length < 15) || (sTarjeta.length > 16))
      return false;
   
   
   for (nCharPos = sTarjeta.length; nCharPos != 0; nCharPos--)
   { 
      nChar = parseInt(sTarjeta.substr(nCharPos - 1, 1));
      if ((nChar >= 0) & (nChar <= 9))
      {
         if(fDbl == true)
         {
            nChar = nChar * 2;
 
            if (10 <= nChar)
            {
               nChar = nChar - 9;
            }
         }
         
         nCheckSum = nCheckSum + nChar;
         fDbl = !fDbl;
      }
   }

   if ((nCheckSum % 10) == 0)
      return true;
   else
      return false;
}

//ValidarTelefono
//---------------
function ValidarTelefono(sTelefono)
{
   var I;
   var sTexto = sTelefono;
   
   for (I = 1; I < 5; I++)
      sTexto = sTexto.replace('-', '');
      
   return (!isNaN(sTexto));
}

//Validar el Lenguaje
// La variable lenguaje viene como hidden desde el documento html, y su value es el "vPais"
//Lenguaje 0 = castellano (Países: 1, 2, 5, 6 , 9, 32, 82, 86)
//Lenguaje 1 = portugues (Países: 10)
//-----------------------------
function traerLenguaje(lenguaje){
   if (lenguaje == 10){
      return 1;
   }else{
      return 0;
   }
}

//Obtener el dominio en el que se encuentra la pagina
function ObtenerPais()
      {
         var url, posicion, findpos, pais, i;
         spais = '';
         url = document.location.href;	
         findpos = '.de';
         posicion = url.indexOf(findpos);
         spais = url.substring(posicion-2,posicion);
         if (spais=='ck' || spais=='ge') {
			spais='ar';
		 }
         return spais;
      }     
	  
function ObtenerDominio()
      {
         var url, posicion, findpos, pais, i;
         spais = '';
         url = document.location.href;
         findpos = '.decolar';
         posicion = url.indexOf(findpos);
         
         if (posicion != -1)
         {
            spais = 'decolar';
         }
         else
         {
            spais = ObtenerPais() + '.despegar';  
         }

         return spais;
      }
