NbMooSlider = new Class({
	itemWidth: 0,
	totalWidth: 0,
	visibleItems: 2,
	slideVars: new Array,
	wrapper: null,
	innerWrapper: null,
	
	
	initialize:  function(wrapper, itemClass, controls)
	{
		this.wrapper = wrapper;
		
		if (this.wrapper.getElement('.nb-slider-innerwrap'))
		{
			this.innerWrapper = this.wrapper.getElement('.nb-slider-innerwrap');
		}
		else
		{
			this.innerWrapper = new Element('div');
			this.innerWrapper.className = 'nb-slider-innerwrap';
			this.wrapper.adopt(this.innerWrapper);
		}
		this.innerWrapper.set('tween', {link:'wait'});

		this.totalWidth = 0;
		this.wrapper.getElements('.' + itemClass).each (function(item, index)
		{	
			var width = item.measure(function() {
			    return this.getSize().x;
			});
			
			this.innerWrapper.adopt(item);
			this.itemWidth =  width;
			this.totalWidth += width;
		},this);

		this.innerWrapper.setStyle('width',this.totalWidth+'px');
		this.innerWrapper.setStyle('margin-left',0);

		this.initControls(controls);
	},
	
	
	initControls: function(controls)
	{
		this.controls = controls;
		this.controls.prev = this.wrapper.getParent().getElement('.' + this.controls.prev);
		this.controls.next = this.wrapper.getParent().getElement('.' + this.controls.next);
		
		this.controls.prev.addEvent('click', this.prev.bind(this));
		this.controls.next.addEvent('click', this.next.bind(this));

		this.controls.disableFn(this.controls.prev);

		if(this.totalWidth <= 562)
		{
			this.controls.disableFn(this.controls.next);
		}
	},
	
	
	autoSlide: function()
	{
		pos = parseInt(this.innerWrapper.getStyle('margin-left'));
		
		this.period = (function() {
			if ((pos-this.itemWidth) >= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems)))) {
				this.innerWrapper.set('tween', {
					'onComplete' : function() {
						pos = parseInt(this.innerWrapper.getStyle('margin-left'));
					}.bind(this)
				});
				this.innerWrapper.tween('margin-left', (pos-this.itemWidth)+'px');
		
				if((pos-this.itemWidth) <= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems))))
				{
					this.controls.disableFn(this.controls.next);
				}

				if((pos-this.itemWidth) >= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems))))
				{
					this.controls.enableFn(this.controls.prev);
				}					
			} else {
				$clear(this.period);
			}
		}).periodical(15000,this);
	},

    
	stepsToSlide: function (letter)
	{
        var alphabet = new Array();
        alphabet[1] = 'a';
        alphabet[2] = 'b';
        alphabet[3] = 'c';
        alphabet[4] = 'd';
        alphabet[5] = 'e';
        alphabet[6] = 'f';
        alphabet[7] = 'g';
        alphabet[8] = 'h';
        alphabet[9] = 'i';
        alphabet[10] = 'j';
        alphabet[11] = 'k';
        alphabet[12] = 'l';
        alphabet[13] = 'm';
        alphabet[14] = 'n';
        alphabet[15] = 'o';
        alphabet[16] = 'p';
        alphabet[17] = 'q';
        alphabet[18] = 'r';
        alphabet[19] = 's';
        alphabet[20] = 't';
        alphabet[21] = 'u';
        alphabet[22] = 'v';
        alphabet[23] = 'w';
        alphabet[24] = 'x';
        alphabet[25] = 'y';
        alphabet[26] = 'z';

        var walkTo = null;
        var safeCounter = 0;
        var ulTotalElements = $$('#header-object div.inner-header div.nb-slider-innerwrap ul').length;

        // safeCounter is a counter used to prevent infinite loop
        while (safeCounter < 1000 && walkTo == null)
        {
            // ulCounter stores position to walk
            var ulCounter = 0;

            // Goes into every li element and look to letter position
            $$('#header-object div.inner-header div.nb-slider-innerwrap ul').each(function(ul)
            {
                ul.getChildren().each(function(li)
                {
                    var a = li.get('text');
                    var firstLetter = a.charAt(0).toLowerCase();

                    if (letter == firstLetter)
                    {
                        if (walkTo == null)
                        {
                            walkTo = ulCounter;
                        }
                    }

                });

                ulCounter++;
            })

            // When letter is not found, look for the next one in the alphabet
            if (walkTo == null)
            {
                for (var i=0; i<alphabet.length; i++)
                {
                    if (alphabet[i] == letter)
                    {
                        nextLetter = alphabet[i + 1];

                        if(nextLetter == undefined)
                        {
                            walkTo = 'end';
                        }
                    }
                }
                letter = nextLetter;
            }

            safeCounter++;
        }

        // Go to the end when there is no space left to slide
        if ((walkTo + this.visibleItems) >= ulTotalElements)
        {
            walkTo = 'end';
        }

        return walkTo;
	},


	slide: function (target)
	{
		if (target > (this.totalWidth/this.itemWidth)-this.visibleItems || target < 0)
		{
            return false;
		}
		if (target == 'start' || target == 0)
		{
			var pos = 0;
		}
		else if (target == 'end')
		{
			var pos = -(this.totalWidth - (this.visibleItems*this.itemWidth));
		}
		else
		{
			var pos = -target*this.itemWidth;
		}

		// Start sliding
		this.innerWrapper.tween('margin-left', pos + 'px');
		
		// Check previous control for validity
		if (pos >= 0)
		{
			this.controls.disableFn(this.controls.prev);
		}
		else
		{
			this.controls.enableFn(this.controls.prev);
		}

		// Check next control for validity
		if (pos <= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems))))
		{
			this.controls.disableFn(this.controls.next);
		}
		else
		{
			this.controls.enableFn(this.controls.next);
		}
	},


	next: function(e)
	{
		e = new Event(e);
		e.stop();
		
		$clear(this.period);

		pos = parseInt(this.innerWrapper.getStyle('margin-left'));



		this.innerWrapper.tween('margin-left', (pos-this.itemWidth)+'px');

		if((pos-this.itemWidth) <= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems))))
		{
			this.controls.disableFn(this.controls.next);
		}

		if((pos-this.itemWidth) >= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems))))
		{
			this.controls.enableFn(this.controls.prev);
		}
	},
	
	
	prev: function(e)
	{
		e = new Event(e);
		e.stop();
		
		$clear(this.period);

		pos = parseInt(this.innerWrapper.getStyle('margin-left'));

		this.innerWrapper.tween('margin-left', (pos+this.itemWidth)+'px');

		if(parseInt(pos+this.itemWidth) >= parseInt('-'+(this.totalWidth-(this.itemWidth*this.visibleItems))))
		{
			this.controls.enableFn(this.controls.next);
		}

		if(parseInt(pos+this.itemWidth) == 0)
		{
			this.controls.disableFn(this.controls.prev);
		}
	}
});



