//Calendar starts from this month;
var currentMonth = 1;
//Count of months to display
var showMonths = 3;
var calendar = false;
var calendarCount;
var currentRequest = null;
var _dateSet = false;
var startMonth = null;

var selStart = 0;
var selEnd = 0;
var button = false;
var totalRent = 0;
// initail values
var minNights =3;
var maxNights = 28;
var calendarStart;

var monthNames=new Array();
monthNames['01']="January";
monthNames['02']="February";
monthNames['03']="March";
monthNames['04']="April";
monthNames['05']="May";
monthNames['06']="June";
monthNames['07']="July";
monthNames['08']="August";
monthNames['09']="September";
monthNames['10']="October";
monthNames['11']="November";
monthNames['12']="December";

function showMonth(month){
	if (!month && month != 0) {
		month = currentMonth;
	}
	var months =  $('calendar').getElementsByClassName("month_cnt");
	for (cnt = 0; cnt < months.length; cnt++){
		months[cnt].style.display = "none";
		if ((cnt >= month-1) && (cnt<=month+1)) {
			months[cnt].style.display = "block";
		}
	}
	currentMonth = month;
}

function showNext(){
	if (currentMonth >= (10)) return;
	showMonth(currentMonth+1);
}
function showPrev(){
	if (currentMonth <= 1 ) return;
	showMonth(currentMonth-1);
}

function clientsideValidate()
{
	if (totalRent == 0)
	{
		alert('Your selection is invalid or pricing is not available for this date range. Please choose another date or call our office.');
		return false;
	}
	$('selStart').value = selStart;
	$('selEnd').value = selEnd;
	$('totalRent').value = totalRent;
	$('book1').submit();
}

/*End of new functions*/


function cMouseDown(cell)
{
	if (!cell.id)
		return false;

	button = true;
	clearSelection();

	selStart = $num(cell.id);
	selEnd = selStart;

	cellSelect(cell.id);
	updateDropdown(false);
	resetTotalRent();

	return false;
}

function cMouseOver(cell)
{
	if (!button)
		return;

	var newSelEnd = $num(cell.id);

	if (selStart < selEnd)
	{
		if (newSelEnd > selEnd)
		{
			for (var i = selEnd; i <= newSelEnd; i++)
			{
				cellSelect('c'+i);
				selEnd = i;
			}

		}
		else if (newSelEnd > selStart)
		{
			for (var i = selEnd; i > newSelEnd; i--)
			{
				cellDeselect('c'+i);
				selEnd = i;
			}
		}
		else
		{
			for (var i = selEnd; i >= selStart; i--)
			{
				cellDeselect('c'+i);
				selEnd = i;
			}

			for (var i = selStart; i >= newSelEnd; i--)
			{
				cellSelect('c'+i);
				selEnd = i;
			}

		}
	}
	else
	{
		if (newSelEnd < selEnd)
		{

			for (var i = selEnd; i >= newSelEnd; i--)
			{
				cellSelect('c'+i);
				selEnd = i;
			}
		}
		else if (newSelEnd < selStart)
		{
			for (var i = selEnd; i < newSelEnd; i++)
			{
				cellDeselect('c'+i);
				selEnd = i;
			}
		}
		else
		{
			for (var i = selEnd; i <= selStart; i++)
			{
				cellDeselect('c'+i);
				selEnd = i;
			}

			for (var i = selStart; i <= newSelEnd; i++)
			{
				cellSelect('c'+i);
				selEnd = i;
			}
		}
        updateDropdown(false);
	}
}

function cMouseUp()
{
		var min = 0, max = 0, nights = 0, tmp;
		startMonth = null;

		var tmp = $('calendar').select('td');
		if (tmp) {
			tmp.each( function(item) {
				if (item.className.match(/_selected$/)) {
					var tt = $num(item.id);
					if (!min) {
						min = tt;
					}
					if (tt > max) {
						max = tt;
					} else if (tt < min) {
						min = tt;
					}
					nights++;
					if (startMonth==null) {
						var t = item.up(2);
						startMonth = $num(t.id); // get month seq number from parent table id
					}
				}
			});
			selStart = min;
			selEnd = max;
		}
		$('book_nights').value = nights;
		updateCalendar();

		button = false;
		return false;
}

function clearSelection()
{
		if (selStart == null || selEnd == null)
				return;

		var i2 = selEnd;
		var i1 = selStart;

		if (selEnd < selStart)
		{
				var i1 = selEnd;
				var i2 = selStart;
		}

		for (var i = i1; i <= i2; i++)
				cellDeselect('c'+i);
}

