function DragElement(cMainID,cTitleBarID){
	this.Element = document.getElementById(cMainID);
	this.TitleBar = document.getElementById(cTitleBarID);	
	this.isIE=document.all&&!window.opera;
	this.isNN=!document.all&&document.getElementById;
	this.isN4=document.layers;
	this.ResizeGripID = 'divStdDynamicInfoResize';
	this.InnerScrollDiv = 'StdDynamicInfoBoxScrollDiv';
	this.InnerScrollMinimumHeight = 300;
	this.ResizeMinimumWidth = 200;
	this.ResizeMinimumHeight = 0;
	this.onMoveComplete = null;
	this.oResizeGrip = (document.getElementById(this.ResizeGripID) ? document.getElementById(this.ResizeGripID) : null);
	this.ElementToResize =  (this.Element.getElementsByTagName('TABLE')[0] ? this.Element.getElementsByTagName('TABLE')[0] : this.Element);
	if(this.oResizeGrip != null){this.oResizeGrip.style.cursor = 'nw-resize';}
	var obj = getObject(this);
	addEvent(document,'mousedown',function(e) {preventDefault(e); obj.RegisterElement(e); } , true);
	this.TitleBar.style.cursor = "move";
}
DragElement.prototype.MoveBy = function(e){
	if (!this.dragEnabled){
		this.ShowScroll();
		return;
	}
	var nMouseX = this.isIE ? this.nowX+event.clientX-this.offsetX : this.nowX+e.clientX-this.offsetX;
	var nMouseY = this.isIE ? this.nowY+event.clientY-this.offsetY : this.nowY+e.clientY-this.offsetY;
	var nScrollPositionY = window.pageYOffset || document.documentElement.scrollTop || 0;
	var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0;
	if(nMouseY - nScrollPositionY < 0){
		//this.dragEnabled = false;
	}
	this.Element.style.left = nMouseX + 'px';
	this.Element.style.top = nMouseY + 'px';
	if(this.onMoveComplete != null){
		this.onMoveComplete(this.Element, nMouseX, nMouseY);
	}
	//if(this.oIframe){this.ResizeIframe();}		
	return false;
}
DragElement.prototype.ResizeBy = function(e){
	if (!this.resizeEnabled){
		return;
	}
	var nWidth = this.isIE ? this.nowWidth+event.clientX-this.offsetX : this.nowWidth+e.clientX-this.offsetX;
	var nHeight = this.isIE ? this.nowHeight+event.clientY-this.offsetY : this.nowHeight+e.clientY-this.offsetY;
	if(nWidth > 0 && nWidth > this.ResizeMinimumWidth){
		this.ElementToResize.style.width = nWidth +'px';
		this.Element.style.width = nWidth +'px';
	}
	if(nHeight > 0 && nHeight > this.ResizeMinimumHeight){
		this.ElementToResize.style.height = nHeight;
		if(document.getElementById(this.InnerScrollDiv) && nHeight > this.InnerScrollMinimumHeight){	
		//document.getElementById('tdDynamicInfoBoxContentParent').offsetHeight
		//window.status = nHeight;
			document.getElementById(this.InnerScrollDiv).style.height = nHeight;
		}		
	}
	if(this.oIframe){this.ResizeIframe();}		
}

