﻿// PAZI - globalne varijable
var g_MinStayDaySpan = 7;
var g_MaxStayDaySpan = 30;

function BshOlbClient() {

  this.serverUrl = "";
  this.lang = "hr";
  this.destinationsCombo = null;
  this.interestsCombo = null;
  this.hotelsCombo = null;
  this.arrivalDatePicker = null;
  this.departureDatePicker = null;

  this.bshHandleAjaxRequest = bshHandleAjaxRequest;
  this.bshAjaxCallback = bshAjaxCallback;
}

function bshHandleAjaxRequest(eventArgs) {
  var item = eventArgs.get_item();
  var combo = item.get_comboBox();
  var getDataUrl = this.serverUrl + "?combo=" + combo.get_id() + "&value=" + item.get_value() + "&lang=" + this.lang;

  if (this.destinationsCombo.get_value() != null) {
    getDataUrl = getDataUrl + "&destination=" + this.destinationsCombo.get_value();
  }

  if (this.interestsCombo.get_value() != null) {
    getDataUrl = getDataUrl + "&interest=" + this.interestsCombo.get_value();
  }

  if (this.hotelsCombo.get_value() != null) {
    getDataUrl = getDataUrl + "&hotel=" + this.hotelsCombo.get_value();
  }
  
  var self = this;
  jQuery.getJSON(getDataUrl, '', function(data) { bshAjaxCallback(self, data); });
}

function bshAjaxCallback(client, JSONData) {
  var myJSON = eval(JSONData);

  if (myJSON.Destinations != null) {
    setComboItems(client.destinationsCombo, myJSON.Destinations);
  }

  if (myJSON.Interests != null) {
    setComboItems(client.interestsCombo, myJSON.Interests);
  }

  if (myJSON.Hotels != null) {
    setComboItems(client.hotelsCombo, myJSON.Hotels);
  }

  if (myJSON.Arrival != null && myJSON.Arrival != "") {
      setDatePicker(client.arrivalDatePicker, myJSON.Arrival);
  }

  if (myJSON.Departure != null && myJSON.Departure != "") {
    setDatePicker(client.departureDatePicker, myJSON.Departure);
  }

  if (myJSON.MinStayDaySpan != null && myJSON.MinStayDaySpan > 0) {
    g_MinStayDaySpan = myJSON.MinStayDaySpan;
  }

  if (myJSON.ClearSelectedHotel != null && myJSON.ClearSelectedHotel) {
    clearHotelsComboSelection(client.hotelsCombo);
  }
}

function clearHotelsComboSelection(hotelsCombo) {
  var items = hotelsCombo.get_items();

  var visibleItems = 0;
  // idem od index-a 1 jer je prvi "odaberite ..."
  for (xx = 1; xx < items.get_count(); xx++) {
    if (items.getItem(xx).get_visible())
      visibleItems++;
  }

  if (visibleItems == 1) {
    // idem od index-a 1 jer je prvi "odaberite ..."
    for (xx = 1; xx < items.get_count(); xx++) {
      if (items.getItem(xx).get_visible()) {
        items.getItem(xx).select();
        break;
      }
    }    
  } else { 
    items.getItem(0).select(); 
  }
}

function setComboItems(combo, itemsData) {
  var items = combo.get_items();
  combo.trackChanges();
  for (var data in itemsData) {
    if (data != null) {
      var comboItem = combo.findItemByValue(data);
      if (comboItem != null) {
        (itemsData[data] == "0") ? comboItem.set_visible(false) : comboItem.set_visible(true);
      }
    }
  }
  combo.commitChanges();
}

function setDatePicker(datePicker, data) {
  var dates = data.split("-");
  if (dates.length == 2) {

    // Makni limit za min i max za daparture jer inače puca ako npr. postavim mindate veći od prethodno postavljenog max date
    datePicker.set_minDate(new Date(1980, 0, 1));    // Izgleda bezveze, al navodno da tako i Telerik postavlja
    datePicker.set_maxDate(new Date(2099, 11, 31));  // Izgleda bezveze, al navodno da tako i Telerik postavlja  
  
    var dateMin = new Date(dates[0]);
    var dateMax = new Date(dates[1]);

    datePicker.set_minDate(dateMin);
    datePicker.set_maxDate(dateMax);

    var selectedDate = datePicker.get_selectedDate();
    if (selectedDate < dateMin || selectedDate > dateMax)
        datePicker.clear();

    }
}

