(function($){
	var Slider = function(element, options){
		var defaults = {
			'prevClass': 'left-arrow',
			'nextClass': 'right-arrow',
			'cycle': false,
			'detailsDelay': 250,
			'showDots': false
		};
		var options = $.extend(defaults,options);
		var obj = $(element);
		var w = obj.width() || 1080;
		var h = obj.height() || 450;
		var clickable = true;
		var s = $('li',obj).length;
		var cs = 1;
		var ul = $('ul',obj);
		var li = $('li',ul);
		var timeout;
		if (s>1){
			if (options.showDots){
				var i = s, dotStr = '';
				while(i--){
					if (i==0) dotStr='<li class="slider-dot-'+i+' selected"><a href="#"></a></li>'+dotStr;
					else dotStr='<li class="slider-dot-'+i+'"><a href="#"></a></li>'+dotStr;
				}
				obj.append('<ul class="dotwrap">'+dotStr+'</ul>');
				
				$('.dotwrap a', obj).click(function(){
					if (clickable){
						var ns = $(this).parent().index()+1;
						if (cs < ns){
							cs = ns-1;
							animate('next',true);
						}
						else if (cs > ns){
							cs = ns+1;
							animate('prev',true);
						}
					}
					return false;
				});
			}
			ul.prepend($('li:last-child',ul).clone()).append($('li:nth-child(2)',ul).clone()).width((s+2)*w).height(h).css('margin-left',w*-1);
			$('.'+options.prevClass).click(function(){
				hideDetails();
				animate('prev',true);
			}).fadeIn(250);
			$('.'+options.nextClass).click(function(){
				hideDetails();
				animate('next',true);
			}).fadeIn(250);
			if (options.cycle) timeout = setTimeout(function() { animate('next') }, options.cycle);
		}
		else {
			ul.width(w).height(h);
			$('.'+options.nextClass+',.'+options.prevClass).hide();
		}
		li = $('li',ul).width(w).height(h);
		$('.details,.detailwrap',li).hide();
		showDetails();
		
		function animate(dir,clicked){
			if (clickable){
				clickable = false;
				switch(dir){
					case 'prev':
						cs--;
						break;
					case 'next':
						cs++;
						break;
				};
				ul.animate({'margin-left':cs*w*-1},{'duration':1000,'easing':'easeInOutCubic','complete':adjust});
				if (clicked) clearTimeout(timeout);
				else if (options.cycle) timeout = setTimeout(function(){animate('next',false);},options.cycle);
			}
		};
		function adjust(){
			if (cs>s) cs=1;
			if (cs<1) cs=s;
			$('.dotwrap li',obj).removeClass('selected');
			$('li.slider-dot-'+(cs-1),obj).addClass('selected');
			ul.css('margin-left',cs*w*-1);
			showDetails();
			clickable=true;
		};
		function showDetails(){
			var details = $('li:nth-child('+cs+') .details',ul);
			if (details.length){
				details.slideDown({'duration':500, 'easing':'easeInOutCubic', 'complete':function(){
					$('.detailwrap',$(this)).fadeIn(250, function(){
						$(this).parent('.details').jScrollPane({'showArrows':true});
					});
				}});
			}
		};
		function hideDetails(){
			$('li:nth-child('+cs+') .details, li:nth-child('+cs+') .detailwrap',ul).fadeOut(250);
		};
	};
	$.fn.slider = function(options){
		return this.each(function(){
			var element = $(this);
			if (element.data('slider')) return;
			var slider = new Slider(this, options);
			element.data('slider', slider);
		});
	};
})(jQuery);
