///////////////////////////////////////////////////////////
// UI JavaScript IE 5.X API (1.0.0.0)
// Copyright by Janus Systems S.A.
// 2004
//////////////////////////////////////////////////////////
function GetPanelManagerFromID(id)
{
	var panelManager = null; 
	eval("panelManager = " + id + ";"); 
	if(panelManager == null)
		throw new Error("invalid PanelManager with id '" + id + "'"); 
	return panelManager; 
}
function GetPanelFromID(id)
{
	var panel = null;
	eval("panel = " + id + ";");
	if(panel == null)
		throw new Error("invalid Panel with id '" + id + "'");
	return panel; 
}
function panelManagerOnLoad(id)
{
	var panelManager = getPanelManager(id); 
	panelManager.onLoad(); 
}
function UIPanelManager(id, panels, events)
{   
	var events = events; 
	var panels = panels; 
	this.ID = id;	
	this.FireEvent = FireEvent;
	this.onLoad = onLoad; 
	this.getPanelFromKey = getPanelFromKey; 
	function getPanelFromKey(key)
	{
		if(panels == null || panels.length == 0)
			throw new Error("argument out of range exception"); 
			
		for(var i=0;i<panels.length;i=i+2)
		{
			if(panels[i+1] == key)
				return getPanelCore(panels[i]);
		}
		throw new Error("argument out of range exception"); 
	}
	function FireEvent(name, params)
	{
		if(events == null || events.length == 0)
			return null;
			
		var l = events.length; 
		var handler = "";		
		for(var i=0; i<l; i=i+2)
		{
			if(events[i] == name) 
			{
				handler = events[i+1];
				i = l; 
			}
		}
		if(handler != "")
		{	
			var _params = "";
			var l = params.length; 
			for(var i=0;i<l; i++)
			{
				if(_params != "")
					 _params += ",";
				_params += "params[" + i + "]";
			}		
			var _cmd = "return eval(" + handler + "("  + _params + "))";
			var _function = new Function("params", _cmd);
			return _function(params);
		}
		return null; 
	}
	function onLoad()
	{
		FireEvent("Load", [this]); 
	}
	window.attachEvent("onload", function() { panelManagerOnLoad(id); }); 
}
function UIPanel(manager, id, index, key, innerUrl, innerFrames)
{
	var manager = manager;
	var innerFrames = innerFrames; 
	this.InnerUrl = innerUrl;
	this.ID = id;
	this.Index = index;
	this.Key = key;
	this.GetInnerFrame = GetInnerFrame; 
	this.GetInnerElement = GetInnerElement; 
	this.GetInnerContainerElement = GetInnerContainerElement; 
	this.GetInnerContainerUrl = GetInnerContainerUrl; 	
	this.SetInnerContainerUrl = SetInnerContainerUrl;	
	this.SetCaption = SetCaption; 
	this.SetCaptionImage = SetCaptionImage;
	this.ShowCaption = ShowCaption; 
	this.ShowInnerFrame = ShowInnerFrame;  
	function getInnerContainerRow(element)
	{
		var tr = null;
		if(element.rows.length == 1 || element.rows.length == 2)
		{
			if(element.rows[0].getAttribute("type") != 2)
				tr = element.rows[0]; 
			else
				tr = element.rows[1]; 
		}
		return tr; 
	}
	function getCaptionCell(tr, type)
	{	
		var table = tr.cells[0].childNodes[0]; 
		var td = null; 
		for(var i=0; i<table.cells.length && td == null; i++)
		{
			if(table.cells[i].getAttribute("id") == type)
				td = table.cells[i]; 
		}
		return td; 
	}
	function getCaptionRow(element)
	{
		var tr = null; 
		if(element.rows.length > 0)
			tr = element.rows[0]; 
		return tr; 
	}
	function ShowCaption(show)
	{
		var tr = getCaptionRow(document.getElementById(id));
		if(show)
			tr.style.display = "";
		else
			tr.style.display = "none";
	}
	function GetInnerContainerElement()
	{
		var element = document.getElementById(id);
		if(element != null)
		{
			var tr = getInnerContainerRow(element);
			if(tr != null)
				return tr.cells[0].childNodes[0]; 
		}
		return null; 
	}
	function GetInnerElement()
	{
		var tr = getInnerContainerRow(document.getElementById(id)); 
		if(tr != null)
			return tr.cells[0]; 
		else
			return null; 
	}
	function GetInnerContainerUrl()
	{
		var element = document.getElementById(id);
		if(element != null)
		{	
			var tr = getInnerContainerRow(element); 
			if(tr != null)
				return tr.cells[0].childNodes[0].src; 			
		}
	}
	function SetCaption(caption)
	{
		var element = document.getElementById(id); 
		if(element != null)
		{
			var tr = getCaptionRow(element); 
			if(tr != null)
			{
				var td = getCaptionCell(tr, 2); 				
				if(td != null)
				{
					td.childNodes[0].innerText = caption;
					if(td.style.display == "none")
						td.style.display = "";
				}
			}
		}
	}
	function SetCaptionImage(image)
	{
		var element = document.getElementById(id); 
		if(element != null)
		{
			var tr = getCaptionRow(element); 
			if(tr != null)
			{
				var td = getCaptionCell(tr, 1); 
				if(td != null)
				{
					td.childNodes[0].src = image;
					if(td.style.display == "none")
						td.style.display = ""; 
				}
			}
		}
	}
	function SetInnerContainerUrl(url)
	{
		var element = document.getElementById(id);
		if(element != null)
		{
			var tr = getInnerContainerRow(element); 
			if(tr != null)
				tr.cells[0].childNodes[0].src = url; 				
		}		
	}
	function getInnerFrameCore(value)
	{
		if(innerFrames == null)
			return null;
			
		var j = -1; 
		var frameid = ""; 
		if(typeof(value) == "number")
		{
			if(number < 0 || number >= (innerFrames.length / 3))
				throw new Error("argument out of range exception"); 
				
			frameid = innerFrames[(i-1)*3]; 			
			j = (i-1) * 3;
		}
		else
		{
			for(var i=0;i<innerFrames.length&&j==-1;i=i+3)
			{
				if(innerFrames[i+1] == value)
				{
					frameid = innerFrames[i]; 
					j = i; 
				}
			}
		}		
		if(frameid == "")
			throw new Error("invalid IFRAME with key '" + value + "'");
			
		var element = document.getElementById(id); 
		if(element != null)
		{
			var tr = getInnerContainerRow(element); 
			if(tr != null)
			{
				for(var i=0;i<tr.cells[0].childNodes.length;i++)
				{
					var frame = tr.cells[0].childNodes[i]; 
					if(frame.getAttribute("id") == frameid)
						return [frame,j];
				}
			}
		}
		return null; 		
	}
	function GetInnerFrame(value)
	{
		var frame = getInnerFrameCore(value); 
		if(frame != null)
			return frame[0]; 
	}
	function ShowInnerFrame(value, src)
	{
		if(value == null && src == null)
		{
			var element = GetInnerContainerElement(); 
			if(element != null && element.tagName == "IFRAME")
			{	
				if(element.getAttribute("src") == null || element.getAttribute("src") == "")
					element.setAttribute("src", this.InnerUrl);
					
				element.style.display = "";
			}
		}
		else
		{
			var result = getInnerFrameCore(value); 
			if(result != null)		
			{
				var frame = result[0];
				var j = result[1]; 
				var element = document.getElementById(id);
				if(element != null)
				{
					var tr = getInnerContainerRow(element); 
					if(tr != null)
					{
						for(var i=0;i<tr.cells[0].childNodes.length;i++)
						{
							var aframe = tr.cells[0].childNodes[i];
							if(aframe != frame && aframe.style.display != "none")
								aframe.style.display = "none";
							else
							{
								if(frame.getAttribute("src") == null || frame.getAttribute("src") == "")
								{
									if(src == null && (innerFrames[j+2] != null && innerFrames[j+2].length > 0))
									{
										if(frame.contentWindow.location != null)
											frame.contentWindow.location.assign(innerFrames[j+2]); 
										else
											frame.setAttribute("src",innerFrames[j+2]); 
									}
									else if(src != null)
									{
										if(frame.contentWindow.location != null)										
											frame.contentWindow.location.assign(src);
										else
											frame.setAttribute("src", src); 
									}
								}
								else if(src != null && frame.getAttribute("src") != src)
								{
									if(frame.contentWindow.location != null)
										frame.contentWindow.location.assign(src); 
									else
										frame.setAttribute("src", src); 
								}								
								frame.style.display = ""; 			
							}
						}
					}
				}			
			}
		}
	}
	return this; 
}
function UIPanelGroupTab(manager, id, key, selectedIndex, items, css, alignment)
{
	if(css == null || css.length != 2)
		throw new Error("invalid operation exception");
		
	var selectedTabCollection = css[0];
	var normalTabCollection = css[1]; 
	var items = items; 
	var manager = manager;	
	this.Key = key; 
	this.ID = id; 
	this.NormalTab = NormalTab; 
	this.SelectedIndex = selectedIndex; 
	this.SelectedTab = SelectedTab; 
	this.TabStripAlignment = alignment;
	this.setTabSelected = setTabSelected;	
	function setTabSelected(index)
	{
		var status = "";
		status += this.ID;
		status += ",";
		status += index; 
		setClientStatus(manager, this.ID, status);
		if(index == this.SelectedIndex)
			return; 
			
		var panelManager = GetPanelManagerFromID(manager); 
		var panelSelected = GetPanelFromID(items[(index*2)+1]);
		if(panelSelected.ShowInnerFrame != null)
			panelSelected.ShowInnerFrame(null, null); 
		panelManager.FireEvent("SelectedPanelChanged", [panelManager, panelGroup, panelSelected]); 
		this.SelectedIndex = index; 		
	}
	function NormalTab(i)
	{
		if(i<0 || i>=normalTabCollection.length)
			throw Error("argument out of range exception");
			
		return normalTabCollection[i]; 
	}
	function SelectedTab(i)
	{		
		if(i<0 || i>=selectedTabCollection.length)
			throw Error("argument out of range exception"); 
			
		return selectedTabCollection[i]; 
	}
	var panelGroup = this; 
	return this; 
}
function UIPanelVerticalTiles(manager, id, key, itemsCount)
{
	var itemsWidth = null;
	var manager = manager;
	this.GetManager = GetManager;
	this.Key = key; 
	this.ID = id;
	this.ItemsCount = itemsCount;
	this.UpdateClientStatus = UpdateClientStatus; 
	this.setItemWidth = setItemWidth;
	function GetManager()
	{		
		return getPanelManager(manager); 
	}
	function UpdateClientStatus()
	{
		var status = "";
		status += this.ID;
		for(var i=0;i<this.ItemsCount;i++)
		{
			if(status.length > 0)
				status += ","; 
				
			status += itemsWidth[i]; 
		}
		setClientStatus(manager, this.ID, status); 
	}
	function setItemWidth(item, width)
	{
		if(item<0||item>=this.ItemsCount)
			throw new Error("index out of range exception");
			
		if(itemsWidth == null)
		{
			itemsWidth = new Array();
			for(var i=0;i<this.ItemsCount;i++)
				itemsWidth[i] = -1;							
		}
		itemsWidth[item] = width;
	}
	return this; 
}
function UIPanelHorizontalTiles(manager, id, key, itemsCount, items)
{
	var itemsHeight = null; 
	var items = items; 
	var manager = manager; 
	this.GetManager = GetManager;
	this.GetPanel = GetPanel;	
	this.ID = id;	
	this.ItemsCount = itemsCount; 	
	this.Key = key; 
	this.UpdateClientStatus = UpdateClientStatus; 
	this.setItemHeight = setItemHeight;
	function setItemHeight(item, height)
	{
		if(item < 0  || item >= this.ItemsCount)
			throw new Error("index out of range exception");
			
		if(itemsHeight == null)
		{
			itemsHeight = new Array(); 
			for(var i=0;i<this.ItemsCount;i++)
				itemsHeight[i] = -1; 
		}			
		itemsHeight[item] = height; 
	}
	function UpdateClientStatus()
	{
		var status = "";
		status += this.ID;
		for(var i=0;i<this.ItemsCount;i++)
		{
			if(status.length > 0)
				status += ","; 
				
			status += itemsHeight[i]; 
		}
		setClientStatus(manager, this.ID, status); 
	}
	function GetManager()
	{		
		return getPanelManager(manager);
	}
	function GetPanel(value)
	{
		if(typeof(value) == "number")
		{
			var l = items.length / 2;
			if(value < 0 || value >= l)
				throw new Error("argument out of range exception"); 
				
			return getPanelCore(items[(l * 2) + 1]); 
		}
		else
		{
			var l = items.length;
			for(var i=0;i<l;i=i+2)
			{
				if(items[i] == value)
					return getPanelCore(items[i+1]);
			}
			throw new Error("argument out of range exception"); 
		}
	}
	return this; 
}
function UIPanelOutlookNavigator(manager, id, selectedIndex, key, items)
{
	if(items == null)
		throw new Error("invalid outlook navigator items definition");
	
	var manager = manager; 
	var itemsID = new Array(); 
	var itemsCss = new Array();
	for(var i=0; i<items.length;i=i+3)
	{
		itemsID[itemsID.length] = items[i+1]; 
		itemsCss[itemsCss.length] = items[i+2];
	}
	this.getItemCss = getItemCss;	
	this.getPanel = getPanel;
	this.ID = id;
	this.ItemsCount = (items.length / 3);
	this.Key = key; 
	this.OffsetVisibleButtons = 0;	
	this.SelectedIndex = selectedIndex;	
	this.SelectItem = SelectItem;
	this.UpdateClientStatus = UpdateClientStatus;
	function getItemCss(item)
	{
		if(item < 0 || item >= this.ItemsCount)
			throw new Error("invalid range exception"); 
			
		return itemsCss[item]; 
	}
	function getPanel(index)
	{
		if(index < 0 || index >= this.ItemsCount)
			throw new Error("invalid range exception"); 
			
		return GetPanelFromID(itemsID[index]); 
	}	
	function UpdateClientStatus()
	{
		var status = "";
		status += this.ID + ",";
		status += this.OffsetVisibleButtons + ",";
		status += this.SelectedIndex; 
		setClientStatus(manager, this.ID, status); 
	}
	function SelectItem(index)
	{
		if(index == this.SelectedIndex)
			return; 
			
		var panelManager = GetPanelManagerFromID(manager);
		var panelSelected = getPanel(index);
		panelManager.FireEvent("SelectedPanelChanged", [panelManager, panelGroup, panelSelected]); 
		this.SelectedIndex = index; 
	}
	var panelGroup = this; 
	return this;
}
