var popupWinWidth = 750;
var popupWinHeight = 550;

var isOpera = (navigator.userAgent.indexOf("Opera") != -1)?true:false;
var isOpera5 = (navigator.appVersion.indexOf("MSIE 5") != -1 && navigator.userAgent.indexOf("Opera 5") != -1)?true:false;
var isOpera6 = (navigator.appVersion.indexOf("MSIE 5") != -1 && navigator.userAgent.indexOf("Opera 6") != -1)?true:false;
var isN6 = (navigator.userAgent.indexOf("Gecko") != -1);
var isN4 = (document.layers)?true:false;
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var isIE = (document.all && !isOpera && (!isMac || navigator.appVersion.indexOf("MSIE 4") == -1))?true:false;

var baseUrl = document.getElementsByTagName("base")[0].href;

var OBJECT_MODE = 0;
var FOLDER_MODE = 1;

var eframeName = "eattrFrame";
var eformName = "eattrForm";

var treeFrame = null;
var treePage = null;

var FirsttreeFrame = null;
var FirsttreePage = null;
var SecondtreeFrame = null;
var SecondtreePage = null;

var treeId = null;
var childs = null;
var container = null;
var folder = null;
var treeTableClass = null;
var treePlusClass = null;

var selectWindow;
var createWindow;
var winArray = new Array();
var updateFrameFunctionArray = new Array();
var selectedIdArray = null;
var selectedTitleArray = null;
var selectMode = OBJECT_MODE;
/* 1 - folders, 0 - objects */

var displayDialog = true;

function setBaseUrl(str) {
    baseUrl = str;
}

function getBaseUrl() {
    if (baseUrl == null)
        return document.getElementsByTagName("base")[0].href;
    return baseUrl;
}

function trim(s) {
    return s != null ? s.replace(/(^\s*)|(\s*$)/, "") : s;
}

function setPopupWinWidth(val) {
    popupWinWidth = val;
}
function setPopupWinHeight(val) {
    popupWinHeight = val;
}

function getPopupWinWidth() {
    return (popupWinWidth || popupWinWidth == 0) ? popupWinWidth : 750;
}
function getPopupWinHeight() {
    return (popupWinHeight || popupWinHeight == 0) ? popupWinHeight : 550;
}

function getSelectMode() {
    return selectMode;
}
function getSelectedObjectType() {
    var mode = OBJECT_MODE;
    if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
        var tmpWin;
        for (i = 0; i < self.parent.frames.length; i++) {
            tmpWin = self.parent.frames[i];
            if (tmpWin.getSelectMode && tmpWin.getSelectMode() != mode) {
                return tmpWin.getSelectMode();
            }

        }

    } else {
        if (getSelectMode && getSelectMode() != mode)
            return getSelectMode();
    }
    return mode;
}

function setSelectMode(newMode) {
    selectMode = newMode;
}

var selectedObj = null;
/* use only in navigator */

function push(val) {
    this[this.length] = val;
    return this[this.length - 1];
}
Array.prototype.push = push;

function contains(ar, val) {
    for (var i = 0; i < ar.length; i++) {
        if (ar[i] == val)
            return true;
    }
    return false;
}

var winLast = null;
function addWin(win, value) {
    winArray[win] = value;
    winLast = win;
}

function getWinAttr(win) {
    return winArray[win];
}
function addUpdateFrameFunction(win, value) {
    try {
        updateFrameFunctionArray[win] = value;
    } catch (Exception) {
    }
}
function getUpdateFrameFunction(win) {
    try {
        return updateFrameFunctionArray[win];
    } catch(Exception) {
    }
}
function delUpdateFrameFunction(win) {
    try {
        if (win) {
            updateFrameFunctionArray[win] = null;
        }
    } catch(Exception) {
    }
}

function findFormbyFieldName(fname)
{
    var frm = null;
    var frmLen = document.forms.length;
    for (var i = 0; i < frmLen; i++) {
        if (document.forms[i].elements[fname] != null) {
            frm = document.forms[i];
            break;
        }
    }
    return frm;
}

function clearDateField(fld)
{
    if (fld == null) return;
    var frm = findFormbyFieldName('data(' + fld + ')');
    if (frm == null)  return;
    if (frm.elements["data(" + fld + ")"] != null) frm.elements["data(" + fld + ")"].value = "";
    if (frm.elements["date(" + fld + ")"] != null) frm.elements["date(" + fld + ")"].value = "";
    if (frm.elements["hh(" + fld + ")"] != null) frm.elements["hh(" + fld + ")"].value = "";
    if (frm.elements["mm(" + fld + ")"] != null) frm.elements["mm(" + fld + ")"].value = "";
    if (frm.elements["ss(" + fld + ")"] != null) frm.elements["ss(" + fld + ")"].value = "";
}


function getSelObjects() {
    ret = new Array();
    if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
        var tmpWin;
        ret[0] = new Array();
        ret[1] = new Array();
        for (i = 0; i < self.parent.frames.length; i++) {
            tmpWin = self.parent.frames[i];
            if (tmpWin.selectedIdArray && tmpWin.selectedTitleArray) {
                ret[0] = ret[0].concat(tmpWin.selectedIdArray);
                ret[1] = ret[1].concat(tmpWin.selectedTitleArray);
            }
        }
        /*        if (ret[0]=="" && ret[1]=="")
                 { tmpWin=self.parent;
                    if(tmpWin.selectedIdArray && tmpWin.selectedTitleArray){
                      ret[0] = ret[0].concat(tmpWin.selectedIdArray);
                      ret[1] = ret[1].concat(tmpWin.selectedTitleArray);
                   }
                }  */
    } else {
        ret[0] = selectedIdArray;
        ret[1] = selectedTitleArray;
    }
    return ret;
}

function isSelected() {
    var ar = getSelObjects();
    var vIsSelected = false;
    try {
        vIsSelected = (ar && ar.length > 0 && ar[0].length > 0);
    } catch(e) {
    }
    return vIsSelected;
}

function selectObj(win, isClose, canDouble) {
    if (isClose == null)isClose = true;
    if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
        ret = getSelObjects();
        //			win.alert("self.parent :  "+ret[0]+"   "+ret[1]);
        var result = self.parent.opener.setLinkObj != null ?  ((canDouble != null) ? self.parent.opener.setLinkObj(ret, self.parent, canDouble) : self.parent.opener.setLinkObj(ret, self.parent)) : false;
        if (isClose && result)self.parent.close();
        return result;
    } else {
        ret = getSelObjects();
        //			win.alert("itself : "+ret[0]+"   "+ret[1]);
        try {
            var result = window.opener.setLinkObj != null ? ((canDouble != null) ? window.opener.setLinkObj(ret, win, canDouble) :window.opener.setLinkObj(ret, win)) : false;

            if (isClose && result)window.close();
        } catch(e) {
        }
        return result;
    }
}

function newImg(id, img) {
    var parentEl;
    if (id.nodeType != 1) {
        parentEl = id.parentNode;
        var childs = parentEl.childNodes;
        for (var i = 0; i < childs.length; i++)
        {
            if (childs[i].nodeType == 1 && childs[i].tagName == "IMG")
            {
                id = childs[i];
                break;
            }
        }
    }
    id.src = img.src;
}

function showSaveButton()
{
    var place = document.getElementById("SaveButtonPlace");
    if (place == null) return;
    var buttonObj = getElementByClassName(place, "hideSaveBut");
    if (buttonObj == null) return;
    buttonObj.className = "showSaveBut";
}

// Проверка корректности ввода данных в поля формы
function validate(form, passwordError) {
    if (cals && calendarConvert && cals.length > 0) {
        for (var i = 0; i < cals.length; i++) {
            if (!calendarConvert(cals[i].name)) {
                showSaveButton();
                return false;
            }
        }
    }

    var selectTags = form.getElementsByTagName("select");
    if (selectTags) {
        for (var i = 0; i < selectTags.length; i++) {
            var type = null;
            var title = null;
            var typename = null;

            type = selectTags[i].getAttribute("attrType");
            title = selectTags[i].getAttribute("attrTitle");
            typename = selectTags[i].name

            var mandatory = selectTags[i].getAttribute("isMandatory");
            var value = selectTags[i].value;

            if (title) {
                title = "'" + title + "'";
            } else {
                title = "";
            }
            if (mandatory) {
                if (mandatory == "true" && (value == null || value == "" || trim(value) == "")) {
                    alert("Обязательное поле " + title + " не заполнено");
                    return false;
                }
            }
        }
    }

    var textAreaTags = form.getElementsByTagName("textarea");
    if (textAreaTags) {
        for (var i = 0; i < textAreaTags.length; i++) {
            var type = null;
            var title = null;
            type = textAreaTags[i].attrType;
            title = textAreaTags[i].attrTitle;
            var mandatory = textAreaTags[i].isMandatory;
            var value = textAreaTags[i].value;
            if (title) {
                title = "'" + title + "'";
            } else {
                title = "";
            }
            if (mandatory) {
                if (mandatory == "true" && (value == null || value == "" || trim(value) == "")) {
                    alert("Обязательное поле " + title + " не заполнено");
                    return false;
                }
            }
        }
    }

    var inputTags = form.getElementsByTagName("input");
    var prevPass = null;
    if (inputTags) {
        for (var i = 0; i < inputTags.length; i++) {

            if (inputTags[i].type == "password") {
                if (prevPass) {
                    if (prevPass.value != inputTags[i].value) {
                        alert((passwordError ? passwordError : "Повторите ввод пароля"));
                       showSaveButton();
                        return false;
                    } else {
                        prevPass = null;
                    }
                } else {
                    prevPass = inputTags[i];
                }
            } else if (inputTags[i].type == "file") {
                var title = null;
                title = inputTags[i].getAttribute("attrTitle");
                mandatory = inputTags[i].getAttribute("isMandatory");
                var value = inputTags[i].value;
                if (title) {
                    title = "'" + title + "'";
                } else {
                    title = "";
                }
                if (mandatory) {
                    if (mandatory == "true" && (value == null || value == "" || value == "объект не выбран" || trim(value) == "")) {
                        alert("Обязательное поле " + title + " не заполнено");
                        return false;
                    }
                }
            } else if (inputTags[i].type == "text") {
                var type = null;
                var title = null;
                type = inputTags[i].getAttribute("attrType");
                title = inputTags[i].getAttribute("attrTitle");
                mandatory = inputTags[i].getAttribute("isMandatory");
                var value = inputTags[i].value;
                if (title) {
                    title = "'" + title + "'";
                } else {
                    title = "";
                }
                if (mandatory) {
                    if (mandatory == "true" && (value == null || value == "" || value == "объект не выбран" || trim(value) == "")) {
                        alert("Обязательное поле " + title + " не заполнено");
                        return false;
                    }
                }
                if (type && value) {
                    if (type == "2") {
                        // Integer
                        if (checkinteger(value) == false) {
                            alert("Поле " + title + " может содержать только целые числа");
                            showSaveButton();
                            return false;
                        }
                    } else if (type == "3") {
                        // Float
                        if (checknumber(value) == false) {
                            alert("Поле " + title + " может содержать только вещественные значения");
                            showSaveButton();
                            return false;
                        }
                    }
                }
            } else if (inputTags[i].type == "hidden") {
                var type = null;
                var title = null;
                type = inputTags[i].getAttribute("attrType");
                title = inputTags[i].getAttribute("attrTitle");
                mandatory = inputTags[i].getAttribute("isMandatory");
                var value = inputTags[i].value;
                if (title) {
                    title = "'" + title + "'";
                } else {
                    title = "";
                }
                if (mandatory) {
                    if (mandatory == "true" && (value == null || value == "" || value == "объект не выбран" || trim(value) == "")) {
                        alert("Обязательное поле " + title + " не заполнено");
                        return false;
                    }
                }
                if (type && value) {
                    if (type == "2") {
                        // Integer
                        if (checkinteger(value) == false) {
                            alert("Поле " + title + " может содержать только целые числа");
                            showSaveButton();
                            return false;
                        }
                    } else if (type == "3") {
                        // Float
                        if (checknumber(value) == false) {
                            alert("Поле " + title + " может содержать только вещественные значения");
                            showSaveButton();
                            return false;
                        }
                    }
                }
            }

        }
    }
    return true;
}


