/**
 * Plugin: Slider
 ***************************************/
 
(function( $ ){
	
	var settings = {
		wrap: '.slide',
		arrow: 'div#menu div.arrow'
	};
	
	var curr_active = false;
	var new_active = false;
	
	var updateMenu = function() {
		var item = $(settings.wrap+'.active').attr('class');
		if (item) {
			item = item.replace('active', '');
			item = item.replace(settings.wrap.substring(1), '');
			item = item.replace(' ', '');
			$(settings.arrow).attr('class', 'arrow '+item)
		}
	};
	
	var slide = function(el1, el2, direction) {
		$(settings.wrap).parent().css('z-index', 0);
		var percentFrom = (direction == 'right') ? '-100%' : '100%';
		var percentTo = (direction == 'right') ? '100%' : '-100%';
		// aktiven SLide deaktivieren
		el1.removeClass('active');
		el1.find('.flash').contents().hide();
		el2.find('.flash').contents().hide();
		// nächsten Slide aktivieren
		el2.addClass('active');
		el2.css('margin-left', percentFrom);
		// aktiven Slide raussliden
		el1.animate(
			{ marginLeft: percentTo },
			1200,
			function()  {
				curr_active = false;
			}
		);
		// nächsten Slide reinsliden
		el2.animate(
			{ marginLeft: 0 },
			1200,
			function()  {
				new_active = false;
				$(this).find('.flash').contents().show();
				if (!$(this).hasClass('stayback')) {
					$(settings.wrap).parent().css('z-index', 999);
				}
				updateMenu();
			}
		);		
	};
	
	var methods = {
	
		init : function(options)
		{
			// übergebene Optionen einbinden
			if (options) {
				$.extend(settings, options);
			}
			
			// ersten Slide aktivieren
			$(this).find(settings.wrap+':first').addClass('active');
			// einzelne Slides verteilen
			$(this).find(settings.wrap+':gt(0)').each(function(){
				$(this).css('margin-left', '-100%');
			});
			
		},
		
		slideForth : function()
		{
			if (new_active || curr_active) {
				return false;
			}
			new_active = true;
			curr_active = true;
			// aktiven Slide finden
			var curr = $(this).find(settings.wrap+'.active');
			// nächsten Slide finden
			var next = null;
			if (curr.next(settings.wrap).size() > 0) {
				next = curr.next(settings.wrap);
			} else {
				next = $(this).find(settings.wrap+':first');
			}
			slide(curr, next, 'left');
		},
		
		slideBack : function()
		{
			if (new_active || curr_active) {
				return false;
			}
			new_active = true;
			curr_active = true;
			// aktiven Slide finden
			var curr = $(this).find(settings.wrap+'.active');
			// nächsten Slide finden
			var prev = null;
			if (curr.prev(settings.wrap).size() > 0) {
				prev = curr.prev(settings.wrap);
			} else {
				prev = $(this).find(settings.wrap+':last');
			}
			slide(curr, prev, 'right');
		},
		
		slideTo : function(indexClass)
		{
			if (new_active || curr_active || $(this).find(settings.wrap+'.active').hasClass(indexClass)) {
				return false;
			}
			new_active = true;
			curr_active = true;
			cont = this;
			
			// aktiven Slide finden
			var curr = $(this).find(settings.wrap+'.active');
			var currIndex = $(this).find(settings.wrap).index(curr);
			// Ziel-Slide finden
			var dest = $(this).find(settings.wrap+'.'+indexClass);
			var destIndex = $(this).find(settings.wrap).index(dest);
			
			// Richtungs-Mulitplikator
			var multi = 0;
			// Sammlung aller zu bewegenden Slides
			var slides = new Array();
			// ersten Slide hinzufügen
			slides.push(curr);
			if (destIndex > currIndex) {
				// alle Elemente bis zum Ziel-Objekt finden
				curr.nextAll().each(function(){
					if (!$(this).hasClass(indexClass) && cont.find(settings.wrap).index($(this)) < destIndex) {
						slides.push($(this));
					}
				});
				multi = -1;
			} else {
				// alle Elemente bis zum Ziel-Objekt finden
				curr.prevAll().each(function(){
					if (!$(this).hasClass('active') && cont.find(settings.wrap).index($(this)) > destIndex) {
						slides.push($(this));
					}
				});
				multi = 1;
			}
			// letzten Slide hinzufügen
			slides.push(dest);

			$(settings.wrap).parent().css('z-index', 0);
			// aktiven Slide deaktivieren
			curr.removeClass('active');
			// nächsten Slide aktivieren
			dest.addClass('active');
			// slides positionoieren
			var i = 0;
			$.each(slides, function() {
				var percentFrom = multi * -100 * i;
				$(this).css('margin-left', percentFrom+'%');
				$(this).find('.flash').contents().hide();
				i++;
			});
			
			var to = slides.length;
			var speed = 1200 / slides.length;
			// Slides animieren
			$.each(slides, function() {
				to--;
				var percentTo = multi * 100 * to;
				$(this).animate(
					{ marginLeft: percentTo+'%' },
					speed,
					function()  {
						curr_active = false;
						if ($(this).hasClass(indexClass)) {
							if (!$(this).hasClass('stayback')) {
								$(settings.wrap).parent().css('z-index', 999);
							}
							$(this).find('.flash').contents().show();
							updateMenu();
							new_active = false;
						}
					}
				);
			});	
		},
		
		reloadContent : function(name, url)
		{
		
		}
	};
	
	$.fn.mySlider = function(method) {
		
		// Method calling logic
		if (methods[method]) {
		  return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
		} else if ( typeof method === 'object' || ! method ) {
		  return methods.init.apply( this, arguments );
		} else {
		  $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
		}    
		
	};	
	
})( jQuery );

