MTJax.SwapperUtil = {
   image: {}
  ,urlConfig: {}
  ,urlInfo: {}
  ,txtConfig: {}
  ,timbers: {}
  ,milkboxTriggers: {}

  ,preLoad: []
  ,Milkbox: null
  ,rxPT: /([^\/])([\b\/-])([^i][a-z]{2}|[^i][a-z]{2}\d)([\b\/\.])/

  ,init: function()
  {
    try
    {
      if (Milkbox)
      {
        var div = new Element('div', {id: 'hidden-gal-div', style: 'visibility: hidden'});
        document.getElement('body').adopt(div);

        for (set in this.imageZoom)
        {
          this.milkboxTriggers[set] = {};
          for (mod in this.imageZoom[set])
          {
            this.milkboxTriggers[set][mod] = {};
            var img = this.imageZoom[set][mod];
            for (var i = 0; i < this.timbers[set].length; i++)
            {
              var timber = this.timbers[set][i];
              this.milkboxTriggers[set][mod][timber] = new Element('a', {
                 href: img.replace(this.rxPT, '$1$2' + timber + '$4')
                ,rel: 'milkbox[' + set + '_' + mod + ']'
                ,title: MTJax.Lang.get('.timber.' + MTJax.Lang.timberCodes[timber].toLowerCase()  + '.display')
              });
              div.adopt(this.milkboxTriggers[set][mod][this.timbers[set][i]]);
            }
          }
        }
        this.Milkbox = new Milkbox();
      }
    }
    catch (e) {
      console.log(e);
    }
    new Asset.images(this.preLoad);
  }
};

