/**
 * jQuery DeepLocal Carousel Plugin v1.0
 *
 * 
 *  Carousel Requires the following Format
 *  
 *   class Caoursel
 *		 class carousel_navbox    (Navigation)
 *       class carouselCardGroup  (container with overflow: hidden to hide no show cards)
 *			class carousel_cards   (sets the width of all the cards)
 *				class card (contains content)
 * Copyright (c) 2008 deepLocal, Inc.
 * 
 * @param		String
 * @return		Array
 */
(function($) {

$.fn.dlslider = function(options) {
var defaults = {
			   version: 1, 
			   name: "slider",
			   cardShow: 1,
			   cardWidth: 480,
			   cardSpacing: 0,
			   cardShift: 1,
			   carouselWidth: 480,
			   carouselHeight: 320};	
var	 settings = jQuery.extend({},defaults, options);	



return this.each(function(){
		

		var carousel = jQuery(this);
		var offset = "";		
		var offsetCard = $(carousel).children('.sliderCardGroup').get(0);
		var offset = $(offsetCard).offset();

		var foo = function(){
			
		};
		
	var initialize = function(){

		var cardCount = getCardCount();	 	
		var carouselGroup = $(carousel).children('.sliderCardGroup').get(0);
			$(carouselGroup).css("width", settings.carouselWidth+"px");
			$(carouselGroup).css("height", settings.carouselHeight+"px");
					
		var carouselCards = $(carouselGroup).children(".sliderCards").get(0);
		var totalSpacing = settings.cardSpacing * (cardCount+1);
		var totalCardSizes = cardCount * settings.cardWidth;
		var totalSize = totalSpacing + totalCardSizes;
			$(carouselCards).css("width",totalSize*2+"px");
			
		
		var cardSelector = "#" + $(carousel).attr("id")  + " > .sliderCardGroup > .sliderCards > .storySliderCard";
			
			var cards = $(cardSelector);
			
			cardPosition();
			
					
	}
	
	var cardPosition = function(){
		//	var offsetLeft = offset.left;
			var cardSelector = "#" + $(carousel).attr("id")  
				+ " > .sliderCardGroup > .sliderCards > .storySliderCard";
			
			var cardWidth = settings.cardWidth;		
			var space = settings.cardSpacing ;			
			var cardSize = cardWidth+ space;
			var previous = -cardSize;
					
		
			$(cardSelector).each(function(i,item){
				var leftPos = (cardSize * i);
				//previous = leftPos;
				
				$(item).css("width", cardWidth+"px");
				$(item).css("left",leftPos+"px");				
			});			
	}


	var getCardCount = function(){
		var cardSelector = "#" + $(carousel).attr("id")  
				+ " > .sliderCardGroup > .sliderCards > .storySliderCard";
		var cards = $(cardSelector);
		return cards.length;
	}	
	
		
	var carouselAddRight = function(){
	
			var cardSelector = "#" + $(carousel).attr("id")  
				+ " > .sliderCardGroup > .sliderCards > .storySliderCard";
				
			var cardGroupSelector = "#" + $(carousel).attr("id")  
				+ " > .sliderCardGroup > .sliderCards";
			
			var cardsToMake = settings.cardShift;
			var cardGroup = $(cardGroupSelector);
			var cards = $(cardSelector)
			var lastCard = cards.get(cards.length-1);	
			var lastOffset = $(lastCard).offset();
			var increase = lastOffset + settings.cardWidth + settings.cardSpacing;				
			for( i = 0; i < cardsToMake; i++){
				var toCopy = cards.get(i);
				var copier = $(toCopy).clone();

				try{				
				//	copier.css("left",increase+"px");
				}catch(e){
					// For some reason this is either not needed.... or IE doesn't like it.
					//... but it works... catching this and swallowing it.
				}
				increase = increase + settings.cardWidth+settings.cardSpacing;		
				copier.appendTo(cardGroupSelector);
			}
	}
	
			
	var carouselAddLeft = function(){

			var cardSelector = "#" + $(carousel).attr("id")  
				+ " > .sliderCardGroup > .sliderCards > .storySliderCard";
								
			var cardGroupSelector = "#" + $(carousel).attr("id")  
				+ " > .sliderCardGroup > .sliderCards";
			
							
			var cardsToMake = settings.cardShift;
			var cardGroup = $(cardGroupSelector);
			var cards = $(cardSelector);

			var cardCount = cards.length;


			var lastCard = cards.get(cards.length-1);


			var lastOffset = $(lastCard).offset();

			var totalSize = settings.cardWidth + settings.cardSpacing;
			
			
			
			for(i = 1; i <= cardsToMake; i++){		
			
				var toCopy = cards.get(cards.length - i);
				var copier = $(toCopy).clone();
			
				var leftPos = totalSize * i;
				copier.css("left",-leftPos+"px");
			
				copier.prependTo(cardGroupSelector);
				
			}
		
	}
				
	var carouselShiftLeft = function(){
				
			var shiftDistance = (settings.cardWidth + settings.cardSpacing) * settings.cardShift;
			var cardSelector = "#" + $(carousel).attr("id")  + " > .sliderCardGroup > .sliderCards > .storySliderCard";
			var shiftNumber = settings.cardShift;
			
			var cardCount = $(cardSelector).length;
			
			$(cardSelector).each(function(i,item){
				if(i >= (cardCount - shiftNumber)){
					 $(item).addClass("removeClass");
				}		
			});
				
				$(cardSelector).animate({"left": "+="+shiftDistance+"px"}, 1000);	
				
				
				$(cardSelector).queue(function(){
					var shiftSize = shiftNumber;
					$(cardSelector).each(function(i,item){
						
						if($(item).hasClass("removeClass")){
							$(item).remove();
						}
						if(i == (shiftSize -1)){
							cardPosition();
							running=false;
						}		
					});
					 $(this).dequeue();
					
					
				});
				
		}
	
	
	var carouselShiftRight = function(){
			
			var shiftDistance = (settings.cardWidth + settings.cardSpacing) * settings.cardShift;
			var cardSelector = "#" + $(carousel).attr("id")  + " > .sliderCardGroup > .sliderCards > .storySliderCard";
			var shiftNumber = settings.cardShift;

			$(cardSelector).each(function(i,item){
				if(i < shiftNumber){
					 $(item).addClass("removeClass");
				}		
			});
			
			$(cardSelector).animate({"left": "-="+shiftDistance+"px"}, 1000);	
				$(cardSelector).queue(function(){
					var shiftSize = shiftNumber;
					$(cardSelector).each(function(i,item){
						
						if($(item).hasClass("removeClass")){
							$(item).remove();
						}
						if(i == (shiftSize -1)){
							cardPosition();
							running=false;
						}		
					});
					 $(this).dequeue();
				});
		}

		var moveRight = function(){					
			 if(running == false){
				   running = true;

			carouselAddRight();
			carouselShiftRight();
			}
		}

	var interval;
	
	var start = function(){
		interval = setInterval(moveRight, 9000);
	}
	
	var stop = function(){
		clearInterval(interval);
	}
	
	var running = false;
	
	var moveLeft = function(){			
		   
		   if(running == false){
		   running = true;
		   	   
		   carouselAddLeft();
		   carouselShiftLeft();
		   }
	}

	var togglePlayPause = function( playPauseImage ){
		var source = $(playPauseImage).attr("src");
		if(source.indexOf("_play") > -1){	
			$(playPauseImage).attr("src",source.replace(/_play/,"_pause"));
			start();
			moveRight();
		}else{
		 	$(playPauseImage).attr("src",source.replace(/_pause/,"_play"));
		 	stop();

		}
	
	}
	
	var playOff = function( ){
		var navSelector = "#" + $(carousel).attr("id") + " > .sliderControls > .sliderControl";
		var navs = $(navSelector);	
		navs.each(function(i,item){
		
		if($(item).attr("id").indexOf("middle") > -1){
			var playPauseImage = $(item).children("img").get(0);				
			var source = $(playPauseImage).attr("src");
				$(playPauseImage).attr("src",source.replace(/_pause/,"_play"));
				stop();		
		}
		
		});
			
	}
	
	
	var activateNavigation = function () {
			var navSelector = "#" + $(carousel).attr("id") + " > .sliderControls > .sliderControl";
			var navs = $(navSelector);	
			navs.each(function(i,item){

		if($(item).attr("id").indexOf("left") > -1){
			var bindImage = $(item).children("img").get(0);				
			$(bindImage).click(function(){
						playOff();
						moveLeft();
				});	
			}else if($(item).attr("id").indexOf("right") > -1){
			var bindImage = $(item).children("img").get(0);
				$(bindImage).click(function(){
						playOff();
						moveRight();
						});	
			}else if($(item).attr("id").indexOf("middle") > -1){
				var bindImage = $(item).children("img").get(0);
				$(bindImage).click(function(){
					togglePlayPause(bindImage);
				});
				
			}
			});	
}

		initialize();
		activateNavigation();
		start();
});

}
	
})(jQuery);
