﻿function updateInput(calendar, idinput)
{
	var selecteddate = calendar.getSelectedDates();
	if(selecteddate.length > 0)
	{
		selecteddate = selecteddate[0];
	}
	else
	{
		selecteddate = calendar.cfg.getProperty("mindate");
	}
	$("#" + idinput).val(dateToString(selecteddate));
	if(calendar.ispopup)
	{
		calendar.hide();	//hide calendar
	}	
}

function updateCalendar(idel, cal)
{
	var selecteddate = document.getElementById(idel).value;		
	var pagechanged = false;
	var olddate = cal.getSelectedDates();
	if (olddate.length > 0)
	{
		olddate = olddate[0];
	}
	else
	{
		olddate = calendar.cfg.getProperty("mindate");
	}
	if(selecteddate.split('-').length == 3 && (stringTodate(selecteddate).getTime() != olddate.getTime()))
	{
		selecteddate = stringTodate(selecteddate);
		cal.select(selecteddate);//select the date
		if(olddate.getMonth() != selecteddate.getMonth() || olddate.getFullYear() !=  selecteddate.getFullYear())
		{
			cal.cfg.setProperty("pagedate", (selecteddate.getMonth()+1) + '-' + selecteddate.getFullYear());				
			pagechanged = true;
		}																	
		if(YAHOO.calendar.isallotmentmode && pagechanged)
		{				
			pageInit('', [], cal);	
		}
		else
		{
			cal.render();
		}						
	}	
}

function syncCalendar(idel, cal1, cal2)
{
	var caldate1 = cal1.getSelectedDates()[0];
	var caldate2 = cal2.getSelectedDates()[0];
	if(caldate1 >= caldate2)
	{
		caldate2 = new Date(caldate1.getTime() + (3600 * 1000 * 25)); /* 25 to take care of the change of time (+-1h) during autumn and spring */	
		//update linked field 2		
		document.getElementById(idel).value = dateToString(caldate2);
		updateCalendar(idel, cal2);			
	}
}				

function updateArrivalDate(type, args, obj) 
{
	updateInput(YAHOO.calendar["arrivaldate"], "arrivaldatetrigger");			
	syncCalendar("departuredatetrigger", YAHOO.calendar["arrivaldate"], YAHOO.calendar["departuredate"]);	
}

function updateDepartureDate(type , args, obj) 
{
	updateInput(YAHOO.calendar["departuredate"], "departuredatetrigger");	
}	

function stringTodate(str)
{
	var temp = str.split('-');
	var d = Number(temp[0]);
	var m = Number(temp[1]) - 1;
	var y = Number(temp[2]);
	return new Date(y, m, d);
}

function dateToString(dateobj)
{
	var d = dateobj.getDate();
	var m  = dateobj.getMonth() + 1;
	var y = dateobj.getFullYear();			
	if(d < 10)
	{
		d = '0' + String(d);
	}
	if(m < 10)
	{
		m = '0' + String(m);
	}				
	return d  + '-' + m + '-' + y;
}

function toogleCalendar(mevent,idel)
{
	$("#" + idel).toggle();
}

function pageInit(type, args, obj) 
{	
	var mydate = obj.cfg.getProperty("pagedate");
	if(mydate < obj.cfg.getProperty("mindate"))
	{
		mydate = obj.cfg.getProperty("mindate");
	}
	mydate = dateToString(mydate); 
	if(YAHOO.calendar.renderdata.hasOwnProperty(mydate))
	{
		allotmentDayRender(obj, YAHOO.calendar.renderdata[mydate]);		
	}
	else
	{	
		var containerid = obj.oDomContainer.id;			
		$('div[@id="' + containerid + '"]').append(getLoader());
		$.getJSON("/feed/search/allotmentday.cfm", {hotel:YAHOO.calendar.hotel, startdate:mydate}, function(json){registerRenderer(obj, mydate, json);}); 				
	}			
}


function registerRenderer(calendar, mydate , renderdata)
{
	YAHOO.calendar.renderdata[mydate] = renderdata;	
	allotmentDayRender(calendar, renderdata);
}

function registerHotel(hotel)
{
	YAHOO.calendar.hotel = hotel;	
}

