//================================================================================
// Nombre: Funciones.js 
// Autor:  Solmelia 
//================================================================================

var ie			= navigator.appName == "Microsoft Internet Explorer";
var ie6			= navigator.appName == "Microsoft Internet Explorer";
var ns6			= document.getElementById&&!document.all;
var ns4			= document.layers;
var opera 	= navigator.userAgent.indexOf("Opera") > -1;
var opera5	= (navigator.appVersion.indexOf("MSIE 5")!=-1 && navigator.userAgent.indexOf("Opera 5")!=-1)?true:false;
var opera6	= (navigator.appVersion.indexOf("MSIE 5")!=-1 && navigator.userAgent.indexOf("Opera 6")!=-1)?true:false;
var mac			= (navigator.userAgent.indexOf("Mac")!=-1);
var win;


/**
 * smOpenPop: Función generica que abre una ventana con los parametros 
 * especificos que se le pasan.
 *
 * @param sUrl: Url de la ventana. 
 * @param sName: Nombre de la ventana.  
 * @param sWidth: Ancho de la ventana 
 * @param sHeight: Alto de la ventana 
 * @param sTop:  Posición X del vertice superior izquierdo de la ventana 
 * @param sLeft: Posición Y del vertice superior izquierdo de la ventana 
 * @param sSettings: cadena de texto libre con los parametros adicionales (Ej scrollbars=Yes)
 */

function smOpenPop(sUrl,sName,sWidth,sHeight,sTop,sLeft,sSettings)
{
	if(sWidth=='') sWidth=200;
	if(sHeight=='') sHeight=200;
	if(sTop=='') sTop=10;		
	if(sLeft=='') sLeft=10;	
	var settings = "width="+sWidth+",height="+sHeight+",left="+sLeft+",top="+sTop;
	if(sSettings != ''){
		settings += ","+sSettings;
	}
	if(win)
	win.close();
	window.focus();
	win	= window.open(sUrl,sName,settings);
}

/**
 * trim de Strings
 *
 * @param s: String
 */
function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

/**
 * OcultaDiv Función que oculta una capa 
 *
 * @param Div: Identificado r de la capa 
 */
function OcultaDiv (Div) 
{	
	if(ns4){
		eval("document.layers[\""+Div+"\"].visibility='hidden'");	
	}
	else if(ie){
		eval("document.all."+Div+".style.visibility='hidden'");
	}
	else if(ns6){
		eval("document.getElementById('"+Div+"').style.visibility='hidden'");
	}
}

/**
 * MuestraDiv.
 * Función que visualiza una capa
 *
 * @param Div: Identificador de la capa 
 */

function MuestraDiv (Div) 
{
	if(ns4){
		eval("document.layers[\""+Div+"\"].visibility='visible'");	
	}
	else if(ie){
		eval("document.all."+Div+".style.visibility='visible'");
	}
	else if(ns6){
		eval("document.getElementById('"+Div+"').style.visibility='visible'");
	}
}

function ShowDIV (div, ifr, state) {
	// div = ID del div que contiene el contenido a mostrar
	//       <div id='XXXXXX' style='position:absolute;top:TT;left:LL;z-index:100;display:none'>
	// ifr = ID de un iframe que debe existir para que el div tape los select en IE
	//       <iframe id="XXXXX" src="javascript:false;" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;"></iframe>
	// state = true | false (estado de visibilidad del contenido)
	var DivRef = document.getElementById(div);
	var IfrRef = document.getElementById(ifr);
	if (state) {
		DivRef.style.display = "block";
		IfrRef.style.width = DivRef.offsetWidth;
		IfrRef.style.height = DivRef.offsetHeight;
		IfrRef.style.top = DivRef.style.top;
		IfrRef.style.left = DivRef.style.left;
		IfrRef.style.zIndex = DivRef.style.zIndex - 1;
		IfrRef.style.display = "block";
	} else {
		DivRef.style.display = "none";
		IfrRef.style.display = "none";
	}
}

/**
 * correctDate. 
 * Corrige las fechas de lso combos del estilo dia y mes_anyo. 
 * El año y el mes estan unificados en un unico combo
 *
 * @param form_name: Nombre del formulario 
 * @param day_field: Nombre del cambo dia del formulario
 * @param month_year_field: Nombre dl campo mes y dia del formulario
 */

