// $Revision: 1 $ $Date: 2009-08-10 16:19:35+01:00 $ $Workfile: TT_Layout.js $

/*Summary
Name:TT_Layout.js
Description:
Target: This class makes references to target objects, these are client side div
objects witin which any control can be passed. The server side code manages these targets and
allows the user to bind any control or valid HTML object to the target object

Client side code to implement dockable targets within a brower window
The file manipulates two arrays, the first manages the state of the dockable windows
The second manages the edge docked targets. The edge docked windows are fixed panels, 
which can manage any control passed in.
*/

//docked values
var en_leftEdge = 0;
var en_rightEdge = 1;
var en_topEdge = 2;
var en_bottomEdge = 3;

var en_notSet = -1;
var en_splitLeft = 0;
var en_splitRight = 1;
var en_splitTop = 2;
var en_splitBottom = 3;
var en_splitDockHoriz = 4;
var en_splitDockVert = 5;
var en_splitAutoHideLeft = 6;
var en_splitAutoHideRight = 7;
var en_splitAutoHideTop = 8;
var en_splitAutoHideBottom = 9;
var en_splitAutoHide = 10;

var dockedTargets;
var edgeTargets; 
var selected;
var settings;
var nsSettings;
var positions;
var dockMiniumuns;
var page;
var PopupWindows = new Array;
var lngPopupWindowsCount = 1;

var en_TabWidth =0;
var en_TabHeight =1;
var en_TabEdgeOrder =2;
var en_TabEdgeType =3;
var en_TabParent=4;
var en_TabChild=5;
var en_TabParentID=6;
var displayLoadingDiv = true;
var serverURL = "";
var MODAL_POPUP_NAME = "ModalPopup.htm";

var TT_Layout_ContextsResized_Callbacks = new Array();

function ttlayout_NSMouseDown(event)
{
	this.nsSettings.nsMouseButton = event.which;	
}

function ttLayout_SetServerURL(sURL)
{
    serverURL = sURL;
}

function ttlayout_NSMouseUp()
{	
	this.nsSettings.nsMouseButton=0;
	
	if (typeof(this.selected.selectedSplitterDIV)=="object")
	{
		ttlayout_UnSelectSplitter(); 
		return;
	}
	if (typeof(this.selected.selectedTargetDiv)=="object")
	ttlayout_UnselectTarget(); 
}

function ttlayout_NSVerticalText(description)
{// add a space between each letter in the string
	var i;
	var string = "<BR>";
				
	for (i=0; i<description.length; i++)
	{ 
		string += description.substr(i,1)+"<BR>";		
	}
	return string.substr(0,string.length-1);	
}
		
//if IE4+
document.onselectstart =DocumentSelect	

// Stop a page posting back unecessarily when a user presses return key 
// (no need to implement in textarea)
document.onkeypress = function(e)
{
	e = e || window.event;
	if (typeof e != 'undefined')
	{
		var tgt = e.target || e.srcElement;
		if ((typeof tgt != 'undefined') && tgt.tagName !="TEXTAREA" &&
			(typeof e.keyCode != 'undefined') && e.keyCode == 13)
				return false;
	}
}

function DocumentSelect()
{
	try
	{
		if(!page.isDragging)
			return true;
		else
			return false;
	}
	catch(ex){};
}

function ttlayout_DetermineMinDimensions()
{
	/*
		Determines the min height or width for each dock edge type
	*/
	dockMiniumuns.leftEdge= this.settings.bigNumber;
	dockMiniumuns.rightEdge= this.settings.bigNumber;
	dockMiniumuns.topEdge= this.settings.bigNumber;
	dockMiniumuns.bottomEdge= this.settings.bigNumber;
				
	for(i=0;i<dockedTargets.length;i++)
	{
		if (!dockedTargets[i].autoHide && !dockedTargets[i].isTabChild) 
		{  
			switch(dockedTargets[i].edgeType)
			{
				case en_leftEdge:
					if (dockedTargets[i].width < dockMiniumuns.leftEdge)
						dockMiniumuns.leftEdge=dockedTargets[i].width;
					break;
				case en_rightEdge:
					if (dockedTargets[i].width < dockMiniumuns.rightEdge)
						dockMiniumuns.rightEdge=dockedTargets[i].width;
					break;
				case en_topEdge:
					if (dockedTargets[i].height < dockMiniumuns.topEdge)
						dockMiniumuns.topEdge=dockedTargets[i].height;											
					break;
				case en_bottomEdge:    
					if (dockedTargets[i].height < dockMiniumuns.bottomEdge)
						dockMiniumuns.bottomEdge=dockedTargets[i].height;											
					break;
			} 			
		}
	} 			
}
			
function ttlayout_SetTargetPositions()
{
	/**
	This function determines the docked sizing based on the available client side space.
	This function assumes the docked target data is stored in edgeType and edge Order. The
	loop below operates through each record determining how much space to allocate to each
	target based on the space available. If the total space required for an edge is
	greater than the window size. Then the space redunction is calcularted, then each 
	target is reduced in size to fit the available window space. This function ignores
	targets which are autoHiden or tab docked. 	
	*/
	var edgeType = new Number();
	var prevEdgeType = new Number(-1);
	//Available heights
	var parentHeight;
	var parentWidth;
	var allocatedHeight;
	var allocatedWidth;
	var edgeTotalWidth = new Number(0);
	var edgeTotalHeight = new Number(0);
	
	var adjustValue = new Number(0);
	ttlayout_DetermineMinDimensions();
	
	for(j=0;j<dockedTargets.length;j++)  
	{
		edgeType = dockedTargets[j].edgeType;//determine current edge type		
		if(edgeType != prevEdgeType)
		{//Found new edge type, now try and set the width and height
			allocatedWidth=0;	
			allocatedHeight=0;	
			edgeTotalWidth=0;
			edgeTotalHeight=0;		
			parentHeight = parseInt(this.page.innerDockDiv.style.height);
			parentWidth = parseInt(this.page.innerDockDiv.style.width);
							 					
			//Determine required height and width for this edge type
			for(i=0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].edgeType ==dockedTargets[j].edgeType &&
					!dockedTargets[i].autoHide &&
					!dockedTargets[i].isTabChild)
				{
						edgeTotalWidth+= dockedTargets[i].width;  
						edgeTotalHeight+= dockedTargets[i].height;
				}      
			}  
			
			//Now check if these values are greater 
			//than the available space. If not reduce each element accordinly to fit onto page			
			if(dockedTargets[j].edgeType ==en_topEdge ||   
				dockedTargets[j].edgeType ==en_bottomEdge)
			{ 
				if(dockedTargets[j].edgeType ==en_topEdge)
				{
					if(dockMiniumuns.leftEdge !=this.settings.bigNumber)	
					{				
						parentWidth-=	dockMiniumuns.leftEdge;//Space lost due to left docked targets  		
						if(page.isNS)
							parentWidth-=1;
					}
				}
				else
				{
					if(dockMiniumuns.rightEdge !=this.settings.bigNumber)					
						parentWidth-=	dockMiniumuns.rightEdge;//Space lost due to left docked targets    											
				}
				
				if(edgeTotalWidth> parentWidth) 
				{
					adjustValue= edgeTotalWidth-parentWidth;
					for(i=0;i<dockedTargets.length;i++)
					{
						if(dockedTargets[i].edgeType ==dockedTargets[j].edgeType &&
						!dockedTargets[i].autoHide)						
						{
							dockedTargets[i].width -= parseInt((((100/edgeTotalWidth)*dockedTargets[i].width)/100)* adjustValue)						
							if(dockedTargets[i].width <=50)
								dockedTargets[i].width	=50;
						}		
					}	
				}
			}
			else
			{//Check left and right edge
				if(dockedTargets[j].edgeType ==en_leftEdge)
				{if(dockMiniumuns.bottomEdge !=this.settings.bigNumber)
						parentHeight-=dockMiniumuns.bottomEdge;//Space lost due to left docked targets  
				}
				else
				{if(dockMiniumuns.topEdge !=this.settings.bigNumber)
						parentHeight-=	dockMiniumuns.topEdge;//Space lost due to left docked targets    
				}				
				if(edgeTotalHeight> parentHeight) 
				{
					adjustValue= edgeTotalHeight-parentHeight;
					for(i=0;i<dockedTargets.length;i++)
					{
						if(dockedTargets[i].edgeType ==dockedTargets[j].edgeType &&
						!dockedTargets[i].autoHide)		
						{				
							dockedTargets[i].height -= parseInt((((100/edgeTotalHeight)*dockedTargets[i].height)/100)* adjustValue)						
							if(dockedTargets[i].height <=50)
								dockedTargets[i].height	=50;
						}	
					}	
				}
			}
		}		
		
		if(!dockedTargets[j].autoHide && !dockedTargets[j].isTabChild)  
		{
			if(dockedTargets[j].edgeType ==en_topEdge ||
		   		dockedTargets[j].edgeType ==en_bottomEdge) 
				allocatedWidth =ttlayout_SetHorizontalTargets(dockedTargets[j].edgeType,dockedTargets[j],allocatedWidth,parentWidth,parentHeight);
			else
				allocatedHeight =ttlayout_SetVerticalTargets(dockedTargets[j].edgeType, dockedTargets[j],allocatedHeight,parentWidth,parentHeight);  
		}
		prevEdgeType = dockedTargets[j].edgeType;	
	}
	
	ttlayout_DisplayTargets(); 
	ttlayout_SetPostBackField();//Hidden field used for postBackData	
}	

function ttlayout_SetHorizontalTargets(edgeType, target, allocatedWidth, parentWidth, parentHeight)
{	
	/*Configures the top and bottom docked objects*/	
	//var parentHeight = parseInt(document.getElementById(this.settings.uniqueID+"innerDockDiv").style.height);	
	
	//Set left
	target.actualdockedLeft =allocatedWidth; 
	if(dockMiniumuns.leftEdge !=this.settings.bigNumber && edgeType==en_topEdge )
	{
		target.actualdockedLeft+= dockMiniumuns.leftEdge;  		
		if(page.isNS)		
		 target.actualdockedLeft+=1;		
	}	
	//Set top		
	if(edgeType ==en_topEdge)	
		target.actualdockedTop =0; 
	else
	{		
		target.actualdockedTop = parentHeight -dockMiniumuns.bottomEdge+this.settings.splitterSize ;				
	}
	//set height	
	if(edgeType ==en_topEdge)
		target.actualdockedHeight = dockMiniumuns.topEdge;
	else
		target.actualdockedHeight = dockMiniumuns.bottomEdge;
	
	var found =false;		 	
	for(i=ttlayout_ArrayPos(target.targetID);i<dockedTargets.length;i++)
	{
		if(i !=dockedTargets.length-1 &&
			dockedTargets[i+1].edgeType ==edgeType &&
			!dockedTargets[i+1].autoHide &&
			!dockedTargets[i+1].isTabChild)
		{					
				target.actualdockedWidth =target.width;
				allocatedWidth += target.actualdockedWidth;					
				found=true;
				break;				
		}     	
	}  		 	
	if(found==false)
	{	
		//Set the remainder
		target.actualdockedWidth = (parentWidth-allocatedWidth)-2.5;   
		target.width=target.actualdockedWidth;  				
	}		
	ttlayout_ValidateResizeValues(target);
	return allocatedWidth;
}


function ttlayout_SetVerticalTargets(edgeType, target, allocatedHeight, parentWidth,parentHeight )
{	
	/*Configures the top and bottom docked objects*/	
	//var parentWidth = parseInt(document.getElementById(this.settings.uniqueID+"innerDockDiv").style.width);	
	
	//Set left
	target.actualdockedLeft =0; 
	if(edgeType ==en_rightEdge)	
		target.actualdockedLeft = parentWidth -dockMiniumuns.rightEdge;

	//Set top		
	target.actualdockedTop =allocatedHeight; 
	if(dockMiniumuns.topEdge !=this.settings.bigNumber && edgeType==en_rightEdge )
	{
		target.actualdockedTop+= dockMiniumuns.topEdge;  		
		if(page.isNS)
		target.actualdockedTop+=1; 
	}	
	//set Width	
	if(edgeType ==en_leftEdge)
		target.actualdockedWidth = dockMiniumuns.leftEdge;
	else
		target.actualdockedWidth = dockMiniumuns.rightEdge;	
	
	//Check if any other windows exist
	var found =false;
	for(i=ttlayout_ArrayPos(target.targetID)+1;i<dockedTargets.length;i++)
	{
		if(!dockedTargets[i].autoHide  &&
			dockedTargets[i].edgeType  ==target.edgeType
			&& !dockedTargets[i].isTabChild )
		{
			found=true;
			break;
		}
	}  
	
	if(found)
	{					
		target.actualdockedHeight =target.height;
		allocatedHeight += target.actualdockedHeight;					
	}     
	else
	{		
		//Set the remainder
		target.actualdockedHeight = parentHeight-allocatedHeight;   
		target.height=target.actualdockedHeight;  				
	}
	ttlayout_ValidateResizeValues(target);
	return allocatedHeight;
}

function ttlayout_DisplayTargets()
{		
	var i,j;			
	var performhideSelects =false;
	var adjustValue;
	var cursor;		
			
	for (i=0; i<dockedTargets.length; i++)
	{					
		if(!dockedTargets[i].isTabChild)  
			dockedTargets[i].targetDiv.style.display = "block";
		else
		{
			//Check if this target is the selected target if not then hide
			if(ttlayout_GetTargetByID(dockedTargets[i].tabParentId).tabParentSelected != 
				dockedTargets[i].targetID&& !dockedTargets[i].autoHideDisplayed )      
					dockedTargets[i].targetDiv.style.display = "none";
		}
		//document.getElementById("autoHide"+dockedTargets[i].targetID).style.display = "none";
			
		dockedTargets[i].targetDiv.style.zIndex = 0;
		dockedTargets[i].autoHideDiv.style.display = "inline";
		if(dockedTargets[i].closeTarget) 
			dockedTargets[i].autoDockDiv.style.display = "inline";
		else
			dockedTargets[i].autoDockDiv.style.display = "none";
			
		dockedTargets[i].autoHideDiv.src =this.settings.pinImagePath;				
		dockedTargets[i].targetInnerDiv.style.border = "2px";
		
		ttlayout_HideDockSplitters(dockedTargets[i].targetID);
		if (dockedTargets[i].autoHide)	
		{	
			if(ttlayout_DisplayAutoHideTarget(dockedTargets[i]))
				performhideSelects=true;
		}
		else		
			ttlayout_DisplayNormalTarget(dockedTargets[i]);
	}				
				
	ttlayout_SetMainContextTarget();	//Set the Main context target		
	var splitterValue = new Number(0);
	var splitterValue2 = new Number(0);
		
	//Create dock splitter object
	if (dockMiniumuns.leftEdge != this.settings.bigNumber) //Left
	{	
		splitterValue= parseInt(this.page.innerDockDiv.style.height);		
		if (dockMiniumuns.bottomEdge != this.settings.bigNumber)
			 splitterValue -= dockMiniumuns.bottomEdge;    
		
		if(splitterValue <0)
			splitterValue=0;
			
		cursor ="col-resize";
		if(page.isNS)
			cursor ="e-resize";
		ttlayout_ShowSplitter(document.getElementById(this.settings.uniqueID+"dockLeftDiv"),dockMiniumuns.leftEdge-2,1,splitterValue,this.settings.splitterSize,cursor);
	}					
	else
	{ttlayout_HideSplitter(document.getElementById(this.settings.uniqueID+"dockLeftDiv"));}
								
	if (dockMiniumuns.rightEdge != this.settings.bigNumber)//right				
	{
		splitterValue= 1;
		var adjust = new Number(0);
		if(page.isNS)
			 adjust=1;			 			 
		if (dockMiniumuns.topEdge != this.settings.bigNumber)		
			 splitterValue = dockMiniumuns.topEdge+2; //two adjust pixels 2 match				
		cursor ="col-resize";
		if(page.isNS)
			cursor ="e-resize";	 
		splitterValue2 =parseInt(document.getElementById(this.settings.uniqueID+"innerDockDiv").style.height);		
		if (dockMiniumuns.topEdge != this.settings.bigNumber)
		{	
			   splitterValue2-= dockMiniumuns.topEdge;			   
			   if(page.isNS)
			     splitterValue2-=13;
		}	
		   		
		ttlayout_ShowSplitter(document.getElementById(this.settings.uniqueID+"dockRightDiv"),parseInt(this.page.innerDockDiv.style.width)-(dockMiniumuns.rightEdge+adjust)
		,splitterValue,splitterValue2,this.settings.splitterSize,cursor);
	}	
	else
	{ttlayout_HideSplitter(document.getElementById(this.settings.uniqueID+"dockRightDiv"));}								
								
	if (dockMiniumuns.topEdge != this.settings.bigNumber   )//top
	{
		splitterValue= 0;
		splitterValue2=parseInt(this.page.innerDockDiv.style.width);				
		if (dockMiniumuns.leftEdge != this.settings.bigNumber)
		{
			 splitterValue = dockMiniumuns.leftEdge+2; //two adjust pixels 2 match
			 splitterValue2-=dockMiniumuns.leftEdge;
		}		
		if(splitterValue2 <0)splitterValue2=0;				 		
		cursor ="row-resize";
		if(page.isNS)
			cursor ="s-resize";			
		ttlayout_ShowSplitter(document.getElementById(this.settings.uniqueID+"dockTopDiv"), splitterValue,dockMiniumuns.topEdge-2,this.settings.splitterSize,splitterValue2,cursor);
	}
	else
	{ttlayout_HideSplitter(document.getElementById(this.settings.uniqueID+"dockTopDiv"));}												
				
	if (dockMiniumuns.bottomEdge != this.settings.bigNumber)
	{					
		splitterValue= parseInt(this.page.innerDockDiv.style.width);
		if (dockMiniumuns.rightEdge != this.settings.bigNumber)
			 splitterValue -= dockMiniumuns.rightEdge; //two adjust pixels 2 match
		
		cursor ="row-resize";
		if(page.isNS)
			cursor ="s-resize";
			
		if(splitterValue <0)splitterValue=0;						 
		ttlayout_ShowSplitter(document.getElementById(this.settings.uniqueID+"dockBottomDiv"),0,
			parseInt(this.page.innerDockDiv.style.height)-dockMiniumuns.bottomEdge+1,this.settings.splitterSize,splitterValue,cursor);
	}
	else
	{ttlayout_HideSplitter(document.getElementById(this.settings.uniqueID+"dockBottomDiv"));}																				
	
	
	//Finally adjust the edge Target objects	
	for(i=0;i<edgeTargets.length;i++)
	{		
		switch (edgeTargets[i].edgeType)
		{			
			case en_rightEdge:				
				var obj =document.getElementById(this.settings.uniqueID+"RightedgeDIV").style;
				obj.left= document.body.clientWidth -edgeTargets[i].left;  								
				obj.display="";
				break;
			case en_bottomEdge:  
				var obj =document.getElementById(this.settings.uniqueID+"BottomedgeDIV").style;
				obj.top= document.body.clientHeight -edgeTargets[i].top;  
				obj.display="";
				break;
			case en_topEdge:
				var obj =document.getElementById(this.settings.uniqueID+"TopedgeDIV").style;
				obj.display="";
				break;				
			case en_leftEdge:
				var obj =document.getElementById(this.settings.uniqueID+"LeftedgeDIV").style;
				obj.display="";
				break; 				
		}  
	}  
	if(performhideSelects)
	{
		ttlayout_HideSelects(); 
		//Redisplay The selects for shown targets
		for (i=0; i<dockedTargets.length; i++)
		{
			if(dockedTargets[i].showSelects)
			{
				ttdd_showSelects(dockedTargets[i].targetDiv);	
				dockedTargets[i].showSelects=false;
			} 
		}
	}
	this.selected.selectedSplitter=en_notSet;	
	
}
			
