function getMonth(date) {
    var m = date.getMonth();
    if (m == 12) m = 1; else m += 1;
    return m;
}

function getCurrencyParam() {
    return "selected_currency=" + $("#currList").val();
}

function showAllCityHotels() {
    var url = $searchURL + '&do_availability_check=on&order=price';
    td = new Date();
    td.setDate(td.getDate() + 14);
    var m = getMonth(td);
    var checkin = "checkin_year_month=" + td.getFullYear() + '-' + m + "&" + "checkin_monthday=" + td.getDate();
    td.setDate(td.getDate() + 1);
    m = getMonth(td);
    var checkout = "checkout_year_month=" + td.getFullYear() + '-' + m + "&" + "checkout_monthday=" + td.getDate();
    window.location = "http://booking.traveloshop.com/" + url + "&" + checkin + "&" + checkout + "&" + getCurrencyParam();
}

function searchByPriceRange(obj) {
    $('#price-range-block').colorbox({href:'/ajax/search_form_dialog.html?lang=' + lang + "&selected_currency=" + $("#currList").val() + '&ss=' + destination + '&pr_id=' + obj.attr("name"),
        width:560, height:235,opacity:0.5, title:obj.attr("title"), onComplete: function (data, textStatus) {
            $("#db_checkin_day").val($("#b_checkin_day").val());
            $("#db_checkout_day").val($("#b_checkout_day").val());
            $('#db_checkin_month').find('option').remove().end().append($('#b_checkin_month').find('option').clone()).val($('#b_checkin_month').val());
            $('#db_checkout_month').find('option').remove().end().append($('#b_checkout_month').find('option').clone()).val($('#b_checkout_month').val());
    }
});
}

function updateCurrencyRange(currency) {
    $.ajax({url: '/ajax/ajax_price_range.html?lang=' + language + "&selected_currency=" + currency, success: function (data, textStatus) {
        $('#price-range-block').replaceWith(data);
        $('#budgetrange-cell, #midrange-cell, #luxuryrange-cell').bind('click', function() {
            searchByPriceRange($(this));
        });
    }
});
}

$(document).ready(function() {
    //advanced form option
    $("#less").click(function(event) {
        var oldText = $('#less').text();
        if ($('#advanced').css('display') == 'none')
            $('#advanced').show("blind");
        else
            $('#advanced').hide("blind");
        $('#less').text($('#more').text());
        $('#more').text(oldText);
        return false;
    });

    //currency range
    $("#currList").change(function(event) {
        $("#pr_id").val(this.value);
    });

    $("#budgetrange-cell, #midrange-cell, #luxuryrange-cell").click(function(event) {
        searchByPriceRange($(this));
    });
    //currency range
    $("#currList").change(function(event) {
        $("#curr_id").val(this.value);
        updateCurrencyRange(this.value);
    });

    $("#in_a_group").change(function(event) {
        if ($('#group_definition').css('display') == 'none') {
            $('#group_definition').show("blind", {}, 500);
        }
        else {
            $('#group_definition').hide("blind", {}, 500);
        }
        return true;
    });

    $(".add_rooms").click(function(event) {
        var curRow = $('#group_table tbody tr').length + 1;
        $('#group_table > tbody:last').append('<tr><th>Room&nbsp;' + curRow + ':&nbsp;</th><td>' +
                '<select name="group_adults">' +
                '<option value="0">0</option>' +
                '<option selected="selected" value="1">1</option>' +
                '<option value="2">2</option><option value="3">3</option>' +
                '<option value="4">4</option><option value="5">5</option>' +
                '<option value="6">6</option>' +
                '</select>' +
                '</td><td>' +
                '<select name="group_children">' +
                '<option selected="selected" value="0">0</option>' +
                '<option value="1">1</option><option value="2">2</option>' +
                '<option value="3">3</option><option value="4">4</option>' +
                '</select>' +
                '</td><td class="b"></td>' +
                '<td><a href="#" class="remove_rooms">Remove</a></td></tr>');

        $('.remove_rooms').bind('click', function() {
            $(this).parent().parent().remove();
            return false;
        });
        $('[name="group_children"]').unbind('change');
        $('[name="group_children"]').bind('change', addAgeControl);
        return false;
    });

    $('#searchbutton').click(function() {
        var intRegex = /^\d+$/;
        var inputs = $('#group_definition').find('input');
        var correct = true;
        for (i = 0; i < inputs.length; i++) {
            var input = inputs[i];
            if (!intRegex.test(input.value)) {
                input.value = "";
                if (correct)
                    input.focus();
                correct = false;
            }
        }
        $("#group_definition input[value=]").addClass('error');
        $('#group_definition input[value!=""]').removeClass('error');
        return correct;
    });
    function addAgeControl(event) {
        var count = this.value;
        var inputs = $(this).parent().next().find('input');

        var addedCount = inputs.length;
        if (count > addedCount) {
            for (i = addedCount; i < count; i++) {
                $(this).parent().next().append('<input type="text" name="age" maxlength="2" size="2" autocomplete="off">');
            }
        } else {
            for (i = addedCount - 1; i > count - 1; i--) {
                inputs[i].parentNode.removeChild(inputs[i]);
            }
        }

        addedCount = $('#group_definition').find('input').length;
        if (addedCount == 0)
            $('#ages_header').hide();
        else
            $('#ages_header').show();
    }

    $('[name="group_children"]').change(addAgeControl);

    $("#showPriceButton").click(function(c) {
        showAllCityHotels();
    });


    $(".internal-link").click(function(c) {
        var currentId = $(this).attr('id');
        //hotel
        if (currentId.substr(0, 4) == "nam_" || currentId.substr(0, 4) == "img_")
            window.location = "http://booking.traveloshop.com/hotel/" + currentId.substr(4) + ".html?" + getCurrencyParam();
        else if (currentId.substr(0, 6) == "runam_" || currentId.substr(0, 6) == "ruimg_")
            window.location = "http://booking.traveloshop.com/hotel/" + currentId.substr(6) + ".ru.html?" + getCurrencyParam();
        else if (currentId.substr(0, 5) == "city_") {//city all hotels
            showAllCityHotels();
        }
        return true;
    });
});

