// JavaScript Document


// Scrollable Box
(function($){
	var defaults = {
		idx:0,
		offset:0,
		wrap:0,
		onScroll:function(){return true;},
		onComplete:function(){return true;}
	}
	$.fn.sbox = function(settings) {
		settings = $.extend({},defaults,settings);
		
		$(this).find(".window").attr("idx",settings.idx).data("settings",settings);
		$(this).bind("sbox.onScroll",settings.onScroll).bind("sbox.onComplete",settings.onComplete);
		
		$(this).each(function(){
			var $item = $(this).find(".wrapper .item");
			var count = $item.length;
			if (settings.wrap==0) {
				if (settings.idx==0) $(this).find('.prev').addClass("disabled");
				else $(this).find('.prev').removeClass("disabled");
				if (settings.idx>=(count-1)) $(this).find('.next').addClass("disabled");
				else $(this).find('.next').removeClass("disabled");
			}
		});
		
		$(this).find('.next').click(function(){
			var $this = $(this);
			var $window = $this.parent().find(".window");
			var $wrapper = $window.find(".wrapper");
			if ($wrapper.hasClass("scrolling")) return false;
			var $item = $wrapper.find(".item");
			var settings = $window.data("settings");
			var count = $item.length;

			var idx = parseInt($window.attr("idx"))+1;

			if (idx>=count-settings.wrap) {
				if (settings.wrap) {
					idx=settings.wrap;
					$window.attr("idx",idx-1);
					left = $($item[idx-1]).position().left;
					$wrapper.css('left',(-left+settings.offset)+'px');
				}
				else return false; //idx = count-1;
			}
			
			if (!$window.trigger("sbox.onScroll",+1)) return false;

			if (!settings.wrap && idx==count-1) $this.addClass('disabled');
			if (idx>0) $this.siblings(".prev").removeClass("disabled");
			
			var left = $($item[idx]).position().left;
			$wrapper.addClass("scrolling");
			$wrapper.animate({left:(-left+settings.offset)+'px'},{
				duration:600,complete:function(){$(this).parent().trigger("sbox.onComplete",+1); $(this).removeClass("scrolling");}
			});
			
			$window.attr("idx",idx);
			
			return false;
		});
		
		$(this).find('.prev').click(function(){
			var $this = $(this);
			var $window = $this.parent().find(".window");
			var $wrapper = $window.find(".wrapper");
			if ($wrapper.hasClass("scrolling")) return false;
			var $item = $wrapper.find(".item");
			var settings = $window.data("settings");
			var count = $item.length;

			var idx = parseInt($window.attr("idx"))-1;
			
			if (settings.wrap) {
				if (idx<settings.wrap-1) {
					idx = count-settings.wrap-2;
					$window.attr("idx",idx+1);
					left = $($item[idx+1]).position().left;
					$wrapper.css('left',(-left+settings.offset)+'px');
				}
			} else {
				if (idx<0) return false;
			}
			
			if (!$window.trigger("sbox.onScroll",-1)) return false;
			
			if (!settings.wrap && idx==0) $this.addClass('disabled');
			if (idx<count-1) $this.siblings(".next").removeClass('disabled');
			
			var left = $($item[idx]).position().left;
			$window.attr("idx",idx);
			$wrapper.addClass("scrolling");
			$wrapper.animate({left:(-left+settings.offset)+'px'},{
				duration:600,complete:function(){$(this).parent().trigger("sbox.onComplete",-1); $(this).removeClass("scrolling");}
			});
			return false;
		});
		
		return $(this);
	}

	$.fn.sboxGoto = function(idx,dur) {
		if (typeof(dur)=='undefined') dur=600;
		
		var $window = $(this);
		var $wrapper = $window.find(".wrapper");
		var $item = $wrapper.find(".item");
		var settings = $window.data("settings");
		var count = $item.length;
		var currIdx = parseInt($window.attr("idx"));
		if (!$window.trigger("sbox.onScroll",idx-currIdx)) return false;
		
		if (!settings.wrap && idx<=0) $window.parent().find(".prev").addClass('disabled');
		else $window.parent().find(".prev").removeClass("disabled");
		
		if (idx>=count-1) $window.parent().find(".next").addClass('disabled');
		else $window.parent().find(".next").removeClass('disabled');
			
		$window.attr("idx",idx);
		var left = $($item[idx]).position().left;
		if (dur) {
			$wrapper.animate({left:(-left+settings.offset)+'px'},{
				duration:dur,complete:function(){$(this).parent().trigger("sbox.onComplete",idx-currIdx);}
			});
		} else {
			$wrapper.css('left',(-left+settings.offset)+'px');
			$wrapper.parent().trigger("sbox.onComplete",idx-currIdx);
		}
		return false;
	}
})(jQuery);


