var req;
var _globalMethod;

/**
* Llamada al procedimiento remoto vía POST
*
* @param url string Dirección web donde se trata la página
* @param metodo string Nombre del métdo que va a tratar la respuesta del servidor
* @param array variables Matriz asociativa con las variables que se van a enviar 
*/
function loadXMLDocPost(url, metodo, variables) {

		_globalMethod = metodo;
    // branch for native XMLHttpRequest object
		var txt = makePostVars (variables);
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
				req.open("POST", url, true, null, null);
				req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				req.setRequestHeader("Location:",url);
        req.send(txt);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
						req.open("POST", url, false, null, null);
						req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
						req.setRequestHeader("Location:",url);
		        req.send(txt);
        }
    }
}

/**
* Elaborar la cadena de variables que se enciarán vía POST
* @param array lstVars Lista de variables dispuestas en forma asociativa (nombrecampo = valor)
*/
function makePostVars (lstVars) {

	var txt = "?1";
	for(var i in lstVars)
	{
		txt = txt + '&' + i + '=' + lstVars[i];
	}
	
	return txt; 

}


//Llamar a la página remota vía método GET
function loadXMLDoc(url, metodo) {

		_globalMethod = metodo;
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

/**
* Obtiene el contenido de un elemento de XML devuelto por request
*
*/
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method 
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided 
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "n/a";
    }
}



// Maneja el cambio de página
function processReqChange() {

    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
				
					switch (_globalMethod)
					{
					
						case 'getQuestion':
							getQuestion(req.responseText);
						break;
					
						case 'listadoTarifas':
							verTarifasCompra(req.responseText);
						break;
						
						case 'getWeather':
							getWeather(req.responseText);
						break;
						
						case 'listarRevistasNoticias':
							listarRevistasNoticias(req.responseText);
						break;
						
						case 'verRevistaAbordo':
							verRevistaAbordo(req.responseText);
						break;
					
						case 'verNoticia':
							verNoticiaReq(req.responseText);
						break;
						
						case 'listarNoticias':
							verListadoNoticias(req.responseText);
						break;
					
						case 'listarOfertasEmpleo':
							verLstOfertasEmpleo(req.responseText);
						break;
					
						case 'calendar'://Recarga el calendario
							changeCalendar(req.responseText);
						break;

						case 'getEventos'://Obtener la lista de eventos
							getEventos(req.responseText);
						break;
						
						case 'getEvento'://Obtener la lista de eventos
							getEvento(req.responseText);
						break;
						
						case 'getPersonalEventos':
							getPersonalEvents(req.responseText);
						break;
						
						case 'sendMail':
							document.getElementById('sendFriend').style.display = 'none';
							if (_globLang == 'es') {alert('Su correo ha sido enviado.');}
							if (_globLang == 'en') {alert('Your email has been sent sucessfully.');}
						break;
						
						case'listarPostales':
							verListadoPostales(req.responseText);
						break;
						
						case'enviarPostales': //Esto realmente no envia la postal, visualiza el formulario
							enviarPostales(req.responseText);
						break;
						
						case 'previewPostales':
							previewPostales(req.responseText);
						break;
						
						case 'sendPostal': //Este si envía realmente la postal
							sendPostal(req.responseText);
						break;
						
						case 'infoServDest':
							infoServDest(req.responseText);
						break;
						
						case 'tarifaConcep':
							tarifaConcep(req.responseText);
						break;
					}
            //clearTopicList();
            //buildTopicList();
         } else {
            alert("No pudo acceder al servidor:\n" +
                req.statusText);
         }
    }
}

/**
* Obtener la pregunta para recuperar una clave
*/
function getQuestion(txt) {

	var objFrm = document.olvContr
	objFrm.elements["frmNew[pregunta]"].value = txt;
	
	if (txt != '')
	{
		document.getElementById('olvContrHead').style.display = 'block';
		document.getElementById('olvContrForm').style.display = 'block';
	}
	else
	{
		failedUser();
	}

}

/**
* Mostrar las tarifas de compra desde un origen dado
*
* @param string txt Contenido html de las tarifas
*/
function verTarifasCompra(txt) {

	var objLayer = document.getElementById('compraslstTarifas');
	objLayer.innerHTML = txt;
	
	document.getElementById('comprasttardest').style.display = 'block';
	
	//Habilitar las capas txtCompraa y txtComprab
	document.getElementById('txtCompraa').style.display = 'block';
	document.getElementById('txtComprab').style.display = 'block';
	document.getElementById('txtComprac').style.display = 'block';
	document.getElementById('txt1').style.display = 'none';
	document.getElementById('txt2').style.display = 'none';
	document.getElementById('txt3').style.display = 'none';
	document.getElementById('txt4').style.display = 'none';
	document.getElementById('txt5').style.display = 'none';
	document.getElementById('txt6').style.display = 'none';
	document.getElementById('datosTarifa').style.display = 'none';
}

