/*
 * General lib of HotelManager
 */

var HOTELMANAGER = function() {};

(function() {

HOTELMANAGER.config = {};

HOTELMANAGER.utils = {
	Onload: function( oFunction ) {
		YAHOO.util.Event.onDOMReady(oFunction, this, true);
	},
	getObject: function( oInc ) {
		var oEl;
		if (typeof(oInc) == 'string') {
			oEl = document.getElementById(oInc);
			if (oEl) return oEl;
			
			oEl = window[ oInc ];
			if (oEl) return oEl;
		}

		if (typeof(oInc) == 'object') {
			oEl = oInc;
			if (oEl) return oEl;
		}

		return false;

	},
	isEmail: function( str ) {
		var regex = new RegExp('^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$');
		var result = regex.exec( str );
		if (!result) return false;

		return true;
	}
};

HOTELMANAGER.newsletter = {
	msgError: 'Error en el formato de mail',
	oEl: {},
	init: function ( params ) {
		this.oEl.form = HOTELMANAGER.utils.getObject( params.form );
		if (!this.oEl.form) return false;

		this.oEl.input = HOTELMANAGER.utils.getObject( params.input );
		if (!this.oEl.input) return false;

		this.oEl.submit = HOTELMANAGER.utils.getObject( params.submit );
		if (!this.oEl.input) return false;

		if (params.msgerror) this.msgError = params.msgerror;


		YAHOO.util.Event.addListener( HOTELMANAGER.newsletter.oEl.submit, "click", function(){
			HOTELMANAGER.newsletter.submit();
		});
	},
	submit: function( params ) {
		var oForm = HOTELMANAGER.newsletter.oEl.form;
		var oInput = HOTELMANAGER.newsletter.oEl.input;

		if (!HOTELMANAGER.utils.isEmail( oInput.value )) {
			alert(this.msgError);
			return false;
		}

		var strlocation = oForm.action+'?email='+oInput.value;
		strlocation += '&lang='+oForm.lang.value;
		strlocation += '&codigoHotel='+oForm.codigoHotel.value;
		strlocation += '&idPartner='+oForm.idPartner.value;
		strlocation += '&idPrm='+oForm.idPrm.value;
		strlocation += '&idONg='+oForm.idONg.value;

		window.location = strlocation;
	},
	iframe: function( params ) {
		if (!window.location.search) return false;

		var iframe = HOTELMANAGER.utils.getObject( params.iframe );
		
		if (pageTracker)
			iframe.src = pageTracker._getLinkerUrl(params.url + String(window.location.search));
		else
			iframe.src = params.url + String(window.location.search);
	}
};

HOTELMANAGER.booking = {
	callback: {
		save: null
	},
	oErr: {
		noselect: 'Necesita seleccionar un hotel'
	},
	oEl: {
		form: null,
		destinos: null,
		hoteles: null,
		link: null
	},
	init: function( params ) {
		var utils = HOTELMANAGER.utils;
		var oEl = HOTELMANAGER.booking.oEl;
		var oErr = HOTELMANAGER.booking.oErr;

		oEl.form	= utils.getObject( 'form_buscador' );
		oEl.destinos	= utils.getObject( 'destinos' );
		oEl.hoteles	= utils.getObject( 'hoteles' );
		oEl.link	= utils.getObject( 'link_reservas' );

		HOTELMANAGER.booking.callback.save = params.save;

		if (params.errors) {
			if (params.errors.noselect)	oErr.noselect = params.errors.noselect;
		}

		if (	params.form	) oEl.form 	= utils.getObject(	params.form	);
		if (	params.destinos	) oEl.destinos 	= utils.getObject(	params.destinos	);
		if (	params.hoteles	) oEl.hoteles 	= utils.getObject(	params.hoteles	);
		if (	params.link	) oEl.link 	= utils.getObject(	params.link	);

		if ( oEl.destinos ) {
			YAHOO.util.Event.addListener( HOTELMANAGER.booking.oEl.destinos, "change", function(){
				HOTELMANAGER.booking.ajax.onChangeDestinos();
			});
			YAHOO.util.Event.addListener( HOTELMANAGER.booking.oEl.hoteles, "change", function() {
				HOTELMANAGER.booking.ajax.onChangeHotel();
			});
			
			HOTELMANAGER.booking.ajax.startRequest();
		}

		return true;
	},
	destinos: function( params ) {
		HOTELMANAGER.booking.init( params );
		/*

		HOTELMANAGER.booking.callback.save = params.save;
		HOTELMANAGER.booking.oEl.form = HOTELMANAGER.utils.getObject( params.form );
		HOTELMANAGER.booking.oEl.destinos = HOTELMANAGER.utils.getObject( params.destinos );
		HOTELMANAGER.booking.oEl.hoteles = HOTELMANAGER.utils.getObject( params.hoteles );

		//onchange="javascript:options_hoteles(this.options[this.selectedIndex]);"
		YAHOO.util.Event.addListener( HOTELMANAGER.booking.oEl.destinos, "change", function(){
			HOTELMANAGER.booking.ajax.onChangeDestinos();
		});
		YAHOO.util.Event.addListener( HOTELMANAGER.booking.oEl.hoteles, "change", function() {
			HOTELMANAGER.booking.ajax.onChangeHotel();
		});


		HOTELMANAGER.booking.ajax.startRequest();
		return true;
		*/
	},
	getUrlFromGet: function( params ) {
		var utils = HOTELMANAGER.utils;
		var oEl = HOTELMANAGER.booking.oEl;

		if (    params.form     ) oEl.form      = utils.getObject(      params.form     );

		var base = "http://www.idiso.com/csl/reservations/jsp/C_Search_Availability.jsp";

		var reg_date = new RegExp('codigoHotel=([0-9]+)');
		var select_url = reg_date.exec( String(window.location.search) );
		if (select_url && select_url[1] > 0)
			base = 'http://www.idiso.com/csl/reservations/jsp/C_Rates.jsp';


		var reg_date = new RegExp('.*(tipoTarifa).*');
		var select_url = reg_date.exec( String(window.location.search) );
		if (select_url) {
			if (oEl.form)
				oEl.form.style.display = "none";

			base = "http://www.idiso.com/csl/reservations/jsp/C_Search_Dates.jsp"
		}
		
		var iframe = HOTELMANAGER.utils.getObject( 'iframeBEIdiso' );

		if (pageTracker)
			iframe.src = pageTracker._getLinkerUrl(base + String(window.location.search));
		else
			iframe.src = base + String(window.location.search);

		return true;
	}
};

HOTELMANAGER.booking.ajax = {
	onChangeDestinos: function () {
		var config = HOTELMANAGER.config;
		var destino = HOTELMANAGER.booking.oEl.destinos.options[ HOTELMANAGER.booking.oEl.destinos.selectedIndex ];
		var oFORM = HOTELMANAGER.booking.oEl.form;
		var hsel = HOTELMANAGER.booking.oEl.hoteles;
		var indice = parseInt(destino.value);

		//oFORM.destino.value = HOTELMANAGER.config.DESTS[ Number(indice-1) ].CODE;
		hsel.length = 0;
		hel = document.createElement('option');
		hel.text = "Todos";
		hel.value = "0";
		try {
			hsel.add(hel, null); // standards compliant; doesn't work in IE
		} catch(ex) {
			hsel.add(hel); // IE only
		}

		if (HOTELMANAGER.config.DESTS.length > 0) {
			for( var i = 0; i < HOTELMANAGER.config.DESTS.length; i++) {
				var dst = HOTELMANAGER.config.DESTS[i];
				if (indice == 0) {
					for (var j = 0; j < HOTELMANAGER.config.HOTELS[dst.ID].length; j++) {
						hel = document.createElement('option');
						hel.text = HOTELMANAGER.config.HOTELS[dst.ID][j].NAME;
						hel.value = HOTELMANAGER.config.HOTELS[dst.ID][j].CODE;
						if (oFORM.codigoHotel && oFORM.codigoHotel.value == config.HOTELS[dst.ID][j].CODE) hel.selected = true;
						try {
							hsel.add(hel, null); // standards compliant; doesn't work in IE
						} catch(ex) {
							hsel.add(hel); // IE only
						}
					}

				}
				if (HOTELMANAGER.booking.oEl.destinos.value == 0) oFORM.zona.value = 0;
				if (dst.ID == HOTELMANAGER.booking.oEl.destinos.value) {
					oFORM.zona.value = dst.CODE;
					break;
				}
			}
		}
				
		if (indice == 0) return;
		if (config.HOTELS[indice].length > 0) {
			hsel.length = 0;

			hel = document.createElement('option');
	                hel.text = "Todos";
	                hel.value = "0";
	               try {
	                       hsel.add(hel, null); // standards compliant; doesn't work in IE
	               } catch(ex) {
	                       hsel.add(hel); // IE only
	               }


			for (var j = 0; j < config.HOTELS[indice].length; j++) {
				hel = document.createElement('option');
				hel.text = config.HOTELS[indice][j].NAME;
				hel.value = config.HOTELS[indice][j].CODE;
				if (oFORM.codigoHotel && oFORM.codigoHotel.value == config.HOTELS[indice][j].CODE) hel.selected = true;
				try {
					hsel.add(hel, null); // standards compliant; doesn't work in IE
				} catch(ex) {
					hsel.add(hel); // IE only
				}
			}
		}
		this.onChangeHotel(hsel.options[hsel.selectedIndex]);
	},
	onChangeHotel: function (hotelOpt) {
		if (!hotelOpt) {
			hotelOpt = HOTELMANAGER.booking.oEl.hoteles.options[ HOTELMANAGER.booking.oEl.hoteles.selectedIndex ];
		}
		HOTELMANAGER.booking.oEl.form.codigoHotel.value = hotelOpt.value;
		HOTELMANAGER.booking.callback.save;
	},
	updateHotelCode: function () {
		var codigoHotel_reg = new RegExp('codigoHotel=([0-9]+)');
		var codigoHotel = codigoHotel_reg.exec( String(window.location.search) );
		if (codigoHotel != null) HOTELMANAGER.booking.oEl.form.codigoHotel.value = codigoHotel[1];
	},
	updateZoneCode: function () {
		var zona_reg = new RegExp('zona=([0-9]+)');
		var zona = zona_reg.exec( String(window.location.search) );
		if (zona != null) HOTELMANAGER.booking.oEl.form.zona.value = zona[1];
	},
	handleSuccess: function(oRequest , oParsedResponse) {
		HOTELMANAGER.config = oParsedResponse.results[0];

		var config = HOTELMANAGER.config;
		var sel = HOTELMANAGER.booking.oEl.destinos;
		var hsel = HOTELMANAGER.booking.oEl.hoteles;
		HOTELMANAGER.booking.ajax.updateHotelCode();
		HOTELMANAGER.booking.ajax.updateZoneCode();
		if (oParsedResponse.results[0].DESTS && oParsedResponse.results[0].DESTS.length > 0) {
			var el, hel;
			for (var i = 0; i < oParsedResponse.results[0].DESTS.length; i++) {
				el = document.createElement('option');
				el.text = oParsedResponse.results[0].DESTS[i].NAME;
				el.value = oParsedResponse.results[0].DESTS[i].ID;
				if (HOTELMANAGER.booking.oEl.form.zona.value == oParsedResponse.results[0].DESTS[i].CODE) el.selected = true;
				try {
					sel.add(el, null); // standards compliant; doesn't work in IE
				} catch(ex) {
					sel.add(el); // IE only
				}

				if (oParsedResponse.results[0].HOTELS[el.value] && oParsedResponse.results[0].HOTELS[el.value].length > 0) {
					for (var j = 0; j < oParsedResponse.results[0].HOTELS[el.value].length; j++) {
						hel = document.createElement('option');
						hel.text = oParsedResponse.results[0].HOTELS[el.value][j].NAME;
						hel.value = oParsedResponse.results[0].HOTELS[el.value][j].CODE;
						if (HOTELMANAGER.booking.oEl.form.codigoHotel.value == oParsedResponse.results[0].HOTELS[el.value][j].CODE) hel.selected = true;
						//alert
						try {
							hsel.add(hel, null); // standards compliant; doesn't work in IE
						} catch(ex) {
							hsel.add(hel); // IE only
						}
		
					}
				}
			}
		}
		HOTELMANAGER.booking.ajax.onChangeDestinos();
	},

	handleFailure:function(oRequest , oParsedResponse) { 
		// Failure handler
	},

	startRequest:function() {
		var invData = new YAHOO.util.DataSource("");
		invData.responseType = YAHOO.util.DataSource.TYPE_JSON;
// 		invData.maxCacheEntries = 4;

		invData.responseSchema = {
			resultsList : "HM"
// 				fields : [ 
// 					{ key: "DESTS" },
// 					{ key: "HOTELS" }
// 				]
		};
		invData.sendRequest("../config/config.js", HOTELMANAGER.booking.ajax.callback);
	}
};

HOTELMANAGER.booking.ajax.callback = {
	success: HOTELMANAGER.booking.ajax.handleSuccess,
	failure: HOTELMANAGER.booking.ajax.handleFailure,
	scope: HOTELMANAGER.booking.ajax,
	timeout: 5000,
	cache:false
};

HOTELMANAGER.booking.buildLink = function( params ) {
	var utils = HOTELMANAGER.utils;
	var oEl = HOTELMANAGER.booking.oEl;
	var oErr = HOTELMANAGER.booking.oErr;

	var oFORM = oEl.form;
	var linkReservas = oEl.link;
	//var oFORM = utils.getObject( params.form  );
	//var linkReservas = utils.getObject( params.link );
	if ( params.msgError ) msgError = params.msgError;


	var vDiaIni = oFORM.en_dia.value;
	var varray = changeFormat( oFORM.en_mesano.value );
	var vMesIni = varray[0];
	var vAnyoIni = varray[1];


	var vDiaFin = oFORM.sa_dia.value;
	var varray = changeFormat( oFORM.sa_mesano.value );
	var vMesFin = varray[0];
	var vAnyoFin = varray[1];

	var vNoHab = Number( oFORM.no_hab.value );
	var vNoPax = Number( oFORM.no_pax.value );

	if (Number(oFORM.no_pax_nin.value) > 0)
		vNoPax += Number(oFORM.no_pax_nin.value);

	
	var url = oFORM.base.value+'.html';

	var urlOptions = "";
	urlOptions += "?codigoHotel=" + oFORM.codigoHotel.value;
	if (oFORM.zona) urlOptions += "&zona=" + oFORM.zona.value;
	urlOptions += "&lang=" + oFORM.idioma.value;
	urlOptions += "&idPartner="+ oFORM.idPartner.value;
	urlOptions += "&idPrm=" + oFORM.idPrm.value;
	urlOptions += "&idONg=" + oFORM.idONg.value;
	urlOptions += "&idNom=" + oFORM.idNom.value;
	urlOptions += "&irListaHoteles="+ oFORM.irListaHoteles.value;

	urlOptions += "&dia=" + vDiaIni;
	urlOptions += "&mes=" + vMesIni;
	urlOptions += "&anio=" + vAnyoIni;
	urlOptions += "&diaHasta=" + vDiaFin;
	urlOptions += "&mesHasta=" + vMesFin;
	urlOptions += "&anioHasta=" + vAnyoFin;
	urlOptions += "&personas=" + vNoPax;
	urlOptions += "&habitaciones=" + vNoHab;

	//if (oFORM.codigoHotel.value < 1 && oFORM.zona) linkReservas.href = "javascript:alert('Necesita seleccionar un hotel');";
	if (oFORM.zona) {
		if (oFORM.zona.value < 1 && oFORM.codigoHotel.value < 1) linkReservas.href = "javascript:alert('"+oErr.noselect+"');";
		else linkReservas.href = url + urlOptions;
	}
	else linkReservas.href = url + urlOptions;


};

})();
