/*
	pitctrl.js
	
	This file is part of the Pixeltamer Internet Toolkit. Copyright (C) 2007 pixeltamer.net	
*/

function PitCtrlPanel(p_iX,p_iY,p_iW,p_iH)
{
	PitCtrlPanel.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_sFrameStyle="";
	this.m_iFrameOffsetL=0;
	this.m_iFrameOffsetR=0;
	this.m_iFrameOffsetT=0;
	this.m_iFrameOffsetB=0;
	this.m_xFrameDiv=null;
	this.m_bFrameNoBottom=false;
};
Inherit(PitCtrlPanel,PitBox,"PitCtrlPanel");

PitCtrlPanel.prototype.SetFrame=function(p_sFrameStyle,p_xOffset,p_sColor,p_fTransparency,p_bNoBottom)
{
	if((p_sFrameStyle==this.m_sFrameStyle)&&(this.m_sFrameBGColor==p_sColor)&&(this.m_fFrameTransparency==p_fTransparency)){return;};
	this.m_sFrameStyle=p_sFrameStyle;
	this.m_sFrameBGColor=p_sColor;
	if(typeof(p_xOffset)=="number")
	{
		this.m_iFrameOffsetL=p_xOffset;
		this.m_iFrameOffsetT=p_xOffset;
		this.m_iFrameOffsetR=p_xOffset;
		this.m_iFrameOffsetB=p_xOffset;
	}
	else
	{
		this.m_iFrameOffsetL=p_xOffset[0];
		this.m_iFrameOffsetT=p_xOffset[1];
		this.m_iFrameOffsetR=p_xOffset[2];
		this.m_iFrameOffsetB=p_xOffset[3];
	};
	this.m_fFrameTransparency=p_fTransparency;
	this.m_bFrameNoBottom=p_bNoBottom;
	if(this.m_xFrameDiv)
	{
		var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
		if(xPB)
		{
			xPB.MakeEl().removeChild(this.m_xFrameDiv);
			pit_Purge(this.m_xFrameDiv);
			this.m_xFrameDiv=null;
		};
	};
	if(this.GetEl())
	{
		this.RefreshAttributes();
	};
};

PitCtrlPanel.prototype.MakeEl=function()
{
	if(this.m_xEl){return this.m_xEl;};
	PitCtrlPanel.Super.MakeEl.call(this);
	this.m_xEl.style.overflow="hidden";
	return this.m_xEl;
};

PitCtrlPanel.prototype.OnResize=function()
{
	PitCtrlPanel.Super.OnResize.call(this);
	this.RefreshFrame();
};

PitCtrlPanel.prototype.OnMove=function()
{
	PitCtrlPanel.Super.OnMove.call(this);
	if(this.m_xFrameDiv)
	{
		this.m_xFrameDiv.style.left=(this.m_iX-this.m_iFrameOffsetL)+"px";
		this.m_xFrameDiv.style.top=(this.m_iY-this.m_iFrameOffsetT)+"px";
	};
};

PitCtrlPanel.prototype.RefreshFrame=function()
{
	var xOld=this.m_xFrameDiv;
	this.m_xFrameDiv=null;
	this.RefreshAttributes();
	if(xOld)
	{
		var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
		if(xPB)
		{
			xPB.MakeEl().removeChild(xOld);
			pit_PurgeFnc(xOld);
		};
	};
};

PitCtrlPanel.prototype.RefreshAttributes=function()
{
	PitCtrlPanel.Super.RefreshAttributes.call(this);
	if((this.m_sFrameStyle)||(this.m_sFrameBGColor))
	{
		if(!this.m_xFrameDiv)
		{
			this.m_xFrameDiv=document.createElement("div");
//			this.GetEl().style.zIndex="1";
//			this.m_xFrameDiv.style.zIndex="0";
			this.m_xFrameDiv.style.position="absolute";
			this.m_xFrameDiv.style.left=(this.m_iX-this.m_iFrameOffsetL)+"px";
			this.m_xFrameDiv.style.top=(this.m_iY-this.m_iFrameOffsetT)+"px";
			this.m_xFrameDiv.style.width=(this.m_iW+this.m_iFrameOffsetL+this.m_iFrameOffsetR)+"px";
			this.m_xFrameDiv.style.height=(this.m_iH+this.m_iFrameOffsetT+this.m_iFrameOffsetB)+"px";
			this.m_xFrameDiv.style.overflow="hidden";
			if(this.m_sFrameBGColor)
			{
				//this.m_xFrameDiv.style.backgroundColor=this.m_sFrameBGColor;
				this.m_xEl.style.backgroundColor=this.m_sFrameBGColor;
			};
			if(this.m_sFrameStyle)
			{
				g_xPitTiles.AddFrameDivs(this.m_xFrameDiv,this.m_sFrameStyle,0,0,this.m_iW+this.m_iFrameOffsetL+this.m_iFrameOffsetR,this.m_iH+this.m_iFrameOffsetT+this.m_iFrameOffsetB,this.m_bFrameNoBottom);
			};
			if(this.m_fFrameTransparency!=1)
			{
				pit_SetTransparency(this.m_xFrameDiv,this.m_fFrameTransparency);
			};
			var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
			if(xPB)
			{
				//xPB.GetEl().appendChild(this.m_xFrameDiv);
				try {xPB.GetEl().insertBefore(this.m_xFrameDiv,this.m_xEl);} catch(e) {xPB.GetEl().appendChild(this.m_xFrameDiv);};
			};
		};
	};
};

PitCtrlPanel.prototype.SetVisible=function(p_bVisible)
{
	if(this.m_xFrameDiv)
	{
		if(p_bVisible)
		{
			this.m_xFrameDiv.style.visibility="";
		}
		else
		{
			this.m_xFrameDiv.style.visibility="hidden";
		};
	};
	PitCtrlPanel.Super.SetVisible.call(this,p_bVisible);
};




function PitCtrlImage(p_iX,p_iY,p_sSrc,p_iW,p_iH)
{
	PitCtrlImage.BaseCtor.call(this);
	this.m_sTagName="img";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_sSrc=p_sSrc;

};
Inherit(PitCtrlImage,PitBox,"PitCtrlImage");

PitCtrlImage.prototype.RefreshAttributes=function()
{
	if(this.m_sSrc)
	{
		this.m_xEl.src=this.m_sSrc;
	};
	this.m_xEl.style.position="absolute";
	this.m_xEl.style.border="none";
	if(this.m_iW){this.m_xEl.style.width=(this.m_iW)+"px";};
	if(this.m_iH){this.m_xEl.style.height=(this.m_iH)+"px";};
};


function PitCtrlTopLevel(p_iX,p_iY,p_iW,p_iH,p_sTitle)
{
	PitCtrlTopLevel.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_bPinned=false;
	
	this.m_sText=p_sTitle;
	
	this.AddStyles(g_xPitStyleDef.PitCtrlTopLevel);
	
	this.m_xFrameDiv=null;
	this.m_xFrameDivClose=null;
	this.m_xFrameDivPin=null;
	this.m_xContainer=null;
	this.m_bNoSuperRefresh=false;
};

Inherit(PitCtrlTopLevel,PitBox,"PitCtrlTopLevel");

PitCtrlTopLevel.prototype.MakeEl=function()
{
	if(!this.m_xEl){
		PitCtrlTopLevel.Super.MakeEl.call(this);
	};
	return this.m_xEl;
};

PitCtrlTopLevel.prototype.GetContainerDiv=function()
{
	if(!this.m_xContainer) {this.RefreshAttributes();};
	return this.m_xContainer;
};

PitCtrlTopLevel.prototype.AddChild=function(p_xBox)
{
	this.m_axSubBoxes.push(p_xBox);
	p_xBox.m_hParentHnd=this.m_hHnd;
	this.MakeEl();
	var xMyEl=this.GetContainerDiv();
	xMyEl.appendChild(p_xBox.MakeEl());
	p_xBox.RefreshAttributes();
	p_xBox.OnShow();
	return p_xBox;
};

PitCtrlTopLevel.prototype.OnPinUnpin=function() {};

PitCtrlTopLevel.prototype.PinUnpin=function()
{
	this.m_bPinned=!this.m_bPinned;
	this.OnPinUnpin();
	if(this.m_bPinned){
		g_xPitTiles.SetElTile(this.m_xFrameDivPin,this.m_xStyleDef.WindowFrameStyle+"_pb");
	}
	else
	{
		g_xPitTiles.SetElTile(this.m_xFrameDivPin,this.m_xStyleDef.WindowFrameStyle+"_pa");
	};
};

PitCtrlTopLevel.prototype.OnClose=function() {};
PitCtrlTopLevel.prototype.Close=function()
{
	if(this.m_xContainer)
	{
//		this.m_xContainer.style.visibility="hidden";
	};
	if(this.m_xFrameDiv){};
	if(this.m_xFrameDivClose){this.m_xFrameDivClose.onmouseup=null;};
	if(this.m_xFrameDivPin){this.m_xFrameDivPin.onmouseup=null;};
	this.OnClose();
	this.RemAllChildren();
	var xP=this.GetParent();
	if(xP) {
		var xOld1=this.m_xFrameDiv;
		var xOld2=this.m_xFrameDivClose;
		var xOld3=this.m_xFrameDivPin;
		this.m_xFrameDiv=null;
		this.m_xFrameDivClose=null;
		this.m_xFrameDivPin=null;
		if(xOld1)
		{
			xP.GetEl().removeChild(xOld1);
//			pit_PurgeFnc(xOld1);
		};
		if(xOld2)
		{
			try{this.GetEl().removeChild(xOld2);}
			catch(err){};
//			pit_PurgeFnc(xOld2);
		};
		if(xOld3)
		{
			this.GetEl().removeChild(xOld3);
//			pit_PurgeFnc(xOld3);
		};
		xP.DelChild(this);
	};
};

PitCtrlTopLevel.prototype.SetText=function(p_sText)
{
	if(this.m_sText!=p_sText)
	{
		this.m_sText=p_sText;
		this.RefreshFrame();
	};
//	this.RefreshAttributes();
};

PitCtrlTopLevel.prototype.SetVisible=function(p_bVisible)
{
	if(this.m_xFrameDiv)
	{
		if(p_bVisible)
		{
			this.m_xFrameDiv.style.visibility="";
		}
		else
		{
			this.m_xFrameDiv.style.visibility="hidden";
		};
	};
	PitCtrlTopLevel.Super.SetVisible.call(this,p_bVisible);
};