MTJax.Swapper = {
   ImgContainer: null
  ,LoadAssets: []
  ,Active: null
  ,CfgButton: null
  ,Magnifier: null
  ,Triggers: []
  ,elTriggerCS: null
  ,elTriggerBR: null
  ,swapSet: ''
  ,onMod: 'Bamaco'

  ,timberTriggers: []
  ,timberTrigIndex: {}
  ,timberTrigAct: null

  ,timberChangers: []
  ,rxPT: MTJax.SwapperUtil.rxPT

  ,clicked: function(e)
  {
    if (MTJax.SwapperUtil.Milkbox)
    {
      if (MTJax.SwapperUtil.milkboxTriggers[this.swapSet])
      {
        var mod = this.onMod;
        if (MTJax.SwapperUtil.milkboxTriggers[this.swapSet][mod])
        {
          timber = this.rxPT.exec(this.ImgContainer.getStyle('backgroundImage'))[3];
          if (MTJax.SwapperUtil.milkboxTriggers[this.swapSet][mod][timber])
          {
            e.target = MTJax.SwapperUtil.milkboxTriggers[this.swapSet][mod][timber];
            MTJax.SwapperUtil.milkboxTriggers[this.swapSet][mod][timber].fireEvent('click', e);
          } else console.log('unprepped Timber');
        } else console.log('unprepped mod');
      } else console.log('unprepped Set');
    } else console.log('no Milkbox');
  }

  ,initialize: function(el)
  {
    this.onMod = /\bmod-(\w+)\b/.exec(el.className)[1];
    this.swapSet = /swap-(\w*)\b/.exec(el.className)[1];

    console.log(this.onMod, this.swapSet);

    this.Triggers = el.getElements('a.trigger');
    this.ImgContainer = el.getFirst();
    this.CfgButton = $(el.id + '-cfgButton');
    this.Magnifier = el.getElement('.magnify');
    this.timberChangers = $$('img.ptchg, div.ptchg');

    this.ImgContainer.addEvent('click', this.clicked.bind(this));
    this.ImgContainer.setStyle('curosr', 'pointer');

    el.getElements('div[class^=timber-]').each(function(el)
    {
      el.timber = /timber-([a-z]{3})\b/.exec(el.className)
      if (!el.timber) return;

      el.Swapper = this;
      el.timber = el.timber.pop();
      this.timberTriggers.push(el);
      this.timberTrigIndex[el.timber] = el;
      if (el.hasClass('swapper-timber-act')) this.timberTrigAct = el;

      el.addEvents({
        click: function(e)
        {
          e.stop();
          this.useTimber = this.timber;
          if ('beds' == this.Swapper.swapSet)
          {
            if ('eic' == this.useTimber || 'ahe' == this.useTimber)
            {
              this.useTimber += '1';
            }
          }
          var oldSrc = this.Swapper.ImgContainer.getStyle('backgroundImage');

          if (oldSrc.search(/closet/))
          {
            switch (this.timber)
            {
              case 'eic' :
              case 'ahe' :
                this.useTimber += '2';
                break;
            }
          }
          var newSrc = oldSrc.replace(this.Swapper.rxPT, '$1$2' + this.useTimber + '$4');
          this.Swapper.ImgContainer.setStyle('backgroundImage', newSrc);
          this.Swapper.markTimber();
          this.Swapper.timberChangers.each(function(el)
          {


            switch (el.get('tag'))
            {
              case 'img' :
                el.src = el.src.replace(this.Swapper.rxPT, '$1$2' + this.useTimber + '$4');
                break;
              case 'div' :
                el.setStyle('background-image', el.getStyle('background-image').replace(this.Swapper.rxPT, '$1$2' + this.useTimber + '$4'));
                break;
            }

            if (el.tipPrepped)
            {
              el.store('tip:text', el.retrieve('tip:text').replace(this.Swapper.rxPT, '$1$2' + this.useTimber + '$4'));
              el.store('tip:title', el.retrieve('tip:title').replace(this.Swapper.rxPT, '$1$2' + this.useTimber + '$4'));
            }
          }.bind(this));
        }.bindWithEvent(el)
      });
    }.bind(this));

    if (this.CfgButton)
    {
      this.CfgButton.addEvent('click', function(e) { e.stop(); document.location.href = this.get('href'); }.bindWithEvent(this.CfgButton) );
    }


    if ((this.elTriggerDrawersOn = document.getElement('a.swapper-trigger-drawer-on')))
    {
      this.elTriggerDrawersOn.addEvent('click', function(){
        this.ImgContainer.setStyle('background-image', this.ImgContainer.getStyle('background-image').replace(/schraenke\d/, 'schraenke2'));
      }.bind(this));
    }


    if ((this.elTriggerDrawersOff = document.getElement('a.swapper-trigger-drawer-off')))
    {
      this.elTriggerDrawersOff.addEvent('click', function(){
        this.ImgContainer.setStyle('background-image', this.ImgContainer.getStyle('background-image').replace(/schraenke\d/, 'schraenke1'));
      }.bind(this));
    }


    if (this.timberTrigAct)
    {
      this.initTimberSwitch();
      this.timberChangers.each(function(el)
      {
        switch (el.get('tag'))
        {
          case 'img' :
            el.src = el.src.replace(this.Swapper.rxPT, '$1$2' + this.timber + '$4');
            break;
          case 'div' :
            el.setStyle('background-image', el.getStyle('background-image').replace(this.Swapper.rxPT, '$1$2' + this.timber + '$4'));
            break;
        }
      }.bind(this.timberTrigAct));
    }

    if ((this.elTriggerBR = el.getParent().getParent().getParent().getElement('div.trigger-backrest')))
    {
      this.elTriggerBR.Swapper = this;
      this.elTriggerBR.isOn = true;

      this.elTriggerBR.setStyles({
        cursor: 'pointer'
      });

      this.elTriggerBR.addEvents({
        click: function()
        {
          if (this.isOn)
          {
            this.isOn = false;
            this.getElement('.checked').setStyle('display', 'none');
            this.Swapper.swapSet += '-nb';
          }
          else
          {
            this.isOn = true;
            this.getElement('.checked').setStyle('display', 'block');
            this.Swapper.swapSet = this.Swapper.swapSet.split('-').shift();
          }

          this.Swapper.Active.fireEvent('click');
        }
      });
    }

    if ((this.elTriggerCS = el.getParent().getParent().getParent().getElement('div.trigger-corner-seat')))
    {
      this.elTriggerCS.Swapper = this;

      this.elTriggerCS.setStyles({
        cursor: 'pointer'
      });

      this.elTriggerCS.addEvents({
        click: function()
        {
          switch (this.Swapper.swapSet)
          {
            case 'cornerbenches' :
              this.getElement('.checked').setStyle('display', 'none');
              this.Swapper.swapSet = 'benches';
              break;
            case 'benches' :
              this.getElement('.checked').setStyle('display', 'block');
              this.Swapper.swapSet = 'cornerbenches';
              break;
            case 'cornerbenches-nb' :
              this.getElement('.checked').setStyle('display', 'none');
              this.Swapper.swapSet = 'benches-nb';
              break;
            case 'benches-nb' :
              this.getElement('.checked').setStyle('display', 'block');
              this.Swapper.swapSet = 'cornerbenches-nb';
              break;
          }
          this.Swapper.Active.fireEvent('click');
        }
      });
    }

    for (img in MTJax.SwapperUtil.image[this.swapSet])
    {
      MTJax.SwapperUtil.preLoad.push(MTJax.SwapperUtil.image[this.swapSet][img]);
    }

    if (!this.CfgButton)
    {
      this.CfgButton = {};
    }

    if (this.Magnifier)
    {
//  		this.Magnifier.href = 'javascript:void(0);';
//  		this.Magnifier.addEvent('click', function(){this.ImgContainer.fireEvent('click');}.bind(this));
    }

    this.Triggers.each(function(el)
    {
      el.Modell = /modell_(\w*)\b/i.exec(el.className)[1];
      el.Swapper = this;

      if (el.hasClass('active'))
      {
        this.Active = el;
      }
    }.bind(this));

    this.Triggers.addEvents({
      mouseenter: function()
      {
        this.Swapper.ImgContainer.setStyle('backgroundImage', 'url(' + MTJax.SwapperUtil.image[this.Swapper.swapSet][this.Modell] + ')');
        this.Swapper.markTimber();

        if (this.Swapper.Active !== this)
        {
          if (this.timeout) window.clearTimeout(this.timeout);
          this.timeout = window.setTimeout(function(){this.fireEvent('click')}.bind(this), 400);
        }
      }

      ,mouseleave: function()
      {
        this.Swapper.restore();
        window.clearTimeout(this.timeout);
      }

      ,click: function()
      {
        this.blur();

        if (this.Swapper.Active === this && MTJax.SwapperUtil.urlConfig[this.Swapper.swapSet][this.Modell])
        {
//          document.location.href = MTJax.SwapperUtil.urlConfig[this.Swapper.swapSet][this.Modell];
        }

        this.Swapper.Active.toggleClass('active');
        this.Swapper.Active = this;
        this.toggleClass('active');

        this.Swapper.ImgContainer.setStyle('backgroundImage', 'url(' + MTJax.SwapperUtil.image[this.Swapper.swapSet][this.Modell] + ')');
        if (this.Swapper.CfgButton) this.Swapper.CfgButton.href = MTJax.SwapperUtil.urlConfig[this.Swapper.swapSet][this.Modell];
        if (this.Swapper.Magnifier) this.Swapper.Magnifier.href = MTJax.SwapperUtil.urlInfo[this.Swapper.swapSet][this.Modell];
        if (this.Swapper.CfgButton) this.Swapper.CfgButton.set('html', MTJax.SwapperUtil.txtConfig[this.Swapper.swapSet][this.Modell]);
        this.Swapper.markTimber();

        if (MTJax.SwapperUtil.detailPics[this.Swapper.swapSet][this.Modell])
        {
          var e = MTJax.SwapperUtil.detailPics[this.Swapper.swapSet][this.Modell].thumb.length;
          var elThumbs = $$('.details div div');
          for (var i = 0; i < e; i ++)
          {
            var thumb = MTJax.SwapperUtil.detailPics[this.Swapper.swapSet][this.Modell].thumb[i];
            var hover = MTJax.SwapperUtil.detailPics[this.Swapper.swapSet][this.Modell].hover[i];
//            console.log(thumb, hover, elThumbs[i]);
            if ((el = elThumbs[i]))
            {
              console.log(el);
              el.store('tip:title', hover);
              el.setStyle('background-image', 'url(' + thumb + ')');
            }
          }
        }
      }
    });
  }

  ,toTimberSwitch: null

  ,doTimberSwitch: function()
  {
    var el = this.timberTrigAct.getParent().getNext();
    if (!el)
    {
      el = this.timberTrigAct.getParent().getParent().getFirst();
    }
    el.getFirst().fireEvent('click');
  }

  ,initTimberSwitch: function()
  {
    return;
    if (this.toTimberSwitch) window.clearTimeout(this.toTimberSwitch);
    this.toTimberSwitch = window.setTimeout(this.doTimberSwitch.bind(this), 8000);
  }

  ,markTimber: function()
  {
    try
    {
      if (!this.timberTrigAct) return;
      this.initTimberSwitch();

      timber = this.rxPT.exec(this.ImgContainer.getStyle('backgroundImage'));
      if (!timber[3]) return;
      timber = timber[3];
      this.timberTrigAct.addClass('swapper-timber');
      this.timberTrigAct.removeClass('swapper-timber-act');

      if (this.timberTrigIndex[timber])
      {
        this.timberTrigAct = this.timberTrigIndex[timber];
        this.timberTrigAct.addClass('swapper-timber-act');
      }

      this.timberChangers.each(function(el)
      {
        el.src = el.src.replace(this.Swapper.rxPT, '$1$2' + this.timber + '$4');
      }.bind({Swapper: this, timber: timber}));
    }
    catch (e)
    {
      console.log(this.timberTrigAct);
    }
  }

  ,restore: function()
  {
    this.Active.fireEvent('click');
  }
};
MTJax.Swapper = new Class(MTJax.Swapper);

window.addEvent('domready', function()
{
  document.getElements('div.swapper').each(function(el) { new MTJax.Swapper(el); });
  MTJax.SwapperUtil.init();
});