//Функции, предназначенные для локальной навигации
var uriBase = 'http://' + window.location.host;

var ErrorTextSelectRow = "Необходимо выделить строку таблицы";

//Для таблицы данных

//Таблица с данными
var oTable;
//Текущая позиция в таблице с данными
var oTableCurrentPosition;

//Установка текущей позиции в таблице данных (если все данные загружаются на клиент)
function SetCurrentRow(idFromDbParam) {
    var id = Number(idFromDbParam);
    var trs = oTable.fnGetNodes();
    for (var i = 0; i < trs.length; i++)
    {
        var x = trs[i];
        var obj = oTable.fnGetData(x);
        var NumId = Number(obj.id);
        //Если найдена строка id данных которой совпадает с параметром
        if (NumId == id) {
            //Выделение строки
            $(x).addClass('row_selected');
            //Сохранение текущей позиции
            oTableCurrentPosition = oTable.fnGetPosition(x);
            //Текущая запись будет видимой
            oTable.fnDisplayRow(oTable.fnGetNodes()[oTableCurrentPosition]);
        }
    }
}

//Установка текущей позиции в таблице данных (если данные загружаются постранично с сервера)
function SetCurrentRowServerPage(idFromDbParam)
{
    var id = Number(idFromDbParam);
    var trs = oTable.fnGetNodes();
    for (var i = 0; i < trs.length; i++)
    {
        var x = trs[i];
        var obj = oTable.fnGetData(x);
        var NumId = Number(obj.id);
        //Если найдена строка id данных которой совпадает с параметром
        if (NumId == id) {
            //Выделение строки
            $(x).addClass('row_selected');
            //Сохранение текущей позиции
            oTableCurrentPosition = oTable.fnGetPosition(x);
            //Текущая запись будет видимой (клиентская разбивка на страницы в случае сервера приводит к зависанию)
            //oTable.fnDisplayRow(oTable.fnGetNodes()[oTableCurrentPosition]);
        }
    }
}

//Получение id выделенного элемента в таблице данных
function GetCurrentRowId() {
    if (oTableCurrentPosition == null) {
        return null;
    }
    else {
        var obj = oTable.fnGetData(oTableCurrentPosition);
        return new String(obj.id);
    }
}

//Открытие гиперссылки в текущем окне
function OpenCurrentWindow(resUri) {
    window.location.href = resUri;
}

//Открытие гиперссылки в новом окне
function OpenNewWindow(resUri) {
    window.open(resUri);
}

//Формирование гиперссылки
function CreateLinkWithParams(baseUriParam, idParam, arrayParamNames, arrayParamValues) {
    //Результат содержит базовую часть гиперссылки
    var Result = baseUriParam;
    //Только если длины массивов параметров совпадают
    if(arrayParamNames.length == arrayParamValues.length)
    {
        //Если задан id
        if (idParam != null)
        {
            Result = Result + '/' + idParam;
        }

        //Если заданы параметры
        if(arrayParamNames.length > 0)
        {
            for(var i=0; i<arrayParamNames.length; i++)
            {
                //Добавление разделителя
                if (i == 0)
                {
                    Result = Result + '?';
                }
                else
                {
                    Result = Result + '&';
                }

                //Добавление текущего параметра
                var k = new String(arrayParamNames[i]);
                var v = new String(arrayParamValues[i]);

                Result = Result + k + '=' + v;
            }
        }

        return Result;
    }
}


//Правила по открытию заданных элементов

//Создание новой записи с необязательным выделенным элементом
function ActionCreateWithDtid(uriCreateBase, pn, pv) {
    //Текущая выделенная строка в списке
    var CurrentRowId = GetCurrentRowId();
    if (CurrentRowId != null) {
        //Если выделена текущая строка, она сохраняется в сессионной переменной
        pn.push('dtid');
        pv.push(CurrentRowId);
    }
    //Сформированная гиперссылка
    var resUri = CreateLinkWithParams(uriCreateBase, null, pn, pv);

    //Открытие в текущем окне
    OpenCurrentWindow(resUri);
}

//Действия для выделенной записи в таблице данных
function ActionWithId(baseUriParam, flagNewWindow) {
    var id = GetCurrentRowId();
    if (id == null) {
        alert(ErrorTextSelectRow);
    }
    else {
        //Формирование гиперссылки
        var resUri = CreateLinkWithParams(baseUriParam, id, [], []);

        //Открытие в текущем или новом окне
        if (flagNewWindow != null) {
            //Открытие в новом окне
            OpenNewWindow(resUri);
        }
        else {
            //Открытие в текущем окне
            OpenCurrentWindow(resUri);
        }
    }
}

//Изменение порядка следования записей
function ActionChangeOrder(baseUriParam, dParam) {
    var CurrentRowId = GetCurrentRowId();
    if (CurrentRowId != null) {
        //Формирование гиперссылки
        var resUri = CreateLinkWithParams(baseUriParam, null, ['d', 'id'], [dParam, CurrentRowId]);

        //Открытие в текущем окне
        OpenCurrentWindow(resUri);
    }
    else
    {
        alert(ErrorTextSelectRow);
    }
}