var loadMinMaxDates;

$(document).ready(function() {
    $("#mass-type input").change(function () {
		if ($(this).val() == "area") {
			$("#mass-district").hide();
		}
	});

    // Tabs

    $("#reservation_box h3 a").click(function (event) {
        $("#reservation_box div").hide().filter(this.hash).show();

        $("#reservation_box h3 a").removeClass("active");
        $(this).addClass("active");

        return false;
      }).filter(":first").click();

    // Dates
	
	loadMinMaxDates = function (hotel_id) {
        $.get(link_hotelInfo, { id: hotel_id }, function(data) {
            var start = $("#single-start-date");
            var end = $("#single-end-date");
            start.datepicker("option", "minDate", data.min > 0 ? data.min : new Date());
            start.datepicker("option", "maxDate", data.max > 0 ? data.max : null);
            end.datepicker("option", "minDate", Number(data.min) + 1);
          });
	}

    $("#single-hotel-select").change(function(event) {
        var hotel_id = $(event.target).val();
        if (hotel_id == 0) { return; }
		loadMinMaxDates(hotel_id);
      });

    function setMinDate(source, target) {
      var date = new Date();
      date.setTime(source.datepicker("getDate").getTime() + 1000 * 60 * 60 * 24);
      target.datepicker("option", "minDate", date);
    }

    var single = $("#single-start-date");
    var mass = $("#mass-start-date");

    single.datepicker("option", "minDate", new Date());
    single.datepicker("option", "onSelect", function(date, elem) {
        setMinDate(single, $("#single-end-date"));
      });

    mass.datepicker("option", "minDate", new Date());
    mass.datepicker("option", "onSelect", function(date, elem) {
        setMinDate(mass, $("#mass-end-date"));
      });

    // City -> District -> Hotel cascading

    var hotel_select = $("#single-hotel-select");
    var hotels = [];
    hotel_select.find("option").each(function (i, elem) {
        hotels[i] = elem;
      });

    var district_select = $("#single-district-select");
    var districts = [];
    district_select.find("option").each(function (i, elem) {
        districts[i] = elem;
      });

    var city_select = $("#single-city-select");

    city_select.change(function(event) {
        var city_id = $(event.target).val();
        // districts
        district_select.find("option").remove();
        for (var i in districts) {
          var district = districts[i];
          if (city_id == 0
              || district.getAttribute("value") == 0
              || district.getAttribute("rel") == city_id) {
            district_select.append(district);
          }
        }
        district_select.val(0);
        // hotels
        hotel_select.find("option").remove();
        for (var i in hotels) {
          var hotel = hotels[i];
          var rel = hotel.getAttribute("rel");
          if (rel != null) {
            rel = rel.split("-");
          }
          if (city_id == 0
              || hotel.getAttribute("value") == 0
              || rel == null
              || rel[0] == city_id) {
            hotel_select.append(hotel);
          }
        }
        hotel_select.val(0);
      });

    district_select.change(function(event) {
        var district_id = $(event.target).val();

        if (district_id == 0) {
          city_select.change();
          district_select.val(0);
          return;
        }

        // hotels
        hotel_select.find("option").remove();
        for (var i in hotels) {
          var hotel = hotels[i];
          var rel = hotel.getAttribute("rel");
          if (rel != null) {
            rel = rel.split("-");
          }
          if (district_id == 0
              || hotel.getAttribute("value") == 0
              || rel == null
              || (rel.length == 2 && rel[1] == district_id)) {
            hotel_select.append(hotel);
          }
        }
        hotel_select.val(0);
      });

    if (city_select.val() != "0") {
      var district_id = district_select.val();
      var hotel_id = hotel_select.val();
      city_select.change();
      district_select.val(district_id);
      district_select.change();
      hotel_select.val(hotel_id);
    }

    var mass_district_select = $("#mass-district-select");
    var mass_districts = [];
    mass_district_select.find("option").each(function (i, elem) {
        mass_districts[i] = elem;
      });

    var mass_city_select = $("#mass-city-select");

    mass_city_select.change(function(event) {
        var city_id = $(event.target).val();
        // districts
        mass_district_select.find("option").remove();
        for (var i in mass_districts) {
          var district = mass_districts[i];
          if (city_id == 0
              || district.getAttribute("value") == 0
              || district.getAttribute("rel") == city_id) {
            mass_district_select.append(district);
          }
        }
        mass_district_select.val(0);
      });

    // Single average prices

    var price = $("<small></small>").attr("class", "hint").attr("id", "single-average_price");
    $("#single-offer-input").parent().append(price);

    $("#single-offer-input").focus(function () {
        price = $("#single-average_price").show();
        var hotel_id = hotel_select.val();
        if (hotel_id == 0) {
          price.html("Nejdříve, prosím, vyberte hotel.");
          return;
        }
        if (price.data("source") != hotel_id) {
          price.html("Načítám průměrnou cenu...");
          $.get(link_averagePrice, { mode: "hotel", id: hotel_id }, function(data) {
              price.data("source", hotel_id);
              price.html(data.price);
            });
        }
      }).blur(function () {
          price.hide();
        });

    // Mass average prices

    function getMaxRating() {
      var max = -1;
      $("#mass-ratings input:checked").each(function (i, elem) {
          var val = $(elem).val();
          if (val > max) { max = val; }
        });
      return max;
    }

    var price = $("<small></small>").attr("class", "hint").attr("id", "mass-average_price");
    $("#mass-offer-input").parent().append(price);

    $("#mass-offer-input").focus(function () {
        price = $("#mass-average_price").show();
        var mode = $("#mass-type-input-0:checked").length ? "city" : "area";
        var id = $("#mass-" + mode + "-select").val();
        if (id == 0) {
          price.html(mode == "city"
                     ? "Nejdříve, prosím, vyberte město."
                     : "Nejdříve, prosím, vyberte oblast.");
          return;
        }
        var rating = getMaxRating();
        if (rating == -1) {
          price.html("Vyberte požadovanou kvalitu hotelů.");
          return;
        }
        if (price.data("source") != id || price.data("mode") != mode ||
            price.data("rating") != rating) {
          price.html("Načítám průměrnou cenu...");
          $.get(link_averagePrice, { mode: mode, id: id, rating: getMaxRating() },
                function(data) {
                  price.data("source", id);
                  price.data("mode", mode);
                  price.data("rating", rating);
                  price.html(data.price);
                });
        }
      }).blur(function () {
          price.hide();
        });
  });
