function var_dump(v){ s=''; if(typeof(v)=='object'){ for(i in v) s+= i+': '+v[i]+"\n"; } else return v; return s; }
/**
 * Preparing data from external data
 * @link https://search.DoToTravel.com/content/air/odysol-en-airports.js
 */
function prepareSuggestData()
{ 
  // Fix array indexOf function.
  [].indexOf || (Array.prototype.indexOf = function(v){
         for(var i = this.length; i-- && this[i] !== v;);
         return i;
  });

  // List of ignore airport codes.
  var arPriorAirports    = ['LED'];
  var arIgnoreAirports = ['SNP', 'FSP', 'KWP', 'PIE', 'PBI', 'TPA'];

  // Check data if exists.
  if ('undefined' == typeof(YAHOO.ajax)) YAHOO.namespace('ajax');
  if ('undefined' != typeof(YAHOO.ajax.Flights)) return YAHOO.ajax.Flights['directions'];

  var hashCountries = {};
  var arAirports = [];
  
  // Build countries hash.
  for (var i = 0; i < c_values.length; i++)
  {
    hashCountries[c_values[i].substring(0, c_values[i].indexOf(':'))] = c_values[i].substring((c_values[i].indexOf(':') + 1), c_values[i].length);
  }

  // Build airports array.
  for (ckey in hashCountries)
  {
    var airCode = null;
    // if country has provincy.
    if ('undefined' != typeof(s_values[ckey]))
    {
      for (i in s_values[ckey])
      {
        var akey = ckey + ':' + s_values[ckey][i];
        for (var j in a_values[akey])
        {

          if(typeof(a_values[akey][j]) != 'function') {
              airCode = a_values[akey][j].substring(0, a_values[akey][j].indexOf(':'));
              if (-1 == arIgnoreAirports.indexOf(airCode))
              {
                arAirports.push('[' + airCode + '] ' +  a_values[akey][j].substring((a_values[akey][j].indexOf(':') + 1), a_values[akey][j].length) + ', ' + s_values[ckey][i] + ', ' + hashCountries[ckey]);
              }
          }
        }
      }
    }
    else {
      var akey = ckey + ':All';
      for (i in a_values[akey])
      {
          if(typeof(a_values[akey][i]) != 'function') {

            airCode = a_values[akey][i].substring(0, a_values[akey][i].indexOf(':'));
            if (-1 == arIgnoreAirports.indexOf(airCode))
            {
              arAirports.push('[' + airCode + '] ' +  a_values[akey][i].substring((a_values[akey][i].indexOf(':') + 1), a_values[akey][i].length) + ', ' + hashCountries[ckey]);
            }
    
          }    
      }
    }
  }
  YAHOO.ajax.Flights = {"directions": arAirports};
}

/**
 * Preparing data from external data
 * @link https://search.DoToTravel.com/content/air/odysol-en-airports.js
 */
function prepareJQSuggestData()
{ 
  // Fix array indexOf function.
  [].indexOf || (Array.prototype.indexOf = function(v){
         for(var i = this.length; i-- && this[i] !== v;);
         return i;
  });

  // List of ignore airport codes.
  var arPriorAirports    = ['LED'];
  var arIgnoreAirports = ['SNP', 'FSP', 'KWP', 'PIE', 'PBI', 'TPA'];

  var hashCountries = {};
  var arAirports = [];
  
  // Build countries hash.
  for (var i = 0; i < c_values.length; i++)
  {
    hashCountries[c_values[i].substring(0, c_values[i].indexOf(':'))] = c_values[i].substring((c_values[i].indexOf(':') + 1), c_values[i].length);
  }

  // Build airports array.
  for (ckey in hashCountries)
  {
    var airCode = null;
    // if country has provincy.
    if ('undefined' != typeof(s_values[ckey]))
    {
      for (i in s_values[ckey])
      {
        var akey = ckey + ':' + s_values[ckey][i];
        for (var j in a_values[akey])
        {

          if(typeof(a_values[akey][j]) != 'function') {
              airCode = a_values[akey][j].substring(0, a_values[akey][j].indexOf(':'));
              if (-1 == arIgnoreAirports.indexOf(airCode))
              {
                arAirports.push('[' + airCode + '] ' +  a_values[akey][j].substring((a_values[akey][j].indexOf(':') + 1), a_values[akey][j].length) + ', ' + s_values[ckey][i] + ', ' + hashCountries[ckey]);
              }
          }
        }
      }
    }
    else {
      var akey = ckey + ':All';
      for (i in a_values[akey])
      {
          if(typeof(a_values[akey][i]) != 'function') {

            airCode = a_values[akey][i].substring(0, a_values[akey][i].indexOf(':'));
            if (-1 == arIgnoreAirports.indexOf(airCode))
            {
              arAirports.push('[' + airCode + '] ' +  a_values[akey][i].substring((a_values[akey][i].indexOf(':') + 1), a_values[akey][i].length) + ', ' + hashCountries[ckey]);
            }
    
          }    
      }
    }
  }

  return arAirports;
  
}

