var oHttpRequest = null;
var oElementoContenedor = null;
var nombreCapaFade = null;

// Variables Yellow Fade Technique
var FADE_RED = 77;
var FADE_GREEN = 77;
var FADE_BLUE = 77;
var FADE_HOLD = 500;
var FADE_SPEED = 100;
var FADE_STEP = 9;
var fade_r = FADE_RED
var fade_g = FADE_GREEN
var fade_b = FADE_BLUE


/**
 * Valida el formulario de busqueda de disponibilidad 
 * 
 * @return Devuelve true si es valido
 */
function validarAplicacionDisponibilidadForm(formulario) {
	var sMensaje = "";
	var bFlag = validateAplicacionDisponibilidadForm(formulario);
	if (bFlag) {
		if (formulario.numHabitaciones.value == 0) {
			bFlag = false;
			sMensaje += "N\u00FAmero de habitaciones es obligatorio.\n";
		}
		if (!bFlag) {
			alert(sMensaje);
		}
	}
	return bFlag;
}

/**
 * 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;
}

/**
 * Realiza la peticion a la url 
 * @param url URL a la que se realizará la petición
 * @param parametros Parametros de la petición separados por '|'
 * @param idElementoContenedor id del elemento contenedor del resultado de la petición
 */
function realizarPeticionURL(url, idElementoContenedor, parametros) {
     oHttpRequest = getXmlHttpRequest();
	  if (!oHttpRequest) {
	  	alert('No se ha podido realizar la consulta de disponibilidad.');
		return false;
	  }
	var sParametros = "";
    if (typeof(parametros)!='undefined' && parametros!="") {
   		var aParametros = parametros.split('|');
			if (aParametros.length > 0) {
	      		sParametros = aParametros[0] + "=" +  encodeURI(document.getElementById(aParametros[0]).value);
		     	for (var i=1; i<aParametros.length; i++) {
		    		sParametros += "&" + aParametros[i]+ "=" + encodeURI(document.getElementById(aParametros[i]).value);
				}
			}
	 }
	  oElementoContenedor =  document.getElementById(idElementoContenedor);
	  oHttpRequest.onreadystatechange = procesarRespuestaPeticion;
      oHttpRequest.open('POST', url, true);
      if (sParametros!="") {
	      oHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	      oHttpRequest.setRequestHeader("Content-length",sParametros.length);
	      oHttpRequest.setRequestHeader("Connection", "close");
	      oHttpRequest.send(sParametros);
      } else {
      	oHttpRequest.send(null);
      }
      destruirObjetos();
      return true;
   }

 

/**
 * Procesa la respuesta obtenida de la peticion mostrando el resultado con la tecnica de fade
 */
function procesarRespuestaPeticion() {
      if (oHttpRequest.readyState == 4) {
         if (oHttpRequest.status == 200 && oElementoContenedor) {
         	  oElementoContenedor.innerHTML = oHttpRequest.responseText;
               if (nombreCapaFade!=null) {
               	fade(nombreCapaFade);
               }
           } else {
             alert('No se ha podido realizar la consulta de disponibilidad.');
         }
      }
   }

   
/**
 * Destruye los objetos de memoria
 */
function destruirObjetos() {
	if (oElementoContenedor) {
		oElementoContenedor == null;
	}
	if (oHttpRequest) {
		oHttpRequest == null;
	}
}

/**
*  Muestra la capa cargando
*/
function mostrarCapaCargando() {
	document.getElementById("id_separador").style.display="none";
   	document.getElementById("cargando").style.display="block";
   	document.getElementById("cargando").innerHTML = "<img src=\"pages/img/es/aplicaciones/cargando.gif\" alt=\"cargando\" />";
}


/**
 * Realiza la consulta de disponibilidad de un hotel
 * @param formulario Formulario para validar
 * @url URL de a realizar la peticion
 * @parametros parametros de la peticion
 */   
function realizarConsulta(formulario,url, parametros) {
    if (validarAplicacionDisponibilidadForm(formulario)) {
    	mostrarCapaCargando();
    	nombreCapaFade = "id_separador";
   	 	realizarPeticionURL(url,"a_buscador_disponibilidad", parametros);
  	 	
 	}
}

/**
* Funcion Yellow Fade Technique
*/
function fade(container) {
	if (fade_r == 0) fade_r == FADE_RED;
	if (fade_g == 0) fade_g == FADE_GREEN;
	if (fade_b == 0) fade_b == FADE_BLUE;
	if (fade_r + fade_g + fade_b != (0)) {	
		document.getElementById(container).style.background = "rgb(" + fade_r + "," + fade_g + "," + fade_b + ")";
		if ((fade_r == FADE_RED) && (fade_g == FADE_GREEN) && (fade_b == FADE_BLUE)) {
			setTimeout('fade("' + container + '")', FADE_HOLD)
		}else {	
			setTimeout('fade("' + container + '")', FADE_SPEED)
		}
		if ((fade_r <= 0) || (fade_r - FADE_STEP < 0)) fade_r = 0; else fade_r = fade_r - FADE_STEP;
		if ((fade_g <=0) || (fade_g - FADE_STEP < 0)) fade_g = 0; else fade_g = fade_g - FADE_STEP;
		if ((fade_b <=0) || (fade_b - FADE_STEP < 0)) fade_b  = 0; else fade_b = fade_b - FADE_STEP;
	} else {	
		document.getElementById(container).style.background = "rgb(" + fade_r + "," + fade_g + "," + fade_b + ")";
		fade_r = FADE_RED;
		fade_g = FADE_GREEN;
		fade_b = FADE_BLUE;
	}
}
