$(document).ready(function(){
/* 	if(typeof($().accordion)=='function'){
		$('ul.accordion').accordion({
			active: ".selected",
			autoHeight: false,
			header: ".opener",
			collapsible: true,
			event: "click"
		});
	} */

	jQuery('ul.accordion').vvAccordion({
		el: '> li',
		head: 'a.opener',
		content: 'div.slide',
		active: 'selected',
		event: 'click',
		duration: 400
	});

	jQuery('div.carusel-holder').vvGalleryScroll({
		holderList: 'div.g-hold',
		scrollElParent: '> ul',
		scrollEl: '> li',
		thumbs: 'div.paging',
		thumbsCreate: true,
		autoSlide:5000
	});

});

jQuery.fn.vvAccordion = function(_options){
	var _options = jQuery.extend({
		el: '> li',
		head: 'a.opener',
		content: 'div.ac-content',
		active: 'selected',
		event: 'click',
		collapsible: true,
		onBeforeAply: null,
		onChangeStart: null,
		onChange: null,
		onMade: null,
		duration: 400
	},_options);

	return this.each(function(){
		var _this = this;
		var _t = null;
		_this.duration = _options.duration;
		_this.list = $(_options.el, _this);
		_this.list.each(function(i){
			this.opener = $(_options.head, this);
			this.slider = $(_options.content, this);
			this.width = this.slider.width();
			this.height = this.slider.height();
			if($(this).hasClass(_options.active)){
				_this.active = this;
			};
			this.index = i;
		});
		if(!_this.active) _this.active = _this.list[0];
		if(jQuery.isFunction(_options.onBeforeAply)){
			_options.onBeforeAply.apply(_this);
		};
		_this.list.not(_this.active).each(function(){
			this.slider.css({height: '0px'});
		});
		_this.list.each(function(){
			var next = this;
			this.opener.bind(_options.event, function(){
				if($(this).nextAll('div.slide').length){
					if($(this).parent().hasClass(_options.active) && _options.collapsible){
						next.slider.animate({height: 0},{duration: _options.duration,
							complete: function(){
								$(_this.active).removeClass(_options.active);
								_this.active.slider.css({height: 0});
								_this.active = null;
								if(jQuery.isFunction(_options.onChange)){
									_options.onChange.apply(_this.active);
								};
								_this.curent = false;
							}});
					}else{
						if(jQuery.isFunction(_options.onChangeStart)){
							_options.onChangeStart.apply(_this.active);
						};
						if(_t) clearTimeout(_t);
						_t = setTimeout(function(){
							_this.curent = next;
							next.slider.animate({height: next.height},{duration: _options.duration,
							step:function(i, curObj){
								if(_this.active){
									var _p = curObj.now/curObj.end;
									if(_this.active !== next){
										var _thisValue = 0;
										if (curObj.prop == 'height') {
											_thisValue = _this.active.height - (_this.active.height * _p);
										}else{
											_thisValue = curObj.end - curObj.now;
										}
										eval('_this.active.slider.css({'+curObj.prop+':'+_thisValue+'})');
									}
								}
							},
							complete: function(){
								if(_this.active){
									$(_this.active).removeClass(_options.active);
									_this.active.slider.css({height: 0});
								}
								_this.active = next;
								$(_this.active).addClass(_options.active);
								_this.active.slider.css({height: _this.active.height});
								if(jQuery.isFunction(_options.onChange)){
									_options.onChange.apply(_this.active);
								};
								_this.curent = false;
							}});
						},150);
					}
					return false;
				}
			});
		});
		if(jQuery.isFunction(_options.onMade)){
			_options.onMade.apply(_this.active);
		};
	});
}

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,
		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="#">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></li>';
			};
			_html += '</ul>';
			_thumbs.html(_html);
			_thumbs = _thumbs.find('li');
		}
		if(_thumbs) _thumbs.removeClass('active').eq(_a).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(_thumbs) _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(){
				var _ind = _thumbs.index(this);
				_a = _ind;
				_thumbs.removeClass('active').eq(_a).addClass('active');
				_this.rotate(_step*_ind);
				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;
			});
		};
	});
};

