function FirstEditor(form_name) {

	this.edit_button = null;
	this.edit_element = null;
	this.value_element = null;
	this.value = null;
	this.column = null;
	this.id = null;
	
	this.form_name = form_name;
	
	this.start = function(edit_button) {
		if (this.edit_button) {
			return false;
		}
	
		this.edit_button = $(edit_button);
		this.value_element = this.edit_button.next('div.editor_value');
		this.value = this.value_element.html();
		
		var column_id = this.value_element.attr('id').match(/(.*)_(\d+)$/);
		this.column = column_id[1];
		this.id = column_id[2];

		return this.build();
	}
	
	this.build = function() {
		
		var edit_element = '<input type="text" '
			+ ' id="' + this.getEditElementId() + '" '
			+ ' value="' + this.value + '" '
			+ ' onblur="editor.save(this)" '
			+ ' onkeypress="editor.control(event)" '
			+ ' class="edit_input" '
			+ ' />';
		this.value_element.html(edit_element);
		this.edit_element = $('#' + this.getEditElementId());
		
		$('#' + this.getEditElementId()).focus();
		
		return false;
	}
	
	this.getEditElementId = function() {
		return this.column + '_' + this.id + '_edit_element';
	}
	
	this.control = function(e) {
		switch (this.getKeyCode(e)) {
			case 13:
				this.edit_element.blur();
				break;
		}
		return false;
	}
	
	this.getKeyCode = function(e) {
		var keyCode;
		
		if (!e) {
			e = window.event;
		}
		
		if (e.keyCode) {
			keyCode = e.keyCode;
		} else if (e.which) {
			keyCode = e.which;
		}
		return keyCode;
	}
	
	this.save = function() {
		var new_value = this.edit_element.val();
		this.edit_element.hide();
		this.value_element.append('<img id="editor_loader" src="themes/img/loader.gif" alt="" />');
		
		if (new_value != this.value) {
			$.ajax({
				type: 'POST',
				url: window.location.href,
				data: this.form_name + '[' + editor.column +']=' + new_value
					+ '&' + this.form_name + '[id]=' + editor.id,
				success: function(r) {
					editor.value = new_value;
					editor.end();
				},
				error: function() {
					$('#editor_loader').remove();
					editor.edit_element.show();
					alert('Error');
				},
				dataType: 'script'
			});
		} else {
			this.value_element.html(this.value);
		}
		return false;
	}
	
	this.end = function() {
		this.value_element.html(this.value);
		this.edit_button = null;
		this.value_element = null;
		this.value = null;
		return false;
	}
}