/*

bxCarousel v1.0

Plugin developed by: Steven Wanderski

http://bxcarousel.com

http://stevenwanderski.com



Released under the GPL license:

http://www.gnu.org/licenses/gpl.html

*/



(function($){



	$.fn.bxCarousel = function(options){

	

		var defaults = {

			move: 4,

			display_num: 4,

			speed: 600,

			margin:0,

			auto: true,

			auto_interval: 6000,

			auto_dir: 'next',

			auto_hover: false,

			next_text: 'next',

			next_image: '',

			prev_text: 'prev',

			prev_image: '',

			controls: true,
			
			footer: false

		};



		var options = $.extend(defaults, options);



		return this.each(function() {

			var $this = $(this);                

			var li = $this.find('li');

			var first = 0;

			var fe = 0;

			var last = options.display_num-1;

			var le = options.display_num-1;

			var is_working = false;

			var j = '';

			var clicked = false;		



			li.css({'float':'left','listStyle':'none', 'marginRight':options.margin});

			var ow = li.outerWidth(true);

			wrap_width = (ow*options.display_num) - options.margin;                

			var seg = ow*options.move;

			$this.wrap('<div class="bx_container"></div>').width(999999);

			if(options.controls){
			
				if(options.footer){
				
					if(options.next_image != '' || options.prev_image != ''){var controls = '<a href="" class="prev2"><img src="'+options.prev_image+'"/></a><a href="" class="next2"><img src="'+options.next_image+'"/></a>';}

					else{var controls = '<a href="" class="prev2">'+options.prev_text+'</a><a href="" class="next2">'+options.next_text+'</a>';}	
					
				}else{
	
					if(options.next_image != '' || options.prev_image != ''){var controls = '<a href="" class="prev"><img src="'+options.prev_image+'"/></a><a href="" class="next"><img src="'+options.next_image+'"/></a>';}

					else{var controls = '<a href="" class="prev">'+options.prev_text+'</a><a href="" class="next">'+options.next_text+'</a>';}	
				}

			}			

			$this.parent('.bx_container').wrap('<div class="bx_wrap"></div>').css({'position':'relative', 'width':wrap_width,'overflow':'hidden'}).before(controls);

			var w = li.slice(0, options.display_num).clone();

			var last_appended = (options.display_num+options.move)-1;

			$this.empty().append(w);				

			get_p();				

			get_a();

			$this.css({'position':'relative', 'left':-(seg)});

						

			$this.parent().siblings('.next').click(function(){

				slide_next();

				Cufon.refresh();

				clearInterval(j);

				clicked = true;

				return false;

			});				

			$this.parent().siblings('.prev').click(function(){

				slide_prev();

				Cufon.refresh();

				clearInterval(j);

				clicked = true;

				return false;

			});

			if(options.auto){

				start_slide();

				Cufon.refresh();

				if(options.auto_hover && clicked != true){

					$this.find('li').live('mouseenter', function(){

						if(!clicked){clearInterval(j);}						

					});

					$this.find('li').live('mouseleave', function(){

						if(!clicked){start_slide();}

					});

					

				}

			}

			

			function start_slide(){

				if(options.auto_dir == 'next'){

					j = setInterval(function(){slide_next()}, options.auto_interval);

				}else{

					j = setInterval(function(){slide_prev()}, options.auto_interval);

				}

			}



			function slide_next(){

				if(!is_working){

					is_working = true;

					set_pos('next');

					Cufon.refresh();

					$this.animate({left:'-='+seg}, options.speed, function(){

						$this.find('li').slice(0, options.move).remove();

						$this.css('left',-(seg));

						get_a();

						is_working = false;			

					});

				}

			}

			

			function slide_prev(){

				if(!is_working){

					is_working = true; 

					Cufon.refresh();

					set_pos('prev');

					$this.animate({left:'+='+seg}, options.speed, function(){

						$this.find('li').slice(-options.move).remove();

						$this.css('left',-(seg));

						get_p();

						is_working = false;                 

					});

				}

			}



			function get_a(){

				var str = new Array();

				var lix = li.clone();

				le = last;

				for(i=0;i<options.move;i++){

					le++

					if(lix[le] != undefined){

						str[i] = $(lix[le]);    

					}else{

						le = 0;

						str[i] = $(lix[le]);

					}                                                                       

				}					                 

				$.each(str, function(index){

					$this.append(str[index][0]);

				});

			}

							

			function get_p(){

				var str = new Array();

				var lix = li.clone();

				fe = first;

				for(i=0;i<options.move;i++){

					fe--

					if(lix[fe] != undefined){

						str[i] = $(lix[fe]);    

					}else{

						fe = li.length-1;

						str[i] = $(lix[fe]);

					}                                                                       

				}					        

				$.each(str, function(index){

					$this.prepend(str[index][0]);

				}); 

			}

							

			function set_pos(dir){

				if (dir == 'next') {

					first += options.move;

					if (first >= li.length) {

						first = first % li.length;

					}

					last += options.move;

					if (last >= li.length){

						last = last % li.length;

					}

				}else if (dir == 'prev'){

					first -= options.move;

					if (first < 0){

						first = li.length + first;

					}

					last -= options.move;

					if (last < 0){

						last = li.length + last;

					}

				}

			}				

		});			

	}    

})(jQuery);