function ttlayout_SetMainContextTarget()
{	
	/* 
		Sets the Context target to the remaining area of the screen. The
		min array is used to calculate this space	
	*/	
	var contentHeight = new Number(parseInt(this.page.innerDockDiv.style.height));
	var contentWidth = new Number(parseInt(this.page.innerDockDiv.style.width));			
	var targetObj = document.getElementById(this.settings.uniqueID+"MainContextTarget").style;
		
	if (page.isNS)	
		contentWidth-=8; 	
	else
		contentWidth-=this.settings.splitterSize; 	
		
	if (dockMiniumuns.topEdge != this.settings.bigNumber)
	{
		targetObj.top = (dockMiniumuns.topEdge+2)+"px";
		contentHeight -= (parseInt(targetObj.top)+2); 
	}
	else{
		targetObj.top ="2px";
		contentHeight-=4;
	}
	contentHeight-=this.settings.splitterSize; 	
					
	if (dockMiniumuns.leftEdge != this.settings.bigNumber)
	{		
		targetObj.left = (dockMiniumuns.leftEdge+2)+"px";
		contentWidth -= (parseInt(targetObj.left)+2); 
	}
	else{
		targetObj.left ="2px";
		contentWidth-=4;
		}
				
	if (dockMiniumuns.rightEdge != this.settings.bigNumber)				
		contentWidth -= dockMiniumuns.rightEdge; 				
		
	if (contentWidth<0)contentWidth=0;
	targetObj.width = contentWidth +"px";  
	
	if (dockMiniumuns.bottomEdge  != this.settings.bigNumber)
	{
		contentHeight -= dockMiniumuns.bottomEdge;       
		if(page.isNS)
		 contentHeight-=10;
	}
	if (contentHeight<0)contentHeight=0;		
	targetObj.height = contentHeight +"px";

	//Double try so that we can execute each callback even if one errors
	//and also so that we dont break the existing layout code with
	//unforseen bugs.
	try {
		if (TT_Layout_ContextsResized_Callbacks.length > 0) {
			for (var layoutI = 0; layoutI < TT_Layout_ContextsResized_Callbacks.length; layoutI++) {
				try{
					eval(TT_Layout_ContextsResized_Callbacks[layoutI]);
				}catch(innerExc){}
			}
		}
	} catch (outerExc) { }
		
}
			
function ttlayout_ShowSplitter(splitter, left,top,height, width, cursor)
{
	/*
		Displays the passed splitter object, based on the passed settings	
	*/
	splitter.style.left				= left;		
	splitter.style.width			= width; 
	splitter.style.top				= top;								
	splitter.style.height			= height; 
	splitter.style.visibility		= "visible";	
	splitter.style.cursor			= cursor; 				
}
			
function ttlayout_HideSplitter(splitter)
{//Hides the passed splitter object
	splitter.style.visibility = "hidden";
}
			
function ttlayout_ShowDockedSplitter(target)
{
	/*Displays the docked splitter for the passed pos
		To correctly show the spliter the target windows height or window dependant on 
		edge position is adjusted by the size of the user defined splitter. The splitter object
		is then displayed on screen.
	*/
	try
	{
		if ((target.edgeType  == en_leftEdge )|| (target.edgeType ==en_rightEdge))  
		{	
			
			target.splitterHDiv.style.display = "block";  
			target.splitterHDiv.style.height  = this.settings.splitterSize; 
			target.splitterHDiv.style.width	 = target.actualdockedWidth;					
			target.splitterHDiv.style.top	 = (target.actualdockedTop+ (target.actualdockedHeight-(this.settings.splitterSize+1)) );				
			target.splitterHDiv.style.left	 = target.actualdockedLeft;
			if(page.isNS)
				target.splitterHDiv.style.cursor	 = "s-resize";
			else 
				target.splitterHDiv.style.cursor	 = "row-resize";																
		}
		else	
		{	
			target.splitterVDiv.style.display = "block";  
			target.splitterVDiv.style.height  = target.actualdockedHeight;
			target.splitterVDiv.style.width   = this.settings.splitterSize;
			target.splitterVDiv.style.top	 = target.actualdockedTop;
			target.splitterVDiv.style.left	 = (target.actualdockedLeft+ (target.actualdockedWidth-(this.settings.splitterSize)));
			if(page.isNS)
				target.splitterVDiv.style.cursor	 = "e-resize";
			else
				target.splitterVDiv.style.cursor	 = "col-resize";							
		}
	}
	catch(er)
	{
		alert(er);
	}
}
			
function ttlayout_SetSplitterPosition(xPosition)
{
    // Simulate a Splitter move
    // Seems to be the only way to set the width of a target!
    this.page.splitterDiv.style.left = xPosition;
    this.selected.selectedSplitter = en_splitLeft;
    ttlayout_UnSelectSplitter();
}
			
function ttlayout_UnSelectSplitter()
{	
	/*
		Called when the user unselects the current splitter object. Once the mouse is released
		The relevent array details are set to the splitters last position			
	*/
	switch(this.selected.selectedSplitter)
	{
		case en_splitLeft:
			ttlayout_UnSelectEdgeSplitter();
			break;
		case en_splitRight:
			ttlayout_UnSelectEdgeSplitter();
			break;
		case en_splitTop:
			ttlayout_UnSelectEdgeSplitter();
			break;
		case en_splitBottom:
			ttlayout_UnSelectEdgeSplitter();
			break;
		case en_splitDockHoriz: 
			ttlayout_UnSelectDockedSplitter();
			break;
		case en_splitDockVert:
			ttlayout_UnSelectDockedSplitter();
			break;
		case en_splitAutoHideLeft:	
			ttlayout_UnSelectAutoHideSplitter();			
			return;		
		case en_splitAutoHideRight: 
			ttlayout_UnSelectAutoHideSplitter();			
			return;		
		case en_splitAutoHideTop:
			ttlayout_UnSelectAutoHideSplitter();			
			return;		
		case en_splitAutoHideBottom:
			ttlayout_UnSelectAutoHideSplitter();
			ttlayout_ShowSelects(); 
			return;		
	} 	
	ttlayout_ShowSelects(); 
	ttlayout_SetTargetPositions();
	this.page.splitterDiv.style.display = "none";
	this.selected.selectedSplitterDIV ="";		
	this.page.isDragging=false;
	if (this.settings.onAfterSplitterMove != null && this.settings.onAfterSplitterMove != "")
	    eval(this.settings.onAfterSplitterMove);
	//ttlayout_SetPostBackField();
	//__doPostBack(this.settings.uniqueID.substr(0,this.settings.uniqueID.length -1),'');
}

function ttlayout_UnSelectDockedSplitter()
{	/************************************
	Handles the event of the user unselecting an docked splitter
	***************************************/	
	var xValue	= parseInt(this.page.splitterDiv.style.left)+1;
	var yValue	= parseInt(this.page.splitterDiv.style.top)+2;	
	var adjust;			
	
	if (this.selected.selectedSplitter ==en_splitDockHoriz)
	{	
		adjust =(yValue- parseInt(document.getElementById(this.settings.uniqueID+this.selected.selectedTarget.targetID+"DockDiv").style.top)-this.selected.selectedTarget.height );															
		if(adjust==0)
			return;			
		selected.selectedTarget.height +=adjust; 									
	}
	else //this.selected.selectedSplitter = en_splitDockVert 
	{					
		adjust =(xValue- parseInt(document.getElementById(this.settings.uniqueID+this.selected.selectedTarget.targetID+"DockDiv").style.left)-this.selected.selectedTarget.width);												
		if(adjust==0)
			return;			
		this.selected.selectedTarget.width +=adjust;								
	}
	this.selected.selectedTarget.requireUpdate = true;
	
	//Found an adjacent window				
	if ((this.ttlayout_SelectedArrayPos() !=dockedTargets.length -1) &&
		(selected.selectedTarget.edgeType == 
			dockedTargets[this.ttlayout_SelectedArrayPos()+1].edgeType))
	{		
		//Next window is a tab child therefore try and find another target
		for(i=this.ttlayout_SelectedArrayPos()+1;i<dockedTargets.length;i++)
		{
			if(dockedTargets[i].edgeType == this.selected.selectedTarget.edgeType &&
				!dockedTargets[i].autoHide && !dockedTargets[i].isTabChild)
			{  
				if (this.selected.selectedSplitter ==en_splitDockHoriz)
					dockedTargets[i].height -= adjust;
				else
					dockedTargets[i].width -= adjust; 			
				dockedTargets[i].requireUpdate = true;					
				break;
			}
		}  		
	} 
	if (this.settings.onAfterSplitterMove != null && this.settings.onAfterSplitterMove != "")
	    eval(this.settings.onAfterSplitterMove);
}

function ttlayout_UnSelectEdgeSplitter()
{
	/************************************
	Handles the event of the user unselecting an edge splitter.
	When a user unselects a target this function will adjust the adjacent
	targets acordingly	
	***************************************/	
	var xValue	= parseInt(this.page.splitterDiv.style.left);	
	var yValue	= parseInt(this.page.splitterDiv.style.top);	
	var adjust;			
	/*
	The switch statement below corrects the adjacent docked windows based on the
	current splitter resize. For example, Increasing the height of a docked
	bottom target object, will reduce the values of docked targets on the left hand 
	pane		
	*/
	switch (this.selected.selectedSplitter)
	{
		case en_splitBottom: 					
			adjust =(parseInt(this.page.innerDockDiv.style.height)- dockMiniumuns.bottomEdge) -yValue;								
				ttlayout_CorrectAdjacentDockedWindows(en_leftEdge,
					parseInt(document.getElementById(this.settings.uniqueID+"dockLeftDiv").style.height),adjust);				
			break;
		case en_splitTop:				
			adjust =yValue-dockMiniumuns.topEdge;								
				ttlayout_CorrectAdjacentDockedWindows(en_rightEdge,
					parseInt(document.getElementById(this.settings.uniqueID+"dockRightDiv").style.height),adjust);				
			break;
		case en_splitLeft:														   						
			adjust =xValue-dockMiniumuns.leftEdge;								
				ttlayout_CorrectAdjacentDockedWindows(en_topEdge,
					parseInt(document.getElementById(this.settings.uniqueID+"dockTopDiv").style.width),adjust);				
			break;
		case en_splitRight:				
			adjust =(parseInt(this.page.innerDockDiv.style.width)- dockMiniumuns.rightEdge) -xValue;											
				ttlayout_CorrectAdjacentDockedWindows(en_bottomEdge,
					parseInt(document.getElementById(this.settings.uniqueID+"dockBottomDiv").style.width),adjust);				
			break;
	}	
	
	//Set the docked windows to the new resized target
	for (i=0; i<dockedTargets.length; i++)
	{
		if (dockedTargets[i].edgeType ==this.selected.selectedSplitter &&
			!dockedTargets[i].autoHide)
		{
			//Set dock resize value		
			switch (this.selected.selectedSplitter)
			{
				case en_splitLeft:
					dockedTargets[i].width	= xValue;
					break;
				case en_splitRight :									 
						dockedTargets[i].width	= (parseInt(this.page.innerDockDiv.style.width)-(xValue-1));
					break;							
				case en_splitTop :												
					dockedTargets[i].height = yValue;								
					break;
				case en_splitBottom : 																
					dockedTargets[i].height	= (parseInt(this.page.innerDockDiv.style.height)-(yValue-2.5));							
			}	
			dockedTargets[i].requireUpdate = true;
		}
	}		
}

function ttlayout_UnSelectAutoHideSplitter()
{		
	/********************************************
	Handles the event of the user moving a autohide splitterobj object
	Unlike the other splitterobj methods, this function adjusts the actual div object. This is beceuase the
	user could resize the pinned window to be full screen. When re-docked, this would have appearance problems
	. Therefore, when re-docked the target will asume normal docked sizing.
	********************************************/	
	var xValue	= parseInt(this.page.splitterDiv.style.left);	
	var yValue	= parseInt(this.page.splitterDiv.style.top);		
		 
	var targetID= new String(this.selected.selectedSplitterDIV.id);		
	targetID= targetID.substr(16, targetID.length);  		
	var target =ttlayout_GetTargetByID(targetID);
		
	switch(this.selected.selectedSplitter)
	{
		case en_splitAutoHideLeft:
			xValue-=0.5;
			target.targetDiv.style.width=xValue;			
			target.targetInnerDiv.style.width = parseInt(target.targetDiv.style.width)-2.5;
			target.controlDiv.style.width= target.targetInnerDiv.style.width;			
			//outerTargetobj.zIndex+=1;
			this.selected.selectedSplitterDIV.style.left=xValue;		
			//this.selectedSplitterDIV.style.zIndex=outerTargetobj.zIndex+5;
			target.autoHideWidth= xValue;
			break;			
		case en_splitAutoHideRight:
			xValue-=0.5;
			var diff =parseInt(target.targetDiv.style.left)-xValue ;
			target.targetDiv.style.left=xValue;
			target.targetDiv.style.width=parseInt(target.targetDiv.style.width)+ diff;
			target.targetInnerDiv.style.width = target.targetDiv.style.width;
			target.controlDiv.style.width= target.targetDiv.style.width;	
			this.selected.selectedSplitterDIV.style.left=xValue;
			//outerTargetobj.zIndex+=1;
			//this.selectedSplitterDIV.style.zIndex=outerTargetobj.zIndex;
			target.autoHideWidth=target.targetDiv.style.width;// parseInt(outerTargetobj.width);
			break;			
		case en_splitAutoHideTop:								
			target.targetDiv.style.height=yValue;			
			target.targetInnerDiv.style.height =(parseInt(target.targetDiv.style.height)- parseInt(target.targetHeaderDiv.style.height))-6.5;
			target.controlDiv.style.height= target.targetInnerDiv.style.height;
			this.selected.selectedSplitterDIV.style.top=parseInt(target.targetDiv.style.top) + parseInt(target.targetDiv.style.height);			
			target.autoHideHeight= yValue;			
			break;
		case en_splitAutoHideBottom:   
			yValue-=0.5;
			var diff =parseInt(target.targetDiv.style.top)-yValue ;
			target.targetDiv.style.top=yValue;
			target.targetDiv.style.height=parseInt(target.targetDiv.style.height)+ diff;
			target.targetInnerDiv.style.height =(parseInt(target.targetDiv.style.height)- parseInt(target.targetHeaderDiv.style.height))-6.5;
			
			target.controlDiv.style.height= target.targetInnerDiv.style.height;
			this.selected.selectedSplitterDIV.style.top=yValue;
			//outerTargetobj.zIndex+=1;
			//this.selected.selectedSplitterDIV.style.zIndex=outerTargetobj.zIndex;			
			target.autoHideHeight= target.targetDiv.style.height;//parseInt(outerTargetobj.height);
			break;		 
	}		
	target.autoHideTimer.timerResize=false;   
	target.requireUpdate= true;
		
	this.page.splitterDiv.style.display = "none";
	this.selected.selectedSplitterDIV ="";		
	this.selected.selectedSplitter=en_notSet;		
	ttlayout_SetPostBackField(); 
	
	//Show selects for current target	
	for(var i=0;i<target.targetDiv.getElementsByTagName("select").length;i++)
	{
		target.targetDiv.getElementsByTagName("select").item(i).style.visibility = "";
	}
}
			
function ttlayout_CorrectAdjacentDockedWindows(edgeType,dockedTotalSize, adjust)
{
	/*When a user resizes a main splitter, this will affect targets on the adjacent docked pane
	This function adjusts each window, proportionaly based on the amount of adjustment from the user
	*/	
	for (i=0; i<dockedTargets.length; i++)
	{
		if ((dockedTargets[i].edgeType == edgeType))					
			{
				if(edgeType ==en_leftEdge || edgeType==en_rightEdge )
				{	
					dockedTargets[i].height-= parseInt((((100/dockedTotalSize)*dockedTargets[i].actualdockedHeight)/100)* adjust) ;			
				}
				else
				{					
					dockedTargets[i].width-= parseInt((((100/dockedTotalSize)*dockedTargets[i].actualdockedWidth)/100)* adjust) ;								
				}
			}
	}	
}			
			
function ttlayout_SelectSplitter(splitter, splitMode, targetID)
{//Called when the user selects a splitter object
	this.page.isDragging=true;
	ttlayout_HideSelects(); 
	this.selected.selectedSplitterDIV	= splitter;				
		
	if(splitMode ==en_splitAutoHide)
	{
		/*	Determine target edge type
			The code below is required because the values passed from the splitters
			is fixed. Therefore, we need to determine at runtime where the target is
			positioned
		*/
		ttlayout_GetTargetByID(targetID).autoHideTimer.timerResize=true;    		
		switch(ttlayout_GetTargetByID(targetID).edgeType)
		{
			case en_leftEdge:
				this.selected.selectedSplitter = en_splitAutoHideLeft; 
				break;
			case en_rightEdge:
				this.selected.selectedSplitter = en_splitAutoHideRight;
				break;
			case en_topEdge:
				this.selected.selectedSplitter = en_splitAutoHideTop;
				break;
			case  en_bottomEdge:    
				this.selected.selectedSplitter = en_splitAutoHideBottom;
				break;
		}   	
	}
	else
		this.selected.selectedSplitter		= splitMode;
						 
	if (targetID !=-99)
	{	
		this.selected.selectedTarget=ttlayout_GetTargetByID(targetID);
	}	
	
	
	ttlayout_MoveSplitter();
}					
			
function ttlayout_ShowAutoHideTarget(targetID)
{
	ttlayout_HideSelects(); 	
	var i = new Number(); 	
	var foundID;
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID ==targetID)
			foundID=i;
		else
		{
			if (dockedTargets[i].autoHideDisplayed)  	
			{	
				window.clearTimeout(dockedTargets[i].autoHideTimer.timerValue)							
				ttlayout_HideAutoHideTarget(dockedTargets[i].targetID ,false, false);			
			}
		}
	}  		
	window.clearTimeout(dockedTargets[foundID].autoHideTimer.timerValue)		
	dockedTargets[foundID].autoHideTimer.timerValue="";
	dockedTargets[foundID].autoHideTimer.timerCancel =  false;	
	ttdd_showSelects(dockedTargets[foundID].targetDiv);
	  
	if (dockedTargets[foundID].autoHide && !dockedTargets[foundID].autoHideDisplayed)
	{	
		var autoHideObj;		
		if(dockedTargets[foundID].isTabParent ||
			dockedTargets[foundID].isTabChild)
		{
			var tempTargetID;
			if(dockedTargets[foundID].isTabParent)						
				tempTargetID= dockedTargets[foundID].targetID;										
			else
			{
				tempTargetID = dockedTargets[foundID].tabParentId;			
				var target = ttlayout_GetTargetByID(tempTargetID); 	
				autoHideObj =document.getElementById(tempTargetID+"AutoHideDiv")
				autoHideObj.innerHTML= ttlayout_GetImagePath(target);  
				
				if(target.edgeType==en_leftEdge ||
				   target.edgeType==en_rightEdge) 
					autoHideObj.style.height="";
				else
					autoHideObj.style.width="";
			}
			for(i=0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].tabParentId ==tempTargetID)
				{
					autoHideObj =document.getElementById(dockedTargets[i].targetID+"AutoHideDiv");
					autoHideObj.innerHTML= ttlayout_GetImagePath(dockedTargets[i]);  					
					if(dockedTargets[i].edgeType==en_leftEdge ||
						dockedTargets[i].edgeType==en_rightEdge) 
						autoHideObj.style.height="";
					else
						autoHideObj.style.width="";
				}
			}
			autoHideObj =document.getElementById(dockedTargets[foundID].targetID+"AutoHideDiv");
			autoHideObj.innerHTML=ttlayout_GetImagePath(dockedTargets[foundID]) +dockedTargets[foundID].description;   
			
			if(dockedTargets[foundID].edgeType==en_leftEdge ||
						dockedTargets[foundID].edgeType==en_rightEdge) 
				autoHideObj.style.height=autoHideObj.offsetHeight +10;
			else
				autoHideObj.style.width=autoHideObj.offsetWidth +10;
		}    
		if(!this.settings.simplifyClientSideCode)
			ttlayout_StartPull(targetID,foundID);
		else
		{			 
			ttlayout_showAutoHideSimpleMode(targetID);
		}
		
		dockedTargets[foundID].autoHideDisplayed = true;
		ttlayout_SetPostBackField(); 		
	}
}
			
