
jQuery.fn.extend({
	exist : function(){
		return ($(this).size() > 0)
	},
	
	draggable : function(params) {
		var objJQ_element = $(this);
		var objJQ_dragger = $(params.layer);
		var fx_opacity = (params.opacity)?params.opacity:'1';
		var fx_cursor = (params.cursor)?params.cursor:'move';
		var prevPos = [,];
				
		var int_func = {
			scrollMove : function(e){
				if(typeof(this.paso) == 'undefined') {
					prevPos = $.getMousePosition(e);
					if ($.browser.msie) prevPos[0] += 35;
					this.paso = 1;
				}
				var pos_element = [parseInt(objJQ_element.css("left")),parseInt(objJQ_element.css("top"))];
				var pos = [(pos_element[0]+((e.pageX)-prevPos[0])),(pos_element[1]+((e.pageY)-prevPos[1]))];
				objJQ_element.css({"left":pos[0]+"px", "top":pos[1]+"px"});
				prevPos = $.getMousePosition(e);
			},
			
			addDivLayer : function(){
				var url_img = "img/";
				var dim = [parseInt(objJQ_dragger.children("img").css("width")),parseInt(objJQ_dragger.children("img").css("height"))];
				objJQ_dragger.prepend("<div style='width:"+dim[0]+"px; height:"+dim[1]+"px; background:url(\""+url_img+"spacer.gif\") 0 0 repeat; '></div>");
			}
		}
		
		if (objJQ_dragger.children("img").exist()){
			int_func.addDivLayer();
		}
		
		objJQ_dragger.css("cursor",fx_cursor);
		
		objJQ_dragger.mousedown(function(e){
			prevPos = $.getMousePosition(e);
			objJQ_element.animate({opacity:fx_opacity});
			$(document).bind("mousemove", function(e){
				int_func.scrollMove(e);
			});
		});
		$(document).mouseup(function(e){
			objJQ_element.animate({opacity:'1'});
			$(document).unbind("mousemove");
		});
	}
});

jQuery.extend({
	getMousePosition : function(e){
		var posx = 0;
		var posy = 0;
		if (!e) var e = window.event;
		if (e.pageX || e.pageY) {
			posx = e.pageX;
			posy = e.pageY;
		} else if (e.clientX || e.clientY) {
			posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
		}
		return [posx,posy];
	}
});
