
/**
* Сохраняет заданную форму.
* @param String container_id контейнер в котором находится форма.
* @param String state_config_file путь к конфигурационному файлу стейта
* @param String action имя экшена
* @param object button_elem кнопка, которую нажимают
*/
function save_form(container_id, state_config_file, action, button_elem, callback_function)
{
    if (button_elem) {
        button_elem.disabled = true;
    }

    draw_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 (action == undefined)
    {
        var rec_id = dictionary_get_rec_id_value(container_id);
        if (rec_id > 0)
        {
                params['s_action'] = 'update';
        }
        else
        {
                params['s_action'] = 'insert';
        }
    }
    else
    {
        params['s_action'] = action;
    }

        
    params['s_file_name'] = state_config_file;
    call_ajax('state', container_id, params);

    

    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)
{
	var params = new Array();
	if (rec_id != undefined)
	{
		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();
		for (var i = 0; i < collection.length; i++) 
		{
			if (collection[i].type=='checkbox')
			{
				if (collection[i].checked)
				{
					recs['a_recs['+index+']'] = collection[i].value;
					index++;
				}
			}
		}

		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 params = dictionary_get_selected_records(container_id);
	params ['s_action'] = 'delete';
	params['s_file_name'] = state_config_file;

	call_ajax('state', 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;
    }
}