(function() {
  ff.Farbfinder = function(options)
  {
    this._initialize(options);
  }


  ff.Farbfinder.prototype = jQuery.extend(ff.Farbfinder.prototype,
  {
    getParameters: function()
    {
      return this._parameters;
    },
    _initialize: function(options)
    {
      this._parameters = {};
      this._options = jQuery.extend({accordion: '.accordion'}, options);
      this._steps = [];
      this._currentStep = 0;
      this._accordion = jQuery(this._options.accordion).accordion({
        collapsible: false,
        //autoHeight: false,
        alwaysOpen: true,
        event: false,
        fillSpace: true,
        animated:'jswing',
        duration: 620
        
      });
      jQuery('#farbfinder_accordion').css('visibility', 'visible');

      if(this._accordion.length < 1) return;
      
//      jQuery(this._accordion).find('.toggle').bind('click keypress', { self: this }, function(ev)
//      {
//        ev.preventDefault();
//        var index = jQuery(ev.target).parent('h3').prevAll('h3').length;
//
//        if(index > -1 && index < ev.data.self._currentStep)
//        {
//          ev.data.self._accordion.accordion('activate', index);
//          ev.data.self._currentStep = index;
//        }
//      });

      var manufacturer_select = new ff.ManufacturerSelect(this, {
        manufacturer_id: jQuery.address.parameter('manufacturer_id')
      });
      manufacturer_select.startup();
      this._steps.push(manufacturer_select);

      var color_search = new ff.ColorSearch(this);
      color_search.startup();
      this._steps.push(color_search);

      var grid_wrapper = new ff.GridWrapper(this, { default_package: jQuery.address.parameter('default_package') });
      grid_wrapper.startup();
      this._steps.push(grid_wrapper);

      var quality_select = new ff.QualitySelect(this);
      quality_select.startup();
      this._steps.push(quality_select);
      
      var package_select = new ff.PackageSelect(this, { 'default_package': jQuery.address.parameter('default_package') });
      package_select.startup();
      this._steps.push(package_select);

      var self = this;

      jQuery('#step_0_submit_button').bind('click keypress', function(ev)
      {
        self._currentStep=1;
        self._accordion.accordion('activate', self._currentStep);
      });

      jQuery('#step_1_back_button').bind('click keypress', function(ev)
      {
        self._currentStep=0;
        self._accordion.accordion('activate', self._currentStep);
      });

      jQuery(manufacturer_select).bind('logoClicked', { }, function(ev, data)
      {
        color_search.setManufacturer(data.manufacturer);
        self._currentStep = 2;
        self._accordion.accordion('activate', self._currentStep);
        manufacturer_select._headline.html('Gew&auml;hlter Hersteller: ' + data.manufacturer.name);
      });

      jQuery(color_search).bind('stepBack', {self: this}, function(ev)
      {
        ev.data.self._currentStep = 1;
        ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
        manufacturer_select.resetHeadline();
      });

      jQuery(color_search).bind('colorsFound',{self: this}, function(ev, data)
      {
        ev.data.self._currentStep = 3;
        ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
        grid_wrapper.update(data.query_string, data.result);
      });

      jQuery(grid_wrapper).bind('stepBack', {self: this}, function(ev)
      {
        ev.data.self._currentStep = 2;
        ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
        color_search.resetHeadline();
      });

      jQuery(ff).bind('rowClicked', { self: this }, function(ev, data)
      {
        var ev = data.ev;
        var id = data.id;
        if(ev.stopPropagation)
        {
          ev.stopPropagation();
        }
        ev.cancelBubble = true;
        quality_select.setId(data.id);
      });

      jQuery(quality_select).bind('stepBack', {self: this}, function(ev)
      {
        ev.data.self._currentStep = 3;
        ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
        grid_wrapper.resetHeadline();
      });

      jQuery(quality_select).bind('onFetchComplete', {self: this}, function(ev, data)
      {
        grid_wrapper.setHeadline('Verfeinerte Farbwahl: ' + arguments[1].name + '&nbsp;/ Code ' + arguments[1].code);
        ev.data.self._currentStep = 4;
        ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
      });

      jQuery(quality_select).bind('qualitySelected', {self: this}, function(ev, data)
      {
        ev.data.self._parameters = data;
        package_select.setId(data.id);
        var display_tab = package_select.setQuality(ev.data.self._parameters.quality);

        // SONDERFALL: TRIGGER selectPackage WENN QUALITY = LKW, HIER GILT NUR ANDERE ABFÜLLUNG
        if(ev.data.self._parameters.quality === ff.QualitySelect.QUALITY_LKW)
        {
          jQuery(package_select).trigger('selectPackage', { 'id' : data._id, 'mode' : ff.PackageSelect.ANDERE_ABFUELLUNG });
        }
        else if(display_tab)
        {
          ev.data.self._currentStep = 5;
          ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
        }
      });

      jQuery(package_select).bind('stepBack', {self: this}, function(ev)
      {
        ev.data.self._currentStep = 4;
        ev.data.self._accordion.accordion('activate', ev.data.self._currentStep);
        quality_select.resetHeadline();
      });

      jQuery(package_select).bind('selectPackage', { self: this }, function(ev, data)
      {
        ev.data.self._parameters = jQuery.extend(ev.data.self._parameters, {'package': data.mode});
        var params = ev.data.self._parameters;
        var query = {
          "c[id]"              : params.id,
          "c[package]"         : params['package'],
          "c[quality]"         : params.quality,
          "c[nacre]"           : params.nacre,
          "c[manufacturer]"    : params.manufacturer,
          "c[code]"            : params.code,
          "c[name]"            : params.name,
          "c[color_image]"     : params.color.color_image
        };
        var form = jQuery(document.createElement('form')).attr({
          'action' : '/farbfinder.php',
          'method' : 'post'
        });

//        var link = '/farbfinder.php?';
        jQuery.each(query, function(i, val)
        {
          var input = jQuery(document.createElement('input')).attr({
            'name' : i,
            'type' : 'hidden',
            'value' : val
          });
          form.append(input);
         // link += '&' + i + '=' + val;
        });
        
        jQuery(document.body).append(form);
        form.submit();
//        window.location.href=link;
      });
    }
  });
})();