/**********************************************************
Tipo:			Biblioteca de funciones Javascript
Versión: 		1.0
Descripción: 	Funciones de los selectores
**********************************************************/

var navegacionSelector = new Array();
var urlSelectorActual = "";

/**
@funcion	ventanaSelector(ancho,alto)
@desc	Abre la ventana de un selector
@param	ancho	Ancho en pixels de la ventana
@param	alto	Alto en pixels de la ventana
*/
function ventanaSelector(ancho,alto){
	var ventana = document.getElementById("selectorVentanaPopup");
	if(ventana==null){		
		ventana = document.createElement("div");
		ventana.id = "selectorVentanaPopup";
		//ponemos ahora el HTML a la ventana
        var html = "";
		html += "<a href='javascript:cerrarVentanaSelector()' class='botonCerrar'><img src='http://www.hotelpalaciodelaserna.com/img/selectores/cerrar.gif' border='0' /></a>";
		html += "<a href='javascript:atrasSelector()' class='botonVolver'><img src='http://www.hotelpalaciodelaserna.com/img/selectores/volver.gif' border='0' /></a>";
		html += "<div id='selectorVentanaPopupContenido'></div>";
        ventana.innerHTML = html;
	}
	if(!ancho || !alto){
		ancho = 300;
		alto = 200;
	}
	//cogemos el div de contenido
	var contenido = ventana.childNodes[ventana.childNodes.length-1];
	if(contenido){
		contenido.style.width = ancho+"px";
		contenido.style.height = alto+"px";
	}
	ventana.style.width = (ancho+20)+"px";
	ventana.style.height = (alto+30)+"px";		
	return ventana;
}

/**
@funcion	cerrarVentanaSelector()
@desc	Cierra la ventana popup de los selectores
*/
function cerrarVentanaSelector(){
	navegacionSelector = new Array(); //reseteamos la navegacion
	urlSelectorActual = "";
	cerrarVentana();
}


/**
@funcion	cargarDestinoSelector(idDestino,urlSelector,valorDestino)
@desc	Carga el dato pasado en el selector directamente y lo recarga
@param	idDestino	Id del input hidden destino del selector
@param	urlSelector	URL del selector
@param	valorDestino	Valor a cargar
*/
function cargarDestinoSelector(idDestino,urlSelector,valorDestino){
	var destino = document.getElementById(idDestino);  
	if(destino)
		destino.value = valorDestino;
    cerrarVentanaSelector();
	//cargamos el dato visual en el selector
	ejecutarAjaxHTML(urlSelector,"info=1&valorSelector="+valorDestino+"&idDestino="+idDestino,"POST",idDestino+"Visual");
}

/**
@funcion    actualizarDestinoVisualSelector(idDestino,urlSelector)
@desc   Recarga la visualización del selector segun su estado actual
@param  idDestino    Id del input hidden destino del selector
@param  urlSelector    URL del selector  
*/
function actualizarDestinoVisualSelector(idDestino,urlSelector){
    var destino = document.getElementById(idDestino);   
    var valorActual = "";
    if(destino)
        valorActual = destino.value;        
    cerrarVentanaSelector();
    //cargamos el dato visual en el selector
    ejecutarAjaxHTML(urlSelector,"info=1&valorSelector="+valorActual+"&idDestino="+idDestino,"POST",idDestino+"Visual");
}

/**
@funcion	actualizarElementoDestinoSelector(idDestino,urlSelector,valorElemento,posicionId)
@desc	Añade/actualiza el dato pasado a la lista existente en el selector
@param	idDestino	Id del input hidden destino del selector
@param	urlSelector	URL del selector
@param	valorElemento	Conjunto de valores del elemento a cargar (separados por "|")
@param	posicionId	Posicion que ocupa el elemento identificador de cada n-upla
*/
function actualizarElementoDestinoSelector(idDestino,urlSelector,valorElemento,posicionId){
	var destino = document.getElementById(idDestino);
	var valorNuevo = "";
	var enLista = false;
	if(destino && destino.value.length>0){
		//si habia datos, buscamos este id y lo añadimos
		var elementos = destino.value.split("#");
		var idElemento = valorElemento.split("|")[posicionId];
		for(var i=0;i<elementos.length;i++){
			var elemento = elementos[i].split("|")[posicionId];
			if(elemento==idElemento){ //si ya estaba lo modificamos
				var inicio = "";				
				if(i>0) //debe haber mas de 1 elemento
					inicio = elementos.slice(0,i).join("#")+"#";						
				var final = "";
				if(elementos.length>i+1)
					final = "#"+elementos.slice(i+1).join("#");	
				valorNuevo = inicio+valorElemento+final;
				enLista = true;
			}
		}		
		if(!enLista){
			if(elementos.length>0) //si habia elementos lo añadimos
				valorNuevo = destino.value+"#"+valorElemento;
			else //si es el primero
				valorNuevo = valorElemento;
		}
	}else
		valorNuevo = valorElemento;  
	cargarDestinoSelector(idDestino,urlSelector,valorNuevo);
}