function clearAllSelected()
{
	var tmp = $('calendar').select('td');
	if (tmp) {
		tmp.each( function(item) {
			if (item.className.match(/_selected$/)) {
				item.className = item.className.replace('_selected', '');
			}
		});
	}
}

function cellSelect(id)
{
		var e = $(id);
		if (!e){
				return;
		}

		if (!e.className.match(/_selected$/)){
				e.className += '_selected';
		}
}

function cellDeselect(id)
{
		var e = $(id);
		if (!e){
				return;
		}

		e.className = e.className.replace('_selected', '');
}

function updateDropdown(check)
{
	var checkIn = selStart;
	var nights = selEnd - selStart + 1;
	if (selStart > selEnd)
	{
		checkIn = selEnd;
		nights = selStart - selEnd + 1;
	}
	if (check) {
		var hold = [$('book_check_in').value, $('book_check_out').value];
		if (nights<minNights) {
			$('book_check_in').value = hold[0];
			$('book_check_out').value = hold[1];
			$('book_nights').value = nights;
			$('total_rent').innerHTML = '<span style="color: red">Minimum Stay is '+minNights+' Nights</span>';
			if (currentRequest) currentRequest.abort();
			return false;
		} else if (nights>maxNights) {
			$('book_check_in').value = hold[0];
			$('book_check_out').value = hold[1];
			$('book_nights').value =nights;
			$('total_rent').innerHTML = '<span style="color: red">Max stay is '+maxNights+' Nights</span>';
			if (currentRequest) currentRequest.abort();
			return false;
		}
	}
	var dt1 = new Date(calendarStart);
	var dt2 = new Date(dt1.getFullYear(), dt1.getMonth(), dt1.getDate()+checkIn-1, 0, 0, 0, 0);
	var dt3 = new Date(dt2.getFullYear(), dt2.getMonth(), dt2.getDate()+nights, 0, 0, 0, 0);
	$('book_check_in').value = zDate(dt2.getMonth()+1)+'/'+zDate(dt2.getDate())+'/'+dt2.getFullYear();
	$('book_check_out').value = zDate(dt3.getMonth()+1)+'/'+zDate(dt3.getDate())+'/'+dt3.getFullYear();
	$('book_nights').value = nights;
	return true;
}

function updateCalendar()
{
	for (var i = selStart; i <= selEnd; i++)
	{
		cellSelect('c'+i);
	}
	showMonth(startMonth<1?1:startMonth);
	if (updateDropdown(true)) {
		getTotalRent();
	}
}

function updateCalendar2()
{
	var dt1 = new Date(calendarStart);
	var dt2 = new Date($('book_check_in').value);
	var newSelStart = Math.round((dt2.getTime() - dt1.getTime())/86400000) + 1;

	var t = $('book_nights').value;
	var nights = $num(t);

	var newSelEnd = newSelStart + nights - 1;
	var lastDay = getLastDay();
	if (newSelEnd > lastDay) {
		newSelEnd = lastDay;
	}
	selStart = newSelStart;
	selEnd = newSelEnd;
	clearAllSelected();
	for (var i = newSelStart; i <= newSelEnd; i++)
	{
		cellSelect('c'+i);
	}
	cMouseUp();
	showMonth(startMonth<1?1:startMonth);
	if (updateDropdown(true)) {
		getTotalRent();
	}
}

function updateCalendar3()
{
	var dt1 = new Date(calendarStart);
	var dt2 = new Date($('book_check_in').value);
	var newSelStart = Math.round((dt2.getTime() - dt1.getTime())/86400000)+1;
	var dt3 = new Date($('book_check_out').value);
	var newSelEnd = Math.round((dt3.getTime() - dt1.getTime())/86400000);

	clearAllSelected();
	for (var i = newSelStart; i <= newSelEnd; i++)
	{
		cellSelect('c'+i);
	}
	cMouseUp();
	showMonth(startMonth<1?1:startMonth);
	if (updateDropdown(true)) {
		getTotalRent();
	}
}

function $num(str, arr)
{
		var tmp = str.match(/[0-9]+/g);
		if (!tmp | !tmp.length)
				return null;

		var n = tmp.length;

		res = [];
		for (var i = 0; i < n; i++)
				res[i] = parseInt(tmp[i]);

		if (arr && n > 1)
				return res;

		return res[0];
}

