/*
 * jQuery galleryCircle v1.0.0
 */

jQuery.fn.galleryCircle = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		btPrev: 'a.prev',
		btNext: 'a.next',
		holderList: 'div',
		scrollElParent: 'ul',
		scrollEl: 'li',
		step: false,  //boolean false= scroll on window width, true = scroll on each element width
		innerMargin: 0,
		duration : 1500
	},_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.holderList, _this);
		var _scrollElParent = $(_options.scrollElParent, _holderList);
		var _scrollEl = $(_options.scrollEl, _scrollElParent);
		var _cloneEl = _scrollEl.clone();
		var _cloneEl2 = _scrollEl.clone();
		var _scrollElWidth = _scrollEl.outerWidth(true);
		var _step;
		var _widthSum = 0;
		_scrollEl.each(function(){_widthSum += $(this).outerWidth(true);})
		
		if (!_options.step) _step = _holderList.outerWidth();
		var _margin = _widthSum;
		
		_scrollElParent.append(_cloneEl);
		_scrollElParent.prepend(_cloneEl2);
		_scrollElParent.css('marginLeft', (-_margin+_options.innerMargin));
		
		if (_options.btNext) {
			_next.click(function(){
				if (!_scrollElParent.is(':animated')) {
					nextSlides();
				}
				return false;
			});
		}
		if (_options.btPrev) {
			_prev.click(function(){
				if (!_scrollElParent.is(':animated')) {
					prevSlides();
				}
				return false;
			});
		}

		function getCurElIndex(){
			var _curMargin = parseInt(_scrollElParent.css('marginLeft')) + _widthSum - _options.innerMargin;
			for(i=0; i < _scrollEl.length; i++){
				if (_curMargin == 0) return i;
				if (_curMargin <= _options.innerMargin) _curMargin += _scrollEl.eq(i).outerWidth(true);
				else _curMargin -= _scrollEl.eq(i).outerWidth(true);
				if (_curMargin == _options.innerMargin) return i+1;
			}
		}
		function nextSlides(){
			if (_options.step) {
				_curElIndex = getCurElIndex();
				_step =_scrollEl.eq(_curElIndex).outerWidth(true)* _options.step;
			};
			_margin += _step;
			_scrollElParent.animate({'marginLeft':(-_margin+_options.innerMargin)}, {duration:_options.duration, complete:function(){
				if (_margin >= _widthSum*2) {
					_margin = _widthSum + (_margin - _widthSum*2);
				}
				_scrollElParent.css({'marginLeft':-_margin+_options.innerMargin});
			}});
		}
		function prevSlides(){
			if (_options.step) {
				_curElIndex = getCurElIndex();
				if (_curElIndex == 0) _curElIndex= _scrollEl.length;
				_step = _scrollEl.eq(_curElIndex-1).innerWidth(true);
			};
			_margin -= _step;
			_scrollElParent.animate({'marginLeft':(-_margin+_options.innerMargin)}, {duration:_options.duration, complete:function(){
				if (_margin < _widthSum) {
					_margin = _widthSum*2 - (_widthSum - _margin);
				}
				_scrollElParent.css({'marginLeft':-_margin+_options.innerMargin});
			}});
		}	
		
	});
}

