$.ui.plugin.add("draggable","scrollPanel",{drag:function(h,i){var k=$(this).data("draggable");clearTimeout(k.timeout);var b=i.options,d=k.element,a=b.panel,c=a.position(),j=a.width(),f=a.height();viewport=a.parent();viewport_w=viewport.width(),viewport_h=viewport.height(),element_w=d.width(),element_h=d.height(),moved=false,close_dist=5,nudge=23,p_min_x=-(j-viewport_w),p_min_y=-(f-viewport_h),p_max_x=0,p_max_y=0,min_vis_x=-c.left,max_vis_x=min_vis_x+viewport_w,min_vis_y=-c.top,max_vis_y=min_vis_y+viewport_h,mouse_x=i.position.left+k.offset.click.left;mouse_y=i.position.top+k.offset.click.top;if((c.leftp_min_x)&&(mouse_x+close_dist>max_vis_x)){var l=Math.min(nudge,c.left-p_min_x);a.css("left",c.left-l);moved=true;k.offset.parent.left-=l;i.position.left+=l}if((!moved)&&(c.topp_min_y)&&(mouse_y+close_dist>max_vis_y)){var l=Math.min(nudge,c.top-p_min_x);a.css("top",(c.top-l)+"px");var g=c.top-a.position().top;k.offset.parent.top-=g;i.position.top+=g;moved=true}i.position.left=Math.max(i.position.left,0);i.position.top=Math.max(i.position.top,0);i.position.left=Math.min(i.position.left,j-element_w);i.position.top=Math.min(i.position.top,f-element_h);if(moved){$.ui.ddmanager.prepareOffsets(k,h)}if(moved){k.old_e=h;k.timeout=setTimeout(function(){k.mouseMove(h)},50)}},stop:function(c,b){var a=$(this).data("draggable");clearTimeout(a.timeout)}});