
(function($){

$.fn.scrollz = function(options) {
	
	options = $.extend({
		rails: '.items',
		wheels: '> .wrapper',
		items: '.item',
		controls: '.control'
	}, options || {})
	
	
	function Scroller(gal) {
		
		var self = this;
		self.stop = false;		

		self.gallery = $(gal);
		self.railz = $(options.rails, self.gallery);
		self.itemz = $(options.items, self.gallery);
			//.css({display: 'inline-block'});
			// Возможно из-за инлайнблока кое-где фейлил стопор прокрутки в ие6.
		self.wheelz = $(options.wheels, self.railz);
		self.axis = self.railz.height() > self.railz.width() ? 'y' : 'x';
	
/*------------------------*/	
	if (self.wheelz.length == 0) {
		var i = self.itemz.clone(true);
		self.wheelz = $(document.createElement('div'))
			.appendTo(self.railz)
			.append(i)
		self.itemz.remove();
		self.itemz = i;
	} else {
		self.wheelz = $(options.wheels, self.railz);
	}
	
	
	self.wheelz.css({
			position: 'relative',
			'float': 'left'
		})
	self.railz.css('position', 'relative')
/*------------------------*/

	self.lims = [];
	self.lims[0] = 0;

	if (self.axis == 'x') {
		self.shiftAxis = 'left';
		self.shift = jQuery(self.itemz[0]).outerWidth(true);
		self.along = 'width';
		self.wheelz.css({
			width: self.shift * self.itemz.length,
			height: self.railz.height(),
			left: 0
		})
		
		
	 } else {
		self.shiftAxis = 'top';
		self.shift = self.itemz.outerHeight(true);
		self.along = 'height';
		self.wheelz.css({
			width: self.railz.width(),
			height: self.shift * self.itemz.length,
			top: 0
		})
	}	
	
	
	
		self.diff = self.railz[self.along]() - self.wheelz[self.along]();
		self.lims[1] = self.railz[self.along]() - self.wheelz[self.along]();
		
		
		if (self.wheelz[self.along]() < self.railz[self.along]()) {
			return false;
		}

	
/*------------------------*/
	
	if (options.controls) {
		
		self.controlz = $(options.controls, self.gallery)
			.click(preMove)
		$(self.controlz[0]).data('dir', 1).css('opacity', 0);
		$(self.controlz[1]).data('dir', -1);
	}
	
	self.gallery.mousewheel(preMove);

/*------------------------*/	
	
	function preMove(e, delta) {
		self.move(e, delta, this);
		return false;		
	}
}
	


	Scroller.prototype.move = function(e, delta, target) {
		var self = this;
		
		if (!self.stop) {
			var dir;
			var position = parseInt(self.wheelz.css(self.shiftAxis));
			
			if (e.type == 'click') {
				dir = $(target).data('dir');
				var lim = dir > 0 ? self.lims[0] : self.lims[1];
			
			} else {
				dir = self.axis == 'y' ? Math.abs(delta)/delta : -Math.abs(delta)/delta;
				var lim = dir > 0 ? self.lims[0] : self.lims[1];
			}
			
			
			if (position != lim) {
				var where = position + dir * self.shift;
				self.wryyy(where);
					
				self.controlz.css('opacity', 1);
				if (position + self.shift * dir == lim) {
					
					$(self.controlz[(1-dir)/2]).css('opacity', 0);
				} else {
					
				}
				
			}				
		}
		
	}
	Scroller.prototype.wryyy = function(where) {
		//console.log('wryyyy');
		var self = this;
		var params = {};
		self.stop = true;
		params[self.shiftAxis] = where;
		self.wheelz.animate(params, function(){self.stop=false})		
	}	
	
	$.each(this, function(i){

		new Scroller(this);	

	})
}

})(jQuery)



