Edit in JSFiddle

window.onload=function(){
    new drag('box','handler',true);
}

function drag(){return this.init.apply(this,arguments)};

drag.prototype={
	init: function(container,handler,isLimit){
		this.o=document.getElementById(container);
		this.h=document.getElementById(handler);
		this._x=this._y=0;
		this.limit = isLimit;
		this._move=this.bind(this,this.move); 
		this._end=this.bind(this,this.end);
		this.addEvent(this.h,'mousedown',this.bind(this,this.start));
	},

	start:function(e){
		var ev = e || window.event;
		this._x = ev.clientX - this.o.offsetLeft;
		this._y = ev.clientY - this.o.offsetTop;
		this.addEvent(document,'mousemove',this._move);
		this.addEvent(document,'mouseup',this._end);
		ev.preventDefault && ev.preventDefault();
		this.h.setCapture && this.h.setCapture();
	},

	move:function(e){
		var ev = e || window.event,
		l= ev.clientX - this._x,
		t= ev.clientY - this._y;
		if(!!this.limit){
			var maxX = document.documentElement.clientWidth - this.o.offsetWidth,
			maxY = document.documentElement.clientHeight - this.o.offsetHeight;
			l = l < 0 ? 0 : l;
			l = l > maxX ? maxX : l;
			t = t < 0 ? 0 : t;
			t = t >maxY ? maxY : t;
		}
		this.o.style.left = l +'px';
		this.o.style.top = t +'px';
	},

	end:function(){
		this.removeEvent(document,'mousemove',this._move);
		this.removeEvent(document,'mouseup',this._end);
		this.h.releaseCapture && this.h.releaseCapture(); 
	},

	addEvent:function(o,e,fn){
		return o.attachEvent ? o.attachEvent('on'+e,fn) : o.addEventListener(e,fn,false);
	},

	removeEvent:function(o,e,fn){
		return o.detachEvent ? o.detachEvent('on'+e,fn):o.removeEventListener(e,fn,false);
	},

	bind:function(o,fn){
        return function(){
        	return fn.apply(o,arguments);
        }
	}
}
<body>
<div id='box'>
    <p id='handler'></p>	
</div>
</body>
html{background: #002433}
body,div,p{margin:0;padding:0}
#box{height:120px;width:200px;border:1px solid #02212D;position: absolute;left:0;background: #fff}
#handler{height:30px;background:#ddd;cursor: move;}