function ttlayout_HideAutoHideTarget(targetID, ttlayout_PushTarget, performShowSelects)
// hides the specified targets
{	
	var i;	
	if(this.selected.selectedSplitter > en_splitDockHoriz)
		return; 
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID==targetID)
			break;
	}  
	
	window.clearTimeout(dockedTargets[i].autoHideTimer.timerValue)		
	dockedTargets[i].autoHideTimer.timerValue="";	
	if (dockedTargets[i].autoHide && dockedTargets[i].autoHideDisplayed)
	{
		var target = ttlayout_GetTargetByID(targetID); 		
		var mainObj = document.getElementById(this.settings.uniqueID+"innerDockDiv");		
		dockedTargets[i].autoHideDisplayed=false; 		
		document.getElementById("autoHideSplitter" +dockedTargets[i].targetID).style.display="none";		
		if(ttlayout_PushTarget)
		{			
			if(!this.settings.simplifyClientSideCode)
				ttlayout_StartPush(targetID,false); 
			else
				ttlayout_hideAutoHideSimpleMode(targetID);
		}
		else
		{		
			switch (dockedTargets[i].edgeType)
			{
				case en_leftEdge:
					target.targetDiv.style.left = (0-(parseInt(target.targetDiv.style.width) +10))+"px";
					break;
				case en_rightEdge:
					target.targetDiv.style.left = mainObj.style.width;;
					break;
				case en_topEdge:
					target.targetDiv.style.top = (0-parseInt(target.targetDiv.style.height)-5)+"px";
					break;
				case en_bottomEdge:
					target.targetDiv.style.top =mainObj.style.height;
					break;
			}
		}		
	}
	
	ttlayout_SetTargetPositions();
	//Only show selects if no other targets are autoHiden	
	if(performShowSelects)
	{
		for(i=0;i<dockedTargets.length;i++)
		{
			if(dockedTargets[i].autoHideDisplayed)
				return;
		}  
		ttlayout_ShowSelects(); 
	}
}
			
function ttlayout_SetAutoHide(targetID)
{	
	/*
		This function is called when the user presses the pin icons. When 
		pressed the target will become pinned or resume its previous
		docked position
	*/
	var target = ttlayout_GetTargetByID(targetID);	 
	target.autoHide = (target.autoHide==false);
	
	if(target.autoHide==false)
	{
		
		if(target.isTabParent ||
			target.isTabChild)
		{
							
			var tempTargetID;
			if(target.isTabParent)						
				tempTargetID= target.targetID;							 			
				
			else
			{
				tempTargetID = target.tabParentId;
				target=ttlayout_GetTargetByID(tempTargetID);								
			}
			target.autoHideDisplayed=false;
			target.autoHide=false;				
			document.getElementById("autoHideSplitter" +tempTargetID).style.display="none";							
			for(i=0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].tabParentId ==tempTargetID)
				{
					dockedTargets[i].autoHideDisplayed=false;
					dockedTargets[i].autoHide=false;
					document.getElementById("autoHideSplitter" +dockedTargets[i].targetID).style.display="none";
				}
			}  							
		}
		else	
		{
			target.autoHideDisplayed=false;			
			document.getElementById("autoHideSplitter" +target.targetID).style.display="none";							
		}
		ttlayout_SetPageSize();		
		ttlayout_ShowSelects(); 		
	}
	else
	{
		//Hide Objects
		target.autoHideWidth=0; 
		target.autoHideHeight=0;	
		if(target.isTabParent ||
			target.isTabChild)
		{
			var tempTargetID;
			if(target.isTabParent)			
				tempTargetID= target.targetID;			
			else
			{
				tempTargetID = target.tabParentId;
				ttlayout_GetTargetByID(tempTargetID).autoHide=true;//Set parent   
			}	    
			//Hide Tab Object
			document.getElementById(settings.uniqueID +"tab"+tempTargetID).style.display="none";
			//Set Parent AutoHide Settings
			target = ttlayout_GetTargetByID(tempTargetID);			
			target.autoHideHeight =  parseInt(target.targetDiv.style.height);
			target.autoHideWidth =  parseInt(target.targetDiv.style.width);
			for(i=0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].tabParentId==tempTargetID &&
					dockedTargets[i].targetID!=targetID)
				{
					document.getElementById(this.settings.uniqueID+dockedTargets[i].targetID+"DockDiv").style.display="none";					
					dockedTargets[i].autoHide=true;  					
					dockedTargets[i].autoHideHeight =  target.autoHideHeight;
					dockedTargets[i].autoHideWidth =   target.autoHideWidth;
				}
			}  		
		}		
		if(!settings.simplifyClientSideCode)
		{
			ttlayout_SetPostBackField() 
			ttlayout_StartPush(targetID, true); 
		}
		else
		{
			ttlayout_SetPageSize();
			ttlayout_SetPostBackField();		
		}
	}
	if (this.settings.onAfterSplitterMove != null && this.settings.onAfterSplitterMove != "")
	    eval(this.settings.onAfterSplitterMove);
}
			
function ttlayout_SetPageSize()
{		
	
	/*
		resize the main div to the size of the screen	
	*/
	var i;
	var usedTop = 0;
	var usedLeft = 0;
	var usedWidth = 0;
	var usedHeight =0; 			
	var topObj = document.getElementById(this.settings.uniqueID+"topAutoHideSpan");
	var leftObj = document.getElementById(this.settings.uniqueID+"leftAutoHideSpan");
	var rightObj = document.getElementById(this.settings.uniqueID+"rightAutoHideSpan");
	var bottomObj = document.getElementById(this.settings.uniqueID+"bottomAutoHideSpan");	
	var adjust= 20;	
	
	if(page.isNS)
		 adjust=22;
	topObj.style.display = "none";
	leftObj.style.display = "none";
	rightObj.style.display = "none";
	bottomObj.style.display = "none";
	
	topObj.innerHTML = "";
	leftObj.innerHTML = "";
	rightObj.innerHTML = "";
	bottomObj.innerHTML = "";
		
	var lastRow =0;
	var autoHideHTML = new Array("","","","");
	var targetAutohides = new Array("","","","");		
	for (i=0; i<dockedTargets.length; i++)
	{
		if (dockedTargets[i].autoHide)
		{	
			lastRow=i;						
			if(dockedTargets[i].isTabParent)
			{	
				autoHideHTML[dockedTargets[i].edgeType]=ttlayout_CreateAutoHideElement(dockedTargets[i],true,autoHideHTML[dockedTargets[i].edgeType] );								  			
				
				if(targetAutohides[dockedTargets[i].edgeType]=="")
					targetAutohides[dockedTargets[i].edgeType] =dockedTargets[i]; 
				for(j=0;j<dockedTargets.length;j++)				
				{
					if(dockedTargets[j].tabParentId == dockedTargets[i].targetID)
					{						
					    autoHideHTML[dockedTargets[j].edgeType]=ttlayout_CreateAutoHideElement(dockedTargets[j],false,autoHideHTML[dockedTargets[j].edgeType]);													    
					    lastRow=j;
					}
				}  							
			}
			
			if(!dockedTargets[i].isTabChild)
			{
				if(!dockedTargets[i].isTabParent)  
				{
					autoHideHTML[dockedTargets[i].edgeType]=ttlayout_CreateAutoHideElement(dockedTargets[i],true,autoHideHTML[dockedTargets[i].edgeType]);
					if(targetAutohides[dockedTargets[i].edgeType]=="")
						targetAutohides[dockedTargets[i].edgeType] =dockedTargets[i];
			    }
			    if(dockedTargets[lastRow].edgeType==en_leftEdge ||    
					dockedTargets[lastRow].edgeType==en_rightEdge)
					autoHideHTML[dockedTargets[lastRow].edgeType]+="<BR>";
				else
					autoHideHTML[dockedTargets[lastRow].edgeType]+="<TD width=10px>&nbsp</TD>";				
			}
			
			switch(dockedTargets[i].edgeType)
			{
					case en_leftEdge:
						if (leftObj.style.display=="none")
						{
							leftObj.style.display = "block";
							if(page.isNS)						
								leftObj.style.width=22;
							usedWidth += adjust;
							usedLeft += adjust;						
						}
						break;
					case en_rightEdge:
						if (rightObj.style.display=="none")
						{
							if(page.isNS)						
								leftObj.style.width=22;
							rightObj.style.display = "block";
							usedWidth += adjust;
						}
						break;
					case en_topEdge:					
						if (topObj.style.display=="none")
						{
							topObj.style.display = "block";
							usedHeight += adjust;
							usedTop += adjust;
							if(page.isNS)						
								topObj.style.height=22;
						}
						break;
					case en_bottomEdge:   
						if (bottomObj.style.display=="none")
						{
							bottomObj.style.display = "block";
							if(page.isNS)						
								bottomObj.style.height=22;
							usedHeight += adjust;
						}	
						break;
			}  			
		}
	}
	
	if(autoHideHTML[en_topEdge]  !="")
		autoHideHTML[en_topEdge] +="</TR></TABLE>"; 
	
	topObj.innerHTML = autoHideHTML[en_topEdge];
	leftObj.innerHTML = autoHideHTML[en_leftEdge];
	rightObj.innerHTML = autoHideHTML[en_rightEdge];
	bottomObj.innerHTML = autoHideHTML[en_bottomEdge];
	
	for(i=0;i<targetAutohides.length;i++)
	{
		if(targetAutohides[i] !="")
		{
			if(i==en_leftEdge || i==en_rightEdge)
			{
				var autoHideObj =document.getElementById(targetAutohides[i].targetID+"AutoHideDiv");
				autoHideObj.style.height=autoHideObj.offsetHeight +10;
			} 
			else
			{
				var autoHideObj =document.getElementById(targetAutohides[i].targetID+"AutoHideDiv");
				autoHideObj.style.width=autoHideObj.offsetWidth +10;
			}
		}
	} 
		
	var width; 
	var height; 	
	if(page.isNS)
	{
		width=window.innerWidth;
		height=window.innerHeight;
	}
	else
	{
		width=document.body.clientWidth;
		height=document.body.clientHeight;
	}	 
	if ((height>100)&&(width>100))
	{
		//First set outer target position, then resize inner dock target based on any pinned objects							
		for(i=0;i<edgeTargets.length;i++)
		{
			switch (edgeTargets[i].edgeType)
			{
				case en_rightEdge: 					
					width -=edgeTargets[i].left;					
					break; 
				case en_leftEdge:					
				 	width -=edgeTargets[i].left + edgeTargets[i].width;
					break; 
				case en_topEdge:					
					height -=edgeTargets[i].top + edgeTargets[i].height; 					
					break;
				case en_bottomEdge:  
					height -=edgeTargets[i].top; 
			}   
		}				
		this.page.outerDockDiv.style.width =width;
		this.page.outerDockDiv.style.height =height;		
		
		this.page.innerDockDiv.style.top = usedTop+"px";
		this.page.innerDockDiv.style.left = usedLeft+"px";
		this.page.innerDockDiv.style.width =  (width-(usedWidth+1))+"px";
		this.page.innerDockDiv.style.height =(height -(usedHeight+1) )+"px";		
				
		topObj.style.width = width;
		leftObj.style.height = height;		
		rightObj.style.height = height;
		bottomObj.style.width = width;
		bottomObj.style.top =height -adjust; 
		bottomObj.style.height=adjust;
		leftObj.style.top="0px"
		rightObj.style.top="0px"
		
		//Set autohide width and height based on remaining space available		
		if (topObj.style.display!="none" && leftObj.style.display!="none")
		{leftObj.style.top =parseInt(leftObj.style.top) +22;
			leftObj.style.height =parseInt(leftObj.style.height) -22;}
				
		if (topObj.style.display!="none" && rightObj.style.display!="none")
		{rightObj.style.top =parseInt(rightObj.style.top) +22;
			rightObj.style.height =parseInt(rightObj.style.height) -22;}		
	}		
	ttlayout_SetTargetPositions(); 
}
			
function ttlayout_HideDockSplitters(targetID)
{
	//Hide dock splitters and resize target to full
	document.getElementById("splitterV" + targetID).style.display ="none"; 
	document.getElementById("splitterH" + targetID).style.display ="none";				
}
			
function ttlayout_SelectTarget(targetID, tabSelected)
{	
	this.page.isDragging=true;	
	ttlayout_HideSelects(); 
	var target=ttlayout_GetTargetByID(targetID);	
	this.selected.selectedTarget = target;
	if (target.autoHideDisplayed)
		return;
		  	
	//Determine if the user has selected a Tab target within the tab Target				
	
	//this.ttlayout_SelectedArrayPos()=pos;
	this.selected.selectedTargetDiv = document.getElementById(this.settings.uniqueID+target.targetID+"DockDiv");			
	this.selected.tabSelected=tabSelected;
	if (target.autoHide)
			return;
		
	if(page.isNS)
	{	
		this.positions.currentX = this.nsSettings.nsWindowX;
		this.positions.currentY = this.nsSettings.nsWindowY;			
	}
	else
	{ 	
		this.positions.currentX = window.event.x;
		this.positions.currentY = window.event.y;	
	}	
	if(tabSelected)
	{	
		this.positions.offsetX = this.positions.currentX - parseInt(this.selected.selectedTabDiv.style.left);
		this.positions.offsetY = this.positions.currentY - parseInt(this.selected.selectedTabDiv.style.top);
		this.positions.offsetX-=parseInt(this.page.outerDockDiv.style.left);	
	}
	else
	{ 
		this.positions.offsetX = this.positions.currentX - parseInt(this.selected.selectedTargetDiv.style.left);
		this.positions.offsetY = this.positions.currentY - parseInt(this.selected.selectedTargetDiv.style.top);
		this.positions.offsetX-=parseInt(this.page.outerDockDiv.style.left);	
	}
	//document.getElementById(this.settings.uniqueID+	targetID +"innerTable").className="theadersel theaderOuter";			
	
	
	if(page.isIE) 
		document.getElementById(this.settings.uniqueID+targetID+"DockDiv").style.filter="alpha(opacity=50)";				
		
}
			
function ttlayout_UnselectTarget()
{	
	if(this.selected.selectedTarget.targetID !="" &&
		this.selected.selectedTarget.autoHideDisplayed)		  
		return;
		
	var target = this.selected.selectedTarget; 	
	target.requireUpdate = true;
	
	if(page.isNS)
	{var x = this.nsSettings.nsWindowX;var y = this.nsSettings.nsWindowY;}
	else{var x = window.event.x;var y = window.event.y;}
	
	try
	{		
		//document.getElementById(this.settings.uniqueID+	this.selected.selectedTarget.targetID +"innerTable").className="theader theaderOuter";		
		document.getElementById(this.settings.uniqueID+ this.selected.selectedTarget.targetID+"DockDiv").style.filter="";	
	}
	catch(er)
	{}			
	var success
	success =ttlayout_CheckDockDropPosition(x -(parseInt(this.page.outerDockDiv.style.left) +parseInt(this.page.innerDockDiv.style.left)) ,y-(parseInt(this.page.outerDockDiv.style.top) +parseInt(this.page.innerDockDiv.style.top)),false);	
	ttlayout_ClearElements();	
	if(success)			
	{
		ttlayout_SetTargetPositions(); 		
		//ttlayout_SetPostBackField();
		//__doPostBack(this.settings.uniqueID.substr(0,this.settings.uniqueID.length -1),'');
	}
	ttlayout_ShowSelects(); 
	this.page.isDragging=false;
	
	if (this.settings.onAfterSplitterMove != null && this.settings.onAfterSplitterMove != "")
	    eval(this.settings.onAfterSplitterMove);

}

function ttlayout_GeneralMouseMove(e)
{	
	/*
	Handles the events when the mouse is moved. This includes 
	dragging a docked target to another edge position. When the user drags a target object
	a preview object is displayed.	
	*/	
	if(page ==null)
		return;
	if(page.isNS)
	{
		if (typeof(e)!="object")			
			return;				
		this.nsSettings.nsWindowX=e.pageX;  
		this.nsSettings.nsWindowY=e.pageY;
		var x = this.nsSettings.nsWindowX;
		var y = this.nsSettings.nsWindowY;		
	}
	else{	
	var x = window.event.x;var y = window.event.y;
	}
			
	this.page.dockdragDiv.style.display="none";
	if (((!page.isNS)&&(window.event.button==1))||
		(page.isNS&&(this.nsSettings.nsMouseButton==1)))
	{				
		
		if (typeof(this.selected.selectedTargetDiv)=="object")
		{	
			
			if (!this.selected.dragDisplayed)
			{				
				if ((Math.abs(x-this.positions.currentX)>2)||(Math.abs(y-this.positions.currentY)>2))
				{
					
					var left = Math.floor(this.settings.dragTargetWidth*(this.positions.offsetX/parseInt(this.selected.selectedTargetDiv.style.width)));					
					
					this.selected.dragDisplayed = true;													
					if(this.selected.tabSelected)
						this.page.dragDiv.style.top =(parseInt(this.selected.selectedTabDiv.style.top)- this.settings.dragTargetHeight)+20;
					else					
						this.page.dragDiv.style.top = (parseInt(this.selected.selectedTargetDiv.style.top))+"px";
					this.page.dragDiv.style.left = ((x -parseInt(this.page.outerDockDiv.style.left)) -left)+"px";					
					this.page.dragDiv.style.width = (this.settings.dragTargetWidth)+"px";
					this.page.dragDiv.style.height = (this.settings.dragTargetHeight)+"px";
					this.page.dragDiv.style.display = "block";															
				}			
			}
			else
			{	
				//var mainObj = document.getElementById(this.settings.uniqueID+"innerDockDiv");					
				this.page.dragDiv.style.display = "block";
				ttlayout_CheckDockDropPosition(x -(parseInt(this.page.outerDockDiv.style.left) +parseInt(this.page.innerDockDiv.style.left)) ,y-(parseInt(this.page.outerDockDiv.style.top) +parseInt(this.page.innerDockDiv.style.top)),true);
								
				if (y>parseInt(this.page.outerDockDiv.style.top))
				{						
					this.page.dragDiv.style.top = parseInt(this.page.dragDiv.style.top)+(y-this.positions.currentY);					
					this.positions.currentY = y;
				}											
				this.page.dragDiv.style.left	= parseInt(this.page.dragDiv.style.left)+(x-this.positions.currentX);																					
				this.positions.currentX = x;
			}										
		}
		ttlayout_MoveSplitter();		
	}	
	else
	{		
		if (typeof(this.selected.selectedTargetDiv)=="object")
		{					
			if (this.selected.dragDisplayed)
				ttlayout_UnselectTarget();
		}
		//ttlayout_ClearElements();		
	}					
	ttlayout_RenableAutoHideTimer(x -(parseInt(this.page.outerDockDiv.style.left) +parseInt(this.page.innerDockDiv.style.left)),
		y-(parseInt(this.page.outerDockDiv.style.top) +parseInt(this.page.innerDockDiv.style.top)));	
}

function ttlayout_ClearElements()
{
	this.page.dockdragDiv.style.display="none";
	this.selected.selectedTargetDiv = "";
	this.selected.selectedTarget = "";	
	this.page.dragDiv.style.display = "none";
	this.selected.dragDisplayed = false;	
	this.selected.tabSelected=false;
	this.selected.selectedTabDiv="";
}			