PitCtrlTopLevel.prototype.OnResize=function()
{
	PitCtrlTopLevel.Super.OnResize.call(this);
	this.RefreshFrame();
};

PitCtrlTopLevel.prototype.OnMove=function()
{
	PitCtrlTopLevel.Super.OnMove.call(this);
	if(this.m_xFrameDiv)
	{
		this.m_xFrameDiv.style.left=(this.m_iX)+"px";
		this.m_xFrameDiv.style.top=(this.m_iY)+"px";
	};
	if(this.m_xFrameDivClose)
	{
		if(this.m_xStyleDef.CloseOffset[0]<0)
		{
			this.m_xFrameDivClose.style.left=(this.m_iW+this.m_xStyleDef.CloseOffset[0])+"px";
		}
		else
		{
			this.m_xFrameDivClose.style.left=(this.m_xStyleDef.CloseOffset[0])+"px";
		};
		this.m_xFrameDivClose.style.top=(this.m_xStyleDef.CloseOffset[1])+"px";
	};
	if(this.m_xFrameDivPin)
	{
		if(this.m_xStyleDef.PinOffset[0]<0)
		{
			this.m_xFrameDivPin.style.left=(this.m_iW+this.m_xStyleDef.PinOffset[0])+"px";
		}
		else
		{
			this.m_xFrameDivPin.style.left=(this.m_xStyleDef.PinOffset[0])+"px";
		};
		this.m_xFrameDivPin.style.top=(this.m_xStyleDef.PinOffset[1])+"px";
	};
};

PitCtrlTopLevel.prototype.OnActivate=function(p_bActive)
{
	PitCtrlTopLevel.Super.OnActivate.call(this);
	if(this.m_xEl)
	{
		this.RefreshFrame();
		pit_SetFocus(this.m_xEl);
	};
};

PitCtrlTopLevel.prototype.RefreshFrame=function()
{
	this.m_bNoSuperRefresh=true;
	var xOld1=this.m_xFrameDiv;
	var xOld2=this.m_xFrameDivClose;
	var xOld3=this.m_xFrameDivPin;
	this.m_xFrameDiv=null;
	this.m_xFrameDivClose=null;
	this.m_xFrameDivPin=null;
	this.RefreshAttributes();
	if(xOld1)
	{
		var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
		if(xPB)
		{
			xPB.MakeEl().removeChild(xOld1);
			pit_PurgeFnc(xOld1);
		};
	};
	if(xOld2)
	{
		var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
		if(xPB)
		{
			this.MakeEl().removeChild(xOld2);
			pit_PurgeFnc(xOld2);
		};
	};
	if(xOld3)
	{
		var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
		if(xPB)
		{
			this.MakeEl().removeChild(xOld3);
			pit_PurgeFnc(xOld3);
		};
	};
	this.m_bNoSuperRefresh=false;
};

var g_iDbgCnt=0;

PitCtrlTopLevel.prototype.RefreshAttributes=function()
{
	/*
	if(this.m_hHnd==22)
	{
//		debugger;
	};
	*/
	if(!this.m_bNoSuperRefresh)
	{
//	pit_Log("TL refresh ",this.m_hHnd);
		PitCtrlTopLevel.Super.RefreshAttributes.call(this);
	};
	if(!this.m_xContainer)
	{
		this.m_xContainer=document.createElement("div");
		this.m_xContainer.style.position="absolute";
		this.m_xContainer.style.left=this.m_xStyleDef.ContentOffsetL+"px";
		this.m_xContainer.style.top=this.m_xStyleDef.ContentOffsetT+"px";
		this.m_xContainer.style.width=(this.m_iW-this.m_xStyleDef.ContentOffsetL-this.m_xStyleDef.ContentOffsetR)+"px";
		this.m_xContainer.style.height=(this.m_iH-this.m_xStyleDef.ContentOffsetT-this.m_xStyleDef.ContentOffsetB)+"px";
		this.m_xContainer.name="container";
		this.m_xEl.appendChild(this.m_xContainer);
	};
	if(!this.m_xFrameDiv)
	{
		this.m_xFrameDiv=document.createElement("div");
		var xSty=this.m_xStyleDef;
		this.m_xContainer.style.left=this.m_xStyleDef.ContentOffsetL+"px";
		this.m_xContainer.style.top=this.m_xStyleDef.ContentOffsetT+"px";
		this.m_xContainer.style.width=(this.m_iW-this.m_xStyleDef.ContentOffsetL-this.m_xStyleDef.ContentOffsetR)+"px";
		this.m_xContainer.style.height=(this.m_iH-this.m_xStyleDef.ContentOffsetT-this.m_xStyleDef.ContentOffsetB)+"px";
		
		this.m_xFrameDiv.style.zIndex="0";
		this.m_xFrameDiv.style.position="absolute";
		this.m_xFrameDiv.style.left=(this.m_iX)+"px";
		this.m_xFrameDiv.style.top=(this.m_iY)+"px";
		this.m_xFrameDiv.style.width=(this.m_iW)+"px";
		this.m_xFrameDiv.style.height=(this.m_iH)+"px";

		var xBodyFrame=document.createElement("div");
		xBodyFrame.style.zIndex="0";
		xBodyFrame.style.position="absolute";
		xBodyFrame.style.left=(0)+"px";
		xBodyFrame.style.top=(xSty.TitleHeight)+"px";
		xBodyFrame.style.width=(this.m_iW)+"px";
		xBodyFrame.style.height=(this.m_iH-xSty.TitleHeight)+"px";
		if((this.m_bBoxIsSizeable)&&(this.m_xStyleDef.WindowFrameSizingBR))
		{
			g_xPitTiles.AddFrameDivs(xBodyFrame,xSty.WindowFrameStyle,0,0,this.m_iW,this.m_iH-xSty.TitleHeight,false,xSty.WindowFrameNoTop,this.m_xStyleDef.WindowFrameSizingBR);
		}
		else
		{
			g_xPitTiles.AddFrameDivs(xBodyFrame,xSty.WindowFrameStyle,0,0,this.m_iW,this.m_iH-xSty.TitleHeight,false,xSty.WindowFrameNoTop);
		};
		var xBodyBG=document.createElement("div");
		xBodyBG.style.position="absolute";
		xBodyBG.style.left=(xSty.WindowFrameOffset[0])+"px";
		xBodyBG.style.top=(xSty.TitleHeight+xSty.WindowFrameOffset[1])+"px";
		xBodyBG.style.width=(this.m_iW-xSty.WindowFrameOffset[0]-xSty.WindowFrameOffset[2])+"px";
		xBodyBG.style.height=(this.m_iH-xSty.TitleHeight-xSty.WindowFrameOffset[1]-xSty.WindowFrameOffset[3])+"px";
		
		var xTitleFrame=document.createElement("div");
		xTitleFrame.style.zIndex="0";
		xTitleFrame.style.position="absolute";
		xTitleFrame.style.left=(xSty.TitleInset)+"px";
		xTitleFrame.style.top=(0)+"px";
		xTitleFrame.style.width=(this.m_iW-xSty.TitleInset*2)+"px";
		xTitleFrame.style.height=(xSty.TitleHeight)+"px";

		var xTiColBG;
		var xTiColFG;
		var xTiColSH;
		var sTiBGBar;
		if((this.IsActive())||(!this.m_bBoxIsTopLevel)||(xSty.NoInactiveColors))
		{
			xTiColBG=xSty.TitleBGColorActive;
			xTiColFG=xSty.TitleFGColorActive;
			xTiColSH=xSty.TitleSHColorActive;
			sTiBGBar=xSty.TitleBGBarActive;
		}
		else
		{
			xTiColBG=xSty.TitleBGColorInactive;
			xTiColFG=xSty.TitleFGColorInactive;
			xTiColSH=xSty.TitleSHColorInactive;
			sTiBGBar=xSty.TitleBGBarInactive;
		};
		
		var xTitleText=document.createElement("div");
		xTitleText.style.zIndex="0";
		xTitleText.style.position="absolute";
		xTitleText.style.left=(xSty.TitleInset+xSty.TitleOffset[0])+"px";
		xTitleText.style.top=(xSty.TitleOffset[1])+"px";
		xTitleText.style.width=(this.m_iW-xSty.TitleInset*2-xSty.TitleOffset[0]-xSty.TitleOffset[2])+"px";
		xTitleText.style.height=(xSty.TitleHeight-xSty.TitleOffset[1]-xSty.TitleOffset[3])+"px";
		xTitleText.style.textAlign=xSty.TitleAlign;
		if(xSty.TitleLSpacing)
		{
			xTitleText.style.letterSpacing=xSty.TitleLSpacing;
		};


		if(xSty.TitleFontSize)
		{
			xTitleText.style.fontSize=(xSty.TitleFontSize)+"px";
		}
		else
		{
			xTitleText.style.fontSize=(xSty.TitleHeight-4-xSty.TitleOffset[1]-xSty.TitleOffset[3])+"px";
		};
		xTitleText.style.fontWeight=xSty.TitleWeight;

		if(sTiBGBar)
		{
//			g_xPitTiles.AddHBarDivs(this.m_xFrameDiv,sTiBGBar,xSty.TitleOffset[0],xSty.TitleOffset[1],this.m_iW-xSty.TitleInset*2-xSty.TitleOffset[0]-xSty.TitleOffset[2],xSty.TitleHeight-xSty.TitleOffset[1]-xSty.TitleOffset[3]);
			g_xPitTiles.AddHBarDivs(xTitleFrame,sTiBGBar,xSty.TitleOffset[0],xSty.TitleOffset[1],this.m_iW-xSty.TitleInset*2-xSty.TitleOffset[0]-xSty.TitleOffset[2],xSty.TitleHeight-xSty.TitleOffset[1]-xSty.TitleOffset[3]);
		};

		if(!xTiColSH)
		{
			pit_SetIHs(xTitleText,this.m_sText);
		}
		else
		{
			var iW=(this.m_iW-xSty.TitleInset*2-xSty.TitleOffset[0]-xSty.TitleOffset[2]);
			pit_SetIHs(xTitleText,"<span style='color:"+xTiColSH+";position:absolute;width:"+iW+"px;top:1px;left:1px;z-index:-1'>"+this.m_sText+
			"</span><span style='position:absolute;width:"+iW+"px;top:0px;left:0px;z-index:0'>"+this.m_sText+"</span>");
		};

		this.m_iBoxMoveBarWidth=this.m_iW;

		xTitleText.style.backgroundColor=xTiColBG;
		xTitleText.style.color=xTiColFG;
		
		xBodyBG.style.backgroundColor=xSty.WindowFrameBGColorInactive;

		var xBtnClose,xBtnPin;
		if(this.m_bBoxIsCloseable)
		{
			xBtnClose=document.createElement("a");
		};
		if(this.m_bBoxIsPinnable)
		{
			xBtnPin=document.createElement("a");
		};
		if(this.m_bBoxIsCloseable)
		{
			var xThis=this;
			xBtnClose.pit_ttid="pit_wndclose";
//			xBtnClose.style.zIndex="1";
			xBtnClose.style.position="absolute";
			if(xSty.CloseOffset[0]>=0){
				xBtnClose.style.left=(xSty.CloseOffset[0])+"px";
			}else{
				xBtnClose.style.left=(this.m_iW+xSty.CloseOffset[0])+"px";
				if(this.m_iBoxMoveBarWidth>this.m_iW+xSty.CloseOffset[0]){this.m_iBoxMoveBarWidth=this.m_iW+xSty.CloseOffset[0];};
			};
			xBtnClose.style.top=(xSty.CloseOffset[1])+"px";
//			xBtnClose.style.top="10px";
//			xBtnClose.style.left="460px";
			xBtnClose.href="javascript:/**/";
			xBtnClose.onmouseup=function(){
				g_xPitBoxes.m_bLMBDown=false;
				xThis.SetVisible(false);
				window.setTimeout(function(){
					pit_ClearFnc(xBtnClose);
					pit_ClearFnc(xBtnPin);
					xThis.Close();},10
				);
				return true;
			};
			g_xPitTiles.SetElTile(xBtnClose,xSty.WindowFrameStyle+"_x");
		};
		if(this.m_bBoxIsPinnable)
		{
			var xThis=this;			
			xBtnPin.pit_ttid="pit_wndpin";
//			xBtnPin.style.zIndex="0";
			xBtnPin.style.position="absolute";
			if(xSty.PinOffset[0]>=0){
				xBtnPin.style.left=(xSty.PinOffset[0])+"px";
			}else{
				xBtnPin.style.left=(this.m_iW+xSty.PinOffset[0])+"px";
				if(this.m_iBoxMoveBarWidth>this.m_iW+xSty.PinOffset[0]){this.m_iBoxMoveBarWidth=this.m_iW+xSty.PinOffset[0];};
			};
			xBtnPin.style.top=(xSty.PinOffset[1])+"px";
			xBtnPin.href="javascript:/**/";
			xBtnPin.onmouseup=function(){g_xPitBoxes.m_bLMBDown=false;xThis.PinUnpin();return true;};
			if(this.m_bPinned)
			{
				g_xPitTiles.SetElTile(xBtnPin,xSty.WindowFrameStyle+"_pb");
			}
			else
			{
				g_xPitTiles.SetElTile(xBtnPin,xSty.WindowFrameStyle+"_pa");
			};
		};
				
		var fTransp=xSty.TransparencyInactive;
		var fTranspTF=xSty.TitleFTransparencyInactive;
		var fTranspTT=xSty.TitleTTransparencyInactive;
		if((this.IsActive())||(!this.m_bBoxIsTopLevel)||(xSty.NoInactiveColors))
		{
			xBodyBG.style.backgroundColor=xSty.WindowFrameBGColorActive;
			fTransp=xSty.TransparencyActive;
			fTranspTF=xSty.TitleFTransparencyActive;
			fTranspTT=xSty.TitleTTransparencyActive;

			g_xPitTiles.AddFrameDivs(xTitleFrame,xSty.TitleStyleActive,0,0,this.m_iW-xSty.TitleInset*2,xSty.TitleHeight,xSty.TitleNoBottom);
			this.m_xContainer.style.backgroundColor=xSty.WindowBGColorActive;
		}
		else
		{
			g_xPitTiles.AddFrameDivs(xTitleFrame,xSty.TitleStyleInactive,0,0,this.m_iW-xSty.TitleInset*2,xSty.TitleHeight,xSty.TitleNoBottom);
			this.m_xContainer.style.backgroundColor=xSty.WindowBGColorInactive;
		};
		{
			pit_SetTransparency(this.m_xFrameDiv,fTransp);
			pit_SetTransparency(this.m_xContainer,fTransp);
			if(xBtnClose){pit_SetTransparency(xBtnClose,fTransp);};
			if(xBtnPin){pit_SetTransparency(xBtnPin,fTransp);};
		};
		{
			pit_SetTransparency(xTitleFrame,fTranspTF);
		};
		{
			pit_SetTransparency(xTitleText,fTranspTT);
		};

		this.m_xFrameDiv.appendChild(xBodyFrame);
		this.m_xFrameDiv.appendChild(xBodyBG);
		this.m_xFrameDiv.appendChild(xTitleFrame);
		if(xBtnClose){this.GetEl().appendChild(xBtnClose);};
		if(xBtnPin){this.GetEl().appendChild(xBtnPin);};
		this.m_xFrameDivClose=xBtnClose;
		this.m_xFrameDivPin=xBtnPin;
		this.m_xFrameDiv.appendChild(xTitleText);

		var xPB=g_xPitBoxes.GetBox(this.m_hParentHnd);
		if(xPB)
		{
			try {xPB.GetEl().insertBefore(this.m_xFrameDiv,this.m_xEl);} catch(e) {xPB.GetEl().appendChild(this.m_xFrameDiv);};
		};
	};
};

