var oElementoContenedor = null;
var oEl;
var edificioActivo;

/**
 * Crea el objeto XmlHttpRequest para las peticiones
 * 
 * @return Devuelve el objeto XmlHttpRequest
 */
function getXmlHttpRequest() {
	var httpRequest = null;
	try {
		httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {
			httpRequest = null;
		}
	}
	if (!httpRequest && typeof XMLHttpRequest != "undefined") {
		httpRequest = new XMLHttpRequest();
	}
	return httpRequest;
}

var edificio = { 

	/**
	 * Muestra u oculta la ficha del edificio
	 * 
	 * @oElemento  Elemento del que hay que mostrar la ficha
	 * @return false
	 */
 	ficha : function(oElemento){
 		var urlFicha = oElemento.getElementsByTagName("a")[0] + "&ajax=1";		
 		//si hay algun edificio activo se desactiva
 		edificioActivo = edificio.desactivar(oElemento.id);
 		oEl = oElemento;
 		oElementoContenedor = oElemento;
 		edificio.realizarPeticionURL(urlFicha);
		return false;
	},
	
	/**
	 * Realiza la llamada al action para cargar la ficha del edificio
	 * @param url  URL de la llamada AJAX
	 */
	realizarPeticionURL : function(url) {
		oAjax = getXmlHttpRequest();
		if (!oAjax) {
			return;
		}
		oAjax.onreadystatechange = function() {
									if ((oAjax.readyState == 4) 
											&& (oAjax.status == 200)) {
										sHTML = oAjax.responseText;
										//activa el edificio si no era el que ya estaba activo en esta llamada
										if (!edificioActivo) {
											oElementoContenedor.innerHTML += sHTML;
											edificio.activar();
										}
									}
								};
		oAjax.open("POST", url, true);
		oAjax.send(null);
	},
	
	/**
	 * Le da la clase activo al elemento que se activa
	 */
	activar : function() {
		//Si tiene clase: primero y ultimo
		if (oEl.className) {
			var clase = oEl.className + " activo";
			oEl.className = clase;
		} else {
			oEl.className = "edificio activo";
		}
	},
	
	/**
	 * Si hay un edificio activo se desactiva 
	 * 
	 * @param  id  Identificador del elemento que hay que desactivar
	 * @return Devuelve verdadero si el que estaba activo era el edificio
	 * que hizo la llamada, para que no vuelva a mostrarlo.
	 */
	desactivar : function(id) {
		var liActivo = document.getElementById(id);
		edificioActivo = false;
		if (liActivo != 'undefined') {
			var lis = liActivo.parentNode.getElementsByTagName("li");
			for (i = 0; i < lis.length; i++) {
			    // Si hay algun li que contenga "activo" en el atributo clase lo repliega
				var clase = lis[i].className;
				if (clase != null) {
				    if (clase.match(/activo/)) {
						if (lis[i].id == id) {
							edificioActivo = true;
						}
						edificio.replegar(lis[i]);
					}
				}
			}
		}
		return edificioActivo;
	},
	
	/** 
	 * Elimina la informacion del edificio activo y le quita 
     * al elemento la clase activo
     *
     * @param li  Elemento de la lista que hay que replegar
     */
	replegar : function (li) {
		//Quitamos del atributo clase "activo"
		var clase = li.className.replace(/activo/, "");
		li.className = clase;
		var capaAplicacion = document.getElementById("a_edificio");
		while (capaAplicacion.hasChildNodes()) {
			capaAplicacion.removeChild(capaAplicacion.firstChild);
		}
		capaAplicacion.parentNode.removeChild(capaAplicacion);
	}
}