/**
@funcion    actualizarElementoDestinoSelectorAditivo(idDestino,urlSelector,valorElemento,posicionId)
@desc    Añade/actualiza el dato pasado a la lista existente en el selector (permite repeticiones de elementos)
@param    idDestino    Id del input hidden destino del selector
@param    urlSelector    URL del selector
@param    valorElemento    Conjunto de valores del elemento a cargar (separados por "|")
@param    posicionId    Posicion que ocupa el elemento identificador de cada n-upla
*/
function actualizarElementoDestinoSelectorAditivo(idDestino,urlSelector,valorElemento,posicionId){
    var destino = document.getElementById(idDestino);
    var valorNuevo = "";      
    if(destino && destino.value.length>0)  //si habia elementos lo añadimos
        valorNuevo = destino.value+"#"+valorElemento;   
    else
        valorNuevo = valorElemento;  
    cargarDestinoSelector(idDestino,urlSelector,valorNuevo);
}

/**
@funcion	quitarElementoDestinoSelector(idDestino,urlSelector,valorElemento,posicionId)
@desc	Añade/actualiza el dato pasado a la lista existente en el selector
@param	idDestino	Id del input hidden destino del selector
@param	urlSelector	URL del selector
@param	idElemento	id del elemento a eliminar
@param	posicionId	Posicion que ocupa el elemento identificador de cada n-upla
*/
function quitarElementoDestinoSelector(idDestino,urlSelector,idElemento,posicionId){
	var destino = document.getElementById(idDestino);
	if(destino && destino.value.length>0){
		//si habia datos, buscamos este id y lo añadimos
        var elementos = destino.value.split("#");
		for(var i=0;i<elementos.length;i++){
			var elemento = elementos[i].split("|");
			if(elemento[0]==idElemento){ //si ya estaba lo modificamos
				elementos[i]=-1;
				break;
			}
		}		
		destino.value = "";
		for(var i=0;i<elementos.length;i++)
			if(elementos[i] != -1){
				destino.value += elementos[i];
				destino.value += "#";
			}                                              
		var valorNuevo = destino.value.substring(0,destino.value.length-1);
		cargarDestinoSelector(idDestino,urlSelector,valorNuevo);
	}	
}


/**
@funcion	abrirSelector(urlSelector,params)
@desc	Abre/Recarga la ventana del selector con los parametros pasados
@param	urlSelector	URL del generador de contenido para el selector
@param	params	Parámetros a pasar al generador de contenido
*/
function abrirSelector(urlSelector,params,ancho,alto){	
	//obtenemos/creamos la ventana para selectores
	var ventana = ventanaSelector(ancho,alto);
	//abrimos la ventana
	abrirVentana(ventana);
	//cargamos su contenido con ajax
	ejecutarAjaxHTML(urlSelector,params,"POST","selectorVentanaPopupContenido","Cargando...","Se ha producido un error!");
	//añadimos la ruta al selector
	navegacionSelector.push(new Array(params,ancho,alto)); 
	urlSelectorActual = urlSelector;
}

/**
@funcion	atrasSelector()
@desc	Vuelve al paso anterior en el selector
*/
function atrasSelector(){	
	if(navegacionSelector.length>1){
		//obtenemos/creamos la ventana para selectores
		var navegacionAnterior = navegacionSelector[navegacionSelector.length-2];
		var ventana = ventanaSelector(navegacionAnterior[1],navegacionAnterior[2]);
		//abrimos la ventana
		abrirVentana(ventana);
		//cargamos su contenido con ajax
		ejecutarAjaxHTML(urlSelectorActual,navegacionAnterior[0],"POST","selectorVentanaPopupContenido","Cargando...","Se ha producido un error!");
		//quitamos la ultima ruta de la navegacion
		navegacionSelector.pop(); 
	}
}