PitCtrlTopLevel.prototype.GetContentRect=function()
{
	var xR=new Object();
	xR.m_iX=0;
	xR.m_iY=0;
	xR.m_iW=this.m_iW-this.m_xStyleDef.ContentOffsetL-this.m_xStyleDef.ContentOffsetR;
	xR.m_iH=this.m_iH-this.m_xStyleDef.ContentOffsetT-this.m_xStyleDef.ContentOffsetB;
	return xR;
};






function PitCtrlStatic(p_iX,p_iY,p_iW,p_iH,p_sText,p_iAlign)
{
	PitCtrlStatic.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_sText=p_sText;
	this.m_iTextAlign=p_iAlign;
};

Inherit(PitCtrlStatic,PitBox,"PitCtrlStatic");

PitCtrlStatic.prototype.SetText=function(p_sText)
{
	if(this.m_sText==p_sText) {return;};
	this.m_sText=p_sText;
	this.RefreshAttributes();
};

PitCtrlStatic.prototype.RefreshAttributes=function()
{
	if(this.m_sText)
	{
		pit_SetIH(this.GetEl(),this.m_sText);
		if(this.m_iTextAlign==0)
		{
			this.GetEl().style.textAlign="left";
		}
		if(this.m_iTextAlign==1)
		{
			this.GetEl().style.textAlign="right";
		}
		if(this.m_iTextAlign==2)
		{
			this.GetEl().style.textAlign="center";
		};
	} else {pit_SetIH(this.GetEl(),"");};
};


function PitCtrlButton(p_iX,p_iY,p_iW,p_iH,p_sText,p_sStyle)
{
	PitCtrlButton.BaseCtor.call(this);
	this.m_sTagName="a";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_sText=p_sText;
	this.m_sHRef="javascript:/**/";
};
Inherit(PitCtrlButton,PitBox,"PitCtrlButton");

PitCtrlButton.prototype.SetText=function(p_sText)
{
	this.m_sText=p_sText;
	this.RefreshAttributes();
};

PitCtrlButton.prototype.RefreshAttributes=function()
{
	if(this.m_sText)
	{
		pit_SetIHs(this.GetEl(),this.m_sText);
	};
	this.GetEl().setAttribute("href",this.m_sHRef);
};

function PitCtrlGfxButton(p_iX,p_iY,p_iW,p_iH,p_sText,p_sStyle)
{
	PitCtrlGfxButton.BaseCtor.call(this);
	this.m_sTagName="a";
	this.m_sTagClass="pitTextGButton";
	this.m_sTextAlign="center";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_sText=p_sText;
	this.m_sStyle=p_sStyle;
	this.m_sHRef="javascript:/**/";
};
Inherit(PitCtrlGfxButton,PitBox,"PitCtrlGfxButton");

PitCtrlGfxButton.prototype.m_sTypeName="PitCtrlGfxButton";

PitCtrlGfxButton.prototype.SetText=function(p_sText)
{
	this.m_sText=p_sText;
	this.RefreshAttributes();
};

PitCtrlGfxButton.prototype.SetStyle=function(p_sStyle)
{
	this.m_sStyle=p_sStyle;
	this.RefreshAttributes();
};

PitCtrlGfxButton.prototype.RefreshAttributes=function()
{
	var xEl=this.GetEl();
	pit_SetIHs(xEl,"");
	xEl.className=this.m_sTagClass;
	g_xPitTiles.AddHBarDivs(xEl,this.m_sStyle,0,0,this.m_iW,this.m_iH);
	var xTN=document.createElement("span");
	pit_SetIHs(xTN,this.m_sText);
	xTN.className="pitTextGButtonBG";
	xTN.style.position="absolute";
	xTN.style.left="3px";
	xTN.style.top="3px";
	xTN.style.width=(this.m_iW-4)+"px";
	xTN.style.height=(this.m_iH-4)+"px";
	xTN.style.textAlign=this.m_sTextAlign;
	xTN.style.cursor="pointer";
	xEl.appendChild(xTN);

	var xTN=document.createElement("span");
	pit_SetIHs(xTN,this.m_sText);
	xTN.className="pitTextGButtonFG";
	xTN.style.position="absolute";
	xTN.style.left="2px";
	xTN.style.top="2px";
	xTN.style.width=(this.m_iW-4)+"px";
	xTN.style.height=(this.m_iH-4)+"px";
	xTN.style.textAlign=this.m_sTextAlign;
	xTN.style.cursor="pointer";
	xEl.appendChild(xTN);

	xEl.style.cursor="pointer";
	xEl.style.fontSize=(this.m_iH-8)+"px";
	xEl.setAttribute("href",this.m_sHRef);
};

/*---------------------------------------------------------

Vertical Scroll Bar

---------------------------------------------------------*/

