addOnload(initBooking);

var ready = false;
var isHotel = true;

function initBooking() {
    var html = "";

    // type
    html += '<div> <input type="radio" class="radioCheck" name="lodgingType" value="hotel" onchange="changeLodgingType()">Hotel <input type="radio" class="radioCheck" name="lodgingType" value="hostel" onchange="changeLodgingType()">Hostel </div>';

    html += "<span class='lodgingFieldArea'>" + renderCountry() + "</span>";
    html += "<span class='lodgingFieldArea'>" + renderCity() + "</span>";
    html += "<span class='lodgingDateArea'>" + renderCalendar() + "</span>";
    html += "<span class='lodgingNightsArea'>" + renderNights() + "</span>";
    html += '<span id="lodgingSubmit"><button id="lodgingButton" type="button" onclick="findHotels()" class="icon"><img src="/ui/media/search-tb.png"></span>';

    var lodgingForm = document.getElementById("lodgingForm");
    // if no form, abort
    if (!lodgingForm)
        return;

    lodgingForm.innerHTML = html;

    // apply default (hotel), or apply current state
    if (isHotel)
        document.lodgingForm.lodgingType[0].checked = true;
    else
        document.lodgingForm.lodgingType[1].checked = true;

    refreshCities();

    ready = true;
}

function changeLodgingType() {
    isHotel = !isHotel;
    initBooking();
}

var months = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

function renderCalendar() {
    var html = "";

    // day
    html += "<select name='day'>";
    html += "<option value=''>day</option>";
    for (var j=1; j <= 31; j++) 
        html += "<option value='" + j + "'>" + j + "</option>";
    html += "</select>&nbsp;";

    // month
    html += "<select name='month'>";
    html += "<option value=''>month</option>";
    for (var j=0; j < 12; j++) 
        html += "<option value='" + (j+1) + "'>" + months[j] + "</option>";
    html += "</select>&nbsp;";

    // year
    html += "<select name='year'>";
    html += "<option value=''>year</option>";
    html += "<option value='2009'>2009</option>";
    html += "<option value='2010'>2010</option>";
    html += "</select>";

    return html; 
}

function renderNights() {
    var html = "<select name='nights'>";
    html += "<option value=''>- nights -</option>";
    html += "<option value='1'>1 night</option>";
    for (var j=2; j <= 31; j++) 
        html += "<option value='" + j + "'>" + j + " nights</option>";
    html += "</select>";
    return html;
}

function renderCountry() {
    var countries = isHotel ? hotelCountries : hostelCountries;
        
    var html = "<select name='country' onchange='loadCities()'>";
    html += "<option value=''>- country -</option>";
    for (var j=0; j < countries.length; j++) 
        html += "<option>" + countries[j]  + "</option>";
    html += "</select>";
    return html;
}

function renderCity() {
    return "<span id='cityList'></span>";
}

function loadCities() {
    var field = document.lodgingForm.country;
    var country = field.options[field.selectedIndex].text;
    var url = "/XmlService";
    var params = "event=getLodgingCities&isHotel=" + isHotel + "&country=" + encode(country);
    sendRequest(url + "?" + params, null, refreshCities);

}

function refreshCities(result) {
    html = "<select name='city'><option value=''>- city -</option>";
    if (result) {
        var cities = result.getElementsByTagName("city");
        for (var j=0; j < cities.length; j++) {
        var cities = result.getElementsByTagName("city");
            var value = cities[j].getAttribute("id");
            var name = decode(cities[j].firstChild.nodeValue);
            html += "<option value='" + value + "'>" + name  + "</option>";
        }
    }
    html += "</select>";
    document.getElementById("cityList").innerHTML = html;
}


function makeHotelUrl(locationId, month, day, year, nights) {
    var checkin = year + "-" + month + "-" + day;
    var d = new Date();
    d.setYear(year);
    d.setMonth(month-1);
    d.setDate(day + nights);

    var checkout = d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate();
    return "http://b2b.hotelclub.net/Enter.asp?id=47221&ru=SearchResults%2Easp%3Fid%3D" + locationId + "%26Checkin=" + checkin + "%26Checkout=" + checkout;
}