function getSrcElement(e){
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;	
	return targ;
}
function changeUserSelect(cValue){
	document.body.style.MozUserSelect = cValue;
	document.body.style.KhtmlUserSelect = cValue;
	document.body.style.userSelect = cValue;
}
function preventDefault(e){
	var oElement = getSrcElement(e);
	if(['select','input','textarea'].inArray(oElement.tagName.toLowerCase())){
		changeUserSelect('');
		return;
	}
	changeUserSelect('none');
	if (e && e.preventDefault) {
		e.preventDefault();
	}else if (window.event){
		window.event.returnValue = false;
	}
	
}
DragElement.prototype.RegisterElement = function(e){
	  var oSourceElement = this.isIE ? event.srcElement : e.target;	
	  while ((oSourceElement.id != this.TitleBar.id && oSourceElement.id != this.ResizeGripID) && oSourceElement.tagName !="BODY" && oSourceElement.tagName !="HTML"){
		oSourceElement = oSourceElement.parentNode;
	  }	
	  if (oSourceElement.id == this.TitleBar.id){
		document.body.style.MozUserSelect = 'none';
		document.body.style.KhtmlUserSelect = 'none';
		document.body.style.userSelect = 'none';		
		if(document.getElementById(this.InnerScrollDiv)){
			if(document.getElementById(this.InnerScrollDiv).style.overflow != ''){	
				var oScrollDiv = document.getElementById(this.InnerScrollDiv);
				if(typeof(this.InnerScrollDivMargin) == 'undefined'){
					this.InnerScrollDivMargin = oScrollDiv.style.marginRight;
				}
				oScrollDiv.style.marginRight = '16px';
				oScrollDiv.style.overflow = 'hidden';
			}
		}
	  	this.dragEnabled = true;
		this.offsetX= this.isIE ? event.clientX : e.clientX;
		this.offsetY= this.isIE ? event.clientY : e.clientY;
		this.nowX=parseInt(this.Element.style.left,10);
		this.nowY=parseInt(this.Element.style.top,10);
		var obj = getObject(this);
		addEvent(document,'mousemove', function moveDragElement(e) { preventDefault(e); obj.MoveBy(e); } );		
		addEvent(document,'mouseup', function stopDragElement(e) { obj.dragEnabled = false; obj.ShowScroll(); if(typeof(moveDragElement) != 'undefined'){removeEvent( document, 'mousemove', moveDragElement ); removeEvent( document, 'mouseup', stopDragElement );}} );
		if(this.oIframe){this.ResizeIframe();}
	  }else if(oSourceElement.id == this.ResizeGripID && !this.resizeEnabled){
	  	this.resizeEnabled = true;
	  	this.offsetX= this.isIE ? event.clientX : e.clientX;
		this.offsetY= this.isIE ? event.clientY : e.clientY;		
	  	this.nowWidth=parseInt(this.ElementToResize.offsetWidth,10);
		this.nowHeight=parseInt(this.ElementToResize.offsetHeight,10);
		var obj = getObject(this);		
		addEvent(document,'mousemove', function startResizeDragElement(e) { preventDefault(e); obj.ResizeBy(e); } );
		addEvent(document,'mouseup', function stopResizeDragElement(e) {   obj.resizeEnabled = false; if(typeof(startResizeDragElement) != 'undefined'){removeEvent( document, 'mousemove', startResizeDragElement);  removeEvent( document, 'mouseup', stopResizeDragElement);} } );	  
		if(this.oIframe){this.ResizeIframe();}	
	 }
	 	 
}
DragElement.prototype.ShowScroll = function(){
	try{		
		if(document.getElementById(this.InnerScrollDiv)){
			if(document.getElementById(this.InnerScrollDiv).style.overflow != ''){
				if(typeof(this.InnerScrollDivMargin) != 'undefined'){
					document.getElementById(this.InnerScrollDiv).style.marginRight = this.InnerScrollDivMargin;
				}
				document.getElementById(this.InnerScrollDiv).style.overflow = 'scroll';
			}
		}
	}catch(e){}
}
DragElement.prototype.ResizeIframe = function(){
	try{
		this.oIframe.style.height = (this.ElementToResize.offsetHeight - this.heightOffsetIframe) +'px';
		this.oIframe.style.width = (this.ElementToResize.offsetWidth - this.widthOffsetIframe) +'px';
	}catch(e){}
}
DragElement.prototype.RegisterIframe = function(cIframeID , nWidthOffset,nHeightOffset){
	this.widthOffsetIframe = nWidthOffset;
	this.heightOffsetIframe = nHeightOffset;
	this.oIframe = document.getElementById(cIframeID);
}
