//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 lastDay = null;

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 >= (12-showMonths)) return;
	showMonth(currentMonth+1);
}
function showPrev(){
	if (currentMonth <= 0 ) 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');// Toll Free Number 866-456-4252.');
		return false;
	}
	if ( $('selStart') )	$('selStart').value = selStart;
	if ( $('selEnd') ) 	$('selEnd').value = selEnd;
	if ( $('totalRent') )  $('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$/)) {
					tmp = $num(item.id);
					if (!min) {
						min = tmp;
					}
					if (tmp > max) {
						max = tmp;
					} else if (tmp < min) {
						min = tmp;
					}
					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">Min 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 - dt1)/86400000) + 1;

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

	var newSelEnd = newSelStart + nights - 1;
	if ( !lastDay ){
	    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 - $("calendar").getElementsByClassName(" booked_selected").length >0
            ) || (
                $("calendar").getElementsByClassName("past_selected").length - $("calendar").getElementsByClassName(" past_selected").length >0
            )
         ) 
        {
                $('total_rent').innerHTML = '<span style="color: red">Invalid selection</span>';
                return;
        }

        var nights = parseInt($("book_nights").value,10);

    	if ( nights < minNights) {
    		$('total_rent').innerHTML = '<span style="color: red">Min Stay is '+minNights+' Nights</span>';
    		return;
    	}
    	if ( nights > maxNights ){
                    $('total_rent').innerHTML = '<span style="color: red">Max Stay is '+maxNights+' Nights</span>';
                    return;
    	}

    	resetTotalRent();

        var params =
        {
                action:'get_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);

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

function resetTotalRent()
{
	$('total_rent').innerHTML = '<img src="/images/loading.gif" width="100" height="20" alt="Loading" style="border:none" />';
	totalRent = 0;
}

function onGetTotalRent(req)
{
        if (!req.responseText)
        {
                $('total_rent').innerHTML = '<span style="color: red">Invalid selection</span>';
        }
        else
        {
		resetTotalRent();

                totalRentISI = req.responseText;

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

                params = $H(params);

                currentRequest = new Ajax.Request('/book/', {method:'get', parameters: params.toQueryString(), onComplete:onGetTotalRentSpecial});
        }

}

function doBack() {
	var check_in = $('book_check_in').value;
	var nights = $('book_nights').value;
	var f = $('backForm');
	var inp = document.createElement('input');
	inp.setAttribute('type','hidden');
	inp.setAttribute('name','check_in');
	inp.setAttribute('value',check_in);
	f.appendChild(inp);
	inp = document.createElement('input');
	inp.setAttribute('type','hidden');
	inp.setAttribute('name','nights');
	inp.setAttribute('value',nights);
	f.appendChild(inp);
	f.submit();
}

function onGetTotalRentSpecial(req) {
        if (!req.responseText)
        {
                $('total_rent').innerHTML = '<span style="color: red">Invalid selection</span>';
        }
        else
        {
                totalRentSpecial = req.responseText;

		resetTotalRent();

                if (totalRentSpecial > 0) {
                        var params =
                        {
                                action:'get_special_description',
                                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);

                        currentRequest = new Ajax.Request('/book/', {method:'get', parameters: params.toQueryString(), onComplete:onGetSpecialDescription});
                } else {
                        $('total_rent').innerHTML = '$'+priceToDisplay(totalRentISI)+''
                         /*+ '<a href="javascript:void(0);" onclick="showDetails(this, $F(document.forms.book1.prop_id))" class="href_details">Details</a>';*/
                        /*$('next_btn').title = 'Next step';*/
                        totalRent = totalRentISI;
                }
        }
}

function onGetSpecialDescription(req) {
       $('total_rent').innerHTML = '<span class="crossed_line">$'+priceToDisplay(totalRentISI)+'</span> $'+priceToDisplay(totalRentSpecial)+' '/*+<a href="javascript:void(0);" onclick="showDetails(this, $F(document.forms.book1.prop_id))" class="href_details" style="color: green;">Details</a></span>' */;
       if ( req.responseText != '' ){
            $('total_rent').innerHTML += '<div class="specials_info">'+req.responseText+'</div>';
       }
       /* $('next_btn').title = 'Next step';*/
        totalRent = totalRentSpecial;
}

/******************************* Show details window *********************/
var priceDetail;
function showDetails(element, propId)
{
    if ($("priceDetail")) {
                closeDetails()
    }
    priceDetail = document.createElement('div');
    priceDetail.id = 'priceDetail';
    priceDetail.innerHTML = '<img src="/images/loading.gif" width="100" height="20" alt="Loading" style="border:none" /><br clear="all" />';
    element.parentNode.appendChild(priceDetail);
    var params =
        {
        action:'get_full_rent',
        prop_id: propId,
        check_in: $F('book_check_in'),
        nights: $F('book_nights')
        };
        params = $H(params);

        currentRequest = new Ajax.Request('/book/',
    {
        method:'get',
        parameters: params.toQueryString(),
        onComplete: function (originalRequest)
        {
            priceDetail.innerHTML = originalRequest.responseText + '<br clear=all /><a href="javascript:void(0);" onclick="closeDetails()">Close</a>';
        }

    });
}

function closeDetails()
{
        $("priceDetail").remove();
}

function priceToDisplay(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

/******************************* Show details window *********************/
