/*
	pitbox.js
	
	This file is part of the Pixeltamer Internet Toolkit. Copyright (C) 2007 pixeltamer.net	
*/

var g_xGlobalBindEl=document;
if(navigator.appName.indexOf("Microsoft")!=-1)
{
	g_xGlobalBindEl=document.body;
}
else
{
	g_xGlobalBindEl=document;
};

var g_xPitBoxes=new function()
{
	this.m_hNextElemHnd=1;
	this.m_axBoxList=new Object();
	this.m_ahCanvasList=new Object();
	this.m_hMouseCaptureBox=0;
	this.m_hMouseOverBox=0;
	this.m_axEventFilters=new Array();
	this.m_axEventFiltersT=new Array();
	this.m_axEventFilterIDs=new Array();
	
	this.m_hBoxMove=0;
	this.m_hBoxSize=0;
	this.m_hBoxActive=0;
	this.m_hBoxActiveDirect=0;
	this.m_iBoxMoveSizeX=0;
	this.m_iBoxMoveSizeY=0;
	this.m_axBoxSnapListR=new Array();
	
	this.m_bShiftKeyDown=false;
	this.m_bCtrlKeyDown=false;
	this.m_bLMBDown=false;
	
	this.m_hLastClickBox=null;
	this.m_iLastClickX=0;
	this.m_iLastClickY=0;
	this.m_iMouseIdleCnt=1000;
	this.m_iMouseIdleX=0;
	this.m_iMouseIdleY=0;
	this.m_hMouseIdleTarget=0;
	this.m_sCurrentTTID=0;
	this.m_bProcessTooltips=false;
	this.m_sDefaultTitle=document.title;
	
	this.OnUnhandledCmd=function(p_iCmd,p_fVal,p_xE)
	{
	};

/*
	this.BoxCountDump=function()
	{
		pit_Log("Boxes: ",this.CountBoxes());
	};
	window.setInterval(function(){g_xPitBoxes.BoxCountDump()},2000);
*/
	this.CountBoxes=function()
	{
		var iCnt=0;
		for(iI in this.m_axBoxList)
		{
			if(this.m_axBoxList[iI]!=null)
			{
				if(this.m_axBoxList[iI].m_hHnd)
				{
					iCnt++;
				};
			};
		};
		return iCnt;
	};

	this.AddEventFilter=function(p_sID,p_xFnc,p_xThis)
	{
		this.m_axEventFilters.push(p_xFnc);
		this.m_axEventFiltersT.push(p_xThis);
		this.m_axEventFilterIDs.push(p_sID);
	};
	
	this.RemEventFilter=function(p_sID)
	{
		var iIdx=this.m_axEventFilterIDs.indexOf(p_sID);
		if(iIdx!=-1)
		{
			this.m_axEventFilterIDs.splice(iIdx,1);
			this.m_axEventFilters.splice(iIdx,1);
			this.m_axEventFiltersT.splice(iIdx,1);
		};
	};

	this.FilterEvent=function(p_xE)
	{
		var i,iC=this.m_axEventFilters.length;
		for(i=iC-1;i>=0;i--)
		{
			if(this.m_axEventFilters[i].call(this.m_axEventFiltersT[i],p_xE))
			{
//				pit_Log("Filtered: ",p_xE.type," ",p_xE.m_iKeyCode);
				pit_StopE(p_xE);
				return true;
			};
		};
		return false;
	};

	this.AddBox=function(p_xBoxObj)
	{
		this.m_hNextElemHnd++;
		if(this.m_hNextElemHnd>1000000)
		{
			this.m_hNextElemHnd=1;
		};
		while(this.m_axBoxList[this.m_hNextElemHnd]){this.m_hNextElemHnd++;};

		var hID=this.m_hNextElemHnd;
		this.m_axBoxList[hID]=p_xBoxObj;
		//pit_Log("AddBox ",hID," ",p_xBoxObj," ",p_xBoxObj.m_sTypeName);
		p_xBoxObj.m_hHnd=hID;
		return hID;
	};

	this.RemBox=function(p_xBoxObj)
	{
		var hID=p_xBoxObj.m_hHnd;

		if(hID==this.m_hBoxMove){this.m_hBoxMove=0;};
		if(hID==this.m_hBoxSize){this.m_hBoxSize=0;};
		if(hID==this.m_hBoxActive){this.m_hBoxActive=0;};
		if(hID==this.m_hBoxActiveDirect){this.m_hBoxActiveDirect=0;};
		
		this.m_axBoxList[hID]=null;
		delete this.m_axBoxList[hID];
		//pit_Log("RemBox ",hID);
	};

	this.GetBox=function (p_hHnd)
	{
		return this.m_axBoxList[p_hHnd];
	};
	
	this.GetBoxFromEl=function(p_xEl)
	{
		try{
			while((p_xEl)&&(p_xEl.getAttribute)&&(!p_xEl.getAttribute("pithnd",0)))
			{
				p_xEl=p_xEl.parentNode;
			};
			if(!p_xEl){return null;};
			if(p_xEl.getAttribute)
			{
				hTarget=p_xEl.getAttribute("pithnd",0);
				return this.GetBox(hTarget);
			};
		}catch(e){return null;};
		return null;
	};

	this.CaptureMouse=function(p_xBox)
	{
		this.m_hMouseCaptureBox=p_xBox.m_hHnd;
		g_xGlobalBindEl.onmousemove=g_xPitBoxes.EntryMouseMove;
	};
	this.ReleaseMouse=function()
	{
		this.m_hMouseCaptureBox=0;
		g_xGlobalBindEl.onmousemove=g_xPitBoxes.IdleMouseMove;
	};

	this.FireCustomCmd=function(p_xOriginBox,p_iCmd,p_fVal,p_xE)
	{
		if(p_xOriginBox)
		{
			while((p_xOriginBox)&&(!p_xOriginBox.m_bCmdEvtTarget))
			{
				p_xOriginBox=this.GetBox(p_xOriginBox.m_hParentHnd);
			};
		};
		if(p_xOriginBox)
		{
			p_xOriginBox.OnCmd(p_iCmd,p_fVal,p_xE);
		}
		else
		{
			this.OnUnhandledCmd(p_iCmd,p_fVal,p_xE);
		};
	};
	this.FindEventCmdTarget=function(p_xE)
	{
		var xBox=null;
		if(this.m_hMouseCaptureBox!=0)
		{
			xBox=this.GetBox(this.m_hMouseCaptureBox);
			if(!xBox){this.m_hMouseCaptureBox=0;};
		};
		if(!xBox)
		{
			if(p_xE.m_hTarget)
			{
				xBox=this.GetBox(p_xE.m_hTarget);
				if(xBox)
				{
					while((xBox)&&(!xBox.m_bCmdEvtTarget))
					{
						xBox=this.GetBox(xBox.m_hParentHnd);
					};
				};
			};
		};
		return xBox;
	};
	
	this.FindEventMouseTarget=function(p_xE)
	{
		var xBox=null;
		if(this.m_hMouseCaptureBox!=0)
		{
			xBox=this.GetBox(this.m_hMouseCaptureBox);
			if(!xBox){this.m_hMouseCaptureBox=0;};
		};
		if(!xBox)
		{
			if(p_xE.m_hTarget)
			{
				xBox=this.GetBox(p_xE.m_hTarget);
				if(xBox)
				{
					while((xBox)&&(!xBox.m_bMouseEvtTarget)&&(!xBox.m_iEvtClickAutoCmd))
					{
						xBox=this.GetBox(xBox.m_hParentHnd);
					};
				};
			};
		};
		return xBox;
	};

	this.OnFlashFocusIn=function()
	{
		if(this.m_hBoxActiveDirect)
		{
			var xBox=this.GetBox(this.m_hBoxActiveDirect);
			if(xBox)
			{
				var xE=xBox.GetEl();
				if(xE)
				{
					//input-focus/flash problem workaround
					try {xE.blur();} catch(e) {};
				};
			};
		};
		this.m_hBoxActiveDirect=null;
	};
	
	this.GetActiveWindow=function()
	{
		return this.GetBox(this.m_hBoxActive);
	};
	
	this.ActivateWindow=function(p_xBox)
	{
		if(p_xBox) {this.m_hBoxActiveDirect=p_xBox.m_hHnd;};
		var xBox=p_xBox;
		var iLimit=0;
		while((xBox)&&(!xBox.m_bBoxIsTopLevel)&&(iLimit<50))
		{
			if(xBox.m_hHnd==xBox.m_hParentHnd){return;};	// _VERY_ serious problem!
			xBox=this.GetBox(xBox.m_hParentHnd);
			iLimit++;
		};
		if(iLimit>=50){return;};
//		alert("ac: "+xBox+" "+iLimit);
		if(xBox)
		{
			if(xBox.m_hHnd!=this.m_hBoxActive)
			{
				var hOld=this.m_hBoxActive;
				this.m_hBoxActive=xBox.m_hHnd;
				if(hOld)
				{
					var xOld=this.GetBox(hOld);
					if(xOld && xOld.OnActivate)
					{
						xOld.OnActivate(false);
					};
				};
				var xParent=xBox.GetParent();
				if(xParent)
				{
					var xTE=xBox.GetEl();
					var xPE=xParent.GetEl();
					if(xTE && xPE)
					{
						while(xPE.lastChild!=xTE)
						{
							var xNxt=xTE.nextSibling;
							xPE.removeChild(xNxt);
							xPE.insertBefore(xNxt,xTE);
						};
	//					xPE.removeChild(xTE);
	//					xPE.appendChild(xTE);
					};
				};
				if(xBox.OnActivate)
				{
					xBox.OnActivate(true);
					pit_SetFocus(xBox.GetEl());
					if((xBox.m_sActiveDocTitle)&&(xBox.m_sActiveDocTitle!=""))
					{
						document.title=xBox.m_sActiveDocTitle;
					};
				};
			};
		};
	};
	
	this.TopLevelMoveSizeFillSnapBoxList=function()
	{
		var xBox=this.GetBox(this.m_hBoxMove);
		if(!xBox){xBox=this.GetBox(this.m_hBoxSize);};
		if(!xBox){return;};
		var xCanvas=xBox.GetCanvas();
		this.m_axBoxSnapListR=new Array();
		if(xCanvas)
		{
			var xR=xCanvas.GetCurRect();
			xR.m_iX=0;xR.m_iY=0;
			if(xCanvas.m_xSnapBorderDistance)
			{
				xR.m_iX+=xCanvas.m_xSnapBorderDistance[0];
				xR.m_iY+=xCanvas.m_xSnapBorderDistance[1];
				xR.m_iW-=xCanvas.m_xSnapBorderDistance[0]+xCanvas.m_xSnapBorderDistance[2];
				xR.m_iH-=xCanvas.m_xSnapBorderDistance[1]+xCanvas.m_xSnapBorderDistance[3];
			};
			this.m_axBoxSnapListR.push(xR);
		};
		var i;
		for(i in this.m_axBoxList)
		{
			var xB=this.m_axBoxList[i];
			if((xB)&&(xB.m_bBoxIsTopLevel)&&(xB.m_hHnd!=this.m_hBoxMove))
			{
				this.m_axBoxSnapListR.push(xB.GetCurRect());
			};
		};
	};
	
	this.TopLevelMoveSnap=function(p_xR)
	{
		function SnapSpanOverlap(p_iV1,p_iV2,p_iT1,p_iT2)
		{
			if(p_iT1>p_iV2){return false;};
			if(p_iT2<p_iV1){return false;};
			return true;
		};
		var xRb=p_xR;
		var xRn=p_xR;
		var iCR=x=p_xR.m_iX+p_xR.m_iW;
		var iCB=x=p_xR.m_iY+p_xR.m_iH;
		var i,iC=this.m_axBoxSnapListR.length;
		var iMinX=12;
		var iMinY=12;
		for(i=0;i<iC;i++)
		{
			var xRo=this.m_axBoxSnapListR[i];
			var iDX;
			iDX=Math.abs(xRo.m_iX-xRb.m_iX);
			if((iDX<iMinX)&&(SnapSpanOverlap(xRb.m_iY,xRb.m_iY+xRb.m_iH,xRo.m_iY,xRo.m_iY+xRo.m_iH)))
			{
				iMinX=iDX;
				xRn.m_iX=xRo.m_iX;
			};
			iDX=Math.abs(xRo.m_iX+xRo.m_iW-xRb.m_iX);
			if((iDX<iMinX)&&(SnapSpanOverlap(xRb.m_iY,xRb.m_iY+xRb.m_iH,xRo.m_iY,xRo.m_iY+xRo.m_iH)))
			{
				iMinX=iDX;
				xRn.m_iX=xRo.m_iX+xRo.m_iW;
			};
			iDX=Math.abs(xRo.m_iX-(xRb.m_iX+xRb.m_iW));
			if((iDX<iMinX)&&(SnapSpanOverlap(xRb.m_iY,xRb.m_iY+xRb.m_iH,xRo.m_iY,xRo.m_iY+xRo.m_iH)))
			{
				iMinX=iDX;
				xRn.m_iX=xRo.m_iX-xRb.m_iW;
			};
			iDX=Math.abs(xRo.m_iX+xRo.m_iW-(xRb.m_iX+xRb.m_iW));
			if((iDX<iMinX)&&(SnapSpanOverlap(xRb.m_iY,xRb.m_iY+xRb.m_iH,xRo.m_iY,xRo.m_iY+xRo.m_iH)))
			{
				iMinX=iDX;
				xRn.m_iX=xRo.m_iX+xRo.m_iW-xRb.m_iW;
			};
			var iDY;
			iDY=Math.abs(xRo.m_iY-xRb.m_iY);
			if((iDY<iMinY)&&(SnapSpanOverlap(xRb.m_iX,xRb.m_iX+xRb.m_iW,xRo.m_iX,xRo.m_iX+xRo.m_iW)))
			{
				iMinY=iDY;
				xRn.m_iY=xRo.m_iY;
			};
			iDY=Math.abs(xRo.m_iY+xRo.m_iH-xRb.m_iY);
			if((iDY<iMinY)&&(SnapSpanOverlap(xRb.m_iX,xRb.m_iX+xRb.m_iW,xRo.m_iX,xRo.m_iX+xRo.m_iW)))
			{
				iMinY=iDY;
				xRn.m_iY=xRo.m_iY+xRo.m_iH;
			};
			iDY=Math.abs(xRo.m_iY-(xRb.m_iY+xRb.m_iH));
			if((iDY<iMinY)&&(SnapSpanOverlap(xRb.m_iX,xRb.m_iX+xRb.m_iW,xRo.m_iX,xRo.m_iX+xRo.m_iW)))
			{
				iMinY=iDY;
				xRn.m_iY=xRo.m_iY-xRb.m_iH;
			};
			iDY=Math.abs(xRo.m_iY+xRo.m_iH-(xRb.m_iY+xRb.m_iH));
			if((iDY<iMinY)&&(SnapSpanOverlap(xRb.m_iX,xRb.m_iX+xRb.m_iW,xRo.m_iX,xRo.m_iX+xRo.m_iW)))
			{
				iMinY=iDY;
				xRn.m_iY=xRo.m_iY+xRo.m_iH-xRb.m_iH;
			};
		};
		return xRn;
	};
	
	this.TopLevelSizeSnap=function(p_xR)
	{
		function SnapSpanOverlap(p_iV1,p_iV2,p_iT1,p_iT2)
		{
			if(p_iT1>p_iV2){return false;};
			if(p_iT2<p_iV1){return false;};
			return true;
		};
		var xRb=p_xR;
		var xRn=p_xR;
		var iCR=x=p_xR.m_iX+p_xR.m_iW;
		var iCB=x=p_xR.m_iY+p_xR.m_iH;
		var i,iC=this.m_axBoxSnapListR.length;
		var iMinX=12;
		var iMinY=12;
		for(i=0;i<iC;i++)
		{
			var xRo=this.m_axBoxSnapListR[i];
			var iDX;
			iDX=Math.abs(xRo.m_iX-(xRb.m_iX+xRb.m_iW));
			if((iDX<iMinX)&&(SnapSpanOverlap(xRb.m_iY,xRb.m_iY+xRb.m_iH,xRo.m_iY,xRo.m_iY+xRo.m_iH)))
			{
				iMinX=iDX;
				xRn.m_iX=xRo.m_iX-xRb.m_iW;
			};
			iDX=Math.abs(xRo.m_iX+xRo.m_iW-(xRb.m_iX+xRb.m_iW));
			if((iDX<iMinX)&&(SnapSpanOverlap(xRb.m_iY,xRb.m_iY+xRb.m_iH,xRo.m_iY,xRo.m_iY+xRo.m_iH)))
			{
				iMinX=iDX;
				xRn.m_iX=xRo.m_iX+xRo.m_iW-xRb.m_iW;
			};
			var iDY;
			iDY=Math.abs(xRo.m_iY-(xRb.m_iY+xRb.m_iH));
			if((iDY<iMinY)&&(SnapSpanOverlap(xRb.m_iX,xRb.m_iX+xRb.m_iW,xRo.m_iX,xRo.m_iX+xRo.m_iW)))
			{
				iMinY=iDY;
				xRn.m_iY=xRo.m_iY-xRb.m_iH;
			};
			iDY=Math.abs(xRo.m_iY+xRo.m_iH-(xRb.m_iY+xRb.m_iH));
			if((iDY<iMinY)&&(SnapSpanOverlap(xRb.m_iX,xRb.m_iX+xRb.m_iW,xRo.m_iX,xRo.m_iX+xRo.m_iW)))
			{
				iMinY=iDY;
				xRn.m_iY=xRo.m_iY+xRo.m_iH-xRb.m_iH;
			};
		};
		return xRn;
	};
	
	this.EntryWindowMoveSize=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		if(g_xPitBoxes.m_hBoxMove)
		{
			var xBox=g_xPitBoxes.GetBox(g_xPitBoxes.m_hBoxMove);
			if(!xBox)
			{
				g_xPitBoxes.m_hBoxMove=0;g_xPitBoxes.m_hBoxSize=0;
				g_xGlobalBindEl.onmousemove=g_xPitBoxes.IdleMouseMove;
				document.body.style.cursor="auto";
				return false;
			};
			var xParent=xBox.GetParent();
			var iX=p_xE.m_iX-g_xPitBoxes.m_iBoxMoveSizeX;
			var iY=p_xE.m_iY-g_xPitBoxes.m_iBoxMoveSizeY;
			var iRB=40;	// minimum number of pixels still visible in frame
			if(iX<iRB-xBox.m_iW) {iX=iRB-xBox.m_iW;};if(iX>xParent.m_iW-iRB) {iX=xParent.m_iW-iRB;};
			if(iY<0) {iY=0;};if(iY>xParent.m_iH-iRB) {iY=xParent.m_iH-iRB;};
			
			var xR={"m_iX":iX,"m_iY":iY,"m_iW":xBox.m_iW,"m_iH":xBox.m_iH};
			if(xBox.m_bBoxIsDocking)
			{
				xR=g_xPitBoxes.TopLevelMoveSnap(xR);
			};
			
			xBox.m_bBoxMovedOrSized=true;
			xBox.SetPos(xR.m_iX,xR.m_iY);
			xBox.OnMove();
		}
		else if(g_xPitBoxes.m_hBoxSize)
		{
			var xBox=g_xPitBoxes.GetBox(g_xPitBoxes.m_hBoxSize);
			if(!xBox)
			{
				g_xPitBoxes.m_hBoxMove=0;g_xPitBoxes.m_hBoxSize=0;
				g_xGlobalBindEl.onmousemove=g_xPitBoxes.IdleMouseMove;
				document.body.style.cursor="auto";
				return false;
			};
			var xParent=xBox.GetParent();
			var iX=p_xE.m_iX-g_xPitBoxes.m_iBoxMoveSizeX;
			var iY=p_xE.m_iY-g_xPitBoxes.m_iBoxMoveSizeY;
			if(iX>xBox.m_iBoxSizeMaxSizeX){iX=xBox.m_iBoxSizeMaxSizeX;};
			if(iX<xBox.m_iBoxSizeMinSizeX){iX=xBox.m_iBoxSizeMinSizeX;};
			if(iY>xBox.m_iBoxSizeMaxSizeY){iY=xBox.m_iBoxSizeMaxSizeY;};
			if(iY<xBox.m_iBoxSizeMinSizeY){iY=xBox.m_iBoxSizeMinSizeY;};
			var xR={"m_iX":xBox.m_iX,"m_iY":xBox.m_iY,"m_iW":iX,"m_iH":iY};
			if(xBox.m_bBoxIsDocking)
			{
				xR=g_xPitBoxes.TopLevelSizeSnap(xR);
			};
			iX=(xR.m_iX+xR.m_iW)-xBox.m_iX;
			iY=(xR.m_iY+xR.m_iH)-xBox.m_iY;
			if(iX>xBox.m_iBoxSizeMaxSizeX){iX=xBox.m_iBoxSizeMaxSizeX;};
			if(iX<xBox.m_iBoxSizeMinSizeX){iX=xBox.m_iBoxSizeMinSizeX;};
			if(iY>xBox.m_iBoxSizeMaxSizeY){iY=xBox.m_iBoxSizeMaxSizeY;};
			if(iY<xBox.m_iBoxSizeMinSizeY){iY=xBox.m_iBoxSizeMinSizeY;};
			xBox.m_bBoxMovedOrSized=true;
			xBox.SetSize(iX,iY);
			xBox.OnResize();
		};
		return false;
	};

	g_xGlobalBindEl.onmousedown=function(p_xE)
	{
		g_xPitBoxes.m_bLMBDown=true;
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		if(g_xPitBoxes.m_sCurrentTTID)
		{
			g_xPitBoxes.m_sCurrentTTID=null;
			g_xPitBoxes.m_hMouseIdleTarget=null;
			g_xPitBoxes.m_iMouseIdleCnt=0;
			g_xPitBoxes.OnHideToolTip();
		};
			/*
		try{
			p_xE.cancelBubble = true;
			p_xE.stopPropagation();
		}catch(e){};
		*/
		var xBox=g_xPitBoxes.FindEventMouseTarget(p_xE);
		if(!xBox){return true;};
		g_xPitBoxes.m_hLastClickBox=xBox.m_hHnd;
		g_xPitBoxes.m_iLastClickX=p_xE.m_iX;
		g_xPitBoxes.m_iLastClickY=p_xE.m_iY;
		g_xPitBoxes.ActivateWindow(xBox);
//		pit_Log("MD ",p_xE.m_iX," ",p_xE.m_iY," ",p_xE.m_hTarget," ",xBox);
		if((xBox.m_bBoxIsMoveable)||(xBox.m_bBoxIsSizeable))
		{
			var xPos=xBox.GetAbsPos();
			if(xBox.m_bBoxIsMoveable&&(p_xE.m_iY<xPos.m_iY+xBox.m_iBoxMoveBarHeight))
			{
				if((!xBox.m_iBoxMoveBarWidth)||(p_xE.m_iX<xPos.m_iX+xBox.m_iBoxMoveBarWidth))
				{
					xBox.m_bBoxMovedOrSized=false;
					g_xPitBoxes.m_hBoxMove=xBox.m_hHnd;
					g_xPitBoxes.m_iBoxMoveSizeX=p_xE.m_iX-xBox.m_iX;
					g_xPitBoxes.m_iBoxMoveSizeY=p_xE.m_iY-xBox.m_iY;
					g_xGlobalBindEl.onmousemove=g_xPitBoxes.EntryWindowMoveSize;
					document.body.style.cursor="move";
					g_xPitBoxes.TopLevelMoveSizeFillSnapBoxList();
					return false;
				};
			};
			if(xBox.m_bBoxIsSizeable)
			{
				if((p_xE.m_iX>=xPos.m_iX+xBox.m_iW-xBox.m_iBoxSizeBarHeight)&&(p_xE.m_iY>=xPos.m_iY+xBox.m_iH-xBox.m_iBoxSizeBarHeight))
				{
					xBox.m_bBoxMovedOrSized=false;
					g_xPitBoxes.m_hBoxSize=xBox.m_hHnd;
					g_xPitBoxes.m_iBoxMoveSizeX=p_xE.m_iX-xBox.m_iW;
					g_xPitBoxes.m_iBoxMoveSizeY=p_xE.m_iY-xBox.m_iH;
					g_xGlobalBindEl.onmousemove=g_xPitBoxes.EntryWindowMoveSize;
					document.body.style.cursor="se-resize";
					g_xPitBoxes.TopLevelMoveSizeFillSnapBoxList();
					return false;
				};
			};
		};
//		xBox.GetEl().focus();
		var xR=xBox.OnMouse(p_xE);
//		pit_Log("MDRet ",xR," ",xBox);
		return xR;
	};
	
	g_xGlobalBindEl.onmouseup=function(p_xE)
	{
		g_xPitBoxes.m_bLMBDown=false;
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
//		if(p_xE.m_xTarget){p_xE.m_xTarget.focus();};
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		if((g_xPitBoxes.m_hBoxMove)||(g_xPitBoxes.m_hBoxSize))
		{
			var hOld=g_xPitBoxes.m_hBoxMove;
			if(!hOld){hOld=g_xPitBoxes.m_hBoxSize;};
			if(hOld)
			{
				var xB=g_xPitBoxes.GetBox(hOld);
				if(xB)
				{
					if(xB.m_bBoxMovedOrSized) {xB.OnMoveResizeEnd();};
				};
			};
				
			g_xPitBoxes.m_hBoxMove=0;
			g_xPitBoxes.m_hBoxSize=0;
			g_xGlobalBindEl.onmousemove=g_xPitBoxes.IdleMouseMove;
			document.body.style.cursor="auto";
			return false;
		};
		var xBox=g_xPitBoxes.FindEventMouseTarget(p_xE);
		if(!xBox){return true;};
//		xBox.GetEl().focus();
		var xR=xBox.OnMouse(p_xE);
//		pit_Log("MURet ",xR," ",xBox);
		return xR;
	};

	this.IdleMouseMove=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		if(g_xPitBoxes.m_iMouseIdleCnt>=10)
		{
			if(g_xPitBoxes.m_sCurrentTTID)
			{
				g_xPitBoxes.m_sCurrentTTID=null;
				g_xPitBoxes.m_hMouseIdleTarget=null;
				g_xPitBoxes.m_iMouseIdleCnt=0;
				g_xPitBoxes.OnHideToolTip();				
			};
		};
		g_xPitBoxes.m_sCurrentTTID=null;
		g_xPitBoxes.m_iMouseIdleCnt=0;
		var xE={
			type:p_xE.type,
			pageX:p_xE.pageX,
			pageY:p_xE.pageY,
			clientX:p_xE.clientX,
			clientY:p_xE.clientY,
			keyCode:p_xE.keyCode,
			which:p_xE.which,
			target:p_xE.target,
			srcElement:p_xE.srcElement,
			button:p_xE.button
		};
		pit_AdjustEventVals(xE);
		if(xE.m_xTarget)
		{
			if(xE.m_xTarget.m_bMouseMoveTarget) {return false;}
		};
		if(!g_xPitBoxes.m_bProcessTooltips){return true;};
		g_xPitBoxes.m_iMouseIdleX=xE.m_iX;
		g_xPitBoxes.m_iMouseIdleY=xE.m_iY;
		g_xPitBoxes.m_hMouseIdleTarget=xE.m_hTarget;
		if((xE.m_xOrgTarget)&&(xE.m_xOrgTarget.getAttribute))
		{
			g_xPitBoxes.m_sCurrentTTID=xE.m_xOrgTarget.getAttribute("pit_ttid")
			if(!g_xPitBoxes.m_sCurrentTTID)
			{
				var sT=xE.m_xOrgTarget.getAttribute("title");
				if(sT)
				{
					g_xPitBoxes.m_sCurrentTTID="@"+sT;
				};
			};
		};
		if(!g_xPitBoxes.m_sCurrentTTID)
		{
			if((xE.m_xTarget)&&(xE.m_xTarget.getAttribute))
			{
				g_xPitBoxes.m_sCurrentTTID=xE.m_xTarget.getAttribute("pit_ttid")
			};
		};
		return true;
	};
	
	this.IdleMouseTimer=function()
	{
		if(!g_xPitBoxes.m_bProcessTooltips){return;};
		g_xPitBoxes.m_iMouseIdleCnt++;
		if(g_xPitBoxes.m_iMouseIdleCnt==10)
		{
			if((!g_xPitBoxes.m_sCurrentTTID)&&(g_xPitBoxes.m_hMouseIdleTarget))
			{
				var xB=g_xPitBoxes.GetBox(g_xPitBoxes.m_hMouseIdleTarget);
				if(xB)
				{
					if(xB.m_sHelpID)
					{
						g_xPitBoxes.m_sCurrentTTID=xB.m_sHelpID;
					};
					if((!g_xPitBoxes.m_sCurrentTTID)&&(xB.m_sPitTTID))
					{
						g_xPitBoxes.m_sCurrentTTID=xB.m_sPitTTID;
					};
					if((xB)&&(!g_xPitBoxes.m_sCurrentTTID))
					{
						xB=xB.GetParent();
						if(xB)
						{
							if(xB.m_sHelpID)
							{
								g_xPitBoxes.m_sCurrentTTID=xB.m_sHelpID;
							};
							if((!g_xPitBoxes.m_sCurrentTTID)&&(xB.m_sPitTTID))
							{
								g_xPitBoxes.m_sCurrentTTID=xB.m_sPitTTID;
							};
						};
					};
				};
			};
			if(g_xPitBoxes.m_sCurrentTTID)
			{
				g_xPitBoxes.OnShowToolTip(g_xPitBoxes.m_sCurrentTTID,g_xPitBoxes.m_iMouseIdleX,g_xPitBoxes.m_iMouseIdleY,g_xPitBoxes.m_hMouseIdleTarget);
			};
		};
	};

	this.EntryMouseMove=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		var xBox=g_xPitBoxes.FindEventMouseTarget(p_xE);
		if(!xBox){return true;};
		return xBox.OnMouse(p_xE);
	};
	
	this.EntryMouseWheel=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		p_xE.m_iMWheel=0;
		if(p_xE.wheelDelta){p_xE.m_iMWheel=p_xE.wheelDelta/120;}
		else if(p_xE.detail){p_xE.m_iMWheel=-p_xE.detail/3;};
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		var xBox=g_xPitBoxes.FindEventMouseTarget(p_xE);
//		pit_Log("MW ",p_xE.type," ",xBox);
		if(!xBox){return true;};
		while(!xBox.m_bScrollEvtTarget)
		{
			xBox=xBox.GetParent();
			if(!xBox){return true;};
		};
		return xBox.OnMouse(p_xE);
	};
	
	g_xGlobalBindEl.onclick=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