var filaMonth;
Date.MILLISECONDS_PER_DAY = Date.prototype.MILLISECONDS_PER_DAY = 86400000;

function showCalendar(img, cal, dt, frm, m, y, d) {
    if (document.getElementById) {

        var i = document.getElementById(img);
        var top = i.offsetTop + i.offsetHeight + 2;
        showCalendarByPos(img, cal, dt, frm, '', top, 0);
    }
}

function showCalendarByPos(img, cal, dt, frm, prefix, top, leftOffset) {
    if (document.getElementById) {

        window.calendarPrefix = prefix;
        var c = document.getElementById(cal);
        var f = document.getElementById(frm);
        var i = document.getElementById(img);
        var left = i.offsetLeft + leftOffset;
        calendar.calfrm = frm;
        calendar.cal = c;
        calendar.caldt = dt;
        calendar.calf = f;
        var my = f[dt + '_month'].value.split("-");
        y = my[0];
        m = my[1];
        d = f[ dt + '_day'].value;

        buildCal(y, m, d);
        c.style.position = "absolute";
        c.style.left = left + 'px';
        c.style.top = top + 'px';
        c.style.display = "block";
    }
}

function closeCal() {
    calendar.cal.style.display = 'none';
}

function buildCal(y, m, d) {
    var daysInMonth = [31,0,31,30,31,30,31,31,30,31,30,31];
    td = new Date();
    if (!y) y = td.getFullYear();
    if (!m) m = td.getMonth() + 1;
    if (!d) d = td.getDate;
    var frm = calendar.calfrm;
    var dt = calendar.caldt;

    var mDate = new Date(y, m - 1, 1);
    var firstMonthDay = mDate.getDay();
    daysInMonth[1] = (((mDate.getFullYear() % 100 != 0) && (mDate.getFullYear() % 4 == 0)) || (mDate.getFullYear() % 400 == 0)) ? 29 : 28;

    var today = (y == td.getFullYear() && m == td.getMonth() + 1) ? td.getDate() : 0;
    var t = '<table class="b_caltable" cellspacing="0"><tr class="b_calHeader">';
    var flm = td.getMonth() + 1;
    var flyr = td.getFullYear();
    for (p = 0; p <= 10; p++) {
        if (flm == m) {
            filaMonth = p;
        }
        flm++;
        if (flm > 12) {
            flm = 1;
            flyr++
        }
    }
    t += '<td colspan="7">';
    if (filaMonth == 0) {
        t += '&nbsp;&lt;&nbsp;';
    }
    else {
        t += '<a href="javascript:prevMonth(' + y + ',' + m + ');" title="' + tr.prevMonth + '">&nbsp;&lt;&nbsp;</a>';
    }
    t += '&nbsp;<select name="ym" onchange="goMonth(this.options[this.selectedIndex].value)">';
    var mn = td.getMonth() + 1;
    var yr = td.getFullYear();
    for (n = 0; n <= 10; n++) {
        t += '<option value="' + mn + '"';
        if (mn == m) {
            t += ' selected="selected"';
        }
        t += '>' + months[mn - 1] + ' ' + yr + '</option>';
        mn++;
        if (mn > 12) {
            mn = 1;
            yr++
        }
    }
    t += ' </select>&nbsp;';
    if (filaMonth == 10) {
        t += '&nbsp;&gt;&nbsp;';
    }
    else {
        t += '<a href="javascript:nextMonth(' + y + ',' + m + ');" title="' + tr.nextMonth + '">&nbsp;&gt;&nbsp;</a>';
    }
    t += '</td></tr>';
    t += '<tr class="b_calDayNames">';
    for (dn = 0; dn < 7; dn++) {
        var cl = '';
        if ((dn % 7 == 5) || (dn % 7 == 6)) cl += ' b_calWeekend';
        t += '<th class="' + cl + '">' + days[dn] + '</th>';
    }
    t += '</tr><tr class="b_calDays">';
    for (i = 1; i <= 42; i++) {
        var x = i - (firstMonthDay + 6) % 7;
        if (x > daysInMonth[m - 1] || x < 1) x = '&nbsp;';
        var cl = '';
        var href = 0;
        if ((i % 7 == 0) || (i % 7 == 6)) cl += ' b_calWeekend';
        if (x > 0) {
            var xDay = new Date(y, m - 1, x);
            if ((xDay.getFullYear() == y) && (xDay.getMonth() + 1 == m)
                    && (xDay.getDate() == d)) {
                cl += ' b_calSelected';
                href = 1
            }
            if ((xDay.getFullYear() == td.getFullYear())
                    && (xDay.getMonth() == td.getMonth())
                    && (xDay.getDate() == td.getDate())) {
                cl += ' b_calToday';
                href = 1;
            }
            else {
                if (xDay > td) {
                    cl += ' b_calFuture';
                    href = 1;
                }
                else {
                    if (xDay < td) {
                        cl += ' b_calPast'
                    }
                }
            }
        }
        t += '<td class="' + cl + '">';
        if (href) {
            t += '<a href="javascript:pickDate(' + y + ',' + m + ',' + x + ',\'' + dt + '\',\'' + frm + '\');">' + x + '</a>';
        } else {
            t += x;
        }
        t += '</td>';
        if (((i) % 7 == 0) && (i < 36)) {
            t += '</tr><tr class="b_calDays">';
        }
    }
    t += '</tr><tr class="b_calClose"><td colspan="7"><a href="javascript:closeCal();">' + tr.closeCalendar + '</a></td></tr></table>';
    document.getElementById(window.calendarPrefix + 'b_calendarInner').innerHTML = t;
}