function PitCtrlScrollBarV(p_sStyle,p_iX,p_iY,p_iW,p_iH)
{
	PitCtrlScrollBarV.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	
	this.m_xKnobDiv=null;	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_sTagClass=p_sStyle;
	this.m_bMouseEvtTarget=true;
	this.m_bCmdEvtTarget=false;
	this.m_sStyle=p_sStyle;
	this.m_iBarOfsX=0;

	this.m_iValue=0;
	this.m_iRange=100;
	this.m_iPage=10;
	this.m_bValueRounded=true;
	
	this.m_xOnSetScrollPos=null;	// will be called with scrollhnd,oldvalue,newvalue
	
	var xKnobT=g_xPitTiles.GetTile(p_sStyle+"_knob");
	var xBarT=g_xPitTiles.GetTile(p_sStyle+"_bar_t");
	if((!xKnobT)||(!xBarT))
	{
		pit_Log("Invalid scroll style ",p_sStyle);
		this.m_iKnobW=0;
		this.m_iKnobH=0;
		this.m_iBarOfs=0;
		this.m_iBarW=0;
	}
	else
	{
		this.m_iKnobW=xKnobT.m_iW;
		this.m_iKnobH=xKnobT.m_iH;
		this.m_iBarOfs=xBarT.m_iH;
		this.m_iBarW=xBarT.m_iW;
		if(this.m_iBarW<this.m_iKnobW)
		{
			this.m_iBarOfsX+=this.m_iKnobW-this.m_iBarW;
			this.m_iBarW=this.m_iKnobW;
		};
	};
	this.m_iKnobYOfs=-1000;
};
Inherit(PitCtrlScrollBarV,PitBox,"PitScrollBarV");

PitCtrlScrollBarV.prototype.GetKnobDiv=function()
{
	return this.m_xKnobDiv;
};

PitCtrlScrollBarV.prototype.MakeEl=function()
{
	if(this.m_xEl){return this.m_xEl;};
	PitCtrlScrollBarV.Super.MakeEl.call(this);
	this.m_xKnobDiv=document.createElement("a");
	this.m_xKnobDiv.style.position="absolute";
	this.m_xKnobDiv.href="javascript:/**/";
	this.m_xKnobDiv.style.zIndex="10";
	this.m_xEl.appendChild(this.m_xKnobDiv);
	this.RefreshAttributes();
	return this.m_xEl;
};

PitCtrlScrollBarV.prototype.OnResize=function()
{
	PitCtrlScrollBarV.Super.OnResize.call(this);
	this.RefreshAttributes();
};

PitCtrlScrollBarV.prototype.RefreshAttributes=function()
{
	PitCtrlScrollBarV.Super.RefreshAttributes.call(this);
	pit_SetIHs(this.m_xEl,"");
	this.m_xEl.style.overflow="hidden";
	this.m_xKnobDiv=null;
	this.m_xKnobDiv=document.createElement("a");
	this.m_xKnobDiv.style.position="absolute";
	this.m_xKnobDiv.href="javascript:/**/";
	this.m_xKnobDiv.style.zIndex="10";
	this.m_xEl.appendChild(this.m_xKnobDiv);
	g_xPitTiles.BuildVScrollBarEls(this.m_xEl,this.m_sStyle,this.m_iW,this.m_iH,this.m_iBarOfsX);
	if(this.m_xKnobDiv)
	{
		g_xPitTiles.SetElTile(this.m_xKnobDiv,this.m_sStyle+"_knob");
		if(this.m_iRange<=0)
		{
			this.m_xKnobDiv.style.visibility="hidden";
		}
		else
		{
			this.m_xKnobDiv.style.visibility="";
			this.m_xKnobDiv.style.position="absolute";
			this.m_xKnobDiv.style.left="2px";
			this.m_xKnobDiv.style.top=(this.m_iBarOfs+(this.m_iValue*(this.m_iH-this.m_iKnobH-this.m_iBarOfs*2))/this.m_iRange)+"px";
		};
	};
};

PitCtrlScrollBarV.prototype.OnCmd=function(p_iCmd,p_fVal,p_xE)
{
	return true;	
};

PitCtrlScrollBarV.prototype.SetScrollPos=function(p_iValue,p_bFireCmd,p_bForce)
{
	if(p_iValue>this.m_iRange){p_iValue=this.m_iRange;};
	if(p_iValue<0){p_iValue=0;};
	if(this.m_bValueRounded)
	{
		p_iValue=Math.round(p_iValue);
	};
	if(p_iValue==this.m_iValue&&!p_bForce){return;};
//	pit_Log("Set ",this.m_iValue," -> ",p_iValue,"  (",this.m_iRange,")");
	var iOldVal=this.m_iValue;
	this.m_iValue=p_iValue;
	var xDKnob=this.GetKnobDiv();
	if(xDKnob)
	{
		if(this.m_iRange>0)
		{
			xDKnob.style.top=(this.m_iBarOfs+(this.m_iValue*(this.m_iH-this.m_iKnobH-this.m_iBarOfs*2))/this.m_iRange)+"px";
		}
		else
		{
			xDKnob.style.top="0px";
		};
	};
	if(p_bFireCmd)
	{
//		pit_Log("Set ",this.m_iValue," -> ",p_iValue,"  (",this.m_iRange,")");
		if(this.m_iClickAutoCmd!=0)
		{
			g_xPitBoxes.FireCustomCmd(this,this.m_iClickAutoCmd,p_iValue);
		};
		if(this.m_xOnSetScrollPos)
		{
			this.m_xOnSetScrollPos(this.m_hHnd,iOldVal,this.m_iValue);
		};
	};
};

PitCtrlScrollBarV.prototype.SetRange=function(p_iRange,p_iPage)
{
	this.m_iRange=p_iRange;
	if(p_iPage)
	{
		this.m_iPage=p_iPage;
	};
	if(this.m_xEl)
	{
		this.RefreshAttributes();
	};
	this.SetScrollPos(this.m_iValue);
};

PitCtrlScrollBarV.prototype.OnMouse=function(p_xE)
{
//	pit_Log("MM ",p_xE.type," ",p_xE.m_iX," ",p_xE.m_iY);
	if(p_xE.type=="mousedown")
	{
		var xMyOfs=this.GetAbsPos();
		var iX=p_xE.m_iX-xMyOfs.m_iX;
		var iY=p_xE.m_iY-xMyOfs.m_iY;
		var xDKnob=this.GetKnobDiv();
		var iKnobNow=xDKnob.offsetTop;
		if(iY<iKnobNow)
		{
		//	this.SetScrollPos(this.m_iValue-this.m_iPage,true);
		}
		else if(iY>iKnobNow+this.m_iKnobH)
		{
		//	this.SetScrollPos(this.m_iValue+this.m_iPage,true);
		}
		else if((iY>=iKnobNow)&&(iY<iKnobNow+this.m_iKnobH))
		{
			this.m_iKnobYOfs=iY-iKnobNow;
			g_xPitBoxes.CaptureMouse(this);
		};
	}
	else if(p_xE.type=="mouseup")
	{
		var xMyOfs=this.GetAbsPos();
		var iX=p_xE.m_iX-xMyOfs.m_iX;
		var iY=p_xE.m_iY-xMyOfs.m_iY;
		var xDKnob=this.GetKnobDiv();
		var iKnobNow=xDKnob.offsetTop;
		if(iY<iKnobNow)
		{
			this.SetScrollPos(this.m_iValue-this.m_iPage,true);
		}
		else if(iY>iKnobNow+this.m_iKnobH)
		{
			this.SetScrollPos(this.m_iValue+this.m_iPage,true);
		}
		else if((iY>=iKnobNow)&&(iY<iKnobNow+this.m_iKnobH))
		{
		};
		if(this.m_iKnobYOfs!=-1000)
		{
			this.m_iKnobYOfs=-1000;
			g_xPitBoxes.ReleaseMouse();
		}
	};
	if(this.m_iKnobYOfs!=-1000)
	{
		var xMyOfs=this.GetAbsPos();
		var iX=p_xE.m_iX-xMyOfs.m_iX;
		var iY=p_xE.m_iY-xMyOfs.m_iY;
		var iNewKnobY=iY-this.m_iKnobYOfs;
		var iNewValue=((iNewKnobY-this.m_iBarOfs)*this.m_iRange)/(this.m_iH-this.m_iKnobH-this.m_iBarOfs*2);
		this.SetScrollPos(iNewValue,true);
	};
	return false;
};

/*---------------------------------------------------------

Vertical Scrolling Panel

Automatically manages the height of its content

---------------------------------------------------------*/
function PitCtrlScrollPanel(p_sBarStyle,p_iX,p_iY,p_iW,p_iH,p_sFrameStyle,p_iFrameOffset,p_sFrameBGColor,p_fFrameTransparency)
{
	PitCtrlScrollPanel.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};

	this.m_bOverlapPages=true;	// make scroll pages overlap by the average item height
	this.m_bAutoArrange=true;	// autoarrange items in height
	this.m_sBarStyle=p_sBarStyle;
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_iVSpacing=0;
	this.m_iContainerH=0;
	this.m_xContainer=null;
	this.m_xBar=new PitCtrlScrollBarV(p_sBarStyle,p_iX,p_iY,p_iW,p_iH);
	this.m_bMouseEvtTarget=true;
	this.m_bCmdEvtTarget=false;
	this.m_bScrollEvtTarget=true;
	//this.AddChild(this.m_xBar);
	
	var xT=this;
	this.m_xBar.m_xOnSetScrollPos=function(p_hHnd,p_iOld,p_iNew)
	{
		xD=xT.GetContainerDiv();
		if(xD)
		{
			xD.style.position="absolute";
			xD.style.top=-p_iNew+"px";
			xD.style.left="0px";
			xT.OnSetScrollPos(p_iNew,xT.m_xBar.m_iRange);
		};
	};
	this.m_sFrameStyle=p_sFrameStyle;
	this.m_sFrameBGColor=p_sFrameBGColor;
	this.m_iFrameOffset=p_iFrameOffset;
	this.m_fFrameTransparency=p_fFrameTransparency;
};
Inherit(PitCtrlScrollPanel,PitCtrlPanel,"PitCtrlScrollPanel");

PitCtrlScrollPanel.prototype.Destruct=function()
{
	pit_Purge(this.m_xContainer);
	PitCtrlScrollPanel.Super.Destruct.call(this);
};