//		pit_SetFocus(p_xE.m_xTarget);
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		var xBox=g_xPitBoxes.FindEventCmdTarget(p_xE);
		if(!xBox){return true;};
		if(xBox.m_iEvtClickAutoCmd)
		{
			return xBox.OnCmd(xBox.m_iEvtClickAutoCmd,p_xE);
		};
		return true;
	};

	g_xGlobalBindEl.ondblclick=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
//		pit_SetFocus(p_xE.m_xTarget);
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		var xBox=g_xPitBoxes.FindEventCmdTarget(p_xE);
		if(!xBox){return true;};
		//if(xBox.m_iEvtClickAutoCmd) //can't use same event -> double click will generate 3 events
		//{
		//	return xBox.OnCmd(xBox.m_iEvtClickAutoCmd,p_xE);
		//};
		return true;
	};
	
	g_xGlobalBindEl.onkeydown=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		if(p_xE.m_iKeyCode==17){g_xPitBoxes.m_bCtrlKeyDown=true;};
		if(p_xE.m_iKeyCode==16){g_xPitBoxes.m_bShiftKeyDown=true;};
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		var xBox=g_xPitBoxes.FindEventCmdTarget(p_xE);
		if(!xBox){return true;};
		if(xBox.m_iEvtKeyAutoCmd)
		{
			return xBox.OnCmd(xBox.m_iEvtKeyAutoCmd,p_xE);
		};
		return true;
	};
	
	g_xGlobalBindEl.onkeyup=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		if(p_xE.m_iKeyCode==17){g_xPitBoxes.m_bCtrlKeyDown=false;};
		if(p_xE.m_iKeyCode==16){g_xPitBoxes.m_bShiftKeyDown=false;};
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		return true;
	};

	g_xGlobalBindEl.onkeypress=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		if(g_xPitBoxes.FilterEvent(p_xE)){return false;};
		return true;
	};
	
	g_xGlobalBindEl.onmouseover=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		var xBox=g_xPitBoxes.FindEventCmdTarget(p_xE);
		if(!xBox){return true;};
		if(g_xPitBoxes.m_hMouseOverBox==xBox.m_hHnd)
		{
			return;
		};
		if((g_xPitBoxes.m_hMouseOverBox!=0)&&(xBox.m_hHnd!=g_xPitBoxes.m_hMouseOverBox))
		{
			var xOld=g_xPitBoxes.GetBox(g_xPitBoxes.m_hMouseOverBox);
			if((xOld)&&(xOld.m_iEvtMouseOverOutAutoCmd))
			{
				var xO=new Object();
				xO.type="mouseout";
				xO.m_iX=p_xE.m_iX;
				xO.m_iY=p_xE.m_iY;
				xO.m_iX=p_xE.m_iX;
				xO.m_xTarget=xOld;
				xO.m_hTarget=xOld.m_hHnd;
				xOld.OnCmd(xOld.m_iEvtMouseOverOutAutoCmd,xO);
			};
		};
		g_xPitBoxes.m_hMouseOverBox=xBox.m_hHnd;
		if(xBox.m_iEvtMouseOverOutAutoCmd)
		{
			return xBox.OnCmd(xBox.m_iEvtMouseOverOutAutoCmd,p_xE);
		};
		return true;
	};

	g_xGlobalBindEl.onmouseout=function(p_xE)
	{
		if(!p_xE){var p_xE=window.event;};
		pit_AdjustEventVals(p_xE);
		var xTo;
		if(p_xE.toElement)
		{
			xTo=g_xPitBoxes.GetBoxFromEl(p_xE.toElement);
		}
		else if(p_xE.relatedTarget)
		{
			xTo=g_xPitBoxes.GetBoxFromEl(p_xE.relatedTarget);
		};
		var xBox=g_xPitBoxes.FindEventCmdTarget(p_xE);
		if((!xBox)||(xBox==xTo)){
			return true;};
		if(g_xPitBoxes.m_hMouseOverBox!=xBox.m_hHnd)
		{
			g_xPitBoxes.m_hMouseOverBox=0;
			return true;
		};
		g_xPitBoxes.m_hMouseOverBox=0;
		if(xBox.m_iEvtMouseOverOutAutoCmd)
		{
			return xBox.OnCmd(xBox.m_iEvtMouseOverOutAutoCmd,p_xE);
		};
		return true;
	};

	var xThis=this;	
	g_xGlobalBindEl.onmousemove=xThis.IdleMouseMove;
	window.setInterval(function(){g_xPitBoxes.IdleMouseTimer()},100);
	
	if (window.addEventListener)
        window.addEventListener('DOMMouseScroll', this.EntryMouseWheel, false);
	window.onmousewheel = g_xGlobalBindEl.onmousewheel = this.EntryMouseWheel;

	this.OnShowToolTip=function(p_sID,p_iX,p_iY,p_hTargetBox)
	{
//		pit_Log("ShowTT ",p_iX," ",p_iY," ",p_sID," ",p_hTargetBox);
	};	
	this.OnHideToolTip=function()
	{
//		pit_Log("HideTT");
	};
};

