
/**
 *  Generates an array of date periods
 *  @param dates - Object {<year> : Object {<month> : Object {<day> : <boolean>}}}
 *  @return Object {<year> : Object {<month> : Object {<day> : <length>}}}
 */
function makePeriods(dates) {
  
  var year, month, day, start, len = 0;
  var num_days = 0;
  
  var obj = new Object();
  for (year in dates)
  {
    for (month in dates[year])
    {
      var selected_arr = new Array();
      
      // make array from days
      for (day in dates[year][ month])
        if (dates[year][ month][day] == true) {
          selected_arr[parseInt(day)] = parseInt(day);
        }

      for (var i=0; i<=selected_arr.length; i++)
      {
        if (typeof(selected_arr[i]) != 'undefined')
        {
          len++;
          if (typeof(start)=='undefined' || start == null) {
            len = 0;
            start = selected_arr[i];
          }
        }
        else if (typeof(selected_arr[i]) == 'undefined' && typeof(start)!='undefined' && start != null)
        {
          if (typeof(obj[year]) == 'undefined')
            obj[year] = new Object();
          if (typeof(obj[year][ month]) == 'undefined')
            obj[year][ month] = new Object();
          
          obj[year][ month][start] = len;
          num_days++;
          start = null;
        }
      }
    }
  }
  
  if (num_days == 0) return 'now';
  return obj;
}

function changeAdvancedSearch(type) {

  if (type == 'places') {
    $('#places-search-tab').addClass('selected');
    $('#events-search-tab').removeClass('selected');
    $('#form-places').show();
    $('#form-places-search-btn').show();
    $('#form-events').hide();

    $('#search-fts').val('false');
  }
  else {
    $('#places-search-tab').removeClass('selected');
    $('#events-search-tab').addClass('selected');
    $('#form-places').hide();
    $('#form-events').show();
    
    $('#search-fts').val('false');
  }

  setSearchFormAction(type);
  setQuicksearchType(type);
  
  return false;
}

function closeAdvancedSearch() {

  // first do the visible changes
  var $form_places_advanced = $('#form-places-advanced');
  $form_places_advanced[0].style.display = "none";

  var type = getSearchbarState();
  switch (type) {
    case 'places':
    default :
      $('#form-places-search-btn').show();
      $('#block-quicksearch').show();
      $('#form-places').find('.btn-details-open').show();
      $('#form-places').find('.btn-details-close').hide();
      break;
    case 'events':
      $('#block-quicksearch').show();
      break;
  }
  $('#toggle-adv-searchbar').find('.toggler').removeClass('close').addClass('open');

  // then do the ones that are not visible
  $form_places_advanced.find('input').removeAttr('disabled');
  $form_places_advanced.find('select').removeAttr('disabled');
  $('#type-select').unbind('change');
}

function openAdvancedSearch(type, expand) {

  if (typeof expand === 'undefined')
    expand = false;
  var $form_places_advanced = $('#form-places-advanced');
  changeAdvancedSearch(type);

  if (type === 'places') {
    if (expand === true) {
      $('#form-places').find('.btn-details-open').hide();
      $('#form-places').find('.btn-details-close').show();
    }
    else {
      $('#form-places').find('.btn-details-open').show();
      $('#form-places').find('.btn-details-close').hide();
    }
  }

  if ($form_places_advanced[0].style.display != "none") {
    expand = true;
  }

  if (expand === true) {
    if (type == 'places') {
      $form_places_advanced.show();
      $('#form-places-search-btn').hide();
      $('#toggle-adv-searchbar').find('.toggler').removeClass('open').addClass('close');
    }
    else {
      $form_places_advanced.hide();
      $('#toggle-adv-searchbar').find('.toggler').removeClass('close').addClass('open');
    }
  }

  closeEventsCalendar();

  if (expand === true) {
    if (type == 'places') {
      $form_places_advanced.find('input').removeAttr('disabled');
      $form_places_advanced.find('select').removeAttr('disabled');
    }
    else {
      $form_places_advanced.find('input').attr('disabled', 'disabled');
      $form_places_advanced.find('select').attr('disabled', 'disabled');
    }
  }
  return false;
}