function makeHostelUrl(locationId, month, day, year, nights) {
    // country=<id>  -- used for countries
    return "http://www.hb-247.com/aff/index.cfm?affiliate=vcarious&fuseaction=search&day=" + day + "&month=" + month + "&year=" + year + "&nights=" + nights + "&loc=" + locationId;
}

function findHotels() {
    var city = document.lodgingForm.city.value;
    var month = parseInt(document.lodgingForm.month.value);
    var day = parseInt(document.lodgingForm.day.value);
    var year = parseInt(document.lodgingForm.year.value);
    var nights = parseInt(document.lodgingForm.nights.value);

    if (!city) { alert("Please select a city"); return; }
    if (!month) { alert("Please select the month you'll arrive."); return; }
    if (!day) { alert("Please select the day you'll arrive."); return; }
    if (!year) { alert("Please select the year you'll arrive."); return; }
    if (!nights) { alert("Please select the nights you'll stay."); return; }

    if (isHotel)
        window.location = makeHotelUrl(city, month, day, year, nights);
    else
        window.location = makeHostelUrl(city, month, day, year, nights);
}

var hostelCountries = new Array(
"Albania","Andorra","Argentina","Armenia","Australia","Austria","Azerbaijan","Bahamas","Bangladesh","Barbados","Belgium","Belize","Benin","Bolivia","Bosnia-Herzegovina","Botswana","Brazil","Bulgaria","Cambodia","Canada","Chile","China","Colombia","Cook Islands","Costa Rica","Croatia","Cuba","Cyprus","Czech Republic","Denmark","Dominican Republic","Ecuador","Egypt","El Salvador","England","Estonia","Faroe Islands","Fiji","Finland","France","French Polynesia","Germany","Ghana","Greece","Greenland","Guatemala","Haiti","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Ireland","Israel","Italy","Jamaica","Japan","Jordan","Kenya","Laos","Latvia","Liechtenstein","Lithuania","Luxembourg","Macedonia","Malawi","Malaysia","Malta","Mauritius","Mexico","Moldova","Monaco","Mongolia","Montenegro","Morocco","Mozambique","Myanmar","Namibia","Nepal","Netherlands","Netherlands Antilles","New Zealand","Nicaragua","Norfolk Island","Northern Ireland","Norway","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Poland","Portugal","Qatar","Romania","Russia","Samoa","San Marino","Scotland","Serbia","Singapore","Slovakia","Slovenia","South Africa","South Korea","Spain","Sri Lanka","St Lucia","Swaziland","Sweden","Switzerland","Taiwan","Tanzania","Thailand","Tonga","Trinidad & Tobago","Tunisia","Turkey","USA","Uganda","Ukraine","United Arab Emirates","Uruguay","Vanuatu","Venezuela","Vietnam","Wales","Zambia","Zimbabwe"
);

var hotelCountries = new Array(
"Andorra","Antigua & Barbuda","Argentina","Aruba","Australia","Austria","Bahamas","Bahrain","Barbados","Belgium","Bolivia","Bosnia & Herzegovina","Brazil","Brunei","Bulgaria","Cambodia","Canada","Chile","China","Colombia","Cook Islands","Costa Rica","Croatia","Cyprus","Czech Republic","Denmark","Dominican Republic","Ecuador","Egypt","Estonia","Fiji","Finland","France","French Polynesia","Germany","Greece","Grenada","Guadeloupe","Guam","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Ireland","Israel","Italy","Jamaica","Japan","Jordan","Kenya","Kuwait","Laos","Latvia","Lebanon","Lithuania","Luxembourg","Macau","Malaysia","Malta","Mauritius","Mexico","Monaco","Morocco","Myanmar","Namibia","Nepal","Netherlands","New Caledonia","New Zealand","Northern Mariana Islands","Norway","Oman","Panama","Paraguay","Peru","Philippines","Poland","Portugal","Puerto Rico","Qatar","Romania","Russia","Saint Martin / Sint Maarten","Samoa","Saudi Arabia","Seychelles","Singapore","Slovakia","Slovenia","South Africa","South Korea","Spain","Sri Lanka","Sweden","Switzerland","Syria","Taiwan","Tanzania","Thailand","Tonga","Trinidad & Tobago","Tunisia","Turkey","Turks & Caicos Islands","Ukraine","United Arab Emirates","United Kingdom","United States","Uruguay","Uzbekistan","Vanuatu","Venezuela","Vietnam"
);
