/* 
* jQuery slideShow v1.2.0
*/

jQuery.fn.slideShow = function(_options){    
	// defaults options
	var _options = jQuery.extend({
		slideEl:'div.slide',
		linkNext:'a.next',
		linkPrev:'a.prev',
		linkPause:'a.pause',
		numElement:'div.slideNav li a',
		duration:500,
		autoSlideShow:false,
		switchTime:3000,
		noCicle:false,
		stopable: false,
		disableClass:'no-active',
		event:'click',
		currentEl:'span.cur',
		allEl:'span.all'    
	},_options);
	return this.each(function(){
		var _THIS = jQuery(this);
		var _slideEl = $(_options.slideEl, _THIS);
		var _linkNext = $(_options.linkNext, _THIS);
		var _linkPrev = $(_options.linkPrev, _THIS);
		var _linkPause = $(_options.linkPause, _THIS);
		var _numElement = $(_options.numElement, _THIS);
		var _currentEl = $(_options.currentEl, _THIS);
		var _allEl = $(_options.allEl, _THIS)

		var _duration = _options.duration;
		var _switchTime = _options.switchTime + _duration;
		var _numElActive, _timer = false, _hover = false, _current = 0, _next = 0, _pause = true;
		if (!_slideEl.filter('.active').length) {
			_slideEl.eq(0).addClass('active');
			_current = 0;
		} else {
			_current = _slideEl.index(_slideEl.filter('.active'));
		}
		_slideEl.not(".active").hide();

		if (_options.autoSlideShow) {
			_pause = false;
			_timer = setTimeout(function(){nextEl()},_switchTime);
			if (_linkPause.length && _options.linkPause) _linkPause.addClass('play')
		}
		if (_options.currentEl && _currentEl.length) {
			_allEl.html(_slideEl.length);
			currentNum();
		}
		if (_linkNext.length && _options.linkNext) {
			_linkNext.click(function(){
				if (_timer) clearTimeout(_timer);
				_pause = true;
				nextEl();
				return false;
			});
		}
		if (_options.noCicle) {
			_linkPrev.addClass('prev-'+_options.disableClass);
		}
		if (_linkPrev.length && _options.linkPrev) {
			_linkPrev.click(function(){
				if (_timer) clearTimeout(_timer);
				_pause = true;
				_linkNext.removeClass('next-'+_options.disableClass);
				if (!_slideEl.is(':animated') && !$(this).hasClass('prev-'+_options.disableClass)) {
					_next = _current-1;
					if (_next < 0) _next = _slideEl.length-1;
					if (_options.noCicle && _next-1 < 0){
						$(this).addClass('prev-'+_options.disableClass);
					}
					fadeElement();
					if(_options.stopable) pauseCode();
					else if (_options.autoSlideShow) {
						_pause = false;
						_timer = setTimeout(function(){nextEl()},_switchTime);
						if (_linkPause.length && _options.linkPause) _linkPause.addClass('play')
					}
				}
				return false;
			});
		}
		if (_numElement.length && _options.numElement) {
			_numElement.bind(_options.event, function(){
				if (!_slideEl.is(':animated')){
					if (_timer) clearTimeout(_timer);
					_next = _numElement.index($(this));
					_linkNext.removeClass('next-'+_options.disableClass);
					_linkPrev.removeClass('prev-'+_options.disableClass);
					if (_options.noCicle && _next+1 >= _slideEl.length) _linkNext.addClass('next-'+_options.disableClass);
					if (_options.noCicle && _next-1 < 0) _linkPrev.addClass('prev-'+_options.disableClass);
					if (!_slideEl.eq(_next).hasClass("active")){
						fadeElement();
					}
				}
				return false;
			});
		}
		if (_linkPause.length && _options.linkPause) {
			_linkPause.click(function(){
				if (!_pause) {
					$(this).removeClass('play');
					$(this).text('Start Slideshow');
					if (_timer) clearTimeout(_timer);
					_pause = true;
				} else {
					$(this).addClass('play');
					$(this).text('Stop Slideshow');
					_timer = setTimeout(function(){nextEl()},_switchTime);
					_pause = false;
				}
				return false;
			});
		}
		function fadeElement(){
			if (_current != _next) {
				_slideEl.eq(_current).addClass('active');
				_slideEl.filter('.active').fadeOut(_duration, function(){
					$(this).removeClass('active');
				})
				_slideEl.eq(_next).fadeIn(_duration, function(){
					$(this).addClass('active');
					if(_options.stopable) pauseCode();
					else if (_options.autoSlideShow) {
						_pause = false;
						_timer = setTimeout(function(){nextEl()},_switchTime);
						if (_linkPause.length && _options.linkPause) _linkPause.addClass('play')
					};
				});
				_current = _next;
				if (_options.currentEl && _currentEl.length) currentNum();
			}
		};
		function currentNum() {
			_currentEl.html(_current+1);
		}
		function nextEl(){
			_linkPrev.removeClass('prev-'+_options.disableClass);
			if (!_slideEl.is(':animated') && !_linkNext.hasClass('next-'+_options.disableClass)) {
				if (_timer) clearTimeout(_timer);
				_next = _current+1;
				if (_next == _slideEl.length) _next = 0;
				if (_options.noCicle && _next+1 >= _slideEl.length) {
					_linkNext.addClass('next-'+_options.disableClass);
				}
				fadeElement();
			}
		};
		function pauseCode(){
			if (!_pause) {
				if (_linkPause.length && _options.linkPause) {
					if (_timer) clearTimeout(_timer);
					if (_linkPause.hasClass('play')) {
						_timer = setTimeout(function(){nextEl()},_switchTime);
					}
				}else {
					if (_timer) clearTimeout(_timer);
					_timer = setTimeout(function(){nextEl()},_switchTime);
				}
			}
		}
	});
}