
/**
* Сохраняет заданную форму.
* @param String container_id контейнер в котором находится форма.
* @param String state_config_file путь к конфигурационному файлу стейта
* @param String action имя экшена
* @param Object button_elem элемент, на котором висит вызов onclick
* @param Function callback_function функция, которая вызывается сразу же после того как посылается ajax-запрос
* @param String preloader_container_id контейнер для прелоадера
*
*/
function save_form(
        container_id,
        state_config_file,
        action,
        button_elem,
        callback_function, 
        preloader_container_id,
        ajax_callback
    )
{
    if (button_elem) {
        button_elem.disabled = true;
    }


    display_message(container_id+'.message', 'Изменения применяются...');

    observer.fireEvent('form.save');

    var params = get_input_values(container_id);

    if (!params) {
        if (button_elem) {
            button_elem.disabled = false;
        }
        return false;
    }

    if (hydra.is_string(action)) {
        params['s_action'] = action;
    }
    else {
        var rec_id = dictionary_get_rec_id_value(container_id);
        if (rec_id > 0) {
            params['s_action'] = 'update';
        }
        else {
            params['s_action'] = 'insert';
        }
    }

    

    var state_plugin_name = false;
    if (state_config_file) {
        params['s_file_name'] = state_config_file;
        state_plugin_name = 'state';
    }
    else {
        state_plugin_name = 'simple_state';
    }

    // Вызов стейта.
    call_ajax(state_plugin_name, container_id, params, false, preloader_container_id, ajax_callback);
    

    

    if (callback_function)
        callback_function();
}

/**
* Загружает форму, вызывая заданный плагин в заданный контейнер.
* @param String dict_plugin_id идентификатор контейра, в котором рассположен справочник.
* @param String form_plugin_id идентификатор плагина формы, которую нужно запустить
* @param String form_container идентификатор контейнера, в который нужно запустить плагин формы
*/
function dictionary_load_form(form_plugin_id, form_container_id, rec_id, grid_plugin_name)
{
    var params = new Array();
    
 
    // Проверяем а есть ли у нас дополнительные параметры
    if (hydra.get(grid_plugin_name+'.extend_params')) {
        params = get_input_values(grid_plugin_name+'.extend_params');
    }

    if (rec_id != undefined)
    {
        if (rec_id)
            params['i_rec_id'] = rec_id;
    }

    return call_ajax(form_plugin_id, form_container_id, params);
}

function dictionary_get_selected_record(dictionary_container_id)
{
	var dictionary_elem = document.getElementById( dictionary_container_id );
	if (!dictionary_elem)
	{
		return false;
	}

	var collection = dictionary_elem.getElementsByTagName('input');
	if (collection) 
	{
		for (i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='checkbox')
			{
				if (collection[i].checked)
				{
					return collection[i].value;
				}
			}
		}

		return false;
	}
}

/**
* Определеяет значение rec_id элемента.
* @param String container_id контейнер, в котором может находиться элемент rec_id.
* @return int || bool
*/
function dictionary_get_rec_id_value(container_id)
{
	var elem = document.getElementById( container_id );
	if (!elem)
	{
		return false;
	}

	var collection = elem.getElementsByTagName('input');
	if (collection) 
	{
		for (i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='hidden')
			{
				if (collection[i].name == 'i_rec_id')
				{
					return collection[i].value;
				}
			}
		}

		return false;
	}
}

function dictionary_get_selected_records(container_id)
{
	var elem = document.getElementById( container_id );
	if (!elem)
	{
		return false;
	}

	var collection = elem.getElementsByTagName('input');
	if (collection) 
	{
		var index = 0;
		var recs = new Array();
                var s_recs = new Array();
		for (var i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='checkbox')
			{
				if (collection[i].checked)
				{
					recs['a_recs['+index+']'] = collection[i].value;
                                        s_recs.push(collection[i].value);
					index++;
				}
			}
		}
                recs['s_recs'] = s_recs.join(",");
		return recs;
	}
}

/**
 *  Загружает плагин формы в заданный контейнер.
 *  @params String plugin_name имя плагина
 *  @params String container_id контейнер, в который нужно загрузить форму
 *  @params int rec_id идентификатор записи
 */
function load_form(plugin_name, container_id, rec_id)
{
    var params = new Array();
    params ['i_rec_id'] = rec_id;

	call_ajax(plugin_name, container_id, params);
}


/**
* Удаляет выбранные записи в рамках заданного контейнера справочника согласно инструкциям
* заданным в state_config_file.
* @params String container_id контейнер, в рамках которого будет происходить удаление.
* @params String state_config_file путь к конфигурационном файлу стейта.
*/
function dictionary_delete_records(container_id, state_config_file)
{
    if (!confirm_delete()) {
        return false;
    }
    
    var plugin_name = 'state';
    
    var params = dictionary_get_selected_records(container_id);
    //params['s_recs'] = params.join(",");
    params ['s_action'] = 'delete';

    // Проверяем а есть ли у нас дополнительные параметры
    if (hydra.get(container_id+'.extend_params')) {
        var ext_params = get_input_values(container_id+'.extend_params');

        for(var key in ext_params) {
            params[key] = ext_params[key];
        }
    }

    if (state_config_file) {
        params['s_file_name'] = state_config_file;
    }
    else {
        plugin_name = 'simple_state';
    }

    call_ajax(plugin_name, container_id, params);
}

/**
 * Удаление одиночной записи.
 * @param int rec_id идентификатор записи
 * @param String state_config_file путь к файлу конфируграции стейта
 * @param Stering container_id идентификатор контейнера
 */
function dictionary_delete_record(rec_id, state_config_file, container_id, btn)
{
    if (!confirm_delete()) {
        return false;
    }

    if (btn) {
        btn.disabled = true;
    }
    
    var params = new Array();
    params ['s_action'] = 'delete';
    params['s_file_name'] = state_config_file;
    params['i_rec_id'] = rec_id;

    call_ajax('state', container_id, params);

    if (btn) {
        btn.disabled = false;
    }
}