function getLastDay()
{
		for (var i=1; !!$('c'+i); i++){}
		return i-1;
}

function getStayLength()
{
		if (selStart < selEnd)
				return selEnd - selStart + 1;
		else
				return selStart - selEnd + 1;
}

function getTotalRent()
{
	if (currentRequest) currentRequest.abort();
	if (($("calendar").getElementsByClassName("booked_selected").length >1) || ($("calendar").getElementsByClassName("past_selected").length >0)) {
		$('total_rent').innerHTML = '<span style="color: red">Invalid selection</span>';
		if ($('villa-details-date') && $('villa-details-cost')) {
			$('villa-details-date').style.display = 'none';
			$('villa-details-cost').style.display = 'none';
			$('villa-details-totalRent').value = '';
			$('villa-details-total').value = '';
		}
		return;
	}
	var form_nights = $("calendar").getElementsByClassName("avail_selected").length-1;

	if ( $("book_nights").value < minNights) {
		if ($('villa-details-date') && $('villa-details-cost')) {
			$('villa-details-date').style.display = 'none';
			$('villa-details-cost').style.display = 'none';
			$('villa-details-totalRent').value = '';
			$('villa-details-total').value = '';
		}
		$('total_rent').innerHTML = '<span style="color: red">Minimum Stay is '+minNights+' Nights</span>';
		return;
	}

	var params =
	{
		action: 'get_full_rent',
		prop_id: $F(document.forms.book1.prop_id),
		check_in: $F(document.forms.book1.book_check_in),
		nights: $F(document.forms.book1.book_nights)
	};

	params = $H(params);

	resetTotalRent();

	currentRequest = new Ajax.Request("/search/", {method:'post', parameters: params.toQueryString(), onComplete:onGetTotalRent});

	if ($('villa-details-date') && $('villa-details-cost')) {
		$('villa-details-date').style.display = 'block';
		$('villa-details-cost').style.display = 'block';
	}
}

function resetTotalRent()
{
	$('total_rent').innerHTML = '<img src="/images/progress.gif" width="16" height="16" alt="" style="border:none" /><span style="color:red;font:bold 12px Times New Roman,Trebuchet MS,Sans Serif;"> Loading Real Time Availability & Pricing</span><br clear="all" />';
        //$('total_rent').innerHTML = '<img src="/images/loading.gif" width="100" height="20" alt="Loading" style="border:none" />';
        totalRent = 0;
}


function onGetTotalRent(req)
{
	if ($('total_rent')) {
		if (!req.responseText || req.responseText == '0') {
			if ($('villa-details-date') && $('villa-details-cost')) {
				$('villa-details-date').style.display = 'none';
				$('villa-details-cost').style.display = 'none';
				$('villa-details-totalRent').value = '';
				$('villa-details-total').value = '';
			}
			$('total_rent').innerHTML = '<span style="color: red">Invalid selection</span>';
		}  else {
			//alert(req.responseText);
			$('total_rent').innerHTML = req.responseText; // '<span style="color: green">$'+req.responseText+'</span>';
			//$('next_btn').title = 'Next step';
			//totalRent = $F("rent"); 		//totalRent = $num(req.responseText);
			// get from response
			if ($('total')) {
				totalRent = parseFloat($('total').value);
			}
			if ($('villa-details-date') && $('villa-details-cost')) {

				zeroPadding = true;
				$('villa-details-totalRent').value = totalRent;
				$('villa-details-total').value = totalRent;
				$('villa-details-date').style.display = 'block';
				dates = $('book_check_in').value.split('/');
				formatedDate = monthNames[zDate(dates[0])]+' '+dates[1]+', '+dates[2];
				$('villa-details-date').innerHTML = '<b>Arrival date:</b>' + formatedDate;
				zeroPadding = false;

				if ($('rent').value != $('fullRent').value) {
					$('villa-details-cost').innerHTML = '<b>Price:</b>'+'<strike>$'+$('fullRent').value+'</strike><br /><b>&nbsp;</b><font color="green">$'+$('rent').value+'</font>';
				} else {
					$('villa-details-cost').innerHTML = '<b>Price:</b>$'+$('rent').value;
				}
				$('villa-details-cost').style.display = 'block';
				$('villa-details-check_in').value = $('book_check_in').value;
				$('villa-details-nights').value = $('book_nights').value;
			}
		}
	}
}