/**
* Mostrar el tiempo para una localización dada
*
* @param string txt Contenido html de las tarifas
*/
function getWeather(txt) {

	var data = req.responseXML.getElementsByTagName("datos");
	var htmldata = getElementTextNS("", "datatablea", data[0], 0);

	var objLayer = document.getElementById('tiempoDetail');
	objLayer.innerHTML = htmldata;

} 


/**
* Mostrar una revista
*
* @param string txt Contenido html de la revista
*/
function verRevistaAbordo(txt) {

	var objLayer = document.getElementById('detalleRevista');
	objLayer.innerHTML = txt;
	window.scroll(0,360);

}

/**
* Mostrar las revista según la paginación
*
* @param string txt Contenido html de la página de revistas
*/
function listarRevistasNoticias(txt) {

	var data = req.responseXML.getElementsByTagName("datos");
	var fotosPag = getElementTextNS("", "listarevista", data[0], 0);
	var paginas = getElementTextNS("", "paginacion", data[0], 0);
	
	var objLayer = document.getElementById('listadoRevistas');
	objLayer.innerHTML = fotosPag;
	
	var objLayer2 = document.getElementById('listadoRevPag');
	objLayer2.innerHTML = paginas;

}

/**
* Mostrar el contenido de la noticia
*
* @param string txt Contenido html del calendario
*/
function verNoticiaReq(txt) {

	var objLayer = document.getElementById('contenidoNoticia');
	objLayer.innerHTML = txt;

}

/**
* Muestra el listado de los titulares de noticias 
*
* @param string txt Contenido html del calendario
*/
function verListadoNoticias(txt) {

	var objLayer = document.getElementById('lstNoticias');
	objLayer.innerHTML = txt;

}

/**
* Muestra el listado de las ofertas de empleo 
*
* @param string txt Contenido html con las ofertas
*/
function verLstOfertasEmpleo(txt) {

	var objLayer = document.getElementById('lstOfertasEmpleo');
	objLayer.innerHTML = txt;

}


/**
* Cambia el contenido de la capa del calendario tanto en la home como en la agenda
*
* @param string txt Contenido html del calendario
*/
function changeCalendar(txt) {

	var objLayer = document.getElementById('calendarSquare');
	objLayer.innerHTML = txt;

}

/**
* Muestra un listado de los eventos de acuerdo a los criterios indicados
*
* @param string txt Contenido html de los titulares
*/ 
function getEventos(txt) {

	var objLayer = document.getElementById('agendatitulares');
	if (txt == '')
	{
		txt="<span class='enunnoticias'>No se han encontrado eventos con estos criterios</span>"		
	}
	objLayer.innerHTML = txt;
	
	var objLayer = document.getElementById('agendacuerpo');
	objLayer.innerHTML = '';
	//alert(txt);

}

/**
* Muestra un listado de los eventos de acuerdo a los criterios indicados
*
* @param string txt Contenido html de los titulares
*/ 
function getPersonalEvents(txt) {

	var objLayer = document.getElementById('agendatitulares');
	if (txt == '')
	{
		txt="<span class='enunnoticias'>No se han encontrado eventos con estos criterios</span>"		
	}
	objLayer.innerHTML = txt;
	
	var objLayer = document.getElementById('agendacuerpo');
	objLayer.innerHTML = '';

}


/**
* Muestra el contenido HTML del evento actual
*
* @param string txt Contenido html de los titulares
*/
function getEvento (txt) {

	var objLayer = document.getElementById('agendacuerpo');
	//alert(txt)
	objLayer.innerHTML = txt;

}


/**
* Muestra el listado de las postales
*
* @param string txt Contenido html del calendario
*/
function verListadoPostales(txt) {

	var objLayer = document.getElementById('lstPostales');
	objLayer.innerHTML = txt;

}

/**
* Muestra la postal previsualizada
*
* @param string txt Contenido html del calendario
*/
function enviarPostales(txt) {

	var objLayer = document.getElementById('lstPostales');
	objLayer.innerHTML = txt;

}

/**
* Muestra la postal previsualizada
*
* @param string txt Contenido html del calendario
*/
function previewPostales(txt) {

	var objLayer = document.getElementById('lstPostales');
	objLayer.innerHTML = txt;

}

/**
* Enviar la postal efectivamente
*
* @param string txt Contenido html del calendario
*/
function sendPostal(txt) {

	var objLayer = document.getElementById('lstPostales');
	objLayer.innerHTML = txt;

}

/**
* Cargar la página con el contenido del destino seleccionado
*
* @param string txt Contenido html del calendario
*/
function infoServDest(txt) {

	var objLayer = document.getElementById('contenidoDestino');
	objLayer.innerHTML = txt;

}

/**
* Cargar la página con el contenido de las tarifas de los conceptos
*
* @param string txt Contenido html del calendario
*/
function tarifaConcep(txt) {
//alert(txt);
	var objLayer = document.getElementById('datosTarifa');
	objLayer.innerHTML = txt; //alert(txt);
	document.getElementById('datosTarifa').style.display = 'block';
}