function correctDate(form_name, day_field, month_year_field) 
{ 	
	var comboDia 	= eval("document." + form_name + "." + day_field);
	var comboMes 	= eval("document." + form_name + "." + month_year_field);	
	var day 	= comboDia.options[comboDia.selectedIndex].value;
	var month 	= comboMes.options[comboMes.selectedIndex].value;	
	var anyos  = Math.floor(comboMes.selectedIndex/12);
	if ((day!="")&&(month!="")){
		//Comprobamos el número de opciones nulas que hay al principio del combo de días
		var optionDiaNulo=0;
		for (var i=0;i<comboDia.length;i++){
			if (comboDia.options[i].value==""){
				optionDiaNulo++;
			}
		}		
		//Comprobamos el número de opciones nulas que hay al principio del combo de meses
		var optionMesNulo=0;
		for (var j=0;j<comboMes.length;j++){
			if (comboMes.options[j].value==""){
				optionMesNulo++;
			}
		}
		//Construyo una fecha con esos componentes
		var fecha_comp	= month.split("-");
		var a_date 	= new Date(fecha_comp[1],(fecha_comp[0]-1),day);		

		//Obtengo el día y el mes de la fecha validada
		day = a_date.getDate();
		month = a_date.getMonth();

		//Corrijo las combos, sumandole el número de opciones vacías que tiene cada combo
		eval("document." + form_name + "." + day_field + ".selectedIndex = " + (day-1+optionDiaNulo));
		eval("document." + form_name + "." + month_year_field + ".selectedIndex = " + (month+optionMesNulo+12*anyos));			
	}
	
}


/**
 * correctDate2. 
 * Corrige las fechas de lso combos del estilo dia y mes_anyo. 
 * El año y el mes estan unificados en un unico combo
 *
 * @param form_name: Nombre del formulario 
 * @param day_field: Nombre del cambo dia del formulario
 * @param month_year_field: Nombre dl campo mes y dia del formulario
 */

function correctDate2(form_name, day_field, month_year_field) 
{ 	
	var comboDia 	= eval("document." + form_name + "." + day_field);
	var comboMes 	= eval("document." + form_name + "." + month_year_field);	
	var day 	= comboDia.options[comboDia.selectedIndex].value;
	var fecha_comp	= comboMes.options[comboMes.selectedIndex].value.split("-");
	var month 	= fecha_comp[0]-1;	
	var year		=fecha_comp[1];
	
	
	
	if ((day!="")&&(month!="")&&(year!="")&&(month!="-1")){
		//Comprobamos el número de opciones nulas que hay al principio del combo de días
		
		var optionDiaNulo=0;
		for (var i=0;i<comboDia.length;i++){
			if (comboDia.options[i].value==""){
				optionDiaNulo++;
			}
		}		
		//Comprobamos el número de opciones nulas que hay al principio del combo de meses
		var optionMesNulo=0;
		for (var j=0;j<comboMes.length;j++){
			if (comboMes.options[j].value==""){
				optionMesNulo++;
			}
		}
		//Construyo una fecha con esos componentes
		var a_date 	= new Date(year,month,day);	
		//alert(a_date);	

		//Obtengo el día y el mes de la fecha validada
		day = a_date.getDate();
		month = a_date.getMonth()+1;
		year = a_date.getFullYear();
		var mesanyo=month+'-'+year;
		
		//Corrijo las combos, sumandole el número de opciones vacías que tiene cada combo
		eval("document." + form_name + "." + day_field + ".selectedIndex = " + (day-1+optionDiaNulo));
		
		for (var j=0;j<comboMes.length;j++){
			var temp=comboMes.options[j].value.split('-')
			if((month==temp[0])&&(year==temp[1])){
			eval("document." + form_name + "." + month_year_field + ".selectedIndex = " + j);	
			return;				
			}
		}
		
	}
	
}


/**
 * correctDate3.
 * Corrige las fechas de lo combos del estilo dia y mes y anyo. 
 * Son tres combos separados.
 *
 * @param form_name: Nombre del formulario 
 * @param day_field: Nombre del cambo dia del formulario
 * @param month_field: Nombre del campo mes del formulario
 * @param year_field: Nombre del campo anño del formulario 
 */