function checkinteger(object_value) {
    //Returns true if value is a number or is NULL
    //otherwise returns false

    if (object_value.length == 0)
        return true;

    //Returns true if value is an integer defined as
    //   having an optional leading + or -.
    //   otherwise containing only the characters 0-9.
    var decimal_format = ".";
    var check_char;

    //The first character can be + -  blank or a digit.
    check_char = object_value.indexOf(decimal_format)

    //Was it a decimal?
    if (check_char < 1) {
        return checknumber(object_value);
    } else {
        return false;
    }
}

function checknumber(object_value) {
    //Returns true if value is a number or is NULL
    //otherwise returns false

    if (object_value.length == 0) {
        return true;
    }
    // Return false if value is only "-" or "+"
    if (object_value.length == 1) {
        if (object_value=='-' || object_value=='+') {
            return false;
        }
    }
    //Returns true if value is a number defined as
    //   having an optional leading + or -.
    //   having at most 1 decimal point.
    //   otherwise containing only the characters 0-9.
    var start_format = "-.+-0123456789";
    var number_format = "-.0123456789";
    var check_char;
    var decimal = false;
    var trailing_blank = false;
    var digits = false;
    var sign = false;
    //The first character can be + - .  blank or a digit.
    check_char = start_format.indexOf(object_value.charAt(0))
    //Was it a decimal?
    if (check_char == 1) {
        decimal = true;
    }
    else if (check_char < 0) {
        return false;
    }
    if (check_char == 0 || check_char == 2 || check_char == 3) {
        sign = true;
    }
    //Remaining characters can be only . or a digit, but only one decimal.
    for (var i = 1; i < object_value.length; i++) {
        check_char = number_format.indexOf(object_value.charAt(i))
        if (check_char < 0) {
            return false;
        } else if (check_char == 1) {
            if (decimal) {
                // Second decimal.
                return false;
            } else {
                decimal = true;
            }
        } else if (check_char == 0) {
            if (decimal || digits) {
                trailing_blank = true;
                // ignore leading blanks
            }
            if (sign) {
                // Second sign.
                return false;
            } else {
                sign = true;
            }
        } else if (trailing_blank) {
            return false;
        } else {
            digits = true;
        }
    }
    //All tests passed, so...
    return true
}
function checkEmail(email) {
    if (!email && (email.indexOf("@") < 0 || email.indexOf("@") > email.length)) {
        alert("Некорректный e-mail")
        return false;
    }
    return true;
}
function wfmsQuery() {
    if (getChanged() == "false" || (getChanged() == "true" && confirm("Попытка выполнить действия с несохраненными данными. Продолжить?")))
        return true;
    return false;
}
function saveQuery(form, e) {
    var ev = window.event ? window.event : e;
    if (form != null && displayDialog == true && form.modified.value == "true") {
        displayDialog = false;
        ev.returnValue = "В форме были произведены изменения. Выйти без сохранения?";
    }
    return true;
}
function getChanged() {
    try {
        return document.getElementById("modified").value;
    } catch(e) {
        return "false";
    }
}
function setChanged(flag) {
    try {
        displayDialog = true;
        var field = document.getElementById("modified");
        field.value = "true";
        if (flag == false) {
            field.value = "false";
        }
    } catch(e) {
    }
    return true;
}
function create(form) {
    form.cmd.value = "create";
    return true;
}
function update(form, cmd) {
    if (!cmd)
        cmd = "update";
    form.cmd.value = cmd;
    return true;
}
function del(form) {
    if (confirm("Удалить объект ?")) {
        form.cmd.value = "delete";
        return true;
    } else return false;
}

function gridSelect(elementPrefix, hPrefix, attrName, objId, newClass, oldClass) {
    if (!elementPrefix)elementPrefix = "grid_";
    if (!hPrefix)hPrefix = "title_";
    if (!oldClass)oldClass = "";
    var element = document.getElementById(elementPrefix + attrName + objId);
    var hElement = document.getElementById(hPrefix + attrName);
    var oldElement = document.getElementById(elementPrefix + attrName + hElement.value);
    if (newClass)element.className = newClass;
    //		if(oldElement && oldElement.id != element.id)oldElement.className = oldClass;
    if (oldElement)
    {
        if (oldElement.getAttribute("id") != element.getAttribute("id")) {
            oldElement.className = oldClass;
            hElement.value = objId;
        }
        else {
            element.className = oldClass;
            hElement.value = "";
        }
    }
    //		hElement.value = objId;
    //        alert(hElement.value);
}

function getFrame(win, target) {
    for (var i = 0; i < win.frames.length; i++) {
        if (win.frames[i].name == target) {
            return win.frames[i];
        }
    }
    return null;
}

function url(newUrl, target, flag) {
    var newUrl = baseUrl + newUrl;
    var targetFrame = null;
    if (!target || target == "_blank") {
        return window.open(newUrl, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=no,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
    } else if (target == "_self") {
        targetFrame = self;
    } else if (self.frames[target]) {
        targetFrame = getFrame(self, target);
    } else if (self.parent && self.parent.frames[target]) {
        targetFrame = getFrame(self.parent, target);
    } else {
        alert("Frame " + target + "does not exists.");
    }

    if (targetFrame) {
        if (flag != null && flag) targetFrame.location.replace(newUrl);
        else  targetFrame.location.href = newUrl;
    }
    return targetFrame;
}

function getFalse(e) {
    if (!(isN4 || isN6)) {
        event.cancelBubble = true;
    } else if (e) {
        e.cancelBubble = true;
    }
    return false;
}

function clearSelected(obj, tmpWin, objectName) {
    if (!objectName)objectName = obj.name;
    /* clear array*/
    tmpWin.selectedIdArray = null;
    tmpWin.selectedTitleArray = null;
    var objects = tmpWin.document.getElementsByName(objectName);
    if (objects.length != 0) {
        /* clear checkers and select in folder element*/
        if (objects[0].type == "checkbox" || objects[0].type == "radio") {
            for (var i = 0; i < objects.length; i++)
                objects[i].checked = false;
        } else {
            alert("Ошибка в шаблоне или в object.js !");
        }
    }
    /* clear folder select */
    if (tmpWin.selectedObj) {
        tmpWin.selectedObj.className = "black";
        tmpWin.selectedObj = null;
    }
    tmpWin.setSelectMode(OBJECT_MODE);
}
function prepareSelect(obj, mode, objectName) {
    if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
        var tmpWin;
        for (i = 0; i < self.parent.frames.length; i++) {
            tmpWin = self.parent.frames[i];
            if (tmpWin.getSelectMode && tmpWin.getSelectMode() != mode) {
                /* clear checkers and select in folder element*/
                clearSelected(obj, tmpWin, objectName);
            }

        }

    } else {
        /* clear checkers and select in folder element*/
        if (getSelectMode && getSelectMode() != mode)
            clearSelected(obj, self, objectName);
    }
}
// функция выбора папки (для визуального редактора)
function fldSelFolder(obj, idField, titleField) {
    if (self.parent.nav.fldid != null) {
        self.parent.nav.fldid.value = obj[idField];
    }
}
function selFolder(obj, idField, titleField) {
    prepareSelect(obj, FOLDER_MODE);
    setSelectMode(FOLDER_MODE);
    selId(obj, idField, titleField);
}
function selObject(obj, idField, titleField) {
    prepareSelect(obj, OBJECT_MODE);
    setSelectMode(OBJECT_MODE);
    selId(obj, idField, titleField);
    // выбор объекта для внешних приложений
    if (self.parent != null && self.parent.toolbar != null && self.parent.toolbar.selobjid != null) {
        self.parent.toolbar.selobjid.value = obj[idField];
    }
}

function selId(obj, idField, titleField) {
    if (!idField)idField = "value";
    if (!titleField)titleField = "title";
    selectedIdArray = new Array();
    selectedTitleArray = new Array();
    var objects = document.getElementsByName(obj.name);
    if (objects.length == 0)return;
    if (objects[0].type == "checkbox") {
        for (var i = 0; i < objects.length; i++) {
            if (objects[i].checked) {
                selectedIdArray.push(objects[i][idField]);
                selectedTitleArray.push(objects[i][titleField]);
            }
        }
    } else if (objects[0].type == "radio") {
        selectedIdArray.push(obj[idField]);
        selectedTitleArray.push(obj[titleField]);
    } else {
        selectedIdArray.push(obj[idField]);
        selectedTitleArray.push(obj[titleField]);
    }
    //obj.blur();
    setButtonState();
}

function getSm(selectFolders, selectObjects, multiSelect) {
    var sm = null;
    if (multiSelect) {
        if (selectFolders && selectObjects) {
            sm = "m";
            /* (Multi) */
        } else if (selectFolders) {
            sm = "mf";
            /* (MultiFolder) */
        } else {
            sm = "mo";
            /* (MultiObject) */
        }
    } else {
        if (selectFolders && selectObjects) {
            sm = "s";
            /* (Single) */
        } else if (selectFolders) {
            sm = "sf";
            /* (SingleFolder) */
        } else {
            sm = "so";
            /* (SingleObject) */
        }
    }
    return sm;
}