function ttlayout_CheckDockDropPosition(x, y, display)
{	
	//Determines if the user is within a drag drop zone		
	//try
//	{												
		if ((dockMiniumuns.leftEdge !=this.settings.bigNumber) &&
			(x <dockMiniumuns.leftEdge)||
			(dockMiniumuns.leftEdge==this.settings.bigNumber) &&			
			(x < this.settings.dockBoundary)) 			
		{							
			if ((dockMiniumuns.bottomEdge !=this.settings.bigNumber) &&
				(y < parseInt(this.page.innerDockDiv.style.height) - dockMiniumuns.bottomEdge) ||
				(dockMiniumuns.bottomEdge ==this.settings.bigNumber))
			{				
				ttlayout_DetermineEdgeOrder(x,y,display,en_leftEdge);
				return true;
			}
		}  
							
		if ((dockMiniumuns.rightEdge !=this.settings.bigNumber) &&
			(x > parseInt(this.page.innerDockDiv.style.width)-dockMiniumuns.rightEdge) 	||
			(dockMiniumuns.rightEdge ==this.settings.bigNumber) &&			
			(parseInt(this.page.innerDockDiv.style.width)-x <this.settings.dockBoundary ))  
		{	
			if ((dockMiniumuns.topEdge !=this.settings.bigNumber) &&
				(y > dockMiniumuns.topEdge) ||
				(dockMiniumuns.topEdge ==this.settings.bigNumber))
			{			
				ttlayout_DetermineEdgeOrder(x,y,display,en_rightEdge );
				return true;
			}
		}	
												
		if ((dockMiniumuns.topEdge !=this.settings.bigNumber) &&
			(y < dockMiniumuns.topEdge) &&
			(x >this.settings.dockBoundary) ||
			(dockMiniumuns.topEdge ==this.settings.bigNumber) &&
			(y <this.settings.dockBoundary )&&
			(x >this.settings.dockBoundary))   
		{	
			ttlayout_DetermineEdgeOrder(x,y,display,en_topEdge );
			return true;
		}	
		
		//document.getElementById("Panel1").innerHTML= "y:" +y  +" height:" +(parseInt(this.page.innerDockDiv.style.height)-g_bodyOffSet)  ;				
		if ((dockMiniumuns.bottomEdge !=this.settings.bigNumber) &&
			(y > parseInt(this.page.innerDockDiv.style.height) - dockMiniumuns.bottomEdge)||
			(dockMiniumuns.bottomEdge == this.settings.bigNumber) &&
			(y > (parseInt(this.page.innerDockDiv.style.height)-parseInt(this.page.outerDockDiv.style.top))-this.settings.dockBoundary))			
		{						
			ttlayout_DetermineEdgeOrder(x,y,display,en_bottomEdge );
			return true;
		}
		return false;					
//	}
//	catch(er)
//	{}	
}
			
function ttlayout_MoveSplitter()
{
	/*
		Handles when the user resizes the target objects with the splitter objects.
		This function validates the allowed resize allowed. And restricts values 
		overlapping over target areas.	
	*/		
	if(page.isNS)
	{		
		var x = this.nsSettings.nsWindowX;
		var y = this.nsSettings.nsWindowY;				
	}
	else
	{ 	
		var x = window.event.x;
		var y = window.event.y;
	}
	
	x -= (parseInt(this.page.outerDockDiv.style.left) +parseInt(this.page.innerDockDiv.style.left))  ;
	y -= (parseInt(this.page.outerDockDiv.style.top) +parseInt(this.page.innerDockDiv.style.top));
	var val;
								
	if (typeof(this.selected.selectedSplitterDIV)=="object")
	{		
		if(page.isIE) 
		{this.page.splitterDiv.style.filter="alpha(opacity=35)";}		
		
		//Determine if the dragged spliter overlaps another splitter				
		if(ttlayout_ValidateSplitterResize(x,y)==false)
			return false;		
		if ( this.selected.selectedSplitter==en_splitLeft  || this.selected.selectedSplitter == en_splitRight  || 
			this.selected.selectedSplitter  ==en_splitDockVert
			|| this.selected.selectedSplitter ==en_splitAutoHideLeft || this.selected.selectedSplitter ==en_splitAutoHideRight )
		{	
			this.page.splitterDiv.style.top		= "0px";
			this.page.splitterDiv.style.display = "block";				
			this.page.splitterDiv.style.width	= this.settings.splitterSize + "px";			
			this.page.splitterDiv.style.left	= x;
			if (page.isNS)
				this.page.splitterDiv.style.height  = window.innerHeight;											
			else							
				this.page.splitterDiv.style.height  = document.body.offsetHeight;								
													
			if (this.selected.selectedSplitter==en_splitDockVert )
			{ //Dock										
				this.page.splitterDiv.style.height = this.selected.selectedSplitterDIV.style.height;							
				this.page.splitterDiv.style.top=document.getElementById(this.settings.uniqueID+this.selected.selectedTarget.targetID+"DockDiv").style.top;													
			}						
		}
		else
		{
			//top bottom			
			this.page.splitterDiv.style.left	= "0px"; 			
			this.page.splitterDiv.style.display = "block";										
			this.page.splitterDiv.style.height = this.settings.splitterSize + "px";			
			this.page.splitterDiv.style.top		= y;
			
			if (page.isNS)			
				this.page.splitterDiv.style.width  = window.innerWidth;			
			else
				this.page.splitterDiv.style.width  =  document.body.offsetWidth;							
								
			if (this.selected.selectedSplitter==en_splitDockHoriz)
			{
				//Determine dock pos							
				this.page.splitterDiv.style.width = this.selected.selectedSplitterDIV.style.width;							
				this.page.splitterDiv.style.left=document.getElementById(this.settings.uniqueID+this.selected.selectedTarget.targetID+"DockDiv").style.left;													
			}						
		}							
	}
}


function ttlayout_ValidateMinSplitterSize(edgeType, x, y)
{	
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].edgeType==edgeType && !dockedTargets[i].autoHide ||
		   	dockedTargets[i].edgeType==edgeType &&		
		   	dockedTargets[i].autoHide && dockedTargets[i].autoHideDisplayed) 
		{
			switch (edgeType)
			{
				case en_leftEdge: 
					var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID +"a").style.width);
					if(x <offset)
					return false;
					break;
				case en_rightEdge:
					var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID +"a").style.width);
					if((parseInt(this.page.innerDockDiv.style.width)-x) <offset)
					return false;		
					break;		
				case en_topEdge: 
					var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID+"a").style.height)+12;
					if(y <offset)
					return false;
					break;					
				case en_bottomEdge:
					var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID+"a").style.height)+12;				
					if((parseInt(this.page.innerDockDiv.style.height)-y) <offset)
					return false;		
					break;		
			}			
		}
	}
	return true;
}

function ttlayout_ValidateSplitterResize(x,y)
{
	/*
		This function checks if a user resize is a valid based on the position of adjacent splitter
		windows
	*/		
	switch (this.selected.selectedSplitter)
	{		
		case en_splitAutoHideLeft:
			return ttlayout_ValidateMinSplitterSize(en_leftEdge, x, y);				
			break;
		case en_splitAutoHideRight:
		 	return ttlayout_ValidateMinSplitterSize(en_rightEdge , x, y);				
			break;		 		
		case en_splitAutoHideTop:
			return ttlayout_ValidateMinSplitterSize(en_topEdge , x, y);				
			break;
		case en_splitAutoHideBottom:
		 	return ttlayout_ValidateMinSplitterSize(en_bottomEdge, x, y);				
			break;	
		case en_splitBottom: 			
			//Check that the bottom splitter does not overlap with the dock top splitter
			if ((y <=  parseInt(document.getElementById(this.settings.uniqueID+"dockTopDiv").style.top)) &&
					(document.getElementById(this.settings.uniqueID+"dockTopDiv").style.visibility !="hidden"))				
				return false;
			return ttlayout_ValidateMinSplitterSize(en_bottomEdge, x, y);				
			break;
		case en_splitTop:			
			//Check that the top splitter does not overlap with the dock bottom splitter
			if ((y >=  parseInt(document.getElementById(this.settings.uniqueID+"dockBottomDiv").style.top)) &&
					(document.getElementById(this.settings.uniqueID+"dockBottomDiv").style.visibility !="hidden"))
				return false;				
			return ttlayout_ValidateMinSplitterSize(en_topEdge, x, y);					
			break;
		case en_splitLeft:							
			//Check that the left splitter does not overlap with the dock right splitter
			if ((x >=  parseInt(document.getElementById(this.settings.uniqueID+"dockRightDiv").style.left)) &&
					(document.getElementById(this.settings.uniqueID+"dockRightDiv").style.visibility !="hidden"))
				return false;							
			return ttlayout_ValidateMinSplitterSize(en_leftEdge, x, y);				
			break;
		case en_splitRight:			
			//Check that the right splitter does not overlap with the dock left splitter
			if ((x <=  parseInt(document.getElementById(this.settings.uniqueID+"dockLeftDiv").style.left)) &&
					(document.getElementById(this.settings.uniqueID+"dockLeftDiv").style.visibility !="hidden"))
				return false;
			return ttlayout_ValidateMinSplitterSize(en_rightEdge, x, y);											
			break;
		case en_splitDockHoriz:
			var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +this.selected.selectedTarget.targetID+"a").style.height);
			if(y < (selected.selectedTarget.actualdockedTop+(offset+25)))
				return false;
			//Check the splitter has not passed the adjacent window
			if((this.ttlayout_SelectedArrayPos() !=  dockedTargets.length -1) &&
			   (selected.selectedTarget.edgeType == 
					dockedTargets[this.ttlayout_SelectedArrayPos()+1].edgeType))
			{
				
				for(i=ttlayout_SelectedArrayPos()+1;i<dockedTargets.length;i++)
				{
					if(dockedTargets[i].edgeType == selected.selectedTarget.edgeType &&
						!dockedTargets[i].autoHide && !dockedTargets[i].isTabChild)
					{  					
						if(y > ((dockedTargets[i].actualdockedTop+ dockedTargets[i].actualdockedHeight)-(offset+15)))												
						return false;				
						break;
					}
				}				
			} 
			break;
		case en_splitDockVert:  
			var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +this.selected.selectedTarget.targetID+"a").style.width);
			if(x < (selected.selectedTarget.actualdockedLeft+offset))
				return false;	
			//Check the splitter has not passed the adjacent window
			if((this.ttlayout_SelectedArrayPos() !=  dockedTargets.length -1) &&
			   (selected.selectedTarget.edgeType == 
					dockedTargets[this.ttlayout_SelectedArrayPos()+1].edgeType))
			{
				for(i=ttlayout_SelectedArrayPos()+1;i<dockedTargets.length;i++)
				{
					if(dockedTargets[i].edgeType == selected.selectedTarget.edgeType &&
						!dockedTargets[i].autoHide && !dockedTargets[i].isTabChild)
					{  					
						if(x > ((dockedTargets[i].actualdockedLeft+ dockedTargets[i].actualdockedWidth)-(offset)))
						return false;				
						break;
					}
				}
			}  
	}	
	return true;
}			
			
function ttlayout_ClearDockValues()
{					
	this.selected.selectedTargetDiv = "";
	this.selected.selectedTarget = "";
	this.page.dragDiv.style.display = "none";
	this.selected.dragDisplayed = false;
}

function ttlayout_DetermineEdgeOrder(x, y, showPreview, edgeType)			
{
	
	if(this.selected.dragDisplayed==false)
		return;
	/*
	This function determines the edge Order of the object passed, based on the drag
	drop positon. If the user is just dragging the mouse then the preview window
	is shown only	
	*/	
	var draggedTarget=null;				
	var found=false;	
	var tabDock=false;
	var edgeOrder=0;
	
	//Loop through each target and determine which window the user has dragged into
	for(i=0;i<dockedTargets.length;i++)
	{
		if ((dockedTargets[i].edgeType == edgeType) && 
			(dockedTargets[i] !=this.selected.selectedTarget) &&
			(!dockedTargets[i].autoHide) &&
			(!dockedTargets[i].isTabChild))  			
			
		{
			found=true;
			if ((edgeType ==en_leftEdge) ||(edgeType ==en_rightEdge))				
			{								
				//Check y axis for possible match						
				if((!dockedTargets[i].autoHide) &&  					
					(y >dockedTargets[i].actualdockedTop) &&
					(y <dockedTargets[i].actualdockedTop + dockedTargets[i].actualdockedHeight))
					{						
						draggedTarget=dockedTargets[i];										
						var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID+"a").style.height)+3;
						if(y <dockedTargets[i].actualdockedTop+offset)						
							tabDock=true;
						break;					
					}
			}	
			else
			{				
				if((!dockedTargets[i].autoHide) &&  	 
					(x >dockedTargets[i].actualdockedLeft) &&
					(x <dockedTargets[i].actualdockedLeft + dockedTargets[i].actualdockedWidth))
					{
						draggedTarget=dockedTargets[i];	
						//Determine if the user has Dragged the mouse over the toolbar
						var offset = parseInt(document.getElementById(this.settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID+"a").style.height)+3;
						if(y <dockedTargets[i].actualdockedTop+offset)						
							tabDock=true;
						break;						
					}
			}
		}
	}				
		
	if (draggedTarget !=null && this.selected.selectedTarget !="")
	{//The user dropped the dragged target into an existing docked target window
		ttlayout_DetermineDockedPosition(x, y, showPreview, edgeType,tabDock,draggedTarget);							
	}     
	else
	{//The user did not drag the mouse over an existing docked target, so the preview object
	// will show the fullsize preview object or dock to fill all the available space
		ttlayout_DeterminePosition(showPreview,edgeType, found);
	}
}

function ttlayout_SetTabbedSettings(setting,value)
{

	//Determine max Edge Order
	var tabParentID;
	if(this.selected.selectedTarget.isTabParent)
		tabParentID =this.selected.selectedTarget.targetID;
	else	
		tabParentID =this.selected.selectedTarget.tabParentId;	
	
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].tabParentId ==  tabParentID)
		{
			switch (parseInt(setting))
			{
				case parseInt(en_TabWidth):
					dockedTargets[i].width=value;
					break;
				case parseInt(en_TabHeight):
					dockedTargets[i].height=value;
					break;
				case parseInt(en_TabEdgeOrder):
					dockedTargets[i].edgeOrder=value;
					break;	
				case parseInt(en_TabEdgeType):
					dockedTargets[i].edgeType=value;
					break;	
				case parseInt(en_TabParent):
					dockedTargets[i].isTabParent=value;
					break;
				case parseInt(en_TabChild):
					dockedTargets[i].isTabChild=value;
					break;
				case parseInt(en_TabParentID):
					dockedTargets[i].tabParentID=value;
					break;
			}
		}
	}
	
	switch (parseInt(setting))
	{
		case parseInt(en_TabWidth):
			ttlayout_GetTargetByID(tabParentID).width=value;
			break;
		case parseInt(en_TabHeight):
			ttlayout_GetTargetByID(tabParentID).height=value;
			break;
		case parseInt(en_TabEdgeOrder):
			ttlayout_GetTargetByID(tabParentID).edgeOrder=value;
			break;	
		case parseInt(en_TabEdgeType):
			ttlayout_GetTargetByID(tabParentID).edgeType=value;		
			break;	
		case parseInt(en_TabParent):
			ttlayout_GetTargetByID(tabParentID).isTabParent=value;				
			break;
		case parseInt(en_TabChild):
			ttlayout_GetTargetByID(tabParentID).isTabChild=value;	
			break;
		case parseInt(en_TabParentID):			
			ttlayout_GetTargetByID(tabParentID).tabParentID=value;			
	}
}


function ttlayout_DetermineDockedPosition(x, 
		y, showPreview, edgeType, tabDocked, draggedTarget)
{	
	if(showPreview==false)
	{
		var edgeOrder=0;
		var edgeOrderIncrement=1;
		
		if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false || 
				this.selected.selectedTarget.isTabChild	&& this.selected.tabSelected==false)
		{
			//Determine max Edge Order
			var tabParentID;
			if(this.selected.selectedTarget.isTabParent)
				tabParentID =this.selected.selectedTarget.targetID;
			else
				tabParentID =this.selected.selectedTarget.tabParentId;	
			
			for(i=0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].tabParentId ==  tabParentID)
				{
					edgeOrderIncrement	++;
					if(dockedTargets[i].edgeOrder >edgeOrder)
						edgeOrder =dockedTargets[i].edgeOrder;					
				}
			}
		}
		else
			edgeOrder =this.selected.selectedTarget.edgeOrder;
			
			
		//The user has released the mouse button and so don't show the preview object	
		//First adjust the edge order from the previous docked position			
		for (j=0;j<dockedTargets.length;j++)
		{
			if ((dockedTargets[j].edgeType== this.selected.selectedTarget.edgeType) &&  
				(dockedTargets[j].edgeOrder > edgeOrder)) 
				dockedTargets[j].edgeOrder-=edgeOrderIncrement;		
		}						
		
		if(this.selected.tabSelected)
			ttlayout_RemoveTabParent(); 
				
		if(tabDocked)//Set the tab parent pos			
		{		
			if(this.selected.selectedTarget.isTabParent ||this.selected.selectedTarget.isTabChild)
			{
				if(this.settings.tabSelected)
				{
					this.selected.selectedTarget.tabParentId = draggedTarget.targetID;  
					this.selected.selectedTarget.isTabChild=true; 
				}
				else
				{
					if(this.selected.selectedTarget.isTabParent)
						tabParentID =this.selected.selectedTarget.targetID;
					else	
						tabParentID =this.selected.selectedTarget.tabParentId;	
									
					for(i=0;i<dockedTargets.length;i++)
					{
						if(dockedTargets[i].tabParentId ==  tabParentID)
						{	
							dockedTargets[i].tabParentId=	draggedTarget.targetID;								
						}						
					}
					var parenttab = ttlayout_GetTargetByID(tabParentID);
					parenttab.isTabChild=true;  
					parenttab.tabParentId=	draggedTarget.targetID;	
					parenttab.isTabParent=false;					
				}
			}
			else
			{
				this.selected.selectedTarget.tabParentId = draggedTarget.targetID;  
				this.selected.selectedTarget.isTabChild=true; 	
			}
			draggedTarget.isTabParent=true;
		}
		else
		{
			//OtherWise the user has dragged a whole tabbed target into new edge Type
			if(this.selected.tabSelected)
			{
				this.selected.selectedTarget.tabParentId="";				
				this.selected.selectedTarget.isTabChild=false; 
			}
		}
		
		//Set the draged window to the new dock postion
		if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false || 
				this.selected.selectedTarget.isTabChild	&& this.selected.tabSelected==false)
			ttlayout_SetTabbedSettings(en_TabEdgeType, edgeType); 
		else			
		this.selected.selectedTarget.edgeType =edgeType	
		
		if(tabDocked)//Set the tab parent pos					
		{
			//this.selected.selectedTarget.edgeOrder=draggedTarget.edgeOrder+1; 					
			//Configure tab childrens
			edgeOrder =draggedTarget.edgeOrder;
			edgeOrderIncrement	=1;
			for(i =0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].tabParentId ==  draggedTarget.targetID)
				{	
					edgeOrder ++;
					dockedTargets[i].edgeOrder=edgeOrder;		
					edgeOrderIncrement++;				
				}
			}  			
		}
		else
		{					
			if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false || 
				this.selected.selectedTarget.isTabChild && this.selected.tabSelected==false)
			{	
				if(this.selected.selectedTarget.isTabParent)
					tabParentID =this.selected.selectedTarget.targetID;
				else	
					tabParentID =this.selected.selectedTarget.tabParentId;	
									
				ttlayout_GetTargetByID(tabParentID).edgeOrder=  draggedTarget.edgeOrder;				
				edgeOrder = draggedTarget.edgeOrder;
													
				for(i=0;i<dockedTargets.length;i++)
				{
					if(dockedTargets[i].tabParentId ==  tabParentID)
					{	
						edgeOrder++;
						dockedTargets[i].edgeOrder=	edgeOrder;							
					}						
				}			
			}
			else			
				this.selected.selectedTarget.edgeOrder=draggedTarget.edgeOrder; 							
				
			draggedTarget.edgeOrder+=edgeOrder+edgeOrderIncrement;
		}
		
		//Finally adjust the edge order based on where the user dropped the target object			
		for (j=0;j<dockedTargets.length;j++)
		{
			//Note the increment value is used because the user could drag a tab into the edge
			if ((dockedTargets[j].edgeType== draggedTarget.edgeType) &&  
				(dockedTargets[j].edgeOrder > edgeOrder)) 				
				dockedTargets[j].edgeOrder+=edgeOrderIncrement;													
		}
		
		//The code below adjusts the height of the the dragged target and the target 
		//object being dragged into. To fit both targets the width or height of the currently
		//docked target is halfed. The dragged target is then updated to fit inside this newly
		//created space on the docked position. The code below corrects the height or width,
		//depending on the edge type
		if ((edgeType ==en_leftEdge) ||  
			(edgeType ==en_rightEdge))
		{	
			if(tabDocked)							
				this.selected.selectedTarget.height=draggedTarget.actualdockedHeight;
			else
			{
				this.selected.selectedTarget.height=parseInt(draggedTarget.actualdockedHeight/2); 
				draggedTarget.height=parseInt(draggedTarget.height/2);								
			}
			this.selected.selectedTarget.width=draggedTarget.actualdockedWidth
		}
		else
		{
			if(tabDocked)							
				this.selected.selectedTarget.width=draggedTarget.actualdockedWidth;
			else
			{
				this.selected.selectedTarget.width=parseInt(draggedTarget.actualdockedWidth/2); 
				draggedTarget.width=parseInt(draggedTarget.width/2);								
			}
			this.selected.selectedTarget.height=draggedTarget.actualdockedHeight
		}
		dockedTargets.sort(ttlayout_sortFunc);  			
		ttlayout_CorrectEdgeOrders();
		ttlayout_ClearDockValues();
		return;
	}
	else
	{//Show the preview target object, based on the window the user has dragged the mouse
	//over
						
		this.page.dockdragDiv.style.left	= draggedTarget.actualdockedLeft;
		this.page.dockdragDiv.style.top		= draggedTarget.actualdockedTop;																
		if ((edgeType ==en_leftEdge) ||  
			(edgeType ==en_rightEdge))
		{
			this.page.dockdragDiv.style.width	= draggedTarget.actualdockedWidth;
			if(tabDocked)
				this.page.dockdragDiv.style.height	= draggedTarget.actualdockedHeight;
			else
				this.page.dockdragDiv.style.height	= draggedTarget.actualdockedHeight/2;
		}
		else
		{								
			if(tabDocked)
				this.page.dockdragDiv.style.width	= draggedTarget.actualdockedWidth;
			else				
				this.page.dockdragDiv.style.width	= draggedTarget.actualdockedWidth/2;
			this.page.dockdragDiv.style.height	= draggedTarget.actualdockedHeight;
		}
		this.page.dockdragDiv.style.display="block";										
		this.page.dragDiv.style.display = "none";
	}
}

