<public:component>
<public:attach event="ondocumentready" onevent="initialShrinkContent()"/>
<public:attach event="onmousedown" onevent="handleMouseDown()"/>
<public:attach event="ondragstart" onevent="cancelDragEvent()"/>
<public:attach event="onload" onevent="initialShrinkContent()"/>

<script language="JavaScript">

/// <summary>
/// 
/// </summary>
/// <param name=""></param>
/// <returns></returns>

var g_intInitialOffsetX = null;
var g_intInitialOffsetY = null;
var g_strInterval;

var g_intHeightInterval;
var g_intTopInterval;

var g_intIntervalSpeed;
var g_intIntervalSteps;
var g_intCurrentInterval;

var g_intTopTarget;
var g_intLeftTarget;
var g_intTopOverflow;
var g_intLeftInterval;
var g_intLeftOverflow;
var g_strScrollInterval;
var g_blnScrollDispatched = false;

function initialShrinkContent()
{
	this.grown = false;
	this.collapsed = false;
	var objImg = eval("g_doc.GrowHandle" + this.id);
	if(hasExpandableContent(this) && objImg != null)
	{
		loopChildren(this, "none");
		objImg.style.visibility = "visible";
	}
}

/// <summary>
/// Handles all the mouse down events
/// </summary>
function handleMouseDblClick()
{
	handleMouseDown();
}

function refreshFrame()
{
	handleMouseDownCollapse();
	handleMouseDownGrow();
}

function handleMouseDown()
{
	switch(event.srcElement.commandEvent)
	{
		case "drag" :
			handleMouseDownDrag();
			break;
		
		case "collapse" :
			handleMouseDownCollapse();
			saveUserData();
			break;

		case "grow" :
			handleMouseDownGrow();
			saveUserData();
			break;
	}		
}

function hasExpandableContent(objContent)
{
	var objChildren = objContent.all;

	for(x = 0; x < objChildren.length; x++)
	{
		var objChild = objChildren.item(x);
		if(objChild.tagName.toLowerCase() == "span" && objChild.shrinkable == "true")
			return true;
	}
	
	return false;
}

function handleMouseDownGrow()
{
	var strDisplayMode = "none";
	var blnSetGrowState = false;
	var strImageTo = "imgsrc_grow";
	var strImageFrom = "imgsrc_shrink";
	
	if(!this.grown)
	{
		blnSetGrowState = true;
		strDisplayMode = "";
		strImageTo = "imgsrc_shrink";
		strImageFrom = "imgsrc_grow";
	}

	loopChildren(this, strDisplayMode);

	this.grown = blnSetGrowState;
	event.srcElement.src = changeImage(event.srcElement.src, eval("event.srcElement." + strImageTo));
}

function handleMouseDownCollapse()
{
	var objTable = this.children[0];

	if(objTable.tagName.toLowerCase() != "table")
		return;

	var strDisplayMode = "";
	var blnSetCollapseState = false;
	var strImageTo = "imgsrc_collapse";
	var strImageFrom = "imgsrc_expand";
	
	if(!this.collapsed)
	{
		blnSetCollapseState = true;
		strDisplayMode = "none";
		strImageTo = "imgsrc_expand";
		strImageFrom = "imgsrc_collapse";
	}
	
	var blnFoundHeader = false;
	var blnFoundFooter = false;
	var blnIsHeader = false;
	var blnIsFooter = false;
	this.collapsed = blnSetCollapseState;

	for(var i = 0; i < objTable.rows.length; i++)
	{
		var objRow = objTable.rows[i];

		if(objRow.collapse == "begin")
		{
			blnIsHeader = true;
			blnFoundHeader = true;
		}
		else
			blnIsHeader = false;

		if(objRow.collapse == "end")
		{
			blnFoundFooter = true;
			blnIsFooter = true;
		}
		else
			blnIsFooter = false;

		if((blnFoundHeader && !blnFoundFooter) && (!blnIsHeader && !blnIsFooter))
			objRow.style.display = strDisplayMode;
	}
	event.srcElement.src = changeImage(event.srcElement.src, eval("event.srcElement." + strImageTo));
}

function handleMouseDownDrag()
{
	window.event.cancelBubble = true;
	gatherContainerSpecs();
	
	var objContainer = getContainerID(this, 1)
	g_doc.DragDivider.sourceContainer = objContainer.id;
	g_doc.DragDivider.sourceRow = this.offsetParent.parentElement.rowIndex;
	g_doc.DragDivider.sourceColumns = this.columns;
	g_doc.DragDivider.frameID = this.id;
	//message(g_doc.DragDivider.sourceRow);

	var xtContainer = getXTContainerByID(objContainer.id);
	g_xtActiveWorkspace = getXTWorkspaceByID(xtContainer.workspaceID);
	
	g_doc.FrameGhost.style.width = this.clientWidth;
	g_doc.FrameGhost.style.height = this.clientHeight;
	g_doc.FrameGhost.style.visibility = "visible";
	
	g_doc.FrameGhost.runtimeStyle.left = getLeftCoordinate(this);
	g_doc.FrameGhost.runtimeStyle.top = getTopCoordinate(this);

	g_intInitialOffsetX = event.x - getLeftCoordinate(this);
	g_intInitialOffsetY = event.y - getTopCoordinate(this);
	
	window.document.attachEvent("onmousemove", handleMouseMoveDrag);
	window.document.attachEvent("onmousemove", handleMouseMoveDrag);
	window.document.attachEvent("onmouseup", handleMouseUpDrag);
	window.document.attachEvent("onselectstart", cancelSelectEvent);
}

/// <summary>
/// Handles all the mouse move events
/// </summary>
function handleMouseMoveDrag()
{
	var xtContainer = handleMouseOverContainers(g_xtActiveWorkspace, this);
	
	if(xtContainer != null)
		handleMouseOverFrames(xtContainer, this);

	g_doc.FrameGhost.runtimeStyle.left = event.x - g_intInitialOffsetX;
	g_doc.FrameGhost.runtimeStyle.top = event.y - g_intInitialOffsetY;
}

/// <summary>
/// Handles all the mouse up events for drag
/// </summary>
function handleMouseUpDrag()
{
	eval("g_doc.MoveHandle" + this.id).style.cursor = "move";

	if(g_doc.DragDivider.valid == "true")
		prepareFrameAnimation();
	else
		g_doc.FrameGhost.style.visibility = "hidden";
	
	g_doc.ContainerGhost.runtimeStyle.top = -1000;
	g_doc.ContainerGhost.runtimeStyle.left = -1000;
	
	window.document.detachEvent("onmousemove", handleMouseMoveDrag);
	window.document.detachEvent("onmousemove", handleMouseMoveDrag);
	window.document.detachEvent("onmouseup", handleMouseUpDrag);
	window.document.detachEvent("onselectstart", cancelSelectEvent);
}

</script>
</public:component>