function PitBox() {
	this.m_hHnd=-1;
	this.m_hParentHnd=-1;
	this.m_iX=0;
	this.m_iY=0;
	this.m_iW=0;
	this.m_iH=0;
	this.m_bCmdEvtTarget=false;
	this.m_bMouseEvtTarget=false;
	this.m_iEvtClickAutoCmd=0;
	this.m_iEvtMouseOverOutAutoCmd=0;
	this.m_iEvtKeyAutoCmd=0;
	this.m_sTagName="div";
	this.m_sTagClass="";
	this.m_xEl=null;
	this.m_iRefresh=3;
	this.m_axSubBoxes=new Array();
	g_xPitBoxes.AddBox(this);
	this.m_sElID=this.m_sTypeName+"_"+this.m_hHnd;
	this.m_bComplexDtor=false;
	this.m_sActiveDocTitle="";
};
PitBox.prototype.m_sTypeName="PitBox";

PitBox.prototype.Destruct=function()
{
	if(this.m_bComplexDtor)
	{
		pit_PurgeFnc(this.m_xEl);
		this.m_xEl=null;
	}else{
//		pit_PurgeFncChk(this.m_xEl);
		if(this.m_xEl)
		{
			if(this.m_xEl.parentNode)
			{
				this.m_xEl.parentNode.removeChild(this.m_xEl);
			};
			this.m_xEl=null;
		};
	};
	g_xPitBoxes.RemBox(this);
	if(this.m_axSubBoxes&&this.m_axSubBoxes.length)
	{
		var i,iC=this.m_axSubBoxes.length;
		for(i=0;i<iC;i++)
		{
			var xSB=this.m_axSubBoxes[i];
			if(xSB.m_hHnd)
			{
				xSB.Destruct();
			};
			this.m_axSubBoxes[i]=null;
		};
	};
	pit_Purge(this);
};