function ttlayout_DeterminePosition(showPreview,edgeType,found)
{
	if(this.selected.selectedTarget =="")
		return;
		
	var target = new Target();	
	var edgeOrder=0;
	if(this.selected.selectedTarget.isTabParent || this.selected.selectedTarget.isTabChild)						
	{
		if(this.selected.selectedTarget.isTabParent)
			tabParentID =this.selected.selectedTarget.targetID;
		else	
			tabParentID =this.selected.selectedTarget.tabParentId;	
		var tempTarget = ttlayout_GetTargetByID(tabParentID);
		
		target.width =tempTarget.width;
		target.height =tempTarget.height;	
		target.edgeType=tempTarget.edgeType;
	}
	else
	{
		target.width =this.selected.selectedTarget.width;
		target.height =this.selected.selectedTarget.height;
		target.edgeType=this.selected.selectedTarget.edgeType;
	}
			
	if(showPreview==false)														
	{//If not showing a drag preview image then dock the target and set the defualt edge order			
		
		if (this.selected.selectedTarget.edgeType== edgeType)
			return; //If the window has not changed edge type then don't readjust settings
		
		if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false || 
				this.selected.selectedTarget.isTabChild	&& this.selected.tabSelected==false)
		{
			//Determine max Edge Order
			var tabParentID;
			if(this.selected.selectedTarget.isTabParent)
				tabParentID =this.selected.selectedTarget.targetID;
			else
				tabParentID =this.selected.selectedTarget.tabParentId;	
				
			for(i=0;i<dockedTargets.length;i++)
			{
				if(dockedTargets[i].tabParentId ==  tabParentID)
				{
					if(dockedTargets[i].edgeOrder >edgeOrder)
						edgeOrder =dockedTargets[i].edgeOrder;					
				}
			}
		}
		else
			edgeOrder =this.selected.selectedTarget.edgeOrder;
		
		if( this.selected.tabSelected)
		{
			ttlayout_RemoveTabParent();  
			this.selected.selectedTarget.tabParentId="";	
		}
		
		for (j=0;j<dockedTargets.length;j++)
		{
			if ((dockedTargets[j].edgeType== this.selected.selectedTarget.edgeType) &&  
				(dockedTargets[j].edgeOrder > edgeOrder)) 
			{					
				dockedTargets[j].edgeOrder-=1;		
			}
		}			
		//Set the draged window to the new dock postion	
		if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false || 
				this.selected.selectedTarget.isTabChild && this.selected.tabSelected==false)			
			ttlayout_SetTabbedSettings(en_TabEdgeType,  edgeType); 								
		else		
			this.selected.selectedTarget.edgeType =edgeType									
			
		//Check if any Targets have been autoHidden if so determine the max EdgeOrder
		var edgeOrder=0;
		var autoHiddenFound=false;
		for(j=0;j<dockedTargets.length;j++)
		{
			if ((dockedTargets[j].edgeType== this.selected.selectedTarget.edgeType) &&  
				(dockedTargets[j].autoHide))
			{
				if(dockedTargets[j].edgeOrder>=edgeOrder)
				{
					edgeOrder =dockedTargets[j].edgeOrder;
					autoHiddenFound=true;
				}
			}
		}  
		if(autoHiddenFound)
			edgeOrder+=1;		
			
		if(this.selected.selectedTarget.isTabParent  && this.selected.tabSelected==false|| 
				this.selected.selectedTarget.isTabChild && this.selected.tabSelected==false)
		{					
				ttlayout_GetTargetByID(tabParentID).edgeOrder=edgeOrder;//Parent
				//Set child Rows
				for(i=0;i<dockedTargets.length;i++)
				{
					edgeOrder++;
					if(dockedTargets[i].tabParentId ==  tabParentID)
					{
						dockedTargets[i].edgeOrder=edgeOrder;
					}	
				}  			
		}
		else	
			this.selected.selectedTarget.edgeOrder=edgeOrder;//set to first edge order
	
	
		//Set New Width and Heights if within a different edge position		
		if(edgeType ==en_leftEdge || edgeType ==en_rightEdge)
		{
			if (target.width >this.settings.maxDockDragWidth) 					
			{						
				if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false 
				|| this.selected.selectedTarget.isTabChild && this.selected.tabSelected==false)						
					ttlayout_SetTabbedSettings(en_TabWidth,this.settings.maxDockDragWidth);  							
				else	
				this.selected.selectedTarget.width=this.settings.maxDockDragWidth;					
			}	
		}
		else
		{
			if (target.height >this.settings.maxDockDragHeight)				
			{	
				if(this.selected.selectedTarget.isTabParent && this.selected.tabSelected==false
				|| this.selected.selectedTarget.isTabChild && this.selected.tabSelected==false)						
					ttlayout_SetTabbedSettings(en_TabHeight,this.settings.maxDockDragHeight);  							
				else	
				this.selected.selectedTarget.height=this.settings.maxDockDragHeight;	
			}
		} 
		
		dockedTargets.sort(ttlayout_sortFunc);  
		ttlayout_CorrectEdgeOrders();
		ttlayout_ClearDockValues();							
	}
	else
	{	
		//Determine if any Other windows docked within edge boundary
		if(found)
			return;						
		/*
			The code below displays a full size preview window.
			However, some correction is applied to the preview object to 
			reduce the height or width. For example,if a window which is
			docked on the left which may have a height of 500, is dragged
			onto the top edge, if this value is greater than the max dock height
			then its docked preview will reflect this. However, some logic 
			also checks that the dragged window was not from the previois
			edge if so, then the preview window shows the actual docked height
			or width
		*/			
		this.page.dockdragDiv.style.top	 = 0;
		this.page.dockdragDiv.style.left = 0;	
		
		switch (edgeType)
		{
			case en_leftEdge:																							
				if (target.width >this.settings.maxDockDragWidth &&	target.edgeType !=en_leftEdge) 									
					target.width=this.settings.maxDockDragWidth;					
				this.page.dockdragDiv.style.width = target.width;
				this.page.dockdragDiv.style.height	= this.page.innerDockDiv.style.height; 
				if (dockMiniumuns.bottomEdge != this.settings.bigNumber)
					this.page.dockdragDiv.style.height= parseInt(this.page.dockdragDiv.style.height) -	 dockMiniumuns.bottomEdge; 
				break;
							
			case en_rightEdge:
				if (target.width >this.settings.maxDockDragWidth && target.edgeType !=en_rightEdge) 									
					target.width=this.settings.maxDockDragWidth;
					
				this.page.dockdragDiv.style.width = target.width;
				this.page.dockdragDiv.style.height	= this.page.innerDockDiv.style.height; 				
				if (dockMiniumuns.topEdge != this.settings.bigNumber)
				{
					this.page.dockdragDiv.style.height  = parseInt(this.page.dockdragDiv.style.height) -dockMiniumuns.topEdge; 
					this.page.dockdragDiv.style.top		= parseInt(this.page.dockdragDiv.style.top) +dockMiniumuns.topEdge;
				}	
				this.page.dockdragDiv.style.left = parseInt(this.page.innerDockDiv.style.width) -target.width;	
				break;
				
			case en_topEdge:																
				if (target.height >this.settings.maxDockDragHeight && target.edgeType !=en_topEdge) 									
					target.height=this.settings.maxDockDragHeight;
					
				this.page.dockdragDiv.style.width = this.page.innerDockDiv.style.width; 					
				this.page.dockdragDiv.style.height = target.height;
				
				if (dockMiniumuns.leftEdge !=this.settings.bigNumber)
					this.page.dockdragDiv.style.left = parseInt(this.page.dockdragDiv.style.left) +dockMiniumuns.leftEdge; 	   
				break;
			case en_bottomEdge:			
				if (target.height >this.settings.maxDockDragHeight && target.edgeType !=en_bottomEdge) 									
					target.height=this.settings.maxDockDragHeight;					
				this.page.dockdragDiv.style.width = this.page.innerDockDiv.style.width; 					
				this.page.dockdragDiv.style.height = target.height;								
				this.page.dockdragDiv.style.top = parseInt(this.page.innerDockDiv.style.height) -target.height;
		}					
		this.page.dockdragDiv.style.display="block";//Show the preview target
		this.page.dragDiv.style.display = "none";			
					
	}

}

function ttlayout_StartPull(targetID, arrayID)
{//Start to pull a autohidden window	
	if(dockedTargets[arrayID].autoHideDisplayed)
		return;		
	clearInterval(dockedTargets[arrayID].pushPullTimer); 			
	dockedTargets[arrayID].autoHideTimer.timerCancel=false;  
	dockedTargets[arrayID].autoHideTimer.timerShownFull=false;
	dockedTargets[arrayID].pushPullTimer=setInterval("ttlayout_PullTarget("+targetID+")",10);
}

function ttlayout_StartPush(targetID, redraw)
{//Start to push a autohidden window behind the inner div object
	var target = ttlayout_GetTargetByID(targetID); 
	try
	{
		clearInterval(target.pushPullTimer); 
	}
	catch(er)
	{}		
	document.getElementById("autoHideSplitter" +targetID).style.display="none";		
	target.autoHideTimer.timerShownFull=false; 					
	target.pushPullTimer =setInterval("ttlayout_PushTarget("+targetID+"," +redraw +")",10);
}


function ttlayout_PullTarget(targetID)
{	
	/*
		This function is called by a timer until the pulled target is fully shown.
		This function simulates the effect of the tabbed target sliding out from an
		autohide position. Once the target is fully displayed a resize object is displayed
		allowing the user to resize autohidden objects	
	*/			
	var target = ttlayout_GetTargetByID(targetID);	 
	target.targetDiv.style.display="block";
	var cursor;
	
	switch (target.edgeType)
	{
			case en_leftEdge:
				if (parseInt(target.targetDiv.style.left)<0)		
				{
					if((parseInt(target.targetDiv.style.left)+this.settings.pushPullValue) >0)
					{target.targetDiv.style.left=0;}
					else
					{
					if(parseInt(target.targetDiv.style.height) <parseInt(this.page.innerDockDiv.style.height))
					{
						target.targetDiv.style.height=this.page.innerDockDiv.style.height;
						target.targetInnerDiv.style.height = parseInt(target.targetDiv.style.height)-2.5;
						target.controlDiv.style.height=  "100%";
					}
					target.targetDiv.style.left=parseInt(target.targetDiv.style.left)+this.settings.pushPullValue;
					}
				}
				else 
				{	 				
					clearInterval(target.pushPullTimer);
					cursor ="col-resize";
					if(page.isNS)
						cursor ="e-resize"; 					
					ttlayout_ShowAutoHideResizeSplitter(targetID,
						parseInt(target.targetDiv.style.left) +parseInt(target.targetDiv.style.width),parseInt(target.targetDiv.style.top)+1,
						this.settings.splitterSize,parseInt(target.targetDiv.style.height)-2,cursor); 																					
					
					target.autoHideTimer.timerShownFull=true;
					target.pushPullTimer="";					

					ttlayout_SetPostBackField(); 
				}	
				break;
			case en_rightEdge:
				if ((parseInt(target.targetDiv.style.left) +parseInt(target.targetDiv.style.width))  >parseInt(this.page.innerDockDiv.style.width))		
				{
					if (((parseInt(target.targetDiv.style.left) +parseInt(target.targetDiv.style.width))-this.settings.pushPullValue)  <parseInt(this.page.innerDockDiv.style.width))		
					{						
						target.targetDiv.style.left=parseInt(this.page.innerDockDiv.style.width) - parseInt(target.targetDiv.style.width);	
					}
					else
					{
						if(parseInt(target.targetDiv.style.height) <parseInt(this.page.innerDockDiv.style.height))
						{
							target.targetDiv.style.height=this.page.innerDockDiv.style.height;
							target.targetInnerDiv.style.height = parseInt(target.targetDiv.style.height)-2.5;
							target.controlDiv.style.height=  "100%";
							target.targetDiv.style.top="0px";
						}
						target.targetDiv.style.left=parseInt(target.targetDiv.style.left)-this.settings.pushPullValue;	
					}
				}
				else 
				{	 				
					clearInterval(target.pushPullTimer);	
					
					cursor ="col-resize";
					if(page.isNS)
						cursor ="e-resize"; 					
						
					ttlayout_ShowAutoHideResizeSplitter(targetID,
						parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top),
						this.settings.splitterSize,parseInt(target.targetDiv.style.height),cursor); 	
																				
					target.autoHideTimer.timerShownFull=true;
					target.pushPullTimer="";
					ttlayout_SetPostBackField(); 
				}
				break;
			case en_topEdge:
				if (parseInt(target.targetDiv.style.top)<0)		
				{
					if((parseInt(target.targetDiv.style.top)+this.settings.pushPullValue) >0)
					{target.targetDiv.style.top=0;}
					else
					{
						if(parseInt(target.targetDiv.style.width) <parseInt(this.page.innerDockDiv.style.width))
						{
							target.targetDiv.style.width=this.page.innerDockDiv.style.width;
							target.targetInnerDiv.style.width = parseInt(target.targetDiv.style.width)-2.5;
							target.controlDiv.style.width=  target.targetInnerDiv.style.width;
							target.targetDiv.style.left="0px";
						}
						target.targetDiv.style.top=parseInt(target.targetDiv.style.top)+this.settings.pushPullValue;
					}
				}
				else 
				{	 				
					clearInterval(target.pushPullTimer);	
					cursor ="row-resize";
					if(page.isNS)
						cursor ="s-resize"; 	
					ttlayout_ShowAutoHideResizeSplitter(targetID,
						parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top) + parseInt(target.targetDiv.style.height),
						parseInt(target.targetDiv.style.width),this.settings.splitterSize,cursor); 	
																				
						target.autoHideTimer.timerShownFull=true;
						target.pushPullTimer="";						
						ttlayout_SetPostBackField(); 
				}
				break;
			case en_bottomEdge:
				if ((parseInt(target.targetDiv.style.top) +parseInt(target.targetDiv.style.height))  >parseInt(this.page.innerDockDiv.style.height))		
				{
					if (((parseInt(target.targetDiv.style.top) +parseInt(target.targetDiv.style.height))-this.settings.pushPullValue)  <parseInt(this.page.innerDockDiv.style.height))		
					{						
						target.targetDiv.style.top=parseInt(this.page.innerDockDiv.style.height) - parseInt(target.targetDiv.style.height);	
					}
					else
					{						
						target.targetDiv.style.top=parseInt(target.targetDiv.style.top)-this.settings.pushPullValue;	
					}					
				}
				else 
				{	 				
					clearInterval(target.pushPullTimer);	
					cursor ="row-resize";
					if(page.isNS)
						cursor ="s-resize"; 	
						
					ttlayout_ShowAutoHideResizeSplitter(targetID,
						parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top),
						parseInt(target.targetDiv.style.width),this.settings.splitterSize,cursor); 																					
						target.autoHideTimer.timerShownFull=true;
						target.pushPullTimer="";					
					ttlayout_SetPostBackField(); 
				}
				break;
	}
}

function ttlayout_PushTarget(targetID,redraw)
{
	/*
		When a target has been opended from the autohide position. A Timer determines when
		the target will be hidden. When this occurs this function is called until the target
		is not visible. Providing the effect of sliding the target off the screen	
	*/	
	var i;
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID==targetID)
			break;
	} 
	var target = ttlayout_GetTargetByID(targetID); 
	switch (dockedTargets[i].edgeType)
	{
			case en_leftEdge:
				if ((parseInt(target.targetDiv.style.left) +parseInt(target.targetDiv.style.width))  >-10)		
					target.targetDiv.style.left=parseInt(target.targetDiv.style.left)-this.settings.pushPullValue;			
				else if (target.pushPullTimer)							  
				{
					clearInterval(target.pushPullTimer);	
					target.pushPullTimer="";
					if(redraw)
						ttlayout_SetPageSize();
					ttlayout_SetPostBackField(); 
				}
				break;
			case en_rightEdge:
				if (parseInt(target.targetDiv.style.left)  < parseInt(this.page.innerDockDiv.style.width))		
				{
					target.targetDiv.style.left=parseInt(target.targetDiv.style.left)+this.settings.pushPullValue;	
					
				}
				else if (target.pushPullTimer)							  
				{
					clearInterval(target.pushPullTimer);	
					target.pushPullTimer="";
					if(redraw)
						ttlayout_SetPageSize();
					ttlayout_SetPostBackField(); 	
				}
				break;
			case en_topEdge:
				if ((parseInt(target.targetDiv.style.top) +parseInt(target.targetDiv.style.height)) >0)		
					target.targetDiv.style.top=parseInt(target.targetDiv.style.top)-this.settings.pushPullValue;	
				else if (target.pushPullTimer)							  
				{
					clearInterval(target.pushPullTimer);	
					target.pushPullTimer="";
					if(redraw)
						ttlayout_SetPageSize();
					ttlayout_SetPostBackField(); 	
				}
				break;
			case en_bottomEdge:
				if (parseInt(target.targetDiv.style.top)  < parseInt(this.page.innerDockDiv.style.height))		
					target.targetDiv.style.top=parseInt(target.targetDiv.style.top)+this.settings.pushPullValue;	
				else if (target.pushPullTimer)							  
				{
					clearInterval(target.pushPullTimer);	
					target.pushPullTimer="";
					if(redraw)
						ttlayout_SetPageSize();
					ttlayout_SetPostBackField(); 	
				}
				break;
	}
}



function ttlayout_CreateElements(configureTargets)
{	
	page = new Page(document.getElementById(this.settings.uniqueID +"dragDiv"),
		document.getElementById(this.settings.uniqueID +"dockdragDiv"),
		document.getElementById(this.settings.uniqueID +"splitterDiv"),
		document.getElementById(this.settings.uniqueID +"outerDockDiv"),
		document.getElementById(this.settings.uniqueID +"innerDockDiv"));
		
	if (page.isNS)
	{		
		
		window.captureEvents(Event.MOUSEOVER | Event.MOUSEDOWN | Event.MOUSEUP);
		window.onmousedown=ttlayout_NSMouseDown;
		window.onmouseup=ttlayout_NSMouseUp;		
		window.onmouseover = ttlayout_GeneralMouseMove() ;		
	}	
	
	if(configureTargets)
	{
		for(i=0;i<dockedTargets.length;i++)
		{
			dockedTargets[i].targetDiv=document.getElementById(settings.uniqueID+dockedTargets[i].targetID+"DockDiv");
			dockedTargets[i].autoHideDiv =document.getElementById(settings.uniqueID+"autoHide"+dockedTargets[i].targetID);
			dockedTargets[i].autoDockDiv =document.getElementById(settings.uniqueID+"autoDock"+dockedTargets[i].targetID);
			dockedTargets[i].targetInnerDiv =document.getElementById(settings.uniqueID+dockedTargets[i].targetID+"InnerDiv");		
			dockedTargets[i].targetHeaderDiv =document.getElementById(settings.uniqueID+"targetHeaderCell" +dockedTargets[i].targetID+"a");
			dockedTargets[i].tabDiv =document.getElementById(settings.uniqueID +"tab"+dockedTargets[i].targetID);
			dockedTargets[i].controlDiv=document.getElementById(settings.uniqueID+"Control" +dockedTargets[i].targetID +"Div");
			dockedTargets[i].splitterHDiv =document.getElementById("splitterH" +dockedTargets[i].targetID);
			dockedTargets[i].splitterVDiv =document.getElementById("splitterV" +dockedTargets[i].targetID);			
			dockedTargets[i].controlDiv.onscroll=ttlayout_targetScrolled;
		}  		
	}
	//if(settings.mainContextOnly==false)
		ttlayout_SetPageSize(); 
	document.getElementById("LM_MainContextTarget").onscroll=ttlayout_mainContextScrolled;		
	if(document.getElementById("MainContextPos").value !=0)	
		document.getElementById("LM_MainContextTarget").scrollTop =document.getElementById("MainContextPos").value;		
	
}