function allotmentDayRender(calendar, renderdata)
{
	calendar.cfg.setProperty("DATE_FIELD_DELIMITER", "/");
	if(renderdata.OPENDAY > '')
	{
		calendar.addRenderer(renderdata.OPENDAY, calendar.renderCellStyleHighlight1);		
	}
	if(renderdata.CLOSEDAY > '')
	{
		calendar.addRenderer(renderdata.CLOSEDAY, calendar.renderCellStyleHighlight2);		
	}
	if(renderdata.UNDEFINEDDAY > '')
	{
		calendar.addRenderer(renderdata.UNDEFINEDDAY, calendar.renderCellStyleHighlight3);		
	}
	calendar.cfg.setProperty("DATE_FIELD_DELIMITER", "-");
	//we must render the calendar 
	calendar.render();
	var containerid = calendar.oDomContainer.id;
	$('div[@id="' + containerid + '"]').append(getLegende());
}

function getLegende()
{	
	return YAHOO.calendar.legende;
}

function getLoader()
{
	return 	'<img src="/images/calendar-loader.gif" alt="calendar-loader" class="aloader" />';
}

function setLegende(t1, t2, t3, t4)
{
	var temp = '<div class="legende">'
	temp += '<span><img src="/images/olddayico.gif" /> ' + t1  +'</span>';
	temp += '<span><img src="/images/opendayico.gif" /> ' + t2  +'</span>';
	temp += '<span><img src="/images/closedayico.gif" /> ' + t3  +'</span>';
	temp += '<span><img src="/images/notsetdayico.gif" /> ' + t4  +'</span>';
	temp += '</div>' 
	YAHOO.calendar.legende = temp;
}



YAHOO.namespace("calendar");		
YAHOO.calendar.renderdata = new Object();
YAHOO.calendar.hotel = 0;
YAHOO.calendar.legende = "";
YAHOO.calendar.isallotmentmode = false;

YAHOO.calendar.setCalendar = function(args)
{		
	var defaultdate = stringTodate(args.defaultdate);
	var mindate = stringTodate(args.mindate);
	YAHOO.calendar[args.ref] = new YAHOO.widget.Calendar(args.ref, args.container, {close:false});	
	//setup the arrivaldate calendar
	cal = YAHOO.calendar[args.ref];
	cal.ispopup = args.ispopup;
	localize(cal);//set the calendar in the correct langue	
	cal.cfg.setProperty("START_WEEKDAY", 1);		
	cal.cfg.setProperty("mindate", mindate);
	cal.select(defaultdate);		
	if(YAHOO.calendar.isallotmentmode)
	{
		cal.cfg.setProperty("DATE_FIELD_DELIMITER", "-");
		cal.changePageEvent.subscribe(pageInit, cal, true);						
		pageInit('', [], cal);	
	}	
	else
	{
		cal.cfg.setProperty("pagedate", (defaultdate.getMonth()+1) + '/' + defaultdate.getFullYear());
		cal.render();
		cal.cfg.setProperty("DATE_FIELD_DELIMITER", "-");
	}
	//update the linked input field when a date is selected
	cal.selectEvent.subscribe(args.updatelinked, cal, true);						
	// Listener to show the arrivaldate Calendar when the field is clicked
	if (cal.ispopup)
	{
		YAHOO.util.Event.addListener(args.trigger, "click", toogleCalendar, args.container, true);
		YAHOO.util.Event.addListener(args.alttrigger, "click", toogleCalendar, args.container, true);
	}	
	$("#" + args.trigger).keyup(function(){updateCalendar(args.trigger, YAHOO.calendar[args.ref])});
	$("#" + args.trigger).click(function(){$(this).select()});		
};

YAHOO.calendar.init = function(p_fn, p_ar, p_obj) 
{
	var args = new Object();
	var isnotpopup = p_obj.hasOwnProperty("ispopup") && p_obj.ispopup == false;
	YAHOO.calendar.isallotmentmode = p_obj.hasOwnProperty("isallotmentmode") && p_obj.isallotmentmode ? true : false;
	args.mindate = p_obj.minarrivaldate;
	args.defaultdate = p_obj.arrivaldate;
	args.ref = "arrivaldate"; 
	args.container = "arrivaldatecontainer";
	args.trigger = "arrivaldatetrigger";
	args.alttrigger = "arrivaldatealttrigger";
	args.updatelinked = updateArrivalDate;
	args.ispopup = !isnotpopup;
	YAHOO.calendar.setCalendar(args);
	args = new Object();
	args.mindate = p_obj.mindeparturedate;
	args.defaultdate = p_obj.departuredate;	
	args.ref = "departuredate"; 
	args.container = "departuredatecontainer";
	args.trigger = "departuredatetrigger";
	args.alttrigger = "departuredatealttrigger";
	args.updatelinked = updateDepartureDate;
	args.ispopup = !isnotpopup;
	YAHOO.calendar.setCalendar(args);		
};<!-- 

 -->