(function(){
	var _config				=	null;
	var _is_started			=	false;
	var _list_xml_actions	=	new Array();
	var _list_html_node		=	new Array();

	function _manage_parameter(setting){
		var config = {
			'time':				20000,
			'ajax_mode':		'POST',
			'ajax_type':		'text',
			'ajax_url':			'',
			'on_data_set':		null,
			'on_success':		null
		};
		
		if (_config == null)
		{
			if (setting)
			{
				$.extend(config, setting);
			}
				
			_config = config;
		}
	}
	
	function _start(){
		if (_is_started == false)
		{
			_is_started = true;
			_launch_loop();
		}
		return this;
	}
	
	function _stop(){
		if (_is_started == true)
		{
			_is_started = false;
		}
		return this;
	}
	
	function _toogle(){
		if (_is_started == true)
		{
			_is_started = false;
		}
		else
		{
			_is_started = true;
			_launch_loop();
		}
	}
	
	function _set(key, value){
		if (_config[key])
		{
			_config[key] = value;
		}
		return this;
	}
	
	function _get(key){
		if (_config[key])
		{
			return _config[key];
		}
		if (key == "nb_node")
		{
			return _list_xml_actions.length;
		}
		if (key == "nb_elt")
		{
			return _list_html_node.length;
		}
	}
	
	function _launch_loop(){
		if (_is_started == false)
		{
			return;
		}
		
		var ajax_data = (_config['on_data_set']) ? _config['on_data_set']() : "";
		
		$.ajax({
			type: 		_config['ajax_mode'],
			url: 		_config['ajax_url'],
			data: 		ajax_data,
			dataType: 	_config['ajax_type'],
			success: 	function(data, textStatus){
				if (_list_xml_actions.length > 0)
				{
					_execute_custom_xml_actions(data);
				}
				if (_list_html_node.length > 0)
				{
					_execute_custom_html_nodes(data);
				}
				if (_config['on_success'])	
				{
					_config['on_success'](data);
				}
			}
		});
		
		setTimeout("$.arte().launch()", _config['time']);
	}
	
	function _execute_custom_xml_actions(data_xml){
		for (i = 0; i < _list_xml_actions.length; i++)
		{
			$(data_xml).find(_list_xml_actions[i].node_name).each(function(){
				if (_list_xml_actions[i].fct)
				{
					_list_xml_actions[i].fct(this);
				}
			});
		}
	}
	
	function _execute_custom_html_nodes(data_xml){
		for (i = 0; i < _list_html_node.length; i++)
		{
			$(data_xml).find(_list_html_node[i].node_name).each(function(){
				$(_list_html_node[i].elt).text($(this).text());
			});
		}
	}
	
	function _add_custom_xml_actions(node_name, fct){
		for (i = 0; i < _list_xml_actions.length; i++)
		{
			if (_list_xml_actions[i].node_name == node_name)
			{
				return this;
			}
		}
		
		_list_xml_actions.push(new _XmlItem(node_name, fct));
		return this;
	}
	
	function _del_custom_xml_actions(node_name){
		var newtab = new Array();
		for (i = 0; i < _list_xml_actions.length; i++)
		{
			if (_list_xml_actions[i].node_name != node_name)
			{
				newtab.push(_list_xml_actions[i]);
			}
		}
		_list_xml_actions = newtab;

		return this;
	}

	$.arte = (function(settings){
		_manage_parameter(settings);
		
		return {
			start:			_start,
			is_started:		_is_started,
			stop:			_stop,
			toogle:			_toogle,
			set:			_set,
			get:			_get,
			launch:			_launch_loop,
			add_action:		_add_custom_xml_actions,
			del_action:		_del_custom_xml_actions
		};
	});
	
	$.fn.arte = (function(node_name){
		this.each(function(){
			if (node_name)
			{
				var is_in = false;
				for (i = 0; i < _list_html_node.length; i++)
				{
					if (_list_html_node[i].elt == this)
					{
						is_in = true;
					}
				}
				if (is_in == false)
				{
					_list_html_node.push(new _HtmlAuto(this, node_name));
				}
			}
			else
			{
				var newtab = new Array();
				for (i = 0; i < _list_html_node.length; i++)
				{
					if (_list_html_node[i].elt != this)
					{
						newtab.push(_list_html_node[i]);
					}
				}
				_list_html_node = newtab;
			}
		});
	
		return this;
	});
	
	function _XmlItem(node_name, fct){
		this.node_name = node_name;
		this.fct = fct;
	}
	
	function _HtmlAuto(elt, node_name){
		this.elt = elt;
		this.node_name = node_name;
	}
})(jQuery);
