/*
  galleryCircle version 1.1.3
*/

jQuery.fn.galleryCircle = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		btPrev: 'a.link-prev',
		btNext: 'a.link-next',
		holderList: 'div',
		scrollElParent: '#supersize',
		scrollEl: '> li',
		duration : 700,
		slideNum: false,
		step: false,
		autoRotation:0
	},_options);

	return this.each(function(){
		var _this = jQuery(this);
		var _next = $(_options.btNext, _this).length ? $(_options.btNext, _this) : false;
		var _prev = $(_options.btPrev, _this).length ? $(_options.btPrev, _this) : false;
		var _holderList = $(_options.scrollElParent, _this).parent();
		var _scrollElParent = $(_options.scrollElParent, _holderList);
		var _scrollEl = $(_options.scrollEl, _scrollElParent);
		var _cloneEl = _scrollEl.clone();
		var _cloneEl2 = _scrollEl.filter(':first').clone();
		var _scrollElWidth = _scrollEl.outerWidth(true);
		
		var _length = _scrollEl.length;
		
		var _step = _holderList.outerWidth();		
		var _widthSum = _step * _scrollEl.length;
		var _margin = _widthSum;
		
		_scrollElParent.css('marginLeft', -_margin);
		
		var _all = $('span.all'),
			_nextSlide = $('span.next-slide'),
			_prevSlide = $('span.prev-slide');
			
		_all.html(_length);
		
		_scrollElParent.prepend(_cloneEl);
		_scrollElParent.append(_cloneEl2);
		
		_scrollEl = $(_options.scrollEl, _scrollElParent);
		
		_scrollEl.css('width',_step);
		
		if (_next) {
			_next.click(function(){
				if (!_scrollElParent.is(':animated')) {
					nextSlides();
				}
				return false;
			});
		}
		if (_prev) {
			_prev.click(function(){
				if (!_scrollElParent.is(':animated')) {
					prevSlides();
				}
				return false;
			});
		}
		
		var _timer = false;
		if (_options.autoRotation) {
			_timer = setInterval(function(){nextSlides();},_options.autoRotation);
		}
		
		if (_options.slideNum) {
			if (!$(_options.slideNum, _this).is('a')) {
				var _lis = '<ul>';
				for (var i=0; i<_widthSum/_step; i++) {
					_lis += '<li><a href="#">'+i+'</a></li>';
				}
				_lis += '</ul>';
				$(_options.slideNum, _this).append(_lis);
				var _tabs = $(_options.slideNum+' a', _this);
			} else _tabs = $(_options.slideNum, _this)
			_tabs.eq(0).parent().addClass('active');
			_tabs.each(function(i){
				$(this).click(function(){
					if (!_scrollElParent.is(':animated')) {
						setActive(i);
						if (_timer) {
							clearInterval(_timer);
							_timer = setInterval(function(){nextSlides();},_options.autoRotation);
						}
						_margin = _widthSum+_step*i;
						_scrollElParent.animate({'marginLeft':-_margin}, {duration:_options.duration});
					}
					return false;
				});
			});
		}
		function setActive(_i){
			if (_i != null) _current = _i;
			else {
				_current = (_margin-_widthSum)/_step;
			}
			var _n = _current+1,
				_p = _current-1;
				
			if (_n > _length-1) _n = 0;
			if (_p < 0) _p = _length - 1;
			
			_nextSlide.html(_n+1);
			_prevSlide.html(_p+1);
		}
		setActive();
		var _current = 0;
		function nextSlides(){
			if (_timer) {
				clearInterval(_timer);
				_timer = setInterval(function(){nextSlides();},_options.autoRotation);
			}
			_margin += _step;
			_scrollElParent.animate({'marginLeft':-_margin}, {duration:_options.duration, complete:function(){
				if (_margin >= _widthSum*2) {
					_margin = _widthSum + (_margin - _widthSum*2);
				}
				setActive();
				_scrollElParent.css({'marginLeft':-_margin});
			}});
		}
		function prevSlides(){
			if (_timer) {
				clearInterval(_timer);
				_timer = setInterval(function(){nextSlides();},_options.autoRotation);
			}
			_margin -= _step;
			_scrollElParent.animate({'marginLeft':-_margin}, {duration:_options.duration, complete:function(){
				if (_margin < _widthSum) {
					_margin = _widthSum*2 - (_widthSum - _margin);
				}
				setActive();
				_scrollElParent.css({'marginLeft':-_margin});
			}});
		}
		var _height, _width;
		$(window).resize(function(){
			if (!_scrollElParent.is(':animated')) {
				_current = (_margin-_widthSum)/_step;
				_step = _holderList.outerWidth();
				_widthSum = _step * _length;
				_margin = _current*_step + _widthSum;
				_scrollEl.css({'width':_step, 'height':_height});
				_scrollElParent.css({'marginLeft':-(_margin)});
			}
		});
		if ($.browser.opera)
			$(window).trigger('resize');
	});
}