function ttlayout_targetScrolled()
{
	var target =ttdd_getTarget(event.srcElement);
	if(target!=null)
	{
		for(i=0;i<dockedTargets.length;i++)
		{
			if(dockedTargets[i].targetDiv ==target)
			{
				dockedTargets[i].scrollPos = event.srcElement.scrollTop;
				ttlayout_SetPostBackField();
				break;
			}
		}	
	}
}

function ttlayout_mainContextScrolled()
{	
	document.getElementById("MainContextPos").value=document.getElementById("LM_MainContextTarget").scrollTop;
}


	/*
		The client side array is passed from the server object as a string value into 
		the docked and egde target hidden fields. On startup this function, creates the
		client side array based on these values.
	
		The docked  target hidden field, is used to post  back the client side changes to the server.
		The edge target settings are recovered from the page view state object
	*/		
	
function ttlayout_initLayout()
{			
	selected = new Selected("","","","",false);  
	positions = new Positions("","","","");
	nsSettings = new NetscapeSettings("","",0);
	dockMiniumuns = new DockMiniumuns(0,0,0,0);
	
	var setprops = eval("TT_Settings");	
	if(setprops.length !=0)
	{
		settings = new Settings( 
		    parseInt(setprops[0]),
		    parseInt(setprops[1]),
		    parseInt(setprops[2]),
		    parseInt(setprops[3]), 
		    setprops[4],
		    parseInt(setprops[5]),
		    parseInt(setprops[6]),
		    setprops[7],
		    setprops[8],
		    setprops[9],
		    setprops[10],
		    setprops[11],50,25,9.9999e+61,
		    Boolean(parseInt(setprops[12])),
		    Boolean(parseInt(setprops[13])),
		    Boolean(parseInt(setprops[14])),
		    setprops[15],
		    Boolean(parseInt(setprops[16])), 
		    setprops[17],
		    null); // onAfterSplitterMove can only be set in Javascript
	}	
			
	var dockprops = eval("TT_DockedTargets");	
	dockedTargets = new Array();
	
	if(dockprops.length !=0)
	{
		//Docked Targets	
		for(i=0;i<dockprops.length ;i++)
		{	
			var autohideTimer = new AutoHideTimer("",false,false,false);
			
			dockedTargets[i]= new Target(
				dockprops[i][0], //targetID    
				dockprops[i][1],  //name
				dockprops[i][2],  //description   				
				Boolean(parseInt(dockprops[i][3])),//autoHide
				dockprops[i][4],  //autoHideIconpath
				parseInt(dockprops[i][5]),//edgeType
				parseInt(dockprops[i][6]),//edgeOrder
				0,//left
				0,//top
				parseInt(dockprops[i][7]),//width
				parseInt(dockprops[i][8]),//height
				0,//actualdockedleft
				0,//actualdockedtop
				0,//actualdockedwidth
				0,//actualdockedheight
				Boolean(parseInt(dockprops[i][9])),//closetarget
				dockprops[i][10],//string graph
				dockprops[i][11],//tab parentID
				dockprops[i][13],//tabParentSelectedID
				Boolean(parseInt(dockprops[i][12])),//autoHideDisplayed
				autohideTimer,				
				"",//pushPullTimer				
				parseInt(dockprops[i][14]),//AutoHideWidth
				parseInt(dockprops[i][15]),//AutohideHeight
				parseInt(dockprops[i][16]),//Collection Pos 
				Boolean(parseInt(dockprops[i][17])),//Is Tab Parent				
				Boolean(parseInt(dockprops[i][18])),//Is Tab Child
				parseInt(dockprops[i][19]),//ImageSetID
				parseInt(dockprops[i][20])//ScrollPos
				);
				
		}
	}
		
	var edgeprops = eval("TT_EdgeTargets");	
	edgeTargets = new Array();	
	//EdgeTargets 	
	if(edgeprops.length  !=0)
	{
		for(i=0;i<edgeprops.length ;i++)
		{			
			edgeTargets[i]= new EdgeTarget(
				edgeprops[i][0],//id,     
				edgeprops[i][1],//name,     
				edgeprops[i][2],//description,     												
				parseInt(edgeprops[i][3]),//edgetype				
				parseInt(edgeprops[i][4]),//left
				parseInt(edgeprops[i][5]),//top
				parseInt(edgeprops[i][6]),//width
				parseInt(edgeprops[i][7]),//height								
				edgeprops[i][8]);	
		}	
	}					
	dockedTargets.sort(ttlayout_sortFunc); 		 			
}	


function ttlayout_SetPostBackField()
{	//Saves the current details for when a server side post back occurs
	var postBackData = new String();
	for(i=0;i<dockedTargets.length;i++)
	{  
		postBackData += dockedTargets[i].targetID +"," +
						dockedTargets[i].name +"," +
						dockedTargets[i].description +"," +
						dockedTargets[i].autoHide +"," +
						dockedTargets[i].autoHideIconPath +"," +
						dockedTargets[i].edgeType +"," +
						dockedTargets[i].edgeOrder +"," +
						dockedTargets[i].width +"," +
						dockedTargets[i].height +"," +
						dockedTargets[i].closeTarget +"," +
						dockedTargets[i].startGraph +"," +
						dockedTargets[i].tabParentId +"," +
						dockedTargets[i].tabParentSelected +"," +
						dockedTargets[i].autoHideDisplayed +"," +
						dockedTargets[i].autoHideWidth +"," +
						dockedTargets[i].autoHideHeight +"," +						
						dockedTargets[i].serverSidePos +"," +
						dockedTargets[i].imageSetID  +","+ 		
						dockedTargets[i].scrollPos  +"," +
						dockedTargets[i].requireUpdate +"|";
	}
	document.getElementById("ReturnTargets").value = postBackData.substr(0,postBackData.length -1); 		
}


function ttlayout_sortFunc(target1,target2) 
{
//Sorts the passed array based on edge Type and Edge Order	

	if (target1.edgeType<target2.edgeType ||		
		target1.edgeType==target2.edgeType&&
		target1.edgeOrder<target2.edgeOrder ) retVal=-1;
	else if (target1.edgeType>target2.edgeType ||		
		target1.edgeType==target2.edgeType&&
		target1.edgeOrder>target2.edgeOrder ) retVal=1;
	else retVal=0;
	return retVal;
}


function ttlayout_SetPinSelectedImage(obj, targetID)
{
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID ==targetID)
			break;
	}  
	if (dockedTargets[i].autoHide)
		obj.src=this.settings.unpinImageSelectedPath;		
	else
		obj.src=this.settings.pinImageSelectedPath;		
}

function ttlayout_SetPinImage(obj, targetID)
{
	return;
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID ==targetID)
			break;
	}  
	if (dockedTargets[i].autoHide)
		obj.src=this.settings.unpinImagePath;		
	else
		obj.src=this.settings.pinImagePath;		

}

function ttlayout_ClearAutoHideTimer(targetID, resizeCancel)
{
	/*
		Clears the autohide timer for the passed target pos. The resize 
		cancel is set when the user is resizing an autohidden object.
		The general mouse move will determine when the resize canel is
		set and determine if the autohide timer, needs reapplying to pin
		the target back into position.
	*/
	var target = ttlayout_GetTargetByID(targetID);	 	
	window.clearTimeout(target.autoHideTimer.timerValue)		
	target.autoHideTimer.timerValue="";
	target.autoHideTimer.timerCancel =  resizeCancel;					
}


function ttlayout_SetAutohideTimer(targetID, interval)
{	
	var target = ttlayout_GetTargetByID(targetID);	 	
	if(target.autoHide)
	{		
		target.autoHideTimer.timerValue=window.setTimeout("ttlayout_HideAutoHideTarget("+ targetID  +",true, true)",interval);			
	}  
}

function ttlayout_GetTargetByID(targetID)
{
	//Determines the position of the passed target pos
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID == targetID)
			return dockedTargets[i];
	} 
}

 
function ttlayout_RemoveTabParent()
{
	//Determine how Many Tabs are currently associated with this target
	var count =new Number(0);
	var tabbed = new Array;
	var targetID;	
	
	if(this.selected.selectedTarget.isTabParent)
	{
		targetID =this.selected.selectedTarget.targetID;  
		this.selected.selectedTarget.isTabParent=false; 
		this.selected.selectedTarget.tabParentSelected="";     
		//Set the next child tab if greater than one to the tab parent		
		for(i=0;i<dockedTargets.length;i++)
		{
			if(dockedTargets[i].tabParentId ==  targetID)
			{
				tabbed[count] = new Array(i,dockedTargets[i].targetID); 
				count+=1;
			}
		}
		if(count >1)
		{
			dockedTargets[tabbed[0][0]].isTabParent=true;  	
			dockedTargets[tabbed[0][0]].isTabChild=false;  	
			dockedTargets[tabbed[0][0]].tabParentSelected="";
			dockedTargets[tabbed[0][0]].tabParentId="";			
			for(i=1;i<tabbed.length;i++)
			{
				dockedTargets[tabbed[i][0]].tabParentId=dockedTargets[tabbed[0][0]].targetID;
			}  
		}
		else
		{
			for(i=0;i<tabbed.length;i++)
			{
				dockedTargets[tabbed[i][0]].isTabChild=false;
				dockedTargets[tabbed[i][0]].tabParentId="";  
			}  
		}
	}
	else if(this.selected.selectedTarget.isTabChild)
	{
	
		targetID =this.selected.selectedTarget.tabParentId;//Determine parent TargertID		
		ttlayout_GetTargetByID(targetID).tabParentSelected="";
		this.selected.selectedTarget.tabParentId="";  
		this.selected.selectedTarget.isTabChild=false;  		
		
		//Check if any children nodes still exist
		for(i=0;i<dockedTargets.length;i++)
		{
			if(dockedTargets[i].tabParentId ==  targetID)			
				count+=1;			
		}
		if(count ==0)//Disable parent as a tab containers
			ttlayout_GetTargetByID(targetID).isTabParent=false;
	}	
}

function ttlayout_LayoutMainDivResize()
{
	//Called when the outer div is resized
	if(settings.mainContextOnly==false)
		ttlayout_SetPageSize(); 
		
	ttlayout_resizeMessage(document.getElementById("progressDialog"),document.getElementById("progressMessage"));
	return true;
}

function ttlayout_LayoutMainDIVLoad()
{
	/*Called by the page load event. The arrays are first created. These are configured
		from the two hidden field objects created for docked and edge targets. The same hidden
		fields are created when the user posts back to the server.*/
	//if(settings.mainContextOnly==false)
		//ttlayout_CreateElements(false);	
	
	//ttlayout_SetPageSize();
	
	
	//Hide the progress message
	ttlayout_updateProgress(false,settings.loadingMessage,false);
	if(window.__doPostBackOld!=null)
		window.__doPostBackInfra=__doPostBack;
	else
		window.__doPostBackTT=window.__doPostBack;
			
	window.__doPostBack=ttlayout_doPostBack;	
	
	
	
	//Add an event listner to the submit button
	settings.thisForm=document.getElementById("progressDialog").parentNode;
	while(settings.thisForm && settings.thisForm.tagName!="FORM")
		settings.thisForm=settings.thisForm.parentNode;
	
	if(settings.thisForm)
	{
		//On sumbit
		if(typeof(igtbl_submit)!="undefined")
		{	
			settings.thisForm.oldOnSubmitInfra =settings.thisForm.onsubmit;		
			settings.thisForm.onsubmit=ttlayout_onSubmit;						
		}
		else
		{
			settings.thisForm.oldOnSubmit=settings.thisForm.onsubmit;
			settings.thisForm.onsubmit=ttlayout_onSubmit;
		}
	}
	try
	{
		var events=eval("TT_AfterDisplayEvents");
		if(events.length !=0)
		{
			for(i=0;i<events.length;i++)
			{
				try
				{
					eval(events[i]);
				}
				catch(e){}
			}
		}
	}
	catch(e)
	{}
}

function ttlayout_doPostBack(eventTarget, eventArgument)
{	
	ttlayout_DoPrePostBackEvents();
	var cancelPostBack =false;
	//BIG FUDGE to stop infragistics posting back on client function
	try
	{
		if(eventArgument.indexOf(':MenuClick') !=-1)
		{
			var id  = eventArgument.substr(0,eventArgument.length-10);
			if(document.getElementById(id) !=null)
			{
				if(document.getElementById(id).children[0].children[0].children[0].href.indexOf('javascript') !=-1)
					cancelPostBack = true;
			}			
			//
		}
	}
	catch(e)
	{}
	if(!cancelPostBack)
	{
		//Remove any visible popups
		ttlayout_closeAllWindows();
		ttlayout_updateProgress(true,settings.loadingMessage, true);
		
		if(window.__doPostBackInfra !=null)
			__doPostBackInfra(eventTarget, eventArgument);
		else
			__doPostBackTT(eventTarget, eventArgument);
	}
}

function ttlayout_DoPrePostBackEvents()
{
	var events=eval("TT_BeforePostRequests");
	if(events.length !=0)
	{
		for(eventVal=0;eventVal<events.length;eventVal++)
		{
			try
			{
				eval(events[eventVal]);
			}
			catch(e){}
		}
	}
}

function ttlayout_onSubmit()
{
	ttlayout_DoPrePostBackEvents();
	ttlayout_updateProgress(true,settings.loadingMessage, true);
		
	if(typeof(igtbl_submit)!="undefined")
		settings.thisForm.oldOnSubmitInfra();
	else		
		settings.thisForm.oldOnSubmit;
}

function ttlayout_RenableAutoHideTimer(x, y)
{
	/*	When the user resizes an autodocked window the window timer is diababled
		This checks that when the user moves the mouse that the timer needs reapplying.
		This function checks if the timer cancel object has been set to true and then reaplys
		the timer accordingly
	*/	
	
	for(i=0;i<dockedTargets.length;i++)
	{		
		if(dockedTargets[i].autoHideDisplayed &&
			dockedTargets[i].autoHideTimer.timerCancel &&
			!dockedTargets[i].autoHideTimer.timerResize &&
			dockedTargets[i].autoHideTimer.timerShownFull)
		{
			ttlayout_CheckTargetTimer(x, y,dockedTargets[i],35);
		}	
	} 
}




function ttlayout_MainContextMouseDown()
{		
	for(l=0;l<dockedTargets.length;l++)
	{
		if(this.settings.simplifyClientSideCode && dockedTargets[l].autoHideDisplayed)
		{
			ttlayout_HideAutoHideTarget(dockedTargets[l].targetID,true,true); 
		}
		else
		{
			if(dockedTargets[l].autoHideDisplayed &&
				dockedTargets[l].autoHideTimer.timerValue =="" )
			{
				//Required in case the target has been forced open through a navigate
				ttlayout_HideAutoHideTarget(dockedTargets[l].targetID,true,true); 
				//dockedTargets[i].autoHideDisplayed=false;  
				//ttlayout_StartPush();   			
				//ttlayout_ShowSelects(); 			
			}   
		}  	
	}  		
}


function ttlayout_ShowAutoHideResizeSplitter(targetID, left,top, width, height, cursor)
{
	/*
	Displays the autohide Resize splitter based on target pos and position values
	passed	
	*/
	splitter				 = document.getElementById("autoHideSplitter" +targetID); 					
	splitter.style.display = "block";  
	splitter.style.height  = height; 
	splitter.style.width	 = width;					
	splitter.style.top	 = top;				
	splitter.style.left	 = left;
	splitter.style.cursor	 = cursor;			
	splitter.style.zIndex=document.getElementById(this.settings.uniqueID+targetID+"DockDiv").style.zIndex+10;		
}

function ttlayout_ValidateResizeValues(target)
{
	if(target.actualdockedHeight <=0)   
		target.actualdockedHeight=50;
	
	if(target.actualdockedWidth <=0)   
		target.actualdockedWidth=50;

	if(target.height <=0)   
		target.height=50;
		
	if(target.width <=0)   
		target.width=50;
}

function ttlayout_ValidateAdjacentAutohide(arrayPos, compareEdge)
{
	var adjustValue = new Number(0);
	
	for(k=0;k<dockedTargets.length;k++)
	{
		if(dockedTargets[k].autoHideDisplayed 
		&& dockedTargets[k].autoHideTimer.timerValue=="" &&
		arrayPos!=k && dockedTargets[k].edgeType==compareEdge)
		{
			var tempObj =document.getElementById(this.settings.uniqueID+dockedTargets[k].targetID+"DockDiv").style;												
			if(compareEdge ==en_topEdge || compareEdge == en_bottomEdge) 
			{
				if(dockedTargets[k].autoHide &&
					dockedTargets[k].autoHideDisplayed)
					adjustValue =dockedTargets[k].autoHideHeight;
				else
				{				
					if(tempObj.height =="0px")						
						adjustValue = dockedTargets[k].height;						
					else
						adjustValue = parseInt(tempObj.height);													
				}
				break;
			}
			else
			{
				if(dockedTargets[k].autoHide &&
					dockedTargets[k].autoHideDisplayed)
					adjustValue =dockedTargets[k].autoHideWidth;
				else
				{
					if(tempObj.width =="0px")						
						adjustValue = dockedTargets[k].width;						
					else
						adjustValue = parseInt(tempObj.width);													
				}	
				break;
			}
		}							
	}	
	return adjustValue;
}

function ttlayout_TargetDivMouseOut(targetID, interval)
{
	if(page.isNS)
	{		
		var x = this.nsSettings.nsWindowX;
		var y = this.nsSettings.nsWindowY;		
	}
	else
	{ 	
		var x = window.event.x;
		var y = window.event.y;
	}
	
	x -= (parseInt(this.page.outerDockDiv.style.left) +parseInt(this.page.innerDockDiv.style.left));
	y -= (parseInt(this.page.outerDockDiv.style.top) +parseInt(this.page.innerDockDiv.style.top));	  
	ttlayout_CheckTargetTimer(x,y, ttlayout_GetTargetByID(targetID),0);
}


function ttlayout_CheckTargetTimer(x, y, target, adjustment)
{
	switch(target.edgeType)
	{
		case en_leftEdge:
			if(x>((parseInt(target.targetDiv.style.left)+adjustment)+ parseInt(target.targetDiv.style.width)))
			{
				target.autoHideTimer.timerCancel=false;												
				ttlayout_SetAutohideTimer(target.targetID,1000);
				//ttlayout_HideAutoHideTarget(dockedTargets[pos].targetID ,true, true);						
			}
			break;
		case en_rightEdge:										
			if(x<(parseInt(target.targetDiv.style.left)-adjustment))
			{
				target.autoHideTimer.timerCancel=false;						
				ttlayout_SetAutohideTimer(target.targetID,1000);
				//ttlayout_HideAutoHideTarget(dockedTargets[pos].targetID ,true, true);						
			}
			break;
		case en_topEdge:
			if(y>((parseInt(target.targetDiv.style.top)+adjustment)+ parseInt(target.targetDiv.style.height)))
			{
				target.autoHideTimer.timerCancel=false;						
				ttlayout_SetAutohideTimer(target.targetID,1000);
				//ttlayout_HideAutoHideTarget(dockedTargets[pos].targetID ,true, true);						
			}
			break;
		case en_bottomEdge:
			if(y<(parseInt(target.targetDiv.style.top)-adjustment))
			{
				target.autoHideTimer.timerCancel=false;						
				ttlayout_SetAutohideTimer(target.targetID,1000);
				//ttlayout_HideAutoHideTarget(dockedTargets[pos].targetID ,true, true);						
			}
			break;
	}
}

