/*
 * jqDnR - Minimalistic Drag'n'Resize for jQuery.
 *
 * Copyright (c) 2007 Brice Burgess <bhb@iceburg.net>, http://www.iceburg.net
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * $Version: 2007.08.19 +r2
 */

(function($)
{
	$.fn.jqResize = function(h)
	{
		return i(this,h,'r');
	};

	$.jqDnR2 =
	{
		dnr:{},
		e:0,

		drag:function(v)
		{
			var child = jQuery('.draggable', E);
			var borderWidth = parseInt(child.css('border-width')) * 2;
			
 			if(jQuery('img', E).attr('src'))
 				E.css({width:Math.max(v.pageY-M.pY+M.H,0) * M.ratio,height:Math.max(v.pageY-M.pY+M.H,0)});

 			else
 				E.css({width:Math.max(v.pageX-M.pX+M.W,0),height:Math.max(v.pageY-M.pY+M.H,0)});
 				
 			child.css({width:(E.width() - borderWidth) + 'px', height:(E.height() - borderWidth) + 'px'}); 			

			return false;
		},

		stop:function()
		{
			E.css('opacity',M.o);$().unbind('mousemove',J.drag).unbind('mouseup',J.stop);
		}
	};

	var J=$.jqDnR2,M=J.dnr,
	E=J.e,
	
	i=function(e,h,k)
	{
		return e.each
		(
			function()
			{
				h=(h)?$(h,e):e;

				h.bind
				(
					'mousedown',
					{e:e,k:k},

					function(v)
					{
						var d=v.data,p={};E=d.e;

						// attempt utilization of dimensions plugin to fix IE issues

						if(E.css('position') != 'relative')
						{
							try{E.position(p);}
							catch(e){}
						}

						M={ratio:parseInt(E.css('width')) / parseInt(E.css('height')),X:p.left||f('left')||0,Y:p.top||f('top')||0,W:f('width')||E[0].scrollWidth||0,H:f('height')||E[0].scrollHeight||0,pX:v.pageX,pY:v.pageY,k:d.k,o:E.css('opacity')};
						E.css({opacity:0.8});$().mousemove($.jqDnR2.drag).mouseup($.jqDnR2.stop);

						return false;
					}
				);
			}
		);
	},

	f=function(k)
	{
		return parseInt(E.css(k))||false;
	};

})(jQuery);