$(function(){
	initGallery();
});
function initGallery(){
	jQuery('.gallery').cyclingGall({
		slideEl: 'ul',
		slides: '>li',
		switcher: '.switcher li',
		autoSlide: false,
		duration: 700,
		btPrev: '.btn-prev, .prev, .prev-btn, .btn-up, .up-btn, .link-prev',
		btNext: '.btn-next, .next, .next-btn, .btn-down, .down-btn, .link-next',
		direction: true,
		activeClass: 'active',
		changeHeight: false,
		afterInit: false
	});
}
$.fn.cyclingGall = function(_opt){
	var _options = $.extend({
		slideEl: '>ul',
		slides: '>li',
		switcher: false,
		autoSlide: 7000,
		duration: 700,
		btPrev: '.btn-prev, .prev, .prev-btn, .btn-up, .up-btn, .link-prev',
		btNext: '.btn-next, .next, .next-btn, .btn-down, .down-btn, .link-next',
		direction: false,
		activeClass: 'active',
		changeHeight: false,
		afterInit: false
	}, _opt);
	var _enabledClass = 'slide-enabled';

	return this.each(function(){
		if ($(this).hasClass(_enabledClass)) return;
		var _holder = $(this),
			_animSpeed = _options.duration,
			_duration = _options.autoSlide,
			_slideEl = $(_options.slideEl, _holder),
			_slides = $(_options.slides, _slideEl),
			_btNext = $(_options.btNext, _holder),
			_btPrev = $(_options.btPrev, _holder),
			_switcher = _options.switcher ? $(_options.switcher, _holder) : false,
			_duration = _options.autoSlide,
			_activeClass = _options.activeClass,
			_direction = _options.direction,
			afterInit = _options.afterInit,
			_frame = _options.changeHeight ? $(_options.changeHeight, _holder) : false;
		var _step = _slides.eq(0).outerWidth(true);
		var _active = 0;
		var _t;
		
		if (!_direction){
			var _offset = _step * (_slides.length);
			_slideEl.css('margin-left', -_offset);
			_slides.clone().appendTo(_slideEl);
			_slides.clone().appendTo(_slideEl);
		}
		else {
			_step = _slides.eq(0).outerHeight(true);
			var _offset = _step * (_slides.length);
			_slideEl.css('margin-top', -_offset);
			_slides.clone().appendTo(_slideEl);
			_slides.clone().appendTo(_slideEl);
		}
		if (_frame){
			if (_frame.height() != _slides.eq(_active).height()) _frame.css({
				'height': _slides.eq(_active).height()
			})
		}
			
		function changeSlide(_to){
			if (_switcher) {
				_switcher.eq(_active).removeClass(_activeClass);
				if (_to < 0) _switcher.eq(_slides.length-1).addClass(_activeClass);
				else if (_to > _slides.length-1) _switcher.eq(0).addClass(_activeClass);
				else _switcher.eq(_to).addClass(_activeClass);
			}
			if (_frame){
				var _toSl = _to;
				if (_to < 0) _toSl = _slides.length-1
				else if (_to > _slides.length-1) _toSl = 0;
				if (_frame.height() != _slides.eq(_toSl).height()) _frame.animate({
					'height': _slides.eq(_toSl).height()
				}, _animSpeed)
			}
			
			if (_direction){
				_slideEl.animate({
					'margin-top': -_step*_to - _offset
				}, _animSpeed, function(){
					_active = _to;
					if (_active < 0) {
						_active = _slides.length-1;
						_slideEl.css('margin-top',-_offset - _step*_active)
					}
					else if (_active > _slides.length-1) {
						_active = 0;
						_slideEl.css('margin-top',-_offset)
					}
				})
			}
			else {
				_slideEl.animate({
					'margin-left': -_step*_to - _offset
				}, _animSpeed, function(){
					_active = _to;
					if (_active < 0) {
						_active = _slides.length-1;
						_slideEl.css('margin-left',-_offset - _step*_active)
					}
					else if (_active > _slides.length-1) {
						_active = 0;
						_slideEl.css('margin-left',-_offset)
					}
				})
			}
		}
		
		if (_duration) {
			_t = setInterval(function(){
				changeSlide(_active+1)
			}, _duration)
			
			_holder.mouseenter(function(){
				if (_t) clearInterval(_t);
			}).mouseleave(function(){
				if (_t) clearInterval(_t);
				_t = setInterval(function(){
					changeSlide(_active+1)
				}, _duration)
			})
		}
		
		if (_switcher) {
			_switcher.click(function(){
				if (!_slideEl.is(':animated')) {
					changeSlide(_switcher.index($(this)));
				}
				return false;
			})
		}
		
		if (_btNext) {
			_btNext.click(function(){
				if (!_slideEl.is(':animated')) {
					changeSlide(_active+1);
				}
				return false;
			})
		}
		if (_btPrev) {
			_btPrev.click(function(){
				if (!_slideEl.is(':animated')) {
					changeSlide(_active-1);
				}
				return false;
			})
		}
		if (typeof(afterInit) == 'function') afterInit();
	});
}