function ttlayout_TabMouseOver(tab, owner, child)
{		
	if(tab.className=="dtab")
		tab.className="dtabhover";
}

function ttlayout_TabMouseOut(tab, owner, child)
{		
	if(tab.className=="dtabhover")
		tab.className="dtab";
}

function ttlayout_TabSelected(owner, tab, selectTarget)
{	
	var childTab;
	owner =ttlayout_GetTargetByID(owner);
	tab =ttlayout_GetTargetByID(tab);
	
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].tabParentId ==owner.targetID)	
		{	    
			dockedTargets[i].targetDiv.style.display="none";			
			childTab =document.getElementById("childTab"+dockedTargets[i].targetID);		
			childTab.className="dtab";								
		}
	}  
	
	if (owner !=tab)
	{
	
		//owner settings
		owner.targetDiv.style.display="none";		
		childTab =document.getElementById("childTab"+owner.targetID);				
		document.getElementById("childTab"+owner.targetID).className="dtab";			
		owner.tabParentSelected=tab.targetID;
		
		//tab settings				
		tab.targetDiv.style.display="block";		
		tab.targetDiv.style.left =owner.targetDiv.style.left;
		tab.targetDiv.style.top =owner.targetDiv.style.top;
		tab.targetDiv.style.width =owner.targetDiv.style.width;
		tab.targetDiv.style.height =parseInt(owner.targetDiv.style.height)-23;						
		tab.targetDiv.style.zIndex=owner.targetDiv.style.zIndex; 
		
		ttlayout_SetTargetInnerObjects(tab,0);		
		childTab =document.getElementById("childTab"+tab.targetID);
		childTab.className="dtabsel";												
	}
	else
	{
		owner.tabParentSelected=tab.targetID;
		childTab=document.getElementById("childTab"+owner.targetID);
		childTab.className="dtabsel";				
		owner.targetDiv.style.display="block";						
	}	
	
	if(selectTarget)
	{		
		if(tab.isTabParent)
			this.selected.selectedTabDiv= tab.tabDiv;
		else
			this.selected.selectedTabDiv= owner.tabDiv;
		ttlayout_SelectTarget(tab.targetID, true); 
	} 	
}

function ttlayout_SetTargetInnerObjects(target,adjust)
{			
	target.targetInnerDiv.style.width = parseInt(target.targetDiv.style.width); 	
	if(parseInt(target.targetDiv.style.height)-2.5 >0)						
		target.targetInnerDiv.style.height =parseInt(target.targetDiv.style.height) -2.5 -adjust; 						
	
	if(parseInt(target.targetInnerDiv.style.width)-2.5 >1)
		target.controlDiv.style.width =parseInt(target.targetInnerDiv.style.width);									

	if(parseInt(target.targetInnerDiv.style.height)-(parseInt(target.targetHeaderDiv.style.height)+4) >1)
		target.controlDiv.style.height =parseInt(target.targetInnerDiv.style.height)-(parseInt(target.targetHeaderDiv.style.height)+4);	
}



function ttlayout_DisplayAutoHideTarget(target)
{
	
	target.targetDiv.style.zIndex = 50;
	target.autoHideDiv.src =this.settings.unpinImagePath;					
	//document.getElementById(this.settings.uniqueID+target.targetID+"InnerDiv").style.border = "2px";
	var performhideSelects =false;
	adjustValue=0;
	switch (target.edgeType)
	{
		case en_leftEdge:							
			target.targetDiv.style.top = "0px";										
			if(target.autoHideWidth==0)
			{						
				target.targetDiv.style.width = target.width+"px";	
				target.autoHideWidth = target.width;  					
			}
			else	
				target.targetDiv.style.width = target.autoHideWidth;  
				
			if(parseInt(target.targetDiv.style.left) >=0)
				target.targetDiv.style.left = (0-(target.autoHideWidth+10))+"px";
				
			target.targetDiv.style.height = this.page.innerDockDiv.style.height;																
			if(target.autoHideDisplayed && target.autoHideTimer.timerValue=="" )
			{
				target.showSelects=true;
				target.targetDiv.style.display="block";
				target.targetDiv.style.left=0;
				adjustValue=ttlayout_ValidateAdjacentAutohide(i,en_bottomEdge);  
				if(adjustValue!=0)
					target.targetDiv.style.height = parseInt(target.targetDiv.style.height) -adjustValue;
				
				cursor ="col-resize";
				if(page.isNS)
						cursor="e-resize";					
				ttlayout_ShowAutoHideResizeSplitter(target.targetID ,
					parseInt(target.targetDiv.style.left) +parseInt(target.targetDiv.style.width),parseInt(target.targetDiv.style.top),
						this.settings.splitterSize,parseInt(target.targetDiv.style.height),cursor);
				performhideSelects=true;							
			}												
			break;
		case en_rightEdge:					
			target.targetDiv.style.top = "0px";						
			if(target.autoHideWidth==0)		
			{
				target.targetDiv.style.width = target.width+"px";
				target.autoHideWidth=  target.width;
			}
			else
				target.targetDiv.style.width = target.autoHideWidth;  
				
			if(parseInt(target.targetDiv.style.left) < parseInt(this.page.innerDockDiv.style.width))  	
				target.targetDiv.style.left = this.page.innerDockDiv.style.width; 
				
			target.targetDiv.style.height = this.page.innerDockDiv.style.height;										
			if(target.autoHideDisplayed && target.autoHideTimer.timerValue=="" )
			{
				target.showSelects=true;
				target.targetDiv.style.display="block";
				target.targetDiv.style.left= parseInt(this.page.innerDockDiv.style.width) -target.width;							
				adjustValue=ttlayout_ValidateAdjacentAutohide(i,en_topEdge);  
				if(adjustValue!=0)
				{
					target.targetDiv.style.height = parseInt(target.targetDiv.style.height) -adjustValue;
					target.targetDiv.style.top = parseInt(target.targetDiv.style.top) +adjustValue;
				}	
				
				cursor ="col-resize";
				if(page.isNS)
						cursor="e-resize";									 							 							
				ttlayout_ShowAutoHideResizeSplitter(target.targetID,
						parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top),
						this.settings.splitterSize,parseInt(target.targetDiv.style.height),cursor); 	
				performhideSelects=true;									
			}
			break;
		case en_topEdge:						
			target.targetDiv.style.left = "0px";
			target.targetDiv.style.width = this.page.innerDockDiv.style.width;
			if(target.autoHideHeight  ==0)
			{ 			
				target.targetDiv.style.height = target.height+"px";										
				target.autoHideHeight=target.height; 
			}
			else
				target.targetDiv.style.height = target.autoHideHeight;										
			
			if(parseInt(target.targetDiv.style.top) >=0)  	
				target.targetDiv.style.top = (0-(target.autoHideHeight+10))+"px";						
				
			if(target.autoHideDisplayed && target.autoHideTimer.timerValue=="" )
			{
				target.showSelects=true;
				target.targetDiv.style.display="block";
				target.targetDiv.style.top=0;							
				adjustValue=ttlayout_ValidateAdjacentAutohide(i,en_leftEdge);  				
				if(adjustValue!=0)
				{
					target.targetDiv.style.width = parseInt(target.targetDiv.style.width) -adjustValue;
					target.targetDiv.style.left = parseInt(target.targetDiv.style.left) +adjustValue;
				}								
				adjustValue=ttlayout_ValidateAdjacentAutohide(i,en_rightEdge);  				
				//if(adjustValue!=0)				
					//target.targetDiv.style.width = parseInt(target.targetDiv.style.width) -adjustValue;
				
				cursor ="row-resize";
				if(page.isNS)
						cursor="s-resize";	
				ttlayout_ShowAutoHideResizeSplitter(target.targetID,
					parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top) + parseInt(target.targetDiv.style.height),
					parseInt(target.targetDiv.style.width),this.settings.splitterSize,cursor); 	
				performhideSelects=true;
			}						
				
			break;									
		case en_bottomEdge:								
			target.targetDiv.style.left = "0px";
			target.targetDiv.style.width = this.page.innerDockDiv.style.width;
			if(target.autoHideHeight  ==0)
			{
				target.targetDiv.style.height = target.height+"px";
				target.autoHideHeight=target.height; 
			}
			else
				target.targetDiv.style.height = target.autoHideHeight;										
			
			if(parseInt(target.targetDiv.style.top) < parseInt(this.page.innerDockDiv.style.height))  	
				target.targetDiv.style.top = this.page.innerDockDiv.style.height;
				
			if(target.autoHideDisplayed)  												
			{
				target.showSelects=true;
				target.targetDiv.style.top= parseInt(this.page.innerDockDiv.style.height) -target.height;		
				target.targetDiv.style.display="block";								
				adjustValue=ttlayout_ValidateAdjacentAutohide(i,en_rightEdge);  
				if(adjustValue!=0)
					target.targetDiv.style.width = parseInt(target.targetDiv.style.width) -adjustValue;
				
				cursor ="row-resize";
				if(page.isNS)
						cursor="s-resize";									 	
				ttlayout_ShowAutoHideResizeSplitter(target.targetID ,
					parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top),
					parseInt(target.targetDiv.style.width),this.settings.splitterSize,cursor);
				performhideSelects=true;								 	
			}
	}			
	ttlayout_SetTargetInnerObjects(target,0);
	return performhideSelects;				
}


function ttlayout_DisplayNormalTarget(target)
{	
	if(!target.isTabChild)
	{  
		//Display Normal docked targets					
		target.targetDiv.style.top	= target.actualdockedTop + "px"; 
		target.targetDiv.style.left	= target.actualdockedLeft + "px";  
		target.targetDiv.style.width	= target.actualdockedWidth+ "px";
		target.targetDiv.style.height = target.actualdockedHeight +"px"; 								
			
		//Correct for splitters
		switch (target.edgeType)
		{
			case en_leftEdge:
				target.targetDiv.style.width =(parseInt(target.targetDiv.style.width) -(3+this.settings.splitterSize)) +"px";					
				break;
			case en_topEdge:
				target.targetDiv.style.height =(parseInt(target.targetDiv.style.height) -this.settings.splitterSize) +"px";	
				break;							
			case en_rightEdge:						
				target.targetDiv.style.width=(parseInt(target.targetDiv.style.width) -(this.settings.splitterSize+2)) +"px";								
				target.targetDiv.style.left=(parseInt(target.targetDiv.style.left) +(this.settings.splitterSize-1)) +"px";	
				break;							
			case en_bottomEdge:						
				target.targetDiv.style.height=parseInt(target.targetDiv.style.height) -2;
				if(page.isNS)																		
					target.targetDiv.style.top=parseInt(target.targetDiv.style.top)+2;
		}
		
		for(i=ttlayout_ArrayPos(target.targetID)+1;i<dockedTargets.length;i++)
		{
			if(dockedTargets[i].edgeType == target.edgeType &&
				!dockedTargets[i].autoHide && !dockedTargets[i].isTabChild)
			{  
					ttlayout_AdjustTargetForSplitter(target);	
					break;
			}
		}	
			
		var adjust = 0;				
		if(target.isTabParent)
		{		
			//ttlayout_AdjustTargetForSplitter(pos,target.targetDiv.style);									
			var tabhtml;
			target.tabDiv.className = "dtabparent";
			target.tabDiv.style.display = "block";
			target.tabDiv.style.left = parseInt(target.targetDiv.style.left)+2;
			target.tabDiv.style.width = target.targetDiv.style.width;
			target.tabDiv.style.top = parseInt(target.targetDiv.style.top) +(parseInt(target.targetDiv.style.height)- this.settings.tabHeightValue); 
			target.tabDiv.style.zIndex=10;
			tabhtml = "<table  border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
			tabhtml += "<td id=childTab" + target.targetID+" onmouseDown=ttlayout_TabSelected(" + target.targetID +","+ target.targetID+",true) onMouseUp=ttlayout_UnselectTarget()  onmouseover=ttlayout_TabMouseOver(this," + target.targetID +","+ target.targetID +") "+
			"onmouseout=ttlayout_TabMouseOut(this," + target.targetID +","+ target.targetID +") class=\"dtabsel\">" + target.description +"</td>";
			
			for(j=0;j<dockedTargets.length;j++)
			{
				if(dockedTargets[j].tabParentId ==target.targetID)
				{
					tabhtml += "<td id=childTab" + dockedTargets[j].targetID+" onmouseDown=ttlayout_TabSelected(" + target.targetID +","+ dockedTargets[j].targetID+",true) onMouseUp=ttlayout_UnselectTarget()  onmouseover=ttlayout_TabMouseOver(this," + target.targetID +","+ target.targetID +") "+
						"onmouseout=ttlayout_TabMouseOut(this," + target.targetID +","+ dockedTargets[j].targetID +") class=\"dtab\">" + dockedTargets[j].description +"</td>";
				} 
			}  
			tabhtml +="</tr></table>";				
			target.tabDiv.innerHTML=tabhtml;											
			adjust = settings.tabHeightValue;
			
			if(target.tabParentSelected  !="")						
				ttlayout_TabSelected(target.targetID,target.tabParentSelected,false); 								
			else  
				ttlayout_TabSelected(target.targetID,target.targetID,false); 
		}	
		else	
		{		
			target.tabDiv.style.display = "none";							
			target.tabDiv.innerHTML="";
		}
		ttlayout_SetTargetInnerObjects(target, adjust);				
	}
	else
	{	
		if(target.tabDiv.style.display !="none")
		{
			target.tabDiv.style.display="none";
			target.tabDiv.innerHTML="";
		}	
		if (target.autoHide)			
			target.autoHideDiv.src =this.settings.unpinImagePath;
	}	
	if(target.scrollPos !=0)
			target.controlDiv.scrollTop =target.scrollPos;			
}

function ttlayout_CreateAutoHideElement(target, showDescription, autohideHTML)
{			
	var AutoHideDiv;
	if(this.settings.autoHideRequiresClick)
		AutoHideDiv= "<DIV class=\"tpinheader\" id="+target.targetID+"AutoHideDiv onClick=\"ttlayout_ShowAutoHideTarget("+target.targetID+")\" style=\"cursor:default;overflow:hidden";
	else
		AutoHideDiv= "<DIV class=\"tpinheader\" id="+target.targetID+"AutoHideDiv onMouseOver=\"ttlayout_ShowAutoHideTarget("+target.targetID+")\" style=\"cursor:default;overflow:hidden";
		
	var description ="";	
	var width="20px";
	if(showDescription)
	{
		description =target.description;
		//height ="height:100px;"
		//width ="width:100px;"
	}	
	
	if(target.edgeType ==en_topEdge ||
		target.edgeType ==en_bottomEdge)
	{
		if(	autohideHTML =="")
		{
			autohideHTML="<table height=100%  border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>";
		}								
		autohideHTML+="<TD>"+ AutoHideDiv+";height:20px;\">"+ ttlayout_GetImagePath(target)+description+"</DIV></TD>";
		//autohideHTML += AutoHideDiv+";height:20px;\">"+ ttlayout_GetImagePath(target)+description+"</DIV>";
	}
	else
	{
		if (this.page.isNS)					
		{autohideHTML += AutoHideDiv+";width:20px\">"+ ttlayout_GetImagePath(target) +ttlayout_NSVerticalText(description)+"</DIV>&nbsp;";	}
		else
		{autohideHTML += AutoHideDiv+";width:100%;LAYOUT-FLOW: vertical-ideographic;\">"+ ttlayout_GetImagePath(target)+description+"</DIV>";}					
	}
	return autohideHTML;
}

function ttlayout_GetImagePath(target)
{

	if(target.autoHideIconPath !="")					
	{
		return "<IMG src='"+ target.autoHideIconPath +"'>&nbsp;&nbsp";		
	}
	else	
		return "<IMG src='"+ this.settings.ipImagePath +"' height=16px width=16px>";	
}

function ttlayout_AdjustTargetForSplitter(target)
{
	//Adjust Height or width
	if(target.edgeType==en_leftEdge ||
		target.edgeType ==en_rightEdge)				
		target.targetDiv.style.height =parseInt(target.targetDiv.style.height) -(this.settings.splitterSize+2);				
	else				
		target.targetDiv.style.width =parseInt(target.targetDiv.style.width) -(this.settings.splitterSize+3);				   
	ttlayout_ShowDockedSplitter(target); 				  
}

function ttlayout_CorrectEdgeOrders()
{
	var edgeOrder=0;	
	var edgeType = new Number();
	var prevEdgeType = new Number(-1);
	
	for(j=0;j<dockedTargets.length;j++)  
	{
		edgeType = dockedTargets[j].edgeType;//determine current edge type		
		if(edgeType != prevEdgeType)		
			edgeOrder=0;
		
		dockedTargets[j].edgeOrder= edgeOrder;
		prevEdgeType=edgeType
		edgeOrder++;
	}
}

function ttlayout_HideSelects()
{
	/*Hides all select objects within the page, so the user can drag and drop the
	relevant target obejcts*/
	for(var i=0;i<document.getElementsByTagName("select").length;i++)
	{
		document.getElementsByTagName("select").item(i).style.visibility = "hidden";
	}	
}

function ttlayout_ShowSelects()
{
	/*	Makes the select objects visible, when the user has completed a drag and
		drop task*/
	for(var i=0;i<document.getElementsByTagName("select").length;i++)
	{
		if(document.getElementsByTagName("select").item(i).id.indexOf("Rs") ==-1)
			document.getElementsByTagName("select").item(i).style.visibility = "";		
	}	
}

function ttlayout_hideAutoHideSimpleMode(targetID)
{
	var target = ttlayout_GetTargetByID(targetID); 
	switch (dockedTargets[i].edgeType)
	{
			case en_leftEdge:			
				target.targetDiv.style.left= (-10) -parseInt(target.targetDiv.style.width) ;				
				clearInterval(target.pushPullTimer);	
				target.pushPullTimer="";				
				ttlayout_SetPostBackField(); 				
				break;
			case en_rightEdge:
				target.targetDiv.style.left= parseInt(this.page.innerDockDiv.style.width) +10;								
				clearInterval(target.pushPullTimer);	
				target.pushPullTimer="";				
				ttlayout_SetPostBackField(); 					
				break;
			case en_topEdge:
				target.targetDiv.style.top= (-10) -parseInt(target.targetDiv.style.height) ;								
				clearInterval(target.pushPullTimer);	
				target.pushPullTimer="";				
				ttlayout_SetPostBackField(); 					
				break;
			case en_bottomEdge:
				target.targetDiv.style.top= parseInt(this.page.innerDockDiv.style.height) +10;				
				clearInterval(target.pushPullTimer);	
				target.pushPullTimer="";				
				ttlayout_SetPostBackField(); 					
				break;
	}
}

