var popupWinWidth = 750;
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 isBreakSearchData = false;

var displayDialog = true;

function $(id) {
  return document.getElementById(id);
}

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) {
  if (val == undefined) return;
  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();
    var result = (self.parent.opener && 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();
    try {
      var result = (window.opener && 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;
      type = selectTags[i].attrType;
      title = selectTags[i].attrTitle;
      var mandatory = selectTags[i].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.
  return object_value.match('^([\+]|[\-]){0,1}([0-9]+)$');
}

function checknumber(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 a number defined as
  //   having an optional leading + or -.
  //   having at most 1 decimal point.
  //   otherwise containing only the characters 0-9.
  //   ([\+]|[\-]){0,1} - optional leading + or -
  //   ([0-9]+)[\.]{0,1}([0-9]+) - 1232133284.45654654 or 1231231232131
  return object_value.match('^([\+]|[\-]){0,1}([0-9]+)[\.]{0,1}([0-9]+)$');
}
function checkEmail(email) {
  if (!email ||
      !email.match('^([a-zA-Z0-9_\.-]+)@(([a-zA-Z0-9-]+)[\.]{1})+([a-zA-Z]{2,4})$')) {
    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");
    if (field) {
      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) {
  var e = window.event ? window.event : (e == null) ? null : e;
  if (e != null) {
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
  }
  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 getSearchObj(attrName, refClass, page) {
  if (document.getElementById("searchFrame_" + attrName)) {
    var valueObj = document.getElementById("title_" + attrName);
    var idObj = document.getElementById("id_" + attrName);
    if (idObj) {
      idObj.value = "";
    }
    if (valueObj) {
      var url = baseUrl + page + '.htm?attr=' + attrName + '&cmd=search&defaultForm=easySearch&cls=' + refClass + '&condAll=start&valueAll=' + valueObj.value;
      document.getElementById("searchFrame_" + attrName).src = "";
      document.getElementById("searchFrame_" + attrName).src = url;
    }
  } else {
    alert("Frame searchFrame_" + attrName + " not found");
  }
}

function setSearchObj(selectObj, attrName, className) {
  var valueObj = document.getElementById("title_" + attrName);
  var idObj = document.getElementById("id_" + attrName);
  var tvalueObj = document.getElementById("ttitle_" + attrName);
  var tidObj = document.getElementById("tid_" + attrName);
  var selectDiv = document.getElementById("searchDiv_" + attrName);
  if (selectObj && valueObj && idObj) {
    var selectOption = selectObj.options[selectObj.selectedIndex];
    valueObj.value = selectOption.value;
    idObj.value = selectOption.link;
    if (tidObj) {
      tidObj.value = selectOption.link;
    }
    if (tvalueObj) {
      tvalueObj.value = selectOption.value;
    }
    selectDiv.style.display = 'none';
    valueObj.className = className;
  }
}

function breakSearchData(attrName) {
  isBreakSearchData = true;
  var divObj = document.getElementById("searchDiv_" + attrName);
  var valueObj = document.getElementById("title_" + attrName);
  if (valueObj && divObj) {
    valueObj.focus();
    divObj.style.display = 'none';
  }
}

function blurSearchData(attrName) {
  var divObj = document.getElementById("searchDiv_" + attrName);
  var valueObj = document.getElementById("title_" + attrName);
  if (valueObj && divObj) {
    divObj.style.display = 'none';
    valueObj.onblur();
  }
}

function blurSearchFocus(attrName, className) {
  var divObj = document.getElementById("searchDiv_" + attrName);
  var valueObj = document.getElementById("title_" + attrName);
  var idObj = document.getElementById("id_" + attrName);
  var tvalueObj = document.getElementById("ttitle_" + attrName);
  var tidObj = document.getElementById("tid_" + attrName);
  var searchSelect = document.getElementById("search_" + attrName);
  if (idObj && tidObj && valueObj && tvalueObj && divObj && (divObj.style.display == 'none' || searchSelect.length == 1)) {
    if (idObj.value == tidObj.value && valueObj.value != tvalueObj.value) {
      valueObj.value = tvalueObj.value;
    }
    if (idObj.value == "") {
      valueObj.value = tvalueObj.value;
      idObj.value = tidObj.value;
    }
    valueObj.className = className;
    valueObj.blur();
  }
}

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);
    var isLinkNto1 = document.getElementById("isLinkNto1_" + 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[_i])  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;
      var mainTable = table;
      if (!(table.nodeName == "TABLE" || table.nodeName == "table")) {
        table = table.parentNode;
        mainTable = table;
        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("objId", ret_1_List[_i]);
        trElem.className = "gridRow";

        tdEmptyElem = document.createElement("td");
        txtEmptyNode = document.createTextNode(" ");
        tdEmptyElem.appendChild(txtEmptyNode);

        tdElem = document.createElement("td");
        txtNode = document.createTextNode(ret_2_List[_i]);
        tdElem.appendChild(txtNode);

        trElem.appendChild(tdEmptyElem);
        trElem.appendChild(tdElem);

        var tableCols = mainTable.getElementsByTagName("thead").item(0).getElementsByTagName("td").length + mainTable.getElementsByTagName("thead").item(0).getElementsByTagName("th").length;
        for (var x = 0; x < (tableCols - 2); x++) {
          tdEmpty = document.createElement("td");
          txtEmpty = document.createTextNode(" ");
          tdEmpty.appendChild(txtEmpty);
          trElem.appendChild(tdEmpty);
          tdEmpty = null;
          txtEmpty = null;
        }

        table.appendChild(trElem);
        table.lastChild.onclick = new Function("gridSelect('grid_','title_','" + attrName + "','" + ret_1_List[_i] + "','silver','gridRow')");
        if (isLinkNto1) {

          Hid.value = ret[0];
          Sel.value = ret[1];
        } else {
          Hid.value += "," + ret_1_List[_i];
        }

      }
    } else {
      Hid.value = ret[0];
      Sel.value = ret[1];
    }

  }
  //for formSave
  //setChanged();
  return true;
}
function delLinkObj(attrName, message) {
  document.getElementById("id_" + attrName).value = "";
  if (!message) {
    message = "";
  }
  document.getElementById("title_" + attrName).value = message;
  //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
  etChanged();
  //		alert(Sel.value);
}

function DelAllFromList(attrName)
{
  var Sel = document.getElementById("title_" + attrName);
  var Hid = document.getElementById("id_" + attrName);
  i = 0;
  while (i < Sel.length)
  {
    Sel.remove(i);
  }
  ToHidden(Sel, Hid);
  if (self.setChanged) setChanged();
}

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 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) {
  if (!form)form = document.forms[document.forms.length - 1];
  if (form[fromField])
    form[fromField].checked = value;
  if (form[toField])
    form[toField].value = 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 = "Сортировка";
      // 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);
  var inpSize = el.offsetWidth;
  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";
  inputTag.style.width = inpSize + "px";
  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 winTarget = "_blank";
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, type) {
  // 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;
  if (type)
    winTarget = type;
}

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"), winTarget, params);
}

