var FORM_MANAGER_C_SUCCESS = 1;
var FORM_MANAGER_C_ERROR = 0;
var	FORM_MANAGER_MESSAGE_ID = "form_manager_message";
var	FORM_MANAGER_C_MESSAGE_TIME = 5;

var form_manager = {
	css_success: "success",
	css_error: "error",
	css_highlight: "highlight",
    effect_is_on: false,
	elem_hightlighted: null,
	last_show_effect:null,
	last_hide_effect:null,
	ajax_responded:function(ar, show_success_message)
	{        
		var	ret;
		var	field;
		var	message;
		ret = ar.get_obj();
		if (!ar.success())
		{
			if (ret.datas.errors.length > 0)
			{
				error_message = ret.datas.errors[0];
				this.display_message(FORM_MANAGER_C_ERROR, error_message, null, null);
			}
			if (ret.datas.fields.length > 0)
			{
				field = ret.datas.fields[0];
				this.display_message(FORM_MANAGER_C_ERROR, field['message'], field['field'], null);
			}
			return (false);
		}
		else
		{
			if (show_success_message && (ret.datas.messages.length > 0))
			{
				this.display_message(FORM_MANAGER_C_SUCCESS, ret.datas.messages[0]);
				if (ret.datas.url)
				{
					setTimeout(function () {
						window.location = ret.datas.url;
					}, (FORM_MANAGER_C_MESSAGE_TIME * 1000));
				}
			}
			else if (ret.datas.url)
			{
				window.location = ret.datas.url;
			}
			return (true);
		}
	},
	display_message:function(type, message, input_name, id_form)
	{
		var	elem;
		css = this.css_error;
		if (type == FORM_MANAGER_C_SUCCESS)
		{
			css = this.css_success;
		}
		this.update_message(css, message);
		if (input_name && (elem = this.get_element(input_name, id_form)))
		{
			this.highlight(elem);
		}
	},
	get_element:function(input_name, id_form)
	{
		var	selector;
		var	elem;

		selector = "form";
		if (id_form)
		{
			selector += "#"+id_form+" ";
		}
		selector += " [name='"+input_name+"']";
		elem = $$(selector).first();
		return (elem);
	},
	highlight:function(elem)
	{
        elem.addClassName(this.css_highlight);
        this.elem_hightlighted = elem;
        elem.observe('focus', form_manager.remove_highlight.bind(this));
	},
	remove_highlight:function()
	{
		this.elem_hightlighted.removeClassName(this.css_highlight);
		Event.stopObserving(this.elem_hightlighted, 'focus', this.remove_highlight.bind(this));
	},
	update_message:function(css, message)
	{
		var elem;
		var content;

		if ((elem = this._get_element()))
		{

			content = elem.firstDescendant();
		}
		if (content)
		{
			content.update(message);
			elem.className = css;
			this.show_error_success_message();
		}
	},
	show_error_success_message:function()
	{
		var	elem;
        if ((elem = this._get_element()))
        {
            new Effect.SlideDown(elem, {
                duration: 0.3,
                queue: { position: 'front', scope: 'myscope', limit: 2}
             });
            new Effect.SlideUp(elem, {
                duration: 0.3,
                delay:FORM_MANAGER_C_MESSAGE_TIME,
                queue: { position: 'end', scope: 'myscope', limit: 2}
            });             
        }		
	},
	_get_element:function()
	{
		var	elem;
		if ((elem = $(FORM_MANAGER_MESSAGE_ID)))
		{
			return (elem);
		}
		elem = new Element('div', {
		'id':FORM_MANAGER_MESSAGE_ID
		});        
        elem.setAttribute('onclick', 'form_manager.remove_error_success_message(this)');
		elem.insert(new Element('div'));
		elem.hide();
		$$('body').each(
			function (body)
			{
				body.insert(elem);
			}.bind(this));
		return (elem);
	},
    remove_error_success_message:function(elem)
    {
        if(elem)
        {
            elem.remove();    
        }            
    }
};