function ttlayout_showAutoHideSimpleMode(targetID)
{	
	var target = ttlayout_GetTargetByID(targetID);	 
	target.targetDiv.style.display="block";
	var cursor;
	
	switch (target.edgeType)
	{
			case en_leftEdge:				 				
				target.targetDiv.style.left=0;
				clearInterval(target.pushPullTimer);
				cursor ="col-resize";
				if(page.isNS)
					cursor ="e-resize"; 					
				ttlayout_ShowAutoHideResizeSplitter(targetID,
					parseInt(target.targetDiv.style.left) +parseInt(target.targetDiv.style.width),parseInt(target.targetDiv.style.top)+1,
					this.settings.splitterSize,parseInt(target.targetDiv.style.height)-2,cursor); 																					
				
				target.autoHideTimer.timerShownFull=true;
				target.pushPullTimer="";	
				ttlayout_SetPostBackField();
				break;
			case en_rightEdge:
				target.targetDiv.style.left=parseInt(this.page.innerDockDiv.style.width) -parseInt(target.targetDiv.style.width);				 				
				clearInterval(target.pushPullTimer);					
				cursor ="col-resize";
				if(page.isNS)
					cursor ="e-resize"; 					
					
				ttlayout_ShowAutoHideResizeSplitter(targetID,
					parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top),
					this.settings.splitterSize,parseInt(target.targetDiv.style.height),cursor); 	
																			
				target.autoHideTimer.timerShownFull=true;
				target.pushPullTimer="";
				ttlayout_SetPostBackField(); 				
				break;
			case en_topEdge:
				target.targetDiv.style.top=0 				
				clearInterval(target.pushPullTimer);	
				cursor ="row-resize";
				if(page.isNS)
					cursor ="s-resize"; 	
				ttlayout_ShowAutoHideResizeSplitter(targetID,
					parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top) + parseInt(target.targetDiv.style.height),
					parseInt(target.targetDiv.style.width),this.settings.splitterSize,cursor); 	
																			
					target.autoHideTimer.timerShownFull=true;
					target.pushPullTimer="";						
					ttlayout_SetPostBackField(); 				
				break;
			case en_bottomEdge:
				target.targetDiv.style.top=parseInt(this.page.innerDockDiv.style.height)-parseInt(target.targetDiv.style.height);					 				
				target.targetDiv.style.top=parseInt(target.targetDiv.style.top)+3;
				clearInterval(target.pushPullTimer);	
				cursor ="row-resize";
				if(page.isNS)
					cursor ="s-resize"; 	
					
				ttlayout_ShowAutoHideResizeSplitter(targetID,
					parseInt(target.targetDiv.style.left),parseInt(target.targetDiv.style.top),
					parseInt(target.targetDiv.style.width),this.settings.splitterSize,cursor); 																					
					target.autoHideTimer.timerShownFull=true;
					target.pushPullTimer="";					
				ttlayout_SetPostBackField(); 				
				break;
	}
}

function ttlayout_Disableselect(e)
{
	return false 	
}

function ttlayout_ReEnable()
{
	return true
}

function Target(targetID, name,description,autoHide,autoHideIconPath,
	edgeType,edgeOrder,left,top,width,height,actualDockedLeft,
	actualDockedTop,actualDockedWidth,actualDockedHeight, closeTarget,startGraph,
	tabParentId, tabParentSelected,autoHideDisplayed,autoHideTimer,pushPullTimer, autoHideWidth,
	autoHideHeight,serverSidePos,isTabParent,isTabChild, imageSetID, scrollPos) 
{
	this.targetID =targetID;
	this.name =name;
	this.description=description;
	this.autoHide=autoHide;
	this.autoHideIconPath=autoHideIconPath;
	this.edgeType =edgeType;
	this.edgeOrder = edgeOrder;
	this.left =left;
	this.top =top;
	this.width=width;
	this.height =height;
	this.actualDockedLeft=actualDockedLeft;
	this.actualDockedTop =actualDockedTop;
	this.actualDockedWidth =actualDockedWidth;
	this.actualDockedHeight=actualDockedHeight;
	this.closeTarget=closeTarget;
	this.startGraph =startGraph;
	this.tabParentId =tabParentId;
	this.tabParentSelected=tabParentSelected;
	this.autoHideDisplayed=autoHideDisplayed;
	this.autoHideTimer =autoHideTimer;
	this.pushPullTimer =pushPullTimer;
	this.autoHideWidth=autoHideWidth;
	this.autoHideHeight=autoHideHeight;
	this.serverSidePos =serverSidePos;
	this.isTabParent=isTabParent;
	this.isTabChild=isTabChild;	
	this.targetDiv=document.getElementById(settings.uniqueID+targetID+"DockDiv");
	this.autoHideDiv =document.getElementById(settings.uniqueID+"autoHide"+targetID);
	this.autoDockDiv =document.getElementById(settings.uniqueID+"autoDock"+targetID);
	this.targetInnerDiv =document.getElementById(settings.uniqueID+targetID+"InnerDiv");		
	this.targetHeaderDiv =document.getElementById(settings.uniqueID+"targetHeaderCell" +targetID+"a");
	this.tabDiv =document.getElementById(settings.uniqueID +"tab"+targetID);
	this.controlDiv=document.getElementById(settings.uniqueID+"Control" +targetID +"Div");
	this.splitterHDiv =document.getElementById("splitterH" +targetID);
	this.splitterVDiv =document.getElementById("splitterV" +targetID);
	this.imageSetID=imageSetID;
	this.showSelects=false;
	this.scrollPos =scrollPos;
	this.requireUpdate=false;
}

function EdgeTarget(targetID, name,description,edgeType,left,top, width,
	height,startGraph)
{
	this.targetID = targetID;
	this.name =name;
	this.description= description;
	this.edgeType = edgeType;
	this.left = left;
	this.top = top;
	this.width =width;
	this.height=height;
	this.startGraph=startGraph;
}

function AutoHideTimer(timerValue,timerCancel,
			timerShownFull,timerResize)
{
	this.timerValue=timerValue;
	this.timerCancel=timerCancel;
	this.timerShownFull =timerShownFull;
	this.timerResize =timerResize;
}

function Selected(selectedSplitterDIV, selectedTargetDiv, selectedTarget, selectedSplitter,
	dragDisplayed)
{
	this.selectedSplitterDIV =selectedSplitterDIV;
	this.selectedTargetDiv =selectedTargetDiv;
	this.selectedTarget=selectedTarget;
	this.selectedSplitter =selectedSplitter;
	this.dragDisplayed =dragDisplayed;
	this.tabSelected=false;
	this.selectedTabDiv="";
}

function Settings(splitterSize, dockBoundary, maxDockDragWidth, maxDockDragHeight,
	uniqueID, dragTargetWidth, dragTargetHeight, pinImagePath, pinImageSelectedPath,
	unpinImagePath, unpinImageSelectedPath, ipImagePath, pushPullValue,
	tabHeightValue, bigNumber, mainContextOnly, simplifyClientSideCode,
	autoHideRequiresClick, loadingMessage, pageBlur, indicatorPath, onAfterSplitterMove)
{
	this.splitterSize=splitterSize;
	this.dockBoundary=dockBoundary;
	this.maxDockDragWidth=maxDockDragWidth;
	this.maxDockDragHeight=maxDockDragHeight;
	this.uniqueID=uniqueID;
	this.dragTargetWidth=dragTargetWidth;
	this.dragTargetHeight=dragTargetHeight;
	this.pinImagePath=pinImagePath;
	this.pinImageSelectedPath=pinImageSelectedPath;
	this.unpinImagePath=unpinImagePath;
	this.unpinImageSelectedPath=unpinImageSelectedPath;
	this.ipImagePath=ipImagePath;	
	this.pushPullValue =pushPullValue;
	this.tabHeightValue =tabHeightValue;
	this.bigNumber=bigNumber;
	this.mainContextOnly=mainContextOnly;
	this.simplifyClientSideCode=simplifyClientSideCode;
	this.autoHideRequiresClick =autoHideRequiresClick;
	this.loadingMessage =loadingMessage;
	this.form;
	this.pageBlur=pageBlur;
	this.indicatorPath =indicatorPath;
	this.onAfterSplitterMove = onAfterSplitterMove;
}

function NetscapeSettings(nsWindowX,nsWindowY,nsMouseButton)
{
	this.nsSettings =nsWindowX;
	this.nsSettings =nsWindowY;
	this.nsMouseButton=nsMouseButton;
}

function Positions(currentX,currentY,offsetX,offsetY )
{
	this.currentX=currentX;
	this.currentY=currentY;
	this.offsetX=offsetX;
	this.offsetY=offsetY;
}

function DockMiniumuns(leftEdge, rightEdge,topEdge, bottomEdge)
{
	this.leftEdge=leftEdge;
	this.rightEdge=rightEdge;
	this.topEdge=topEdge;
	this.bottomEdge=bottomEdge;
}

function Page(dragDiv,dockdragDiv,splitterDiv,outerDockDiv,innerDockDiv)
{
	this.dragDiv=dragDiv;
	this.dockdragDiv=dockdragDiv;
	this.splitterDiv=splitterDiv;
	this.outerDockDiv=outerDockDiv;			
	this.innerDockDiv=innerDockDiv;
	this.isIE	=(document.all?true:false);	
	this.isNS = ((navigator.appName == 'Netscape') && (parseFloat(navigator.appVersion)>= 5));		
	this.isDragging=false;		
}

function ttlayout_SelectedArrayPos()
{	
	return ttlayout_ArrayPos(selected.selectedTarget.targetID);
}	

function ttlayout_ArrayPos(targetID)
{
	for(i=0;i<dockedTargets.length;i++)
	{
		if(dockedTargets[i].targetID ==targetID)
		{
			return i;
		}	
	}
}	

function ttlayout_updateProgress(p_show, p_message, p_showBlur)
// show/ hide "please wait" dialog
{		
	if(displayLoadingDiv)
	{
		var m_progress = document.getElementById("progressDialog");				
		var m_progressMessage = document.getElementById("progressMessage");	
			
		var html= "<table cellspacing =0 cellpadding =0 class=\"loadingBorder\" ><tr>";
		
		html +="<td class=\"loadingMessage\" ><img src="+ this.settings.indicatorPath +" /> </td>"
		html +="<td class=\"loadingMessage w100\" nowrap>" + p_message +""
		html +"</td></tr></table>";
		m_progressMessage.innerHTML=html;		
		ttlayout_resizeMessage(m_progress,m_progressMessage);	
		if (p_show)
		{	
			m_progress.style.visibility = "visible";		
			if(p_showBlur)
			{
				var m_prevent = document.getElementById("prevent");				
				m_prevent.style.visibility = "visible";
				m_prevent.style.left =0;
				m_prevent.style.top =0;
				m_prevent.style.width =document.body.clientWidth;
				m_prevent.style.height =document.body.clientHeight;
				if(settings.pageBlur){
					m_prevent.style.filter="alpha(opacity=30)";
					m_prevent.style.opacity="0.3";
				}else{
					m_prevent.style.filter="alpha(opacity=0)";
					m_prevent.style.opacity="0";
				}
			} 
		}
		else
		{
			var m_prevent = document.getElementById("prevent");				
			m_prevent.style.visibility = "hidden";
			m_progress.style.visibility = "hidden";
			//ttlayout_ShowSelects();
		}	
	}
	//displayLoadingDiv = true;	
}
	
function ttlayout_resizeMessage(p_progress, p_progressMessage)
{
	if(p_progressMessage.style.visibility!="hidden")
	{
		var m_left = document.body.clientWidth -p_progressMessage.offsetWidth;
		var m_top = document.body.clientHeight -p_progressMessage.offsetHeight;//((document.body.offsetHeight-20)/2) - (p_progressMessage.offsetHeight/2)-50;			
		m_top -=1;
		p_progress.style.left =1;		
		p_progress.style.top =m_top;
	}
}

function  ttlayout_PopupInfo()
{
	this.strContext = "Default";		// used for the window array
	this.strDisplayPage = "";			// sent on the QUERYSTRING
	this.strControlPage = "";			// sent on the QUERYSTRING
	this.lngHeight = 500;				// used for window display (538 UFI)
	this.lngWidth = 600;				// used for window display (724 UFI)
	this.boolMaximise = false;			// used for window display
	this.boolResizable = true;			// used for window display
	this.strTitle = "EBS4 Popup";		// sent on the QUERYSTRING
	this.boolFrameset = false;			// sent on the QUERYSTRING
	this.boolToolbar = false;			// used for window display
	this.boolStatusbar = false;			// used for window display
	this.boolMenubar = false;			// used for window display
	this.boolCentre = true;				// used for window display
	this.lngPosX = 0;					// used for window display
	this.lngPosY = 0;					// used for window display
	this.bolQueryString = true;			// pass on the data on the query string	
	this.lngSessionId = 0;				// sent on the QUERYSTRING
	this.boolScroll = true;				// used for window display
	this.boolLocation = false;			// used for window display
	this.sessionId ="";					
	this.pageId="";
	this.showModalDialog = false;
	this.argumentsStandardID = "";
	this.additionalQueryString = "";
}

function ttlayout_WindowInfo()
{
	this.strName = "";
	this.handleWindow = null;
}

function PopupParameters()
{
	this.Context = null;
	this.DataIn = null;
	this.DataOut = null;
}

function PopupReturnData()
{
	this.Data = null;
}

function ttlayout_openPopup(hPopupInfo, dataOut, dataIn)
{
	var strFeatures;
	var strQueryString;
	var strArgument;
	var lngIndex;
	var lngPosn;
	var Win;
	var WinX = ((screen.availWidth - hPopupInfo.lngWidth) / 2);
	var WinY = ((screen.availHeight - hPopupInfo.lngHeight) / 2);
						
	// check default data
	if(hPopupInfo.strContext.length == 0)
	{
		alert("You must provide a name for the popup window!");
		return false;
	}
			
	if(hPopupInfo.strDisplayPage.length == 0)
	{
		alert("You must provide the full page url to display as the popup content!");
		return false;
	}
				
	// check if maximise is set to true
	if(hPopupInfo.boolMaximise == true)
	{
		strFeatures = "screenX=0,screenY=-1,Height=" + screen.availHeight + ",Width=" + screen.availWidth;
	}
	else
	{
	    if (hPopupInfo.showModalDialog)
	    {
            strFeatures = "dialogHeight: " + hPopupInfo.lngHeight + "px; ";
            strFeatures += "dialogWidth: " + hPopupInfo.lngWidth + "px;";  
            strFeatures += "dialogTop: " + WinY + "px;";
            strFeatures += "dialogLeft: " + WinX + "px;";
        }
		else
		{
		    strFeatures = "height=" + hPopupInfo.lngHeight + ",width=" + hPopupInfo.lngWidth;
		}
	}

	// amend additional window features to the features string
	strFeatures += ",scrollbars=" + new Number(hPopupInfo.boolScroll);
	strFeatures += ",resizable=" + new Number(hPopupInfo.boolResizable);
	strFeatures += ",alwaysRaises=yes";
	strFeatures += ",toolbar=" + new Number(hPopupInfo.boolToolbar);
	strFeatures += ",statusbar=" + new Number(hPopupInfo.boolStatusbar);
	strFeatures += ",menubar=" + new Number(hPopupInfo.boolMenubar);
	strFeatures += ",location=" + new Number(hPopupInfo.boolLocation);
	
	var pageToLoad;

    if(hPopupInfo.showModalDialog)
	{
	    pageToLoad = serverURL + MODAL_POPUP_NAME + "?page=" + escape(serverURL + hPopupInfo.strDisplayPage + '?');
	}
	else
	{
		if (hPopupInfo.strDisplayPage.indexOf(serverURL) == -1)
		{
			pageToLoad = serverURL + hPopupInfo.strDisplayPage;
		}
		else
		{
			pageToLoad = hPopupInfo.strDisplayPage;
		}

	    pageToLoad += "?";
	}

	var strQueryString =pageToLoad 
	    +"sessionId="+encodeURI(hPopupInfo.sessionId) 
	    +"&pageId=" +encodeURI(hPopupInfo.pageId) 
	    +"&argStandardID=" + encodeURI(hPopupInfo.argumentsStandardID) 
	    + hPopupInfo.additionalQueryString;
	
	if(hPopupInfo.showModalDialog)
	{	
		var parameters = new PopupParameters;
		parameters.Context = hPopupInfo.strContext;
		
		if(dataIn != null)
		{
			parameters.DataIn = dataIn;
		}
		
		window.showModalDialog(strQueryString, parameters, strFeatures.replace(/,/gi,";").replace(/\=/gi,":"));
		
		if(parameters.DataOut != null)
		{
			dataOut.Data = parameters.DataOut;
		}
    }
    else
    {
	    Win = window.open(strQueryString, hPopupInfo.strContext, strFeatures);
	    ttlayout_addWindow(Win);	
    	
	    if(hPopupInfo.boolMaximise == true)
	    {
		    ttlayout_maximiseWindow(Win);
	    }
    			
	    //open window at centre of screen (using available width and height i.e. takes into
	    //account any possible showing task bar and other windows tool bars cluttering up screen.
	    if(hPopupInfo.boolCentre == true && hPopupInfo.boolMaximise == false)
	    {
		    Win.moveTo(WinX, WinY);
	    }
	    else
	    {
		    Win.moveTo(hPopupInfo.lngPosX, hPopupInfo.lngPosY);
	    }
    				
	    // bring this window to top
	    Win.focus();
    }
     //add to array of windows

																				
	return true;
}

function ttlayout_qstringParamEscape(param)
{
	param = param.replace(/&/,'[[amp]]');
	return encodeURIComponent(param);
}

function ttlayout_addWindow(Win)
{
	var lngIndex;
	var strName = Win.name;
	var objWindowInfo = new ttlayout_WindowInfo;
	
	lngIndex = ttlayout_findWindowIndex(strName);
	
	if(lngIndex == 0)
	{
		objWindowInfo.strName = strName;
		objWindowInfo.handleWindow = Win;
		PopupWindows[lngPopupWindowsCount] = objWindowInfo;
		lngPopupWindowsCount++;
		
		return true;
	}
	else
	{
		return false;
	}
}

function ttlayout_findWindowIndex(strContextName)
{
	var boolFound = false;
	var lngPosn = 0;
	var lngIndex = 1;
			
	while(lngIndex < lngPopupWindowsCount && boolFound == false)
	{
		if(PopupWindows[lngIndex].strName == strContextName)
		{
			lngPosn = lngIndex;
		}
			
		lngIndex++;
	}
			
	return lngPosn;
}

function ttlayout_maximiseWindow(Win)
{
	Win.moveTo(0,0);
	Win.outerWidth = screen.availWidth;
	Win.outerHeight = screen.availHeight;
}						

function ttlayout_findWindow(strContextName)
{
	var boolFound = false;
	var Win = null;
	var lngIndex = 1;
			
	while(lngIndex < lngPopupWindowsCount && boolFound == false)
	{	
		if(PopupWindows[lngIndex].handleWindow.closed)
		{
			ttlayout_removeWindowAtIndex(lngIndex);
		}
		else
		{
			if(PopupWindows[lngIndex].strName == strContextName)
			{
				Win = PopupWindows[lngIndex].handleWindow;
			}
		}	
			
		lngIndex++;
	}
		
	return Win;
}

function ttlayout_removeWindow(strContextName)
{
	var lngIndex;
	var lngPosn;
	var boolRemoved = false;
			
	lngPosn = ttlayout_findWindowIndex(strContextName);
			
	if(lngPosn > 0)
	{
		if(PopupWindows[lngPosn].handleWindow.closed == false)
		{
			PopupWindows[lngPosn].handleWindow.close();
		}
					
		boolRemoved = true;
		lngIndex = lngPosn + 1;
				
		while(lngIndex < lngPopupWindowsCount)
		{
			PopupWindows[lngIndex - 1] = PopupWindows[lngIndex];
				
			lngIndex++;
		}
				
		PopupWindows[lngPopupWindowsCount - 1] = null;
		lngPopupWindowsCount--;
	}	
			
	return boolRemoved;
}

function ttlayout_removeWindowAtIndex(lngRemoveIndex)
{
	var lngPosn;
	var boolRemoved = false;
				
	boolRemoved = true;
	lngIndex = lngRemoveIndex + 1;
				
	while(lngIndex < lngPopupWindowsCount)
	{
		PopupWindows[lngIndex - 1] = PopupWindows[lngIndex];
			
		lngIndex++;
	}
				
	PopupWindows[lngPopupWindowsCount - 1] = null;
	lngPopupWindowsCount--;
				
	return true;
}

function ttlayout_closeAllWindows()
{
	var lngIndex = 1;
	var lngWinCount = PopupWindows.length;
	var hWin = null;
			
	for(lngIndex = 1; lngIndex < lngWinCount; lngIndex++)
	{
		hWin = PopupWindows[lngIndex];
				
		if(hWin != null)
		{
			if(hWin.handleWindow.closed == false)
			{
				hWin.handleWindow.close();
			}
		}
	}
}

function ttlayout_CleanUpRequests()
{
    
	var events=eval("TT_CleanUpRequests");
	if(events.length !=0)
	{
		for(eventVal=0;eventVal<events.length;eventVal++)
		{
			try
			{
				eval(events[eventVal]);
			}
			catch(e){}
		}
	}
}

function ttlayout_SetOnAfterSplitterMove(functionName)
{
    this.settings.onAfterSplitterMove = functionName;
}