function prevMonth(y, m) {

    if (new Date(y, m - 1, 1) < td) return;
    if (m > 1) {
        m--
    } else {
        m = 12;
        y--
    }
    buildCal(y, m);
}

function nextMonth(y, m) {
    //    if ((new Date(y,m-1,1) - td) > 1000*3600*24*300) return;
    if (m < 12) {
        m++;
    } else {
        m = 1;
        y++;
    }
    if (y > td.getFullYear() && m >= td.getMonth()) return;
    buildCal(y, m);
}

function goMonth(m) {
    var y = td.getFullYear();
    if (m < td.getMonth() + 1) y++;
    buildCal(y, m);
}

function pickDate(y, m, d, dt, frm) {
    // set form values
    var f = calendar.calf;
    var dt = calendar.caldt;
    f[dt + '_month'].value = y + "-" + m;
    f[dt + '_day'].value = d;
    if (dt == "b_checkin") {

        checkDateOrder(calendar.calfrm, 'b_checkin_day', 'b_checkin_month', 'b_checkout_day', 'b_checkout_month');
    }
    closeCal();
}

function checkDateOrder(formName, checkinDate, B, checkoutDate, E) {

    var form = document.getElementById(formName);
    var L,N = new Date(0),J = new Date(0),A;

    if (form[checkinDate].value !== "0") {
        N.setDate(form[checkinDate].value)
    }

    if (form[B].value !== "0") {
        L = form[B].value.split("-");
        N.setFullYear(L[0]);
        N.setMonth(L[1] - 1)
    }

    N.setHours(12);
    N.setMinutes(0);
    N.setSeconds(0);
    if (form[checkoutDate].value !== "0") {
        J.setDate(form[checkoutDate].value)
    }

    if (form[E].value !== "0") {
        L = form[E].value.split("-");
        J.setFullYear(L[0]);
        J.setMonth(L[1] - 1)
    }

    J.setHours(12);
    J.setMinutes(0);
    J.setSeconds(0);

    if (form[B].value !== "0") {
        while (N.getMonth() != form[B].value.split("-")[1] - 1) {
            N.setDate(N.getDate() - 1);
            form[checkinDate].value = N.getDate()
        }
        var D = N.getMonth() + 1;
        form[B].value = N.getFullYear() + "-" + D
    }
    if (N >= J) {
        J.setTime(N.getTime() + Date.prototype.MILLISECONDS_PER_DAY);

        A = J.getMonth() + 1;
        if (form[checkinDate].value !== "0") {
            form[checkoutDate].value = J.getDate();
        }
        if (form[B].value !== "0") {
            form[E].value = J.getFullYear() + "-" + A
        }
    }
}

function buildMonthes() {
    td = new Date();
    td.setDate(td.getDate() + 14);
    m = td.getMonth();
    y = td.getFullYear();
    checkinCombobox = document.getElementById("b_checkin_month");
    checkoutCombobox = document.getElementById("b_checkout_month");
    for (p = 0; p <= 11; p++) {
        if (m == 12) {
            m = 1;
            y += 1;
        }
        else {
            m += 1;
        }
        value = y + '-' + m;
        display = months[m - 1] + "'" + y.toString().substring(2, 4);
        checkinCombobox.options[p] = new Option(display, value);
        checkoutCombobox.options[p] = new Option(display, value);
    }
    document.getElementById("b_checkin_day").value = td.getDate();
    checkDateOrder('searchForm', 'b_checkin_day', 'b_checkin_month', 'b_checkout_day', 'b_checkout_month');
}