PitCtrlScrollPanel.prototype.GetContainerDiv=function()
{
	if(!this.m_xContainer) {this.MakeEl();};
	return this.m_xContainer;
};

PitCtrlScrollPanel.prototype.GetScrollPos=function()
{
	return this.m_xBar.m_iValue;
};

PitCtrlScrollPanel.prototype.GetScrollRange=function()
{
	return this.m_xBar.m_iRange;
};

PitCtrlScrollPanel.prototype.SetScrollPos=function(p_iValue,p_bFireCmd)
{
	if(p_iValue>this.m_xBar.m_iRange){p_iValue=this.m_xBar.m_iRange;};
	if(p_iValue<0){p_iValue=0;};
	xD=this.GetContainerDiv();
	if(xD)
	{
		xD.style.position="absolute";
		xD.style.top=-p_iValue+"px";
		xD.style.left="0px";
	};
	this.m_xBar.SetScrollPos(p_iValue,p_bFireCmd);
};

PitCtrlScrollPanel.prototype.MakeEl=function()
{
	if(this.m_xEl) {return this.m_xEl;};
	PitCtrlScrollPanel.Super.MakeEl.call(this);
	this.m_xContainer=document.createElement("div");
	this.m_xContainer.style.position="absolute";
	this.m_xContainer.name="container";
	this.m_xEl.appendChild(this.m_xContainer);
	this.RefreshAttributes();
	return this.m_xEl;
};

PitCtrlScrollPanel.prototype.ClearContent=function()
{
	var i=0;
	while(i<this.m_axSubBoxes.length)
	{
		if(this.m_axSubBoxes[i]!=this.m_xBar)
		{
			this.DelChild(this.m_axSubBoxes[i]);
		}
		else
		{
			i++;
		};
	};
	this.RefreshAttributes();
};

PitCtrlScrollPanel.prototype.AddChild=function(p_xBox)
{
	this.m_axSubBoxes.push(p_xBox);
	p_xBox.m_hParentHnd=this.m_hHnd;
	var xMyEl=this.GetContainerDiv();
	xMyEl.appendChild(p_xBox.MakeEl());
	p_xBox.RefreshAttributes();
	p_xBox.OnShow();
	return p_xBox;
};

PitCtrlScrollPanel.prototype.OnSetScrollPos=function(p_iPos,p_iRange)
{
	
};

PitCtrlScrollPanel.prototype.OnMouse=function(p_xE)
{
	if(p_xE.m_iMWheel)
	{
		if(p_xE.m_iMWheel>0)
		{
			this.m_xBar.SetScrollPos(Math.floor(this.m_xBar.m_iValue-this.m_xBar.m_iPage/8),true);
		}
		else if(p_xE.m_iMWheel<0)
		{
			this.m_xBar.SetScrollPos(Math.ceil(this.m_xBar.m_iValue+this.m_xBar.m_iPage/8),true);
		};
		pit_StopE(p_xE);
		return false;
	};
	return true;	
};

PitCtrlScrollPanel.prototype.RefreshAttributes=function()
{
	var xD=this.GetEl();
	if(!xD){return;};
	if(this.m_axSubBoxes.indexOf(this.m_xBar)==-1)
	{
		this.m_axSubBoxes.push(this.m_xBar);
		this.m_xBar.m_hParentHnd=this.m_hHnd;
		xD.appendChild(this.m_xBar.MakeEl());
	};
	
	this.m_xBar.SetRect(this.m_iW-this.m_xBar.m_iBarW,0,this.m_xBar.m_iBarW,this.m_iH);
	var iAvg=0;
	var iCnt=0;
	this.m_iContainerH=0;
	for(var iWIdx in this.m_axSubBoxes)
	{
		var xW=this.m_axSubBoxes[iWIdx];
		if((xW)&&(xW.m_hHnd)&&(xW!=this.m_xBar)&&(xW.MakeEl().style.visibility!="hidden"))
		{
			if(this.m_bAutoArrange)
			{
				var iY=this.m_iContainerH;
				if(xW.m_iMinY&&iY<xW.m_iMinY) {this.m_iContainerH+=xW.m_iMinY-iY;iY=xW.m_iMinY;};
				xW.MakeEl().style.top=iY+"px";
				if(xW.m_iH) {this.m_iContainerH+=xW.m_iH;};
				this.m_iContainerH+=this.m_iVSpacing;
			}
			else
			{
				if(xW.m_iH+xW.m_iY>this.m_iContainerH)
				{
					this.m_iContainerH=xW.m_iH+xW.m_iY;
				};
			};
			iCnt++;
			iAvg+=xW.m_iH;
		};
	};
	if(iCnt>1){iAvg/=iCnt;};
	
	xD.style.overflow="hidden";
	xD=this.GetContainerDiv();
	if(xD)
	{
		xD.style.position="absolute";
		xD.style.top=-this.m_xBar.m_iValue+"px";
		xD.style.left="0px";
		xD.style.width=this.m_iW-this.m_xBar.m_iW;
		xD.style.height=this.m_iContainerH;
	};
	if((this.m_bOverlapPages)&&(iCnt>1))
	{
		this.m_xBar.SetRange(this.m_iContainerH-this.m_iH,this.m_iH-iAvg);
	}
	else
	{
		this.m_xBar.SetRange(this.m_iContainerH-this.m_iH,this.m_iH);
	};
	PitCtrlScrollPanel.Super.RefreshAttributes.call(this);
};





/*---------------------------------------------------------

Vertical Item List

Automatically manages the height of its content

---------------------------------------------------------*/
function PitCtrlItemList(p_sBarStyle,p_iX,p_iY,p_iW,p_iH)
{
	PitCtrlItemList.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};

	this.m_bOverlapPages=true;	// make scroll pages overlap by the average item height
	this.m_bAutoArrange=true;	// autoarrange items in height
	this.m_sBarStyle=p_sBarStyle;
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_iContainerH=0;
	this.m_xContainer=null;
	this.m_xBar=new PitCtrlScrollBarV(p_sBarStyle,p_iX,p_iY,p_iW,p_iH);
	this.AddChild(this.m_xBar);
	var xT=this;
	this.m_xBar.m_xOnSetScrollPos=function(p_hHnd,p_iOld,p_iNew)
	{
		xD=xT.GetContainerDiv();
		if(xD)
		{
			xD.style.position="absolute";
			xD.style.top=-p_iNew+"px";
			xD.style.left="0px";
		};
	};
};
Inherit(PitCtrlItemList,PitBox,"PitCtrlItemList");

PitCtrlItemList.prototype.GetContainerDiv=function()
{
	if(!this.m_xContainer)
	{
		this.MakeEl();
	};
	return this.m_xContainer;
};

PitCtrlItemList.prototype.MakeEl=function()
{
	if(this.m_xEl) {return this.m_xEl;};
	PitCtrlItemList.Super.MakeEl.call(this);
//	g_xPitTiles.BuildVScrollBarEls(this.m_xEl,this.m_sStyle,this.m_iW,this.m_iH);
	this.m_xContainer=document.createElement("div");
	this.m_xContainer.style.position="absolute";
	this.m_xEl.appendChild(this.m_xContainer);
	this.RefreshAttributes();
	return this.m_xEl;
};

PitCtrlItemList.prototype.AddChild=function(p_xBox)
{
	this.m_axSubBoxes.push(p_xBox);
	p_xBox.m_hParentHnd=this.m_hHnd;
	var xMyEl=this.GetContainerDiv();
	xMyEl.appendChild(p_xBox.MakeEl());
	p_xBox.RefreshAttributes();
	p_xBox.OnShow();
	return p_xBox;
};

PitCtrlItemList.prototype.RemChild=function(p_xBox)
{
	var iIdx=this.m_axSubBoxes.indexOf(p_xBox);
	if(iIdx!=-1)
	{
		var xTE=this.GetContainerDiv();
		var xSE=p_xBox.GetEl();
		if(xTE&&xSE)
		{
			xTE.removeChild(xSE);
			pit_Purge(xSE);
		};
		this.m_axSubBoxes.splice(iIdx,1);
		p_xBox.m_hHnd=-1;
	};
};

PitCtrlItemList.prototype.RefreshAttributes=function()
{
	this.m_xBar.SetRect(this.m_iW-this.m_xBar.m_iBarW,0,this.m_xBar.m_iBarW,this.m_iH);
	var xD=this.GetEl();
	if(!xD){return;};
	var iAvg=0;
	var iCnt=0;
	this.m_iContainerH=0;
	for(var iWIdx in this.m_axSubBoxes)
	{
		var xW=this.m_axSubBoxes[iWIdx];
		if((xW)&&(xW.m_hHnd)&&(xW!=this.m_xBar))
		{
			if(this.m_bAutoArrange)
			{
				xW.SetPos(0,this.m_iContainerH);
				this.m_iContainerH+=xW.m_iH;
			}
			else
			{
				if(xW.m_iH+xW.m_iY>this.m_iContainerH)
				{
					this.m_iContainerH=xW.m_iH+xW.m_iY;
				};
			};
			iCnt++;
			iAvg+=xW.m_iH;
		};
	};
	if(iCnt>0){iAvg/=iCnt;};

	xD.style.overflow="hidden";
	xD=this.GetContainerDiv();
	if(xD)
	{
		xD.style.position="absolute";
		xD.style.top=-this.m_xBar.m_iValue+"px";
		xD.style.left="0px";
		xD.style.width=this.m_iW-this.m_xBar.m_iW;
		xD.style.height=this.m_iContainerH;
	};
	if(this.m_bOverlapPages)
	{
		this.m_xBar.SetRange(this.m_iContainerH-this.m_iH,this.m_iH-iAvg);
	}
	else
	{
		this.m_xBar.SetRange(this.m_iContainerH-this.m_iH,this.m_iH);
	};

	PitCtrlItemList.Super.RefreshAttributes.call(this);
};



function PitCtrlEdit(p_iX,p_iY,p_iW,p_iH,p_bPassword,p_bMultiLine,p_bReadOnly)
{
	PitCtrlEdit.BaseCtor.call(this);
	this.m_sTagName="input";
	if(p_bMultiLine) {this.m_sTagName="textarea";};
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_bMultiLine=p_bMultiLine;
	this.m_bPassword=p_bPassword;
	this.m_bReadOnly=p_bReadOnly;
	this.m_bMouseEvtTarget=true;
	try {this.AddStyles(g_xPitStyleDef.PitCtrlEdit);} catch(e) {};
};
Inherit(PitCtrlEdit,PitBox,"PitCtrlEdit");

