/**
 * Reservations function
 * 
 */

var mouseOverCalendar = false; 
var dateFocused = false; 

function checkApartmentsInfo(value)
{
	if ($('#apartments').html() != value)
	{
		$('#apartments').html(value);
	}
}

function validateApartments(err)
{
	var elements = $('input:checkbox:checked[id^=apartment]');
	if (elements.length == 0)
	{
		err.push(new Array('apartments', 'not.apartments.selected'));
		return false;
	}
	var result = true;
	elements.each
	(
		function()
		{
			var code = $(this).val();
			var bodyCount = parseInt($('bodyCount[' + $(this).val() + ']').val());
			if (bodyCount == 0 || isNaN(bodyCount))
			{
				//err.push(new Array('bodyCount', 'lesserThan'));
				err.push(new Array(code, 'apartment.bodycount'));
				result = false;
			}
		}
	);
	return result;
}

function validateReservation()
{
	// dont validate form in javascript yet
	return true;
	var err = new Array();
	validateForm($('form[name=reservation]'), err);
	// dateFrom <> dateTo
	if (!$('#dateFrom').hasAttr('error') && !$('#dateTo').hasAttr('error'))
	{
		var dateFrom = DateUtil.getDate($('#dateFrom').val());
		var dateTo = DateUtil.getDate($('#dateTo').val());
		if (dateFrom && dateTo && dateFrom > dateTo)
		{
			err.push(new Array('dateTo', 'lesserThan'));
		}
	}
	// check apartments
	validateApartments(err);
	// alert
	if (err.length > 0)
	{
		var msg = '';
		for (var i = 0; i < err.length; i++)
		{
			msg += err[i][0] + ': ' + err[i][1] + '\n';
		}
		alert(msg);
		return false;
	}
	return true;
}

function calendarSetDay(calendarId, id, value)
{
	var e = $('#' + id);
	if (e)
	{
		var changed = (value != e.val());
		$('#' + calendarId).hide();
		if (changed)
		{
			e.val(value);
			e.blur();
			e.change();
			e.attr('suppressCalendar', true);
			//e.focus(); doesnt work good in IE - there is raising double focus
			var other = document.getElementById(e.attr('id'));
			if (other)
			{
				other.focus();
			}
		}
	}
}

function popupCalendar(calendarId, id, year, month)
{
	//alert('popupCalendar\n\n' + 'calendarId: ' + calendarId + '\nid: ' + id + '\nyear: ' + year + '\nmonth: ' + month );
	var e = $('#' + id);
	if (e)
	{
		var offset = e.offset();
		var height = e.height();
		var popupCalendar = $('#' + calendarId);
		//popupCalendar.fadeTo('fast', 0.9);
		$.post('index.php',
			{
				lang: lang,
				section: section,
				parts: parts,
				callback: 'getCalendar',
				calendar: calendarId, 
				element: id,
				year: year, 
				month: month
			},
			function(data)
			{
				popupCalendar.html(data);
				//popupCalendar.fadeTo('fast', 1);
			}
		);
	}
}

function checkCalendarVisibility()
{
	var popupCalendar = $('#popupCalendar');
	if (popupCalendar && !mouseOverCalendar && !dateFocused)
	{
		popupCalendar.html('');
		popupCalendar.hide();
	}	
}

$(document).ready
(
	function()
	{
		// date
		$('.date').change
		(
			function()
			{
				checkApartmentsInfo(findApartmentsInfo);
			}
		)

		// findApartments
		$('#findApartments').click
		(
			function()
			{
				checkApartmentsInfo(loadingApartmentsInfo);
				$('#findApartments').fadeTo('fast', 0.1);
				$.post('index.php',
					{
						lang: lang,
						section: section,
						parts: parts,
						callback: 'findAvailableApartments',
						dateFrom: $('#dateFrom').val(), 
						dateTo: $('#dateTo').val()
					},
					function(data)
					{
						$('#apartments').html(data);
						$('#findApartments').fadeTo('fast', 1);
					}
				);
				return false;
			}
		)
		
		$('.date').click
		(
			function()
			{
				if ($("#popupCalendar").css('display') == 'none')
				{
					$(this).focus();
				}
				return true;
			}
		)
		
		$('.date').focus
		(
			function(event)
			{
				dateFocused = true;
				if ($(this).hasAttr('suppressCalendar'))
				{
					$(this).removeAttr('suppressCalendar');
					event.stopImmediatePropagation();
					return true;
				}
				var id = $(this).attr('id');
				var offset = $(this).offset();
				var height = $(this).height();
				$.post('index.php',
					{
						lang: lang,
						section: section,
						parts: parts,
						callback: 'getCalendar',
						calendar: 'popupCalendar',
						element: id,
						dateFrom: $('#dateFrom').val(), 
						dateTo: $('#dateTo').val()
					},
					function(data)
					{
						var popupCalendar = $('#popupCalendar');
						popupCalendar.css
						(
							{
								'top': (offset.top + height + 5),
								'left': offset.left
							}
						);
						popupCalendar.html(data);
						popupCalendar.show();
					}
				);
				return false;
			}
		)
		
		$('.date').blur
		(
			function()
			{
				dateFocused = false;
				checkCalendarVisibility();
			}
		)
		
		$('form[name=reservation]').submit
		(
			function()
			{
				if (validateReservation())
				{
					$('#submitReservation').fadeTo('fast', 0.1);
					return true;
				}
				return false;
			}
		)
		
		$("#popupCalendar").bind('mouseover',
			function()
			{
				mouseOverCalendar = true;
			}
		)		
		
		$("#popupCalendar").bind('mouseleave',
			function()
			{
				mouseOverCalendar = false;
				checkCalendarVisibility();
			}
		)
		
		$("#firstname").focus();
	}
);