PitBox.prototype.ClearFnc=function()
{
	pit_ClearFnc(this.m_xEl);
};

PitBox.prototype.GetCanvas=function()
{
	var xCur=this;
	var xLast=null;
	while((xCur.m_sTypeName!="PitCanvas")&&(xCur)&&(xCur!=xLast))
	{
		xLast=xCur;
		xCur=g_xPitBoxes.GetBox(this.m_hParentHnd);
	};
	if(xCur.m_sTypeName!="PitCanvas"){xCur=null;};
	return xCur;
};

PitBox.prototype.GetParent=function()
{
	return g_xPitBoxes.GetBox(this.m_hParentHnd);
};

PitBox.prototype.GetEl=function()
{
	return this.m_xEl;
};

PitBox.prototype.SetFGColor=function(p_sText)
{
	var xD=this.GetEl();
	if(xD)
	{
		xD.style.color=p_sText;
	};
};

PitBox.prototype.SetBGColor=function(p_sText)
{
	var xD=this.GetEl();
	if(xD)
	{
		xD.style.backgroundColor=p_sText;
	};
};

PitBox.prototype.SetTTID=function(p_sID)
{
	var xD=this.GetEl();
	if(xD)
	{
		xD.setAttribute("pit_ttid",p_sID);
	};
	this.m_sPitTTID=p_sID;
};

