function XTContent(id, tkn, saveAction) {
	var myObject = this;
	myObject.initialize(id, tkn, saveAction);
	return myObject;
}

XTContent.prototype = {

	initialize : function(id, tkn, saveAction) {
		this.alphanumericID = id;
		this.token = tkn;
		this.saveChangesActionURL = saveAction;
		var jDiv = jQuery('#' + this.alphanumericID);

		jDiv.bind('dblclick', this.enableContentEditable);

		var em = jDiv[0];
		jQuery.data(em, 'self', this);

	},
	disableContentEditable : function(theButton) {
		var div = theButton.parent();
		theButton.parent().find('.xt-cancel').remove();
		theButton.remove();
		var contentEditable = div.find('.xt-content-editable');
		contentEditable.toggleClass('active');
		contentEditable.attr('contenteditable', false);
		div.css('paddingTop', 0);
		div.bind('dblclick', this.enableContentEditable);
		contentEditable.find('a').unbind('click', this.disableLinks);
	},
	disableLinks : function(e) {
		e.preventDefault();
		e.stopImmediatePropagation();
		return false;
	},
	saveButton : function() {
		var j = jQuery('<a/>');
		j.bind('click', this.saveChangesAction);
		j.addClass('xt-button');
		j.addClass('xt-save');
		j.html('<span>Registra</span>');
		return j;
	},
	cancelButton : function() {
		var j = jQuery('<a/>');
		j.addClass('xt-button');
		j.addClass('xt-cancel');
		j.html('<span>Annulla</span>');
		j.bind('click', this.revertAction);
		return j;
	},
	revertAction : function(e) {
		var button = jQuery(this).parent().find('a.xt-save');
		var buttonEl = button[0];
		var obj = jQuery.data(buttonEl, 'json');
		var myObject = jQuery.data(buttonEl, 'self');
		var ref = jQuery.data(buttonEl, 'reference');
		ref.html(obj.theContent);

		myObject.disableContentEditable(button);
	},
	saveChangesAction : function(e) {
		var jQueryObject = jQuery(this);

		e.preventDefault();
		var r = jQuery.data(this, 'reference');
		var c = r.html();
		var myObject = jQuery.data(this, 'self');
		var obj = jQuery.data(this, 'json');
		var action = jQuery.data(this, 'action');
		var token = jQuery.data(this, 'token');

		obj.theContent = c;

		jQuery.ajax({
			type : 'POST',
			url : action,
			data : {
				'json' : obj.toString(),
				'token' : token
			},
			success : function(data) {
				window.status = data;
				myObject.disableContentEditable(jQueryObject);
			},
			error : function() {
				alert('Error!');
				myObject.disableContentEditable(jQueryObject);
			}
		});
	},
	enableContentEditable : function(e) {
		e.stopImmediatePropagation();
		/*var jDiv = jQuery(this);
		 var myObject = jQuery.data(this, 'self');
		 e.stopImmediatePropagation();
		 var contentEditable = jDiv.find('.xt-content-editable');
		 contentEditable.toggleClass('active');

		 var html = contentEditable.html();
		 contentEditable.attr('contenteditable', true);
		 var idXTContainer = jDiv.attr('rel');
		 var jsonObj = {
		 idXTContainer: idXTContainer,
		 theContent: html,
		 theContentSerialized: function(){
		 var v = this.theContent.replace(/"/g, '\\"');
		 v = v.replace(/\n/g, '');
		 v = v.replace(/\r/g, '');
		 return v;
		 },
		 toString: function(){
		 var id = parseInt(this.idXTContainer);
		 return '{"idXTContainer": ' + id + ' ,"theContent": "' + this.theContentSerialized() + '" }'
		 }
		 };
		 var sb = myObject.saveButton();
		 var saveButtonElement = sb[0];

		 jDiv.css('paddingTop', 22);
		 jQuery.data(saveButtonElement, 'self', myObject);
		 jQuery.data(saveButtonElement, 'reference', contentEditable);
		 jQuery.data(saveButtonElement, 'json', jsonObj);
		 jQuery.data(saveButtonElement, 'token', myObject.token);
		 jQuery.data(saveButtonElement, 'action', myObject.saveChangesActionURL);

		 jDiv.css('position', 'relative');
		 jDiv.append(sb);
		 jDiv.append(myObject.cancelButton());
		 jDiv.unbind('dblclick');
		 contentEditable.trigger('select');
		 contentEditable.find('a').bind('click', myObject.disableLinks);*/
		jQuery(this).ckeditor({toolbar : 'Basic'});
		
		return false;
	}
}
