﻿/*
	Finder.js	Utilidades para el buscador
*/

function DsFinder(Options)
{
	// -- Extender Options y Css Atributos
	Ds.Extend(this, DsFinder.DefOptions.Or(Options));
	
	// -- Fin Constructor
	return this;
}

// --- CalSetup
DsFinder.prototype.CalSetup = function(dtStart, dtEnd)
{
	// -- Default Dates
	this._dtEntrada = __yyyyMMdd2Date(dtStart);
	this._dtSalida  = __yyyyMMdd2Date(dtEnd);
	
	var e = document.getElementById(this._fFEntrada);
	e.value = m_CalCtx.printFormattedDate(this._dtEntrada, this._FmtDate, false);

	e = document.getElementById(this._fFSalida);
	e.value = m_CalCtx.printFormattedDate(this._dtSalida, this._FmtDate, false);
	
	// -- Update Noches
	this.UpdateDays();
}

// --- UpdateDays
DsFinder.prototype.UpdateDays = function()
{
	var e = document.getElementById(this._fNoches);
	
	this._nNoches = __DaysSpan(this._dtEntrada,this._dtSalida);
	e.value  = this._nNoches; 
}

// --- OnFEntradaChange
DsFinder.prototype.OnFEntradaChanged = function(o)
{
	// o {id,date,dd,mm,yyyy}
	this._dtEntrada  = o.date;
	var nNoches = __DaysSpan(this._dtEntrada,this._dtSalida);
	
	if( nNoches < 1 )
	{
		var dtSalida = this._dtSalida = __ZeroDate(this._dtEntrada,1),
		    e = document.getElementById(this._fFSalida);
		
			e.value = m_CalCtx.printFormattedDate(this._dtSalida, this._FmtDate, false);
	}
	
	this.UpdateDays();
}

// --- OnFSalidaChange
DsFinder.prototype.OnFSalidaChanged = function(o)
{
	this._dtSalida = o.date;
	this.UpdateDays();
}

// --- SetNRooms
DsFinder.prototype.SetNRooms = function(n)
{
	Ds.$( this._FieldPrefix + "NRooms").SetValue(n);
}

DsFinder.prototype.SetRoomValues = function(Id, Type, Age1, Age2)
{
	Ds.$( this._FieldPrefix + "TRoom" + Id ).SetValue(Type);
	Ds.$( this._FieldPrefix + "Age_"  + Id + "_1" ).SetValue(Age1);
	Ds.$( this._FieldPrefix + "Age_"  + Id + "_2" ).SetValue(Age2);
}

DsFinder.prototype.UpdateAges = function(Id)
{
	var nMen  = Ds.$( this._FieldPrefix + "TRoom" + Id).GetValue().substr(2,1);
	var eAge1 = Ds.$( this._FieldPrefix + "Age_" + Id + "_1");
	var eAge2 = Ds.$( this._FieldPrefix + "Age_" + Id + "_2");
	var oShow = {display:"inline-block"}
	var oHide = {display:"none"}
	
	eAge1.SetStyle( nMen != "0" ? oShow : oHide );
	eAge2.SetStyle( nMen == "2" ? oShow : oHide );
}

DsFinder.prototype.NRoomsChanged = function(e)
{
	e          = Ds.$(e);
	var nRooms = parseInt(e.GetValue());
	var oShow  = {display:"inline-block"};
	var oHide  = {display:"none"};
	
	// -- Comprobar tipo de habitación
	for( var n = 1; n < 6; n++ )
	{
		var Id = this._FieldPrefix + "BxRoom" + n;
		Ds.$(Id).SetStyle(n <= nRooms ? oShow : oHide);
	}
	
	//window.setTimeout("m_CalCtx.HideAll()", 500);
	return false;
}

DsFinder.prototype.TRoomChanged = function(Id)
{
	// -- Ages
	this.UpdateAges(Id);
	
	return false;
}


// -- Submit
DsFinder.prototype.Submit = function() {
	// -- Comprobar Fechas
	if (this._nNoches <= 0) {
		alert('El número de noches tiene que ser mayor que "1"');
		return false;
	}

	// -- Obtener ciudad
	var Ct = m_AutoC.CurResult();
	if (null != Ct && "" != Ct)
		Ds.$("fCtPK").SetValue(Ct);

	// -- Fechas
	Ds.$("fFEntrada").SetValue(__Dt2yyyyMMdd(this._dtEntrada));
	Ds.$("fFSalida").SetValue(__Dt2yyyyMMdd(this._dtSalida));

	// -- Enviar Formulario
	document.forms['FormFinder'].submit();
	return false;
}