function getNewObj(attrName, folder, refClass, selectFolders, selectObjects, multiSelect, selectPage, curObj, curClass, curDs) {
    var sm = getSm(selectFolders, selectObjects, multiSelect);
    if (curObj) {
        curObj = "&q(obj)=" + curObj + "&q(attr)=" + attrName;
    } else if (curClass && curDs) {
        curObj = "&q(cls)=" + curClass + "&q(ds)=" + curDs + "&q(attr)=" + attrName;
    } else {
        curObj = "";
    }
    var selCls = "";
    if (refClass && refClass != "") {
        selCls = "&selCls=" + refClass;
    }
    if (!folder || folder == "null") {
        folder = "";
    }

    if (selectPage && selectPage.indexOf(".htm") == (selectPage.length - 4)) {
        selectPage = selectPage.substring(0, (selectPage.length - 4));
    }
    selectWindow = window.open(baseUrl + selectPage + '.htm?id=' + folder + selCls + '&sm=' + sm + curObj, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
    addWin(selectWindow, attrName);
}

function getObjSearch4Param(paramName, folder, refClass, selectFolders, selectObjects, selectPage, isMulti, curQuery, curObj) {
    var sm = getSm(selectFolders, selectObjects, isMulti);
    if (curQuery) {
        curQuery = "&paramQuery=" + curQuery;
        if (curObj) {
            curQuery = curQuery + "&paramObject=" + curObj;
        }
    } else {
        curQuery = "";
    }
    var selCls = "";
    if (refClass && refClass != "") {
        selCls = "&selCls=" + refClass;
    }
    selectWindow = window.open(baseUrl + selectPage + '.htm?id=' + folder + selCls + '&sm=' + sm + curQuery, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
    addWin(selectWindow, paramName);
}

function createObj(attrName, id, refClass, refAttr, createPage, ds, updFunc, refLink, addParams) {
    var dsStr = "";
    if (ds && ds != "null") {
        dsStr = "&ds=" + ds;
    }
    var linkStr = "";
    if (refLink)
        linkStr = "&link=" + refLink;
    if (!addParams)
        addParams = "";
    createWindow = window.open(baseUrl + createPage + '.htm?id=' + id + '&cls=' + refClass + '&ra=' + refAttr + dsStr + linkStr + addParams, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
    addWin(createWindow, attrName);
    if (updFunc)
        addUpdateFrameFunction(createWindow, updFunc);
}
function viewObj(id, newPage, urlCommon, updFunc) {
    var el = document.getElementById(id);
    if (!el)return;
    //		var ar = el.value.split(",");
    //		if(ar.length > 1 || ar[0].length == 0) return false;
    //		var link = ar[0];
    var link = el.value;
    if (link.length == 0) return false;
    if (urlCommon == null)urlCommon = "";
    viewWindow = window.open(baseUrl + newPage + '.htm?id=' + link + urlCommon, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
    addWin(viewWindow, id);
    if (updFunc)
        addUpdateFrameFunction(viewWindow, updFunc);
}

function setLinkObj(ret, win, canDouble) {
    var attrName = getWinAttr(win);
    if (!attrName)return false;
    if (ret != null) {
        Sel = document.getElementById("title_" + attrName);
        if (!Sel)return false;
        Hid = document.getElementById("id_" + attrName);
        canDouble2 = document.getElementById("dup_" + attrName);
        if (canDouble2 != null) canDouble = (canDouble2.value == "true");
        var row = document.getElementById("grid_" + attrName);
        if (Sel.tagName == "SELECT") {
            var newop;
            var ret_1_List = ret[0];
            var ret_2_List = ret[1];
            for (_i = 0; _i < ret_1_List.length; _i++) {
                if (!canDouble)
                {
                    for (var _x = 0; _x < Sel.length; _x++)
                    {
                        if (Sel.options[_x].value == ret_1_List)  return false;
                    }
                }
                newop = document.createElement("OPTION");
                newop.value = ret_1_List[_i];
                newop.text = ret_2_List[_i];
                if (isIE) {
                    Sel.add(newop);
                } else {
                    Sel.add(newop, null);
                }
                ToHidden(Sel, Hid);
            }
        } else if (Sel.tagName == "INPUT" && row) {
            var table = row.parentNode;
            if (!(table.nodeName == "TABLE" || table.nodeName == "table")) {
                table = table.parentNode;
                table = table.getElementsByTagName("tbody").item(0);
            }
            var trElem, tdElem, txtNode;
            var newop;
            var tmpId;
            ret_1_List = ret[0];
            ret_2_List = ret[1];
            for (_i = 0; _i < ret_1_List.length; _i++) {
                tmpId = "grid_" + attrName + ret_1_List[_i];
                if (!canDouble)
                {
                    if (document.getElementById(tmpId))
                    {//table.removeChild(document.getElementById(tmpId));
                        return false;
                    }
                }
                trElem = document.createElement("tr");
                trElem.setAttribute("id", tmpId);
                trElem.setAttribute("style", "cursor:pointer;");
                tdElem = document.createElement("td");
                txtNode = document.createTextNode(ret_2_List[_i]);
                tdElem.appendChild(txtNode);
                trElem.appendChild(tdElem);
                table.appendChild(trElem);
                table.lastChild.onclick = new Function("gridSelect('grid_','title_','" + attrName + "','" + ret_1_List[_i] + "','silver',null)");
                Hid.value += "," + ret_1_List[_i];
            }
        } else {
            Hid.value = ret[0];
            Sel.value = ret[1];
        }
    }
    //for formSave
    //setChanged();
    return true;
}
function delLinkObj(attrName) {
    document.getElementById("id_" + attrName).value = "";
    document.getElementById("title_" + attrName).value = "объект не выбран";
    //for formchange
    setChanged();
}


function move(attrName, Mod)
{
    var Sel = document.getElementById("title_" + attrName);
    var Hid = document.getElementById("id_" + attrName);
    var row = document.getElementById("grid_" + attrName + Sel.value);
    if (!row) {
        Indx = Sel.selectedIndex;
        if (Mod)
        {
            if (Indx > 0)
            {
                tmpv = Sel[Indx].value;
                tmpt = Sel[Indx].text;
                tmps = Sel[Indx].style.color;
                Sel[Indx].value = Sel[Indx - 1].value;
                Sel[Indx].text = Sel[Indx - 1].text;
                Sel[Indx].style.color = Sel[Indx - 1].style.color;
                Sel[Indx - 1].value = tmpv;
                Sel[Indx - 1].text = tmpt;
                Sel[Indx - 1].style.color = tmps;
                Sel.selectedIndex = Indx - 1;
            }
        }
        else
        {
            if (Indx < Sel.length - 1 && Indx >= 0)
            {
                tmpv = Sel[Indx].value;
                tmpt = Sel[Indx].text;
                tmps = Sel[Indx].style.color;
                Sel[Indx].value = Sel[Indx + 1].value;
                Sel[Indx].text = Sel[Indx + 1].text;
                Sel[Indx].style.color = Sel[Indx + 1].style.color;
                Sel[Indx + 1].value = tmpv;
                Sel[Indx + 1].text = tmpt;
                Sel[Indx + 1].style.color = tmps;
                Sel.selectedIndex = Indx + 1;
            }

        }
    } else {
        if (Mod) {
            var prevNode = previousSibling(row);
            if (prevNode) {
                prevNode.parentNode.insertBefore(row, prevNode);
            }


        } else {
            var nextNode = nextSibling(row);
            if (nextNode)
                nextNode.parentNode.insertBefore(nextNode, row);
        }
    }
    ToHidden(Sel, Hid, row);
    //for formSave
    setChanged();
}

function previousSibling(node) {
    var prevNode = node.previousSibling;
    if (prevNode != null && prevNode.nodeName[0] == "#") {
        prevNode = previousSibling(prevNode);
    }
    return prevNode;
}
function nextSibling(node) {
    var nextNode = node.nextSibling;
    if (nextNode != null && nextNode.nodeName[0] == "#") {
        nextNode = nextSibling(nextNode);
    }
    return nextNode;
}

function DelFromList(attrName)
{
    var Sel = document.getElementById("title_" + attrName);
    var Hid = document.getElementById("id_" + attrName);

    //		alert("Sel -> "+Sel.value+"    Hid -> "+Hid.value);

    var re = new RegExp("[, ]", "g");
    var str = Sel.value.replace(re, '');
    if (str == "") return;

    //        alert (str);
    //        return;

    var row = document.getElementById("grid_" + attrName + Sel.value);
    if (Sel.tagName == "INPUT" && row) {
        var table = row.parentNode;
        table.removeChild(row);
        //var re1 = new RegExp(","+Sel.value,"g");
        //var re1 = /"test"/g;
        //alert(","+Sel.value == Hid.value);
        var str = Hid.value ;
        //alert(str.indexOf(","+Sel.value))
        var sel = "," + Sel.value
        Hid.value = Hid.value.substring(0, Hid.value.indexOf(sel)) + Hid.value.substring(Hid.value.indexOf(sel) + sel.length, Hid.value.length)
        //alert(str.replace(re1, "1"));
        //Hid.value = Hid.value.replace(re1, '');
        //alert(Hid.value);
        Sel.value = "";
    } else {
        i = 0;
        while (i < Sel.length)
        {
            if (Sel.options[i].selected)
            {
                Sel.remove(i);
            }
            else ++i;
        }
        ToHidden(Sel, Hid);
    }
    //for formSave
    setChanged();
    //		alert(Sel.value);
}

function ToHidden(Sel, Hid, row)
{
    if (!row) {
        Hid.value = '';
        for (i = 0; i < Sel.options.length; i++)
        {
            Hid.value = Hid.value + Sel.options[i].value + ',';
        }

    } else {
        var table = row.parentNode;
        gridToHidden(Hid, table);
    }


}

function gridToHidden(Hid, table) {
    if (!table || !Hid)
        return;
    Hid.value = '';
    for (var i = 0; i < table.childNodes.length; i++) {
        if (table.childNodes[i].nodeName[0] != "#") {
            Hid.value += ",";
            Hid.value = Hid.value + table.childNodes[i].getAttribute("objId");
        }
    }
}


function getForm(curTag) {
    if (!curTag) return document.forms[document.forms.length - 1];
    var form = curTag.parentNode;
    while (form.tagName != "FORM" && form.parentNode != null) {
        form = form.parentNode;
    }
    if (form.tagName != "FORM") return null;
    return form;
}
function newGrp(curTag, grp, field) {
    window.onunload = null;
    if (field == null || isNaN(field)) var field = "agrp";
    var form = getForm(curTag);
    form.cmd.value = "prepare";
    if (form[field] != null) {
        form[field].value = grp;
        var isFormValid = true;
        if (form.onsubmit != null) {
            isFormValid = form.onsubmit();
        }
        if (isFormValid) {
            form.submit();
        }
    }
    return true;
}
function condChange(obj, id) {
    if (obj.value == "[]") {
        document.getElementById(id).style.display = "";
    } else {
        document.getElementById(id).style.display = "none";
    }
}

function invert(id, img_element, img_up, img_down) {
    obj = document.getElementById(id);
    obj.style.display = (obj.style.display == "none") ? "" : "none"
    if (!img_element) {
        return;
    }
    img = window.document.getElementById(img_element);
    if (img && img_up && img_down) {
        if (obj.style.display == "none") {
            img.src = img_down.src;
        } else {
            img.src = img_up.src;
        }
    }
}

function setCheckBox(fromField, toField, value, form, linkedField) {
    // alert(fromField);
    // alert(toField);
    // alert(value);
    // alert(form);
    // alert(linkedField);
    if (!form)form = document.forms[document.forms.length - 1];
    if (form[fromField])
        form[fromField].checked = value;
    if (form[toField]) {
        form[toField].value = value;
     //   alert("form[toField].value " + form[toField].value);
        }
    if (linkedField != null) form[linkedField].disabled = !value;
}


function _sub(obj) {
    if (obj != null) getSubTree(obj, 'navigator', 'folder', 'plus', 'childs', 'container');
}

function _foldClick(id) {
    if (id == null || (id != null && trim(id) == "")) return false;
    var win = url(self.parent.editPage + '.htm?id=' + id);
    addUpdateParentTree(win, 'self', 'plus' + id, 'navigator', 'folder', 'plus', 'childs', 'container');
}

function _titleClick(e, mode, link) {
    treeTitleClick(e, mode, 'folder', 'selId(0)', link, 'list');
    return getFalse(e);
}

function getSubTree(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    getTree(obj, false, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function getSubTree_1(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    treeFrame = FirsttreeFrame;
    treePage = FirsttreePage;
    getTree(obj, false, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function getSubTree_2(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    treeFrame = SecondtreeFrame;
    treePage = SecondtreePage;
    getTree(obj, false, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function getSubTree_3(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    treeFrame = ThirdtreeFrame;
    treePage = ThirdtreePage;
    getTree(obj, false, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function refreshSubTree(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    getTree(obj, true, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function getTree(obj, isRefresh, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    if (!treeFrame || !treePage) {
        alert("Tree frame is undefined in navigator page !");
        return;
    }
    var navigator = getParentByClassName(obj, navigatorTableClass);
    folder = getParentByClassName(obj, folderClassName);
    if (folder) {
        var id = folder.getAttribute("id");
        treeId = id;
        childs = getNextSiblingByClassName(folder, childsClassName);
        container = getElementByClassName(childs, containerClassName);
        var isEmpty = (navigator.getAttribute("objAmount") == 0);
        var node = getElementByClassName(folder, className);
        if (childs.style.display != "none") {
            // hide subtree and return
            childs.style.display = "none";
            if (node && !isEmpty) {
                if (folder.getAttribute("position") != "last") {
                    node.src = tree_plus.src;
                } else {
                    node.src = tree_plus_last.src;
                }
            }
            if (!isRefresh)
                return;
        }

        if (node) {
            if (folder.getAttribute("position") != "last") {
                node.src = tree_minus.src;
            } else {
                node.src = tree_minus_last.src;
            }
        }

        var href = folder.getAttribute("href");
        var i = href.indexOf("?");
        href = href.substring(i, href.length + 1);
        var i = href.indexOf("&blk");
        href = href.substring(0, i);
        //		treeFrame.src = treePage + ".htm" + href;
        self.frames[treeFrame.getAttribute("name")].document.location.replace(baseUrl + treePage + ".htm" + href);
        treeTableClass = navigatorTableClass;
        treePlusClass = className;
    } else {
        /* alert(folder); */
    }
}

function getSubTreeHTML() {
    var treeDocument = null;
    if (self.frames.length > 0) {
        treeDocument = self.frames[treeFrame.getAttribute("name")].document;
    } else {
        treeDocument = self.frames.document;
    }

    if (treeDocument != null) {
        var obj = treeDocument.getElementById("body");
        var navigator = getElementByClassName(obj, treeTableClass);
        if (navigator == null) {
            alert("Error while getting folders.");
            return;
        }
        var isEmpty = (navigator.getAttribute("objAmount") == 0);
        if (!isEmpty) {
            container.innerHTML = obj.innerHTML;
            childs.style.display = "";
        } else {
            var node = getElementByClassName(folder, treePlusClass);
            if (node) {
                if (folder.getAttribute("position") != "last") {
                    node.src = tree_line.src;
                } else {
                    node.src = tree_line_last.src;
                }
            }
        }
        treeDocument.close();
        document.close();
    }
}

function getElementByClassName(obj, className) {
    for (var i = 0; i < obj.childNodes.length; i++)
    {
        var tmpNode = obj.childNodes[i];
        if (!tmpNode.tagName) continue;
        if (tmpNode.className == className)
        {
            return tmpNode;
        }
        else
        {
            tmpNode = getElementByClassName(tmpNode, className)
        }
        if (tmpNode != null) return tmpNode;
    }
    return null;
}

function getFirstChildTag(obj) {
    for (var i = 0; i < obj.childNodes.length; i++) {
        var tmpNode = obj.childNodes[i];
        if (tmpNode != null && tmpNode.tagName) {
            return tmpNode;
        }
    }
    return null;
}
function getPrevSiblingTag(obj) {
    var tmpObj = obj;
    while (tmpObj) {
        tmpObj = tmpObj.previousSibling;
        if (tmpObj && tmpObj.tagName) {
            return tmpObj;
        }
    }
    return null;
}
function getNextSiblingTag(obj) {
    var tmpObj = obj;
    while (tmpObj) {
        tmpObj = tmpObj.nextSibling;
        if (tmpObj && tmpObj.tagName) {
            return tmpObj;
        }
    }
    return null;
}
function getParentByClassName(obj, className) {
    if (!obj)
        return null;
    var parent = obj.parentNode;
    if (parent) {
        if (parent.className == className) {
            return parent;
        } else {
            return getParentByClassName(parent, className)
        }
    }
    return null;
}

function getPrevSiblingByClassName(obj, className) {
    var tmpObj = obj;
    while (tmpObj) {
        if (tmpObj.className == className) {
            return tmpObj;
        }
        tmpObj = tmpObj.previousSibling;
    }
    return null;
}

function getNextSiblingByClassName(obj, className) {
    var tmpObj = obj;
    while (tmpObj) {
        if (tmpObj.className == className) {
            return tmpObj;
        }
        tmpObj = tmpObj.nextSibling;
    }
    return null;
}

function objSearch(id, src, frame) {
    if (!frame)frame = window;
    if (!frame.document.getElementById(id))return;
    if (frame.document.getElementById(id).style.display != "none") {
        frame.document.getElementById(id).style.display = "none";
    } else {
        frame.document.getElementById(id).style.display = "";
    }
}


function treeTitleClick(e, sm, folderClassName, objectName, href, target) {
    /*event,'null','folder','selId(0)','admin/list.htm?id=10125863@SXFolder&amp;fid=0&amp;_inherit=false&amp;_dynnav=true&amp;link=10125863@SXFolder&amp;blk=10174315', 'list'*/
    /* select temporary element */
    var obj = isIE ? e.srcElement : e.target;
    prepareSelect(obj, FOLDER_MODE, objectName);
    setSelectMode(FOLDER_MODE);
    var title = obj.innerHTML;
    var folder = getParentByClassName(obj, folderClassName);
    if (folder) {
        if (self.selectedObj) {
            self.selectedObj.className = "black";
        }
        if (self.selectedObj != obj) {
            obj.className = "selected";

            var id = folder.getAttribute("id");

            if (sm == '') {
                self.selectedIdArray = new Array(id);
                self.selectedTitleArray = new Array(title);
            }

            self.selectedObj = obj;
        } else {
            if (sm == '') {
                self.selectedIdArray = null;
                self.selectedTitleArray = null;
            }

            self.selectedObj = null;
        }
    }

    if (!e.ctrlKey) {
        /* load object list */
        addToTitle(title);
        url(href, target);
    } else {
        setButtonState();
    }
}

function addToTitle(title) {
    tmpDoc = (self.parent == null || self.parent == self) ? self.document:self.parent.document;
    var pos = tmpDoc.title.indexOf("(");
    if (pos >= 0)
        tmpDoc.title = tmpDoc.title.substring(0, pos - 1);
    tmpDoc.title = tmpDoc.title + " ( " + title + " )";
}

function refreshPage() {
    if (self.parent) {
        if (self.parent.list) self.parent.list.location.reload(true);
        else self.parent.location.reload(true);
    }
    else self.location.reload(true);
}

function updateFrame() {
    if (window && window.location)
        window.location.reload(true);
}
function updateCurrentTree(frameLink, objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    if (!frameLink)
        frameLink = "self";
    uFun = new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
                        "if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
                        "if(!el)return; " +
                        "if(!el)return; el = getFirstChildTag(el);" +
                        frameLink + ".refreshSubTree(el, '" +
                        navigatorTableClass + "', '" +
                        folderClassName + "', '" +
                        className + "', '" +
                        childsClassName + "', '" +
                        containerClassName + "'); }");
    uFun();
}

function updateParentTree(frameLink, objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    if (!frameLink)
        frameLink = "self";
    uFun = new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
                        "if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
                        "if(!el)return; el = getParentByClassName(el,'" + childsClassName + "');" +
                        "if(!el)return; el = getPrevSiblingByClassName(el,'" + folderClassName + "');" +
                        "if(!el)return; el = getFirstChildTag(el);" +
                        frameLink + ".refreshSubTree(el, '" +
                        navigatorTableClass + "', '" +
                        folderClassName + "', '" +
                        className + "', '" +
                        childsClassName + "', '" +
                        containerClassName + "'); }");
    uFun();
}
function addUpdateParentTree(win, frameLink, objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    if (!frameLink)
        frameLink = "self";
    addUpdateFrameFunction(win, new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
                                             "if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
                                             "if(!el)return; el = getParentByClassName(el,'" + childsClassName + "');" +
                                             "if(!el)return; el = getPrevSiblingByClassName(el,'" + folderClassName + "');" +
                                             "if(!el)return; el = getFirstChildTag(el);" +
                                             frameLink + ".refreshSubTree(el, '" +
                                             navigatorTableClass + "', '" +
                                             folderClassName + "', '" +
                                             className + "', '" +
                                             childsClassName + "', '" +
                                             containerClassName + "')}"));
}
function addUpdateTree(win, frameLink, objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    if (!frameLink)
        frameLink = "self";
    addUpdateFrameFunction(win, new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
                                             "if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
                                             frameLink + ".refreshSubTree(el, '" +
                                             navigatorTableClass + "', '" +
                                             folderClassName + "', '" +
                                             className + "', '" +
                                             childsClassName + "', '" +
                                             containerClassName + "')}"));
}

function setEventsToButtons(className) {
    var obj = null;
    for (i = 0; i < document.links.length; i++) {
        obj = document.links[i].parentNode;
        if (obj.className == className) {
            obj = document.links[i];
            /* add events to object */
            obj.onmouseover = new Function("this.parentNode.style.paddingTop='';this.parentNode.className = 'menu_over';");
            obj.onmouseout = new Function("this.parentNode.className = 'menu';");
        }
    }
 /*   for (var j = 0; (node = document.getElementsByTagName("button")[j]); j++) {
        obj = node.parentNode;
        if (obj.className == className) {
            // add events to object
            node.onmouseover = new Function("this.parentNode.className = 'menu_over';");
            node.onmouseout = new Function("this.parentNode.className = 'menu';");
        }
    }*/
}

function showToolbar(className) {
    try {
        if (self.parent.toolbar && self.parent != self) {
            self.parent.toolbar.document.getElementById("body").innerHTML = document.getElementById("toolbar").innerHTML;
            self.parent.toolbar.setEventsToButtons(className);
            self.parent.toolbar.setButtonState();
        } else {
            document.getElementById("toolbar").style.display = "block";
            self.setEventsToButtons(className);
            self.setButtonState();
        }
    } catch (ex) {
        setTimeout("showToolbar('" + className + "')", 200);
    }
}

/* has navigator on page ? */
function checkNavigator(tagName, attr, value) {
    var tags = document.getElementsByTagName(tagName);
    var tmpVal;
    for (var i = 0; i < tags.length; i++) {
        tmpVal = (attr != "class") ? tags[i].getAttribute(attr):tags[i].className;
        if (tmpVal == value)
            return true;
    }
    return false;
}

/* service functions */
function getListFrame(frameName) {
    var parentFrame = (self.parent) ? self.parent : self;
    return (!frameName) ? parentFrame.frames["list"]:parentFrame.frames[frameName];
}

function canDelLink() {
    var win = (self.parent) ? self.parent : self;
    try {
        return (getSelectedObjectType() == OBJECT_MODE && win.canObjLinkOperations) ||
               (getSelectedObjectType() == FOLDER_MODE && win.canFolderLinkOperations);
    } catch (e) {
        alert(e);
    }
}

function setButtonState() {
    /* Get toolbar frame */
    var tmpWin = null;
    var win = (self.parent) ? self.parent : self;
    if (win.frames && win.frames.length > 0) {
        for (var i = 0; i < win.frames.length; i++) {
            tmpWin = win.frames[i];
            if (tmpWin.document.toolbarForm) {
                win = tmpWin;
                break;
            }
        }
    }
    if (!win || !win.document.toolbarForm) {
        /* alert("Can't find toolbar frame [<form name='toolbarFrame'>]"); */
        return;
    }
    /* set button state "copy/cut/delete" */
    var copy_button = win.document.getElementById(id_copyImg);
    var cut_button = win.document.getElementById(id_cutImg);
    var delete_button = win.document.getElementById(id_deleteImg);
    var delete_link_button = win.document.getElementById(id_deleteLinkImg);

    if (isSelected()) {
        /* has selected items */
        if (copy_button)
            copy_button.src = menu_copy.src;
        if (cut_button)
            cut_button.src = menu_cut.src;
        if (delete_button)
            delete_button.src = menu_delete.src;
        if (delete_link_button) {
            if (canDelLink()) {
                delete_link_button.src = menu_delete_link.src;
            } else {
                delete_link_button.src = menu_delete_link_dis.src;
            }
        }
    } else {
        /* disablim all buttons */
        if (copy_button)
            copy_button.src = menu_copy_dis.src;
        if (cut_button)
            cut_button.src = menu_cut_dis.src;
        if (delete_button)
            delete_button.src = menu_delete_dis.src;
        if (delete_link_button)
            delete_link_button.src = menu_delete_link_dis.src;
    }
}
function addInput(form, name, value) {
    var inputTag = document.createElement("INPUT");
    inputTag.setAttribute("TYPE", "hidden");
    inputTag.type = "hidden";
    inputTag.setAttribute("NAME", name);
    inputTag.name = name;
    inputTag.setAttribute("VALUE", value);
    inputTag.value = value;
    form.appendChild(inputTag);
}

function doObjCmd(cmd, arg, flag) {
    if (cmd != 4 && (arg == null || (arg != null && trim(arg) == ""))) return getFalse();
    switch (cmd)
            {
        case 0: if (isSelected()) {
            eval("objCopy('cmdFrame', 'CopyForm'," + arg + ")");
        } break;
        case 1: if (isSelected()) {
            eval("objCut('cmdFrame', 'CopyForm'," + arg + ")");
        } break;
        case 2: if (!flag) {
            eval("objPaste('cmdFrame', 'PasteForm', " + arg + ")");
        } break;
        case 3: if (!flag) {
            eval("objPasteToUp('cmdFrame', 'PasteForm', " + arg + ")");
        }break;
        case 4: if (isSelected() && confirm('Вы уверены ?')) {
            objDelete('cmdFrame', 'DeleteForm');
        } break;
        case 5: if (!flag) {
            eval("objMakeLink('cmdFrame', 'MakeLinkForm', " + arg + ")");
        } break;
        case 6: if (isSelected() && canDelLink() && confirm('Вы уверены ?')) {
            eval("deleteLink('cmdFrame', 'DeleteLinkForm', " + arg + ")");
        } break;
    }
    return getFalse();
}

function prepareToCopy(form, objId, linkAttr, ds, objClass) {
    var idArray = getSelObjects()[0];
    var titleArray = getSelObjects()[1];
    var inputTag = null;
    var id = null;
    var title = null;
    if (titleArray && titleArray.length > 0) {
        for (i = 0; i < titleArray.length; i++) {
            id = idArray[i];
            title = titleArray[i];
            addInput(form, "data[" + i + "]", id);
            addInput(form, "objTitle[" + i + "]", title);
        }
    }
    addInput(form, "dsName", ds);
    addInput(form, "className", objClass);
    addInput(form, "objId", objId);
    addInput(form, "linkAttrName", linkAttr);
}
function prepareToPaste(form, objId, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass) {
    addInput(form, "objId", objId);
    addInput(form, "dsName", objDs);
    addInput(form, "className", objClass);
    addInput(form, "linkAttrName", linkAttr);
    addInput(form, "folderDsName", folderDs);
    addInput(form, "folderClassName", folderClass);
    addInput(form, "folderLinkAttrName", folderLinkAttr);
}
function addPasteToUp(form) {
    if (!form)
        return;
    addInput(form, "to", "up");
}
function prepareToDelete(form, objId, linkAttr) {
    var idArray = getSelObjects()[0];
    var titleArray = getSelObjects()[1];
    var inputTag = null;
    var id = null;
    var title = null;
    if (titleArray && titleArray.length > 0) {
        for (i = 0; i < titleArray.length; i++) {
            id = idArray[i];
            title = titleArray[i];
            addInput(form, "data[" + i + "]", id);
            addInput(form, "objTitle[" + i + "]", title);
        }
    }
    addInput(form, "objId", objId);
    addInput(form, "linkAttrName", linkAttr);
}

function setObjectState(rowName, attrName, className, disableClassName) {
    var idArray = getSelObjects()[0];
    var rowArray = document.getElementsByName(rowName);
    for (var i = 0; i < rowArray.length; i++) {
        if (contains(idArray, rowArray[i].getAttribute(attrName))) {
            rowArray[i].className = disableClassName;
        } else {
            rowArray[i].className = className;
        }
    }
}
/* Base object operations */
function objCopy(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass, mode) {
    if (!mode) mode = OBJECT_MODE;
    var frame = getListFrame(frameName);
    var form = self.document.forms[formName];
    form.innerHTML = "";
    if (getSelectedObjectType() == OBJECT_MODE) {
        prepareToCopy(form, id, linkAttr, objDs, objClass);
        addInput(form, "objType", OBJECT_MODE);
    } else {
        prepareToCopy(form, id, folderLinkAttr, folderDs, folderClass);
        addInput(form, "objType", FOLDER_MODE);
    }
    addInput(form, "mode", mode);
    form.innerHTML += " ";
    /* Yo */
    form.submit();
}
function objCut(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass) {
    objCopy(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass, 1);
}
function objPaste(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass) {
    var frame = getListFrame(frameName);
    var form = self.document.forms[formName];
    form.innerHTML = "";
    prepareToPaste(form, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass);
    form.innerHTML += " ";
    /* Yo */
    form.submit();
}
/* Paste up */
function objPasteToUp(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass) {
    var form = self.document.forms[formName];
    form.innerHTML = "";
    prepareToPaste(form, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass);
    addPasteToUp(form);
    form.innerHTML += " ";
    /* Yo */
    form.submit();
}

function objMakeLink(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass, mode) {
    objPaste(frameName, formName, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass, mode);
}
function deleteLink(frameName, formName, id, folderLinkAttr, linkAttr) {
    var frame = getListFrame(frameName);
    var form = self.document.forms[formName];
    form.innerHTML = "";
    if (getSelectedObjectType() == OBJECT_MODE) {
        prepareToDelete(form, id, linkAttr);
    } else {
        prepareToDelete(form, id, folderLinkAttr);
    }
    form.innerHTML += " ";
    /* Yo */
    form.submit();
}
function objDelete(frameName, formName) {
    if (getSelectedObjectType() == FOLDER_MODE) {
        /* update folder tree */
        var form = self.document.forms[formName];
        var target = form.target;
        if (target) {
            var win = getListFrame(target);
            if (win) {
                var ar = getSelObjects();
                if (ar && ar.length > 0 && ar[0].length > 0)
                    addUpdateParentTree(win, 'top.nav', 'plus' + ar[0][0], 'navigator', 'folder', 'plus', 'childs', 'container');
            }
        }
    }
    sendSelObjects(frameName, formName);
}
function sendSelObjects(frameName, formName) {
    var frame = getListFrame(frameName);
    var form = self.document.forms[formName];
    var idArray = getSelObjects()[0];
    if (idArray && idArray.length > 0) {
        form.objId.value = idArray.join();
        if (form.selType) {
            form.selType.value = getSelectedObjectType();
        }
        form.innerHTML += " ";
        /* Yo */
        form.submit();
    }
}
/* --------------------- Context Menu Object operations --------------------*/

function CobjCopy(frameName, formName, ObjTitle, ObjType, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass, mode)
{
    if (id == null || id == "") return;
    if (ObjType != FOLDER_MODE && ObjType != OBJECT_MODE) return;
    if (!mode) mode = OBJECT_MODE;
    var frame = getListFrame(frameName);
    var form = self.document.forms[formName];
    form.innerHTML = "";
    if (ObjTitle != null && ObjTitle != "") {
        addInput(form, "data[0]", id);
        addInput(form, "objTitle[0]", ObjTitle);
    }

    if (ObjType == OBJECT_MODE) {
        //	prepareToCopy(form, id, linkAttr, objDs, objClass);
        addInput(form, "dsName", objDs);
        addInput(form, "className", objClass);
        addInput(form, "objId", id);
        addInput(form, "linkAttrName", linkAttr);
        addInput(form, "objType", OBJECT_MODE);
    } else {
        //		prepareToCopy(form, id, folderLinkAttr, folderDs, folderClass);
        addInput(form, "dsName", folderDs);
        addInput(form, "className", folderClass);
        addInput(form, "objId", id);
        addInput(form, "linkAttrName", folderLinkAttr);
        addInput(form, "objType", FOLDER_MODE);
    }
    addInput(form, "mode", mode);
    form.innerHTML += " ";
    /* Yo */
    form.submit();
}

function CobjCut(frameName, formName, ObjTitle, ObjType, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass) {
    CobjCopy(frameName, formName, ObjTitle, ObjType, id, folderLinkAttr, linkAttr, folderDs, folderClass, objDs, objClass, 1);
}


function CobjDelete(formName, handleObj, ObjType)
{
    if (handleObj == null || handleObj == "") return;
    if (ObjType != FOLDER_MODE && ObjType != OBJECT_MODE) return;
    var form = self.document.forms[formName];
    if (ObjType == FOLDER_MODE) {
        var target = form.target;
        if (target) {
            var win = getListFrame(target);
            if (win) {
                addUpdateParentTree(win, 'top.nav', 'plus' + handleObj, 'navigator', 'folder', 'plus', 'childs', 'container');
            }
        }

    }
    form.objId.value = handleObj;
    if (form.selType) {
        form.selType.value = ObjType;
    }
    form.innerHTML += " ";
    form.submit();
}

/* ------------------------------ Sorting -------------------------------- */

var img_dir = baseUrl + "/images/sitex_demo/";
// folder whith images
var sort_case_sensitive = false;
// sort type (case sensitive or no)

// set the algoritm of sorting
function _sort(a, b) {
    var a = a[0];
    var b = b[0];
    if (Number(a) && Number(b)) return sort_numbers(a, b);
    else if (!sort_case_sensitive) return sort_insensitive(a, b);
    else return sort_sensitive(a, b);
}

// set the number sort algoritm
function sort_numbers(a, b) {
    return a - b;
}

// set not case sensitive alroritm
function sort_insensitive(a, b) {
    var anew = a.toLowerCase();
    var bnew = b.toLowerCase();
    if (anew < bnew) return -1;
    if (anew > bnew) return 1;
    return 0;
}

// set case sensitive alroritm
function sort_sensitive(a, b) {
    if (a < b) return -1;
    if (a > b) return 1;
    return 0;
}

// get text from child nodes
function getConcatenedTextContent(node) {
    var _result = "";
    if (node == null) {
        return _result;
    }
    var childrens = node.childNodes;
    var i = 0;
    while (i < childrens.length) {
        var child = childrens.item(i);
        switch (child.nodeType) {
            case 1: // ELEMENT_NODE
            case 5: // ENTITY_REFERENCE_NODE
                _result += getConcatenedTextContent(child);
                break;
            case 3: // TEXT_NODE
            case 2: // ATTRIBUTE_NODE
            case 4: // CDATA_SECTION_NODE
                _result += child.nodeValue;
                break;
            case 6: // ENTITY_NODE
            case 7: // PROCESSING_INSTRUCTION_NODE
            case 8: // COMMENT_NODE
            case 9: // DOCUMENT_NODE
            case 10: // DOCUMENT_TYPE_NODE
            case 11: // DOCUMENT_FRAGMENT_NODE
            case 12: // NOTATION_NODE
            // skip
                break;
        }
        i++;
    }
    return _result;
}

// main script
function sort(e) {
    var el = window.event ? window.event.srcElement : e.currentTarget;
    if (el.tagName == "IMG") el = el.parentNode;
    var a = new Array();
    var name = el.lastChild.nodeValue;
    var dad = el.parentNode;
    var table = dad.parentNode.parentNode;
    var up = table.up;
    var node, arrow, curcol;
    for (var i = 0; (node = dad.getElementsByTagName("th").item(i)); i++) {
        if (node.lastChild.nodeValue == name) {
            curcol = i;
            if (node.className == "curcol") {

                //arrow = node.firstChild;
                arrow = node.firstChild;

                table.up = Number(!up);

                //arrow.src = img_dir + table.up + ".gif";
                arrow.src = img_dir + table.up + ".gif";
            } else {
                node.className = "curcol";
                //arrow = node.insertBefore(document.createElement("img"),node.firstChild);
                arrow = node.insertBefore(document.createElement("img"), node.firstChild);

                table.up = 0;

                //arrow.src = img_dir + Number(table.up) + ".gif";
                arrow.src = img_dir + Number(table.up) + ".gif";
            }
        } else {
            if (node.className == "curcol") {
                node.className = "";

                //if (node.firstChild) node.removeChild(node.firstChild);
                if (node.firstChild) node.removeChild(node.firstChild);
            }
        }
    }
    var tbody = table.getElementsByTagName("tbody").item(0);
    for (var i = 0; (node = tbody.getElementsByTagName("tr").item(i)); i++) {
        a[i] = new Array();
        a[i][0] = getConcatenedTextContent(node.getElementsByTagName("td").item(curcol));
        a[i][1] = getConcatenedTextContent(node.getElementsByTagName("td").item(1));
        a[i][2] = getConcatenedTextContent(node.getElementsByTagName("td").item(0));
        a[i][3] = node;
    }
    a.sort(_sort);
    if (table.up) a.reverse();
    for (var i = 0; i < a.length; i++) {
        tbody.appendChild(a[i][3]);
    }
    var Hid = document.getElementById("id_" + tbody.parentNode.getAttribute("attrName"));
    gridToHidden(Hid, tbody);
}

// init of all process
function init(e) {
    if (!document.getElementsByTagName) return;
    for (var j = 0; (thead = document.getElementsByTagName("thead").item(j)); j++) {
        var node;
        for (var i = 0; (node = thead.getElementsByTagName("th").item(i)); i++) {
            if (node.addEventListener) node.addEventListener("click", sort, false);
            else if (node.attachEvent) node.attachEvent("onclick", sort);
            node.title = "Click to title to sort col.";
            // set alt for header
        }
        thead.parentNode.up = 0;
    }
}

// start init() on load
var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if (root) {
    if (root.addEventListener) root.addEventListener("load", init, false);
    else if (root.attachEvent) root.attachEvent("onload", init);
}

/* ------------------------------- editable object list ---------------------------------- */
var eattrHtml = null;
var isEAttrChanged = false;
var currentFieldValue=null;
/* init editable content in object list */
function initEditableObjList(e) {
    if (!document.getElementsByTagName) return;

    var node;
    var isHasEAttr = false;
    for (var j = 0; (node = document.getElementsByTagName("span").item(j)); j++) {
        if (node.className == "eattr" && node.getAttribute("readonly") == "false") {
            isHasEAttr = true;
            if (node.innerHTML.length == 0) {
                node.parentNode.onclick = new Function("doEdit(null,getFirstChildTag(this))");
            }
        }
    }

    /* if frame undefined - add it !!! */
    if (isHasEAttr && !document.getElementById(eframeName)) {
        var newTag = document.createElement("IFRAME");
        newTag.className = "eattrFrame";
        newTag.id = eframeName;
        newTag.name = eframeName;
        /* get body tag */
        if (document.getElementsByTagName("body").length == 0)
            return;
        var body = document.getElementsByTagName("body").item(0);
        /* add frame */
        try {
            body.insertAdjacentHTML("BeforeBegin", "<iframe id='" + eframeName + "' name='" + eframeName + "' class='eattrFrame' style='width:0px;height:0px;position:absolute;'></iframe>");
        } catch(e) {
            body.appendChild(newTag);
        }
        window.frames[eframeName].name = eframeName;
        if (window.frames[eframeName] && window.frames[eframeName].document) {
            // Yo !
            window.frames[eframeName].document.open();
            window.frames[eframeName].document.close();
        }
        /* add form */
        newTag = document.createElement("FORM");
        newTag.setAttribute("ACTION", "update.sx");
        newTag.action = "update.sx";
        newTag.method = "POST";
        newTag.target = eframeName;

        newTag.id = eformName;
        newTag.name = eformName;
        newTag.className = "eattrFrame";
        body.appendChild(newTag);
        addInput(newTag, "objId", "");
        addInput(newTag, "attrName", "");
        addInput(newTag, "value", "");
        document.forms[eformName].innerHTML += "";
        // Yo !
        document.close();
    }
}
function doEdit(e, el) {
    isEAttrChanged = false;
    var type = el.getAttribute("type");
    if (el.getAttribute("readonly") == "false") {
        if (type == "string") {
            setNewStr(el);
        }
        if (type == "boolean") {
            setNewBoolean(el);
        }
    }
}
function setNewStr(el) {
    var text = getFirstChildTag(el);
    if (text && text.tagName == "INPUT" && text.type.toUpperCase() == "TEXT")
        return;
    eattrHtml = el.innerHTML;
    el.innerHTML = "";
    var tip = el.getAttribute("attrType");
    var inputTag = document.createElement("INPUT");
    inputTag.type = "text";
    inputTag.value = eattrHtml;
    inputTag.className = "editStringAttr";
    if (tip != null) {
        inputTag.setAttribute("attrType", tip);
    }
    el.appendChild(inputTag);
    inputTag.focus();

    /* attach event */
    var node = inputTag;
    if (node.addEventListener) node.addEventListener("onfocus", getCurrentFieldValue, false);
    else if (node.attachEvent) node.attachEvent("onfocus", getCurrentFieldValue);

	if (node.addEventListener) node.addEventListener("blur", getNewStr, false);
    else if (node.attachEvent) node.attachEvent("onblur", getNewStr);

    if (node.addEventListener) node.addEventListener("change", setEAttrChanged, false);
    else if (node.attachEvent) node.attachEvent("onchange", setEAttrChanged);
}
function setNewBoolean(el) {
    var checkBox = getFirstChildTag(el);
    if (!checkBox || !(checkBox.tagName == "INPUT" && checkBox.type.toUpperCase() == "CHECKBOX"))
        return;

    var inputTag = checkBox;
    inputTag.value = checkBox.checked;

    /* attach event */
    var el = inputTag;
    var node = el.parentNode;
    document.forms[eformName].value.value = el.value;
    document.forms[eformName].objId.value = node.getAttribute("objId");
    document.forms[eformName].attrName.value = node.getAttribute("attrName");
    document.forms[eformName].submit();
}
function getCurrentFieldValue(e) {
   var obj = window.event ? window.event.srcElement : e.currentTarget;
   if(obj==null || obj.tagName!="INPUT") return;
   currentFieldValue=obj.value;
}
function testIfChanged(obj){
   if(obj==null || obj.tagName!="INPUT") return;
   if(currentFieldValue!=null && currentFieldValue!=obj.value)  isEAttrChanged = true;
}

function setEAttrChanged(e) {
    isEAttrChanged = true;
}
function getNewStr(e) {
    var el = window.event ? window.event.srcElement : e.currentTarget;
    testIfChanged(el);
    var node = el.parentNode;
    if (isEAttrChanged) {
        document.forms[eformName].value.value = el.value;
        document.forms[eformName].objId.value = node.getAttribute("objId");
        document.forms[eformName].attrName.value = node.getAttribute("attrName");

        var correct = true;
        if (el.getAttribute("attrType") != null)
        {
            var type = el.getAttribute("attrType");
            if (type == "2") {
                // Integer
                if (checkinteger(el.value) == false) {
                    alert("Это поле может содержать только целые числа");
                    correct = false;
                }
            } else if (type == "3") {
                // Float
                if (checknumber(el.value) == false) {
                    alert("Это поле может содержать только вещественные значения");
                    correct = false;
                }
            }
        }
        //if (!correct) el.value="";
        document.forms[eformName].submit();
        if (!(el.tagName == "INPUT" && el.type.toUpperCase() == "TEXT") || eattrHtml != null)
            node.innerHTML = el.value;

    } else {
        if (!(el.tagName == "INPUT" && el.type.toUpperCase() == "TEXT") || eattrHtml != null)
            node.innerHTML = eattrHtml;
    }
}

// start initEditableObjList() on load
if (root) {
    if (root.addEventListener) root.addEventListener("load", initEditableObjList, false);
    else if (root.attachEvent) root.attachEvent("onload", initEditableObjList);
}

function er_invert(id) {
    var el = document.getElementById(id);
    if (el) {
        el.style.display = el.style.display != "block" ? "block" : "none";
    }
}

var savedForm = null;

function saveSearchForm(form, target, id, promptTitle, selName, isDeleteMode) {
    if (isDeleteMode || (promptTitle && promptTitle.length > 0)) {
        if (!isDeleteMode) {
            savedForm = form[selName];
        } else {
            savedForm = null;
        }
        var prevAction = form.action;
        var prevTarget = form.target;
        form.action = "saveSearchForm.sx";
        form.target = target;
        addInput(form, "objId", id);
        if (promptTitle)
            addInput(form, "title", promptTitle);
        if (isDeleteMode) {
            addInput(form, "cmd", "delete");
        }
        form.submit();
        var node = form["cmd"];
        if (node)
            form.removeChild(node);

        node = form["title"];
        if (node && promptTitle) {
            form.removeChild(node);
        }

        node = form["objId"];
        if (node)
            form.removeChild(node);

        form.action = prevAction;
        form.target = prevTarget;
    }
}

function deleteSearchForm(form, target, id) {
    var Sel = form[id];
    if (!id || !Sel.value || Sel.value == "")
        return;
    saveSearchForm(form, target, Sel.value, null, null, true);
    i = 0;
    while (i < Sel.length)
    {
        if (Sel.options[i].selected)
        {
            Sel.remove(i);
        }
        else ++i;
    }
}

function addSavedForm(txt, val) {
    var Sel = savedForm;
    if (!Sel)
        return;
    var newop = document.createElement("OPTION");
    newop.value = txt;
    newop.text = val;
    if (isIE) {
        Sel.add(newop);
    } else {
        Sel.add(newop, null);
    }
    newop.selected = true;
}

function selectAll(win, obj) {
    var elements = document.getElementsByTagName("input");
    for (var i = 0; i < elements.length; i++) {
        var el = elements[i];
        if ((mode = el.getAttribute("mode")) != null && mode == "selectable") {
            if (!obj || ((obj.checked && !el.checked) || (!obj.checked && el.checked))) {
                el.click();
            }
        }
    }
}

function onPerformUnload(win, func) {
    var root = win.addEventListener || win.attachEvent ? win : win.document.addEventListener ? win.document : null;
    if (root) {
        if (root.addEventListener) root.addEventListener("unload", func, false);
        else if (root.attachEvent) root.attachEvent("onunload", func);
    }
}

/* ------------------------------------ */
var temp_select_element = null;
var temp_select_element_class = null;
var select_newclass = "hi";
var select_variable = "id";
var select_page = "admin/edit.htm";
var select_win_params = null;
var keyCode_1,keyCode_2,keyCode_3,keyCode_4,whatevent;

function keyDown(e) {
    var el = window.event ? window.event.srcElement : e.currentTarget;
    var keyEvent = window.event ? window.event : e;
    if (keyEvent.ctrlKey) {
        keyCode_1 = "Ctr";
        keyCode_4 = keyEvent.keyCode
    }
    if (keyEvent.altKey) {
        keyCode_2 = "Alt";
        keyCode_4 = keyEvent.keyCode
    }
    if (keyEvent.shiftKey) {
        keyCode_3 = "Shift";
        keyCode_4 = keyEvent.keyCode
    }
    keyCode_4 = keyEvent.keyCode;

    // set action methods
    if (keyCode_4 == "38") {
        whatevent = "key";
        goUp(select_newclass)
    }
    ;
    if (keyCode_4 == "40") {
        whatevent = "key";
        goDown(select_newclass)
    }
    ;
    if (keyCode_1 == null && keyCode_2 == null && keyCode_3 == null && keyCode_4 == "13") {
        goEnter(select_page, select_variable, select_win_params)
    }
    ;
}

function keyUp() {
    keyCode_1 = null;
    keyCode_2 = null;
    keyCode_3 = null;
    keyCode_4 = null;

}

function initKeyAction(newClass, page, variable, params) {
    // set new key event
    window.document.onkeydown = keyDown;
    window.document.onkeyup = keyUp;
    if (newClass)
        select_newclass = newClass;
    if (page)
        select_page = page;
    if (variable)
        select_variable = variable;
    if (params)
        select_win_params = params;
}

function setDefSelectElement(id, newClass) {
    if (!id)
        return;
    var obj = document.getElementById(id);
    if (!id)
        return;
    // get first child element
    temp_select_element = getFirstChildTag(obj);
    // save element style
    if (temp_select_element)
        temp_select_element_class = temp_select_element.className;
    // highlight element
    goInvert(temp_select_element, newClass);
}

function goInvert(newObj, newClass) {
    if (newObj) {
        // return prev style for temp element
        if (temp_select_element_class && temp_select_element)
            temp_select_element.className = temp_select_element_class;
        // set new temp element
        temp_select_element = newObj;
        // save new element class
        temp_select_element_class = newObj.className;
        // set new class
        newObj.className = newClass;
    }
}

// key up
function goUp(newClass) {
    if (!temp_select_element)
        return;
    var newObj = getPrevSiblingTag(temp_select_element);
    goInvert(newObj, newClass);
}

// key down
function goDown(newClass) {
    if (!temp_select_element)
        return;
    var newObj = getNextSiblingTag(temp_select_element);
    goInvert(newObj, newClass);
}

// key enter
function goEnter(page, variable, params) {
    if (!temp_select_element)
        return;
    window.open(baseUrl + page + "?" + variable + "=" +
                temp_select_element.getAttribute("objId"), "_blank", params);
}

// устанавливает значения по флажкам  для списка чекбоксов
function setCheckBoxListValue(attrName)
{    // alert(attrName);
    var Hid = document.getElementById("id_" + attrName);
    // куда писать
    var idAll = document.getElementById("idAll_" + attrName);
    // все Id
    var ar = idAll.value.split(",");
    Hid.value = "";
    for (i = 0; i < ar.length; i++)
    {
        if (ar[i].length != 0)
        { // alert(ar[i]);
            var CheckField = document.getElementById("check_" + attrName + "_" + ar[i]);
            // alert(CheckField.checked);
            if (CheckField.checked)
            {
                Hid.value = Hid.value + "," + ar[i];
            }
        }
    }
}
// устанавливает флажки для выбранных чекбоксов для списка чекбоксов
function setCheckedBoxList(attrName) {
    var Hid = document.getElementById("id_" + attrName);
    // откуда брать текущие значения
    var ar = Hid.value.split(",");
    for (i = 0; i < ar.length; i++)
    {
        if (ar[i].length != 0)
        { // alert(ar[i]);
            var CheckField = document.getElementById("check_" + attrName + "_" + ar[i]);
            // alert(CheckField.checked);
            CheckField.checked = true;
        }
    }
}

// Выводит всплывающее окно с сообщением
function popupMsgOn(inWindow, str, title) {
    var newlayer = "";
    inWindow.document.body.scrollTop = 0;
    inWindow.document.body.scrollLeft = 0;

    stopAllEvent(inWindow);

    newlayer = '<table id="blocklayer" style="display:none; POSITION:  absolute; left: 0px; TOP: 0px; WIDTH: 100%; HEIGHT:100%; Z-INDEX: 100; filter: Alpha(Opacity=30);background-color:Menu"><tr><td style="">&nbsp;</td></tr></table>';
    titletr = "";
    if (title != null) {
        titletr = '<tr><td align="left" valign="top" height="1" style="background-color: ActiveCaption; color: CaptionText;padding-left:3px;padding-bottom:2px">' + title + '</td></tr>';
    }
    header = '<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"></head>';
    newdiv = '<table width="100%" height="100%" cellpadding="1" cellspacing="1" style="font-family: Arial, Helvetica, sans-serif;font-size: 10pt;border-width:1px;border-style:outset;background-color:Menu">' + titletr + '<tr><td align="center" valign="middle" height="100%"><div class="menuitems">' + str + '</div></td></tr></table>';

    if (inWindow.document.getElementById("newpopupmsg") != null) {
        //	  inWindow.document.getElementById("newpopupmsg").outerHTML = "";
        inWindow.document.getElementById("newpopupmsg").innerHTML = "";
    }

    if (inWindow.document.getElementById("newlayer") != null) {
        //	  inWindow.document.all.newlayer.outerHTML = "";
        inWindow.document.getElementById("newlayer").innerHTML = "";
    }

    // Эмуляция работы insertAdjacentHTML для Mozilla
    //*******************************************
    if (typeof HTMLElement != "undefined" && ! HTMLElement.prototype.insertAdjacentElement) {
        HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode)
        {
            switch (where) {
                case 'beforeBegin':  this.parentNode.insertBefore(parsedNode, this)
                    break;
                case 'afterBegin':        this.insertBefore(parsedNode, this.firstChild);
                    break;
                case 'beforeEnd':       this.appendChild(parsedNode);
                    break;
                case 'afterEnd':            if (this.nextSibling)
                    this.parentNode.insertBefore(parsedNode, this.nextSibling);
                else this.parentNode.appendChild(parsedNode);
                    break;
            }
        }

        HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr)
        {
            var r = this.ownerDocument.createRange();
            r.setStartBefore(this);
            var parsedHTML = r.createContextualFragment(htmlStr);
            this.insertAdjacentElement(where, parsedHTML)
        }
    }
    //**************************************************

    inWindow.document.getElementsByTagName("TABLE")[0].insertAdjacentHTML("beforeBegin", newlayer + '<IFRAME APPLICATION="yes" name="popupIFRAME" src="" id="newpopupmsg" style="position:absolute;Z-INDEX: 200;visibility: visible;width:220;height:100px;filter : revealTrans(Duration=1.0, Transition=12);" frameborder="0" marginheight="0" marginwidth="0" scrolling="No"></IFRAME>');

    inWindow.frames["popupIFRAME"].document.write(header + '<body>' + newdiv + '</body>');
    inWindow.frames["popupIFRAME"].document.close();
    x_offset = Math.round(( (isIE?inWindow.document.body.clientWidth:inWindow.outerWidth) - inWindow.document.getElementById("newpopupmsg").offsetWidth) * 4 / 9);
    x = (isIE||isOpera?inWindow.document.body.scrollLeft:inWindow.scrollX) + x_offset;
    y_offset = Math.round(( (isIE?inWindow.document.body.clientHeight:inWindow.innerHeight) - inWindow.document.getElementById("newpopupmsg").offsetHeight) * 4 / 9);
    y = (isIE||isOpera?inWindow.document.body.scrollTop:inWindow.scrollY) + y_offset;
    if (isIE && isOpera) {
        inWindow.document.getElementById("newpopupmsg").style.pixelLeft = x;
        inWindow.document.getElementById("newpopupmsg").style.pixelTop = y;
    }
    else {
        inWindow.document.getElementById("newpopupmsg").style.left = x;
        inWindow.document.getElementById("newpopupmsg").style.top = y;
    }
    if (isIE) inWindow.document.getElementById("newpopupmsg").filters.item(0).Apply();
    inWindow.document.getElementById("newpopupmsg").style.visibility = "visible";
    if (isIE)    inWindow.document.getElementById("newpopupmsg").filters.item(0).Play();
}

// Выводит всплывающее окно с сообщением без алерта клик мыши
function popupMsgOnNoAlert(inWindow, str, title) {
    var newlayer = "";
    inWindow.document.body.scrollTop = 0;
    inWindow.document.body.scrollLeft = 0;

    stopAllEventNoAlert(inWindow);

    newlayer = '<table id="blocklayer" style="display:none; POSITION:  absolute; left: 0px; TOP: 0px; WIDTH: 100%; HEIGHT:100%; Z-INDEX: 100; filter: Alpha(Opacity=30);background-color:Menu"><tr><td style="">&nbsp;</td></tr></table>';
    titletr = "";
    if (title != null) {
        titletr = '<tr><td align="left" valign="top" height="1" style="background-color: ActiveCaption; color: CaptionText;padding-left:3px;padding-bottom:2px">' + title + '</td></tr>';
    }
    header = '<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"></head>';
    newdiv = '<table width="100%" height="100%" cellpadding="1" cellspacing="1" style="font-family: Arial, Helvetica, sans-serif;font-size: 10pt;border-width:1px;border-style:outset;background-color:Menu">' + titletr + '<tr><td align="center" valign="middle" height="100%"><div class="menuitems">' + str + '</div></td></tr></table>';

    if (inWindow.document.getElementById("newpopupmsg") != null) {
        //	  inWindow.document.getElementById("newpopupmsg").outerHTML = "";
        inWindow.document.getElementById("newpopupmsg").innerHTML = "";
    }

    if (inWindow.document.getElementById("newlayer") != null) {
        //	  inWindow.document.all.newlayer.outerHTML = "";
        inWindow.document.getElementById("newlayer").innerHTML = "";
    }

    // Эмуляция работы insertAdjacentHTML для Mozilla
    //*******************************************
    if (typeof HTMLElement != "undefined" && ! HTMLElement.prototype.insertAdjacentElement) {
        HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode)
        {
            switch (where) {
                case 'beforeBegin':  this.parentNode.insertBefore(parsedNode, this)
                    break;
                case 'afterBegin':        this.insertBefore(parsedNode, this.firstChild);
                    break;
                case 'beforeEnd':       this.appendChild(parsedNode);
                    break;
                case 'afterEnd':            if (this.nextSibling)
                    this.parentNode.insertBefore(parsedNode, this.nextSibling);
                else this.parentNode.appendChild(parsedNode);
                    break;
            }
        }

        HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr)
        {
            var r = this.ownerDocument.createRange();
            r.setStartBefore(this);
            var parsedHTML = r.createContextualFragment(htmlStr);
            this.insertAdjacentElement(where, parsedHTML)
        }
    }
    //**************************************************
    inWindow.document.getElementsByTagName("TABLE")[0].insertAdjacentHTML("beforeBegin", newlayer + '<IFRAME APPLICATION="yes" name="popupIFRAME" src="" id="newpopupmsg" style="position:absolute;Z-INDEX: 200;;filter: Alpha(Opacity=30);visibility: visible;width:'+(isIE?inWindow.document.body.clientWidth:inWindow.outerWidth)+';height:'+(isIE?inWindow.document.body.clientHeight:inWindow.innerHeight)+'px;filter : revealTrans(Duration=1.0, Transition=12);" frameborder="0" marginheight="0" marginwidth="0" scrolling="No"></IFRAME>');

    inWindow.frames["popupIFRAME"].document.write(header + '<body>' + newdiv + '</body>');
    inWindow.frames["popupIFRAME"].document.close();
    x_offset = Math.round(( (isIE?inWindow.document.body.clientWidth:inWindow.outerWidth) - inWindow.document.getElementById("newpopupmsg").offsetWidth) * 4 / 9);
    x = (isIE?inWindow.document.body.scrollLeft:inWindow.scrollX) + x_offset;
    y_offset = Math.round(( (isIE?inWindow.document.body.clientHeight:inWindow.innerHeight) - inWindow.document.getElementById("newpopupmsg").offsetHeight) * 4 / 9);
    y = (isIE?inWindow.document.body.scrollTop:inWindow.scrollY) + y_offset;
    if (isIE) {
        inWindow.document.getElementById("newpopupmsg").style.pixelLeft = x;
        inWindow.document.getElementById("newpopupmsg").style.pixelTop = y;
    }
    else {
        inWindow.document.getElementById("newpopupmsg").style.left = x;
        inWindow.document.getElementById("newpopupmsg").style.top = y;
    }
    if (isIE) inWindow.document.getElementById("newpopupmsg").filters.item(0).Apply();
    inWindow.document.getElementById("newpopupmsg").style.visibility = "visible";
    if (isIE)    inWindow.document.getElementById("newpopupmsg").filters.item(0).Play();
}

// Выводит всплывающее окно с сообщением 
function popupMsgOnNew(inWindow, str, title, noAlert, fullScreen, indent, zIndex) {
    var newlayer = "";
    inWindow.document.body.scrollTop = 0;
    inWindow.document.body.scrollLeft = 0;

    if (noAlert) {
        stopAllEventNoAlert(inWindow);
    } else {
        stopAllEvent(inWindow);
    }

    var br="";   //кол-во строк до надписи
    var valign="middle";
    if (indent != null) {
      for (var i=1; i <= indent; i++) {
        br = br +"<BR>"
      }
      valign = "top";  
    }

    newlayer = '<table id="blocklayer" style="display:none; POSITION:  absolute; left: 0px; TOP: 0px; WIDTH: 100%; HEIGHT:100%; Z-INDEX: 100; filter: Alpha(Opacity=30);background-color:Menu"><tr><td style="">&nbsp;</td></tr></table>';
    titletr = "";
    if (title != null) {
        titletr = '<tr><td align="left" valign="top" height="1" style="background-color: ActiveCaption; color: CaptionText;padding-left:3px;padding-bottom:2px">' + title + '</td></tr>';
    }
    header = '<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"></head>';
    newdiv = '<table width="100%" height="100%" cellpadding="1" cellspacing="1" style="font-family: Arial, Helvetica, sans-serif;font-size: 10pt;border-width:1px;border-style:outset;background-color:Menu">' + titletr + '<tr><td align="center" valign="' + valign +'" height="100%">' + br + '<div class="menuitems">' + str + '</div></td></tr></table>';

    if (inWindow.document.getElementById("newpopupmsg") != null) {
        //	  inWindow.document.getElementById("newpopupmsg").outerHTML = "";
        inWindow.document.getElementById("newpopupmsg").innerHTML = "";
    }

    if (inWindow.document.getElementById("newlayer") != null) {
        //	  inWindow.document.all.newlayer.outerHTML = "";
        inWindow.document.getElementById("newlayer").innerHTML = "";
    }

    // Эмуляция работы insertAdjacentHTML для Mozilla
    //*******************************************
    if (typeof HTMLElement != "undefined" && ! HTMLElement.prototype.insertAdjacentElement) {
        HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode)
        {
            switch (where) {
                case 'beforeBegin':  this.parentNode.insertBefore(parsedNode, this)
                    break;
                case 'afterBegin':        this.insertBefore(parsedNode, this.firstChild);
                    break;
                case 'beforeEnd':       this.appendChild(parsedNode);
                    break;
                case 'afterEnd':            if (this.nextSibling)
                    this.parentNode.insertBefore(parsedNode, this.nextSibling);
                else this.parentNode.appendChild(parsedNode);
                    break;
            }
        }

        HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr)
        {
            var r = this.ownerDocument.createRange();
            r.setStartBefore(this);
            var parsedHTML = r.createContextualFragment(htmlStr);
            this.insertAdjacentElement(where, parsedHTML)
        }
    }
    //**************************************************
    if (fullScreen) {
        if (zIndex !=null) {
            inWindow.document.getElementsByTagName("TABLE")[0].insertAdjacentHTML("beforeBegin", newlayer + '<IFRAME APPLICATION="yes" name="popupIFRAME" src="" id="newpopupmsg" style="position:absolute;Z-INDEX:' + zIndex + 'filter: Alpha(Opacity=30);visibility: visible;width:' + (isIE ? inWindow.document.body.clientWidth : inWindow.outerWidth) + ';height:' + (isIE ? inWindow.document.body.clientHeight : inWindow.innerHeight) + 'px;filter : revealTrans(Duration=1.0, Transition=12);" frameborder="0" marginheight="0" marginwidth="0" scrolling="No"></IFRAME>');
        } else {
            inWindow.document.getElementsByTagName("TABLE")[0].insertAdjacentHTML("beforeBegin", newlayer + '<IFRAME APPLICATION="yes" name="popupIFRAME" src="" id="newpopupmsg" style="position:absolute;Z-INDEX: 200;filter: Alpha(Opacity=30);visibility: visible;width:' + (isIE ? inWindow.document.body.clientWidth : inWindow.outerWidth) + ';height:' + (isIE ? inWindow.document.body.clientHeight : inWindow.innerHeight) + 'px;filter : revealTrans(Duration=1.0, Transition=12);" frameborder="0" marginheight="0" marginwidth="0" scrolling="No"></IFRAME>');
        }
    } else {
        if (zIndex !=null) {
            inWindow.document.getElementsByTagName("TABLE")[0].insertAdjacentHTML("beforeBegin", newlayer + '<IFRAME APPLICATION="yes" name="popupIFRAME" src="" id="newpopupmsg" style="position:absolute;Z-INDEX:' + zIndex + ';visibility: visible;width:220;height:100px;filter : revealTrans(Duration=1.0, Transition=12);" frameborder="0" marginheight="0" marginwidth="0" scrolling="No"></IFRAME>');
        } else {
            inWindow.document.getElementsByTagName("TABLE")[0].insertAdjacentHTML("beforeBegin", newlayer + '<IFRAME APPLICATION="yes" name="popupIFRAME" src="" id="newpopupmsg" style="position:absolute;Z-INDEX: 200;visibility: visible;width:220;height:100px;filter : revealTrans(Duration=1.0, Transition=12);" frameborder="0" marginheight="0" marginwidth="0" scrolling="No"></IFRAME>');
        }
    }
    
    inWindow.frames["popupIFRAME"].document.write(header + '<body>' + newdiv + '</body>');
    inWindow.frames["popupIFRAME"].document.close();
    x_offset = Math.round(( (isIE?inWindow.document.body.clientWidth:inWindow.outerWidth) - inWindow.document.getElementById("newpopupmsg").offsetWidth) * 4 / 9);
    x = (isIE?inWindow.document.body.scrollLeft:inWindow.scrollX) + x_offset;
    y_offset = Math.round(( (isIE?inWindow.document.body.clientHeight:inWindow.innerHeight) - inWindow.document.getElementById("newpopupmsg").offsetHeight) * 4 / 9);
    y = (isIE?inWindow.document.body.scrollTop:inWindow.scrollY) + y_offset;


      if (isIE) {
          inWindow.document.getElementById("newpopupmsg").style.pixelLeft = x;
          inWindow.document.getElementById("newpopupmsg").style.pixelTop = y/4;
      }
      else {
          inWindow.document.getElementById("newpopupmsg").style.left = x;
          inWindow.document.getElementById("newpopupmsg").style.top = y;
      }

    if (isIE) inWindow.document.getElementById("newpopupmsg").filters.item(0).Apply();
    inWindow.document.getElementById("newpopupmsg").style.visibility = "visible";
    if (isIE)    inWindow.document.getElementById("newpopupmsg").filters.item(0).Play();
}
function popupMsgOff(inWindow) {
    envokeAllEvent(inWindow)
    if (inWindow.document.getElementById("newpopupmsg") != null) {
        inWindow.document.getElementById("newpopupmsg").outerHTML = "";
        //	  inWindow.document.getElementById("newpopupmsg").innerHTML = "";
    }

    if (inWindow.document.getElementById("newlayer") != null) {
        inWindow.document.getElementById("newlayer").outerHTML = "";
        //	  inWindow.document.getElementById("newlayer").innerHTML = "";
    }
}

function envokeAllEvent(winObj) {

    if (winObj.document.removeEventListener) {
        winObj.removeEventListener("scroll", stopscroll, false);
        winObj.document.removeEventListener("mouseup", stopclick, false);
        winObj.document.removeEventListener("keydown", stopkeypress, false);
        winObj.document.removeEventListener("keyup", stopkeypress, false);
    }
    else if (winObj.document.detachEvent) {
        winObj.detachEvent("onscroll", stopscroll);
        winObj.document.detachEvent("onmouseup", stopclick);
        winObj.document.detachEvent("onmousedown", stopclick);
        winObj.document.detachEvent("onkeydown", stopkeypress);
        winObj.document.detachEvent("onkeyup", stopkeypress);
    }

}


function stopAllEvent(winObj) {

    winObj.document.oncontextmenu = new Function("return false");
    //	winObj.document.onmouseup=new Function("return false");

    if (winObj.document.addEventListener) {
        winObj.addEventListener("scroll", stopscroll, false);
        winObj.document.addEventListener("mouseup", stopclick, false);
        winObj.document.addEventListener("keydown", stopkeypress, false);
        winObj.document.addEventListener("keyup", stopkeypress, false);
    }
    else if (winObj.document.attachEvent) {
        winObj.attachEvent("onscroll", stopscroll);
        winObj.document.attachEvent("onmouseup", stopclick);
        winObj.document.attachEvent("onmousedown", stopclick);
        winObj.document.attachEvent("onkeydown", stopkeypress);
        winObj.document.attachEvent("onkeyup", stopkeypress);
    }
}
//без алерта на клик мыши
function stopAllEventNoAlert(winObj) {

    winObj.document.oncontextmenu = new Function("return false");
    //	winObj.document.onmouseup=new Function("return false");

    if (winObj.document.addEventListener) {
        winObj.addEventListener("scroll", stopscroll, false);
        winObj.document.addEventListener("mouseup", stopclicknoalert, false);
        winObj.document.addEventListener("keydown", stopkeypress, false);
        winObj.document.addEventListener("keyup", stopkeypress, false);
    }
    else if (winObj.document.attachEvent) {
        winObj.attachEvent("onscroll", stopscroll);
        winObj.document.attachEvent("onmouseup", stopclicknoalert);
        winObj.document.attachEvent("onmousedown", stopclicknoalert);
        winObj.document.attachEvent("onkeydown", stopkeypress);
        winObj.document.attachEvent("onkeyup", stopkeypress);
    }
}

function stopkeypress(e) {
    var e = window.event ? window.event : e;
    e.cancelBubble = true;
    if (e.stopPropagation) {
        e.stopPropagation();
    }
    return false;
}

function stopclick(e) {
    var e = window.event ? window.event : e;
    e.cancelBubble = true;
    if (e.stopPropagation) {
        e.stopPropagation();
    }
    alert('Выполняется действие, пожалуйста подождите.');
}
//без алерта, не блокирует клик
function stopclicknoalert(e) {
    var e = window.event ? window.event : e;
    e.cancelBubble = true;
    if (e.stopPropagation) {
        e.stopPropagation();
    }

}


function stopscroll(e) {
    window.scrollTo(0, 0);
    var e = window.event ? window.event : e;
    e.cancelBubble = true;
    if (e.stopPropagation) {
        e.stopPropagation();
    }
}