function toggleAdvancedSearch(expand) {

  var type = getSearchbarState();
  if (type == "places") {
    if ($('#form-places-advanced')[0].style.display == "none") {
      openAdvancedSearch(type, expand);
    }
    else {
      closeAdvancedSearch();
    }
  }
  if (type == "events") {
    if ($('#form-events-calendar')[0].style.display == "none") {
      openEventsCalendar();
    }
    else {
      closeEventsCalendar();
    }
  }
  
}

function openEventsCalendar() {
  var calendar = $('#form-events-calendar')[0];
  if (calendar && calendar.style.display === "none") {
    calendar.style.display = "block";
    $('#form-events').find('.btn-details-open').hide();
    $('#form-events').find('.btn-details-close').show();
  }
}

function closeEventsCalendar() {
  var calendar = $('#form-events-calendar')[0];
  if (calendar && calendar.style.display !== "none") {
    calendar.style.display = "none";
    $('#form-events').find('.btn-details-open').show();
    $('#form-events').find('.btn-details-close').hide();
  }
}


function expandFacilitiesFieldset() {
  var $container = $('#form-places-advanced-down');
  if ($container.hasClass('collapsed'))
    $container.removeClass('collapsed');
  $container.addClass('expanded');

  $container.find('.btn-expand').removeClass('btn-expand').addClass('btn-collapse');
  $container.find('.facilities-legend').hide();
  $container.find('.ddots').hide();
}

function collapseFacilitiesFieldset() {
  var $container = $('#form-places-advanced-down');
  if ($container.hasClass('expanded'))
    $container.removeClass('expanded');
  $container.addClass('collapsed');

  $container.find('.btn-collapse').removeClass('btn-collapse').addClass('btn-expand');
  $container.find('.facilities-legend').css({display: "inline"});
  $container.find('.ddots').show();

  var len = 0;
  var str_facility;
  var $facilities = $("#form-places-advanced-down").find(".facilities-legend").find(".facility");
  $('#form-places-advanced-down').find('.field').find('.checkbox').each(function(i, elem){
    str_facility = $(this).attr('id').substr(6);
    if (str_facility == 'smoking-0') str_facility = 'no-smoking';
    if (str_facility == 'smoking-1') str_facility = 'smoking';
    if (this.checked) {
      len++
      $($facilities[i]).css({display: "inline"});
    }
    else {
      $($facilities[i]).hide();
    }
  });
  if (len == 0)
    $facilities.css({display: "inline"});

}

function toggleFacilitiesFieldset() {
  if ($('#form-places-advanced-down').hasClass('collapsed'))
    expandFacilitiesFieldset();
  else
    collapseFacilitiesFieldset();
}

function getSearchbarState() {
  var state = 'places'
  if ($('#events-search-tab').hasClass('selected')) {
    state = 'events';
  }
  return state;
}

function parseSearchParam(query, $el) {
  
  if ($el.attr("name") == null || $el.attr("name") == "")
    return query;
  var str_val = "";
  var name = $el.attr("name");
  switch ($el.attr("type")) {
    case "select-multiple":
    case "select-one":
    case "text":
    case "hidden":
      var vals = $el.val();
      if (vals !==  null && typeof vals == 'object' && typeof vals[0] == 'string') {
        var str_val = ""
        for (var key in vals) {
          if(typeof vals[key] == "string"){
            str_val += (str_val == "" ? "" : ",") + vals[key];
          }
        }
      }
      else if(typeof vals == "string"){
        str_val = vals;
      }
      break;
    case "checkbox":
      if ($el.attr("checked")) {
        str_val = $el.val();
      }
      break;
  }
  if (str_val != "") {
    if (typeof(query[name]) == "string") {
     query[name] +=  "," + str_val;
    }
    else {
      query[name] = str_val;
    }
  }
  return query;
}



