/*
 * Slickslide 1.0
 *
 * Author: Ryan Seddon
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 */

(function($){
	$.fn.slickslide = function(options) {

		var defaults = {  
			speed: 1000,
			easing: "none",
			baseWidth: 986,
			slideThis: ".slick-slide-inner",
			itemName: ".item",
			showThisManyItems: 1,
			nextButton: ".next",
			prevButton: ".prev",
			autoSlide: "false",
			autoSlideEvery: 3000
		};  
		var options = $.extend(defaults, options);
		
		
		// Adds easing functionality, checks if easing plugin exists and easing option isn't none
		// http://gsgd.co.uk/sandbox/jquery/easing/
		if($.easing.def && options.easing != "none") { $.easing.def = options.easing; }
		
		var itemCount = $(options.slideThis).children(options.itemName).length;
		// Works out how many sets of items are there and rounds value off
		var itemSets = Math.ceil(itemCount/options.showThisManyItems);
		// Works out width based on itemCount
		var containerWidth = Math.round(options.baseWidth * (itemCount/options.showThisManyItems));
		// Works out max position scroller can move based on itemCount
		var maxOffset = (-containerWidth / (itemCount/options.showThisManyItems))*(itemCount-1);
		var currentPosition  = parseInt($(options.slideThis).css("left"));
		var itemIndex = 1;
		
		$(options.slideThis).css({width: containerWidth});
	   
		if(itemCount > options.showThisManyItems)
		{
			$(options.prevButton).click(function(event) {

				(options.autoSlide == "true") ? window.clearInterval(autoScroll) : "";
				
				continuousScroll("previous");
				
				$(options.slideThis).animate({
					left: (currentPosition+options.baseWidth)
				}, options.speed, "swing",
					function()
					{
						if(options.autoSlide == "true")
						{
							autoScroll = window.setInterval(
								function() 
								{

									continuousScroll("next");
									
									$(options.slideThis).animate({
										left: (currentPosition-options.baseWidth)
									}, options.speed, "swing",
										function()
										{
											currentPosition = parseInt($(options.slideThis).css("left"));
										}
									);

								}, options.autoSlideEvery
							);
						}
						currentPosition = parseInt($(options.slideThis).css("left"));
						if(itemIndex == 1)
						{
							itemIndex = 4;
						} else {
							itemIndex--;
						}
						switch(itemIndex)
						{
							case 1:
								$(".dot").attr("class", "dot");
								$("#dot01").attr("class", "dot dotactive");
								break;
							case 2:
								$(".dot").attr("class", "dot");
								$("#dot02").attr("class", "dot dotactive");
								break;
							case 3:
								$(".dot").attr("class", "dot");
								$("#dot03").attr("class", "dot dotactive");
								break;
							case 4:
								$(".dot").attr("class", "dot");
								$("#dot04").attr("class", "dot dotactive");
								break;
						}
					}
				);
				event.preventDefault();
			});
			
			$(options.nextButton).click(function(event) {
				(options.autoSlide == "true") ? window.clearInterval(autoScroll) : "";
				
				continuousScroll("next");
				
				$(options.slideThis).animate({
					left: (currentPosition+(-options.baseWidth))
				}, options.speed, "swing",
					function()
					{
						if(options.autoSlide == "true")
						{
							autoScroll = window.setInterval(
								function() 
								{
									continuousScroll("next");
									
									$(options.slideThis).animate({
										left: (currentPosition-options.baseWidth)
									}, options.speed, "swing",
										function()
										{
											currentPosition = parseInt($(options.slideThis).css("left"));
										}
									);
								}, options.autoSlideEvery
							);
						}
						currentPosition = parseInt($(options.slideThis).css("left"));
						if(itemIndex == 4)
						{
							itemIndex = 1;
						} else {
							itemIndex++;
						}
						switch(itemIndex)
						{
							case 1:
								$(".dot").attr("class", "dot");
								$("#dot01").attr("class", "dot dotactive");
								break;
							case 2:
								$(".dot").attr("class", "dot");
								$("#dot02").attr("class", "dot dotactive");
								break;
							case 3:
								$(".dot").attr("class", "dot");
								$("#dot03").attr("class", "dot dotactive");
								break;
							case 4:
								$(".dot").attr("class", "dot");
								$("#dot04").attr("class", "dot dotactive");
								break;
						}
					}
				);
				event.preventDefault();
			});
		}
		if(options.autoSlide == "true")
		{
			autoScroll = window.setInterval(
				function() 
				{
					continuousScroll("next");
									
					$(options.slideThis).animate({
						left: (currentPosition-options.baseWidth)
					}, options.speed, "swing",
						function()
						{
							currentPosition = parseInt($(options.slideThis).css("left"));
						}
					);
				}, options.autoSlideEvery
			);
		}
		
		function continuousScroll(whichDirection)
		{
			var moveItemPosition;
			
			if(whichDirection == "previous" && currentPosition == 0)
			{
				$(options.slideThis).children(":last").remove().prependTo(options.slideThis);
				moveItemPosition = -options.baseWidth;
				$(options.slideThis).css({ left: moveItemPosition });
				currentPosition = moveItemPosition;
			}
			if(whichDirection == "next" && currentPosition == maxOffset)
			{
				$(options.slideThis).children(":last").remove().prependTo(options.slideThis);
				moveItemPosition = 0;
				$(options.slideThis).css({ left: moveItemPosition });
				currentPosition = moveItemPosition;
			}
		}
	};
})(jQuery);