zeusSearch = Class.create();
zeusSearch.prototype =
{
  initialize: function (Options)
  {

    this.Options = {
      id: 'default',
      object_id: 'default',
      callback: 'module/index'
    
    };
    
    Object.extend(this.Options, Options || {});
   
    this.Init();
   
  },
  
  Init: function()
  {
    
  
  },
  
  updateSubcat: function(cat_id)
  {
    if (!cat_id > 0) return;
    
    if ($('range-global-container')) { 
      if (cat_id == category_travel) {
        // reizen
        
        $('range-global-container').style.display = 'block';
        $('range-selector-container').style.display = 'none';
      }
      else {
        $('range-selector-container').style.display = 'block';
        $('range-global-container').style.display = 'none';
      }
    }
    
    if ($('country-container')) { 
      if (cat_id == category_travel) {
        // reizen
        
        $('country-container').style.display = 'block';
        $('state-container').style.display = 'none';
      }
      else {
        $('state-container').style.display = 'block';
        $('country-container').style.display = 'none';
      }
    }
    
    if ($('availability-container')) {  
      $('availability-container').innerHTML = '<p><strong>Selecteer eerst een subcategorie</strong></p>';
    }
    
    var thiss = this;
    
    $('subcategory').options.length = 0;
    
    $('category').disabled = true;
    
    new Ajax.Request(env+'/plekjevrij/subcat', {
      parameters: { cat: cat_id},
      evalScripts: true,
      onSuccess: function(transport)
      {
       
        $('subcategory').options.length = 0;
        $('subcategory').style.display = 'block';
        
        eval('r = ' + transport.responseText);
        for (i in r) {
          $('subcategory').options[$('subcategory').options.length] = new Option(r[i], i);
        }
        
        if (!$('availability-container')) {
          thiss.getCalenderForCategory(cat_id);
        }
        
        $('category').disabled = false;
      }
    });
  },
  
  selectSubcat: function(subcat_id)
  {
    if ($('cprice')) {
      search.getPrice(subcat_id, 'cprice');
    }
    
    if ($('advertprice')) {
      search.getAdvertisementFeeForCategory(subcat_id);
    }
    
    if ($('catprice')) {
      $('catprice').innerHTML = '<img src="/img/ajax-loader.gif" alt="">';
      search.getPrice(subcat_id, 'catprice');
    }
    
    if ($('availability-container')) {
      // edit or create of plekje
      $('availability-container').innerHTML = '<img src="/img/ajax-loader.gif" alt="">';
      new Ajax.Updater('availability-container', env+'/plekjevrijsupplier/availabilityedit', {
        parameters: { category_id: subcat_id },
        evalScripts: true
      });
    }
    
    search.getCalenderForCategory(subcat_id);
  },
  
  getPrice: function(subcat_id, elem)
  {
    new Ajax.Request(env+'/plekjevrij/price', {
      parameters: { cat: subcat_id},
      evalScripts: true,
      onSuccess: function(transport)
      {
        $(elem).innerHTML = transport.responseText;
      }
    });
  },
  
  getAdvertisementFeeForCategory: function(subcat_id) {
    new Ajax.Updater('advertprice', env+'/plekjevrij/advertprice', {
      parameters: { cat: subcat_id, months: $('months').value },
      evalScripts: true,
      onSuccess: function(transport)
      {
      }
    });
  },
  
  hideAutocomplete: function()
  {
    $('auto-where').style.display = 'none';
  },
  
  autoComplete: function(element)
  {
    if (!element) {
      setTimeout(function () {search.hideAutocomplete()}, 250);
      return;
    }
    
    $('auto-where').style.display = 'block';
    
    new Ajax.Request(env+'/plekjevrij/where', {
      parameters: { 
        where: element.value,
        category_id: $('category').value
      
      },
      evalScripts: true,
      onSuccess: function(transport) 
      {
        eval('r = ' + transport.responseText);
        ul = '<ul class="suggested">';
        for (i in r) {
          if (typeof(r[i]) == 'string') {
            ul += '<li onclick="search.setWhere(this.innerHTML);return false;">' + r[i] + '</li>';
          }
        }
        ul += '</ul>';
        $('auto-where').innerHTML = ul;
      }
      
    })
  },
  
  setWhere: function(where)
  {
    $('where').value = where;
  },
  
  setDay: function(day)
  {
    for (d = 1; d < 32; d++) {
      td = $('day-' + d);
      if (td) {
        td.removeClassName('selected');
      }
    }
    
    if (!$('day-' + day).hasClassName('past')) {
      $('day-' + day).addClassName('selected');
      $('day').value = day;
    }
  },
  
  getCalenderForCategory: function(category_id)
  {
    //if (!$('month')) return;
    if ($('availability-container')) return;
    
    if ($('month')) {
      month = $('month').value;
      year = $('year').value;
    }
    else {
      return;
      month = 1;
      year = 2010;
    }
    
    $('search-date-container').innerHTML = '<img src="/img/ajax-loader.gif" alt="">'; 
   
    $('category').disabled = true;
    $('subcategory').disabled = true;
    new Ajax.Updater('search-date-container', env+'/plekjevrij/date', {
      parameters: {
        month: month,
        year: year,
        category_id: category_id
      },
      onSuccess: function()
      {
        $('category').disabled = false;
        $('subcategory').disabled = false;
      },
      evalScripts: true
    });
  },
  
  setYear: function(year, category_id)
  {
    this.getCalendar(year, $('month').value, category_id);
  },
  
  setMonth: function(month, category_id)
  {
    this.getCalendar($('year').value, month, category_id);
  },
  
  getCalendar: function(year, month, category_id)
  {
    var thiss = this;
    new Ajax.Updater('search-date-container', env+'/plekjevrij/date', {
      parameters: {
        month: month,
        year: year,
        category_id: category_id
      },
      onSuccess: function() {
        thiss.getCalenderForCategory(category_id);
      },
      evalScripts: true
    });
  },
  
  switchRangeSelector: function(enabled)
  {
    $('range-selector').style.display = enabled ? 'block' : 'none';
  },
  
  setSortOrder: function()
  {
    this.buildQuery('list-sort', $('list-sort').value);
  },
  
  setListItems: function()
  {
    this.buildQuery('list-per-page', $('list-per-page').value);
  },
  
  buildQuery: function(key, value)
  {
    url = window.location.href;
    new_url = '';
    //list-per-page=30
    parts = url.split(key);
    if (parts.length > 1) {
      new_url = parts[0];
      rest = parts[1].split('&');
      if (rest.length > 0) {
        rest.reverse();
        rest.pop();
        rest.reverse();
        new_url += rest.join('&');
      }
    }
    else {
      new_url = parts[0];
    }
    
    new_url = new_url + '&' + key + '=' + value;
    
    window.location.href = new_url;
  },
  
  submit: function(what)
  {
    if( isNaN( $('category').value) || $('category').value == '') {
      //$('category').value = '';
      alert('Kies eerst een categorie');
      return false;
    }
    
    if( isNaN( $('subcategory').value) || $('subcategory').value == '') {
      //$('subcategory').value = '';
      alert('Kies eerst een subcategorie');
      return false;
    }
    else {
      what.form.submit();
    }
  }
  
}

var search = new zeusSearch;
