
/**
 * Вызов плагина через Ajax.
 * 
 * @access public	
 * @param string plugin_name имя плагина
 * @param string container_id контейнер, куда загружать результат выполнения плагина
 * @param array params параметры плагина
 * @param string custom_url кастомный url для запуска плагина
 * @return void
*/

function call_ajax(plugin_name, container_id, params, custom_url)
{
    if (params=='undefined')
    {
            params = new Array();
    }

    var ajax = new cAjaxRequest();
    ajax.init();

    // Формируем callback-функцию ответа ajax
    call_back = function()
    {
        // Если ajax-запрос завершился успешно.
	if (ajax.is_success())
	{
            // В начале пробуем получить ответ в виде xml-документа.
            var xml_doc = ajax.get_response_xml();
			
            if (typeof(xml_doc)=='object')
            {
                var xml_doc_root = xml_doc.documentElement;
                if (xml_doc_root)
                {
                    // Если у нас есть контейнер куда помещать результат.
                    if (container_id != false)
                    {
                        var html_result_node = xml_doc_root.getElementsByTagName('html_result');
                        if (html_result_node)
                        {
                            if (html_result_node[0])
                            {
                                var html_result = html_result_node[0].firstChild.data;
                                if (html_result)
                                {
                                    var container = document.getElementById(container_id);
                                    if (container)
                                    {
                                        if(html_result!='')
                                        {
                                            // ���� � ��� ��������� ��������� ���������� ����� �������
                                            if (container.getAttribute('replace')=='false')
                                            {
                                                container.innerHTML = html_result;
                                            }
                                            else
                                            {
                                                // Dorian - временно включил outer html
                                                //container.outerHTML = html_result;
                                                if (typeof(container.outerHTML) != 'undefined')
                                                {
                                                    //container.outerHTML = html_result;
                                                    container.innerHTML = html_result;
                                                }
                                                else
                                                {
                                                    container.innerHTML = html_result;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }


                    // Работа с JSON.
                    var json_result_node = xml_doc_root.getElementsByTagName('json_result');
                    if (json_result_node)
                    {
                        if (json_result_node[0])
                        {
                            // Извлекаем json-последовательность.
                            var json_result = json_result_node[0].firstChild.data;
                            // Получаем объект json, который потом можем использовать в обработке javascript-вызова.
                            if (json_result!="")
                                var json = eval( "(" + json_result + ")" );
                        }
                    }

                    // Обработка javascript
                    var java_script_result_node = xml_doc_root.getElementsByTagName('java_script_result');
                    if (java_script_result_node)
                    {
                        if (java_script_result_node[0])
                        {
                            var java_script_result = java_script_result_node[0].firstChild.data;
                            eval(java_script_result);
                        }
                    }
					
									
                }
                else
                {
                    var container = document.getElementById(container_id);
                    if (container)
                    {
                        container.innerHTML = ajax.get_response_text();
                    }
                }

        }
			

			delete ajax;
			delete call_back;


		}
	}
		 
	var url = PROJECT_URL + "ajax.php?&s_main_plugin_name="+plugin_name;
        if (custom_url != undefined) {
            url = HYDRA_ROOT_URL + custom_url;
        }

	// �������������� ���������� � ������ � ������ ���� ��� ��� ������ ������
	/*if (typeof(params)=='object')
	{
		url = url + arr_to_string(params);
	}*/

    // preloader
    /*var elem = document.getElementById(container_id);
    if (elem)
        elem.innerHTML = '<img src="'+HYDRA_ROOT_URL+'_core/i/preloader.gif"/>';*/

    ajax.call_url(url, arr_to_string(params), call_back, 'POST');
}

function arr_to_string(params)
{
	var vars = '';
	for (var HashKey in params) 
	{ 
	   param_name  = HashKey; 
	   param_value = params[HashKey];

	   vars += '&' + param_name + '=' + encodeURIComponent(param_value);
	} 

	return vars;
}


function get_plugin_body(obj)
{

	if (obj.tagName == 'body')
	{
		return false;
	}


	if (obj.getAttribute('plugin_name') == null)
	{
		return get_plugin_body(obj.parentNode);
	}
	else
	{
		return obj;
	}	
	

}

/**
 * function 
 * 
 * @access public	
 * @param 
 * @return 
*/

function reload_plugin(plugin_id) 
{
	
	var plugin_body = document.getElementById(plugin_id);

	var attrs = plugin_body.attributes;

	var params = new Array();
	for(var i = attrs.length-1; i>=0; i--) {
		if(attrs[i].value != 'null') 
		{
			params[attrs[i].name] = attrs[i].value;
		}
	}

	call_ajax(params['plugin_name'], plugin_id, params); 

}

function run_content_plugin(plugin_name, params)
{
    call_ajax(plugin_name, 'content', params);
}