function gallery(_obj) {
	// defaults options
			
	var _this = this;
	_this.options = {
		hold: 'div.gallery',
		duration: 1200,
		slideElement: 1,
		autoRotation: false,
		clickDelay: 6000,
		effect: false,
		listOfSlides: 'ul > li',
		fleche: '.switcher li div img',
		switcher: false,
		mouseO: false,
		disableBtn: false,
		nextBtn: 'a.link-next, a.btn-next, a.next',
		prevBtn: 'a.link-prev, a.btn-prev, a.prev',
		circle: true,
		direction: false,
		animateEffect: "easeInOutExpo",
		run: true
	};
	for(key in _obj) _this.options[key] = _obj[key];
	
	// Variables
	$(_this.options.hold).each(function(){
		var _hold = $(this);
		var _el = _hold.find(_this.options.listOfSlides);
		if (_this.options.effect) var _list = _el;
		else var _list = _el.parent();
		var _fleche = _hold.find(_this.options.fleche);
		var _switcher = _hold.find(_this.options.switcher);
		var _next = _hold.find(_this.options.nextBtn);
		var _prev = _hold.find(_this.options.prevBtn);
		var _count = _el.index(_el.filter(':last'));
		var _w = _el.outerWidth(true);
		var _h = _el.outerHeight(true);
		var _hf = 30;
		if (_this.options.autoRotation) var _t;
		if (_this.options.switcher) var _active = _switcher.index(_switcher.filter('.active:eq(0)'));
		else var _active = _el.index(_el.filter('.active:eq(0)'));
		if (_active < 0) _active = 0;
		var _last = _active;
		
		// Installation directions
		if (!_this.options.direction) {
			var _wrapHolderW = Math.ceil(_list.parent().width() / _w);
			if (((_wrapHolderW - 1) * _w + _w / 2) > _list.parent().width()) _wrapHolderW--;
		}
		else{
			var _wrapHolderW = Math.ceil(_list.parent().height()/_h);
			if (((_wrapHolderW-1)*_h + _h/2) > _list.parent().height()) _wrapHolderW--;
		}
		
		// Setting "fade" or "slide" effect
		if (!_this.options.effect) var rew = _count - _wrapHolderW + 1;
		else var rew = _count;
		if (!_this.options.effect) {
			if (!_this.options.direction) _list.css({marginLeft: -(_w * _active)})
			else _list.css({marginTop: -(_h * _active)})
		}
		else {
			_list.css({
				opacity: 0
			}).removeClass('active').eq(_active).addClass('active').css({
				opacity: 1
			}).css('opacity', 'auto');
			_switcher.removeClass('active').eq(_active).addClass('active');
		}
		
		// Disable or enable buttons "prev next"
		if (_this.options.disableBtn) {
			if (_count < _wrapHolderW) _next.addClass(_this.options.disableBtn);
			_prev.addClass(_this.options.disableBtn);
		}
		
		// Function to "fade"
		function fadeElement(){
			if (_last != _active) {
				_list.eq(_last).animate({opacity:0}, {queue:false, duration: _this.options.duration});
				_list.removeClass('active').eq(_active).addClass('active').animate({
					opacity:1
				}, {queue:false, duration: _this.options.duration, complete: function(){
					$(this).css('opacity','auto');
				}});
				if (_this.options.switcher) _switcher.removeClass('active').eq(_active).addClass('active');
				_last = _active;
			}
		}
		
		// Function for "slide"
		function scrollEl(){						
			if (_last != _active) {							
				if (!_this.options.direction) {
					_list.animate({marginLeft: -(_w * _active)}, {queue:true, duration: _this.options.duration, easing:  _this.options.animateEffect});
				}
				else _list.animate({marginTop: -(_h * _active)}, {queue:false, duration: _this.options.duration, easing: _this.options.animateEffect})
				
				if (_this.options.switcher){ _switcher.removeClass('active').eq(_active).addClass('active'); }
				_last = _active;
			}
		}
		function toPrepare(){
			if (!_this.options.run) return;
			if ((_active == rew) && _this.options.circle) _active = -_this.options.slideElement;
			for (var i = 0; i < _this.options.slideElement; i++){
				_active++;
				if (_active > rew) {
					_active--;
					if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
				}
			};
			
			if (_active == rew) if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.addClass(_this.options.disableBtn);
			if (!_this.options.effect){ scrollEl(); }
			else fadeElement();
			
			runTimer();
		}
		function runTimer(delay){
			_this.options.run = true;
		    if (typeof delay == "undefined") delay = _this.options.autoRotation;
		    if (delay) {
				clearTimeout(_t);
    			_t = setTimeout(toPrepare, delay);
			}
		}
		
		function test(value){
			_fleche.animate({marginTop: value}, {queue:true, duration: _this.options.duration, easing:  _this.options.animateEffect});	
		}
		
		_next.click(function(){
			if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.removeClass(_this.options.disableBtn);
			toPrepare();
			runTimer(_this.options.clickDelay);
			return false;
		});
		_prev.click(function(){
			if (_this.options.disableBtn &&(_count > _wrapHolderW)) _next.removeClass(_this.options.disableBtn);
			if ((_active == 0) && _this.options.circle) _active = rew + _this.options.slideElement;
			for (var i = 0; i < _this.options.slideElement; i++){
				_active--;
				if (_active < 0) {
					_active++;
					if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
				}
			};
			if (_active == 0) if (_this.options.disableBtn &&(_count > _wrapHolderW)) _prev.addClass(_this.options.disableBtn);
			if (!_this.options.effect) scrollEl();
			else fadeElement();
			runTimer(_this.options.clickDelay);
			return false;
		});
		if (_this.options.switcher)_switcher.click(function(){
			_active = _switcher.index($(this));
			if (!_this.options.effect) scrollEl();
			else fadeElement();
			runTimer(_this.options.clickDelay);
			return false; });
			
			runTimer(_this.options.autoRotation);
			_this.stop = function(){ _this.options.run = false; }
			_this.play = runTimer;
		});
}

function dropdownToggle(event) {
    if (event.which == 49 || event.keyCode == 49) {
        dropdown = $("#effect-box");
        if ($("#effect-box:visible").length > 0) {
            dropdown.hide();
        } else {
            dropdown.show();
        }
    }
}