PitCtrlEdit.prototype.MakeEl=function()
{
	if(this.m_xEl){return this.m_xEl;};
	PitCtrlEdit.Super.MakeEl.call(this);
//	this.m_xEl.style.border="none";
	if(this.m_bMultiLine){this.m_xEl.style.overflow="auto";};
	//this.m_xEl.style.overflow="hidden";
	if(this.m_bPassword) {this.m_xEl.type="password";}
	else if(this.m_bCheckBox) {this.m_xEl.type="checkbox";};
	if(this.m_bReadOnly) {this.m_xEl.disabled=true;};
	this.m_xEl.style.border="1px solid #999";
	if(this.m_xStyleDef&&this.m_xStyleDef.BGColor) {this.m_xEl.style.backgroundColor=this.m_xStyleDef.BGColor;};
	return this.m_xEl;
};

PitCtrlEdit.prototype.SetText=function(p_sText)
{
	this.MakeEl().value=p_sText;
};

PitCtrlEdit.prototype.GetText=function()
{
	if(!this.m_xEl){return "";};
	return this.m_xEl.value;
};

function PitCheckBox(p_iX, p_iY, p_iW, p_iH, p_bChecked)
{
	PitCheckBox.BaseCtor.call(this);

	this.m_sTagName="input";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_bChecked=p_bChecked;
	this.m_bMouseEvtTarget=true;
};
Inherit(PitCheckBox, PitBox, "PitCheckBox");

PitCheckBox.prototype.MakeEl = function()
{

	if(this.m_xEl){return this.m_xEl;};
	PitCheckBox.Super.MakeEl.call(this);

	this.m_xEl.type="checkbox";
	this.m_xEl.style.border="1px solid #999";
				
	//this.m_xEl.innerText="Test";
	//alert(this.m_xEl.title);

	if (typeof(this.m_bChecked)!="undefined"){	this.m_xEl.checked=this.m_bChecked;};

	return this.m_xEl;
};



function PitCtrlDropBox(p_iX,p_iY,p_iW,p_iH,p_axOptions)
{
	PitCtrlDropBox.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_axOptions=p_axOptions;
	this.m_xSelEl=0;
};
Inherit(PitCtrlDropBox,PitBox,"PitCtrlDropBox");

PitCtrlDropBox.prototype.MakeEl=function()
{
	if(this.m_xEl){return this.m_xEl;};
	PitCtrlDropBox.Super.MakeEl.call(this);
	var xSB=new PitStringBuilder();
	xSB.Add("<select>");
	if(this.m_axOptions)
	{
		for(var i=0;i<this.m_axOptions.length;i++)
		{
			var xO=this.m_axOptions[i];
			var xOp=new Object();
			var sName=xO[0];
			var sValue=sName;
			if(xO.length>=1) {sValue=xO[1];};
			var sSel="";
			if(xO.length>=2&&xO[2]) {sSel="selected='selected'";};
			xSB.Add("<option value='"+sValue+"' "+sSel+">"+sName+"</option>");
		};
	};
	xSB.Add("</select>");
	pit_SetIHs(this.m_xEl,xSB.GetString());
	this.m_xSelEl=this.m_xEl.firstChild;
	this.m_xSelEl.style.position="absolute";
	this.m_xSelEl.style.left="0px";
	this.m_xSelEl.style.top="0px";
	this.m_xSelEl.style.width=this.m_iW+"px";
	this.m_xSelEl.style.height=this.m_iH+"px";
	this.m_xSelEl.setAttribute("pithnd",this.m_hHnd);
	this.m_xSelEl.style.border="1px solid #999";
	return this.m_xEl;
};

PitCtrlDropBox.prototype.Select=function(p_sValue)
{
	if(!this.m_xSelEl){return;};
	var iIdx=-1;
	for(var i=0;i<this.m_xSelEl.options.length;i++)
	{
		if(this.m_xSelEl.options[i].value==p_sValue) {iIdx=i;break;};
	};
	
	if(iIdx!=-1)
	{
		this.m_xSelEl.selectedIndex=iIdx;
	};
};

PitCtrlDropBox.prototype.GetSelected=function()
{
	if(!this.m_xSelEl){return;};
	return this.m_xSelEl.options[this.m_xSelEl.selectedIndex].value;
};






function PitCtrlTab(p_iX,p_iY,p_iW,p_sStyle)
{
	PitCtrlTab.BaseCtor.call(this);
	this.m_sTagName="div";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=20;
	this.m_sFrameStyle=p_sStyle;
	
	this.m_iCloseTabs=0;
	
	this.m_iTabIdxOffset=0;
	this.m_iTabScrollDir=0;
	
	this.m_sActiveTab="";
	this.m_axTabs=new Array();
	
	this.m_xOnPreTabClose=null;
	this.m_xOnTabClose=null;
	this.m_xOnTabActivate=null;
	this.m_xOnTabDeactivate=null;
	this.m_bAddingTabs=false;
	this.m_iRefreshTimer=-1;
};
Inherit(PitCtrlTab,PitBox,"PitCtrlTab");

PitCtrlTab.prototype.Destruct=function()
{
	if(this.m_iRefreshTimer)
	{
		window.clearTimeout(this.m_iRefreshTimer);
		this.m_iRefreshTimer=-1;
	};
	this.ClearFnc();
	pit_Purge(this.m_axTabs);
	PitCtrlTab.Super.Destruct.call(this);
};

PitCtrlTab.prototype.AddTab=function(p_sTitle,p_iWidth,p_bNoCloseButton,p_sText)
{
	if(!this.m_bAddingTabs)
	{
//		debugger;
//		alert("Not inside StartTabs()/EndTabs() brace");return;
	};
	var xT=new Object();
	xT.m_sTitle=p_sTitle;
	if(p_sText)
	{
		xT.m_sText=p_sText;
	}
	else
	{
		xT.m_sText=p_sTitle;
	};
	if(p_bNoCloseButton)
	{
		xT.m_bNoCloseButton=true;
	}
	else
	{
		xT.m_bNoCloseButton=false;
	};
	if(!p_iWidth)
	{
		xT.m_iW=0;
	}
	else
	{
		xT.m_iW=p_iWidth;
	};
	xT.m_iOffset=0;
	this.m_axTabs.push(xT);
};

PitCtrlTab.prototype.StartTabs=function()
{
	if(this.m_bAddingTabs)
	{
//		alert("Nesting error in StartTabs()/EndTabs() brace");return;
	};
	this.m_bAddingTabs=true;
};

PitCtrlTab.prototype.EndTabs=function()
{
	if(!this.m_bAddingTabs)
	{
//		alert("Nesting error in StartTabs()/EndTabs() brace");return;
	};
	this.m_bAddingTabs=false;
	if(this.GetEl())
	{
		this.RefreshAttributes();
	};
};

PitCtrlTab.prototype.AddSingleTab=function(p_sTitle,p_iWidth,p_bNoCloseButton,p_sText)
{
	this.StartTabs();
	this.AddTab(p_sTitle,p_iWidth,p_bNoCloseButton,p_sText);
	this.EndTabs();
};

PitCtrlTab.prototype.FindTab=function(p_sTitle)
{
	var i,iC=this.m_axTabs.length;
	for(i=0;i<iC;i++)
	{
		if(this.m_axTabs[i].m_sTitle==p_sTitle){return i;};
	};
	return -1;
};

PitCtrlTab.prototype.GetTab=function(p_iIndex)
{
	if((p_iIndex<0)||(p_iIndex>=this.m_axTabs.length)){return "";};
	return this.m_axTabs[p_iIndex].m_sTitle;
};

PitCtrlTab.prototype.SetTabText=function(p_sID,p_sText)
{
	var i=this.FindTab(p_sID);
	if(i!=-1)
	{
		if(this.m_axTabs[i].m_sText!=p_sText)
		{
			this.m_axTabs[i].m_sText=p_sText;
			this.RefreshAttributes();
		};
	};
};

PitCtrlTab.prototype.GetActiveTab=function()
{
	return this.m_sActiveTab;
};

PitCtrlTab.prototype.SetActiveTab=function(p_sTitle,p_bNoCallbacks)
{
	var sOld=this.m_sActiveTab;
	var iIdx=this.FindTab(p_sTitle);
	var sNew=this.GetTab(iIdx);
	if(sOld==sNew)
	{
		return;
	};
	if(!p_bNoCallbacks){if(this.m_xOnTabDeactivate&&sOld){this.m_xOnTabDeactivate(sOld);};};
	this.m_sActiveTab=sNew;
	if(this.GetEl())
	{
		this.RefreshAttributes();
	};
	if(!p_bNoCallbacks){if(this.m_xOnTabActivate&&sNew){this.m_xOnTabActivate(sNew);};};
};

PitCtrlTab.prototype.MoveTab=function(p_sTitle,p_bFront)
{
	var iIdx=this.FindTab(p_sTitle);
	if(iIdx==-1){return;};
	if(!p_bFront)
	{
		if(iIdx==this.m_axTabs.length-1){return;};
		var xT=this.m_axTabs[iIdx];
		this.m_axTabs.splice(iIdx,1);
		this.m_axTabs.push(xT);
		this.RefreshAttributes();
	}
	else
	{
		if(iIdx==0){return;};
		var xT=this.m_axTabs[iIdx];
		this.m_axTabs.splice(iIdx,1);
		this.m_axTabs.unshift(xT);
		this.RefreshAttributes();
	};
};

PitCtrlTab.prototype.CloseAllTabs=function()
{
	while(this.m_axTabs.length>0)
	{
		this.CloseTab(this.m_axTabs[0].m_sTitle);
	};
	this.m_sActiveTab="";
};