function addToHiddenDel(attrName, objId) {
  if (objId == null || objId == "") return;
  var delHid = document.getElementById("del_id_" + attrName);
  if (delHid == null) return;
  var sel = "," + objId;
  delHid.value += sel;
}

function manageCheckBoxAttr(obj) {
  if (!obj || obj.tagName != "INPUT" && obj.type.toUpperCase() != "CHECKBOX") return;
  var val = obj.checked;
  var objId = obj.getAttribute("objId");
  if (!objId) return;
  var attrName = obj.getAttribute("attrName");
  if (!attrName) return;
  if (val) {
    removeFromHiddenDel(attrName, objId);
  } else {
    addToHiddenDel(attrName, objId);
  }
}


function removeFromHiddenDel(attrName, objId) {
  if (!objId) return;
  var delHid = document.getElementById("del_id_" + attrName);
  if (delHid == null) return;
  if (delHid.value == "") return;
  var arr = new Array();
  arr = delHid.value.split(",");
  if (contains(arr, objId)) arr.pop(objId);
  delHid.value = arr.join(",");
}

// устанавливает значения по флажкам  для списка чекбоксов
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;
    }
  }
}

// Выводит всплывающее окно с сообщением
var messageON = false;
function popupMsgOn(inWindow, str, title) {
  if (messageON) return;
  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="font-family: tahoma; background-color: #EC7600; font-weight:bold; color: white;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: tahoma; font-size: 10pt;border-width:1px;border-style:outset;background-color:#FFB46A">' + 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: 2000;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;
  messageON = true;

  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();

  addShadow(self);
  showShadow(self)
}

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 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;
  var src = window.event ? e.srcElement : e.target;
  src.blur();
  e.cancelBubble = true;
  if (e.stopPropagation) {
    e.stopPropagation();
  }
  //  alert('Выполняется действие, пожалуйста подождите.');
}