function correctDate3(form_name, day_field, month_field, year_field)
{
	var comboDia 	= eval("document." + form_name + "." + day_field);
	var comboMes 	= eval("document." + form_name + "." + month_field);
	var comboAnio 	= eval("document." + form_name + "." + year_field);
	var day 	= comboDia.options[comboDia.selectedIndex].value;
	var month 	= comboMes.options[comboMes.selectedIndex].value;
	var year 	= comboAnio.options[comboAnio.selectedIndex].value;
	if ((day!="")&&(month!="")&&(year!=""))
	{
		//Comprobamos el número de opciones nulas que hay al principio del combo de días
		var optionDiaNulo=0;
		for (var i=0;i<comboDia.length;i++){
			if (comboDia.options[i].value==""){
				optionDiaNulo++;
			}
		}
		//Comprobamos el número de opciones nulas que hay al principio del combo de meses
		var optionMesNulo=0;
		for (var j=0;j<comboMes.length;j++){
			if (comboMes.options[j].value==""){
				optionMesNulo++;
			}
		}	
		//Construyo una fecha con esos componentes
		var a_date 	= new Date(year,(month-1),day);		
		day 		= a_date.getDate();
		month 	= a_date.getMonth();
		//Corrijo las combos, sumandole el número de opciones vacías que tiene cada combo
		eval("document." + form_name + "." + day_field + ".selectedIndex = " + (day-1+optionDiaNulo));
		eval("document." + form_name + "." + month_field + ".selectedIndex = " + (month+optionMesNulo));
	}
}


/**
 * selectDato.
 * Selecciona el campo de un select de 
 *
 * @param lista: Nombre del campo del combo
 * @param valor: Valor que se tiene que seleccionar
 */
function selectDato(lista,valor){
	try{
		for (var i=0;i<lista.length;i++){
			if (lista.options[i].value == valor){
				lista.options[i].selected = true;
				break;
			}
		}
	} catch(e){ }
}


/**
 * selectDatoRadio
 * Selecciona el campo de un radio  
 *
 * @param lista: Nombre del campo del radio
 * @param valor: Valor que se tiene que seleccionar
 */
function selectDatoRadio(lista,valor){
	for (var i=0;i<lista.length;i++){
		if (lista[i].value == valor){
			lista[i].checked = true;
			break;
		}
	}
}


/**
 * loadDate.
 * Carga la fecha en un combo de fecha. 
 * El combo de mes y año estan unificados en uno solo 
 *
 * @param sFecha: Fecha que se carga formato dd/mm/yyyy
 * @param campoDia: Nombre del cambo dia del formulario
 * @param campoMesAnyo: Nombre del campo mes y año del formulario 
 */
function loadDate(sFecha, campoDia, campoMesAnyo){	
	 loadDateSeparator(sFecha, campoDia, campoMesAnyo, "/");
}

/**
 * loadDateSeparator.
 * Carga la fecha en un combo de fecha.
 * El combo de mes y año estan unificados en uno solo delimitado
 * por un separador
 *
 * @param sFecha: Fecha que se carga formato dd/mm/yyyy
 * @param campoDia: Nombre del cambo dia del formulario
 * @param campoMesAnyo: Nombre del campo mes y año del formulario 
 * @param separador: separador de mes y año
 */
function loadDateSeparator(sFecha, campoDia, campoMesAnyo, separador){	
	var sDate 	= sFecha.split(separador);	
	selectDato(campoDia,sDate[0]);
	selectDato(campoMesAnyo,""+sDate[1]+"-"+sDate[2]);	
}


/**
 * loadDate3.
 * Carga la fecha en un combo de fecha. 
 * La fecha esta en formato de dia mes y anño en tres combos diferentes 
 *
 * @param sFecha: Fecha que se carga formato dd/mm/yyyy
 * @param campoDia: Nombre del cambo dia del formulario
 * @param campoMes: Nombre del campo mes del formulario 
 * @param campoAnyo: Nombre del campo año del formulario  
 */