function toggleFts(ev) {

  var $el = $('#input-search');
  var value;
  var places_value = $el.attr('places_value');
  var events_value = $el.attr('events_value');
  if (getSearchbarState() == 'places') {
    value = places_value;
  }
  else {
    value = events_value;
  }

  var val = $el.val();
  var $search_fts = $("#search-fts");
  switch (ev) {
    case 'focus':
      if (val == value) {
        $el.val('');
        $search_fts.val('true');
        $el.removeClass("disabled");
      }
      else if (val == "" || val == null){
        $search_fts.val('false');
        $el.addClass("disabled");
      }
      break;
    case 'blur':
      if (val == '') {
        $el[0].value = value;
        $search_fts.val('false');
        $el.addClass("disabled");
      }
      else {
        $search_fts.val('true');
        $el.removeClass("disabled");
      }
      break;
    default:
      if (val == places_value || val == events_value || val == '') {
        $el.val(value);
        $search_fts.val('false');
        $el.addClass("disabled");
      }
      else {
        $search_fts.val('true');
        $el.removeClass("disabled");
      }
      break;
  }
}

function setLangAndRedirect(lang, anchorEl) {
  $.cookie('lang', lang, {path: '/', expires: 300});
  document.location.href = $(anchorEl).attr('href');
}

function sendSearchRequest(evt) {
  var formEl = $("#search-form")[0];
  
  if (typeof evt.preventDefault == "function") {
    evt.preventDefault();
  }
  else {
    evt.returnValue = false;
  }

  var action = $(formEl).attr("action");
  var places_action = $("#form-places-url").val();
  var query = new Object();
  var query_order =  new Array();
  var str_query = "";
  var str_selects = "";
  
  if (action == places_action) {
    // commented 
//    if (!$("#form-places-advanced").is(":visible")) {
//      parseSearchParam(query, $("#place-type-select"));
//    }
//    else {
      str_selects = "#place-type-select, #cuisine-select, "
                        +"#music-type-select, #theme-select, #workhours-select";
      $(str_selects).each(function (key, el) {
        parseSearchParam(query, $(el));
      });
      $('#facilities-fieldset input, #prices-level input').each(function (key, el) {
        if (el.type == "checkbox") {
          parseSearchParam(query, $(el));
        }
      });
//    }
  }
  else {
    str_selects = "#event-type-select, #search-inputDays";
    $(str_selects).each(function (key, el) {
      parseSearchParam(query, $(el));
    });
  }

  if ($("#search-fts").val() == "true") {
    parseSearchParam(query, $("#input-search"));
  }

  // extract ordered value first
  for (var i = 0; i<query_order.length; i++) {
    var name = query_order[i];
    if (typeof query[name] == "string") {
      str_query += (str_query == "" ? "?" : "&") + name + '=' + query[name];
      query[name] = undefined;
    }
  }

  // extract all the values left
  for (name in query) {
    if (typeof query[name] == "string") {
      str_query += (str_query == "" ? "?" : "&") + name + '=' + query[name];
      query[name] = undefined;
    }
  }
  document.location.href = action + str_query;
}

function setSearchFormAction(type) {
  if (type == 'events') {
    $('#search-form').attr('action', $('#form-events-url').attr('value'));
  }
  else {
    $('#search-form').attr('action', $('#form-places-url').attr('value'));
  }
}

function setQuicksearchType(type, archive) {
  var input_search = $('#quicksearsch-input-search')[0];
  var params = {'type': type};
  if (typeof archive != 'undefined' && archive === true)
    params = {'type': type, 'archive': true};
  input_search.setParams(params);
  var popupTitle = ($('#events-search-tab').hasClass('selected')
        ? $('#events-search-tab').find('.bg-center').html()
        : $('#places-search-tab').find('.bg-center').html()
      );
  input_search.setOptions({'popupTitle': popupTitle});
  input_search.clear(true);
}