/*
 * jQuery params search filter
 * @author Daniel Honzik
 * @version 1.0
 * @site restaurace.cz  
 */
 
(function($){

  var $overlay;
  
  // jquery fn
  $.fn.params = function(){
    var $that = $(this);
    var $params = $('div.opened', this);
    var $holder = $('span.field span', this);
    var $opener = $('span.opener', this);
    var $checkboxes = $('input[type=checkbox]', this);
    var $radios = $('input[type=radio]', this);

    // initialize closer if there is not any
    if (!$overlay) {
      $('body').append('<div id="options-background-closer" style="display: none;"></div>');
      $overlay = $('#options-background-closer');
      $overlay.bind('click', function(){
        $('.select div.opened').css('display', 'none');
        $overlay.css('display', 'none');
      });
    }

    // bind open click
    $('span.field', this).add($opener).bind('click', function(){
      $('.select div.opened').css('display', 'none');
      $overlay.css('height', $(document).height() + 'px').css('display', 'block');
      $params.css('display', 'block');   
    });
    
    // link - check
    $('a.options-check', this).bind('click', function(e){
      $checkboxes.attr('checked', true);
      refreshValues({ 'checkbox': $checkboxes, 'holder': $holder });
      e.preventDefault();
    });
  
    // link - uncheck
    $('a.options-uncheck', this).bind('click', function(e){
      $checkboxes.attr('checked', false);
      refreshValues({ 'checkbox': $checkboxes, 'holder': $holder });
      e.preventDefault();
    });
    
    // link - close
    $('a.options-close', this).bind('click', function(e){
      $overlay.trigger('click');
      e.preventDefault();
    });

    // link - reset
    $('a.options-reset', this).bind('click', function(e){
      $radios.each(function(){
        if (!$(this).val()) {
          $(this).attr('checked', true);
        }
      });
      refreshValues({ 'radio': $that, 'holder': $holder });
      e.preventDefault();
    });
    
    // checkbox
    $checkboxes.bind('change', function(){
      refreshValues({ 'checkbox': $checkboxes, 'holder': $holder });
    });
    
    // radio
    $radios.bind('change', function(){
      refreshValues({ 'radio': $that, 'holder': $holder });
    });

    // initiate state 
    if ($checkboxes.length > 0) {
      refreshValues({ 'checkbox': $checkboxes, 'holder': $holder });
    } else if ($radios.length > 0) {
      refreshValues({ 'radio': $that, 'holder': $holder });
    }
  };
  
  // global value refresh for each block
  function refreshValues(obj) {
    var origin = obj.holder.attr('data-default');
    var updated = '';
    
    if (obj.checkbox != undefined) {
      obj.checkbox.each(function(){
        if ($(this).is(':checked')) {
          updated += $(this).parent().find('label').text() + ', ';
        }
      });
    }
    
    if (obj.radio != undefined) {
      obj.radio.find('ul.info-list').each(function(){
        var title = $('li.title', this).text();
        $('li', this).each(function(){
          if ($('input', this).is(':checked') && $('input', this).val()) {
            updated += title + ': ' + $('label', this).text().trim() + ', ';
          }
        });
      });
    }    
    
    if (updated) {
      obj.holder.text(updated);
    } else {
      obj.holder.text(origin);
    }
  }

})(jQuery)
