/*
 * Class: magislider
 * Use: Element slider
 *
 * Copyright (c) 2010 Magico Software
 * Author: Martin Poucher
 * Company: Magico Software
 *
 * Version: 1.0
 * Created: 16th November 2010
 */

var baseSelector;
var activeClass = "active";
var sliderInterval;
var totalWidth = 0;

(function($){
    	$.fn.magislider = function(options) {
		settings = $.extend({
		    navigationSelector: "ul#galleryNav",
		    navigationLinkSelector: "ul#galleryNav li a",
		    timeBetweenTransitions: 4000,
		    slideTime: 1000,
		    prevButtonClass: "prev",
		    nextButtonClass: "next",
		    activeLinkClass: "active"
		},options);


		return $.each($(this), function(i,n) {
			$(n).children().children().each(function(indx, el) { totalWidth += $(el).width(); });	
			$(n).css({"overflow":"hidden"}).children().css({"width": totalWidth + "px"});
			$(n).children().children(":first").addClass(activeClass);
			setActiveLink(0);

			baseSelector = $(n);
			sliderInterval = setInterval(function() { showNextImage(); }, settings.timeBetweenTransitions);

			$(settings.navigationLinkSelector).click(function() {
				var thisHref = $(this).attr("href").replace("#", "");

				if (thisHref != "") { setSpecificImage(parseInt(thisHref, 10)); }
				else if ($(this).attr("class") == settings.prevButtonClass) {
					var prevImgIndex = getActiveIndex();
					if (prevImgIndex < 0) prevImgIndex = 0;
					setSpecificImage(prevImgIndex);
				}
				else if ($(this).attr("class") == settings.nextButtonClass) {
					var nextImgIndex = getActiveIndex() + 2;
					if (nextImgIndex >= $(baseSelector).children().children().length) {
						nextImgIndex = $(baseSelector).children().children().length;
					}	
					setSpecificImage(nextImgIndex);
				}

				return false;
			});
		});
    	};
    	
	function setSpecificImage(imgToDisplay) {
		clearInterval(sliderInterval);

		var newLeftPos = 0;
		for (var j=0; j<imgToDisplay-1; j++) {
			newLeftPos += $(baseSelector).children().children(":eq(" + j + ")").width();
		}	

		$(baseSelector).children(":first").animate({
			"left": (newLeftPos * -1)
		}, settings.slideTime, function() {
			$(baseSelector).children().children().removeClass(activeClass);
			$(baseSelector).children().children(":eq(" + (imgToDisplay - 1) + ")").addClass(activeClass);
			setActiveLink((imgToDisplay - 1));
		});
		sliderInterval = setInterval(function() { showNextImage(); }, settings.timeBetweenTransitions);
	}

	function showNextImage() {
		var widthToInc = $(baseSelector).children().children("." + activeClass + ":first").width();
		var currentLeftPos = parseFloat($(baseSelector).children(":first").css("left").replace("px", ""));
		var newLeftPos = currentLeftPos - widthToInc;

		if (newLeftPos <= (totalWidth * -1)) { newLeftPos = 0; }	

		$(baseSelector).children(":first").animate({
			"left": newLeftPos
		}, settings.slideTime, function() {
			var indexOfActive = $(baseSelector).children().children().index($(baseSelector).children().children("." + activeClass).removeClass(activeClass));
			$(baseSelector).children().children(":eq(" + indexOfActive + ")").removeClass(activeClass);
			indexOfActive++;

			if (indexOfActive >= $(baseSelector).children().children().length) { indexOfActive = 0; }
			$(baseSelector).children().children(":eq(" + indexOfActive + ")").addClass(activeClass);
			setActiveLink(indexOfActive);
		});
	}
	
	function setActiveLink(indexActive) {
		$(settings.navigationLinkSelector).removeClass(settings.activeLinkClass);
		$(settings.navigationLinkSelector).filter(":not('.prev')").filter(":not('.next')").filter(":eq(" + indexActive + ")").addClass(settings.activeLinkClass);
	}
	
	function getActiveIndex() {
		return $(baseSelector).children().children().index($(baseSelector).children().children("." + activeClass));
	}
})(jQuery);