// -- HaHtAvail
DsFinder.prototype.HaHtAvail = function()
{
	// -- Comprobar Fechas
	if( this._nNoches <= 0 )
	{
		alert( 'El número de noches tiene que ser mayor que "1"' );
		return false;
	}

	// -- Fechas
	Ds.$("fFEntrada").SetValue(__Dt2yyyyMMdd(this._dtEntrada));
	Ds.$("fFSalida").SetValue( __Dt2yyyyMMdd(this._dtSalida));
	
	document.forms['FormAvail'].submit();
	return false;
}

// -- HaHtAjxAvail
DsFinder.prototype.HaHtAjxAvail = function(sHtCod)
{
	// -- Comprobar Fechas
	if( this._nNoches <= 0 )
	{
		alert( 'El número de noches tiene que ser mayor que "1"' );
		return false;
	}

	// -- Fechas
	Ds.$("fAjxFEntrada").SetValue(__Dt2yyyyMMdd(this._dtEntrada));
	Ds.$("fAjxFSalida").SetValue( __Dt2yyyyMMdd(this._dtSalida));

	_Hotel.HaAvail(sHtCod);	
	return false;
}

// --- Default Options
DsFinder.DefOptions = { _FieldPrefix: "f",
						_fFEntrada  : "_fFEntrada",
						_fFSalida   : "_fFSalida",
						_fNoches    : "fNoches",
						_FmtDate    : "d-sp-F-sp-Y-cc-sp-l",
						_dtEntrada  : null,
						_dtSalida   : null,
						_nNoches    : 0
					  };


// --- Eventos
function FnEmbeded_OnFEntradaChanged(o) { FinderEmbeded.OnFEntradaChanged(o); }
function FnEmbeded_OnFSalidaChanged(o)  { FinderEmbeded.OnFSalidaChanged(o);  }
function FnAjax_OnFEntradaChanged(o)    { FinderAjax.OnFEntradaChanged(o); }
function FnAjax_OnFSalidaChanged(o)     { FinderAjax.OnFSalidaChanged(o);  }
function FnEmbeded_NRoomsChanged(e)     { return FinderEmbeded.NRoomsChanged(e); }
function FnAjax_NRoomsChanged(e)        { return FinderAjax.NRoomsChanged(e);    }
function FnEmbeded_TRoomChanged(Id)     { return FinderEmbeded.TRoomChanged(Id); }
function FnAjax_TRoomChanged(Id)        { return FinderAjax.TRoomChanged(Id);    }


// --- Objetos estáticos
var FinderEmbeded = new DsFinder();
var FinderAjax    = new DsFinder({_FieldPrefix:"fAjx",_fFEntrada:"_fAjxFEntrada",_fFSalida:"_fAjxFSalida",_fNoches:"fAjxNoches"});


// ------------------------------------
// -- AutoComplete

var m_AutoC    = null; // AutoComplete

function AC_FormatedValue(Item)
{
	var bCity   = Item.Result.substr(0,2) == "Ct";
	var sStCtry = " (" ;

	sStCtry += bCity ? Item.State + ", " : "";
	sStCtry += Item.Country + ")";
	
	return Item.Value + sStCtry;
}

// ------ Utilidades
function __yyyyMMdd2Date(sDt)   { return new Date(parseInt(sDt.substr(0,4),10),
                                                  parseInt(sDt.substr(4,2),10)-1,
                                                  parseInt(sDt.substr(6,2),10) );
                                }
function __ZeroDate(dt,DaysAdd) { return new Date(dt.getFullYear(), dt.getMonth(), dt.getDate()+DaysAdd); }
function __DaysSpan(dt1,dt2)    { return Math.round( (dt2.getTime()-dt1.getTime())/(86400000)); }
function __Dt2yyyyMMdd(dt)
{
	var sYY = "" + dt.getFullYear();
	var nMM = (dt.getMonth() + 1);
	var sMM = "" + nMM;
	var nDD = dt.getDate();
	var sDD = "" + nDD;
	
	if(nDD < 10 )
		sDD = "0" + nDD;
	
	if(nMM < 10 )
		sMM = "0" + nMM;

	return sYY + sMM + sDD;
}

