/**
 * options{
 * 	extract:function
 *  update:function
 * }
 */
var FeildEditModule=MapItemModule.extend({
	title:"Description",
	message:"Enter a new value for this field",	
	parameter:"description",
	wysiwyg:false,
	d:
	{
	width:"98%",
	height:"7em"
	},
	extract:function()
	{
		//should be overriden for custom items
		var me=this;
		var value=MapFactory.GetItemParameter(me.item, me.parameter);
		mm_debug(["Extract",{'value':value, 'item':me.item, 'parameter':me.parameter}]);
		return value;
	},
	update:function(){
		//should be overriden for custom items
		var me=this;
		if(me.entryMessage.verify()){
			MapFactory.EditItemParameter(me.item, me.options.parameter?me.options.parameter:me.parameter, me.getValue(),{});
		}
	},
	getValue:function(){
		var me=this;
		//entryMessage is generated in the input function.
		if(me.entryMessage)return me.entryMessage.el.value;
		return "";
	},
	input:function(){
		var me=this;
		
		me.options.width=me.options.width||me.d.width;
		me.options.height=me.options.height||me.d.height;
		me.options.extract=(me.options.extract||me.extract).bind(me); //had lost it's this reference
		
		var inputContainer=new Element('div', {'class':me.options.className||"TextEntryModule_Content"});
		var inputTitle=new Element('div',{'class':'textEntryModule_Title'});
		var inputText=new Element('textarea',{'class':'textEntryModule_TextArea',style:"width:"+me.options.width+"; height:"+me.options.height+";"});
		var t="Feild";
		var title=me.options.title?me.options.title:me.title;
		if(title){
			if($type(title)=='function')t=title(); //allow title to be generated dynamically. 
			if($type(title)=='string')t=title;
		}
		inputTitle.setText(t);
		var m=me.options.message?me.options.message:(me.message||"");
		if($type(m)=='function')m=m(); //allow message to be generated dynamically. 

		me.entryMessage=new TextAreaMessage(inputText,{allowEmpty:$defined(me.options.allowEmpty)?me.options.allowEmpty:true, message:m});
		var currentValue=me.options.extract();
		if(currentValue){
			me.entryMessage.options.onFocus(me.entryMessage); //makes textarea text go black.
			me.entryMessage.el.value=currentValue;
		}
		inputContainer.appendChild(inputTitle);
		inputContainer.appendChild(inputText);		
		return inputContainer;
	},
	process:function(){		
		var me=this;
		me.input().injectInside(me.node); 


		var updateFunction=function(){
			me.options.update?me.options.update():me.update();
		};
		//me.entryMessage.el.addEvent('mouseout', updateFunction); 
		//me.entryMessage.el.addEvent('change', updateFunction);
		me.viewer.eventInstance.addEvent('onSave', updateFunction); //happens before saving
		me.viewer.eventInstance.addEvent('onClose', updateFunction); //happens before closing

		me.fireEvent('onLoad'); //must fire this or info-window will stall until timeout (6 sec)
	}
});



var MooEditorModule=MapItemModule.extend({
	process:function(){
		var me=this;
		me.fireEvent('onLoad');
		me.Editor=new AdvancedMooEditor($merge({container:me.node}, $merge({tip:"click to add an image"},me.options)));
		if(me.options.onUpdate){
			me.viewer.eventInstance.addEvent('onSave', me.options.onUpdate); //happens before saving
			me.viewer.eventInstance.addEvent('onClose', me.options.onUpdate); //happens before closing
		}
		
	},
	getValue:function(){
		var me=this;
		return me.Editor.getValue();
	}
	
	
	
	
	
	
});


