/* 
* 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,
		disableClass:'no-active',
		event:'click',		
		currentEl:'span.cur',		
		allEl:'span.all'    
	},_options);
    return this.each(function(){
		var _wait = false;
		var _flag = false;
	    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;
		var _numElActive, _timer = false, _hover = false, _current = 0, _next = 0, _pause = true;
		
		var _slider = jQuery('ul.navigation');
		var _controls = jQuery('ul.navigation > li');
		var _controlW = 0;
		var _liWidth = _controls.outerWidth(true);
		
		_controls.each(function(){
			var _thisW = jQuery(this).outerWidth(true);
			_controlW = _controlW + _thisW;
		});
		var _holderW = jQuery('div.area').find('div.wrap').outerWidth();
		var _btnNext = jQuery('div.area').find('a.next');
		var _btnPrev = jQuery('div.area').find('a.prev');
		
		
		if (!_slideEl.filter('.active').length) {
			_slideEl.eq(0).addClass('active');
			_current = 0;
		} else {
			_current = _slideEl.index(_slideEl.filter('.active'));
		}
		_slideEl.not(".active").hide();
		
		if ($(_numElement).length && _options.numElement) activeNumEl();
		if (_options.autoSlideShow) {
			_pause = false;
			_timer = setTimeout(function(){nextEl()},_switchTime);
			if (_linkPause.length && _options.linkPause) _linkPause.addClass('play')	
			contentHover();
		}
		if (_options.currentEl && _currentEl.length) {
			_allEl.html(_slideEl.length);
			currentNum();
		}
		if (_linkNext.length && _options.linkNext) {
			_linkNext.click(function(){
				nextEl();
				return false;
			});
		}
		_btnNext.click(function(){
			_flag = true;
			if (_wait) clearTimeout(_wait);
			if(_next < _controls.length - 9){
				_next++;
				_slider.animate({
					marginLeft: -(_next)*(_controls.outerWidth() + 6)
				}, {
					duration: 1000,
					queue: false
				});
			}
			else{
				_next = 0;
				_slider.animate({
					marginLeft: -(_next)*(_controls.outerWidth() + 6)
				}, {
					duration: 1000,
					queue: false
				});	
			}
			return false;
		});
		_btnPrev.click(function(){
			_flag = true;
			if (_wait) clearTimeout(_wait);
			if(_next > 0){
				_next = _next - 1; 
				_slider.animate({
					marginLeft: - _next*(_controls.outerWidth() + 6)
				}, {
					duration: 1000,
					queue: false
				});	
			}
			else{
				_next = _controls.length - 9;
				_slider.animate({
					marginLeft: - _next*(_controls.outerWidth() + 6)
				}, {
					duration: 1000,
					queue: false
				});	
			}
			return false;
		});
		
		if (_options.noCicle) {
			_linkPrev.addClass('prev-'+_options.disableClass);
		}
		if (_linkPrev.length && _options.linkPrev) {	
			_linkPrev.click(function(){
				_linkNext.removeClass('next-'+_options.disableClass);
				if (!_slideEl.is(':animated') && !$(this).hasClass('prev-'+_options.disableClass)) {
					if (_timer) clearTimeout(_timer);
					_next = _current-1;
					if (_next < 0) _next = _slideEl.length-1;
					if (_options.noCicle && _next-1 < 0) {
						$(this).addClass('prev-'+_options.disableClass);
					}
					fadeElement();
					activeNumEl();
					pauseCode();
					scrollTo(_next);
				}
				return false;
			});
		}
		if (_numElement.length && _options.numElement) {
			_numElement.bind(_options.event, function(){
				if (!_slideEl.is(':animated')) {
					_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 (_timer) clearTimeout(_timer);
					if (!_slideEl.eq(_next).hasClass("active")){
						fadeElement();
						activeNumEl();
						pauseCode();
						scrollTo(_next);
					}
				}
				return false;
			});
		}
		if (_linkPause.length && _options.linkPause) {
			_linkPause.click(function(){
				if (!_pause) {
					$(this).removeClass('play');
					clearTimeout(_timer);
					_pause = true;
				} else {
					$(this).addClass('play');
					_timer = setTimeout(function(){nextEl()},_switchTime);
					_pause = false;
				}
				return false;
			});
		}
		function fadeElement(){
			if (_current != _next) {
				_slideEl.removeClass('active');
				_slideEl.eq(_current).addClass('hide');
				_slideEl.eq(_next).fadeIn(_duration, function(){
					_slideEl.filter('.hide').hide().removeClass('hide');
				}).addClass('active');
				_current = _next;
				if (_options.currentEl && _currentEl.length) currentNum();
			}
		};
		function currentNum() {
			_currentEl.html(_current+1);
		}
		function activeNumEl() {
			_numElement.parent().removeClass("active");
			_numElement.eq(_current).parent().addClass("active");
		};
		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();
				activeNumEl();
				pauseCode();
				scrollTo(_next);
			}
		};
		function pauseCode(){
			if (!_pause) {
				if (_linkPause.length && _options.linkPause) {
					if (_linkPause.hasClass('play')) {
						_timer = setTimeout(function(){nextEl()},_switchTime);
					}					
				} else {
					_timer = setTimeout(function(){nextEl()},_switchTime);
				}
			}
		}
		function contentHover() {
			_hover = true;
			_slideEl.mouseenter(function() {
				if (_timer) clearTimeout(_timer);
			}).mouseleave(function(){
				pauseCode();
			});			
		}
		function scrollTo(_index){
			if(_flag == false){
				var _beforeW = 0;
				for (var _i=0; _i<_index; _i++) {
					var _currentW = _controls.eq(_i).outerWidth(true);
					_beforeW = _beforeW + _currentW;
				};	
				if(_beforeW >= _holderW - 38){
					_Left = -(_currentW * _index) + _holderW - _currentW - 6;
					_slider.animate({
						marginLeft: _Left
					}, 1000);
					_next = _index;
				}
				else{
					_slider.animate({
						marginLeft: 0
					}, 1000);
					_next = 0;
				}
			}
			else{
				_wait = setTimeout(function(){
				_flag = false;
				},3000);
			}
			
		};
    });
}

$(document) .ready(function(){
	// defaults options	    
	$('#carousel').slideShow({		
		slideEl:'div.holder ul li',		
		linkNext:'a.link-next',		
		linkPrev:'a.link-prev',		
		linkPause:'a.link-stop',		
		numElement:'ul.navigation li a',		
		duration:600,		
		switchTime:4000,
		currentEl:'em.cur',
		autoSlideShow:true,		
		allEl:'em.all'    
	});
});

