jQuery.fn.fixed = function(params) {	
	var c = this;
	var win = jQuery(window);
	c.css('position', 'absolute');

	var h = c.height();
	var w = c.width();

	var f = function(noanimate) {
		var T = win.scrollTop();
		var L = win.scrollLeft();
		var H = win.height();
		var W = win.width();

		var css = {};

		// horizontal
		if (typeof params.left == 'number') {
			css.left = L + params.left;	
		}
		else if (typeof params.right == 'number') {
			css.left = L + W - w;	
		}

		// vertical
		if (typeof params.top == 'number') {
			css.top = T + params.top;	
		}
		else if (typeof params.bottom == 'number') {
			css.top = T + H - h;	
		}
		if (c.attr('fixed')) {
			c.stop().animate(css, 'normal');
		}
		else {
			c.css(css);
			c.attr('fixed', true);
		}
	};

	f();
	win.bind('scroll', f).bind('resize', f);
	return this;
};

jQuery.fn.scrolling = function(params) {
	var c = this;
	c.mouseover(function(){
		jQuery(this).attr('-mouseover', true);
	}).mouseout(function() {
		jQuery(this).attr('-mouseover', false);
	});
	var f = function() {
		if (c.attr('-mouseover')) { return; }

		var element = c[0];

		var top = undefined;
		var left = undefined;
		if (params.x) { 
			left = c.scrollLeft() + params.x;
			if (left < 0) { left = element.scrollWidth; }
			if (left > element.scrollWidth - c.width()) { left = 0; }
		}
		if (params.y) { 
			top = c.scrollTop() + params.y;
			if (top < 0) { top = element.scrollHeight; }
			if (top > element.scrollHeight - c.height()) { top = 0; }
		}

		if (params.y) {	
			c.scrollTop(top);
		}
		if (params.x) {
			c.scrollLeft(left);
		}
		/*
		c.fadeOut(function() {
			if (params.y) {	
				c.scrollTop(top);
			}
			if (params.x) {
				c.scrollLeft(left);
			}
			c.fadeIn();
		});
		*/
	};
	setInterval(f, params.interval);
	return this;
};

