/*
	software panel 0.1 - jQuery Plugin
	Copyright (c) 2010 SCEJ
	Dual licensed under the MIT and GPL licenses
*/

(function($){
	var nameSpace = "swPanel";
	$[nameSpace] = function(data,callback,options){
		if(data){
			init(data,callback,options);
		}
		return $[nameSpace];
	};
	$.fn[nameSpace] = function(callback,options){
		init(this,callback,options);
		return $[nameSpace];
	};

	var ops = null;
	var scrolling = false;

	$[nameSpace].defaults = {
		duration:0.1,
		prevBtn:".prev",
		nextBtn:".next",
		container:".softPanelContainer",
		panelList:".softPanelList",
		panelItem:".softPanelItem"
	};

	function init(data,callback,options){
		if(!ops || options){
			setOption(options);
		}

		if(data){
			if(typeof data == "object"){
				data = data instanceof jQuery ? data : jQuery(data);
			}else if(typeof data == "string" || typeof data == "number"){
				data = jQuery('<div></div>').html(data);
			}

			data.each(function(){
				var panelData = this;
				var itemNum = $(panelData).find(ops.panelItem).length;

				if(itemNum){
					var panel = $(panelData).find(ops.panelList);
					var items = panel.children();
					var firstItem = items.eq(0);
					var itemWidth = firstItem.width();
					var itemBoxWidth = firstItem.outerWidth();
					var totalWidth = itemBoxWidth*(itemNum+2);
					panel.width(totalWidth).height(firstItem.outerHeight());

					if(itemNum > $(panelData).find(ops.container).width()/itemWidth){
						$(panelData).find(ops.prevBtn + " a").click(function(){showPrev(panelData);return false;});
						$(panelData).find(ops.nextBtn + " a").click(function(){showNext(panelData);return false;});
						panel.prepend(items.eq(items.length-1).clone()).css('margin-left',-itemBoxWidth);
					}else{
						$(panelData).find(ops.prevBtn + " a").click(function(){return false;});
						$(panelData).find(ops.nextBtn + " a").click(function(){return false;});
					}
				}
			});
		}
	}

	function showNext(panelData){
		if(scrolling){
			return false;
		}

		scrolling = true;
		var panel = $(panelData).find(ops.panelList);
		var items = panel.children();
		var firstItem = items.eq(0);
		var itemWidth = firstItem.width();

		panel.append(items.eq(1).clone());
		firstItem.animate({width:0},{
			duration:ops.duration*1000,
			complete:function(){
				$(this).remove();
				scrolling = false;
			}
		});
	}

	function showPrev(panelData){
		if(scrolling){
			return false;
		}

		scrolling = true;
		var panel = $(panelData).find(ops.panelList);
		var items = panel.children();
		var itemWidth = items.eq(items.length-1).width();
		var lastItem = items.eq(items.length-1);
		var cloneItem = items.eq(items.length-2).clone();

		cloneItem.width(0).prependTo(panel).animate({width:itemWidth},{
			duration:ops.duration*1000,
			complete:function(){
				lastItem.remove();
				scrolling = false;
			}
		});
	}

	function setOption(settings){
		ops = $.extend({},$[nameSpace].defaults,settings);
	}

})(jQuery);