PitBox.prototype.SetVisible=function(p_bVisible)
{
	var xE=this.GetEl();if(!xE) {return;};
	if(p_bVisible)
	{
		if(xE.style.visibility=="hidden")
		{
			this.OnShow();
		};
		xE.style.visibility="";
	}
	else
	{
		if(xE.style.visibility!="hidden")
		{
			this.OnHide();
		};
		xE.style.visibility="hidden";
	};
};

PitBox.prototype.SetRect=function(p_iX,p_iY,p_iW,p_iH)
{
	var xDiv=this.GetEl();
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	if(!xDiv){
		//pit_Log(/*"Invalid ID in SetRect ",this.m_hHnd," ",*/this.m_sType);
		return;};
//		pit_Log("W setpos ",p_sL," ",p_sT);
	xDiv.style.left=p_iX+"px";
	xDiv.style.top=p_iY+"px";
	xDiv.style.width=p_iW+"px";
	xDiv.style.height=p_iH+"px";
	if(this.m_sTagName!="textarea")
	{
		xDiv.style.overflow="hidden";
	};
};

PitBox.prototype.SetPos=function(p_iX,p_iY)
{
	var xDiv=this.GetEl();
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	if(!xDiv){/*pit_Log("Invalid ID ",this.m_hHnd," ",this.m_sType," in SetPos");*/return;};
	xDiv.style.left=p_iX+"px";
	xDiv.style.top=p_iY+"px";
	if(this.m_sTagName!="textarea")
	{
		xDiv.style.overflow="hidden";
	};
};

