$(function(){
	var cfg = {delay:5000,anim:500};
	var $ul = $('.slider'), $dots = $ul.parent().find('.dots'), $dot = $dots.children().first().remove();
	var num = $ul.find('li').length, to, fn_do_next;
	for (var i=0;i<num;i++) $dots.append($dot.clone());
	$ul.parent().hover(function(){ $(this).find('.ctrl').fadeIn(100); },function(){ $(this).find('.ctrl').fadeOut(100); });
	$ul.parent().find('.next').click(function(){ return fn_finish_and_then(fn_next_slide); });
	$ul.parent().find('.prev').click(function(){ return fn_finish_and_then(fn_prev_slide); });
	$dots.children()
		.each(function(i){ $(this).attr('index',i); })
		.last().addClass('active');
	$dots.children().click(function(){ return ($(this).hasClass('active')) ? false : fn_goto_slide($(this).attr('index')); })
	var fn_finish_and_then = function(fn){
		if (to) {
			clearTimeout(to);
			fn();
		} else {
			fn_do_next = fn;
		}
		return false;
	};
	var fn_debug = function() {
		var r = [];
		$ul.find('li').each(function(){ r.push($(this).attr('index') + ':' + $(this).find('.details').attr('style')); });
		return r.join(',');
	};
	var fn_goto_slide = function(i){
		fn_finish_and_then(function(){
			var $li = $ul.find('li[index=' + i + ']').remove();
			$ul.find('li:last').before($li);
			fn_next_slide();
		});
		return false;
	};
	var fn_reorder = function() {
		var $tmp = $('<div/>'),idx;
		$ul.find('li').each(function(i){
			if (i + 1 < num) $tmp.append($(this).remove());
			else idx = parseInt($(this).attr('index'));
		});
		for (var i=num-1;i>=0;i--) if (i<idx) $ul.find('li:first').before($tmp.find('li[index=' + i + ']').remove());
		for (var i=num-1;i>=0;i--) $ul.find('li:first').before($tmp.find('li[index=' + i + ']').remove());
	};
	var fn_next_slide = function() {
		to = false;
		$ul.find('li:last .details').animate({'right':'-340px'},cfg.anim,function(){
			$(this).parent().fadeOut(function(){
				$dots.children().removeClass('active');
				$ul.find('li:first').before($(this).remove().removeAttr('style'));
				$ul.parent().find('.caption h3').text($ul.find('li:last img').attr('Title'));
				if (Cufon) Cufon.refresh();
				var $li = $ul.find('li:last');
				$dots.find('[index=' + $li.attr('index') + ']').addClass('active');
				$li.find('.details').animate({'right':'0'},cfg.anim,function(){
					fn_reorder();
					if (fn_do_next) {
						var fn = fn_do_next;
						fn_do_next = false;
						fn();
					}
					else to = setTimeout(fn_next_slide,cfg.delay);
				});
			});
		});
		return false;
	};
	var fn_prev_slide = function() {
		var i = parseInt($ul.find('li:last').attr('index')) + 1;
		if (i == num) i = 0;
		fn_goto_slide(i);
	};
	
	
	$ul.find('li').each(function(i){
		$(this).attr('index',i);
		if (i + 1 < num) $(this).find('.details').css({'right':'-340px'});
	});
	to = setTimeout(fn_next_slide,cfg.delay);
});