window.addEvent('domready', function()
{
	var sliderPlastic = new NbMooSlider($('header-plastic').getElement('.inner-header'), 'list', {
		prev: 'prev',
		next: 'next',
		enableFn: function(el) {
			el.fade('in');
		},
		disableFn: function(el) {
			el.fade('out');
		}
	});
	
	
	var sliderObject = new NbMooSlider($('header-object').getElement('.inner-header'), 'list', {
		prev: 'prev',
		next: 'next',
		enableFn: function(el) {
			el.fade('in');
		},
		disableFn: function(el) {
			el.fade('out');
		}
	});
	
	
	$$('.tx-uhuplasticslist-pi1').each(function(plugin)
	{
		var tabbedNav = plugin.getElements('.nav-white-tabbed a');
		tabbedNav.each(function(clickedItem)
		{
			clickedItem.addEvent('click', function(e)
			{
				new Event(e).stop();
				tabbedNav.each(function(navItem)
				{
					if (clickedItem == navItem)
					{
						navItem.getParent().addClass('active');
						var context = new URI(navItem.get('href')).getData('tx_uhuplasticslist_pi1%5Bcontext%5D');
						
						if (context == 'object')
						{
							$('header-object').removeClass('hidden');
							$('header-plastic').addClass('hidden');
						}
						else if (context == 'plastic')
						{
							$('header-object').addClass('hidden');
							$('header-plastic').removeClass('hidden');
						}
					}
					else
					{
						navItem.getParent().removeClass('active');
					}
				});
			});
		});
		
		var resultInnerWrapper = plugin.getElement('.result-inner-wrapper');

		plugin.getElements('.list a').each(function(item)
		{
			item.addEvent('click', function(e)
			{
				new Event(e).stop();
				var query = new URI(item.get('href'));
				query.setData('lang', $('lang').value);
				
				new Fx.Tween(resultInnerWrapper, {
					property: 'opacity',
					value: 0,
					duration: 'short',
					onComplete: function()
					{
						resultInnerWrapper.getParent().addClass('loading');
						new Request({
							'url': 'index.php?eID=plasticslist',
							'onComplete': function(response)
							{
								resultInnerWrapper.set('html', response);
								resultInnerWrapper.getParent().removeClass('loading');
								resultInnerWrapper.fade('in');
							}
						}).get(query.getData());
					}
				}).start(0);
				
			});
		});
		
		$('slide-to-a').addEvent('click', function()
		{
            sliderObject.slide('start');
		});
		
		$('slide-to-f').addEvent('click', function()
		{
            stepsToWalk = sliderObject.stepsToSlide('f');
            sliderObject.slide(stepsToWalk);
		});
		
		$('slide-to-k').addEvent('click', function()
		{
            stepsToWalk = sliderObject.stepsToSlide('k');
            sliderObject.slide(stepsToWalk);
		});
		
		$('slide-to-q').addEvent('click', function()
		{
            stepsToWalk = sliderObject.stepsToSlide('q');
            sliderObject.slide(stepsToWalk);
		});
		
		$('slide-to-v').addEvent('click', function()
		{
            stepsToWalk = sliderObject.stepsToSlide('v');
            sliderObject.slide(stepsToWalk);
		});

	});
});
