//Calendar starts from this month;
var currentMonth = 0;
//Count of months to display
var showMonths = 3;
var calendar = false;
var calendarCount;
var ajaxServlet = "/search/";		//"priceQuote.php";
var currentRequest = 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 hideCalendar() {
	if (calendar) {
		$("calendar").parentNode.parentNode.removeChild($("calendar").parentNode.parentNode.getElementsByTagName('div')[0]);
		calendar = false;
	}
	if ($('specialDescriptionBox')) {
		$('specialDescriptionBox').style.display = 'none';
	}
}


function showCalendar(count, prop_id, searchdate, searchstay) {
	if (!prop_id){
		prop_id = document.getElementsByClassName('listItem')[count].getElementsByClassName('propId')[0].value;
	}
    
    if (searchdate != '') {
        searchdate=searchdate.split('/');
        _dateSet = true;
        _date = new Date(searchdate[2]+'/'+searchdate[0]+'/'+searchdate[1]);
    } else {
        _dateSet = false;
    }

    _searchstay = searchstay;
	hideCalendar();
	calendar = document.createElement('div');
	calendar.className = 'calendars';
	calendar.innerHTML = 'Loading ...';
	calendar.style.width = '864px';
	calendar.style.height = '226px';
	document.getElementsByClassName('listItem')[count].appendChild(calendar);
    /*elem = document.getElementById('listItem');
    if (elem) {
       elem.appendChild(calendar);
    }*/


	currentRequest = new Ajax.Request(
		ajaxServlet,
		{
			method: 'get',
			parameters: 'property_id='+prop_id,
			onComplete: showCalendarResponse
		});
}

function showCalendar2(count, prop_id, searchdate, searchstay) {
	if (!prop_id){
		prop_id = document.getElementsByClassName('property')[count].getElementsByClassName('propId')[0].value;
	}
	
    if (searchdate != '') {
        searchdate=searchdate.split('/');
        _dateSet = true;
        _date = new Date(searchdate[2]+'/'+searchdate[0]+'/'+searchdate[1]);
    } else {
        _dateSet = false;
    }

	_searchstay = searchstay;
	//calendarCount = count;
	hideCalendar();
	calendar = document.createElement('div');
	calendar.className = 'calendars';
	calendar.innerHTML = 'Loading ...';
	calendar.style.width = '864px';
	calendar.style.height = '226px';
	//document.getElementsByClassName('listItem')[0].appendChild(calendar);
	elem = document.getElementById('listItem');
	if (elem) {
	   elem.appendChild(calendar);
	}

	currentRequest = new Ajax.Request(
		ajaxServlet,
		{
			method: 'get',
			parameters: 'property_id='+prop_id,
			onComplete: showCalendarResponse
		});

}

function showCalendar3(prop_id, searchdate, searchstay) {
	if (!prop_id){
		prop_id = document.getElementsByClassName('listItem')[0].getElementsByClassName('propId')[0].value;
	}
	searchdate=searchdate.split('/');
	_date = new Date(searchdate[2]+'/'+searchdate[0]+'/'+searchdate[1]);
	_searchstay = searchstay;
	hideCalendar();
	calendar = document.createElement('div');
	calendar.className = 'calendars';
	calendar.innerHTML = 'Loading ...';
	calendar.style.width = '864px';
	calendar.style.height = '226px';
	document.getElementsByClassName('listItem')[0].appendChild(calendar);
	_dateSet = true;

	currentRequest = new Ajax.Request(
		ajaxServlet,
		{
			method: 'get',
			parameters: 'property_id='+prop_id,
			onComplete: showCalendarResponse
		});
}

function showCalendarResponse (originalRequest) {
	calendar.innerHTML = originalRequest.responseText;
	calendar.style.width = 'auto';
	calendar.style.height = 'auto';
	showMonth(0);

	if (_dateSet) {
		var check_in_date = _date;
	} else {

		var check_in_date = new Date();


		check_in_date.setTime(check_in_date.getTime()+86400000);
	}

    $('book_nights').selectedIndex = _searchstay-1;

	var month = check_in_date.getMonth()+1;
	var day = check_in_date.getDate();
	year = check_in_date.getFullYear();

	if (day <=9 ) {
		day = '0' + day;
	}
	if (month <= 9 ) {
		month = '0' + month;
	}

	var formatedDate = month + '/' + day + '/' + year;

	var options = $("book_check_in").options;
	for (var cnt = 0; cnt < options.length; cnt++){
		if (options[cnt].value == formatedDate) {
			$("book_check_in").selectedIndex = cnt;
		}
	}
    
    dates = $('book_check_in').value.split('/');
    formatedDate = monthNames[dates[0]]+' '+dates[1]+', '+dates[2];

	if ($('villa-details-date') && $('villa-details-cost')) {
		$('villa-details-nights').value = $('book_nights').value;
		$('villa-details-check_in').value = formatedDate;
		$('villa-details-date').innerHTML = '<b>Arrival date:</b>' + formatedDate;
		$('villa-details-date').style.display = 'block';
	}

	updateCalendar(); updateDropdown();
}