PitCtrlTab.prototype.CloseTab=function(p_sTitle)
{
	var iIdx=this.FindTab(p_sTitle);
	if(iIdx==-1){return;};
	if(this.m_xOnPreTabClose){this.m_xOnPreTabClose(p_sTitle);};
	var sActive=this.GetActiveTab();
	if(sActive==p_sTitle)
	{
		if(this.m_xOnTabDeactivate&&(p_sTitle)){this.m_xOnTabDeactivate(p_sTitle);};
		var iIdx=this.FindTab(p_sTitle);
		sActive="";
		if(iIdx<this.m_axTabs.length-1){sActive=this.m_axTabs[iIdx+1].m_sTitle;}
		else if(iIdx>0){sActive=this.m_axTabs[iIdx-1].m_sTitle;};
		this.m_sActiveTab=sActive;
		if(this.m_xOnTabActivate&&sActive){this.m_xOnTabActivate(sActive);};
	};
	pit_Purge(this.m_axTabs[iIdx]);
	this.m_axTabs.splice(iIdx,1);
	if(this.m_xOnTabClose){this.m_xOnTabClose(p_sTitle);};
	if(this.GetEl())
	{
		this.RefreshAttributes();
	};
};

PitCtrlTab.prototype.AutoTabScrollTimer=function()
{
	var xThis=this;
	if(xThis.m_iTabScrollDir==0){return;};
	xThis.m_iTabIdxOffset+=xThis.m_iTabScrollDir;xThis.RefreshAttributes();
//	window.setTimeout(function(){xThis.AutoTabScrollTimer();},200);
};

PitCtrlTab.prototype.RefreshAttributes=function()
{
	if(this.m_iRefreshTimer==-1)
	{
		var xThis=this;
		this.m_iRefreshTimer=window.setTimeout(function(){xThis.DoRefreshAttributes()},0);
	};
};

PitCtrlTab.prototype.DoRefreshAttributes=function()
{
	this.m_iRefreshTimer=-1;
	var xE=this.MakeEl();
//;;	debugger;
	var xThis=this;
	var iX=0;
	var iT,iTC=this.m_axTabs.length;
	var sLast="a";
	var sStyle=this.m_sFrameStyle+"_";
	var xT;
	var bClose;
	var bActive;
	var xDTabs=document.createElement("div");
	xDTabs.style.position="absolute";
	xDTabs.style.left="0px";
	xDTabs.style.top="0px";
	xDTabs.style.width=this.m_iW+"px";
	xDTabs.style.height=this.m_iH+"px";
	xDTabs.style.overflow="visible";
	xDTabs.style.overflow="hidden";
	pit_SetIH(xE,"");
	xE.appendChild(xDTabs);
	for(iT=0;iT<iTC;iT++)
	{
		xT=this.m_axTabs[iT];
		bClose=false;
		bActive=false;
		if(xT.m_sTitle==this.m_sActiveTab){bActive=true;};
		if(this.m_iCloseTabs>0)
		{
			if((bActive)||(this.m_iCloseTabs==2)){bClose=true;};
		};
		if(xT.m_bNoCloseButton){bClose=false;};
		var sThis="b";
		var sNext="a";
		var iTextOfs=4;
		var iW=xT.m_iW;
		if(bActive){sThis="c";iTextOfs=2;};
		xT.m_iOffset=iX;
		iX=g_xPitTiles.AddSingleDiv(xDTabs,sStyle+sLast+sThis,iX,0);
		var xText=document.createElement("span");
		xText.style.position="absolute";
		xText.style.left=(1)+"px";
		xText.style.top=iTextOfs+"px";
		if(iW==0)
		{
			xText.style.width="auto";
		}
		else
		{
			xText.style.width=xT.m_iW+"px";
		};
		xText.style.fontSize="12px";
		xText.style.height=(18-iTextOfs)+"px";
		xText.style.overflow="hidden";
		xText.style.cursor="pointer";
		var sLabelText;
		if(bClose)
		{
			sLabelText="&nbsp;"+xT.m_sText+"&nbsp;";
		}
		else
		{
			sLabelText="&nbsp;"+xT.m_sText+"&nbsp;";
//			sLabelText=xT.m_sText;
		};
		pit_SetIHs(xText,sLabelText);
		xText.style.zIndex=0;
		var xBtn=document.createElement("a");
		xBtn.className="pitTextGButton";
		xBtn.appendChild(xText);
		xDTabs.appendChild(xBtn);
		if(iW==0)
		{
			iW=xText.offsetWidth;
			if(iW==0)
			{
				iW=sLabelText.length*(8);
			};
		};
		xText.style.width=(iW)+"px";
		xT.m_iRealW=iW;
		xBtn.href="javascript:/**/";
		xBtn.style.position="absolute";
		xBtn.style.left=(iX)+"px";
		xBtn.style.top=(0)+"px";
		xBtn.style.width=(iW)+"px";
		xBtn.style.height=(18)+"px";
		xBtn.onmouseup=function(idx){return function(){g_xPitBoxes.m_bLMBDown=false;xThis.SetActiveTab(idx);return true;};}(xT.m_sTitle);
		iX+=g_xPitTiles.AddStretchedHDivs(xBtn,sStyle+sThis,0,0,iW,"div",true);
		if(bClose)
		{
			iX=g_xPitTiles.AddSingleDiv(xDTabs,sStyle+sThis+"x",iX,0,"a",
				function(idx){return function(){xThis.CloseTab(idx);};}(xT.m_sTitle)
			);
		};
		sLast=sThis;
	};
//	if(iX<this.m_iW)
	{
		var iX2=iX;
		if(sLast!="a")
		{
			iX2=g_xPitTiles.AddSingleDiv(xDTabs,sStyle+sLast+"a",iX2,0);
		};
		iX2=g_xPitTiles.AddStretchedHDivs(xDTabs,sStyle+"a",iX2,0,this.m_iW-iX2);
	};
	if(iX>this.m_iW)
	{
		var xDprev=document.createElement("a");
		xDprev.href="javascript:/**/";
		g_xPitTiles.SetElTile(xDprev,sStyle+"p");
		var xDnext=document.createElement("a");
		xDnext.href="javascript:/**/";
		g_xPitTiles.SetElTile(xDnext,sStyle+"n");
		if(1)
		{
		xDprev.onmousedown=function(){xThis.m_iTabIdxOffset-=1;/*xThis.m_iTabScrollDir=-1;window.setTimeout(function(){xThis.AutoTabScrollTimer();},400);*/xThis.RefreshAttributes();return true;};
		xDprev.onmouseup=function(){g_xPitBoxes.m_bLMBDown=false;xThis.m_iTabScrollDir=0;return true;};
		xDnext.onmousedown=function(){xThis.m_iTabIdxOffset+=1;/*xThis.m_iTabScrollDir=1;window.setTimeout(function(){xThis.AutoTabScrollTimer();},400);*/xThis.RefreshAttributes();return true;};
		xDnext.onmouseup=function(){g_xPitBoxes.m_bLMBDown=false;xThis.m_iTabScrollDir=0;return true;};
		};
		xE.appendChild(xDprev);
		xE.appendChild(xDnext);
		var iW1=parseInt(xDprev.style.width);
		var iW2=parseInt(xDprev.style.width);
		pit_SetElPos(xDprev,0,0);
		pit_SetElPos(xDnext,this.m_iW-iW2,0);
		xDTabs.style.width=(this.m_iW-iW1-iW2)+"px";
		xDTabs.style.left=iW1+"px";
		var xLast=this.m_axTabs[this.m_axTabs.length-1];
		if(this.m_iTabIdxOffset<0){xThis.m_iTabScrollDir=0;this.m_iTabIdxOffset=0;};
		if(this.m_iTabIdxOffset>=iTC){xThis.m_iTabScrollDir=0;this.m_iTabIdxOffset=iTC-1;};
		iOffset=this.m_axTabs[this.m_iTabIdxOffset].m_iOffset;
		var iWLast=xLast.m_iWReal+5;
		while((xLast.m_iOffset+iWLast-iOffset<this.m_iW-iW1-iW2)&&(this.m_iTabIdxOffset>0))
		{
			this.m_iTabIdxOffset--;
			iOffset=this.m_axTabs[this.m_iTabIdxOffset].m_iOffset;
		};
		var xN=xDTabs.firstChild;
		while(xN)
		{
			xN.style.left=(parseInt(xN.style.left)-iOffset)+"px";
			xN=xN.nextSibling;
		};
	};
	PitCtrlTab.Super.RefreshAttributes.call(this);
//	xDTabs.style.width="auto";
//	xDTabs.style.overflow="hidden";
};



function PitCtrlBBCode(p_iX,p_iY,p_iW,p_iH)
{
	PitCtrlBBCode.BaseCtor.call(this);
	this.m_sTagName="div";
	this.m_sContentClass="";
	if(!p_iX){p_iX=0;};
	if(!p_iY){p_iY=0;};
	if(!p_iW){p_iW=100;};
	if(!p_iH){p_iH=100;};
	this.m_iX=p_iX;
	this.m_iY=p_iY;
	this.m_iW=p_iW;
	this.m_iH=p_iH;
	this.m_iBaseFontSize=0;
	this.m_iAutoFontBaseArea=p_iW*p_iH;

	this.m_xOutput=null;
	this.m_xScrollBox=null;
	this.AddStyles(g_xPitStyleDef.PitCtrlBBCode);

	this.m_xRenderers={};
};

Inherit(PitCtrlBBCode,PitBox,"PitCtrlBBCode");

PitCtrlBBCode.prototype.RefreshAttributes=function()
{
	var xE=this.GetEl();
	if(!this.m_xOutput)
	{
		this.m_iAutoFontBaseArea=this.m_iW*this.m_iH;
		this.m_xOutput=new PitCtrlScrollPanel(this.m_xStyleDef.ScrollStyle,0,0,this.m_iW,this.m_iH,"",0,"",1);
		this.m_xScrollBox=new PitCtrlPanel(0,0,this.m_iW-32,2);
		this.m_xOutput.AddChild(this.m_xScrollBox);
		var xScrD=this.m_xScrollBox.MakeEl();
		this.AddChild(this.m_xOutput);
	};
	
	if(this.m_iBaseFontSize)
	{
		var iFontSize=this.m_iBaseFontSize;
		var iArea=this.m_iW*this.m_iH;
		if(iArea>0)
		{
			iFontSize=Math.ceil(this.m_iBaseFontSize*Math.sqrt(iArea/this.m_iAutoFontBaseArea));
			if(iFontSize<10){iFontSize=10;};
		};
		this.m_xScrollBox.GetEl().style.fontSize=iFontSize+"px";
	};
	
	PitCtrlBBCode.Super.RefreshAttributes.call(this);
	
	this.m_xOutput.SetRect(0,0,this.m_iW,this.m_iH);
	this.m_xScrollBox.SetRect(0,0,this.m_iW-32,this.m_iH);
	this.m_xScrollBox.GetEl().style.overflow="visible";
	this.m_xScrollBox.SetAutoHeight();
	this.m_xScrollBox.UpdateRect();
	this.m_xOutput.RefreshAttributes();
};


