(function($) {

	$.fn.slinkySlider = function(settings) {	
		// Utility variables - do not alter
		var currentpanel;
		var panelwidth;
		var goforward = true;
		var t;
		settings = $.extend({}, $.fn.slinkySlider.defaults, settings);	

		return $(this).each(function(){
			panelwidth = $(this).width();
			$(this).css("overflow","hidden");
			var container = $(this);
			elheight = container.height();
			if($(container).find(".panelwrappers").length == 0) {
			    for (var i=1;i<=settings.numberofpanels;i++) {
				    $(container).append("<div class='panelwrappers'><div class='panel'></div></div>");
				    $(container).find(".panelwrappers:last .panel").load(settings.panelname+i+".html").parents(".panelwrappers").data("number",i);
			    }
			}
			else {
			    var panels = $(container).find(".panelwrappers");
			    settings.numberofpanels = panels.length;
			    for (var i=0;  i<=panels.length;  i++) {
			        $(panels[i]).data("number", i+1);
			    }
			}
			if(settings.largesize == 0)
			    settings.largesize = panelwidth-((settings.numberofpanels-1)*(settings.smallsize+settings.panelspacing));
			else
			    settings.smallsize = (panelwidth - settings.largesize - (settings.panelspacing * (settings.numberofpanels-1))) / (settings.numberofpanels-1);
			currentpanel = $(container).find(".panelwrappers:first");
			$(container).find(".panelwrappers").css({
					"width"		:	settings.smallsize+"px", 
					"float"		:	"left",
					"height"	:	elheight+"px"});
			$(container).find(".panels").css({
					"width"		:	settings.largesize+"px",
					"height"	:	"100%"}); 
			$(currentpanel).css("width",settings.largesize+"px");
			$(container).find(".panelwrappers").not(":last").css("margin-right",settings.panelspacing+"px");
			$(container).find(".panelwrappers").each(function(){
				$(this).mouseover(function(){switchpanel(this, container);});
			});
			if (settings.doauto) t = setTimeout(function(){switchpanel(null, container);},settings.autotimer);
		});

		function switchpanel(newpanel, container) {
			if (newpanel==currentpanel) {
				// do nothing because we're already on this panel
			} else {
				var auto = false;
				if (newpanel==null) {
					auto = true;
					if(!settings.rotate) {
					    if (goforward && $(currentpanel).data("number")==settings.numberofpanels) {
						    goforward=false;
					    }
					    if (!goforward && $(currentpanel).data("number")==1) {
						    goforward=true;
					    }						
					    if (goforward) {
						    newpanel = $(currentpanel).next();
					    } else {
						    newpanel = $(currentpanel).prev();
					    }
					} else {
					    if ($(currentpanel).data("number") == settings.numberofpanels) {
						    newpanel = $(container).find(".panelwrappers:first");
					    }
					    else {
						    newpanel = $(currentpanel).next();
					    }
					}
				}
				else {
					$(container).find(".panelwrappers").stop();
					clearTimeout(t);
				}
				$(container).find(".panelwrappers").not(newpanel).animate({width: settings.smallsize+"px"},settings.transition, "swing");
				$(newpanel).animate({width: settings.largesize+"px"},settings.transition, "swing");				
				currentpanel = newpanel;
				if (auto) t = setTimeout(function(){switchpanel(null, container);},settings.autotimer);     
    		}
	    }
    }
			
	$.fn.slinkySlider.defaults = {
		autotimer:8000,
		transition:1000,
		panelspacing:3,
		smallsize:20,
		numberofpanels:5,
		largesize:0,
		doauto:true,
		rotate:false,
		panelname:"panel"
	}

})(jQuery);
