/*
	Author: Jesse THompson
	Date: February 23rd 2010
	Version: .1
	
	Supported list item attributes
	------------------------------
	data-value="0"					- fills INPUT field value, used to determine default value
	data-disabled="true"			- changes hover state (disables by default), removes click functionality
	data-href="/special-offers/"	- adds a linkout
	data-linktarget="_blank"		- sets a target for the linkout
*/


(function($){
		$.fn.iwsSlideshow = function(imageList,options) {   
		var defaults = {
		  type: "link",
		  defaultLinkTarget: "_self",
		  classExt: "",
		  width:980,
		  wrapperClass: null,
		  prependLabel: "",
		  loadingIndicator: null,
		  preload:1,
		  nav: null,
		  nextBtn: null,
		  prevBtn: null,
		  fillLabel: null,
		  maxHeight: null,
		  slide: true,
		  input: null,
		  onSelect: null,
		  onHover: null,
		  onOut: null,
		  onOpen:null,
		  onClose:null
		};
		
		var isOn = false;
		var obj;
		var wrapper;
		var images;
		var nextQueued = false;
		var totalWidth = 0;
		var imageIndex = 0;
		var loadIndex = 0;
		var firstLoad = true;
		var lastImageIndex = -1;
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			
			if(options.loadingIndicator)
				loadingIndicator = $(options.loadingIndicator);
				
			if(options.nextBtn)
				options.nextBtn.click(Next);
				
			if(options.prevBtn)
				options.prevBtn.click(Prev);
				
//			images = imageList;
			images = [{image:'/content/slides/slide1.jpg', duration:'5'}, 
    	 				{image:'/content/slides/slide2.jpg', duration:'5'},
						{image:'/content/slides/waikiki_17.jpg', duration:'5'},
						{image:'/content/slides/waikiki_1.jpg', duration:'5'},
						{image:'/content/slides/waikiki_2.jpg', duration:'5'},
						{image:'/content/slides/waikiki_3.jpg', duration:'5'},
						{image:'/content/slides/waikiki_4.jpg', duration:'5'},
						{image:'/content/slides/waikiki_5.jpg', duration:'5'},
						{image:'/content/slides/waikiki_6.jpg', duration:'5'},
						{image:'/content/slides/waikiki_7.jpg', duration:'5'},
						{image:'/content/slides/waikiki_8.jpg', duration:'5'},
						{image:'/content/slides/waikiki_9.jpg', duration:'5'},
						{image:'/content/slides/waikiki_10.jpg', duration:'5'},
						{image:'/content/slides/waikiki_11.jpg', duration:'5'},
						{image:'/content/slides/waikiki_12.jpg', duration:'5'},
						{image:'/content/slides/waikiki_13.jpg', duration:'5'}];
						
						
			if(slideshowData) {
				var dt = eval("("+slideshowData+")");
				if(dt.length > 0) {
					images = dt;
					for(var i = 0;i < images.length;i++) {
						images[i].image = "/content/slides/"+images[i].image;
					}
				}
			}
	
			if(options.input) {
				registerInput(options.input); 
			}
			
			obj = $(this);
			var body = obj.html();
			
			if(options.wrapperClass)
				body += '<div class="'+options.wrapperClass+'">';
			
			body += '<div class="iwsSlideshowWrapper2">'
			body += '<div class="iwsSlideshowSlider">'
			
			if(options.nav)
				nav = $(options.nav).html();
				
			
			for(var i = 0;i < images.length;i++) {
				body += "<div class='iwsSlideshowImageContainer' style='z-index:-400'><img class='iwsSlideshowImage' id='iwsSlideshowImage"+i+"' style='' /></div>";
				
				if(options.nav) {
					nav += '<a class="iwsSlideshowNavItem" href="#" rel="'+i+'">'+ (i+1) + "</a>";
				}
			}
			
			body += '</div>';
			body += '</div>';
			
			if(options.wrapperClass)
				body += "</div>";

			if(options.nav)
			{
				$(options.nav).html(nav);
				$(".iwsSlideshowNavItem",options.nav).each(function() {
					$(this).click(handleNavClick);	
				});
			}
				
			obj.html(body);
			wrapper = $(".iwsSlideshowWrapper",obj);
			firstLoad = true;
			LoadImage();
		});
		
		function setNavState(i) {
			$(".iwsSlideshowNavItem",options.nav).removeClass("iwsSlideshowNavItemOn");
			$(".iwsSlideshowNavItem[rel='"+i+"']",options.nav).addClass("iwsSlideshowNavItemOn");
		}
		
		function handleNavClick() {
			imageIndex = $(this).attr("rel");
			loadingIndicator.css("display","none");
			if(options.loadingIndicator)
				if(loadIndex >= imageIndex)
					loadingIndicator.css("display","none");
				else loadingIndicator.css("display","block");
				
			if($("#iwsSlideshowImage"+imageIndex,obj).attr("src") != undefined)
				animateToIndex();
		}
		
		function LoadImage() {

			if($("#iwsSlideshowImage"+loadIndex,obj).attr("src") != undefined && $("#iwsSlideshowImage"+loadIndex,obj).attr("src") != "")
				animateToIndex();
			else {
				loadingIndicator.css("display","block");
				$("#iwsSlideshowImage"+loadIndex,obj).attr("src",images[loadIndex].image).load(handleImageLoaded).error(function() {});
			}
		}
		
		function animateToIndex() {
			if(lastImageIndex == imageIndex)
				return;
				
			if(options.onChange)
				options.onChange($("#iwsSlideshowImage"+imageIndex),firstLoad)
				
			lastImageIndex = imageIndex;
			firstLoad = false;
			setNavState(imageIndex);
			var animTo = $("#iwsSlideshowImage"+imageIndex,obj).attr("data-scrollX");
			if(animTo < 0)
				animTo = 0;
			if(animTo != undefined) {
				$(".iwsSlideshowSlider",obj).stop().animate(
					{"left":"-"+animTo+"px"},500);
			} else {
				$(".iwsSlideshowSlider",obj).css("left","0px");
			}
		}
		
		function handleImageLoaded() {
			if(options.loadingIndicator)
				if(loadIndex >= imageIndex)
					loadingIndicator.css("display","none");
				else loadingIndicator.css("display","block");
			
			$(this).css("opacity",1);
			var cx = (options.width - parseInt($(this).css("width")))/2;
			//alert(cx);
			$(this).css("left",totalWidth+"px");
			
			$(this).attr("data-scrollX",totalWidth-cx);
			
			if(loadIndex == 0) {
				$(this).css("margin-left",cx);
				totalWidth += cx;
			}
			
			totalWidth += parseInt($(this).css("width"));
			
			checkPreload();
			if(parseInt(loadIndex) >= (parseInt(imageIndex) + parseInt(options.preload))) {
				animateToIndex();
			}
			if(nextQueued) {
				imageIndex++;
				animateToIndex();
				nextQueued = false;
			}
		}
		
		function checkPreload() {
			//if((loadIndex + options.preload) >= imageIndex)
			{
				loadIndex++;
				if(loadIndex > images.length-1)
					return;
				
				if(!$("#iwsSlideshowImage"+loadIndex,obj).attr("src") != undefined) {
					
					$("#iwsSlideshowImage"+loadIndex,obj).attr("src",images[loadIndex].image).load(handleImageLoaded).error(function() {alert("Error");});
				}
				
			}
		}

		function Next() {
			if(imageIndex >= images.length-1)
				return;
			imageIndex++;
			
			if(options.loadingIndicator)
				if(loadIndex > imageIndex)
					loadingIndicator.css("display","none");
				else {
					imageIndex--;
					loadingIndicator.css("display","block");
					nextQueued = true;
				}
				
		
			if(images) {
				if(imageIndex > images.length-1)
					imageIndex = images.length-1;
				if($("#iwsSlideshowImage"+imageIndex,obj).attr("src") != undefined)
					animateToIndex();
			}
			
		}
		
		function Prev() {
			if(imageIndex <= 0)
				return;
				
			imageIndex--;
			if(imageIndex < 0)
				imageIndex = 0;
			if($("#iwsSlideshowImage"+imageIndex,obj).attr("src") != undefined)
				animateToIndex();
		}
		
		function executeCallback(func) {
			if(func)
				func();	
		}
};
})(jQuery);

