////////////////////////////////////////////////////////////////////////////////////////////
// MappingControl toolbar client-side script
////////////////////////////////////////////////////////////////////////////////////////////

addNamespace("Mapping.Toolbar.Buttons");

////////////////////////////////////////////////////////////////////////////////////////////

Mapping.Toolbar.Buttons.UtilityClass = Class.inherit(Toolbar.Buttons.UtilityClass, 
{
	SelectionButtonSelected: function()
	{
		Tools.ToolBox.use("Selection", this.toolbar.target);
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		
		this.toolbar.showButton("ClearSelectionButton");
		return true;
	},
	
	SelectionButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		this.toolbar.hideButton("ClearSelectionButton");
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	SelectionToleranceToolButtonSelected: function()
	{
		Tools.ToolBox.use("Selection", this.toolbar.target);
		var tool = Tools.ToolBox.get("Selection");
		
		if (tool)
			tool._useTolerance = true;
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		this.toolbar.showButton("ClearSelectionButton");
		this.toolbar.showButton("SelectionToleranceButton");
		return true;
	},
	
	SelectionToleranceToolButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		var tool = Tools.ToolBox.get("Selection");
		
		if (tool)
			tool._useTolerance = false;
		
		this.toolbar.hideButton("ClearSelectionButton");
		this.toolbar.hideButton("SelectionToleranceButton");
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	SelectionToleranceButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		if (Tools.ToolBox.get("Selection") && document.getElementById(this.id + "_List"))
			document.getElementById(this.id + "_List").value = Tools.ToolBox.get("Selection").tolerance;
		
		return true;
	},
	
	ClearSelectionButtonSelected: function()
	{
		this.toolbar.target.clearSelection(true);
		return false;
	},
	
	ClearSelectionButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	CoordinateButtonSelected: function()
	{
		Tools.ToolBox.use("Coordinate", this.toolbar.target);
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	CoordinateButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	InfoButtonSelected: function()
	{
		Tools.ToolBox.use("Info", this.toolbar.target);
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	InfoButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	PanButtonSelected: function()
	{
		Tools.ToolBox.use("Pan", this.toolbar.target);
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	PanButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	CenterButtonSelected: function()
	{
		Tools.ToolBox.use("Center", this.toolbar.target);
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	CenterButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	ZoomButtonSelected: function()
	{
		Tools.ToolBox.use("Zoom", this.toolbar.target);
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	ZoomButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	ZoomInButtonSelected: function()
	{
		Tools.ToolBox.use("Zoom", this.toolbar.target);
		var tool = Tools.ToolBox.get("Zoom");
		
		if (tool)
		{
			tool.mode = Mapping.ZoomOptions.ZoomIn;
			tool.dynamic = false;
			this.toolbar.target.showInformation("Click or drag a box to zoom in on an area of the map.", tool.id);
		}
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	ZoomInButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		var tool = Tools.ToolBox.get("Zoom");
		
		if (tool)
			tool.dynamic = true;
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	ZoomOutButtonSelected: function()
	{
		Tools.ToolBox.use("Zoom", this.toolbar.target);
		var tool = Tools.ToolBox.get("Zoom");
		
		if (tool)
		{
			tool.mode = Mapping.ZoomOptions.ZoomOut;
			tool.dynamic = false;
			this.toolbar.target.showInformation("Click or drag a box to zoom out on an area of the map.", tool.id);
		}
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		return true;
	},
	
	ZoomOutButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		var tool = Tools.ToolBox.get("Zoom");
		
		if (tool)
			tool.dynamic = true;
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawTextButtonSelected: function()
	{
		Tools.ToolBox.use("DrawText", this.toolbar.target);
		
		this.toolbar.showButton("FontNameButton");
		this.toolbar.showButton("FontSizeButton");
		this.toolbar.showButton("FontColorButton");
		this.toolbar.showButton("FontHaloColorButton");
		this.toolbar.showButton("FontBackgroundColorButton");
		this.toolbar.showButton("FontBoldButton");
		this.toolbar.showButton("FontItalicsButton");
		this.toolbar.showButton("FontUnderlineButton");
		
		return true;
	},
	
	DrawTextButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		this.toolbar.hideButton("FontNameButton");
		this.toolbar.hideButton("FontSizeButton");
		this.toolbar.hideButton("FontColorButton");
		this.toolbar.hideButton("FontHaloColorButton");
		this.toolbar.hideButton("FontBackgroundColorButton");
		this.toolbar.hideButton("FontBoldButton");
		this.toolbar.hideButton("FontItalicsButton");
		this.toolbar.hideButton("FontUnderlineButton");
		
		return true;
	},
	
	ColorButtonSelected: function(arg)
	{
		this.toolbar.target.drawingSettings.color = new Drawing.Color(arg);
		Mapping.Toolbar.Buttons.Utility.ColorButtonRefresh(this);
		this.deselect();
	},
	
	ColorButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		if (!this.selected)
		{
			Mapping.Toolbar.Buttons.Utility._updateColorButton(this, this.toolbar.target.drawingSettings.color);
			
			if (Server.Values.get(this.toolbar.target.id + "_DrawingColorValue") != null)
				Server.Values.get(this.toolbar.target.id + "_DrawingColorValue").set(this.toolbar.target.drawingSettings.color.toArgb());
		}
		
		return true;
	},
	
	HaloColorButtonSelected: function(arg)
	{
		this.toolbar.target.drawingSettings.haloColor = new Drawing.Color(arg);
		Mapping.Toolbar.Buttons.Utility.HaloColorButtonRefresh(this);
		this.deselect();
	},
	
	HaloColorButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		if (!this.selected)
		{
			Mapping.Toolbar.Buttons.Utility._updateColorButton(this, this.toolbar.target.drawingSettings.haloColor);
			
			if (Server.Values.get(this.toolbar.target.id + "_DrawingHaloColorValue") != null)
				Server.Values.get(this.toolbar.target.id + "_DrawingHaloColorValue").set(this.toolbar.target.drawingSettings.haloColor.toArgb());
		}
		
		return true;
	},
	
	FontBackgroundColorButtonSelected: function(arg)
	{
		this.toolbar.target.drawingSettings.backgroundColor = new Drawing.Color(arg);
		Mapping.Toolbar.Buttons.Utility.FontBackgroundColorButtonRefresh(this);
		this.deselect();
	},
	
	FontBackgroundColorButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		if (!this.selected)
		{
			Mapping.Toolbar.Buttons.Utility._updateColorButton(this, this.toolbar.target.drawingSettings.backgroundColor);
			
			if (Server.Values.get(this.toolbar.target.id + "_DrawingBackColorValue") != null)
				Server.Values.get(this.toolbar.target.id + "_DrawingBackColorValue").set(this.toolbar.target.drawingSettings.backgroundColor.toArgb());
		}
		
		return true;
	},
	
	DrawSizeButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		Mapping.Toolbar.Buttons.Utility._updateSelectButton(this, this.toolbar.target.drawingSettings.size);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingSizeValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingSizeValue").set(this.toolbar.target.drawingSettings.size);
		
		return true;
	},
	
	
	FontSizeButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		Mapping.Toolbar.Buttons.Utility._updateSelectButton(this, this.toolbar.target.drawingSettings.font.size);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingSizeValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingSizeValue").set(this.toolbar.target.drawingSettings.size);
		
		return true;
	},
	
	FontNameButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		Mapping.Toolbar.Buttons.Utility._updateSelectButton(this, this.toolbar.target.drawingSettings.font.name);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingFontNameValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingFontNameValue").set(this.toolbar.target.drawingSettings.font.name);
		
		return true;
	},
	
	FontBoldButtonSelected: function()
	{
		this.toolbar.target.drawingSettings.font.bold = true;
		return true;
	},
	
	FontBoldButtonDeselected: function(button)
	{
		this.toolbar.target.drawingSettings.font.bold = false;
		return true;
	},
	
	FontBoldButtonRefresh: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateToggleButton(this, this.toolbar.target.drawingSettings.font.bold);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingFontBoldValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingFontBoldValue").set(this.toolbar.target.drawingSettings.font.bold);
		
		return true;
	},
	
	FontItalicsButtonSelected: function()
	{
		this.toolbar.target.drawingSettings.font.italics = true;
		return true;
	},
	
	FontItalicsButtonDeselected: function(button)
	{
		this.toolbar.target.drawingSettings.font.italics = false;
		return true;
	},
	
	FontItalicsButtonRefresh: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateToggleButton(this, this.toolbar.target.drawingSettings.font.italics);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingFontItalicsValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingFontItalicsValue").set(this.toolbar.target.drawingSettings.font.italics);
		
		return true;
	},
	
	FontUnderlineButtonSelected: function()
	{
		this.toolbar.target.drawingSettings.font.underline = true;
		return true;
	},
	
	FontUnderlineButtonDeselected: function(button)
	{
		this.toolbar.target.drawingSettings.font.underline = false;
		return true;
	},
	
	FontUnderlineButtonRefresh: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateToggleButton(this, this.toolbar.target.drawingSettings.font.underline);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingFontUnderlineValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingFontUnderlineValue").set(this.toolbar.target.drawingSettings.font.underline);
		
		return true;
	},
	
	ToolMenuButtonDeselected: function()
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		return true;
	},
	
	_showDrawingButtons: function(toolbar)
	{
		toolbar.showButton("DrawSizeButton");
		toolbar.showButton("DrawColorButton");
		toolbar.showButton("DrawLineColorButton");
	},
	
	_hideDrawingButtons: function(toolbar)
	{
		toolbar.hideButton("DrawSizeButton");
		toolbar.hideButton("DrawColorButton");
		toolbar.hideButton("DrawLineColorButton");
	},
	
	DrawSymbolMenuButtonDeselected: function(button)
	{
		this.toolbar.getButton(this.id + "_DrawSymbolCircleButton").deselect(null);
		this.toolbar.getButton(this.id + "_DrawSymbolCrossButton").deselect(null);
		this.toolbar.getButton(this.id + "_DrawSymbolDiamondButton").deselect(null);
		this.toolbar.getButton(this.id + "_DrawSymbolPinButton").deselect(null);
		this.toolbar.getButton(this.id + "_DrawSymbolSquareButton").deselect(null);
		this.toolbar.getButton(this.id + "_DrawSymbolStarButton").deselect(null);
		this.toolbar.getButton(this.id + "_DrawSymbolTriangleButton").deselect(null);
		
		return true;
	},
	
	DrawSymbolMenuButtonRefresh: function()
	{
		if (!this.toolbar || !this.toolbar.target)
			return true;
		
		var button = eval(this.id + "_DrawSymbol" + this.toolbar.target.drawingSettings.symbol + "Button");
		
		if (button)
			Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(button);
		
		if (Server.Values.get(this.toolbar.target.id + "_DrawingSymbolValue") != null)
			Server.Values.get(this.toolbar.target.id + "_DrawingSymbolValue").set(this.toolbar.target.drawingSettings.symbol);
		
		return true;
	},
	
	_updateDrawingSymbol: function(map, symbol)
	{
		map.drawingSettings.symbol = symbol;
		
		if (Server.Values.get(map.id + "_DrawingSymbolValue") != null)
			Server.Values.get(map.id + "_DrawingSymbolValue").set(symbol);
	},
	
	DrawSymbolCircleButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Circle);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		
		return true;
	},
	
	DrawSymbolCircleButtonDeselected: function(button)
	{
		if (Tools.ToolBox.current)
			Tools.ToolBox.current.stop();
		
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	},
	
	DrawSymbolCrossButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Cross);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawSymbolCrossButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	},
	
	DrawSymbolDiamondButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Diamond);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawSymbolDiamondButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	},
	
	DrawSymbolPinButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Pin);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawSymbolPinButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	},
	
	DrawSymbolSquareButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Square);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawSymbolSquareButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	},
	
	DrawSymbolStarButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Star);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawSymbolStarButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	},
	
	DrawSymbolTriangleButtonSelected: function()
	{
		Mapping.Toolbar.Buttons.Utility._updateDrawingSymbol(this.toolbar.target, Mapping.SymbolType.Triangle);
		Tools.ToolBox.use("DrawSymbol", this.toolbar.target);
		
		Mapping.Toolbar.Buttons.Utility._updateSplitMenuImage(this);
		Mapping.Toolbar.Buttons.Utility._showDrawingButtons(this.toolbar);
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		return true;
	},
	
	DrawSymbolTriangleButtonDeselected: function(button)
	{
		Mapping.Toolbar.Buttons.Utility._selectParent(this);
		Mapping.Toolbar.Buttons.Utility._hideDrawingButtons(this.toolbar);
		return true;
	}
});
Mapping.Toolbar.Buttons.Utility = new Mapping.Toolbar.Buttons.UtilityClass();




