// calendar.js
// localization for days/months is in javascript.tmpl


var Calendar = {
	
	// deprecated??
	startCal: {},
	endCal: {},


	init: function () { 
		// Debug.log('calendar init');
		// init all calendars and datepickers on page
	
		var dateToday = new Date();
	
		var datepickers = YAHOO.util.Dom.getElementsByClassName( "datepicker", "div");
		
		// render all datepickers
		for (i = 0; i < datepickers.length; i++) {

			var datepicker = datepickers[i];

			var dateField = YAHOO.util.Dom.getElementsByClassName( "dateField", "input", datepicker)[0];
						
			var calendarID = "calendar" + i;

			var calendarIcon = YAHOO.util.Dom.getElementsByClassName( "calendarIcon", "img", datepicker)[0];
			var calendarPopup = YAHOO.util.Dom.getElementsByClassName( "calendarPopup", "div", datepicker)[0];

			var dateField = YAHOO.util.Dom.getElementsByClassName( "dateField", "input", datepicker)[0];
			
			var calendar = new YAHOO.widget.Calendar(calendarID, calendarPopup.id, Calendar.config );
			
			if (YAHOO.util.Dom.hasClass(datepicker, 'allowAllDates')) {
				calendar.cfg.setProperty('mindate', undefined);
			}

			calendar.render();

			YAHOO.util.Event.addListener(dateField, "change", Calendar.parseDate, [dateField, calendar], true);
			if (dateField.value)
				Calendar.parseDate(undefined, [dateField, calendar]);
			
			YAHOO.util.Event.addListener(calendarIcon, "click", Calendar.toggleCal, calendar, true);
			calendar.selectEvent.subscribe(Calendar.handleSelect, [calendar, dateField], true);
		}
	},	
	
	toggleCal: function (e, obj) {
		if (obj.oDomContainer.style.display == "block") {
			obj.oDomContainer.style.display = "none";

		} else {
			obj.oDomContainer.style.display = "block";

		}
	},


	handleSelect: function (type,args,obj) {
		var dates = args[0];
		var date = dates[0];
		var year = date[0], month = date[1], day = date[2];


		var dateField = obj[1];
		dateField.value = day + "/" + month + "/" + year;
		//DEPRECATED
		//if (dateField.id == 'startDate') {
		//	Calendar.startDate = new Date(year, month, day, 0, 0, 0);

		//} else {
		//	Calendar.endDate = new Date(year, month, day, 0, 0, 0);
		//}
		obj[0].hide();
	},
	

	string2date: function (str) {

		str = str.replace(/[^0-9/]+/gi, '/');
		var dateArr = str.split("/");
		if (dateArr.length < 3 || isNaN(dateArr[0]) || isNaN(dateArr[1]) || isNaN(dateArr[2])) { 
			return false;
		} else {
	
			var date = new Date(dateArr[2], dateArr[1] - 1, dateArr[0], 0, 0, 0);
			return date;
			
		}
	},
	
	parseDate: function (e, obj) {

		var dateField = obj[0];
		var calendar = obj[1];
		
		var date = Calendar.string2date(dateField.value);
// alert(date);

		if (date && (date != 'Invalid Date')) {
			calendar.select(date);
			calendar.setMonth(date.getMonth());
			calendar.setYear(date.getFullYear());
			calendar.render();
		} else {
			dateField.value = '';
		}			
			
	}
};

var CalendarGroup = {
	
	yearCalendar: {},

	init: function () {

		var calendarGroups = YAHOO.util.Dom.getElementsByClassName( "calendarGroup", "div");

		// render all calendarGroups
		for (i = 0; i < calendarGroups.length; i++) {
			
			var calendarGroupDiv = calendarGroups[i];
			var calendarGroupID = "calendarGroup" + i;
			CalendarGroup.yearCalendar =  new YAHOO.widget.CalendarGroup(calendarGroupID, calendarGroupDiv.id, Calendar.groupConfig );
			// CalendarGroup.yearCalendar.render();
			
			CalendarGroup.getReservations();

			if (YAHOO.util.Dom.inDocument("setYearSelect")) {
				var setYearSelect = YAHOO.util.Dom.get("setYearSelect");
				YAHOO.util.Event.addListener(setYearSelect, "change", CalendarGroup.setYear, [setYearSelect, CalendarGroup.yearCalendar]);
			}

		}
		
	}, 
	
	
	setYear: function (e, args) {
		var selectBox = args[0];
		var calGroup = args[1];
		var year = selectBox.options[selectBox.selectedIndex].value;
		calGroup.setYear(year);
		calGroup.render();
			
	},
	
	getReservations: function (cal) {


		YAHOO.util.Connect.asyncRequest("get", script + '?module=AjaxCall&function=getReservations&ms=' + new Date().getTime(), CalendarGroup.getReservationsHandler);
		
	},
	
	getReservationsHandler: {
		
		success: function (o) {
			// alert(CalendarGroup.yearCalendar);
			// CalendarGroup.yearCalendar.reset();

			var reservations = eval ( o.responseText  );	

			for (j = 0; j < reservations.length; j++) {
				var reservation = reservations[j];
				var startDate = reservation.startDate;
				// alert(startDate.year);
				var endDate = reservation.endDate;
				// alert(endDate.day + "/" + endDate.month + "/" + endDate.year);
				var renderClass;
				if (reservation.personal) {
					renderClass = CalendarGroup.yearCalendar.renderCellStyleHighlight2;
				} else if (reservation.confirmed) {
					renderClass = CalendarGroup.yearCalendar.renderCellStyleHighlight1;
				} else if (!reservation.cancelled) {
					renderClass = CalendarGroup.yearCalendar.renderCellStyleHighlight3;
				}
				

				CalendarGroup.yearCalendar.addRenderer(
					startDate.day + "/" + startDate.month + "/" + startDate.year + "-" + 
					endDate.day + "/" + endDate.month + "/" + endDate.year, 
					renderClass
				);
			}
			CalendarGroup.yearCalendar.render();
		},
		
		failure: function (o) {
			// alert(o.responseText);
			
		}

	}
	
	
};