function loadDate3(sFecha, campoDia, campoMes, campoAnyo){	
	var sDate 	= sFecha.split("/");	
	selectDato(campoDia,sDate[0]);
	selectDato(campoMes,sDate[1]);
	selectDato(campoAnyo,sDate[2]);	
}

/**
 * restafechas.
 * devuelve la diferncia entre las dos fechas introducidas
 *
 * @param dia: Dia inicial 
 * @param mes mes inicial
 * @param anyo año inicial 
 * @param dia1 dia final
 * @param mes1 mes final
 * @param anyo1 año final
 */
 
function restafechas(dia,mes,anyo,dia1,mes1,anyo1) {
	var fechaini 		= new Date(mes+"/"+dia+"/"+anyo) 
	var fechaf 		= new Date(mes1+"/"+dia1+"/"+anyo1) 
	var tiempoRestante 	= fechaf.getTime() - fechaini.getTime() 
	var noches 		= Math.round(tiempoRestante / (1000 * 60 * 60 * 24))
	return noches;
}

/**
 * Cierra el popUp y carga la url pasada por parametro en la pagina padre (la que ha abierto el popUp)
 *
 * @param link: Link donde se redirigira la pagina padre
 */
function popUpLink(link){
	// Recargamos la pagina padre
	window.opener.location = link;
	// Cerramos el popUp
	window.close();
}

/**
 * changePatron
 * Remplaza en la cadena el patron que pasamos de un string el patron los valores de la 
 *
 * @param cadena: Cadena donde se va a sustituir 
 * @param patron: Patron que se va a sustituir
 * @param valor: Valor con el que se sustituye
 *
 * Ej. Patron para cambiar todos las ocurrencias de (a) => /á|à|ä|â/gi
 */

function changePatron(cadena, patron, valor){
	cadena = cadena.replace(patron,valor);		
	return cadena;	
}



/**
 * changePatron
 * Remplaza en la cadena el patron que pasamos de un string el patron los valores de la 
 *
 * @param cadena: Cadena con el nombre del hotel 
 */

