/**
 * fxCycle for jquery
 *
 * author: feiyu
 * e-mail: feiyu@asgard.cn
 * website: http://feiyu.asgard.cn
 *
 * Version: 1.0.0
 */
 
(function($) {
	var nextTimer=0;
	var timers=new Array(99);
	var doneState=new Array(99);
	var defaultSetting = {
		interval: 2000,
		animateTime: 300,
		blockSelector: '.fxCycle-blocks li',
		buttonSelector: '.fxCycle-buttons li',
		event: 'click'
	};
	$.fn.fxCycle=function(interval,blockSelector,buttonSelector,settings) {
		if(!interval) interval=defaultSetting.interval;
		var animateTime = settings && settings.animateTime ? settings.animateTime : defaultSetting.animateTime;
		var event = settings && settings.event ? settings.event: defaultSetting.event;
		for(var i=0;i<this.length;i++) {
			var parent=$(this[i]);
			var timerIndex=nextTimer++;
			if(!blockSelector) blockSelector = defaultSetting.blockSelector;
			if(!buttonSelector) buttonSelector= defaultSetting.buttonSelector;
			Start(parent,timerIndex,interval,blockSelector,buttonSelector,animateTime ,0);
			bindEvent(event,parent,timerIndex,interval,blockSelector,buttonSelector,animateTime );
		}
	};
	function bindEvent(event,parent,timerIndex,interval,blockSelector,buttonSelector,animateTime) {
		parent.find(buttonSelector).bind(event,function() {
			var index=$(this).parent().children().index(this);
			if(doneState[timerIndex] && !$(this).is(".current")) {
				Stop(timerIndex);
				Cycle(parent,timerIndex,interval,blockSelector,buttonSelector,animateTime ,index - 1);
			}
		});
	}
	function Cycle(parent,timerIndex,interval,blockSelector,buttonSelector,animateTime,index) {

		var timer = timers[timerIndex];
		Stop(timer);
		doneState[timerIndex] = false;
		count = parent.find(blockSelector).length;
		
		index++;

		if(index>=count) index=0;

		blocks = parent.find(blockSelector);
		buttons = parent.find(buttonSelector);
		prev = blocks.filter('.current');
		if(prev.length>0) {
			prev.css('z-index',2);
			blocks.filter(':eq(' + index + ')').addClass('current').show();
			prev.fadeOut(animateTime,function() {
				$(this).css('z-index',1).removeClass('current');
				doneState[timerIndex] = true;
				Start(parent,timerIndex,interval,blockSelector,buttonSelector,animateTime,index);
			});
			buttons.filter('.current').removeClass('current');
			buttons.filter(':eq('+index+')').addClass('current');
		}
	}
	function Stop(timerIndex) {
		clearTimeout(timers[timerIndex]);
	}
	function Start(parent,timerIndex,interval,blockSelector,buttonSelector,animateTime,index) {
		timers[timerIndex]=setTimeout(function() {Cycle(parent,timerIndex,interval,blockSelector,buttonSelector,animateTime,index);},interval);
	}
})(jQuery);