PitBox.prototype.SetSize=function(p_iW,p_iH)
{
	var xDiv=this.GetEl();
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	if(!xDiv){/*pit_Log("Invalid ID ",this.m_hHnd," ",this.m_sType," in SetSize");*/return;};
	xDiv.style.width=p_iW+"px";
	xDiv.style.height=p_iH+"px";
	if(this.m_sTagName!="textarea")
	{
		xDiv.style.overflow="hidden";
	};
};

PitBox.prototype.GetCurRect=function()
{
	var xDiv=this.GetEl();
	if(!xDiv){
		var xR=new Object();
		xR.m_iX=this.m_iX;
		xR.m_iY=this.m_iY;
		xR.m_iW=this.m_iW;
		xR.m_iH=this.m_iH;
		return xR;
	};
	var xR=new Object();
	xR.m_iX=xDiv.offsetLeft;
	xR.m_iY=xDiv.offsetTop;
	xR.m_iW=xDiv.offsetWidth;
	xR.m_iH=xDiv.offsetHeight;
	return xR;
};	

PitBox.prototype.GetAbsPos=function()
{
	return pit_GetAbsPos(this.GetEl());
};

PitBox.prototype.SetAutoHeight=function(p_iExtra)
{
	var xDiv=this.MakeEl();
	xDiv.style.height="auto";
	var iH=pit_GetRecursiveBottom(xDiv);
	if(p_iExtra){iH+=p_iExtra;};
	xDiv.style.height=iH+"px";
	this.UpdateRect();
};

