var editInPlace = new Class({
	options:{
		url:false,
		data:'',
		type:'input', // input OR textarea
		hover_css_class:false, // cssclass OR false
		valuekey:'value'
	},
 
	initialize:function(elemns,options){
		this.setOptions(options);
		this.elemns = elemns;
		this.elemns.each(function(el){
			//define id
			el.identifier = this.options.url && el.className.indexOf('id:')>-1 ? el.className.replace(/^.+:/,'').replace(/ .+$/,'') : false;
			//events
			el.addEvents({
				click:function(){
					if(el.getProperty('original')) return;
					//
					el.setProperty('original',el.innerHTML.trim().replace(/\n/g,' ')).empty();
					//
					var input = new Element(this.options.type,{
						events:{
							blur:function(){
								var current = input.getValue().trim().replace(/\n/g,' ').replace(/(<([^>]+)>)/ig,'');
									
								var original = el.getProperty('original');
								if(this.options.url && current!=original){
									var id = el.identifier ? '&id='+el.identifier : '';
									var data = this.options.data+id+'&'+this.options.valuekey+'='+current.replace(/&/,'%26');
									new Ajax(this.options.url,{data:data}).request();
									// alert(data) //<------| FOR TEST ONLY
								}
								//input.remove();
								if(this.options.type == 'input') el.removeProperty('original').setHTML(current);
								else if(this.options.type == 'select') el.removeProperty('original').setHTML(input.options[input.selectedIndex].innerHTML.trim().replace(/\n/g,' ').replace(/(<([^>]+)>)/ig,''));
							}.bind(this),
							//
							keydown:function(e){
								var event = new Event(e);
								if(event.key=='enter' || event.key=='tab' || event.key=='esc'){
									this.blur();
									return; // não funciona com opera 9 (tested: IE, Fx, Safari)
								}
							}
						}
					});	
					//adding options to select
					if(this.options.items){
						this.options.items.each(function(item){
							var option = new Element('option').setHTML(item.text).inject(input);
							alertmsg = 'item.text: '+item.text+'\noriginal: '+el.getProperty('original');
							if (item.text === el.getProperty('original')){
								alertmsg += '\nSELECTED!!';
								option.setProperty('selected','selected');
							}
//							alert(alertmsg);
							if(item.value) option.setProperty('value',item.value);
							else option.setProperty('value',item.text);
						});
					}
					input.setProperty('value',el.getProperty('original')).inject(el).focus()
				}.bind(this)
			});
			//on hover
			if(this.options.hover_css_class){
				el.addEvents({
					'mouseenter':function(){el.addClass(this.options.hover_css_class)}.bind(this),
					'mouseleave':function(){el.removeClass(this.options.hover_css_class)}.bind(this)
				})
			}
		}, this)
	}
 
});
 
editInPlace.implement(new Options);