/**
 * Callback for init Autosuggest field.
 */
var flightFromBox = 0;
function initFlightFromAutosuggest()
{
  return(prepareJQSuggestData());
}

/**
 * Callback for init Autosuggest field.
 */
var flightToBox = 0;
function initFlightToAutosuggest(namespace)
{
  return(prepareJQSuggestData());
}

YAHOO.util.Event.onDOMReady(function()
{
  YAHOO.namespace('expand');
  YAHOO.expand.arBlocks = {'close': [], 'open': []};
  YAHOO.expand.arBlocks['close'] = YAHOO.util.Selector.query('.expand .close');
  YAHOO.expand.arBlocks['open'] = YAHOO.util.Selector.query('.expand');
  for (var ix in YAHOO.expand.arBlocks) {
    switch(ix) {
      case 'close':
        if (YAHOO.expand.arBlocks[ix].length) {
          for (var i in YAHOO.expand.arBlocks[ix]) {
            YAHOO.util.Event.addListener(YAHOO.expand.arBlocks[ix][i], 'click', toggleExpandBlock);
          }
        }
      break;
      case 'open':
        if (YAHOO.expand.arBlocks[ix].length) {
          for (var i in YAHOO.expand.arBlocks[ix]) {
            YAHOO.util.Event.addListener(YAHOO.expand.arBlocks[ix][i], 'click', toggleExpandBlock);
          }
        }
      break;
    }
  }
});

/**
 * Flights block expander
 */
function toggleExpandBlock(event)
{
  var target = YAHOO.util.Event.getTarget(event);
  var node = YAHOO.util.Dom.getNextSibling(target.parentNode);
  if (null !== node)
  {
    var display = YAHOO.util.Dom.getStyle(node, 'display');
    if (display == 'none')
    {
      YAHOO.util.Dom.setStyle(node, 'display', 'block');
      YAHOO.util.Dom.replaceClass(target, 'expand close', 'expand');
    }
    else {
      YAHOO.util.Dom.setStyle(node, 'display', 'none');
      YAHOO.util.Dom.replaceClass(target, 'expand', 'expand close');
    }
  }
}

/**
 * Class for flights form validation.
 */
