var Slider = jQuery.noConflict();

Slider(document).ready(function()
{
	slide_horizontal("#sliding-navigation", "li", 34, 120, 150);
});

function slide_horizontal(frame, elements, widthHidden, widthExpand, aniTime){
	var widthTemp		= widthHidden + widthExpand;
	var listElements	= frame + " " + elements;
	var elCounter		= 0;
	var openEl			= null;
	var openElPos		= null;
	var curElPos		= null;
	var curEl			= null;
	
	if (frame.substr(0, 1) == "#") {
		frame = frame.substr(1, frame.length - 1);
	}
	var frameEl = document.getElementById(frame);
	var animationRunning = false;

	Slider(frameEl).hover( 
		function(){
		},
	
		function(){
			Slider(listElements).stop();
			Slider(listElements).each( function(){
				Slider(this).animate({
						left: Slider(this).attr("startLeftValue"),
						width: widthHidden
					}, {
						duration: aniTime,
						queue: false
					}
				);
			});
			openElPos	= null;
			openEl		= null;
			Slider(frameEl).animate({
					width: frameElWidthAllClosed
				}, {
					duration: aniTime,
					queue: false,
					complete: function (){
						animationRunning = false;
					}
				}
			);
		}
	);
	
	elCounter = Slider(listElements).length;
	Slider(listElements).each(function(i){
		Slider(this).css("left", i * widthHidden);
		Slider(this).attr("position", i);
		Slider(this).attr("startLeftValue", Slider(this).css("left"));
		Slider(this).attr("expandLeftValue", parseFloat(Slider(this).css("left")) + widthExpand - widthHidden);

		Slider(this).hover(function(){
			if ( openElPos == parseInt(Slider(this).attr("position")) ) {
				return false;
			}

			if (animationRunning == true ) {
				return false;
			}

			curElPos = parseInt(Slider(this).attr("position"));
			curEl = Slider(this);

			animationRunning = true;
			
			switch (curElPos) {
				case 0:
					animationRunning = true;
					curEl.animate({
						width: widthExpand
					}, {
						duration: aniTime,
						queue: false
					});
					
					Slider(listElements + ":gt(0)").each(function(i){
						Slider(this).animate({
							left: Slider(this).attr("expandLeftValue"),
							width: widthHidden
						}, {
							duration: aniTime,
							queue: false,
							complete: function(){
								animationRunning = false;
							}
						});
					});
					break;
				case elCounter - 1:
					/* Element sofort aufblasen, möglich da overflow: hidden */
					Slider(this).css({width: widthExpand});
						
					/* verschieben des Elements auf die korrekte Position */
					Slider(this).animate({
						left: Slider(this).attr("startLeftValue")
					}, {
						duration: aniTime,
						queue: false
					});

					/* alle Elemente die sich vor dem aktuellen Element befinden
						- auf Startposition verschieben
						- ggfs. einfahren
					*/
					Slider(listElements+":lt("+curElPos+")").each(function(i){
						Slider(this).animate({
							left: Slider(this).attr("startLeftValue"),
							width: widthHidden
						}, {
							duration: aniTime,
							queue: false,
							complete: function(){
								animationRunning = false;
							}
						});
					});
					break;
				default:
						/* Prüft ob noch kein Element geöffnet wurde */
						if ( openElPos === null ) {
							/* beginnt mit dem auffahren des aktuellen Elementes */
							Slider(this).css({
								width: widthExpand
							}, {
								duration: aniTime,
								queue: false
							});
							
							/* alle Elemente die sich dahinter befinden
							 * 	- nach rechts verschieben
							 * 	- ggfs. einfahren 
							 */
							Slider(listElements+":gt("+curElPos+")").each(function(i){
								Slider(this).animate({
									left: Slider(this).attr("expandLeftValue"),
									width: widthHidden
								}, {
									duration: aniTime,
									queue: false,
									complete: function(){
										animationRunning = false;
									}
								});
							});
						}
						else {
							/* Prüft ob das aktuelle Elemente rechts vom geöffneten Element aus liegt */
							if (curElPos > openElPos) {
								/* 
								 * wenn ja werden alle Elemente die sich dazwischen befinden ausgelesen
								 * inkl. des geöffneten Elements 
								 */
								var elToSlide = Slider.grep(Slider(listElements + ":not(" + curElPos + ")"), function(n, index){
									return (index < curElPos && openElPos <= index);
								});
								
								/* verschieben des aktuellen Elementes, nach links auf die Startposition, und aufblasen */
								Slider(this).animate({
									left: Slider(this).attr("startLeftValue"),
									width: widthExpand
								}, {
									duration: aniTime,
									queue: false
								});
								
								/* verschieben und einfahren der ausgelesene Elemente auf die Startpositionen */
								Slider(elToSlide).each(function(i){
									Slider(this).animate({
										left: Slider(this).attr("startLeftValue"),
										width: widthHidden
									}, {
										duration: aniTime,
										queue: false,
										complete: function(){
											animationRunning = false;
										}
									});
								});
							}
							else {
								/* 
								 * auslesen aller Elemente die sich recht neben dem aktuellen Elementen befinden
								 * inkl. des geöffneten Elements
								 */
								var elToSlide = Slider.grep(Slider(listElements + ":not(" + curElPos + ")"), function(n, index){
									return (index > curElPos && openElPos >= index);
								});
								
								/* aufblasen des aktuellen Elementes */
								Slider(this).animate({
									width: widthExpand
								}, {
									duration: aniTime,
									queue: false
								});
								
								/* verschieben und einfahren der ausgelesene Elemente auf die Startpositionen */
								Slider(elToSlide).each(function(i){
									Slider(this).animate({
										left: Slider(this).attr("expandLeftValue"),
										width: widthHidden
									}, {
										duration: aniTime,
										queue: false,
										complete: function(){
											animationRunning = false;
										}
									});
								});
							}
						}
					break;
			}
					Slider(frameEl).animate({
						width: frameElWidthOneOpen
					}, {
						duration: aniTime
					});
			openElPos = curElPos;
			openEl = curEl;
			return openElPos;
		}, 
		function(){
			return true;
		});
	});
	


	var frameElWidthAllClosed = elCounter * widthHidden;
	var frameElWidthOneOpen = ((elCounter - 1) * widthHidden) + widthExpand;
	frameEl.style.width = frameElWidthAllClosed + "px";
}
