﻿function IE_hotel(hUrl){var hWnd=window.open(hUrl,'_blank','width=896,height=820,status=no,menubar=no,location=no,directories=no,toolbar=no,scrollbars=yes');}
function strpos(haystack,needle,offset){var i=(haystack+'').indexOf(needle,(offset||0));return i===-1?false:i;}

var _sf =
{
  module_style: 'gerni',
  moduleVersion: "1.09.1-Gerni",
  module_meals: false,
  hotelsLoadSize: -1,
  glTimeout: 0,
  
  cCountry: null, cRegion: null, cFromCity: null, cResort: null, cHotel: null, cMeal: null, cStar: null,
  isFirstRequest: false, lastRequestId: 0,
  isDepartCitiesLoaded: false, isCountriesLoaded: false,
  isResultTableHtmlLoaded: false, isOrderHtmlLoaded: false,
  resultPageLength: 20,
  resultTable: null,
  lastLoadedData: null,
  isUrlHotelSet: false, isUrlCitySet: false, isUrlOperatorSet: false, isUrlMealSet: false, isUrlStarSet: false,
  lastLoadState: null, lastNewLoadState: null, lastLoadStateTimer: null, lastCurrencyAlias: null,
  table: null,
  clearCache: false,
  skipLoadWaiting: false,
  columns: ['checkIn', 'nights', 'resortName', 'hotelName', 'htPlaceName', 'hasEconomTicketsDpt', 'hasBusinessTicketsDpt', 'price'],
  rt_ColumnMapping: {
    array: [
      { index: 0, name: 'id', internal: true },
      { index: 1, name: 'operatorId', internal: true },
      { index: 2, name: 'hotelUrl', internal: true },
      { index: 3, name: 'hotelId', internal: true },
      { index: 4, name: 'townUrl', internal: true },
      { index: 5, name: 'townId', internal: true },
      { index: 6, name: 'tourName', internal: false },
      { index: 7, name: 'hotelName', internal: false },
      { index: 8, name: 'starName', internal: false },
      { index: 9, name: 'roomName', internal: false },
      { index: 10, name: 'mealName', internal: false },
      { index: 11, name: 'htPlaceName', internal: false },
      { index: 12, name: 'checkIn', internal: false },
      { index: 13, name: 'checkOut', internal: false },
      { index: 14, name: 'nights', internal: false },
      { index: 15, name: 'price', internal: false },
      { index: 16, name: 'adults', internal: false },
      { index: 17, name: 'kids', internal: false },
      { index: 18, name: 'operator', internal: false },
      { index: 19, name: 'resortName', internal: false },
      { index: 20, name: 'operatorUrl', internal: true },
      { index: 21, name: 'hotelIsInStop', internal: false },
      { index: 22, name: 'ticketsIsIncluded', internal: false },
      { index: 23, name: 'hasEconomTicketsDpt', internal: false },
      { index: 24, name: 'hasEconomTicketsRtn', internal: false },
      { index: 25, name: 'hasBusinessTicketsDpt', internal: false },
      { index: 26, name: 'hasBusinessTicketsRtn', internal: false },
      { index: 27, name: 'checkInDay', internal: false },
      { index: 28, name: 'checkOutShort', internal: false },
      { index: 29, name: 'reservedByRoma', internal: false },
      { index: 30, name: 'countryId', internal: false },
      { index: 31, name: 'countryName', internal: false },
      { index: 32, name: 'cityId', internal: false },
      { index: 33, name: 'cityName', internal: false },
    ],
    getInternalColumns: function ()
	{
      return $.grep(this.array, function (i) { return i.internal == true; });
    },
    getColumn: function (columnName)
	{
      for (var i = 0; i < this.array.length; i++) if (this.array[i].name == columnName) return this.array[i];
      return null;
    }
  },

  init: function ()
  {
    if (mSettings.fm.dateFromExt >= mSettings.fm.dateToExt) alert('Начальные даты для формы поиска заданы неверно (DateFrom >= DateTo).');
    if ($.getUrlVar('STA') == '1') _sf.module_STA=true;
	$.ajax({ url: mSettings.modulePath + 'templates/tMain.htm', success: _sf.afterInit });
    $.ajax({ url: mSettings.modulePath + 'templates/tResult.htm', success: function (data)
	{
      $('#sm_SearchResult').html(_sf.setSrcInHtml(data));
      _sf.table = $('#sm_result_table');
      $('#sm_show_stat').click(function () { _sf.showStat(this); return false; });
      $('#sm_stat_close_link').click(function () { $('#sm_stat_info').hide(); return false; });
      $('body').click(function () { $('#sm_stat_info').hide(); });
      $('#sm_stat_info').click(function (e) { e.stopPropagation(); });
      _sf.isResultTableHtmlLoaded = true;
    }
    });
    $.ajax({ url: mSettings.modulePath + 'templates/tOrder.htm', success: function (data) {
      $('body').append(_sf.setSrcInHtml(data));
      $('#sm_close_order_form').click(function () { $.colorbox.close(); $('#sm_dialog').hide(); return false; });
      _sf.isOrderHtmlLoaded = true;
      var form = $('#sm_order_form');
      if (form.length > 0)
	  {
        form.validate(
		{
          rules:
		  {
            sm_user: { required: true },
            sm_email: { required: true, email: true },
            sm_phone: { required: true }
          },
          messages:
		  {
            sm_user: { required: 'Укажите контактное лицо' },
            sm_email: { required: 'Укажите адрес электронной почты', email: 'Адрес электронной почты указан некорректно' },
            sm_phone: { required: 'Укажите контактный телефон' }
          },
          submitHandler: _sf.sendTourOrder,
          errorElement: 'em',
          wrapper: 'li',
          errorLabelContainer: '#sm_tour_order_error'
        });
      }
      $('#sm_send_error').click(function () { _sf.reportError(); return false; });
      if (mAjax.userId)
	  {
        $('#sm_show_report_form').show();
        $('#sm_show_report_form').click(function () { _sf.showReportErrorForm(); return false; });
      }
      else $('#sm_show_report_form').hide();

      $('body').click(function () { $('#sm_report_error').hide(); });
      $('#sm_report_error').click(function (e) { e.stopPropagation(); });
  
	  $('#sm_mini_error2').hover(function(){ $('#sm_mini_error2').stop(true,true).fadeIn(0); },function(){return true;});
    }
    });
  },

  afterInit: function (data, status, request)
  {
    $('#sm_SearchForm').html(_sf.setSrcInHtml(data));
    _sf.parseExtendedFormUrl();
    _sf.cCountry = $('#sm_country')[0];
    _sf.cRegion = $('#sm_region')[0];
    _sf.cResort = $('#sm_resort')[0];
    _sf.cFromCity = $('#sm_city')[0];
    _sf.cHotel = $('#sm_hotel')[0];
    _sf.cMeal = $('#sm_meal')[0];
    _sf.cStar = $('#sm_star')[0];

    $('#sm_adults,#sm_kids,#sm_nights_min,#sm_nights_max,#sm_price_min,#sm_price_max').filter_input({ regex: '[0-9]' });
    $('#sm_date_from').val(_sf.DateFormat(new Date(), mSettings.fm.dateFromExt)).filter_input({ regex: '[0-9/]' });
    $('#sm_date_to').val(_sf.DateFormat(new Date(), mSettings.fm.dateToExt)).filter_input({ regex: '[0-9/]' });
    var numericUps = $('#sm_nights_min_up,#sm_nights_max_up,#sm_adults_up,#sm_kids_up');
    var numericDns = $('#sm_nights_min_dn,#sm_nights_max_dn,#sm_adults_dn,#sm_kids_dn');
    numericUps.add(numericDns).data("minValue", 0).data("maxValue", 99);
    numericUps.click(function ()
	{
      var tb = $('#' + this.id.substring(0, this.id.length - 3));
      var val = parseInt($(tb).val());
      var maxVal = parseInt($(this).data('maxValue'));
      if (isNaN(val)) val = 1;
      if (val < maxVal) $(tb).val(val + 1);
    });
    numericDns.click(function ()
	{
      var tb = $('#' + this.id.substring(0, this.id.length - 3));
      var val = parseInt($(tb).val());
      var minVal = parseInt($(this).data('minValue'));
      if (isNaN(val)) val = 1;
      if (val > minVal) $(tb).val(val - 1);
    });
    $('#sm_date_from,#sm_date_to').datepicker({
      dateFormat: 'dd/mm/yy',
      firstDay: 1,
      dayNamesMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
      monthNames: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
      minDate: new Date(),
      nextText: "Далее",
      prevText: "Назад",
      onClose: function (dateText, inst)
	  {
        if (this.id == 'sm_date_from')
		{
          var dateFrom = $.datepicker.parseDate('dd/mm/yy', dateText);
          var dateTo = $.datepicker.parseDate('dd/mm/yy', $('#sm_date_to').val());
          if (dateFrom >= dateTo)
		  {
            $('#sm_date_to').val($.datepicker.formatDate('dd/mm/yy', new Date(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate() + 1)));
          }
		  $('#sm_date_to').datepicker("option", "minDate", dateFrom);
		  $('#sm_date_to').datepicker("option", "maxDate", new Date(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate() + 45));
        }
        else if (this.id == 'sm_date_to')
		{
          var dateFrom = $.datepicker.parseDate('dd/mm/yy', $('#sm_date_from').val());
          var dateTo = $.datepicker.parseDate('dd/mm/yy', dateText);
          if (dateTo < dateFrom)
		  {
            $('#sm_date_from').val($.datepicker.formatDate('dd/mm/yy', new Date(dateTo.getFullYear(), dateTo.getMonth(), dateTo.getDate() )));
          }
        }
      }
    });
	$('#sm_date_to').datepicker("option", "maxDate", "+45d");
	
    $('#sm_date_from_cal').click(function ()
	{
      $('#sm_date_from').datepicker('show');
      return false;
    });
    $('#sm_date_to_cal').click(function ()
	{
      $('#sm_date_to').datepicker('show');
      return false;
    });
    var ups = $('#sm_nights_min_up,#sm_nights_max_up,#sm_adults_up,#sm_kids_up');
    var dns = $('#sm_nights_min_dn,#sm_nights_max_dn,#sm_adults_dn,#sm_kids_dn');
    ups.add(dns).dblclick(function () { this.click(); });
    $('#sm_currency,#sm_currency_open').click(function ()
	{
      _sf.closeAllPopups('sm_select_currency');
      $('#sm_select_currency').toggle();
      $('#sm_select_currency').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_currency_open'), offset: '1 1' });
      return false;
    });
    _sf.makeListLive('sm_select_currency', null, _sf.currencySelected);
    $('#sm_searching').click(function()
    {
      _sf.module_STA=false;
      _sf.findClicked();
    });
	$(document).keydown(function(e)
	{
	  if(e.which==17) isCtrl=true;
	  if(e.which==18) isAlt=true;
	  if(e.keyCode=='13' && isCtrl && mSettings.debugVersion) { _sf.clearCache = true; _sf.findClicked(); }
	});
	$(document).keyup(function(e) { if(e.which==17) isCtrl=false; });

    _sf.loadDepartCities();

    $('body').click(function () { _sf.closeAllPopups(); });
    $('#sm_select_city_list, #sm_select_country_list, #sm_select_region_list, #sm_select_currency,\
    #sm_resort_currency, #sm_hotel_currency, #sm_meal_currency, #sm_star_currency').click(function (e) { e.stopPropagation(); });
	$('#sm_version').text('версия '+_sf.moduleVersion);
	_sf.afterInitCustom();
  },
  
  validateForm: function ()
  {
    var dateFrom = $.datepicker.parseDate('dd/mm/yy', $('#sm_date_from').val());
    var dateTo = $.datepicker.parseDate('dd/mm/yy', $('#sm_date_to').val());
    var nightsMin = parseInt($('#sm_nights_min').val());
    var nightsMax = parseInt($('#sm_nights_max').val());
    var priceMin = parseInt($('#sm_price_min').val());
    var priceMax = parseInt($('#sm_price_max').val());
    var adults = parseInt($('#sm_adults').val());
    var kids = parseInt($('#sm_kids').val());
		
    if (dateFrom > dateTo) { alert('Интервал дат вылета указан неверно, поправьте даты и повторите поиск.'); return false; }
    if (isNaN(nightsMin)) { alert('Значение поля "ночей от" указано неверно, поправьте его и повторите поиск.'); return false; }
    if (isNaN(nightsMax)) { alert('Значение поля "ночей до" указано неверно, поправьте его и повторите поиск.'); return false; }
    if (nightsMin > nightsMax){alert('Интервал количества ночей в отеле указан неверно, поправьте значения полей и повторите поиск.');return false;}
    if ($('#sm_price_min').val()>99999999 || $('#sm_price_max').val()>99999999) { alert('Значение поля "цена от" указано неверно, поправьте его и повторите поиск.'); return false; }
    if ($('#sm_price_min').val() != '' && isNaN(priceMin)) { alert('Значение поля "цена от" указано неверно, поправьте его и повторите поиск.'); return false; }
    if ($('#sm_price_max').val() != '' && isNaN(priceMax)) { alert('Значение поля "цена до" указано неверно, поправьте его и повторите поиск.'); return false; }
    if (!isNaN(priceMin) && !isNaN(priceMax) && priceMin > priceMax) { alert('Диапазон стоимости тура указан неверно, поправьте значения полей и повторите поиск.'); return false; }
    if($('#sm_adults').val()!=''&& isNaN(adults)){alert('Значение поля "взрослых" указано неверно, поправьте его и повторите поиск.');return false;}
    if ($('#sm_kids').val() != '' && isNaN(kids)) { alert('Значение поля "детей" указано неверно, поправьте его и повторите поиск.');return false;}
    return true;
  },

  closeAllPopups: function (skipThis)
  {
    var popups = ['sm_select_currency', 'sm_select_country', 'sm_select_region', 'sm_select_resort',
                  'sm_select_city', 'sm_select_meal', 'sm_select_star', 'sm_select_hotel'];
    for (var i = 0; i < popups.length; i++) if (popups[i] != skipThis) $('#' + popups[i]).hide();
  },

  findClicked: function ()
  {
    _sf.gerniOnPaska = 21;
    _sf.vitunGerni(1);
    _sf.patch01 = 0;
    _sf.closeAllPopups();
    if (!_sf.isCountriesLoaded) { alert('Список стран ещё не загружен. Пожалуйста, подождите.'); return false; }
    if (!_sf.isDepartCitiesLoaded) { alert('Список городов ещё не загружен. Пожалуйста, подождите.'); return false; }
    if (mSettings.fm.showResultOnSamePage)
	{
      _sf.showLoadingLayer();
      _sf.loadToursInit(1);
	  return false;				// first run
    }
    else { _sf.loadToursOnNewPage(); return false; }
  },

  getItem: function (itemName, items)
  {
    for (var i = 0; i < items.length; i++) if (items[i].name == itemName) return items[i].value;
    return null;
  },

  getVisibleColumnIndex: function (column)
  {
    var index = 0;
    for (var i = 0; i < _sf.rt_Columns.length; i++)
	{
      if (_sf.rt_Columns[i] == column) return index;
      if (_sf.rt_Columns[i].internal == false) index++;
    }
    return -1;
  },

  getQueryString: function ()
  {
    var query = '?STA=1';
    var cityId = $('#sm_city').data('uid');
    var countryId = $('#sm_country').data('uid');
    var regionId = $('#sm_region').data('uid');
    var resortId = $('#sm_resort').data('uid');
    var mealId = $('#sm_meal').data('uid');
    var starId = $('#sm_star').data('uid');
    var hotelId = $('#sm_hotel').data('uid');
    if (cityId) query += '&city=' + escape(cityId);
    if (countryId) query += '&country=' + escape(countryId);
    if (regionId) query += '&region=' + escape(regionId);
    if (resortId) query += '&resort=' + escape(resortId);
    if (mealId) query += '&meal=' + escape(mealId);
    if (starId) query += '&star=' + escape(starId);
    if (hotelId) query += '&hotel=' + escape(hotelId);

    if ($('#sm_adults').val() != '') query += '&adults=' + escape($('#sm_adults').val());
    if ($('#sm_kids').val() != '') query += '&kids=' + escape($('#sm_kids').val());
    if ($('#sm_nights_min').length>0) if ($('#sm_nights_min').val() != '') query += '&nightsMin=' + escape($('#sm_nights_min').val());
    if ($('#sm_nights_min').length>0) if ($('#sm_nights_max').val() != '') query += '&nightsMax=' + escape($('#sm_nights_max').val());
    if ($('#sm_date_from').val() != '') query += '&dateFrom=' + escape($('#sm_date_from').val());
    if ($('#sm_date_to').val() != '') query += '&dateTo=' + escape($('#sm_date_to').val());
    if ($('#sm_price_min').val() != '') query += '&priceFrom=' + escape($('#sm_price_min').val());
	
    if ($('#sm_price_max').val() != '') query += '&priceTo=' + escape($('#sm_price_max').val());
    query += '&currency=' + $('#sm_currency').text();
    return query;
  },

  loadToursInit: function (firstRun)
  {  
    if (_sf.validateForm() || _sf.module_STA)
	{
	  if(firstRun==0)
	  {
	    _sf.updateResult = true;
		_sf.isFirstRequest = false;
	  }
	  if(firstRun==1)
	  {
	    $('#sm_result_table_wrapper').hide();
	    _sf.updateResult = false;
		if(!_sf.doExtendSearch) _sf.lastRequestId = 0;
		_sf.isFirstRequest = true;
		
		$('#sm_result h1 span').html('Идёт поиск...');
	    $('#sm_result h1 img').show();
	  }
	  if(firstRun==2)
	  {
	    _sf.updateResult = true;
		_sf.isFirstRequest = true;
	  }
      $('#sm_progress').hide();
      if (_sf.lastLoadStateTimer != null) clearTimeout(_sf.lastLoadStateTimer);
      _sf.lastNewLoadState = null;
      _sf.loadTours((_sf.doExtendSearch)?_sf.extendSearchPN:1);
    }
    else _sf.hideLoadingLayer();
  },

  loadTours: function (page)
  {
    if (!_sf.isResultTableHtmlLoaded) return;
    if (!_sf.resultTable)
	{
	  var miniDateTo = _sf.DateFormat($.datepicker.parseDate('dd/mm/yy', (_sf.module_STA) ? $.getUrlVar('dateFrom') : $('#sm_date_from').val() ), mSettings.sm.dateToExt);
      _sf.resultTable = $(_sf.table).dataTable(
	  {
        'bPaginate': true,
        'bLengthChange': false,
        'bFilter': false,
        'bSort': false,
        'bInfo': true,
        'bAutoWidth': false,
        'bSortClasses': false,
        'bServerSide': true,
        'bProcessing': false,
        'iDisplayLength': _sf.resultPageLength,
        'fnServerData': function (source, data, fnCallback)
		{
          mAjax.getTours(
		    _sf.fake,
            _sf.lastRequestId,
            _sf.resultPageLength,
            (_sf.getItem('iDisplayStart', data) / _sf.resultPageLength) + 1,
            (_sf.module_STA) ? $.getUrlVar('country') : $('#sm_country').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('region') : $('#sm_region').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('cityFrom') : $('#sm_city').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('resort') : $('#sm_resort').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('meal') : $('#sm_meal').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('star') : $('#sm_star').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('hotel') : $('#sm_hotel').data('uid'),
            (_sf.module_STA) ? $.getUrlVar('adults') : $('#sm_adults').val(),
			(_sf.module_STA) ? $.getUrlVar('kids') : $('#sm_kids').val(),
            (_sf.module_STA) ? $.getUrlVar('nightsMin') : $('#sm_nights_min').val(),
			(_sf.module_STA) ? $.getUrlVar('nightsMax') : $('#sm_nights_max').val(),
            (_sf.doExtendSearch) ? _sf.extendSearchValue : (_sf.module_STA) ? $.getUrlVar('priceFrom') : $('#sm_price_min').val(),
			(_sf.module_STA) ? $.getUrlVar('priceTo') : $('#sm_price_max').val(),
            (_sf.module_STA) ? $.getUrlVar('currency') : $('#sm_currency').text(),
            (_sf.module_STA) ? $.getUrlVar('dateFrom') : $('#sm_date_from').val(),
			(_sf.module_STA) ? $.getUrlVar('dateTo') : $('#sm_date_to').val(),
            (mSettings.defaultHotelOK!=undefined) ? mSettings.defaultHotelOK : (_sf.module_STA) ? $.getUrlVar('hotelIsNotInStop') : true,
			(mSettings.defaultFlightIncluded!=undefined) ? mSettings.defaultFlightIncluded : (_sf.module_STA) ? $.getUrlVar('hasTickets') : true,
			(mSettings.defaultFlightOK!=undefined) ? mSettings.defaultFlightOK : (_sf.module_STA) ? $.getUrlVar('hasFlight') : true,
			
            _sf.clearCache, _sf.skipLoadWaiting ? 1 : null, (_sf.updateResult==true) ? 1 : null,
            function (data, status, request)
			{
              _sf.lastCurrencyAlias = (_sf.lastCurrencyAlias) ? $('#sm_currency').text() : $.getUrlVar('currency');
              _sf.skipLoadWaiting = false;
              _sf.clearCache = false;
              _sf.lastLoadedData = data.aaData;
              _sf.lastLoadState = data.loadState;
              _sf.showLoadState();
//			  setTimeout('_sf.showLoadState()',10000);
              _sf.lastRequestId = data.requestId;
			  
			  /*if (data.iTotalRecords)*/ //_sf.hideLoadingLayer();	// if Data & !Glagne then show
			  
              var resultData = [];
              $.each(data.aaData, function (index, value)
			  {
                var resultDataRow = [];
                $.each(_sf.columns, function (rtIndex, rtValue)
				{
                  resultDataRow.push(value[_sf.rt_ColumnMapping.getColumn(rtValue).index]);
                });
                resultData.push(resultDataRow);
              });

              fnCallback({ iTotalRecords: data.iTotalRecords, iTotalDisplayRecords: data.iTotalDisplayRecords, aaData: resultData }, status, request);
            },
            function (msg)
			{
              _sf.skipLoadWaiting = false;
              _sf.clearCache = false;
              _sf.hideLoadingLayer();
              fnCallback({ iTotalRecords: 0, iTotalDisplayRecords: 0, aaData: [] });
            },
            function (request, text)
			{
              _sf.skipLoadWaiting = false;
              _sf.clearCache = false;
//              _sf.hideLoadingLayer();
              _sf.resultTable.fnDraw();
              return; // temp
              fnCallback({ iTotalRecords: 0, iTotalDisplayRecords: 0, aaData: [] });
            },0
          );
        },
        'fnRowCallback': function (nRow, aData, iDisplayIndex, iDisplayIndexFull)
		{
		  var rowData = _sf.lastLoadedData[iDisplayIndex],
          tdIndex = 0, tx='',
		  v1 = rowData[_sf.rt_ColumnMapping.getColumn('hasEconomTicketsDpt').index],
		  v2 = rowData[_sf.rt_ColumnMapping.getColumn('hasEconomTicketsRtn').index],
		  v3 = rowData[_sf.rt_ColumnMapping.getColumn('hasBusinessTicketsDpt').index],
		  v4 = rowData[_sf.rt_ColumnMapping.getColumn('hasBusinessTicketsRtn').index],
		  v5 = rowData[_sf.rt_ColumnMapping.getColumn('ticketsIsIncluded').index],
		  
          tdIndex = $.inArray('hasEconomTicketsDpt', _sf.columns),
          tdIndex2 = $.inArray('hasBusinessTicketsDpt', _sf.columns);
		  $('td:eq(' + tdIndex + '), td:eq(' + tdIndex2 + ')', nRow).css({'text-align':'center','padding-left':'0'});
		  
		  var tx1='<img src="'+mSettings.modulePath+'styles/images/blank.gif" alt="" style="width:16px;height:16px;" class="sm_icon ',tx2='" />';
          if(v5==1)
          {
		    switch(v1)
			{
			  case '0': tx+=tx1+'sm_not'+tx2; break;
			  case '1': tx+=tx1+'sm_is'+tx2; break;
			  case '2': tx+=tx1+'sm_req'+tx2; break;
			  default: tx+=tx1+'sm_unk'+tx2; break;
			}
		    switch(v2)
			{
			  case '0': tx+=tx1+'sm_not2'+tx2; break;
			  case '1': tx+=tx1+'sm_is2'+tx2; break;
			  case '2': tx+=tx1+'sm_req2'+tx2; break;
			  default: tx+=tx1+'sm_unk'+tx2; break;
			}
			$('td:eq(' + tdIndex + ')', nRow).html(tx);
			
			tx='';
		    switch(v3)
			{
			  case '0': tx+=tx1+'sm_not'+tx2; break;
			  case '1': tx+=tx1+'sm_is'+tx2; break;
			  case '2': tx+=tx1+'sm_req'+tx2; break;
			  default: tx+=tx1+'sm_unk'+tx2; break;
			}
		    switch(v4)
			{
			  case '0': tx+=tx1+'sm_not2'+tx2; break;
			  case '1': tx+=tx1+'sm_is2'+tx2; break;
			  case '2': tx+=tx1+'sm_req2'+tx2; break;
			  default: tx+=tx1+'sm_unk'+tx2; break;
			}
			$('td:eq(' + tdIndex2 + ')', nRow).html(tx);
          }
          else	
		  {
		    $('td:eq(' + tdIndex + ')', nRow).html('перелёт не включён');
			$('td:eq(' + tdIndex + ')', nRow).attr('colspan', 2);
		    $('td:eq(' + tdIndex2 + ')', nRow).hide();
		  }
		  
          tdIndex = $.inArray('checkIn', _sf.columns);
          var checkIn = rowData[_sf.rt_ColumnMapping.getColumn('checkIn').index];
          var checkInDay = rowData[_sf.rt_ColumnMapping.getColumn('checkInDay').index];
          $('td:eq(' + tdIndex + ')', nRow).html(checkIn + '<br />' + checkInDay);
          tdIndex = $.inArray('nights', _sf.columns);
          var nights = rowData[_sf.rt_ColumnMapping.getColumn('nights').index];
          var checkOutShort = rowData[_sf.rt_ColumnMapping.getColumn('checkOutShort').index];
          $('td:eq(' + tdIndex + ')', nRow).html(nights + '<br />' + checkOutShort);
          tdIndex = $.inArray('hotelName', _sf.columns);
          var hotelName = rowData[_sf.rt_ColumnMapping.getColumn('hotelName').index];
          var starName = rowData[_sf.rt_ColumnMapping.getColumn('starName').index];
          var roomName = rowData[_sf.rt_ColumnMapping.getColumn('roomName').index];
          var hotelUrl = rowData[_sf.rt_ColumnMapping.getColumn('hotelUrl').index];
          var hotel = hotelName + ' ' + starName;
          if (hotelUrl != '')
		  {
		    if ($.browser.msie) hotel = '<a href="#" onClick="IE_hotel(\'' + hotelUrl + '\'); return false;">' + hotel + '</a>';
			else hotel = '<a href="' + hotelUrl + '">' + hotel + '</a>';
		  }
		  
          hotel += '<br />' + roomName;
          $('td:eq(' + tdIndex + ')', nRow).html('<div style="text-align:left;">'+hotel+'</div>');
          if (!mSettings.showExternalLinksOnBlankPage && !$.browser.msie)
		  {
            $('td:eq(' + tdIndex + ') a', nRow).colorbox({ width: "70%", height: "80%", speed: 100, transition: 'fade', close: '', iframe: true,onComplete: function ()
			{ 
			  $('#cboxOverlay').html('<div id=sm_hotel_close><img src="'+mSettings.modulePath+'styles/images/close.png" alt="" style="width:16px;height:16px;"/></div>');
			  var p = $('#colorbox').position();
			  $('#sm_hotel_close').css({'position':'fixed','top':p.top-$(window).scrollTop()-20,'left':p.left+$('#colorbox').width()+4});
			  $(window).scroll(function()
			  {
	    	    $('#sm_hotel_close').css({'top':p.top-$(window).scrollTop()-20, 'left':p.left+$('#colorbox').width()+4});
			  });
			}
			});
          }
          
          var resName = rowData[_sf.rt_ColumnMapping.getColumn('countryName').index] + '<br />' 
          + rowData[_sf.rt_ColumnMapping.getColumn('resortName').index];
          tdIndex = $.inArray('resortName', _sf.columns);
          $('td:eq(' + tdIndex + ')', nRow).html(resName);
          
          tdIndex = $.inArray('htPlaceName', _sf.columns);
          var htPlaceHint = '<span class="sm_hintwrap"><span class="sm_hintbody">'
          +_sf.replaceFromDic(mSettings.replaceMeal, rowData[_sf.rt_ColumnMapping.getColumn('mealName').index])
          + '</span>' + rowData[_sf.rt_ColumnMapping.getColumn('mealName').index]
          + '</span><br /><span class="sm_hintwrap"><span class="sm_hintbody">'
          +_sf.replaceFromDic(mSettings.replacePlace, rowData[_sf.rt_ColumnMapping.getColumn('htPlaceName').index])
          + '</span>' + rowData[_sf.rt_ColumnMapping.getColumn('htPlaceName').index]+ '</span>' ;
          $('td:eq(' + tdIndex + ')', nRow).html(htPlaceHint);
          
          tdIndex = $.inArray('price', _sf.columns);
          var sourceId = rowData[_sf.rt_ColumnMapping.getColumn('operatorId').index];
          var offerId = rowData[_sf.rt_ColumnMapping.getColumn('id').index];
          var price = rowData[_sf.rt_ColumnMapping.getColumn('price').index];
          $('td:eq(' + tdIndex + ')', nRow).html('<span class="sm_gerniprice">'+price.replace(' ', '&nbsp;')+'</span>').append
		  (
		    $('<a href="#"><span class="sm_spo_price"><img src="/templates/default/template/module/styles/images/btn_order.png?v.1.1" /></span><span class="sm_spo_curr"></span></a>').click(function ()
			{
              _sf.showTourOrderForm(sourceId, offerId);
              return false;
            })
		  );
          return nRow;
        },
        'fnDrawCallback': function ()
		{
          if (_sf.isFirstRequest)
		  {
            $('#sm_result').show();
            $('#sm_result_table_first').hide();
            $('#sm_result_table_last').hide();
            if ($.browser.msie) _sf.table.show();
			else _sf.table.show("slide", 250);
            _sf.isFirstRequest = false;
          }
          if (mSettings.enableAutoScrollingToResult) $.scrollTo(_sf.table, 250, { axis: 'y' });
        },
        'sPaginationType': 'full_numbers',
        'oLanguage': {
          'sEmptyTable': 'Нет туров по указанному запросу',
          'sInfoEmpty': 'Идёт поиск...',
          'sInfo': 'Всего туров: _TOTAL_ (_START_ - _END_)',
          'sZeroRecords': 'Нет туров по указанному запросу',
          'oPaginate': { 'sFirst': 'первая', 'sLast': 'последняя', 'sNext': 'следующая', 'sPrevious': 'предыдущая' }
        }
      });
//	  _sf.module_STA=false;
	  
	  $('#sm_result_table_next').click(function()
	  {
		 var pn=$('.paginate_active').text(), mp=666;
		 $.each($('.paginate_button'), function(i, val)
		 {
           if(!isNaN(parseInt(val.innerHTML))) mp=parseInt(val.innerHTML);
         });
		 if(pn>mp || mp==666)
		 {
		   _sf.extendSearchPN = pn;
		   var xx,yy='';
		   xx=$('#sm_result_table tr:last-child td:last-child').text();
		   for(var i=0;i<xx.length;i++) if(xx[i]>='0' && xx[i]<='9') yy+=xx[i];
           _sf.extendSearchValue=yy;
           _sf.doExtendSearch=true; _sf.findClicked(); _sf.doExtendSearch=false;
		 }
	  });
    }
    else if(_sf.doExtendSearch) {_sf.resultTable.fnPageChange('last');}
	else _sf.resultTable.fnPageChange('first');
  },
  
 
  replaceFromDic: function (dic, what)
  {
    for(var i=0;i<dic.length;i++) if(what==dic[i].or) return dic[i].re;
    return what;
  },
  
  getLoadState: function ()
  {
    if(_sf.glTimeout) clearTimeout(_sf.glTimeout);
    var callback = function (data)
	{
      if (_sf.lastRequestId > 0)
	  {
        _sf.lastNewLoadState = data;
        _sf.showLoadState();
      }
    }
    mAjax.getLoadState(_sf.lastRequestId, callback);
  },
  
  ival:null,
  ivalscan:function()
  {
    if(_sf.gerniOnPaska<0) _sf.getLoadState();
  },
  
  gerniOnPaska: 21,
  vitunGerni: function(set)
  {
    if(_sf.gerniOnPaska==21)
	{
	  var countryId = (_sf.module_STA) ? $.getUrlVar('country') : $('#sm_country').data('uid');
	  $('#gernistuff').load('http://prices.gerni.ru/sadv.html?co='+countryId);
	  $('#gernistuff').show();
	  _sf.ival = setInterval('_sf.ivalscan()',2000)
//	  return;
	}
    _sf.gerniOnPaska--;
	$('#gerniOnPaska').text('ожидайте '+_sf.gerniOnPaska+' ');
	if(_sf.gerniOnPaska<1) { $('#gernistuff').hide(); $('#gerniOnPaska').text('ожидайте'); $('#sm_result_table_wrapper').show();  }
	else $('#sm_result_table_wrapper').hide();
	if(_sf.gerniOnPaska==1 && $('#gerniOnPaska').text().length>8) _sf.loadToursInit(0);
	
    if(set==1)
	{
	  clearTimeout(_sf.glTimeout);
	  _sf.glTimeout = setTimeout('_sf.vitunGerni(1)',1000);
	}  
  },
  
  showLoadState: function ()
  {
    $('#sm_progress').show();
    var state = _sf.lastNewLoadState == null ? _sf.lastLoadState : _sf.lastNewLoadState;
    var loaded_count = $.grep(state, function (e) { return e.IsProcessed == true; }).length;
    var all_count = state.length;
    var new_rows_count = 0;
	var table_rows_count = _sf.resultTable.dataTableSettings[0]._iRecordsTotal;
    if (_sf.lastNewLoadState != null)
	{
      for (var i = 0; i < _sf.lastLoadState.length; i++) for (var j = 0; j < _sf.lastNewLoadState.length; j++)
      if (_sf.lastLoadState[i].Id == _sf.lastNewLoadState[j].Id)
      {
        if (_sf.lastLoadState[i].IsProcessed == false) new_rows_count += _sf.lastNewLoadState[j].RowsCount;
        break;
      }
    }

	if (all_count == loaded_count)				// all TO have responded => show interface & load table
	{
	  if (!table_rows_count && !_sf.patch01)	// 'patch01' for showOnce
	  {
		_sf.skipLoadWaiting=true;
		_sf.patch01=1;
	    _sf.loadToursInit(0);
		setTimeout('_sf.loadToursInit(0)',500);
		$('#sm_popup_status').hide();
	  }
	  $('#sm_result h1 span').html('Поиск завершён');
	  clearInterval(_sf.ival)
	  $('#gernistuff').hide();
	  _sf.gerniOnPaska = 0;
	  $('#sm_result h1 img').hide();
	  _sf.hideLoadingLayer();
	}
	else										// not all TO have responded
	{
	  _sf.patch01 = 0;
	  $('#sm_result h1 span').html('Поисковая система GERNI работает... <span id="gerniOnPaska"></span>'); // Идёт поиск:
	  _sf.vitunGerni(0);
      if(new_rows_count)
	  {
        _sf.hideLoadingLayer();
		if(!table_rows_count)
		{
		_sf.skipLoadWaiting=true;
	    _sf.loadToursInit(0);
		}
	  }
	}  
    if (all_count > 0)
	{
      $('#sm_loaded_count').text(loaded_count);
      $('#sm_all_count').text(all_count);
	  if (loaded_count == all_count) _sf.resultTable.dataTableSettings[0].oLanguage.sInfoEmpty="Ничего не найдено. Уточните параметры поиска.";
	  
      if (new_rows_count)
	  {
        if(all_count>1)
		{
          $('#sm_new_rows').html(' <a href="#" id="sm_update_price"><b>(найдено ещё ' + new_rows_count + ' цен)</b></a>');
          $('#sm_update_price').click(function()
		  {
		    $('#sm_new_rows').text('');
		    $('#sm_attention').hide();
		    $('#sm_popup_status').hide();
		    _sf.skipLoadWaiting=true;
		    _sf.loadToursInit(0);
		    return false;
		  });          
		}
      }
      if (all_count > loaded_count) _sf.glTimeout = setTimeout(_sf.getLoadState, 5000);
    }
	else { $('#sm_loaded_count').text('0'); $('#sm_all_count').text('0'); }
	if(!loaded_count) $('#sm_result_table_wrapper').hide(); 
  },
  
  formatSeconds: function (value)
  {
    var computed = Math.round(value * Math.pow(10, 1)) / Math.pow(10, 1);
    if (parseInt(computed) == computed) return computed + '.0';
    else return computed;
  },

  loadDepartCities: function ()
  {
    mAjax.ajaxSwitchCurrent=1;
    $('#sm_select_city_close').click(function ()
	{
      _sf.closeAllPopups();
      return false;
    });
    var callback = function (data)
	{
      var defaultById = false;
      var defaultId = 0;
      if ($.getUrlVar('cityFrom'))
	  {
        defaultId = $.getUrlVar('cityFrom');
        defaultById = true;
      }
      var defaultName = '';
      if (!defaultById) defaultName = $.getUrlVar('cityFromName') || mSettings.defaultCity;

      $('#sm_select_city_list').html('');
      var html = '';
      for (var i = 0; i < data.length; i++)
	  {
        if ((defaultById && data[i].Id == defaultId) || (!defaultById && defaultName == data[i].Name))
		{
          html += '<li class="sm_active" id="city' + data[i].Id + '">' + data[i].Name + '</li>';
          $('#sm_city').text(data[i].Name);
          $('#sm_city').data('uid', data[i].Id);
        }
        else html += '<li id="city' + data[i].Id + '">' + data[i].Name + '</li>';
      }
      $('#sm_select_city_list').html(html);
      _sf.makeListLive('sm_select_city_list', 'city', _sf.cityDptSelected);
      _sf.isDepartCitiesLoaded = true;
      $('#sm_city, #sm_city_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_city');
        $('#sm_select_city').toggle();
        $('#sm_select_city').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_city_open'), offset: '0 1' });
        return false;
      });
	  _sf.loadCountries();
    };
	var mAjax_getDepartCities=function ()
	{
	  mAjax.getDepartCities(callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) { mAjax.ajaxSwitchCurrent++; $(mAjax_getDepartCities); }
	    else return this.defaultAjaxError;
	  });
	}
	$(mAjax_getDepartCities);
  },

  cityDptSelected: function (e)
  {
    $('#sm_city').data('uid', e.target.id.substring(4));
    $('#sm_city').text($(e.target).text());
    _sf.closeAllPopups();
	_sf.loadCountries();
  },

  loadCountries: function ()
  {
    mAjax.ajaxSwitchCurrent=1;
    var callback = function (data)
	{
      var defaultById = false;
      var defaultId = 0;
      if ($.getUrlVar('country'))
	  {
        defaultId = $.getUrlVar('country');
        defaultById = true;
      }
      var defaultName = '';
      if (!defaultById) defaultName = $.getUrlVar('countryName') || mSettings.defaultCountry;
      $('#sm_select_country_list').html('');
      var html = '';
      var processedItems = 0;
      for (var r=0; r<=2; r++)
	  {
        var list = $.grep(data, function (item) { return item.Rank == r; });
        if (list.length > 0)
		{
          if (processedItems > 0) html += '<li class="sm_none"><div class="sm_line"></div></li>';
          switch (r)
		  {
            case 0: html += '<li><b>Топовые направления:</b></li>'; break;
            case 1: html += '<li><b>Популярные направления:</b></li>'; break;
            default: html += '<li><b>Остальные направления:</b></li>'; break;
          }
        }
        for (var i=0; i<list.length; i++)
		{
          if ((defaultById && list[i].Id == defaultId) || (!defaultById && defaultName == list[i].Name))
		  {
            html += '<li class="sm_active" id="country' + list[i].Id + '">' + list[i].Name + '</li>';
            if( !$('#sm_country').data('uid') )
            {
              $('#sm_country').text(list[i].Name);
              $('#sm_country').data('uid', list[i].Id);
            }
          }
          else html += '<li id="country' + list[i].Id + '">' + list[i].Name + '</li>';
          processedItems++;
        }
      }
      $('#sm_select_country_list').html(html);
      _sf.makeListLive('sm_select_country_list', 'country', _sf.countrySelected);
      _sf.isCountriesLoaded = true;
      $('#sm_country, #sm_country_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_country');
        $('#sm_select_country').show();
        $('#sm_select_country').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_country_open'), offset: '0 1' });
        return false;
      });
      _sf.loadRegions();
    };
    var mAjax_getCountries=function ()
	{
	  mAjax.getCountries(0, $('#sm_city').data('uid'), callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) { mAjax.ajaxSwitchCurrent++; $(mAjax_getCountries); }
	    else return this.defaultAjaxError;
	  });
	}
	$(mAjax_getCountries);
  },

  loadRegions: function ()
  {
    mAjax.ajaxSwitchCurrent=1;
    var callback = function (data)
	{
      $('#sm_region').text('Любой');
      var html = '', rootId = data[0].Id;
      html += '<li id="regionX">Любой</li>';
	  
	  data.sort(function(a,b)
	  {
	    var nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();
		if(nameA < nameB) return -1;
		if(nameA > nameB) return 1;
		return 0;
	  });

	  for(var i=0; i<data.length; i++) if(!data[i].ParentId) { rootId = data[i].Id; break; }
	  
      for(var i=0; i<data.length; i++) if(data[i].ParentId == rootId)       // this is a region
      {
        html += '<li id="region' + data[i].Id + '">' + data[i].Name + '</li>';
      }

      $('#sm_select_region_list').html(html);
      _sf.makeListLive('sm_select_region_list', 'region', _sf.regionSelected);
      $('#sm_region, #sm_region_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_region');
        $('#sm_select_region').show();
        $('#sm_select_region').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_region_open'), offset: '0 1' });
        return false;
      });
      _sf.loadResorts();
    };
    var mAjax_getRegions=function ()
	{
	  mAjax.getGeoTree($('#sm_country').data('uid'), callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) { mAjax.ajaxSwitchCurrent++; $(mAjax_getRegions); }
	    else return this.defaultAjaxError;
	  },0);
	}
	$(mAjax_getRegions);
  },
  
  loadResorts: function()
  {
    mAjax.ajaxSwitchCurrent=1;
    var callback = function (data)
	{
	  $('#sm_resort').text('Любой');
      var html = '', rootId = data[0].Id;
	  
	  data.sort(function(a,b)
	  {
	    var nameA = a.Name.toLowerCase(), nameB = b.Name.toLowerCase();
		if(nameA < nameB) return -1;
		if(nameA > nameB) return 1;
		return 0;
	  });
	  
//	  for(var i=0; i<data.length; i++) if(!data[i].ParentId) { rootId = data[i].Id; break; }

      html += '<li id="resortX">Любой</li>';
      for(var i=0; i<data.length; i++) if(data[i].ParentId != rootId)
      if(!$('#sm_region').data('uid') || $('#sm_region').data('uid')==data[i].ParentId) if(data[i].ParentId)
      {
        html += '<li id="resort' + data[i].Id + '">' + data[i].Name + '</li>';
      }

      $('#sm_select_resort_list').html(html);
      _sf.makeListLive('sm_select_resort_list', 'resort', _sf.resortSelected);

      $('#sm_resort, #sm_resort_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_resort');
        $('#sm_select_resort').show();
        $('#sm_select_resort').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_resort_open'), offset: '0 1' });
        return false;
      });
      _sf.loadHotelsInfo();     // load resort-dependent dictionaries
    };
    var mAjax_getResorts=function ()
	{
	  mAjax.getGeoTree($('#sm_country').data('uid'), callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) { mAjax.ajaxSwitchCurrent++; $(mAjax_getResorts); }
	    else return this.defaultAjaxError;
	  },0);
	}
	$(mAjax_getResorts);
  },
  
  countrySelected: function (e)
  {
    $('#sm_country').data('uid', e.target.id.substring(7));
    $('#sm_country').text($(e.target).text());
    _sf.closeAllPopups();
    _sf.loadRegions();
  },

  regionSelected: function (e)
  {
    $('#sm_region').data('uid', e.target.id.substring(6));
    $('#sm_region').text($(e.target).text());
    if($('#sm_region').data('uid')=="X") $('#sm_region').data('uid','');
    _sf.closeAllPopups();
    _sf.loadResorts();
  },

  resortSelected: function (e)
  {
    $('#sm_resort').data('uid', e.target.id.substring(6));
    $('#sm_resort').text($(e.target).text());
    if($('#sm_resort').data('uid')=="X") $('#sm_resort').data('uid','');
    _sf.closeAllPopups();
    _sf.loadHotelsInfo();
  },
  
  hotelSelected: function (e)
  {
    $('#sm_hotel').data('uid', e.target.id.substring(5));
    $('#sm_hotel').text($(e.target).text());
    if($('#sm_hotel').data('uid')=="X") $('#sm_hotel').data('uid','');
    _sf.closeAllPopups();
  },
  
  starSelected: function (e)
  {
    $('#sm_star').data('uid', e.target.id.substring(4));
    $('#sm_star').text($(e.target).text());
    if($('#sm_star').data('uid')=="X") $('#sm_star').data('uid','');
    _sf.closeAllPopups();
  },
  
  mealSelected: function (e)
  {
    $('#sm_meal').data('uid', e.target.id.substring(4));
    $('#sm_meal').text($(e.target).text());
    if($('#sm_meal').data('uid')=="X") $('#sm_meal').data('uid','');
    _sf.closeAllPopups();
  },
  
  getIdsByNames: function (data, names)
  {
    var ids = [];
    var namesArr = names.split(',');
    for (var i=0; i<namesArr.length; i++) for (var j=0; j<data.length; j++) if (data[j].Name == namesArr[i]) { ids.push(data[j].Id); break; }
    return ids;
  },
  
  loadHotelsInfo: function ()	// asynchronous load
  {
    _sf.loadMeals();
    _sf.loadStars();
    _sf.loadHotels();
  },

  loadMeals: function ()
  {
    mAjax.ajaxSwitchCurrent=1;
    var callback = function (data)
	{
	  $('#sm_meal').text('Любое');
      var html = '';
      html += '<li id="mealX">Любое</li>';
      for(var i=0; i<data.length; i++) html += '<li id="meal' + data[i].Id + '">' + data[i].Name + '</li>';

      $('#sm_select_meal_list').html(html);
      _sf.makeListLive('sm_select_meal_list', 'meal', _sf.mealSelected);

      $('#sm_meal, #sm_meal_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_meal');
        $('#sm_select_meal').show();
        $('#sm_select_meal').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_meal_open'), offset: '0 1' });
        return false;
      });
    };
	var mAjax_getMeals=function ()
	{
	  mAjax.getMeals(callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) { mAjax.ajaxSwitchCurrent++; $(mAjax_getMeals); }
	    else return this.defaultAjaxError;
	  },function ()
	  {
  	    _sf.setListMsg(_sf.cMeal, "Ошибка (<a href='#' rel='nofollow' onclick='_sf.loadMeals(); return false;'>обновить</a>)", 'sm_listError');
	  });
	}
	$(mAjax_getMeals);
  },

  loadStars: function ()
  {
    mAjax.ajaxSwitchCurrent=1;
    var callback = function (data)
	{
	  $('#sm_star').text('Любая');
      var html = '';
      html += '<li id="starX">Любая</li>';
      for(var i=0; i<data.length; i++) html += '<li id="star' + data[i].Id + '">' + data[i].Name + '</li>';

      $('#sm_select_star_list').html(html);
      _sf.makeListLive('sm_select_star_list', 'star', _sf.starSelected);

      $('#sm_star, #sm_star_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_star');
        $('#sm_select_star').show();
        $('#sm_select_star').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_star_open'), offset: '0 1' });
        return false;
      });
    };
	var mAjax_getStars=function ()
	{
	  mAjax.getStars($('#sm_country').data('uid'), $('#sm_resort').data('uid'), callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) {mAjax.ajaxSwitchCurrent++; $(mAjax_getStars);}
	    else return this.defaultAjaxError;
	  },function ()
	  {
  	    _sf.setListMsg(_sf.cStar, "Ошибка (<a href='#' rel='nofollow' onclick='_sf.loadStars(); return false;'>обновить</a>)", 'sm_listError');
	  });
	}
	$(mAjax_getStars);
  },

  loadHotels: function ()
  {
    mAjax.ajaxSwitchCurrent=1;
    var callback = function (data)
	{
	  $('#sm_hotel').text('Любой');
      var html = '';
      html += '<li id="hotelX">Любой</li>';
      for(var i=0; i<data.length; i++) html += '<li id="hotel' + data[i].Id + '">' + data[i].Name + '</li>';

      $('#sm_select_hotel_list').html(html);
      _sf.makeListLive('sm_select_hotel_list', 'hotel', _sf.hotelSelected);

      $('#sm_hotel, #sm_hotel_open').click(function ()
	  {
        _sf.closeAllPopups('sm_select_hotel');
        if(!$('#sm_hotel').data('status')) return false;
        $('#sm_select_hotel').show();
        $('#sm_select_hotel').position({ collision: 'none', my: 'right top', at: 'right bottom', of: $('#sm_hotel_open'), offset: '0 1' });
        return false;
      });
      
      var objects='#sm_hotel, #sm_hotel_open';
      if( $('#sm_region').data('uid')!=undefined && $('#sm_region').data('uid')!='' || $('#sm_resort').data('uid')!=undefined && $('#sm_resort').data('uid') )
      {
        $(objects).removeClass('sm_disabled_ddb');
        $('#sm_hotel').data('status',1);
      }  
      else
      {
        $(objects).addClass('sm_disabled_ddb');
        $('#sm_hotel').data('status',0);
      }  

      // NB: LAST DICTIONARY
      _sf.setupDefaults();
	  if (_sf.module_STA==true) _sf.findClicked();
    };
	
	var mAjax_getHotels=function ()
	{
	  mAjax.getHotels($('#sm_country').data('uid'), $('#sm_resort').data('uid'), $('#sm_star').data('uid'), '', callback, mAjax.defaultError, function ()
	  { 
	    if(mAjax.ajaxSwitchCurrent<mAjax.ajaxSwitchMax) {mAjax.ajaxSwitchCurrent++; $(mAjax_getHotels);}
	    else return this.defaultAjaxError;
	  },function ()
	  {
  	    _sf.setListMsg(_sf.cHotel, "Ошибка (<a href='#' rel='nofollow' onclick='_sf.loadHotels(); return false;'>обновить</a>)", 'sm_listError');
	  },_sf.hotelsLoadSize
	  )
	}
	$(mAjax_getHotels);
  },

  fillList: function (list, data, clickEventName)
  {
    if (data != null && data.length > 0 && list!=undefined)
	{
	  $('#' + list.id).html('');
      var html = '';
      for (var i = 0; i < data.length; i++)
	  {
        html += '<li><input ' + (clickEventName ? 'onclick="' + clickEventName + '();" ' : '') + 'type="checkbox" id="' + list.id + data[i].Id + '" value="' + data[i].Id + '" /><label for="' + list.id + data[i].Id + '">' + data[i].Name + '</label></li>';
      }
      $('#' + list.id).html(html);
    }
    else _sf.setListMsg(list, 'Список пуст');
  },

  setListMsg: function (list, msg, css)
  {
    if(list!=undefined) if(css==undefined || css==null) { css='sm_listComment'; } $('#'+list.id).html('<li class="'+css+'">'+msg+'</li>');
  },

  makeListLive: function (listName, idTemplate, callback)
  {
    var lis = $('#' + listName + ' li');
    $.each(lis, function (index, li)
	{
      $(li).mouseover(function (e)
	  {
        $.each($('li', e.target.parentNode), function (i, v) { $(v).removeClass('sm_active'); });
        if (!idTemplate || e.target.id.indexOf(idTemplate) >= 0)  $(e.target).addClass('sm_active');
      });
      if (!idTemplate || li.id.indexOf(idTemplate) >= 0) { $(li).click(callback); }
    });
  },

  showTourOrderForm: function (sourceId, offerId)
  {
    if (!_sf.isOrderHtmlLoaded) { alert('Форма заказа ещё не загружена. Подождите, пожалуйста.'); return; }
    $('#sm_dialog').data('offerId', offerId);
    $('#sm_dialog').data('sourceId', sourceId);
    $('#sm_dialog_content').hide();
    $('#sm_dialog_status').text('...актуализация данных...');
    $('#sm_dialog_status').show();

    $.colorbox({ width: (_sf.module_vk) ? '576px':'715px', height: '450px', inline: true, transition: 'fade', speed: 100, close: '', href: '#sm_dialog', onComplete: function () { $('#sm_dialog').show(); }, onCleanup: function () { $('#sm_dialog').hide(); }, onOpen: function () { $('#cboxOverlay').html(''); } });

	_sf.lastCurrencyAlias = $('#sm_currency').text()
	_sf.lastCurrencyAlias = (_sf.lastCurrencyAlias.length>0) ? $('#sm_currency').text() : $.getUrlVar('currency');
	
    mAjax.getActualPrice(_sf.lastRequestId, (_sf.module_STA) ? $.getUrlVar('country') : $('#sm_country').data('uid'), 0, sourceId, offerId, _sf.lastCurrencyAlias, function (result)
	{
      var unknown = '[нет данных]';
      if (result.isError) $('#sm_dialog_status').text('...произошла ошибка, попробуйте повторить операцию позже...');
      else if (result.isFound == false) $('#sm_dialog_status').text('...данное предложение более недействительно...');
      else
	  {
        $('#sm_dialog_status').hide();
        $('#sm_dialog_content').show();
	    if(result.randomNumber>0) $('#sm_wikicode').text('#'+result.randomNumber);

        $('#sm_tour_name').text(result.data[3] == '' ? unknown : result.data[3]);
        var room = result.data[9] == '' ? unknown : result.data[9];
        if (room != unknown && result.data[10] != '' && result.data[9] != result.data[10]) room += ', ' + result.data[10];

        $('#sm_tour_room').text(room);
        $('#sm_tour_country').text(result.data[0] == '' ? unknown : result.data[0]);
        $('#sm_tour_city').text(result.data[2] == '' ? unknown : result.data[2]);
        $('#sm_tour_dptcity').text(result.data[1] == '' ? unknown : result.data[1]);
        $('#sm_tour_checkin').text(result.data[4] == '' ? unknown : result.data[4]);
        $('#sm_tour_nights').text(result.data[5] == '' ? unknown : result.data[5]);
        var hotel = result.data[6] == '' ? unknown : result.data[6];
        var hotelUrlHere = false;
        if (hotel != unknown)
		{
          if (result.data[8] != '') hotel += ' (' + result.data[8] + ')';
          if (result.data[7] != '')
		  {
            hotel = '<a target="_blank" href="' + result.data[7] + '">' + hotel + '</a>';
            hotelUrlHere = true;
          }
        }
        if (hotelUrlHere) $('#sm_tour_hotel').html(hotel);
        else $('#sm_tour_hotel').text(hotel);

        $('#sm_tour_meal').text(result.data[11] == '' ? unknown : result.data[11]);
        $('#sm_tour_htplace').text(result.data[22] == '' ? unknown : result.data[22]);
        var stops = '';
        switch (result.data[13])
		{
          case '0': stops += 'места(+)'; break;
          case '1': stops += 'места(−)'; break;
          case '2': stops += 'места(call)'; break;
          default: stops += 'места(?)'; break;
        }
        stops += ' / ';
        if (result.data[14] == '1' || result.data[16] == '1') stops += 'вылет(+)';
        else if (result.data[14] == '2' || result.data[16] == '2') stops += 'вылет(call)';
        else if (result.data[14] == '0' || result.data[16] == '0') stops += 'вылет(−)';
        else stops += 'вылет(?)';

        stops += ' / ';
        if (result.data[15] == '1' || result.data[17] == '1') stops += 'прилёт(+)';
        else if (result.data[15] == '2' || result.data[17] == '2') stops += 'прилёт(call)';
        else if (result.data[15] == '0' || result.data[15] == '0') stops += 'прилёт(−)';
        else stops += 'прилёт(?)';

        $('#sm_tour_stops').text(stops);
        $('#sm_tour_price').text('Цена: ' + result.data[18].toString() + ' ' + result.data[21]);
      }
    });
  },

  sendTourOrder: function ()
  {
    var offerId = $('#sm_dialog').data('offerId');
    var sourceId = $('#sm_dialog').data('sourceId');
    mAjax.saveTourOrder(
      _sf.lastRequestId, offerId, sourceId, $('#sm_user').val(), $('#sm_email').val(), $('#sm_phone').val(), $('#sm_info').val(),
      (_sf.module_STA)?$.getUrlVar('countryName'):$('#sm_country').text(), (_sf.module_STA)?$.getUrlVar('cityFromName'):$('#sm_city').text(), _sf.lastCurrencyAlias,
      function ()
	  {
        $('#sm_dialog_content').hide();
        $('#sm_dialog_status').text('...заявка отправлена - менеджер свяжется с вами...');
        $('#sm_dialog_status').show();
      }
    );
  },

  showReportErrorForm: function ()
  {
    var f = $('#sm_report_error');
    f.toggle();
    f.position({ my: 'left bottom', at: 'left top', of: $('#sm_show_report_form'), offset: '0,0' });
    f.position({ my: 'left bottom', at: 'left top', of: $('#sm_show_report_form'), offset: '0,0' }); // fixes position
  },

  reportError: function ()
  {
    if ($('#sm_error_desc').val() == '') alert('Укажите описание/подробности ошибки.');
    else
	{
      var offerId = $('#sm_dialog').data('offerId');
      var sourceId = $('#sm_dialog').data('sourceId');
      mAjax.reportError(
      $('#sm_country').data('uid'), $('#sm_city').data('uid'), sourceId, offerId, _sf.lastCurrencyAlias, $('#sm_error_type').val(), $('#sm_error_desc').val(),
      function ()
	  {
        alert('Спасибо! Сообщение об ошибке отправлено.');
        $('#sm_report_error').hide();
      }
      );
    }
  },

  parseExtendedFormUrl: function ()
  {
    if ($.getUrlVar('adults')) $('#sm_adults').val($.getUrlVar('adults'));
    if ($.getUrlVar('kids')) $('#sm_kids').val($.getUrlVar('kids'));
    if ($.getUrlVar('nightsMin'))
	{
      $('#sm_nights_min').val($.getUrlVar('nightsMin'));
      $('#sm_nights_max').val(31);
    }
    if ($.getUrlVar('nightsMax')) $('#sm_nights_max').val($.getUrlVar('nightsMax'));
    if ($.getUrlVar('priceFrom')) $('#sm_price_min').val($.getUrlVar('priceFrom'));
    if ($.getUrlVar('priceTo')) $('#sm_price_max').val($.getUrlVar('priceTo'));
    if ($.getUrlVar('currency')) $('#sm_currency').text($.getUrlVar('currency'));
    if ($.getUrlVar('dateFrom')) $('#sm_date_from').val($.getUrlVar('dateFrom'));
	else $('#sm_date_from').val(_sf.DateFormat(new Date(), mSettings.fm.dateFromExt));
    if ($.getUrlVar('dateTo')) $('#sm_date_to').val($.getUrlVar('dateTo'));
	else $('#sm_date_to').val(_sf.DateFormat(new Date(), mSettings.fm.dateToExt));
  },

  DateFormat: function (currentdate, extdate)
  {
    if(currentdate==null) currentdate = new Date();
    date = new Date(currentdate.getFullYear(), currentdate.getMonth(), currentdate.getDate() + extdate);
    return $.datepicker.formatDate('dd/mm/yy', date);
  },
  
  defaultsSet: 0,
  setupDefaults: function(what)
  {
    if(_sf.defaultsSet) return false;
// t.b.d.
    if(mSettings.defaultMinPrice!=undefined) $('#sm_price_min').val(mSettings.defaultMinPrice);
    if(mSettings.defaultMaxPrice!=undefined) $('#sm_price_max').val(mSettings.defaultMaxPrice);
    if(mSettings.defaultMinNights!=undefined) $('#sm_nights_min').val(mSettings.defaultMinNights);
    if(mSettings.defaultMaxNights!=undefined) $('#sm_nights_max').val(mSettings.defaultMaxNights);
//    if(mSettings.defaultMinDate!=undefined) $('#sm_date_from').val(mSettings.defaultMinDate);
//    if(mSettings.defaultMaxDate!=undefined) $('#sm_date_to').val(mSettings.defaultMaxDate);
    if(mSettings.defaultAdults!=undefined) $('#sm_adults').val(mSettings.defaultAdults);
    if(mSettings.defaultKids!=undefined) $('#sm_kids').val(mSettings.defaultKids);
    
    if($.getUrlVar('STA') == '1')
    {
      if($.getUrlVar('dateFrom'))
      {
        $('#sm_date_from').val($.getUrlVar('dateFrom'));
        var dateFrom = $.datepicker.parseDate('dd/mm/yy', $.getUrlVar('dateFrom'));
        $('#sm_date_to').val($.datepicker.formatDate('dd/mm/yy', new Date(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate() + mSettings.em.dateToExt)));
      }
      if($.getUrlVar('dateTo'))
      {
        $('#sm_date_to').val($.getUrlVar('dateTo'));
      }
      if($.getUrlVar('resort'))
      {
        $('#sm_resort').data('uid', $.getUrlVar('resort') );
        $('#sm_select_resort li').each(function(j,e)
        {
          if($(e).attr('id')=='resort'+$.getUrlVar('resort')) $('#sm_resort').text($(e).text());
        });
      }
      if($.getUrlVar('region'))
      {
        $('#sm_region').data('uid', $.getUrlVar('region') );
        $('#sm_select_region li').each(function(j,e)
        {
          if($(e).attr('id')=='region'+$.getUrlVar('region')) $('#sm_region').text($(e).text());
        });
      }
      setTimeout("$('#sm_searching').click();",900);
    }
    _sf.defaultsSet = 1;
  },

// ====== SMALL FUNCS HERE ======

  afterInitCustom: function () {},  //  do not fill, used for external purposes
  setSrcInHtml: function (html) { return html.replace(/\$module_path\$/g, mSettings.modulePath.substr(0, mSettings.modulePath.length - 1)); },
  currencySelected: function (e) { $('#sm_currency').text($(e.target).text()); _sf.closeAllPopups(); },
  showLoadingLayer: function () { $('#sm_table_form').addClass('sm_disabled_form'); $('#sm_loading_wrapper').show(); },
  hideLoadingLayer: function () { /*$('#sm_result_table_wrapper').show();*/ $('#sm_table_form').removeClass('sm_disabled_form'); $('#sm_loading_wrapper').hide(); },
  loadToursOnNewPage: function () { var wndResult=window.open((mSettings.fm.resultPage||mSettings.modulePath+'html/tResult.htm')+_sf.getQueryString(),'results'); },

  fake: 0,
  updateResult: false,
  doExtendSearch: false,
  extendSearchValue: 0,
  extendSearchPN: 0,
  searchFilterType: 0,
  searchFilterData: 0,
  patch01: 0
}