function showMonth(month){
	if (!month && month != 0) {
		month = currentMonth;
	}
	var months =  $('calendar').getElementsByClassName("month_cnt");

	for (cnt = 0; cnt < months.length; cnt++){
		if (cnt < month) {
			months[cnt].style.display = "none";
		} else if (cnt < month + showMonths) {
			months[cnt].style.display = "block";
		} else {
			months[cnt].style.display = "none";
		}

	}
	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;
    }
    $('selStart').value = selStart;
    $('selEnd').value = selEnd;
    $('totalRent').value = totalRent;
    $("bookingForm").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();
    resetTotalRent();

    return false;
}

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

    var newSelEnd = $num(cell.id);
    var newSelEnd1 = newSelEnd;

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

                if (getStayLength() >= maxNights)
                    return;

                if (newSelEnd != newSelEnd1)
                    return;
            }

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

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

                if (newSelEnd != newSelEnd1)
                    return;
            }

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

                if (getStayLength() >= maxNights)
                    return;

                if (newSelEnd != newSelEnd1)
                    return;
            }

        }
	}
	else
	{
        if (newSelEnd < selEnd)
        {

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

                if (getStayLength() >= maxNights)
                    return;

                if (newSelEnd != newSelEnd1)
                    return;
            }
        }
        else if (newSelEnd < selStart)
        {
            for (var i = selEnd; i < newSelEnd; i++)
            {

                cellDeselect('c'+i);
                selEnd = i;
                updateDropdown();

                if (newSelEnd != newSelEnd1)
                    return;
            }
        }
        else
        {
            for (var i = selEnd; i <= selStart; i++)
            {
                cellDeselect('c'+i);
                selEnd = i;
                updateDropdown();

                if (newSelEnd != newSelEnd1)
                    return;
            }

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

                if (getStayLength() >= maxNights)
                    return;

                if (newSelEnd != newSelEnd1)
                    return;
            }
        }

    }
}

function cMouseUp()
{
        if (selEnd < selStart)
        {
                var tmp = selStart;
                selStart = selEnd;
                selEnd = tmp;
        }

        getTotalRent();

        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 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()
{
        var checkIn = selStart;
        var nights = selEnd - selStart + 1;
        if (selStart > selEnd)
        {
                checkIn = selEnd;
                nights = selStart - selEnd;
        }


		$("book_check_in").selectedIndex = checkIn-1;
		$("book_nights").selectedIndex = nights-1;

        if ($('s'+(checkIn+nights)))
            $('check_out').innerHTML = ($('s'+(checkIn+nights))).innerHTML;
}

function updateCalendar()
{

        var t = $('book_check_in').options[$('book_check_in').selectedIndex].id;
        var newSelStart = $num(t);


        var t = $('book_nights').options[$('book_nights').selectedIndex].value;
        var nights = $num(t);

        var newSelEnd = newSelStart + nights - 1;
        var lastDay = getLastDay();
        if (newSelEnd > lastDay)
                newSelEnd = lastDay;

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

        getTotalRent();
        updateDropdown();
}

/*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;
        }
        $('selStart').value = selStart;
        $('selEnd').value = selEnd;
        $('totalRent').value = totalRent;
        return true;
}
*/
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=360; i < 380; i++)
        {
                if (!$('c'+i))
                        return i-1;
        }
        return null;
}

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


/**
  @param date Date object,
  @param nights int
**/
function calcCheckOut(date, nights){
	var check_out_date = new Date(date.getTime() + nights *60*60*24 * 1000);

	var month = check_out_date.getMonth()+1;
	if (month <= 9 ) {
		month = '0' + month;
	}
	var day = check_out_date.getDate()
	if (day <=9 ) {
		day = '0' + day;
	}

	year = check_out_date.getFullYear() - 2000;
	if (year <=9 ) {
		year = '0' + year;
	}

	return month + '/' + day + '/' + year;

}


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;
	$('check_out').innerHTML = calcCheckOut(new Date ($F(document.forms.book1.check_in)), form_nights);
	$("book_nights").selectedIndex = form_nights-1;

	if ( $F(document.forms.book1.nights) <3) {
		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 3 Nights</span>';
		return;
	}

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

    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" /><br clear="all" />';

    currentRequest = new Ajax.Request(ajaxServlet, {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/loading2.gif" width="58" height="11" alt="Loading" style="border:none" />';
        //$('next_btn').title = 'Your selection is invalid';
        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')) {
				//$('villa-details-totalRent').value = totalRent;
				//$('villa-details-total').value = totalRent;
				$('villa-details-date').style.display = 'block';
				dates = $('book_check_in').value.split('/');
				formatedDate = monthNames[dates[0]]+' '+dates[1]+', '+dates[2];
				$('villa-details-date').innerHTML = '<b>Arrival date:</b> ' + formatedDate;
//				$('villa-details-cost').innerHTML = '<b>Price:</b> $'+totalRent;
				if ($('rent').value!=$('fullRent').value) {
					$('villa-details-cost').innerHTML = '<b>Price:</b>'+'<strike>$'+number_format($('fullRent').value, 2, '.', ' ')+'</strike><br /><b>&nbsp;</b><font color="green">$'+number_format($('rent').value, 2, '.', ' ')+'</font>';
				} else {
					$('villa-details-cost').innerHTML = '<b>Price:</b>$'+number_format($('rent').value, 2, '.', ' ');
				}
				$('villa-details-cost').style.display = 'block';
                $('villa-details-check_in').value = $('book_check_in').value;
                $('villa-details-nights').value = $('book_nights').value;
			}
    	}
    }
}

function doBack() {
    var check_in = $('check_in').value;
    var nights = $('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();
}

