var m_ie5 = (window.navigator.appName.toLowerCase().indexOf("microsoft") >= 0);
var m_lastActiveToolBar;
var m_helpDiv;

// SRH : Create the object only if it does not exists.
if( ! window.m_allToolBars)
{
	var m_allToolBars = new Array();
}
function ToolBar(toolBarId, toolStyle, selectedStyle, disabledStyle, mouseOverStyle, toolItems, toolsSep, toolDefSep, lastToolHolder)
{
	// member variables as properties

	var allTools = new Array();

	this.ToolBarId = toolBarId;
	this.ToolStyle = toolStyle;
	this.SelectedStyle = selectedStyle;
	this.DisabledStyle = disabledStyle;
	this.MouseOverStyle = mouseOverStyle;
	//this.SelectedToolName = "";
	this.AllTools = allTools;
	this.LastToolHolder = lastToolHolder;

	var toolInfo = toolItems.split(toolsSep);
	// character used to separate instances of tools

	for (i = 0;i < toolInfo.length;i ++ )
	{
		if (toolInfo[i] != "")
		{
			allTools.push(_ParseTool(toolInfo[i], toolDefSep,toolBarId));
			// toolDefSep is character used to separate params of tool itself
		}
	}

	// functions
	this.SelectToolByName = function (toolName)
	{
		var tool = this.GetTool(toolName);
		this.SelectTool(tool);
	}

	this.SelectTool = function(tool)
	{
		if (tool != null && tool.IsEnabled)
		{			
			// unselect all tools of m_lastActiveToolBar (we could unselect for all tools also)
			if (m_lastActiveToolBar != null)
			{
				m_lastActiveToolBar.UnSelectAll();
				m_lastActiveToolBar.RefreshStyles();
			}
			// unselect for this toolbar as well - MMI
			this.UnSelectAll();
			this.RefreshStyles();
			m_lastActiveToolBar = this;

			if (tool.IsTool)
			{
				tool.IsSelected = true;
				var toolContainer = document.getElementById("td_" + this.ToolBarId + tool.ToolName);
				if (toolContainer)
					toolContainer.className = this.SelectedStyle;		
				
				_SetToolImage(tool.SelectedImageUrl,tool.ToolName);
						
			}

			// set hidden variable used in post back
			var hTool = document.getElementById(this.LastToolHolder);
			if (hTool != null)
			{
				hTool.value = tool.ToolName;
			}
		}
	}

	this.GetSelectedTool = function()
	{
		var selTool = null;
		if (this.AllTools != null)
		{
			for (i = 0;i < this.AllTools.length;i ++ )
			{
				var tool = this.AllTools[i];
				if (tool.IsTool && tool.IsSelected)
				{
					selTool = tool;
					break;
				}
			}
		}
		return selTool;
	}

	this.GetTool = function(toolName)
	{
		var tool = null;
		if (this.AllTools != null)
		{
			for (i = 0;i < this.AllTools.length;i ++ )
			{
				if (this.AllTools[i].ToolName.match(toolName))
				{
					tool = this.AllTools[i];
					break;
				}
			}
		}
		return tool;
	}

	this.MouseOver = function(toolName)
	{
		var tool = this.GetTool(toolName);

		if (tool != null && tool.IsEnabled)
		{
			var toolContainer = document.getElementById("td_" + this.ToolBarId + toolName);
			if (toolContainer != null)
			{
				toolContainer.className = this.MouseOverStyle;
				// Added Dec 8 2005
				_SetToolImage(tool.SelectedImageUrl,toolName);
			}
		}
	}
	this.MouseOut = function(toolName)
	{
		var tool = this.GetTool(toolName);
		if (tool != null && tool.IsEnabled)
		{
			var toolContainer = document.getElementById("td_" + this.ToolBarId + toolName);
			if (toolContainer != null)
			{
				if (tool.IsTool && tool.IsSelected)
				{
					toolContainer.className = this.SelectedStyle;
					_SetToolImage(tool.SelectedImageUrl,toolName);
				}
				else
				{
					toolContainer.className = this.ToolStyle;
					_SetToolImage(tool.ImageUrl,toolName);
				}	
			}
		}
		_HideToolHelp();
	}

	this.MouseMove = function(e, toolName)
	{
		if (m_helpDiv == null)
			m_helpDiv = _GetHelpDiv();		

		if (m_helpDiv == null)		
			return;

		if(m_helpDiv.style.visibility != 'hidden')
			return;

		e = window.event || e;

		if(e.pageX)
		{
			srcObj = e.target;
			cx = e.pageX;
			cy = e.pageY;
			ox = 5;
			oy = 15;
		}
		else
		{
		    var winWidth = document.body.offsetWidth;
			srcObj = e.srcElement;
			cx = e.clientX;
			cy = e.clientY;
			ox = e.offsetX;
			oy = e.offsetY;
		}


		if(srcObj.id)
		{
			var tool = this.GetTool(toolName);

			if(tool)
			{
				var helpHeader = document.getElementById('toolHelpHeader');
				var helpBody = document.getElementById('toolHelpBody');

				if(helpHeader && helpBody)
				{
					var toolHelp = tool.ToolTip;
					var xyScroll = GetScrollXY();

					helpHeader.innerHTML = tool.ToolLabel;
					helpBody.innerHTML = tool.ToolTip;

					var divWidth = parseInt(m_helpDiv.style.width);
                    if(m_helpDiv.style != null && m_helpDiv.style.width == "")
                        divWidth = parseInt(m_helpDiv.clientWidth);
					
					
					if(cx + ox + divWidth > document.body.clientWidth)
					{
						// align left
						m_helpDiv.style.left = (cx - ox - 5 - parseInt(divWidth))  + xyScroll[0] + 'px';						
					}
					else
					{
						// align right
						m_helpDiv.style.left = (cx - ox + 5) + xyScroll[0] + 'px';
					}
					
					m_helpDiv.style.top = (cy - oy + 20) + xyScroll[1] + 'px';
					m_helpDiv.style.visibility = 'visible';
				}
			}
		}
	}
	this.Click = function(toolName)
	{
		var tool = this.GetTool(toolName);

		if (tool != null)
			this._Click(tool);
	}
	this._Click = function(tool)
	{
		if (tool != null && tool.IsEnabled)
		{
		
			var fncRet = true;
			
			if (tool.IsTool)
			{
				this.SelectTool(tool);
				// Added Dec 8 2005
				_SetToolImage(tool.SelectedImageUrl,tool.ToolName);
			}
			else
			{
				_SetToolImage(tool.ImageUrl,tool.ToolName);
			}

			if (tool.ClientScript != null && tool.ClientScript != "")
			{
				// execute client function
				try
				{
					if (tool.ClientScript != "")
					{
						fncRet = eval(tool.ClientScript);
					}
				}
				catch (e)
				{
					//alert('ExceptionHandler::Toolbar::_Click: ' + e.message); 
					try
					{
						window.status = 'Toolbar::_Click: ' + e.message;
					}
					catch (eex)
					{}
				
				}
			}

//			if (tool.IsTool)
//			{
//				this.SelectTool(tool);
//				// Added Dec 8 2005
//				_SetToolImage(tool.SelectedImageUrl,tool.ToolName);
//			}
//			else
//			{
//				_SetToolImage(tool.ImageUrl,tool.ToolName);
//			}

			if (tool.AutoPostBack && (fncRet != false))
			{
				__doPostBack('tb_' + this.ToolBarId, tool.ToolName);

			}
		}
	}
	this.UnSelectAll = function()
	{
		for (i = 0;i < this.AllTools.length;i ++ )
		{
			var tool = this.AllTools[i];

			// Added Dec 8 2005
			_SetToolImage(tool.ImageUrl,tool.ToolName);

			if (tool.IsTool)
			{
				tool.IsSelected = false;
			}
		}
		var hTool = document.getElementById(this.LastToolHolder);
		if (hTool != null)
		{
			hTool.value = "";
		}
	}

	this.RefreshStyles = function()
	{
		for (i = 0;i < this.AllTools.length;i ++ )
		{
			var tool = this.AllTools[i];
			var toolContainer = document.getElementById("td_" + this.ToolBarId + tool.ToolName);
			if (toolContainer != null)
			{
				if ( ! tool.IsEnabled)
				{
					toolContainer.className = this.DisabledStyle;
				}
				else if (tool.IsTool && tool.IsSelected)
				{
					toolContainer.className = this.SelectedStyle;
				}
				else
				{
					toolContainer.className = this.ToolStyle;
				}
			}
		}
	}

	this.ClickFirstTool = function()
	{	
		for (i = 0;i < this.AllTools.length;i ++ )
		{
			var tool = this.AllTools[i];
			if (tool.IsTool && tool.IsEnabled)
			{
				this._Click(tool);
				break;
			}
		}	
	}	

	this.SetVisible = function(show)
	{
		var div = document.getElementById("tbl_" + this.ToolBarId);

		if (div != null)
		{
			if (show)
			div.style.display = "inline";
			else
			div.style.display = "none";
		}
	}
	;

	this.GetVisible = function()
	{
		var div = document.getElementById("tbl_" + this.ToolBarId);
		if (div != null)
		{
			if (div.style.display == "none")
			return false;
			else
			return true;
		}
	}
	;

	this.ToString = function()
	{
		return "Id:" + this.ToolBarId + ",Tool count:" + allTools.length;
	}
	;

	// remove duplicate toolbar from global collection
	for (var i = 0;i < m_allToolBars.length;i ++ )
	{
		if (m_allToolBars[i].ToolBarId == this.ToolBarId)
		{
			m_allToolBars.splice(i,1);
			break;
		}
	}
	m_allToolBars.push(this);
}