with(flightForm = function(idForm){
  YAHOO.util.Event.onContentReady(idForm, this.handleOnContentReady, this);
}) {
  this.szMultiBlock = 1;
  this.maxMultiBlock = 5;
  prototype.idForm = null;
  prototype.formElement = null;

  /**
   */
  this.addMultiBlock = function(event)
  {
    if (maxMultiBlock > szMultiBlock) {
      var name = 'multidest_block' + (szMultiBlock++);
      YAHOO.util.Dom.replaceClass(name, 'hidden', 'show');
      YAHOO.util.Dom.get('multidestCount').value = szMultiBlock;
    }
  }

  /**
   */
  this.delMultiBlock = function(event)
  {
    if (1 < szMultiBlock) {
      var name = 'multidest_block' + (--szMultiBlock);
      YAHOO.util.Dom.replaceClass(name, 'show', 'hidden');
      YAHOO.util.Dom.get('multidestCount').value = szMultiBlock;
    }
  }

  /**
   */
  this.cleanMultiBlock = function(event) {
    for(szMultiBlock; 1 < szMultiBlock;) delMultiBlock();
  }

  /**
   * Handle for load content.
   */
  prototype.handleOnContentReady = function()
  {
    prototype.idForm = this.id;
    prototype.formElement = YAHOO.util.Dom.get(prototype.idForm);
    if (null != prototype.formElement) {
      YAHOO.util.Event.addListener(prototype.formElement, 'submit', this.handleOnSubmit);
    }

    // путь: туда/туда-обратно.
    var node = YAHOO.util.Dom.get('flight_type_0');

    if (node && node.checked) {YAHOO.util.Dom.replaceClass('flightReturnBlock', 'hidden', 'show');}
    else {YAHOO.util.Dom.replaceClass('flightReturnBlock', 'show', 'hidden');}

    YAHOO.util.Event.on(YAHOO.util.Dom.get('flight_type_0'), 'click', function(e)
    {
      YAHOO.util.Dom.replaceClass('flightReturnBlock', 'hidden', 'show');
      cleanMultiBlock();
      YAHOO.util.Dom.replaceClass('multidest_buttons', 'show', 'hidden');
    });

    YAHOO.util.Event.on(YAHOO.util.Dom.get('flight_type_1'), 'click', function(e) {
      YAHOO.util.Dom.replaceClass('flightReturnBlock', 'show', 'hidden');
      cleanMultiBlock();
      YAHOO.util.Dom.replaceClass('multidest_buttons', 'show', 'hidden');
    });

    // check: мультивыбор.
    var node = YAHOO.util.Dom.get('flight_type_2');
    if (node && node.checked) {YAHOO.util.Dom.replaceClass('multidest_buttons', 'hidden', 'show');}
    else {YAHOO.util.Dom.replaceClass('multidest_buttons', 'show', 'hidden');}

    YAHOO.util.Event.on(YAHOO.util.Dom.get('flight_type_2'), 'click', function(e) {
      YAHOO.util.Dom.replaceClass('flightReturnBlock', 'show', 'hidden');
      YAHOO.util.Dom.replaceClass('multidest_buttons', 'hidden', 'show');
    });

    YAHOO.util.Event.on(YAHOO.util.Dom.get('multidest_add'), 'click', addMultiBlock);
    YAHOO.util.Event.on(YAHOO.util.Dom.get('multidest_del'), 'click', delMultiBlock);

    // Календари.
    YAHOO.util.Event.on(document, 'click', function(e) {
        var el = YAHOO.util.Event.getTarget(e);
    });
  }

  /**
   * 
   */
  prototype.handleOnSubmit = function(event)
  {
    for (var i = 0; i < szMultiBlock ; i++)
    {
      for(var j=0; j < this.formElement.elements.length; j++)
      {
          if (undefined == this.formElement.elements[j].name) continue;

          var fieldName = 'flight[' + i + '][from]';
          if (fieldName == this.formElement.elements[j].name && '' == this.formElement.elements[j].value) {
        alert("Field 'From' is required!");
        return false;
          }

          var fieldName = 'flight[' + i + '][to]';
          if (fieldName == this.formElement.elements[j].name && '' == this.formElement.elements[j].value) {
        alert("Field 'To' is required!");
        return false;
          }

          var fieldName = 'flight[' + i + '][depart]';
          if (fieldName == this.formElement.elements[j].name && '' == this.formElement.elements[j].value) {
        alert("Field 'Depart' is required!");
        return false;
          }

          if (YAHOO.util.Dom.get('flight_type_0').checked)
          {
        var fieldName = 'flight[0][retur]';
        if (fieldName == this.formElement.elements[j].name && '' == this.formElement.elements[j].value) {
            alert("Field 'Return' is required!");
            return false;
        }
          }
      }
    }
  }
}