function changeNameHotel(cadena){
	cadena = cadena.toLowerCase()
	cadena = changePatron(cadena, /\s/gi,"_");	
	cadena = changePatron(cadena, /\!|\"|\·|\$|\%|\&|\/|\(|\)|\=|\?|\¿|\'|\.|\;|\,|\-|\¨|\`|\´|\*|\+|\./gi,"");	
	cadena = changePatron(cadena, /á|à|ä|â/gi,"a");		
	cadena = changePatron(cadena, /é|è|ë|ê/gi,"e");			
	cadena = changePatron(cadena, /í|ì|ï|î/gi,"i");		
	cadena = changePatron(cadena, /ó|ò|ö|ô/gi,"o");
	cadena = changePatron(cadena, /ú|ù|ü|û/gi,"u");	
	cadena = changePatron(cadena, /ç/gi,"c");
	cadena = changePatron(cadena, /ñ/gi,"n");		
	return cadena;
}


function normalizaName(cadena){
	cadena = cadena.toLowerCase()
	cadena = cadena.replace(/\!|\"|\·|\$|\%|\&|\/|\(|\)|\=|\?|\¿|\'|\.|\;|\,|\-|\¨|\`|\´|\*|\+|\./gi,"");	
	cadena = cadena.replace(/á|à|ä|â/gi,"a");		
	cadena = cadena.replace(/é|è|ë|ê/gi,"e");			
	cadena = cadena.replace(/í|ì|ï|î/gi,"i");		
	cadena = cadena.replace(/ó|ò|ö|ô/gi,"o");
	cadena = cadena.replace(/ú|ù|ü|û/gi,"u");	
	cadena = cadena.replace(/ç/gi,"c");
	return cadena;
}	

// Reemplaza todas las ocurrencias de un carácter en un texto
function replaceAll(texto, caracterViejo, caracterNuevo){

	var temp = texto;
	var i = temp.indexOf(caracterViejo);
	
	while (i > -1) {
		temp = temp.replace(caracterViejo, caracterNuevo);
		i = temp.indexOf(caracterViejo, i + caracterNuevo.length + 1);
	}
	
	return temp;
}



// =============================================
// CALENDARIO
// =============================================

/**
 * selectDato.
 * Selecciona el campo de un select de
 *
 * @param lista: Nombre del campo del combo
 * @param valor: Valor que se tiene que seleccionar
 */
function selectDato(lista,valor){
  for (var i=0;i<lista.length;i++){
    if (lista.options[i].value == valor){
      lista.options.selectedIndex = i;
      break;
    }
  }
}

/**
* dia = 1,2,3,4,...31
* mes = 0,1,2,3, ...11
* anyo = 2005,2006 ...
* incDays, Incremento de dias 0,1,2,..
* incMonths, Incremento de meses 0,1,2,..
* incYears Incremento de años 0,1,2,..
**/
function DateAdd(dia, mes, anyo, incDays, incMonths, incYears)
{
	var sAux 				= ""
	var startDate 	= new Date(anyo,mes,dia,0,0,0);
	sAux 						= DateAddFecha(startDate, incDays, incMonths, incYears);
	return sAux;
}

/**
* DateAddFecha.
* Incremneta un afecha en los valores especificados
*
* @param incDays: Incremneto de dias
* @param incMonths: Incremento de meses
* @param incYears: Incremneto de años
**/
function DateAddFecha(startDate, incDays, incMonths, incYears)
{
	var sAux 				= "";
	var returnDate 	= new Date(startDate.getTime());
	var yearsToAdd 	= incYears;
	var month 			= returnDate.getMonth() + incMonths;
	if (month > 11)
	{
		yearsToAdd 	= Math.floor((month+1)/12);
		month 			-= 12*yearsToAdd;
		yearsToAdd 	+= incYears;
	}
	returnDate.setMonth(month);
	returnDate.setFullYear(returnDate.getFullYear()	+ yearsToAdd);
	returnDate.setDate(returnDate.getDate()+incDays);
	if(returnDate.getDate()<10)
		sAux +="0"
	sAux +=returnDate.getDate()+"/"
	if((returnDate.getMonth() + 1)<10)
		sAux +="0"
	sAux +=(returnDate.getMonth() + 1)+"/"+ returnDate.getFullYear();
	return sAux;
}	

/**
* loadDate.
* Carga la fecha en un combo de fecha.
* El combo de mes y año estan unificados en uno solo
*
* @param sFecha: Fecha que se carga formato dd/mm/yyyy
* @param campoDia: Nombre del cambo dia del formulario
* @param campoMesAnyo: Nombre del campo mes y año del formulario
**/
function loadDate(sFecha, campoDia, campoMesAnyo){
	 loadDateSeparator(sFecha, campoDia, campoMesAnyo, "/");
}

/**
* loadDateSeparator.
* Carga la fecha en un combo de fecha.
* El combo de mes y año estan unificados en uno solo delimitado
* por un separador
*
* @param sFecha: Fecha que se carga formato dd/mm/yyyy
* @param campoDia: Nombre del cambo dia del formulario
* @param campoMesAnyo: Nombre del campo mes y año del formulario
* @param separador: separador de mes y año
**/
function loadDateSeparator(sFecha, campoDia, campoMesAnyo, separador){
	var sDate 	= sFecha.split(separador);
	selectDato(campoDia,sDate[0]);
	selectDato(campoMesAnyo,""+sDate[1]+"-"+sDate[2]);
}	

/**
* setFecha. Asigna la fecha al combo
*
* @param any: 
* @param mes: 
* @param dia: 
* @param comboDia: 
* @param comboMesAnyo: 
**/	
function setFecha(any, mes, dia, comboDia, comboMesAnyo) {
  if (dia < 10){
    comboDia.value = "0" + dia;
  }
  else {
    comboDia.value = dia;
  }
  comboMesAnyo.value = valueMonth[mes-1] + "-" + any;
}

/**
* initCalendario. Inicializa el calendario
*
* @param form: 
* @param en_dia: 
* @param en_mesanyo: 
* @param sa_dia: 
* @param sa_mesanyo: 
**/	
function initCalendario(form, en_dia, en_mesanyo, sa_dia, sa_mesanyo) {
	return_form 			= form;
	return_en_dia 		= en_dia;
	return_en_mesanyo = en_mesanyo;
	return_sa_dia 		= sa_dia;
	return_sa_mesanyo = sa_mesanyo;
}