function _ParseTool(toolInfo, toolDefSep,toolBarId)
{
	var info = toolInfo.split(toolDefSep);
	var tool = new Tool(info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7], info[8],toolBarId);
	return tool;
}

/// Tool Object
function Tool(name, isEnabled, isTool, clientScript, autoPostBack, toolImageUrl, toolSelectedImageUrl, toolTip, toolLabel,toolBarId)
{
	this.ToolName = name;
	this.IsEnabled = (isEnabled.toLowerCase() == 'true');
	this.IsTool = (isTool.toLowerCase() == 'true');
	this.IsSelected = false;
	this.ClientScript = clientScript;
	this.AutoPostBack = (autoPostBack.toLowerCase() == 'true');
	this.ImageUrl = toolImageUrl;
	this.SelectedImageUrl = toolSelectedImageUrl;
	this.ToolTip = toolTip;
	this.ToolLabel = toolLabel;
	this.ToolBarId = toolBarId;
	this.Enable = function(){this._Enable(true);}
	this.Disable = function(){this._Enable(false);}
	this._Enable = function(enable)
	{	
		this.IsEnabled = enable;
		var toolBar = GetToolBar(toolBarId);
		if (toolBar)
		{	
			var tdObject = getObject('td_' + this.ToolBarId + this.ToolName);
			if(tdObject)
			{
				if (enable)
					tdObject.className = toolBar.ToolStyle;
				else
					tdObject.className = toolBar.DisabledStyle;
			}
		}				
	}	
	this.ToString = function()
	{
		return "ToolName:" + this.ToolName + ",IsTool:" + this.IsTool + ",IsSelected:" + this.IsSelected + ",IsEnabled:" + this.IsEnabled + ",ClientScript:" + this.ClientScript + ",AutoPostBack:" + this.AutoPostBack + ",ImageUrl:" + this.ImageUrl + ",SelectedImageUrl:" + this.SelectedImageUrl;
	}
}