PitBox.prototype.SetAutoWidth=function()
{
	var xDiv=this.MakeEl();
	xDiv.style.width="auto";	
	this.UpdateRect();
};

PitBox.prototype.UpdateRect=function()
{
	var xDiv=this.GetEl();
	if(!xDiv){
		pit_Log("Invalid ID ",this.m_sDiv);
		return;
	};
	this.m_iX=xDiv.offsetLeft;
	this.m_iY=xDiv.offsetTop;
	this.m_iW=xDiv.offsetWidth;
	this.m_iH=xDiv.offsetHeight;
};

PitBox.prototype.SetCmdID=function(p_iID,p_xFnc)
{
	this.m_iEvtClickAutoCmd=p_iID;
	if(this.m_iEvtClickAutoCmd||this.m_iEvtKeyAutoCmd||this.m_iEvtMouseOverOutAutoCmd)
	{
		this.m_bCmdEvtTarget=true;
	}
	else
	{
		this.m_bCmdEvtTarget=false;
	};
	if(p_xFnc)
	{
		this.OnCmd=p_xFnc;
	};
	return this;
};

PitBox.prototype.SetKeyCmdID=function(p_iID,p_xFnc)
{
	this.m_iEvtKeyAutoCmd=p_iID;
	if(this.m_iEvtClickAutoCmd||this.m_iEvtKeyAutoCmd||this.m_iEvtMouseOverOutAutoCmd)
	{
		this.m_bCmdEvtTarget=true;
	}
	else
	{
		this.m_bCmdEvtTarget=false;
	};
	if(p_xFnc)
	{
		this.OnCmd=p_xFnc;
	};
	return this;
};

PitBox.prototype.SetMouseOverOutCmdID=function(p_iID,p_xFnc)
{
	this.m_iEvtMouseOverOutAutoCmd=p_iID;
	if(this.m_iEvtClickAutoCmd||this.m_iEvtKeyAutoCmd||this.m_iEvtMouseOverOutAutoCmd)
	{
		this.m_bCmdEvtTarget=true;
	}
	else
	{
		this.m_bCmdEvtTarget=false;
	};
	if(p_xFnc)
	{
		this.OnCmd=p_xFnc;
	};
	return this;
};

PitBox.prototype.AddChild=function(p_xBox)
{
	this.m_axSubBoxes.push(p_xBox);
	p_xBox.m_hParentHnd=this.m_hHnd;
	var xMyEl=this.MakeEl();
	p_xBox.MakeEl();
	p_xBox.RefreshAttributes();
	p_xBox.OnShow();
	xMyEl.appendChild(p_xBox.MakeEl());
	return p_xBox;
};

PitBox.prototype.RemChild=function(p_xBox)
{
	var iIdx=this.m_axSubBoxes.indexOf(p_xBox);
	if(iIdx!=-1)
	{
		var xTE=this.GetContainerDiv?this.GetContainerDiv():this.GetEl();
		var xSE=p_xBox.GetEl();
		if(xTE&&xSE)
		{
			xTE.removeChild(xSE);
		};
		this.m_axSubBoxes.splice(iIdx,1);
		//p_xBox.m_hHnd=-1;
	};
};

