/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


(function($, undefined) {


	$.widget("gcTool.measureLine", $.ui.gcTool, {

		widgetEventPrefix: "measureLine",

		options: {
			label: OpenLayers.i18n('Measure line'),
			icons: {
				primary: 'ruler' // TODO: choose better name
			},
			text: false,
			last_point: null,
			units: null,
			targetDiv: null,
			targetPartialDiv: null
		},

		_create: function() {
			var self = this;

			$.ui.gcTool.prototype._create.apply(self, arguments);

			// create control and add to map
			self.options.control = new OpenLayers.Control.Measure(OpenLayers.Handler.Path, {
				persist: true
			});
			self.options.control.events.register('measure', self, self._handleMeasurements);
			self.options.control.events.register('measurepartial', self, self._handleMeasurements);
			self.options.control.events.register('activate', self, self._addPartialMeasurementHandler);
			self.options.control.events.register('deactivate', self, self._removePartialMeasurementHandler);
			
			gisclient.map.addControl(self.options.control);
		},
		
		_deactivate: function() {
			var self = this;
			
			$('#'+self.options.targetPartialDiv).empty();
			$('#'+self.options.targetDiv).empty();
		},
		
		_addPartialMeasurementHandler: function(event) {
			var self = this;
			
			gisclient.map.events.register('mousemove', self, self._handlePartialMeasurement);
		},
		
		_removePartialMeasurementHandler: function(event) {
			var self = this;
			
			gisclient.map.events.unregister('mousemove', self, self._handlePartialMeasurement);
			$('#'+self.options.targetPartialDiv).empty();
		},

		_handleMeasurements: function(event) {
			var self = this;
			var geometry = event.geometry;
			var segments = geometry.getSortedSegments();
			var last_segment = segments[segments.length-1];
			var units = event.units;
			self.options.last_point = new OpenLayers.Geometry.Point(last_segment.x2, last_segment.y2);
			self.options.units = units;
			
			var html = OpenLayers.i18n('Length')+' '+ event.measure.toFixed(3) + " " + units;//LANG
			
			$('#'+self.options.targetDiv).html(html);
		},
		
		_handlePartialMeasurement: function(event) {
			var self = this;
			if(self.options.last_point != null) {
				var pixel = event.xy;
				var point = gisclient.map.getLonLatFromPixel(pixel);
				var distance = self.options.last_point.distanceTo(new OpenLayers.Geometry.Point(point.lon, point.lat));
				distance = (distance/1000).toFixed(3);
				$('#'+self.options.targetPartialDiv).html(OpenLayers.i18n('From last point')+' '+distance+' '+self.options.units);//LANG
			}
		}
	});

	$.extend($.gcTool.measureLine, {
		version: "3.0.0"
	});
})(jQuery);
