;(function($){
	jQuery.fn.vvGalleryScroll = function(_options){
		// defaults options	
		var _options = jQuery.extend({
			btnPrev: 'a.link-prev',
			btnNext: 'a.link-next',
			holderList: 'div',
			scrollElParent: 'ul',
			scrollEl: 'li',
			thumbs: false,
			thumbsCreate: false,
			duration : 700,
			ajaxEls: false,
			step: false,
			pause: false,
			event: 'click',
			circleSlide: true,
			disableClass: 'disable',
			autoSlide:false,
			onBeforeChange: null,
			onChange: null
		},_options);

		return this.each(function(){
			var _this = this;

			var _holderBlock = jQuery(_options.holderList,_this);
			var _moover = jQuery(_options.scrollElParent,_holderBlock).css('position','relative');
			var _liWidth = jQuery(_options.scrollEl,_moover).outerWidth(true);
			var _gWidth = _holderBlock.width();
			var _liSum = jQuery(_options.scrollEl,_moover).length * _liWidth;
			var _thumbs = _options.thumbs ? (jQuery(_options.thumbs,_this).length ? jQuery(_options.thumbs,_this): false) : false;
			var _step = 0, _t = null, _mM=0;
			var _pause =  _options.pause ? jQuery(_options.pause,_this) : false;
			var _play = _options.play ? jQuery(_options.play,_this) : false;
			var _a = 0;
			if(_options.thumbsCreate){
				var _html = '<ul>';
				for(var i=0; i<jQuery(_options.scrollEl,_moover).length; i++) {
					_html+='<li><a href="#">'+(i+1)+'</a></li>';
				};
				_html += '</ul>';
				_thumbs.html(_html);
				_thumbs = _thumbs.find('a');
			}
			if(_options.thumbsCreate) _thumbs.removeClass('active').eq(_a).addClass('active');
			if(_options.ajaxEls){
				var ajaxEls = $(_options.ajaxEls, this);
				var ajaxParent = ajaxEls.parent();
				ajaxEls.parent().css({position: 'relative',height: ajaxParent.height()});
				ajaxEls.css({position: 'absolute',top:0, left:0}).addClass('active');
			}
	//step
			if(typeof(_options.step)=='number') _step = _options.step;
			else if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
			if(!_options.circleSlide){
				if(_mM == 0) jQuery(_options.btnPrev,_this).addClass(_options.disableClass);
				else if(_mM ==_liSum-_gWidth) jQuery(_options.btnNext,_this).addClass(_options.disableClass);
			};
	//prev btn
			if(jQuery(_options.btnPrev, _this)){
				jQuery(_options.btnPrev, _this).bind(_options.event, function(){
					if(!jQuery(this).hasClass(_options.disableClass)){
						jQuery(_options.btnNext,_this).removeClass(_options.disableClass);
						if(_mM - _step<0) (_mM!=0) ? _mM=0 : (_options.circleSlide ? _mM = _liSum - _gWidth : jQuery(_options.btnPrev,_this).addClass(_options.disableClass));
						else _mM -= _step;
						if(_a!= 0) _a--;
						else _a =jQuery(_options.scrollEl,_moover).length-1;
						_this.rotate(_mM);
					}
					return false;
				});
			};
	//next btn
			if(jQuery(_options.btnNext, _this)){
				jQuery(_options.btnNext, _this).bind(_options.event, function(){
					if(!jQuery(this).hasClass(_options.disableClass)){
						jQuery(_options.btnPrev,_this).removeClass(_options.disableClass);
						if(_mM + _step >_liSum - _gWidth) (_mM!= _liSum - _gWidth) ? (_mM = _liSum - _gWidth) : (_options.circleSlide ? _mM = 0 : jQuery(_options.btnNext,_this).addClass(_options.disableClass));
						else _mM += _step;
						if(_a!= jQuery(_options.scrollEl,_moover).length-1) _a++;
						else _a =0;
						_this.rotate(_mM);
					}
					return false;
				});
			};
	//animate
			_this.rotate = function(_mM){
				if(_t) clearTimeout(_t);
				if (jQuery.isFunction(_options.onBeforeChange)) {
					_options.onBeforeChange.apply(_this);
				}
				if(!_options.circleSlide){
					if(_mM == 0) jQuery(_options.btnPrev,_this).addClass(_options.disableClass);
					else if(_mM ==_liSum-_gWidth) jQuery(_options.btnNext,_this).addClass(_options.disableClass);
				};
				if(_options.thumbsCreate) _thumbs.removeClass('active').eq(_a).addClass('active');
				_moover.animate({left: -_mM},{duration: _options.duration, queue: false, complete: function(){
					if (jQuery.isFunction(_options.onChange)) {
						_options.onChange.apply(_this);
					}
					_this.autoslide();
				}});
			};
	//autoslide
			_this.autoslide = function(){
				if(_options.autoSlide && _liSum >= _gWidth){
					if(_t) clearTimeout(_t);
					_t = setTimeout(function(){
						jQuery(_options.btnPrev,_this).removeClass(_options.disableClass);
						if(_mM + _step >_liSum - _gWidth) (_mM!= _liSum - _gWidth) ? (_mM = _liSum - _gWidth) : (_options.circleSlide ? _mM = 0 : jQuery(_options.btnNext,_this).addClass(_options.disableClass));
						else _mM += _step;
						if(_a!= jQuery(_options.scrollEl,_moover).length-1) _a++;
						else _a =0;
						_this.rotate(_mM);
					}, _options.autoSlide);
				};
			};
			_this.autoslide();
	//disable btns next/prev if need
			if (_liSum <= _gWidth) {
				jQuery(_options.btnPrev,_this).addClass(_options.disableClass).unbind(_options.event).click(function(){return false;});
				jQuery(_options.btnNext,_this).addClass(_options.disableClass).unbind(_options.event).click(function(){return false;});
			};
	//thumbs
			if(_thumbs){
				_thumbs.click(function(){
					if(!$(this).hasClass('active')){
						var _ind = _thumbs.index(this);
						_a = _thumbs.index(_thumbs.filter('.active'));
						_thumbs.removeClass('active');
						$(this).addClass('active');
						var _url = jQuery(this).find('a').attr('href').split('?')[0];
						var _data = jQuery(this).find('a').attr('href').split('?')[1];
						if(ajaxEls.filter('[rel='+_data+']').length){
							if(_ind > _a) ajaxRotate(ajaxEls.filter('[rel='+_data+']'), true);
							else ajaxRotate(ajaxEls.filter('[rel='+_data+']'), false);
						}else{
							showLoader(true);
							jQuery.ajax({
								url: _url,
								type: 'GET',
								data: _data+'&ajax=1',
								success: function(msg){
									var _new = $(msg).attr('rel',_data);
									_new.css({
										position: 'absolute',
										top:0,
										left: ajaxParent.width()
									});
									ajaxParent.append(_new);
									ajaxEls = ajaxParent.children();
									if(_ind > _a) ajaxRotate(_new, true);
									else ajaxRotate(_new, false)
									initLightbox();
									showLoader(false);
								},
								error: function(){
									alert('Error');
								}
							});
						}
					}
					return false;
				});
			}
		//play|pause
			if(_pause && _pause.length){
				_pause.click(function(){
					_play.removeClass('active');
					jQuery(this).addClass('active');
					if(_t) clearTimeout(_t);
					return false;
				});
			};
			if(_play && _play.length){
				_play.click(function(){
					_pause.removeClass('active');
					jQuery(this).addClass('active');
					_this.autoslide();
					return false;
				});
			};

			var _overlay = $('<div id="fader" />').css({
				'position': 'absolute',
				'top': ajaxParent.offset().top,
				'left': ajaxParent.offset().left,
				'width': ajaxParent.width(),
				'height': ajaxParent.height()+5,
				'display': 'none',
				'opacity': 0.3,
				'zIndex': 100
			});
			function showLoader(flag){
				if(!$('body').find(_overlay).length){
					$('body').append(_overlay);
				}
				if(flag) _overlay.fadeTo(300, 0.3);
				else _overlay.fadeOut(300);
			};
			
			function ajaxRotate(next, dir){
				if(dir){
					ajaxParent.children().filter('.active').css({left: 0}).animate({
						left: -ajaxParent.width()
					},{
						duration: _options.duration*2
					});
					ajaxParent.children().removeClass('active');
					next.css({left: ajaxParent.width()}).addClass('active').animate({
						left: 0
					},{
						duration: _options.duration*2
					});
				}else{
					ajaxParent.children().filter('.active').css({left: 0}).animate({
						left: ajaxParent.width()
					},{
						duration: _options.duration*2
					});
					ajaxParent.children().removeClass('active');
					next.css({left: -ajaxParent.width()}).addClass('active').animate({
						left: 0
					},{
						duration: _options.duration*2
					});
				}
			}
		});
	};
	function initLightbox(){
		if(typeof($.fancybox)=='function'){
			jQuery('.open-fancy').fancybox({
				margin				:	0,
				padding				:	0,
				overlayShow			:	true,
				overlayOpacity		:	0.6,
				overlayColor		:	'#000',

				titleShow			:	true,
				titlePosition		:	'over',
				titleFormat			:	null,

				transitionIn		:	'fade',
				transitionOut		:	'fade'
			})
		}
	}
	jQuery(document).ready(function(){
		jQuery('.whirligig-holder').vvGalleryScroll({
			btnPrev: 'a.link-prev',
			btnNext: 'a.link-next',
			ajaxEls: 'ul.whirligig > li',
			holderList: 'div.switch-holder',
			scrollElParent: '> ul',
			scrollEl: '> li',
			thumbs: 'div.switch-holder li',
			thumbsCreate: false,
			duration : 300,
			step: false,
			pause: false,
			event: 'click',
			circleSlide: true,
			disableClass: 'disable',
			autoSlide:false
		});
		VSA_initScrollbars();
		jQuery('.social a').tooltip({
			effect: 'slide'
		}).dynamic({ bottom: { direction: 'down', bounce: true } });
		initLightbox();
	})
})(jQuery)
