/*
 * 	
 *	FIT Carousel 1.1
 *	based on Easy Slider 1.7 by Alen Grakalic
 *
 *	FIT Carousel Copyright (c) 2009 Fulcrum IT (http://fulcrumit.com)
 *	Easy Slider Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */
 
/*
 *	markup example for $("#carousel").fitCarousel();
 *	
 * 	<div id="carousel">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */

(function($) {

	$.fn.fitCarousel = function(options){

		// default configuration properties
		var defaults = {			
			prevText: 	'&laquo; Back',
			nextText: 	'Next &raquo;',
			speed: 		800,
			auto:		true,
			pause:		6000,
			continuous:	true
		}; 
		
		var options = $.extend(defaults, options);
				
		this.each(function() {
			var obj = $(this), objControls;
			var s = $("li", obj).length;
			var w = $("li", obj).width(); 
			var h = $("li", obj).height(); 
			var clickable = true;
			obj.addClass("fit-carousel");
			obj.width(w); 
			obj.height(h); 
			obj.css("overflow","hidden");
			var ts = s-1;
			var t = 0;
			$("ul", obj).css('width',s*w);
			$("li", obj).css('float','left');
			
			var html = '';
			html += '<div class="fit-carousel-controls">';
			html += ' <span class="fit-carousel-button-prev"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
			html += '<a href="#" class="fit-carousel-button-page"><span class="ui-icon ui-icon-bullet"></span></a>';
			$("li:gt(0)", obj).each(function(i) {
				html += '<a href="#" class="fit-carousel-button-page"><span class="ui-icon ui-icon-radio-on"></span></a>';
			});
			html += ' <span class="fit-carousel-button-next"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
			html += '</div>';
			$(obj).after(html);
			objControls = $(obj).next();

			$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left", "-" + w + "px"));
			$("ul", obj).append($("ul li:nth-child(2)", obj).clone());
			$("ul", obj).css('width', (s + 1) * w);

			$(".fit-carousel-button-page", objControls).hover(function() {
				$(this).addClass("ui-state-hover").find(".ui-icon-radio-on").removeClass("ui-icon-radio-on").addClass("ui-icon-radio-off");
			}, function() {
				$(this).removeClass("ui-state-hover").find(".ui-icon-radio-off").addClass("ui-icon-radio-on").removeClass("ui-icon-radio-off");
			});

			$(".fit-carousel-button-page", objControls).focus(function() {
				$(this).addClass("ui-state-focus").find(".ui-icon-radio-on").removeClass("ui-icon-radio-on").addClass("ui-icon-radio-off");
				$(this).siblings(".fit-carousel-button-page").removeClass("ui-state-hover").find(".ui-icon-radio-off").addClass("ui-icon-radio-on").removeClass("ui-icon-radio-off");
			});

			$(".fit-carousel-button-page", objControls).click(function() {
				if (clickable) {
					var index = $(".fit-carousel-button-page", objControls).index(this);
					animate(index, true);
					clickable = false;
					$(this).find(".ui-icon").removeClass("ui-icon-radio-off").addClass("ui-icon-bullet");
					$(this).siblings(".fit-carousel-button-page").find(".ui-icon").addClass("ui-icon-radio-on").removeClass("ui-icon-bullet").removeClass("ui-icon-off");
				}
				return false;
			});
	
			$(".fit-carousel-button-next", objControls).click(function(){		
				animate("next",true);
			});
			$(".fit-carousel-button-prev", objControls).click(function(){		
				animate("prev",true);				
			});

			function adjust(){
				if(t>ts) t=0;		
				if(t<0) t=ts;	
				if(!options.vertical) {
					$("ul",obj).css("margin-left",(t*w*-1));
				} else {
					$("ul",obj).css("margin-left",(t*h*-1));
				}
				clickable = true;
				if(options.numeric) setCurrent(t);
			};
			
			function animate(dir,clicked){
				if (clickable) {
					clickable = false;
					var ot = t;
					switch(dir){
						case "next":
							t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1;
							break; 
						case "prev":
							t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1;
							break; 
						case "first":
							t = 0;
							break; 
						case "last":
							t = ts;
							break; 
						default:
							t = dir;
							break; 
					};

					var otPageBtn = $('.fit-carousel-button-page:eq(' + ot + ')', objControls);
					var tPageBtn = $('.fit-carousel-button-page:eq(' + (t < 0 ? ts : (t > ts ? 0 : t)) + ')', objControls);
					objControls.find(".fit-carousel-button-page").find(".ui-icon").removeClass("ui-icon-bullet").removeClass("ui-icon-radio-off").addClass("ui-icon-radio-on").parent();
					tPageBtn.find(".ui-icon").addClass("ui-icon-bullet").removeClass("ui-icon-radio-on");
				
					var diff = Math.abs(ot-t);
					var speed = diff*options.speed;						

					p = (t*w*-1);
					$("ul",obj).animate(
						{ marginLeft: p }, 
						{ queue:false, duration: speed, complete:adjust }
					);				
				
					if(clicked) clearTimeout(timeout);
					if(options.auto && dir=="next" && !clicked){;
						timeout = setTimeout(function(){
							animate("next",false);
						},diff*options.speed+options.pause);
					};

				};
				
			};
			// init
			var timeout;
			if(options.auto){;
				timeout = setTimeout(function(){
					animate("next",false);
				},options.pause);
			};		
		
		});

	};

})(jQuery);
