var SH = {
  helper: {
    MovingBoxes: function() {
      var self = this
      this.selektor = '#slider .scroll'
      this.selektor_wrapper = '.scrollContainer'
      this.selektor_items = '.scrollContainer .item'
      this.selektor_items_all = '.scrollContainer .panel'
      this.selektor_next = 'a.scrollButtons.right'
      this.selektor_prev = 'a.scrollButtons.left'
      this.itemCount = $(this.selektor_items).length
      this.offset = 20
      this.activeItemObject = {}
      this.activeItem = 3
      this.activeItemCss = {}
      this.inactiveItemCss = {}
      this.moveTo
      this.animationSpeed = 500
      this.animationRuns = false

      this.init = function() {
        self.activeItemObject = $(self.selektor_items).eq(self.activeItem)
        self.endlessScroll()
        self.events()
        self.move()
        self.updateView()
      }

      this.events = function(){
        $(self.selektor_next).click(self.moveNext)
        $(self.selektor_prev).click(self.movePrev)
		$(self.selektor_wrapper).delegate('.active','click',self.goToLink)
		$(self.selektor_wrapper).delegate('.next','click',self.moveNext)
		$(self.selektor_wrapper).delegate('.prev','click',self.movePrev)
      }

	self.goToLink = function() {
		var content_id = $(this).attr('rel')
		var link = $('#'+content_id).find('a').attr('href')
		if(link && link != '') {
			document.location.href = link
		}
	}
      // Kopien anfertigen von den ersten un letzten Panels
      // um Endlosscrolling zu simulieren
      this.endlessScroll = function() {
        var elem = $(self.selektor_items)
        var first_element = elem
                    .first()
                    .clone()
                    .removeAttr('id')
                    .addClass('copy_of_first copy')
                    .removeClass('item')

        var first_element_next = elem
                    .eq(1)
                    .clone()
                    .removeAttr('id')
                    .addClass('copy_of_first_next copy')
                    .removeClass('item')

        var last_element = elem
                    .last()
                    .clone()
                    .removeAttr('id')
                    .addClass('copy_of_last copy')
                    .removeClass('item')

        var last_element_pre = elem
                    .eq(elem.length-2)
                    .clone()
                    .removeAttr('id')
                    .addClass('copy_of_last_pre copy')
                    .removeClass('item')

        $(self.selektor_wrapper).prepend(last_element)
        $(self.selektor_wrapper).prepend(last_element_pre)
        $(self.selektor_wrapper).append(first_element)
        $(self.selektor_wrapper).append(first_element_next)
      }
      this.getPositions = function() {
        // aktives item
        self.activeItemObject = $(self.selektor_items).eq(self.activeItem)
        var wrapper_position = $(self.selektor_wrapper).position().left
        var box_mid = $(self.selektor).offset().left+($(self.selektor).outerWidth()/2)
        var activeItemOffset = self.itemOffset(self.activeItemObject)
        var firstItemOffset = self.itemOffset($(self.selektor_wrapper).find('.copy_of_last'))
        var lastItemOffset = self.itemOffset($(self.selektor_wrapper).find('.copy_of_first'))
        self.moveToFirst = wrapper_position + (box_mid - firstItemOffset)
        self.moveToLast = wrapper_position + (box_mid - lastItemOffset)
        self.moveTo = wrapper_position + (box_mid - activeItemOffset)
      }
      this.itemOffset = function(elem) {
        var left = elem.offset().left
        var offset = left+(self.activeItemObject.width()/2)
        return offset
      }
      this.updateView = function() {
        self.animationRuns = true
        var newElem = $(self.selektor_items).eq(self.activeItem)
        $(self.selektor_items_all).animate(self.inactiveItemCss, {queue: false, duration: self.animationSpeed})
        if(typeof self.inactiveItemCss.subcss == 'object') {
          self.animateCss($(self.selektor_items_all),self.inactiveItemCss)
        }
        if(typeof self.activeItemCss.subcss == 'object') {
          self.animateCss(newElem,self.activeItemCss)
        }
        $(self.selektor_wrapper).animate({left: self.moveTo},self.animationSpeed,function(){
          self.animationRuns = false
          $(self.selektor_items_all).removeClass('active')
          $(self.selektor_items_all).removeClass('prev')
          $(self.selektor_items_all).removeClass('next')
          newElem.addClass('active')
		newElem.prev().addClass('prev')
		newElem.next().addClass('next')
          self.activeItemObject = newElem
        })
        self.showRelatedContent()
      }
      this.animateCss = function(elem, css) {
        elem.animate(css,{queue: false, duration: self.animationSpeed})
        for(var key in css.subcss) if(css.subcss.hasOwnProperty(key)) {
          elem.find(key).animate(css.subcss[key],{queue: false, duration: self.animationSpeed},
            function(){
              $(self.selektor_items).removeClass('active')
              $(self.selektor_items).removeClass('prev')
              $(self.selektor_items).removeClass('next')
              $(self.selektor_items).eq(self.activeItem).addClass('active')
              $(self.selektor_items).eq(self.activeItem).prev().addClass('prev')
              $(self.selektor_items).eq(self.activeItem).next().addClass('next')
              self.animationRuns = false
            }
          )
          
        }
      }
      this.setCss = function(elem, css) {
        elem.css(css)
        if(typeof css.subcss == 'object'){
          for(var key in css.subcss) if(css.subcss.hasOwnProperty(key)) {
            elem.find(key).css(css.subcss[key])
          }
        }
      }
      this.showRelatedContent = function(){
        var content_box = self.activeItemObject.attr('rel')
        $('.scrollContent').hide()
        $('#'+content_box).fadeIn('slow')
      }
      this.moveNext = function() {
        if(self.animationRuns === false) {
          self.activeItem = self.activeItem + 1
          if((self.itemCount-1) < self.activeItem){
            self.activeItem = 0
            self.jumpFirst()
          }
          self.move()
        }
      }
      this.movePrev = function() {
        if(self.animationRuns === false){
          self.activeItem = self.activeItem - 1
          if(self.activeItem < 0){
            self.activeItem = (self.itemCount-1)
            self.jumpLast()
          }
          self.move()
        }
      }
      this.move = function() {
        self.getPositions()
        self.updateView()
      }
      this.jumpFirst = function(){
        var first = $(self.selektor_wrapper).find('.copy_of_last')
        self.setCss(first,self.activeItemCss)
        $(self.selektor_wrapper).css({left: self.moveToFirst-27})
      }
      this.jumpLast = function(){
        var last = $(self.selektor_wrapper).find('.copy_of_first')
        self.setCss(last,self.activeItemCss)
        $(self.selektor_wrapper).css({left: self.moveToLast})
      }
    }
  }
}

