$.extend($.fn, {

	deactivateButton: function() {
		this.css('opacity', 0.25);
		return this;
	},

	activateButton: function() {
		this.css('opacity', 1);
		return this;
	},
	
	equalizeChildrenHeight: function( selector ) {
		var elements = $(this).find( selector );
		var size = 0;
		for ( var i = 0, l = elements.length; i < l; i++ ) {
			size = Math.max( size, elements[i].offsetHeight-10 );
		}
		for ( var i = 0, l = elements.length; i < l; i++ ) {
			elements[i].style.height = size + 'px';
		}
	},
	
	scrollContent: function(options) {

		var content = options.content || '.content';
		var items = options.items || 'img';
		var leftButton = options.leftButton || '<a href="javascript:void(0)">&lt;</a>';
		var rightButton = options.rightButton || '<a href="javascript:void(0)">&gt;</a>';
		var itemDuration = options.itemDuration || 150;

		var stop = function() {
			$(this).data('scrolled').stop();
			return false;
		};

		var rAnim = function() {
			var btn = $(this);
			var scrolled = btn.data('scrolled');
			var maxShift = btn.data('maxShift');
			var duration = btn.data('duration');
			var lft = parseInt(scrolled.css('left'), 10);
			if (lft == -maxShift) { return; }
			scrolled.animate(
				{ left: -maxShift + 'px' },
				Math.round(duration * (maxShift + lft) / maxShift),
				'swing',
				function() { btn.deactivateButton(); }
			);
			btn.data('l').activateButton();
			return false;
		};

		var lAnim = function() {
			var btn = $(this);
			var scrolled = btn.data('scrolled');
			var maxShift = btn.data('maxShift');
			var duration = btn.data('duration');
			var lft = parseInt(scrolled.css('left'), 10);
			if (lft == 0) { return; }
			scrolled.animate(
				{ left: '0px' },
				Math.round(-duration * lft / maxShift),
				'swing',
				function() { btn.deactivateButton(); }
			);
			btn.data('r').activateButton();
			return false;
		};

		this.each(function() {
			var h = $(this);
			var hc = h.find(content);
			var a = hc.find(items);

			var cHeight = a.height();
			var cWidth = a.width() * a.length;

			hc.wrapInner(
				'<div style="overflow:hidden;width:100%;height:' + cHeight + 'px;position:relative"><div style="width:' + cWidth + 'px;height:100%;position:absolute;left:0;top:0"></div></div>'
			);

			var vWidth = h.find('>div').width(); // $(this).innerWidth() works wrong for IE6

			if (cWidth <= vWidth) {
				/* scrolling not needed */
				return;
			}

			var maxShift = cWidth - vWidth;

			var duration = itemDuration * a.length;

			var scrolled = hc.find('>div>div');

			var l = $(leftButton).prependTo(h).mousedown(lAnim).deactivateButton();
			var r = $(rightButton).appendTo(h).mousedown(rAnim).activateButton();
			l.add(r).mouseup(stop).mouseout(stop).data('scrolled', scrolled).data('maxShift', maxShift).data('duration', duration);
			l.data('r', r);
			r.data('l', l);
		});

		return this;
	}
});
