
  function airticketBookingFormInit() {
    var from_destination_whisper = new EditWhisper({
      id: 'from_destination',
      id_edit: 'from_destination_edit',
      default_to_whisper: getOptionsData('from_destination_whisper_default'),
      call: 'AresAirticketBooking.suggest',
      params: {lang: el('lang').value}
    });
    var to_destination_whisper = new EditWhisper({
      id: 'to_destination',
      id_edit: 'to_destination_edit',
      default_to_whisper: getOptionsData('to_destination_whisper_default'),
      call: 'AresAirticketBooking.suggest',
      params: {lang: el('lang').value}
    });
    passengerListInit(el('passengers_adt')).options[1].selected = true;
    if (el('passengers_yth')) {
      passengerListInit(el('passengers_yth'));
      passengerListInit(el('passengers_ycd'));
      passengerListInit(el('passengers_inf'));
      passengerListInit(el('passengers_chd'));
    }
    if (navigator.appName == 'Microsoft Internet Explorer') {
      loadAirlines();
    }
    __attachEvent(el('flight_type_one_way'), 'click', checkRoundTrip);
    __attachEvent(el('flight_type_round_trip'), 'click', checkRoundTrip);
    checkRoundTrip();
  }
  
  function checkRoundTrip() {
    ds = el('flight_type_round_trip').checked ? 'block' : 'none';
    el('to_date').style.display = ds;
    //el('to_date_label').style.display = ds;
    //el('to_date_day').style.display = ds;
    //el('to_date_month_year_div').style.display = ds;
  }


  function getOptionsData(a_element_id) {
    var result = Array();
    if (element = el(a_element_id)) {
      for (i = 0; i < element.options.length; i++)
        result[i] = {value: element.options[i].value, text: element.options[i].text};
    }
    return result;
  }

  function passengerListInit(a_element) {
    a_element.options.length = 1;
  //   a_element.options[a_element.options.length] = new Option('-', 0);
    for (i = 1; i < 6; i++)
      a_element.options[a_element.options.length] = new Option(i + 'x', i);
    return a_element;
  }

  function loadAirlines() {
    if (this.airlines = el('prefer_airline')) {
      if (this.airlines.length == 1) {
        request(
          {call: 'AresAirticketBooking.loadAirlines'},
          {method: loadAirlinesCallback, params: {}}
        );
      }
    }
  }

  function loadAirlinesCallback(a_data, a_params) {
    this.airlines = el('prefer_airline');
    this.add = function(a_option) {
      this.airlines.options[this.airlines.length] = a_option;
    }
    for (key in a_data)
      this.add(new Option(a_data[key].text, a_data[key].value));
  }

  function submitBookingForm() {
    var params = {
      call: 'AresAirticketBooking.submit',
      lang: el('lang').value,
 // destinations
      from_destination: el('from_destination_edit').value,
//      from_iata: elm('from_iata').value,
      departure_date: el('from_date_day').value + '.' + el('from_date_month_year').value,
      to_destination: el('to_destination_edit').value,
//      to_iata: elm('tu_iata').value,
      arrival_date: el('to_date_day').value + '.' + el('to_date_month_year').value,
 // others
      round_trip: getRadioValue('round_trip'),
      cabin: getRadioValue('cabin'),
      pricer: getRadioValue('pricer'),
      search_interval: el('search_interval').value,
      only_available_flights: el('only_available_flights').checked,
      only_direct_flights: el('only_direct_flights').checked,
      prefer_airline: el('prefer_airline').value,
 // passengers
      passengers_adt: el('passengers_adt').value,
      passengers_chd: el('passengers_chd').value,
      passengers_inf: el('passengers_inf').value,
      passengers_ycd: el('passengers_ycd').value,
      passengers_yth: el('passengers_yth').value
    };
    request(params,
      {method: submitBookingFormCallback, params: {}}
    );
    return false;
  }

  function submitBookingFormCallback(a_data, a_params)
  {
 /*  * Chybove kody.
     * 1 - Zvolte si prosím preferenci pro vyhledávání. (Vyber ceniku)
     * 2 - Špatný formát data odletu
     * 3 - Špatný formát data návratu
     * 4 - Zadejte prosím minimálně 3 znaky destinace odletu !
     * 5 - Destinace odletu nebyla nalezena !
     * 6 - destinace odletu musi byt alespon 3 znaky
     * 7 - Destinace návratu nebyla nalezena !
    ** 8 - Vyberte si prosím leti‘tě návratu!
     * 9 - Datum odletu musí být vět‘í než aktuální datum.
     * 10 - Datum návratu musí být vět‘í než aktuální datum.
     * 11 - Vyberte si prosím cestující nebo pokračujte !
    ** 12 - Vyberte si prosím pouze 1 místo odletu !
     * 13 - spatne vyplnene session id (kdyz mam spatne, tak musim zavolat s null hodnotou pro zisk noveho)
     * 1000 - neocekavana chyba
 */
 // show whisper
    fillWhisper = function(whisper, data) {
      whisper.clear();
      for (i in data) {
        whisper.add(i, data[i], data[i]);
      }
      whisper.show();
    }

 // analyze
    if (a_data.status != 0) {
      alert(a_data.message);

      if (a_data.status == 2 || a_data.status == 9) {
        el('from_date_day').focus();
      }
      else if (a_data.status == 3 || a_data.status == 10) {
        el('to_date_day').focus();
      }
      else if (a_data.status == 4 || a_data.status == 5) {
        el('from_destination_edit').focus();
      }
      else if (a_data.status == 6 || a_data.status == 7) {
        el('to_destination_edit').focus();
      }
      else if (a_data.status == 8) {
        fillWhisper(el('to_destination_edit').owner, a_data.to_destination_list);
      }
      else if (a_data.status == 11) {
      }
      else if (a_data.status == 12) {
        fillWhisper(el('from_destination_edit').owner, a_data.from_destination_list);
      }
    }
    else {
      if (a_data.session_id != undefined) {
        elm('session_id').value = a_data.session_id;
      }
      el('airticket_reservation_form').target  = '_top';
      el('airticket_reservation_form').submit();
    }
  }

  function doDestinationBrowse(a_name) {
    try {
//      var script = el('destination_browser_script').value;
      var lang = el('lang').value;
      var width = el('destination_browser_window_width').value;
      var height = el('destination_browser_window_height').value;
      var top = (screen.height - height) / 2;
      var left = (screen.width - width) / 2;
      return window.open('', a_name, 'width=' + width + ',height=' + height + ',top=' + top + ',left=' + left, ',resizable=1,scrollbars=1');
    }
    catch (e) {
      alert('doDestinationBrowse: ' + e);
    }
  }

  function initDestinationBrowser(a_handle, a_callback, a_default_list) {
	var w = a_handle.document;
	w.write('<html><head><title>' + document.title + '</title>');
	w.write('<link rel="stylesheet" href="styles/airticket_booking_destination_browser.css">');
	w.write('</head><body><div id="airports"><div id="defaults"></div>');
	w.write('</body></html>');
	w.close();
    a_handle.callback = a_callback;
    a_handle.defaultList = a_default_list;

    a_handle.loadStatesCallback = function(a_data, a_params) {
      defaults = a_params.handle.defaultList;
      for (id in defaults) {
        eairport = a_params.handle.document.createElement('div');
        eairport.className = 'airport';
        eairport.innerHTML = '<b>' + defaults[id].text + '</b>';
        eairport.result = defaults[id].value;
//        eairport.iata = defaults[id].value;
        __attachEvent(eairport, 'click', doDestinationBrowserClick);
        e = el('defaults', a_params.handle);
        e.__this = a_params.handle;
        e.appendChild(eairport);
      }
      for (id in a_data) {
        if (a_data[id].id != undefined) {
          estate = a_params.handle.document.createElement('div');
          estate.className = 'state';
          estate.innerHTML = '<b>' + a_data[id].state + '</b> (' + a_data[id].continent + ')';
          eairports = a_params.handle.document.createElement('div');
          eairports.id = 'airports:' + a_data[id].id;
          __attachEvent(estate, 'click', doDestinationBrowserClick);
          ediv = a_params.handle.document.createElement('div');
          ediv.className = 'packed';
          ediv.appendChild(estate);
          ediv.appendChild(eairports);
          e = el('airports', a_params.handle);
          e.__this = a_params.handle;
          e.appendChild(ediv);
        }
      }
    }
    a_handle.loadAirportsCallback = function(a_data, a_params) {
      for (id in a_data) {
        if (a_data[id].city != undefined && a_data[id].airport != undefined && a_data[id].iata != undefined) {
          eairport = a_params.handle.document.createElement('div');
          eairport.className = 'airport';
          eairport.innerHTML = '<b>' + a_data[id].city + '</b> / ' + a_data[id].airport + ' (' + a_data[id].iata + ')';
  //        eairport.innerHTML = '<b>' + a_data[id].city + '</b> (' + a_data[id].iata + ')';
          eairport.result = a_data[id].city + ' (' + a_data[id].iata + ')';
  //        eairport.iata = a_data[id].iata;
          __attachEvent(eairport, 'click', doDestinationBrowserClick);
          a_params.parent.appendChild(eairport);
        }
      }
    }
    var params = {
      call: 'AresAirticketBooking.getDestinationBrowserStates',
      lang: el('lang').value
    }
    request(params, {method: a_handle.loadStatesCallback, params: {handle: a_handle}});
  }

  function doDestinationBrowserClick(e) {
    var element = e.target ? e.target : e.srcElement;
    c = element;
    while (c.__this == undefined) {
      c = c.parentNode;
    }
    if (element.nodeName == 'B') {
      element = element.parentNode;
    }
    if (element.className.indexOf('state') != -1) {  // is state
      if (element.parentNode.className.indexOf('unpacked') == -1) {
        element.parentNode.className = 'unpacked';
        ea = element.parentNode.lastChild;
        if (ea.childNodes.length == 0) {
          var id = ea.id.split(':');
          var params = {
            call: 'AresAirticketBooking.getDestinationBrowserAirports',
            lang: el('lang').value,
            state: id[1]
          }
          request(params, {method: c.__this.loadAirportsCallback, params: {handle: c.__this, parent: element.parentNode.lastChild}});
        }
      }
      else
        element.parentNode.className = 'packed';
    }
    else if (element.className.indexOf('airport') != -1) {
      c.__this.callback.call(this, element.result, element.iata);
      c.__this.close();
    }
  }

  function doFromDestinationBrowse() {
    handle = doDestinationBrowse('wnd_from_destination_browser');
    initDestinationBrowser(handle, doFromDestinationBrowseCallback, getOptionsData('from_destination_browser_default'));
  }

  function doToDestinationBrowse() {
    handle = doDestinationBrowse('wnd_to_destination_browser');
    initDestinationBrowser(handle, doToDestinationBrowseCallback, getOptionsData('to_destination_browser_default'));
  }

  function doFromDestinationBrowseCallback(a_contents, a_iata) {
    el('from_destination_edit').value = a_contents;
//    el('from_iata').value = a_iata;
  }

  function doToDestinationBrowseCallback(a_contents, a_iata) {
    el('to_destination_edit').value = a_contents;
//    el('to_iata').value = a_iata;
  }

  __attachEvent = function(a_element, a_event_name, a_function) {
    try {
      a_element.detachEvent('on' + a_event_name, a_function); // zatim takto... aby nastavil udalost jen jednou
      a_element.attachEvent('on' + a_event_name, a_function);
    }
    catch (e) {
//alert('set event');
      try {
        a_element.addEventListener(a_event_name, a_function, false);
      }
      catch (e) {
        alert('problem with attachEvent(): ' + e);
      }
    }
  }

  function el(id, owner) {
    if (owner !=  undefined) {
      return owner.document.getElementById(id);
    }
    else {
      return document.getElementById(id);
    }
  }

  function elm(name) {
    return document.getElementsByName(name).item(0);
  }

  function getRadioValue(name) {
    var c = document.getElementsByName(name);
    for (i = 0; i < c.length; i++) {
      if (c.item(i).checked) {
        return c.item(i).value;
      }
    }
  }