function stopscroll(e) {
  window.scrollTo(0, 0);
  var e = window.event ? window.event : e;
  e.cancelBubble = true;
  if (e.stopPropagation) {
    e.stopPropagation();
  }
}

function resizeSelect(selId) {
  if (selId == null || selId == "") return;
  var sObj = document.getElementById(selId);
  if (sObj == null || sObj.tagName != "SELECT") return;
  var len = 1;
  for (var x = 0; x < sObj.length; x++) {
    var l = sObj.options[x].text.length;
    if (l > len) len = l;
  }
  sObj.style.width = len + 12 + "ex";
}

function getObjById(id, win) {
  if (id == null) return null;
  if (trim(id) == "") return null;
  var w = (win != null) ? win : window;
  var obj = w.document.getElementById(id);
  if (obj != null) return obj;
  obj = w.document.getElementsByName(id)[0];
  return obj;
}

function addShadow(frame) {
  if (frame == null) frame = self;
  var b = frame.document.getElementsByTagName('body')[0];
  if (frame.document.getElementById("overlay") == null) {
    var overlay = frame.document.createElement('iframe');
    overlay.setAttribute("scrolling", "no");
    overlay.setAttribute("id", "overlay");
    overlay.style.overflow = "hidden";
    b.appendChild(overlay);
  }
}

function showShadow(frame) {
  if (frame == null) frame = self;
  var s = frame.document.getElementById("overlay");
  if (s == null) return;
  var winWidth = isIE ? frame.document.body.clientWidth : frame.outerWidth;
  var winHeight = isIE ? frame.document.body.clientHeight : frame.innerHeight;
  var contentWidth = frame.document.body.scrollWidth;
  var contentHeight = frame.document.body.scrollHeight;

  s.style.width = (contentWidth > winWidth) ? contentWidth : winWidth;
  s.style.height = (contentHeight > winHeight) ? contentHeight : winHeight;
  s.style.display = "block";
}

function hideShadow(frame) {
  if (frame == null) frame = self;
  var s = frame.document.getElementById("overlay");
  if (s == null) return;
  s.style.display = "none";
  currentModalWin = null;
}
//Возвращает размер текущей страницы в байтах (включаю картинки)
//Работает только под ИЕ
function getDocumentByteSize() {
  var total = 0;
  if (isIE) {
    if (document.images) {
      for (var i = 0; i < document.images.length; i++) {
        total += document.images[i].fileSize;
      }
    }
    total += document.fileSize;
    return total;
  } else {
    return -1
  }

}

//manage drop down text in articles (spoiler)
function manageSpoiler(obj,picOff, picOn) {
	if (!obj) return;
//	var pObj=obj.parentNode;
//	if (!pObj) return;
	var ddTextBody=getNextSiblingTag(obj);
	if (!ddTextBody) return;

	if (typeof(picOff)=="undefined" || picOff==null || picOff=="") picOff="images/ad.gif";
	if (typeof(picOn)=="undefined" || picOn==null || picOn=="") picOn="images/au.gif";
	var isClosed=(ddTextBody.style.display=="none");
	if (isClosed) {
		obj.style.background="transparent url("+picOn+") no-repeat left center";
	//	obj.className="sp-head_opened";
		ddTextBody.style.display="block";
	}
	else {
		obj.style.background="transparent url("+picOff+") no-repeat left center";
	//	obj.className="sp-head_closed";
		ddTextBody.style.display="none";
	}
}