function GetToolBar(toolBarId)
{
	var toolBar = null;
	for (i = 0;i < m_allToolBars.length;i ++ )
	{
		if (m_allToolBars[i].ToolBarId == toolBarId)
		{
			toolBar = m_allToolBars[i];
			break;
		}
	}
	return toolBar;
}

function HideToolBar(toolBarId)
{
	var toolBar = GetToolBar(toolBarId);
	if (toolBar != null)
	{
		toolBar.SetVisible(false);
	}
}
function ShowToolBar(toolBarId)
{
	var toolBar = GetToolBar(toolBarId);
	if (toolBar != null)
	{
		toolBar.SetVisible(true);
	}
}

function SetToolVisibility(toolBarId, toolName,show)
{
	var toolBar = GetToolBar(toolBarId);
	if(toolBar)
	{
		var tool = toolBar.GetTool(toolName);

		var tdObject = getObject('td_' + toolBarId + toolName);
		if (tdObject != null)
		{
			if (show)
			tdObject.style.display = "inline";
			else
			tdObject.style.display = "none";
		}
	}
}

function ClickTool(toolName)
{
	var tool = null;
	for (i = 0;i < m_allToolBars.length;i ++ )
	{
		tool = m_allToolBars[i].GetTool(toolName);
		if (tool != null)
		{
			m_allToolBars[i]._Click(tool);
			break;
		}
	}
	return tool;
}
function FindTool(toolName)
{
	var tool = null;
	for (i = 0;i < m_allToolBars.length;i ++ )
	{
		tool = m_allToolBars[i].GetTool(toolName);
		if (tool != null)
			break;
	}
	return tool;
}

