/**
 * SlideNavi Core
 *
 * @author Philipp Franke <franke@inav.de>
 * @version $Id$
 * @copyright INAV Communication GmbH & Co. KG, 22 October, 2010
 * @package Javascript
 **/

var slideNaviCore = new Class({
  Implements: [Options, Events],
  slideNavi: null,
  children: null,
  childrenCount: null,
  artikel: null,
  scroller: null,
  scroller2: null,
  height: null,
  
  
  initialize: function(slideNavi, options) { 
    this.slideNavi = slideNavi;
    this.children = slideNavi.getElement('ul').getChildren();
    this.childrenCount = slideNavi.getElement('ul').getChildren().length;
    this.createScroller(); 
    if($('slideNaviContainer')) {
      this.slideNavi.setStyle('height',this.slideNavi.getStyle('height').toInt() + $('slideNaviContainer').getStyle('height').toInt());
    }
    
    
    if(this.slideNavi.hasClass('autoHeight')){
      this.height = true;
    }
    
    var hash = location.hash.split('#')[1];
    if(hash != null) {
      this.slideNavi.getElement('.active').removeClass('active');
    var select = 'a[href$=' + hash +']';

    this.artikel = hash;
    this.slideNavi.getElement(select).getParent().addClass('active');
    if($('slideNaviContainer') && this.children.length > 4)
    {
      this.scroller2.toElement(this.slideNavi.getElement(select).getParent());
    }
    if($('bg_'+this.artikel)) {
    if($$('div.invisible').length != 0)
    {
      $$('.visible').each(function(item){
        item.fade('out');
        item.removeClass('visible');
        item.addClass('invisible');
      });
      
      if($('bg_'+this.artikel).getChildren().length != 0){
        $('bg_'+this.artikel).getChildren().each(function(item){
          item.fade('in');
          item.addClass('visible');
          item.removeClass('invisible');
        });
      } else {
        $('current_bg').getChildren().each(function(item){
          item.fade('in');
          item.addClass('visible');
          item.removeClass('invisible');
        });
      }
    }
  }
    }
    else {
      this.artikel = this.slideNavi.getElement('.active').getElement('a').get('href').split('#')[1];
    }
      this.setHeight();
    
    if(this.slideNavi.getElement('.arrow_right')) {
      this.slideNavi.getElement('.arrow_right').addEvent('click', function(e){
        e.stop();
        var new_link = this.slideNavi.getElement('.active').getNext();
        if(new_link == null && this.slideNavi.getElement('.active').hasClass('last') && (this.childrenCount<=4)) {
          new_link = this.slideNavi.getElement('ul').getFirst();
        }

        if(new_link != null) {
        if(new_link.match('.last')&&(this.childrenCount>4)) {
          this.children.each(function(item, index) {
            slideNavi.getElement('ul').setStyle('width', slideNavi.getElement('ul').getStyle('width').toInt() + item.getStyle('width').toInt() + 24);
            var newFirst = item.clone().cloneEvents(item);
            newFirst.inject($('slideNaviContainer').getElement('ul'));
          });
        } else if(new_link.getNext() != null&&(this.childrenCount>4)) {
          if(new_link.getNext().match('.last')) {
            this.children.each(function(item, index) {
              slideNavi.getElement('ul').setStyle('width', slideNavi.getElement('ul').getStyle('width').toInt() + item.getStyle('width').toInt() + 24);
              var newFirst = item.clone().cloneEvents(item);
              newFirst.removeClass('active');
              newFirst.inject($('slideNaviContainer').getElement('ul'));
            });
          }
        }
        this.slideNavi.getElement('.active').removeClass('active');
        new_link.addClass('active');
        this.artikel = new_link.getElement('a').get('href').split('#')[1];
         this.scroller.toElement(this.artikel);
         if(this.scroller2 != null)
          {
            this.scroller2.toElement(new_link);
          }
         }
         if($('bg_'+this.artikel)) {
         if($$('div.invisible').length != 0)
         {
           $$('.visible').each(function(item){
             item.fade('out');
             item.removeClass('visible');
             item.addClass('invisible');
           });

           if($('bg_'+this.artikel).getChildren().length != 0){
             $('bg_'+this.artikel).getChildren().each(function(item){
               item.fade('in');
               item.addClass('visible');
               item.removeClass('invisible');
             });
           } else {
             $('current_bg').getChildren().each(function(item){
               item.fade('in');
               item.addClass('visible');
               item.removeClass('invisible');
             });
           }
         }
       }
      }.bind(this));
    }
    
    if(this.slideNavi.getElement('.arrow_left')) {
      this.slideNavi.getElement('.arrow_left').addEvent('click', function(e){
        e.stop();
        var new_link = this.slideNavi.getElement('.active').getPrevious();
//        if(new_link.match('.first')) {
//          this.children.each(function(item, index) {
//            slideNavi.getElement('ul').setStyle('width', slideNavi.getElement('ul').getStyle('width').toInt() + item.getStyle('width').toInt() + 24);
//            var newFirst = item.clone().cloneEvents(item);
//            newFirst.inject($('slideNaviContainer').getElement('ul'),'top');
//          });
//        } else if(new_link.getPrevious() != null) {
//          if(new_link.getPrevious().match('.first')) {
//            this.children.each(function(item, index) {
//              slideNavi.getElement('ul').setStyle('width', slideNavi.getElement('ul').getStyle('width').toInt() + item.getStyle('width').toInt() + 24);
//              var newFirst = item.clone().cloneEvents(item);
//              newFirst.removeClass('active');
//              clonedElements = clonedElements+newFirst;
//              //newFirst.inject(clonedElements);
//            });
//            console.log(clonedElements);
//            clonedElements.inject($('slideNaviContainer').getElement('ul'),'top');
//          }
//        }
        if(new_link == null && this.slideNavi.getElement('.active').hasClass('first')) {
          new_link = this.slideNavi.getElement('ul').getLast();
          if (this.childrenCount>4 && new_link.getNext()==null) {
            this.children.each(function(item, index) {
              slideNavi.getElement('ul').setStyle('width', slideNavi.getElement('ul').getStyle('width').toInt() + item.getStyle('width').toInt() + 24);
              var newFirst = item.clone().cloneEvents(item);
              newFirst.removeClass('active');
              newFirst.inject($('slideNaviContainer').getElement('ul'));
            });
          }
        }
        if(new_link != null) {
        this.slideNavi.getElement('.active').removeClass('active');
        new_link.addClass('active');
        this.artikel = new_link.getElement('a').get('href').split('#')[1];
         this.scroller.toElement(this.artikel);
         if(this.scroller2 != null)
         {
           this.scroller2.toElement(new_link);
         }
       }
       if($('bg_'+this.artikel)) {
       if($$('div.invisible').length != 0)
       {
         $$('.visible').each(function(item){
           item.fade('out');
           item.removeClass('visible');
           item.addClass('invisible');
         });

         if($('bg_'+this.artikel).getChildren().length != 0){
           $('bg_'+this.artikel).getChildren().each(function(item){
             item.fade('in');
             item.addClass('visible');
             item.removeClass('invisible');
           });
         } else {
           $('current_bg').getChildren().each(function(item){
             item.fade('in');
             item.addClass('visible');
             item.removeClass('invisible');
           });
         }
       }
     }
      }.bind(this));
    }
  },
  
  addEvent: function() {
    var obj = this;
    
    this.children.addEvent('click', function(e){
      e.stop();
      obj.slideNavi.getElement('.active').removeClass('active');
      this.addClass('active');
      var new_link = obj.slideNavi.getElement('.active').getNext();
      if(obj.childrenCount>4) {
        if(new_link.match('.last') && (new_link.getNext()==null)) {
          obj.children.each(function(item, index) {
            obj.slideNavi.getElement('ul').setStyle('width', obj.slideNavi.getElement('ul').getStyle('width').toInt() + item.getStyle('width').toInt() + 24);
            var newFirst = item.clone().cloneEvents(item);
            newFirst.removeClass('active');
            newFirst.inject($('slideNaviContainer').getElement('ul'));
          });
        };
      }
      obj.artikel =  this.getElement('a').get('href').split('#')[1];
      obj.scroller.toElement(obj.artikel);
      if(obj.scroller2 != null)
      {
        obj.scroller2.toElement(this);
      }

      if($('bg_'+obj.artikel)) {
      if($$('div.invisible').length != 0)
      {
        $$('.visible').each(function(item){
          item.fade('out');
          item.removeClass('visible');
          item.addClass('invisible');
        });
        
        if($('bg_'+obj.artikel).getChildren().length != 0){
          $('bg_'+obj.artikel).getChildren().each(function(item){
            item.fade('in');
            item.addClass('visible');
            item.removeClass('invisible');
          });
        } else {
          $('current_bg').getChildren().each(function(item){
            item.fade('in');
            item.addClass('visible');
            item.removeClass('invisible');
          });
        }
      }
      }
    });
  },
  
  createScroller: function(options) {
    var obj = this;
    if(this.slideNavi.getElement('.slideNavi')) {
    this.scroller = new Fx.Scroll(this.slideNavi.getElement('.slideNavi'), {
      onComplete: this.setHeight.bind(this)
    });
    }
    if($('slideNaviContainer') && this.children.length > 4)
    {
      this.scroller2 = new Fx.Scroll($('slideNaviContainer'), {
       'offset': {
         'x': -362,
         'y': 0
       }
      });
    }
  },
  
  setHeight: function() {
    if((this.artikel != null && this.height != null)){
      
      this.slideNavi.setStyle('height', $(this.artikel).getStyle('height').toInt()+100);
      this.slideNavi.getElement('.slideNavi').setStyle('height', $(this.artikel).getStyle('height').toInt()+100);
      this.slideNavi.getParents('div[rel=slideNavi]').setStyle('height', $(this.artikel).getStyle('height').toInt()+100);
      this.slideNavi.getParents('.slideNavi').setStyle('height', $(this.artikel).getStyle('height').toInt()+100);
      $('background-pool').setStyles({
        'top':    0,
        'bottom': 'auto',
        'height': $('port').getSize().y
      });
     
    }
  }
});
