/**
 * @author Bruno 'Shine' Figueiredo @ http://brunofigueiredo.com
 * @version 0.7
 */

var editInPlace = new Class({});

editInPlace.implement({
    element:null,
    editElementDiv:null,
    editElementTextArea:null,
    editElementSubmit:null,
    editElementCancel:null,
    isEditing:false,
    originalBgColor:"#fff",
	hoverColor:'#ff8',
	
    initialize: function(element)
    {
        this.element=$(element).set({events:{
			'click': this.onClick.bind(this,[element]),
			'mouseover':this.onMouseHandler.bind(this),
			'mouseout':this.onMouseHandler.bind(this)}
		});
		this.originalBgColor=this.element.getStyle("background-color");
    },
	
	onMouseHandler:function(event)
	{
		if (this.originalBgColor=="transparent")return;
		new Fx.Styles(this.element, {duration:200, wait:false}).start({
			'background-color':(event.type=="mouseover")?this.hoverColor:this.originalBgColor
		});
	},
    
    onClick: function(event, triggerElement)
    {
        if (!this.editElementDiv){this.buildEditor(triggerElement);}
        this.editElementInput.set('value',this.element.get('text'));
		//this.editElementTextArea.set('text',this.element.get('text'));
        this.changeMode(true);
    },
    
    onClickSubmit: function(event, triggerElement)
    {
        this.changeMode(false);
        this.element.set('text',this.editElementInput.get('value'));
        //this.element.set('text',this.editElementTextArea.get('value'));
		this.fireEvent('onCompleted', [this.element, this.element.get('text')]);
    },
    
    onClickCancel: function(event, triggerElement)
    {
        this.changeMode(false);
		this.fireEvent('onCanceled', [this.element, this.element.get('text')]);
    },
    
    changeMode: function(isEditable)
    {
		this.fireEvent('onModeChange', isEditable);
		var action=isEditable?"addClass":"removeClass";
		this.element[action]('editMode');
        this.editElementDiv[action]('editMode');
    },
        
    buildEditor: function(htmlElement)
    {
        this.editElementDiv = new Element("div",{'class': 'eip'});
        this.editElementInput=new Element("input",{'type':'text'});
        //this.editElementTextArea=new Element("textarea",{'class':'editable_textarea'});
        //this.editElementSubmit=new Element("span",{'type':'button','class':'save'}).setText("Save").addEvent('click', this.onClickSubmit.bind(this,[htmlElement]));;           
        //this.editElementCancel=new Element("span",{'type':'button','class':'cancel'}).setText("Cancel").addEvent('click', this.onClickCancel.bind(this,[htmlElement]));
        //this.editElementDiv.adopt([this.editElementTextArea,this.editElementSubmit,this.editElementCancel]);
        //this.editElementDiv.adopt([this.editElementTextArea]);
        this.editElementDiv.adopt([this.editElementInput]);
        this.editElementDiv.injectBefore(htmlElement);
    }
    
});

editInPlace.implement(new Events);