function UnSelectAllTools()
{
	if (m_lastActiveToolBar != null)
	m_lastActiveToolBar.UnSelectAll();
}

function _SetToolImage(imgUrl, toolName)
{	
	try
	{
		if (toolName != null && imgUrl != null)
		{			
			var imgBtn = document.getElementById('img_' + toolName);
			if (imgBtn)				
				imgBtn.src = imgUrl;
		}
	}
	catch(e){alert('ExceptionHandler::Toolbar::_SetToolImage: ' + e.message); }
}

function _GetHelpDiv()
{	
	var toolHelp = document.getElementById('toolHelp');
	if (! toolHelp)
	{
		toolHelp = document.createElement("DIV");
		toolHelp.id = 'toolHelp';	
		toolHelp.style.visibility='visible';
		toolHelp.style.overflow='hidden';
		toolHelp.style.position='absolute';		
		toolHelp.style.zIndex=2000;
		toolHelp.innerHTML = "<div id='toolHelpHeader'></div><div id='toolHelpBody'></div>";	
		document.body.appendChild(toolHelp);
	}
	return toolHelp
}

function GetScrollXY()
{
	var scrOfX = 0, scrOfY = 0;


	if( typeof( window.pageYOffset ) == 'number' )
	{
		// Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	}
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
	{
		// DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	}
	else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
	{
		// IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}

	if(window.htmlDir)
	{
		if (htmlDir == "RTL")
		scrOfX = 0;
	}
	return [ scrOfX, scrOfY ];
}

function _HideToolHelp()
{
	if(m_helpDiv)
	m_helpDiv.style.visibility = 'hidden';
}

// register click event - toolHelp is switched off on mouseup
if (m_ie5)
{
	document.attachEvent('onclick',_HideToolHelp);
}
else
{
	document.addEventListener('click',_HideToolHelp,false);
}

// -------------------------
function SetPrint(path)
{
    try
    {
        SetPrintMapUrl();
                
    }
    catch(e)
    {
    
    }
	if (path != null)
	{
		if (window.HandlePrintFrame)
		{
			HandlePrintFrame(path);
		}
		else
		{
			var Print = window.open(path,"Print","titlebar=no,toolbar=no,width=300,height=400,left=50,top=50,status=no,resizable=yes");
			Print.focus();
		}
	}
}