PitCtrlBBCode.prototype.SetBBCode=function(p_xText)
{
	this.m_bAutoArrange=true;
	this.m_bOverlapPages=false;
	this.m_iVSpacing=0;
	var xD=this.m_xScrollBox.MakeEl();
	pit_SetIH(xD,"");
	xD.className=this.m_sContentClass;
	pit_RenderBBCodeStruct(p_xText,xD,this.m_xRenderers,false);
	this.RefreshAttributes();
};

PitCtrlBBCode.prototype.LoadBBCode=function(p_sURL,p_bCacheable)
{
	var xD=this.m_xScrollBox.MakeEl();
	pit_SetIH(xD,"Loading...");
	var xRPC=new PitRPC();
	xRPC.SetURL(p_sURL);
	if(p_bCacheable)
	{
		xRPC.m_sMethod="get";
	};
	xRPC.m_bNoID=true;
	var xThis=this;
	xRPC.OnSucceed=function(){
		if((xRPC.m_xResults)&&(xRPC.m_xResults.length))
		{
			xThis.SetBBCode(xRPC.m_xResults);
		}
		else
		{
			pit_SetIH(xThis.MakeEl(),xRPC.m_sResultText);
		};
	};
	xRPC.OnFail=function(){
		pit_SetIH(xThis.MakeEl(),"File not found:"+p_sURL);
	};
	xRPC.Send();
};



function PitPopupMenu() {
	this.m_axItems=new Array();
	this.m_iItemW=20;
	this.m_iItemH=18;
	this.m_iFontSize=10;
	this.m_sFontWeight="bold";
	this.m_sFontFamily="Verdana";
	this.m_xParent=null;
	this.m_xBox=null;
	this.m_iActiveItem=-1;
	this.m_bAutoCancel=false;
};
PitPopupMenu.prototype.m_sTypeName="PitPopupMenu";
	
PitPopupMenu.prototype.AddItem=function(p_sTitle,p_iID)
{
	var xO=new Object();
	xO.m_sTitle=p_sTitle;
	xO.m_iID=p_iID;
	xO.m_xD=null;
	xO.m_iIndex=this.m_axItems.length;
	var iW=Math.ceil(this.m_iFontSize*p_sTitle.length*0.75);
	if(iW>this.m_iItemW){this.m_iItemW=iW;};
	this.m_axItems.push(xO);
};

PitPopupMenu.prototype.EventCB=function(p_xE)
{
	if(p_xE.type=="keyup")
	{
		if(p_xE.m_iKeyCode==27)
		{
			this.m_iActiveItem=-1;
			this.Done();
		};
		if(p_xE.m_iKeyCode==46)
		{
			var iID=-1;
			if(this.m_iActiveItem!=-1){iID=this.m_axItems[this.m_iActiveItem].m_iID;};
			if(iID!=-1)
			{
				this.OnDelKey(iID);
			};
			this.m_iActiveItem=-1;
			this.Done();
		};
	};
	if((p_xE.type=="mouseup")||(p_xE.type=="mousemove")||(p_xE.type=="mousedown"))
	{
		var xAbs=pit_GetAbsPos(this.m_xBox);
		var iX=p_xE.m_iX-xAbs.m_iX;
		var iY=p_xE.m_iY-xAbs.m_iY;
		var iLastActive=this.m_iActiveItem;
		if((iX<0)||(iX>=this.m_iItemW))
		{
			this.m_iActiveItem=-1;
		}
		else
		{
			this.m_iActiveItem=Math.floor(iY/this.m_iItemH);
			if((this.m_iActiveItem<0)||(this.m_iActiveItem>=this.m_axItems.length))
			{
				this.m_iActiveItem=-1;
			};
		};
		if(iLastActive!=this.m_iActiveItem)
		{
			var i,iC=this.m_axItems.length;
			for(i=0;i<iC;i++)
			{
				if(i==this.m_iActiveItem)
				{
					this.OnItemEnter(this.m_axItems[i]);
				}
				else
				{
					this.OnItemLeave(this.m_axItems[i]);
				};
			};
			if((this.m_iActiveItem==-1)&&(this.m_bAutoCancel))
			{
				this.Done();
				return true;
			};
		};
		if(p_xE.type=="mouseup")
		{
			this.Done();
			return true;
		};
		pit_StopE(p_xE);
		return true;
	};
	return false;
};

PitPopupMenu.prototype.Select=function(p_iID)
{
	this.m_iActiveItem=-1;
	var i,iC=this.m_axItems.length;
	for(i=0;i<iC;i++)
	{
		if(this.m_axItems[i].m_iID==p_iID)
		{
			this.m_iActiveItem=i;
			return;
		};
	};
};

PitPopupMenu.prototype.Done=function()
{
	g_xPitBoxes.ReleaseMouse(0);
	g_xPitBoxes.RemEventFilter("PitPopupMenu");
	var iID=-1;
	if(this.m_iActiveItem!=-1){iID=this.m_axItems[this.m_iActiveItem].m_iID;};
	this.m_axItems=null;
	this.m_xParent.removeChild(this.m_xBox);
	pit_Purge(this.m_xBox);
	this.m_xBox=0;
	if(this.m_iActiveItem==-1)
	{
		this.OnCancel();
	}
	else
	{
		this.OnOK(iID);
	};
};

PitPopupMenu.prototype.Show=function(p_xParent,p_iX,p_iY)
{
	g_xPitBoxes.AddEventFilter("PitPopupMenu",this.EventCB,this);
	g_xPitBoxes.CaptureMouse(0);
	var iParentW=512;
	var iParentH=512;
	if(p_xParent)
	{
		this.m_xParent=p_xParent;
		iParentW=this.m_xParent.offsetWidth;
		iParentH=this.m_xParent.offsetHeight;
	}
	else
	{
		this.m_xParent=document.body;
		iParentW=this.m_xParent.scrollWidth;
		iParentH=this.m_xParent.scrollHeight;
		if(!iParentW||!iParentH)
		{
			//mozilla
			iParentW=window.innerWidth;
			iParentH=window.innerHeight;
		};
	};
	var xR=pit_GetAbsPos(this.m_xParent);

	p_iX-=this.m_iItemW-20;
	var iHover=this.m_iActiveItem;
	if(iHover==-1){iHover=0;};
	p_iY-=((iHover)*Math.floor(this.m_iItemH));
	
	var iW=this.m_iItemW;
	var iH=this.m_iItemH*this.m_axItems.length;
	if(p_iX+iW>iParentW){p_iX=iParentW-iW;};
	if(p_iY+iH>iParentH){p_iY=iParentH-iH;};
	if(p_iX<0){p_iX=0;};
	if(p_iY<0){p_iY=0;};
	this.m_xBox=document.createElement("div");
	this.m_xBox.style.position="absolute";
	this.m_xBox.style.fontFamily=this.m_sFontFamily;
	this.m_xBox.style.fontSize=this.m_iFontSize+"px";
	this.m_xBox.style.fontWeight=this.m_sFontWeight;
	this.m_xBox.style.left=(p_iX)+"px";
	this.m_xBox.style.top=(p_iY)+"px";
	this.m_xBox.style.width=(iW)+"px";
	this.m_xBox.style.height=(iH)+"px";
	this.m_xBox.style.overflow="hidden";
	this.ModBaseDiv(this.m_xBox,iW,iH);
	var i,iC=this.m_axItems.length;
	for(i=0;i<iC;i++)
	{
		var xI=this.m_axItems[i];
		xI.m_xD=document.createElement("div");
		xI.m_xD.style.position="absolute";
		xI.m_xD.style.left="0px";
		xI.m_xD.style.top=(this.m_iItemH*i)+"px";
		xI.m_xD.style.width=this.m_iItemW+"px";
		xI.m_xD.style.height=this.m_iItemH+"px";
		this.FillItemDiv(xI);
		this.ModItemDiv(xI.m_xD,xI);
		this.m_xBox.appendChild(xI.m_xD);
	};
	for(i=0;i<iC;i++)
	{
		if(i==this.m_iActiveItem)
		{
			this.OnItemEnter(this.m_axItems[i]);
		}
		else
		{
			this.OnItemLeave(this.m_axItems[i]);
		};
	};
	this.m_xParent.appendChild(this.m_xBox);
};

// override these...
PitPopupMenu.prototype.OnOK=function(p_iID){};
PitPopupMenu.prototype.OnCancel=function(){};
PitPopupMenu.prototype.OnDelKey=function(p_iID){};
PitPopupMenu.prototype.ModBaseDiv=function(p_xD,p_iWidth,p_iHeight)
{
	p_xD.style.borderTop="solid 1px #f0f0f0";
	p_xD.style.borderLeft="solid 2px #f0f0f0";
	p_xD.style.borderRight="solid 2px #b0b0b0";
	p_xD.style.borderBottom="solid 1px #b0b0b0";
	p_xD.style.width=(p_iWidth)+"px";
	p_xD.style.height=(p_iHeight)+"px";
	pit_SetTransparency(p_xD,0.9);
};
PitPopupMenu.prototype.ModItemDiv=function(p_xD,p_xItem)
{
	p_xD.style.borderTop="solid 1px #e0e0e0";
	p_xD.style.borderLeft="none";
	p_xD.style.borderRight="none";
	p_xD.style.borderBottom="solid 1px #c0c0c0";
	p_xD.style.backgroundColor="#d0d0d0";
	p_xD.style.color="#404040";
};

PitPopupMenu.prototype.FillItemDiv=function(p_xItem)
{
	pit_SetIHs(p_xItem.m_xD,"<span style='position:absolute;left:2px;top:1px;cursor:default;'>"+p_xItem.m_sTitle+"</span");
};
PitPopupMenu.prototype.OnItemEnter=function(p_xItem)
{
	p_xItem.m_xD.style.color="#000000";
	p_xItem.m_xD.style.backgroundColor="#f0f0f0";
};
PitPopupMenu.prototype.OnItemLeave=function(p_xItem)
{
	p_xItem.m_xD.style.color="#404040";
	p_xItem.m_xD.style.backgroundColor="#d0d0d0";
};


pit_ScriptDone("/pit/pitctrl.js");

