/**
 * Script		: nmSlider
 * Version		: 0.2dev
 * Authors		: Pierre Geyer
 * Desc			: Slider 
 *
 * 2009-05-07 
 * Fixed: Slider verschob sich nach dem resizen des Fensters
 */

(function($) {	
	
	var nmsliderOpts = {}; 

	$.fn.nmSlider = function (settings) {
		
		nmsliderOpts = $.extend({}, $.fn.nmSlider.defaults, settings);		
		
		// Verknüpfe alle Slider-Links mit dem MouseHover-Event 
		$(nmsliderOpts.sliderButtons).bind('mouseover',$.fn.nmSlider.mouseoverNavigation);
		$(window).bind('resize',$.fn.nmSlider.resizeWindow);

		// Speichert das Slider-Objekt für den einfacheren Zugriff
		nmsliderOpts.slider = $(nmsliderOpts.sliderId);
		
		// Das Slider-Element muss vor beginn des Slides immer hinter dem ersten
		// Slider-Button ausgerichtet sein. Es wird der obere Abstand zu dem
		// Element gemessen 
		nmsliderOpts.sliderLeftMargin = nmsliderOpts.slider.offset().left - $(nmsliderOpts.sliderButtons+":first").offset().left;
		nmsliderOpts.sliderTopMargin = nmsliderOpts.slider.offset().top - $(nmsliderOpts.sliderButtons+":first").offset().top;
		
		// Speichern des Zero-Offset des Sliders
		nmsliderOpts.zeroOffset = $.fn.nmSlider.getZeroOffset(nmsliderOpts.slider);

		// Anzahl der Buttons
		nmsliderOpts.count = $(nmsliderOpts.sliderButtons).size()+1;

		if (nmsliderOpts.useText) {
			// Ermittle die Positionen aller Text-Felder		
			nmsliderOpts.textSliderOffset = new Array(); 
			for (var i = 1; i < nmsliderOpts.count; i++) {
				textSlide = $.fn.nmSlider.getTextSlide(i);
				textSlide.show();
				nmsliderOpts.textSliderOffset[i] = textSlide.offset().top - $.fn.nmSlider.getZeroOffset(textSlide).top;
				textSlide.hide();
			}
			
			// Den ersten Text-Slider sichtbar schalten
			$.fn.nmSlider.getTextSlide(nmsliderOpts.currentSlide).show();
		}

		if (nmsliderOpts.autoSlide) {
			setTimeout("$.fn.nmSlider.autoSlide();",nmsliderOpts.autoSlideSpeed);
		}

	};

	/**
	* Recalculate Position
	*/
	$.fn.nmSlider.resizeWindow = function () {
		// Speichern des Zero-Offset des Sliders
		nmsliderOpts.zeroOffset = $.fn.nmSlider.getZeroOffset(nmsliderOpts.slider);
	};

	/**
	 * Methode die Position des aktuellen Elementes, auch wenn keine Angabe mittels css (top: ##px) gemacht wurde
	 */
	$.fn.nmSlider.getZeroOffset = function (el) {
		
		// Bisherigen display-Status sichern
		var displaystatus = el.css('display');
		
		// Damit die Höhe gemessen werden kann muss das Element sichtbar gemacht werden
		el.css('display','block');
		
		// Aktuelle Entfernung von oberen Seitenkante ermitteln, dannach
		// die absolute Positionierung auf 0 stellen und die neue Entfernung ermitteln
		var originaltop = el.offset().top;
		var originalleft = el.offset().left;
		el.css("top",0).css("left",0);
		var zerotop = el.offset().top;
		var zeroleft = el.offset().left;
		
		// Jetzt wieder an die ursprüngliche Position setzen und den ursprünglichen display-Status setzen 
		el.css("top", (originaltop-zerotop) + 'px');
		el.css("left", (originalleft-zeroleft) + 'px');
		el.css('display',displaystatus);
		
		return {top: zerotop, left: zeroleft};
	}

	$.fn.nmSlider.animateSliderToOffset = function (offset) {
    	nmsliderOpts.slider.stop();
    	nmsliderOpts.slider.animate({
    			'top': (offset.top + nmsliderOpts.sliderTopMargin - nmsliderOpts.zeroOffset.top)+'px',
    			'left': (offset.left + nmsliderOpts.sliderLeftMargin - nmsliderOpts.zeroOffset.left)+'px'
		      }, nmsliderOpts.fadeInSpeed );
	};

	$.fn.nmSlider.getSlide = function (index) {
		return $(nmsliderOpts.sliderLayers+index);
	};

	$.fn.nmSlider.getTextSlide = function (index) {
		return $(nmsliderOpts.sliderTextLayers+index);
	};

	$.fn.nmSlider.mouseoverNavigation = function (el) {
		nmsliderOpts.autoSlide = false;
		$.fn.nmSlider.slide($(this));
	};
	
	$.fn.nmSlider.slide = function (el) {
		// Ermittlen von welchem Slider das Event ausgelöst wurde
		// und ob dieser Slider bereits ausgewählt ist  
		newSlideId = el.attr('id').split("-")[2];
		if (nmsliderOpts.currentSlide == newSlideId) return true;

		// Schiebe die Slider-Grafik zum nächsten Punkt
		$.fn.nmSlider.animateSliderToOffset(el.offset());
		
		// Die Slides wechseln
		if (nmsliderOpts.useLayer)
			$.fn.nmSlider.changeSlide(nmsliderOpts.currentSlide,newSlideId);

		// Die Texte tauschen
		if (nmsliderOpts.useText)
			$.fn.nmSlider.changeSlideTexts(nmsliderOpts.currentSlide,newSlideId);
		
		nmsliderOpts.currentSlide = newSlideId;	
	};

	$.fn.nmSlider.changeSlide = function (currentId,nextId) {
		$.fn.nmSlider.getSlide(currentId).stop().animate({opacity:0},nmsliderOpts.fadeInSpeed);
		$.fn.nmSlider.getSlide(nextId).stop().css('opacity',0).css('display', 'block').animate({opacity:0},nmsliderOpts.fadeInSpeed).animate({opacity:1},nmsliderOpts.fadeInSpeed);
	};

	$.fn.nmSlider.changeSlideTexts = function (currentId,nextId) {
		$.fn.nmSlider.getTextSlide(currentId).stop().animate({'top':320},200);
		$.fn.nmSlider.getTextSlide(nextId).css('top',320).css('display', 'block').animate({'top': nmsliderOpts.textSliderOffset[nextId] },nmsliderOpts.textRollInSpeed);
	};

	$.fn.nmSlider.autoSlide = function (){
		if (!nmsliderOpts.autoSlide) return;
		x = ((nmsliderOpts.currentSlide) % (nmsliderOpts.count -1) );
		$.fn.nmSlider.slide($(nmsliderOpts.sliderButtons).eq(x));
		setTimeout("$.fn.nmSlider.autoSlide();",nmsliderOpts.autoSlideSpeed);
	};

	$.fn.nmSlider.defaults = {
		sliderId:			"#player-slider",
		sliderButtons:		"#player-nav li a",
		sliderLayers:		"#player-img-",
		sliderTextLayers:	"#player-text-",
		fadeInSpeed:		150,
		textRollInSpeed:	200,
		useText:    		true,
		useLayer:	   		true,
		currentSlide: 		1, 
		newSlide: 			null,
		count:				0,
		autoSlide:			true,
		autoSlideSpeed:		5000
	};

})(jQuery);

/****************************************************************/

