function MetafuseGenericDragObject(){this.Element;this.ElementShim;this.MouseStartPageXCoordinate;this.MouseStartPageYCoordinate;this.MousePageXCoordinate;this.MousePageYCoordinate;this.ElementStartPageXCoordinate;this.ElementStartPageYCoordinate;this.ElementPageXCoordinate;this.ElementPageYCoordinate;this.DisableScrollPageWhenDragging=false;this.DisableDragElement=false;this.zIndex=500;var self=this;this.StartDrag=function(event,element,elementShim){var x,y;if(element){self.Element=GetElementById(element);self.ElementShim=GetElementById(elementShim);if(self.ElementShim==null){self.ElementShim=UITools.GetElementShim(element);}}else{}if(self.Element!=null){}if(window.scrollX){x=event.clientX+window.scrollX;y=event.clientY+window.scrollY;}else{x=event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;y=event.clientY+document.documentElement.scrollTop+document.body.scrollTop;}self.MouseStartPageXCoordinate=x;self.MouseStartPageYCoordinate=y;self.MousePageXCoordinate=x;self.MousePageYCoordinate=y;if(self.Element!=null){self.ElementStartPageXCoordinate=parseInt(UITools.GetPageXCoordinate(self.Element));self.ElementStartPageYCoordinate=parseInt(UITools.GetPageYCoordinate(self.Element));self.ElementPageXCoordinate=self.ElementStartPageXCoordinate;self.ElementPageYCoordinate=self.ElementStartPageYCoordinate;}if(isNaN(self.ElementStartPageXCoordinate)){self.ElementStartPageXCoordinate=0;}if(isNaN(self.ElementStartPageYCoordinate)){self.ElementStartPageYCoordinate=0;}if(!this.DisableDragElement&&self.Element!=null){self.Element.style.zIndex=parseInt(self.Element.style.zIndex)+parseInt(self.zIndex);}if(document.attachEvent){document.attachEvent("onmousemove",self.Drag);document.attachEvent("onmouseup",self.StopDrag);document.attachEvent("onkeydown",self.DragStopEscapeKey);}else{document.addEventListener("mousemove",self.Drag,true);document.addEventListener("mouseup",self.StopDrag,true);document.addEventListener("keydown",self.DragStopEscapeKey,true);document.body.style.MozUserSelect="none";document.body.style.webkitUserSelect="none";}};this.Drag=function(event){var x,y;if(window.scrollX){x=event.clientX+window.scrollX;y=event.clientY+window.scrollY;}else{x=event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;y=event.clientY+document.documentElement.scrollTop+document.body.scrollTop;}self.MousePageXCoordinate=x;self.MousePageYCoordinate=y;var left=(self.ElementStartPageXCoordinate+x-self.MouseStartPageXCoordinate);var top=(self.ElementStartPageYCoordinate+y-self.MouseStartPageYCoordinate);if(top<0){top=0;}if(!self.DisableDragElement&&self.Element!=null){self.Element.style.left=left+"px";self.Element.style.top=top+"px";self.ElementPageXCoordinate=left;self.ElementPageYCoordinate=top;if(self.ElementShim!=null){self.ElementShim.style.left=left+"px";self.ElementShim.style.top=top+"px";}}if(!self.DisableScrollPageWhenDragging){var scrollTop=UITools.GetScrollTop();var windowHeight=UITools.GetWindowHeight();var scrollLeft=UITools.GetScrollLeft();var windowWidth=UITools.GetWindowWidth();var yOver=(y+20)-(windowHeight+scrollTop);var yUnder=y-(scrollTop+20);var xOver=(x+20)-(windowWidth+scrollLeft);var xUnder=x-(scrollLeft+20);if(xOver>0||yOver>0||xUnder<0||yUnder<0){var scrollXBy=0;var scrollYBy=0;if(xOver>0){scrollXBy=xOver;}else if(xUnder<0){scrollXBy=xUnder;}if(yOver>0){scrollYBy=yOver;}else if(yUnder<0){scrollYBy=yUnder;}if(scrollXBy!=0||scrollYBy!=0){window.scrollBy(scrollXBy,scrollYBy);}}}if(BrowserTools.IsInternetExplorer()){event.cancelBubble=true;event.returnValue=false;}else{event.preventDefault();}if(self.OnDragging){self.OnDragging(event,self.Element,self);}};this.DragStopEscapeKey=function(event){if(UITools.GetKeyDown(event)==27){this.OnDragging=null;self.OnAfterStopDrag=function(element){return true;};RemoveEventHandlerFromElement(document,'onmousemove',self.Drag,true);RemoveEventHandlerFromElement(document,'onmouseup',self.StopDrag,true);RemoveEventHandlerFromElement(document,'onkeydown',self.DragStopEscapeKey,true);if(document.addEventListener){document.body.style.MozUserSelect="";document.body.style.webkitUserSelect="";}if(!self.DisableDragElement&&self.Element!=null){UITools.HideDivAndIFrame(self.Element);}document.body.style.cursor='default';}};this.StopDrag=function(){self.OnDragging=null;RemoveEventHandlerFromElement(document,'onmousemove',self.Drag,true);RemoveEventHandlerFromElement(document,'onmouseup',self.StopDrag,true);RemoveEventHandlerFromElement(document,'onkeydown',self.DragStopEscapeKey,true);if(document.addEventListener){document.body.style.MozUserSelect="";document.body.style.webkitUserSelect="";}if(!self.DisableDragElement&&self.Element!=null){self.Element.style.zIndex=parseInt(self.Element.style.zIndex)-parseInt(self.zIndex);}var rtn=self.OnAfterStopDrag(self);self.OnAfterStopDrag=function(element){return true;};return rtn;};this.OnAfterStopDrag=function(element){return true;};this.OnDragging=function(event,element){};this.IsMouseOverElement=function(elementId,horizontalBuffer,verticalBuffer){var element=GetElementById(elementId);if(!horizontalBuffer){horizontalBuffer=0;}if(!verticalBuffer){verticalBuffer=0;}var over=false;if(element){var elementX=UITools.GetPageXCoordinate(element)-horizontalBuffer;var elementY=UITools.GetPageYCoordinate(element)-verticalBuffer;var elementXEnd=elementX+element.offsetWidth+horizontalBuffer;var elementYEnd=elementY+element.offsetHeight+verticalBuffer;if(elementX<=self.MousePageXCoordinate&&elementXEnd>=self.MousePageXCoordinate&&elementY<=self.MousePageYCoordinate&&elementYEnd>=self.MousePageYCoordinate){over=true;}}return over;};this.IsElementOverElement=function(elementId,horizontalBuffer,verticalBuffer){var element=GetElementById(elementId);if(!horizontalBuffer){horizontalBuffer=0;}if(!verticalBuffer){verticalBuffer=0;}var over=false;if(element){var offsetWidth=element.offsetWidth;var offsetHeight=element.offsetHeight;if(element.tagName=="TR"&&BrowserTools.IsSafari()&&(offsetWidth==0||offsetHeight==0)){if(offsetHeight==0&&element.firstChild!=null&&element.firstChild.offsetHeight){offsetHeight=element.firstChild.offsetHeight;}if(offsetWidth==0&&element.lastChild&&element.lastChild.offsetWidth){offsetWidth=UITools.GetPageXCoordinate(element.lastChild)+element.lastChild.offsetWidth;}}var elementX=UITools.GetPageXCoordinate(element)-horizontalBuffer;var elementY=UITools.GetPageYCoordinate(element)-verticalBuffer;var elementXEnd=elementX+offsetWidth+horizontalBuffer;var elementYEnd=elementY+offsetHeight+verticalBuffer;if(elementX<=self.ElementPageXCoordinate&&elementXEnd>=self.ElementPageXCoordinate&&elementY<=self.ElementPageYCoordinate&&elementYEnd>=self.ElementPageYCoordinate){over=true;}}return over;};};