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


(function($, undefined) {


	$.widget("gcTool.redline", $.gcTool.drawFeature, {

		widgetEventPrefix: "redline",

		options: {
			label: OpenLayers.i18n('Redline'),
			icons: {
				primary: 'redline' // TODO: choose better name
			},
			text: false,
			geometryType: 'line',
			feature: null,
			redlineDialogDiv: null,
			controls: {}
		},

		_create: function() {
			var self = this;

			$.gcTool.drawFeature.prototype._create.apply(self, arguments);
			
			var vectorLayer = gisclient.componentObjects.gcLayersManager.getEditingLayer();
			
			self.options.controls.text = new OpenLayers.Control.DrawFeature(vectorLayer, OpenLayers.Handler.Point);
			self.options.controls.text.events.register("featureadded", self, self._openDialog);
			
			gisclient.map.addControl(self.options.controls.text);
			
			var style = vectorLayer.styleMap;
			var rule = {1: {fillColor:'rgb(255,255,255)',label:"${text}"}};
			style.addUniqueValueRules("default","redline",rule);

		},
		
		_click: function(event) {
			var self = event.data.self;
			
			$.ui.gcTool.prototype._click.apply(self, arguments);

			var dialog = gisclient.componentObjects.editingDialog;
			dialog.toggleTool('redline');
			dialog.openDialog();
			
			$('#editing_type').append('<option value="text">'+OpenLayers.i18n('Text')+'</option>');//LANG

			self._trigger( "click", event, self._getUIHash() );
			
		},
		
		_openDialog: function(event) {
			var self = this;
			self.options.feature = event.feature;
			// open a dialog to let user type text
			$('#'+self.options.redlineDialogDiv).html('<textarea name="redline_text" id="redline_text"></textarea><br />');
			$('#'+self.options.redlineDialogDiv).dialog({
				draggable: true,
				title: OpenLayers.i18n('Text'),
				buttons: [{
					text: "Ok",
					click: function() {
						$(this).dialog("close").trigger('close');
					}
				}]
			});
			$('#'+self.options.redlineDialogDiv).bind('close',{self:self},self._handleFeature); // when the user click "OK", handle the feature drawn
		},
		
		_handleFeature: function(event) {
			// if this function is called from the control, get self from this. Otherwise, it is called when the dialog is closed so self is in event.data
			if(typeof(event.data) != 'undefined') var self = event.data.self; else var self = this;
			if(!self.options.controls.text.active) { // redline case (user drown a geometry)
				// get the feature from the event object (function called by drawfeature control)
				self.options.feature = event.feature;
			} else { // text case (user wants to add text)
				self.options.feature.attributes.text = $('#redline_text').val();
			}
			self.options.feature.attributes.redline = 1; // set an attribute to distinguish redline features from other drawn features
			var vectorLayer = gisclient.componentObjects.gcLayersManager.getEditingLayer();
			vectorLayer.drawFeature(self.options.feature);
		},
		
		_checkFeature: function(event) {
			if(event.feature.attributes.redline != 1) OpenLayers.Event.stop(event);
		}

	});

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