(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);

var CycloPhotoGallery = (function() {

	var isSliding = false;
	var sliderEl;
	var sliderContainer;

	var Slider = function(element, gallery) {

		var sliderOff;
		var sliderMouseOff;
		var sliderTop = 0;
		var sld;
		var sldHeight;
		var sldContainer;
		var sldContainerHeight;
		var sldContainerOffset;
		var gallery;
		var galleryFactor;
		var bottomSlider;

		function init(el, gal) {
			sld = el;
			sldHeight = sld.height();
			sldContainer = sld.parent();
			bottomSlider = sldContainer.parent().find('.scroller-controls-bottom').height();
			sldContainer.height(sldContainer.height() - bottomSlider * 2);
			sldContainerHeight = sldContainer.height();
			sldContainerOffset = sldContainer.offset();

			gallery = gal;

			if (gallery.height() < sliderContainer.height()) {
				sliderContainer.parent().hide();
				sliderContainer.parent().parent().css('height','auto');
				return;
			}

			galleryFactor = (gallery.height() - gallery.parent().height()) / (sldContainerHeight - sldHeight);

			sld.mousedown(sliderClick);
			$q(window).mousemove(sliderMove);
			$q(window).mouseup(sliderStop);

			gallery.bind('mousewheel', function(evt, delta) {
				sliderMoveMouse(delta);
			});

			sliderOff = sld.offset();
		};

		function sliderClick(evt) {
			evt.preventDefault();
			evt.stopPropagation();

			isSliding = true;
			sliderMouseOff = evt.pageY - sliderOff.top;
		};

		function sliderMove(evt) {

			if (!isSliding) return;

			var coord = evt.pageY - sliderOff.top - sliderMouseOff + sliderTop;

			if (coord < 0 || (coord + sldHeight) > sldContainerHeight) return;

			sld.css(
				{
					top: coord
				}
			);

			gallery.css(
				{
					top: -coord * galleryFactor
				}
			);
		};

		function sliderMoveMouse(delta) {

			var coord = parseInt(sld.css('top')) - delta*2;

			if (coord < 0 || (coord + sldHeight) > sldContainerHeight) return;

			sld.css(
				{
					top: coord
				}
			);

			gallery.css(
				{
					top: -coord * galleryFactor
				}
			);

			sliderOff = sld.offset();
			sliderTop = parseInt(sld.css('top'));
		};

		function sliderStop(evt) {
			if (isSliding) {
				isSliding = false;
				sliderOff = sld.offset();
				sliderTop = parseInt(sld.css('top'));
			}
		};

		init(element, gallery);

	};

	function initGallery(cont, slider, block) {
		sliderContainer = cont;
		sliderEl = new Slider(slider, block);
	}

	return {
		init : initGallery
	}
})();

$q(function(){
	CycloPhotoGallery.init($q('.scroller-controls-column'), $q('.scroller-controls-slider'), $q('.scroller-panel'));
});

