window.addEvent('load', function(){

	now = new Date();
	year = now.getFullYear();

	if ($('use_date')) {
		Calendar.setup(
				{
					flat			: "use_date",
					dateStatusFunc  : disallowPastDate,
					weekNumbers		: false,
					displayArea		: "usedate",
					showOthers		: true,
					range			: new Array(year,year + 2),
					onSelect		: bookingDateSelected
				}
			);
	}
});

function Listing_ValidateForm(form, type)
{
	var valid = true;
	var msgs = '';

	function invalidate(el, msg) {
		if (msg)
			msgs += msg + '\r\n';
		if (el)	el.addClass('invalid');
		valid = false;
	}

	function setValid(el) {
		if (el)	el.removeClass('invalid');
	}

	function getKeyFromInputName(name) {
		var regex = /.*\[(.*)\]$/;
	    var match = regex.exec(name);
		return match[1];
	}

	try {
	    if (!document.formvalidator.isValid(form)) {
	        invalidate(null, 'Some values are missing or invalid.\r\nPlease correct the highlighted items.\r\n');
	    }

		var qtys = $$('input.quantity');

		// Validate at least one item has a quantity > 0
		var qty = false;
		qtys.each(function(el, i){if (Number(el.value)) qty = true;});
		if (!qty) {
			invalidate(null, '* Please select at least one item to add to your shopping cart.');
		}

		// Validate that a use date is selected if one or more items require it
		var datereq = $$('input.datereq');
		var dates = new Array();

		if (datereq.length) {

			var usedate = '';
			if ($('use_date'))
				usedate = $('use_date').value;

			datereq.each(function(el, i){
				tid = getKeyFromInputName(el.name);
				dates[tid] = el.value;
			});

			msg = '* You must specify a booking date for one or more of the items you have selected.';
			qtys.each(function(el, i){
				key = getKeyFromInputName(el.name);

				if (el.value > 0 && dates[key] == 1 && !usedate.length) {
					invalidate(el, msg);
					msg = '';
				}
				else {
					setValid(el);
				}
			});
		}

		// Schedules:
		// Validate that number of places selected is less than or equal to the number of places remaining
		var pleft = $$('input.placesleft');
		var places = new Array();
		var tobook = new Array();

		if (pleft.length) {
			pleft.each(function(el, i){
				sid = getKeyFromInputName(el.name);
				places[sid] = el.value;
			});

			msg = '* You have selected more tickets or places than are currently available for one or more items listed.';
			qtys.each(function(el, i){
				key = getKeyFromInputName(el.name);
				pos = key.indexOf(':');
				sid = (pos > -1) ? key.substr(0, pos) : key;
				if (!tobook[sid]) tobook[sid] = 0;
				tobook[sid] += Number(el.value);

				if (tobook[sid] > 0 && tobook[sid] > places[sid]) {
					invalidate(el, msg);
					msg = '';
				}
				else {
					setValid(el);
				}
			});
		}
    }
	catch (e) {
		varDump(e);
	}

	// Any problems found?
	if (!valid) {
		alert(msgs);
		return false;
	}

	return true;
}

function bookingDateSelected(calendar, date) {
	var input_field = $("use_date_fld");
	input_field.value = date;
//	if (calendar.dateClicked) {
//		calendar.callCloseHandler(); // this calls "onClose"

		var jSonRequest = new Json.Remote("/index.php?option=com_mykidstime&task=listing.getSchedulePlacesForDate&lid=" + $('lid').value + "&date=" + date,
				  {onComplete: updatePlacesLeft}).send();

//	}
}

function updatePlacesLeft(schedulePlaces) {
	var date = strtotime($('use_date_fld').value);
	for (id in scheduleData) {
		if (schedulePlaces[id]) {
			allocated = $('places_allocated:' + id).value;
			if (schedulePlaces[id].places_left)
				left = schedulePlaces[id].places_left;
			else
				left = allocated;
			$('cell:places_left:' + id).innerHTML = left;
			$('places_left:' + id).value = left;
		}
		else {
			$('cell:places_left:' + id).innerHTML = 'Date not applicable';
			$('places_left:' + id).value = 0;
		}
		$('cell:places_left:' + id).addClass('places_left_updated');
	}
}