PitBox.prototype.RemAllChildren=function()
{
	var xTE=this.GetContainerDiv?this.GetContainerDiv():this.GetEl();
	var axSubBoxesTmp=this.m_axSubBoxes;
	var i,iC=axSubBoxesTmp.length;
	for(i=0;i<iC;i++)
	{
		var xSB=axSubBoxesTmp[i];
		xSB.RemAllChildren();
		var xSE=xSB.GetEl();
		if(xTE&&xSE)
		{
			try {xTE.removeChild(xSE);} catch(e){};
		};		
		xSB.Destruct();
		delete axSubBoxesTmp[i];
	};
	this.m_axSubBoxes=new Array();
};

PitBox.prototype.DelChild=function(p_xBox)
{
	p_xBox.RemAllChildren();
	this.RemChild(p_xBox);
	p_xBox.Destruct();
	pit_Purge(p_xBox);
};

PitBox.prototype.DelFromParent=function()
{
	var xP=this.GetParent();
	if(xP) {xP.DelChild(this);};
};

PitBox.prototype.toString=function()
{
	var sT=this.m_sTypeName;
	sT+=" "+this.m_hHnd;
	if(this.m_xEl)
	{
		sT+="El="+this.m_xEl.id;
	};
	sT+=" "+this.m_iX+","+this.m_iY+","+this.m_iW+","+this.m_iH;
	sT+=" "+this.m_axSubBoxes.length+" Children";
	return sT;
};

PitBox.prototype.ForeachChild=function(p_xFnc)
{
	var i,iC=this.m_axSubBoxes.length;
	for(i=0;i<iC;i++)
	{
		var xSB=this.m_axSubBoxes[i];
		if(xSB.m_hHnd)
		{
			p_xFnc(xSB);
		};
	};
};

PitBox.prototype.AddStyles=function(p_xVar)
{
	if(!this.m_xStyleDef)
	{
		this.m_xStyleDef=new Object();
	};
	for(i in p_xVar)
	{
		if(p_xVar.hasOwnProperty(i))
		{
			this.m_xStyleDef[i]=p_xVar[i];
		};
	};
};

PitBox.prototype.AssignDOMNode=function(p_xNode)
{
	this.m_xEl=p_xNode;
};

PitBox.prototype.MakeEl=function()
{
	if(this.m_xEl)
	{
		return this.m_xEl;
	};
//	debugger;
	var xE=document.createElement(this.m_sTagName);
	if(this.m_sPitTTID)
	{
		xD.setAttribute("pit_ttid",this.m_sPitTTID);
	};
	if(!xE){
		pit_Log("Can't create ",this.m_sTagName," for ",this.toString());
		return null;};
	xE.className=this.m_sTagClass;
	xE.id=this.m_sElID;
	xE.style.position="absolute";
	xE.style.left=this.m_iX+"px";
	xE.style.top=this.m_iY+"px";
	if(this.m_iW) {xE.style.width=this.m_iW+"px";};
	if(this.m_iH) {xE.style.height=this.m_iH+"px";};
	xE.setAttribute("pithnd",this.m_hHnd);
	this.m_xEl=xE;
	return xE;
};

PitBox.prototype.RefreshAttributes=function()
{

};

PitBox.prototype.Refresh=function()
{
	var iR=this.m_iRefresh;
	this.m_iRefresh=0;
	if(iR==1)
	{
		var i,iC=this.m_axSubBoxes.length;
		for(i=0;i<iC;i++)
		{
			var xSB=this.m_axSubBoxes[i];
			if(xSB.m_hHnd)
			{
				xSB.Refresh();
			};
		};		
	}
};

PitBox.prototype.SetActiveDocTitle=function(p_sTitle)
{
	if(this.m_sActiveDocTitle!=p_sTitle)
	{
		this.m_sActiveDocTitle=p_sTitle;
		if(this.m_hHnd==g_xPitBoxes.m_hBoxActive)
		{
			document.title=this.m_sActiveDocTitle;
		};
	};
};

PitBox.prototype.Activate=function()
{
	g_xPitBoxes.ActivateWindow(this);
};

PitBox.prototype.IsActive=function()
{
	return this.m_hHnd==g_xPitBoxes.m_hBoxActive;
};

PitBox.prototype.OnActivate=function(p_bActive)
{
	return false;
};

PitBox.prototype.OnResize=function()
{
	return false;
};

PitBox.prototype.OnMove=function()
{
	return false;
};

PitBox.prototype.OnMoveResizeEnd=function()
{

};

PitBox.prototype.OnCmd=function(p_iCmd,p_fVal,p_xE)
{
	return false;
};

PitBox.prototype.OnShow=function()
{
	return false;
};

PitBox.prototype.OnHide=function()
{
	return false;
};

PitBox.prototype.OnMouse=function(p_xE)
{
//	pit_Log(p_xE.type," ",p_xE.m_iX," ",p_xE.m_iY," ",this);
	return true;
};

PitBox.prototype.AddTopLevelBehaviour=function(p_bMove,p_bSize,p_bClose,p_bPin,p_bDocking)
{
	this.m_bBoxIsDocking=p_bDocking;
	this.m_bMouseEvtTarget=true;
	this.m_bBoxIsTopLevel=true;
	this.m_bBoxIsMoveable=p_bMove;
	this.m_bBoxIsSizeable=p_bSize;
	this.m_bBoxIsCloseable=p_bClose;
	this.m_bBoxIsPinnable=p_bPin;
	this.m_iBoxMoveBarHeight=20;
	this.m_iBoxSizeBarHeight=20;
	this.m_iBoxSizeMinSizeX=80;
	this.m_iBoxSizeMinSizeY=40;
	this.m_iBoxSizeMaxSizeX=20000;
	this.m_iBoxSizeMaxSizeY=20000;
};

function PitCanvas(p_sDiv) {
	PitCanvas.BaseCtor.call(this);
	this.m_sElID=p_sDiv;
	document.getElementById(p_sDiv).setAttribute("pithnd",this.m_hHnd);
	this.m_axDefaultStyles={};
	this.m_xSnapBorderDistance=[0,0,0,0];
};
Inherit(PitCanvas,PitBox,"PitCanvas");

PitCanvas.prototype.GetDefaultStyle=function(p_sType)
{
	var xO=this.m_axDefaultStyles[p_sType];
	if(!xO){return {};};
	return xO;
};

PitCanvas.prototype.MakeEl=function()
{
	var xE=this.m_xEl;
	if(!xE)
	{
		xE=document.getElementById(this.m_sElID);
	};
	this.m_xEl=xE;
	return xE;
};

PitCanvas.prototype.RemAllChildren=function()
{
	PitCanvas.Super.RemAllChildren.call(this);
	pit_SetIHs(this.MakeEl(),"");
};

pit_ScriptDone("/pit/pitbox.js");

