// Copyright © Qualia Design 2007

function calendarInit() {
	var bCal = new YAHOO.widget.CalendarGroup("cal01","calendarWidget", {
		pages: 2,
		mindate: new Date(),
		MDY_DAY_POSITION: 1,
		MDY_MONTH_POSITION: 2,
		MULTI_SELECT: true,
		HIDE_BLANK_WEEKS: true
	});
	var selectionHandler = function(type,args,obj) {
		listSelectedDates(obj);
	};
	var resetCalendar = function() {
		bCal.deselectAll();
		bCal.render();
	}
	bCal.selectEvent.subscribe(selectionHandler, bCal, true);
	bCal.deselectEvent.subscribe(selectionHandler, bCal, true);
	restrictDates(bCal);
	bCal.render();
	
	var dForm = document.getElementById('bookingForm');
	YAHOO.util.Event.addListener(dForm,'reset',resetCalendar);
}

YAHOO.util.Event.addListener(window, "load", calendarInit);

YAHOO.widget.CalendarGroup.prototype._toDate = function(dateFieldArray) {
	if (dateFieldArray instanceof Date) {
		return dateFieldArray;
	} else {
		return new Date(dateFieldArray[0],dateFieldArray[1]-1,dateFieldArray[2]);
	}
};

function restrictDates(obj) {
	var j, jArr;
	var sDates = new Array();
	var bDates = getBookedDates(); // from calendarDates.js
	for (var i in bDates) {
		j = bDates[i];
		jArr = j.split('/');
		if ((new Date(jArr[2],jArr[1]-1,jArr[0])) >= new Date()) {
			obj.addRenderer(j,obj.renderBodyCellRestricted);
		}
	}
}

function listSelectedDates(obj) {
	var o, dd, mm, yyyy, D, M;
	var inDates = new Array();
	var liDates = new Array();
	var dL = obj.cfg.getProperty('WEEKDAYS_LONG');
	var mL = obj.cfg.getProperty('MONTHS_LONG');
	var inputEl = document.getElementById('calendarDatesHidden');
	var listEl = document.getElementById('calendarDatesList');
	var sObjDates = obj.getSelectedDates();
	sObjDates = sObjDates.sort(NumCmp);
	for (var i in sObjDates) {
		o = sObjDates[i];
		dd = String.leftPad(o.getDate(),2,'0');
		mm = String.leftPad(o.getMonth()+1,2,'0');
		yyyy = o.getFullYear();
		D = dL[o.getDay()];
		M = mL[o.getMonth()];
		inDates[inDates.length] = dd + '/' + mm + '/' + yyyy;
		liDates[liDates.length] = '<li>'+D+', '+dd+' '+M+' '+yyyy+'</li>\n';
	}
	inputEl.value = inDates.join('&');
	listEl.innerHTML = liDates.join('');
	return false;
}


// thanks: http://www.merlyn.demon.co.uk/js-order.htm
function NumCmp(a, b) {
	return a - b;
}

// source: http://www.xaprb.com/articles/date-functions.zip
// detail: http://www.xaprb.com/blog/2005/12/12/javascript-closures-for-runtime-efficiency/
String.leftPad = function (val, size, ch) {
	var result = new String(val);
	if (ch == null) {
		ch = " ";
	}
	while (result.length < size) {
		result = ch + result;
	}
	return result;
}
