// Global variable
var zoomToXY = null;

ZommToXYTool = function(id, controlPrefix, map)     
{    	 	
	this._id = id;
	this._controlPrefix = controlPrefix;
	this._map = map;
	this._floatingPanel = $find(id);		
	this._units = "dd";
	
	$get(this._controlPrefix + "_btnSubmit").onclick = Function.createDelegate(this, this._submit);
	this._unitOptions = $get(this._controlPrefix + "_unitOptions");
	this._unitOptions.onchange = Function.createDelegate(this, this._setUnits);
};

ZommToXYTool.prototype = 
{	
	/***************************************************************************************************
	/ public Methods
	/**************************************************************************************************/
			
	show: function(){
		floatingPanelManager.closeAll();
		this._floatingPanel.open();
	},
	
    /***************************************************************************************************
	/ Private Methods
	/**************************************************************************************************/

	_setUnits: function(){		
		this._units = this._unitOptions.options[this._unitOptions.selectedIndex].value;
		switch(this._units)
		{
			case "dd":
				$get(this._controlPrefix + "_dms_container").style.display = "none";
				$get(this._controlPrefix + "_dd_container").style.display = "";
				$get(this._controlPrefix + "_mu_container").style.display = "none";
				break;
			case "dms":
				$get(this._controlPrefix + "_dms_container").style.display = "";
				$get(this._controlPrefix + "_dd_container").style.display = "none";
				$get(this._controlPrefix + "_mu_container").style.display = "none";
				break; 
			case "mu":
				$get(this._controlPrefix + "_dms_container").style.display = "none";
				$get(this._controlPrefix + "_dd_container").style.display = "none";
				$get(this._controlPrefix + "_mu_container").style.display = "";
				break;    
		}
	},
	
	_submit: function(){		
		switch(this._units)
		{
			case "dms":
				var latDeg = parseInt($get(this._controlPrefix + "_latDeg").value);
				var latMin = parseInt($get(this._controlPrefix + "_latMin").value);
				var latSec = parseFloat($get(this._controlPrefix + "_latSec").value);
				var latQuad = $get(this._controlPrefix + "_latQuad").value;
				var longDeg = parseInt($get(this._controlPrefix + "_longDeg").value);
				var longMin = parseInt($get(this._controlPrefix + "_longMin").value);
				var longSec = parseFloat($get(this._controlPrefix + "_longSec").value);
				var longQuad = $get(this._controlPrefix + "_longQuad").value;
	        		
				if(isNaN(latDeg) || isNaN(latMin) || isNaN(latSec) || isNaN(longDeg) || isNaN(longMin) || isNaN(longSec)){
					alert("Invalid");
					return;
				}
	        	
	        	var x = MapsDirect.Converter.toDecimalDegrees(longDeg, longMin, longSec, longQuad);
				var y = MapsDirect.Converter.toDecimalDegrees(latDeg, latMin, latSec, latQuad);
				MapsDirect.Web.Script.Services.ProjectToMapPoint(this._map.get_spatialReference(), {x:x, y:y}, Function.createDelegate(this, this._processRequest));
				break;
			case "dd":
				var y = parseFloat($get(this._controlPrefix + "_ddLatDeg").value);
				var x = parseFloat($get(this._controlPrefix + "_ddLongDeg").value);

				if(isNaN(y) || isNaN(x)){
					alert("Invalid");
					return;
				}
	        	
				MapsDirect.Web.Script.Services.ProjectToMapPoint(this._map.get_spatialReference(), {x:x, y:y}, Function.createDelegate(this, this._processRequest));
				break;
			case "mu":
				var x = parseFloat($get(this._controlPrefix + "_x").value);
				var y = parseFloat($get(this._controlPrefix + "_y").value);				

				if(isNaN(y) || isNaN(x)){
					alert("Invalid");
					return;
				}
	        	this._map.zoomToScale(2000, {x:x, y:y});
				break;    
		}
	},
	
	_processRequest: function(executor, eventArgs){			
		var response = parseWebRequest(executor);
		if(response.isError)
		{
			alert(response.get_message());
			return;
		}	
		this._map.zoomToScale(2000, {x:response.x, y:response.y});
	}
};
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();