/* ------------------------------------------------COMMON PART -----------------------------------------------------*/

var doClose = true;
var doCloseItem = true;
var doCloseOnNoEvent = true;
var menuShowed = false;

var useModalWindows = false;
var currentModalWin = null;

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 winArray = new Array();
var winAttrArray = new Array();
var winLast = null;
var updateFrameFunctionArray = new Array();
var toolbarZones = new Array();
var baseUrl = document.getElementsByTagName("base")[0].href;
var popupWinWidth = 750;
// default window width
var popupWinHeight = 550;
// default window height

var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;

function $(id) {
  return document.getElementById(id);
}

function collapsToolBar(img, id) {
  if (id == null || id == "" || $(id) == null) return;
  var obj = $(id);
  img = (typeof(img) == "object") ? img : (img != null && img != "") ? $(img) : null;
  var mode;
  if (obj.style.display == "none") {
    obj.style.display = "";
    mode = true;
  }
  else {
    obj.style.display = "none";
    mode = false;
  }
  if (img != null) {
    if (mode) newImg(img, collaps_off);
    else newImg(img, collaps_on);
  }
  for (var key in toolbarZones) {
    if (typeof(toolbarZones[key]) == "undefined" || toolbarZones[key] == null) continue;
    var item = toolbarZones[key];
    //	alert("in ccollaps="+key+") id= "+item.id+" mode="+item.display);
    if (item.id == id && item.display != mode) {
      setDisplay(item, mode)
    }
  }
}

function toolbarZone(id, img, display) {
  this.id = id;
  this.img = img;
  this.display = display;
}
function setDisplay(o, val) {
  if (o == null || typeof(o) != "object") return;
  if (typeof(o.display) != "undefined" && o.display != null) o.display = val;
}
function addWin(win, value) {
  //    winLast = win;
  var len = winArray.length;
  winArray[len] = win;
  winAttrArray[len] = value;
}

function getWinAttr(win) {
  var found = false;
  for (var i = 0; i < winArray.length; i++) {
    if (winArray[i] == win && !winArray[i].closed) {
      found = true;
      break;
    }
  }
  if (found) return winAttrArray[i];
  else return null;
}

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 setBaseUrl(str) {
  baseUrl = str;
}

function getBaseUrl() {
  if (baseUrl == null)
    return document.getElementsByTagName("base")[0].href;
  return baseUrl;
}

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 trim(s) {
  return s != null ? s.replace(/(^\s*)|(\s*$)/, "") : s;
}

function replaceSubstring(str, pattern, replace) {
  if (str == null) return "";
  if (pattern == null || pattern == "") return str;
  if (replace == null) replace = "";
  var a = str.split(pattern);
  str = a.join(replace);
  return str;
}


//Поиск позиции элемента
function findPos(id, Offset, Element) {
  x = 0;
  y = 0;
  var el, temp;
  if (Element != null) {
    el = Element;
  } else {
    el = document.getElementById(id);
  }
  //	var message = "";
  if (el.offsetParent) {
    temp = el;
    while (temp.offsetParent) {
      temp = temp.offsetParent;
      //		  message += temp.tagName + ': ' + '[' + temp.offsetLeft + ';' + temp.offsetTop + ']' + '\r\n';
      x += temp.offsetLeft;
      y += temp.offsetTop;
    }
  }
  //	alert(message);
  x += el.offsetLeft;
  y += el.offsetTop + Offset;
  return [x, y];
}

function changeLinksToUTF8() {
	var links = document.getElementsByTagName('a');
	for(var i = 0; i < links.length; i++ ) {
		var link = links[i];
		var href = link.getAttribute('href');
		href = encodeURI(href);
		//href = href.replace(/%2F/ig, '/').replace(/%3A/ig, ':');
		link.setAttribute('href', href);
	}
}

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;
}

//mode(0/1): 0-return array; 1-return first found;
function getObjectByAttr(parentTag, searchTag, attrName, attrVal, mode) {
  if (parentTag == null) return null;
  if (searchTag == null || (searchTag != null && trim(searchTag) == "")) return null;
  if (attrName == null || (attrName != null && trim(attrName) == "")) return null;
  if (attrVal == null) return null;
  var oArr = new Array();
  for (var j = 0; (obj = parentTag.getElementsByTagName(searchTag).item(j)); j++) {
    var a = obj.getAttribute(attrName);
    if (a == null) continue;
    if (a == attrVal) {
      oArr[oArr.length] = obj;
      if (mode) return oArr;
    }
  }
  return oArr;
}

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 contains(ar, val, mode) {
  if (ar == null) return (!mode) ? false : -1;
  for (var i = 0; i < ar.length; i++) {
    if (ar[i] == val)
      return (!mode) ? true : i;
  }
  return (!mode) ? false : -1;
}

function push(val) {
  this[this.length] = val;
  return this[this.length - 1];
}
Array.prototype.push = push;

function pop(val) {
  if(typeof(val) != "undefined") {
    var len = this.length;
    var ind = 0;
    for (i = 0; i < len; i++) {
      if (this[i] != val) {
        this[ind] = this[i];
        ind++;
      }
    }
    this.length--;
  } else {
  	var val = this[this.length - 1];
  	this[this.length - 1] = null;
  	this.length--;
  	return val;
  }
}
Array.prototype.pop = pop;

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 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 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 getParentByTagName(node, parentTag) {
  if (node == null) {
    return null;
  }
  var parent = null;
  var retElement = null;
  var pNode = node;
  while (parent = pNode.parentNode) {
    if (parent.nodeType == 1 && (parent.tagName.toLocaleUpperCase() == parentTag || parentTag == null)) {
      retElement = parent;
      break;
    }
    pNode = parent;
  }
  return retElement;
}

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 ReplaceTags(xStr) {
  xStr = xStr.replace(/<\/?[^>]+>/gi, "");
  return xStr;
}

// emulate getInnerText for Mozilla
function getInnerText(obj) {
  var text = "";
  if (obj.innerText) text = obj.innerText;
  else text = ReplaceTags(obj.innerHTML);
  return text;
}

// emulate getOuterHTML for Mozilla
function getOuterHTML(obj) {
  var content = "";
  if (obj.outerHTML) content = obj.outerHTML;
  else {
    var parentObj = obj.parentNode;
    var clon = parentObj.cloneNode(true);
    var list = clon.childNodes.length - 1;
    while (list != 0) {
      curNode = clon.childNodes[list];
      if (curNode.nodeType != 1) clon.removeChild(curNode);
      else if (curNode.getAttribute("id") != obj.getAttribute("id"))  clon.removeChild(curNode);
      list--;
    }
    content = clon.innerHTML;
  }
  return content;
}

// emulate insertAdjacentHTML for Mozilla
function emulate_insertAdjacentHTML() {
  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)
    }
  }
}

function emptyTagInnerHTML(tag) {
	if (tag==null) return null;
	for (var i = 0; i < tag.childNodes.length; i++) {
		var node = tag.childNodes[i];
		if (node.nodeType==1) {
			if (node.tagName.toUpperCase()=="TBODY") {
				var empty=emptyTagInnerHTML(node);
				if (!empty) return false;
			}
			else if (node.tagName.toUpperCase()!="SCRIPT") return false;
		}
		if (node.nodeType==3) {
			var txt =trim(node.nodeValue);
			if (txt=="" || (txt.indexOf("&nbsp") && txt.length<=6) )  continue;
			else return true;
		}
	}
	return true;
}

function er_invert(id) {
  var el = getObjById(id);
  if (el) {
    el.style.display = el.style.display != "block" ? "block" : "none";
  }
}

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 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 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 doOpenWindow(newUrl);
    /*		var oWin =null;
        if (useModalWindows) {
          if (currentModalWin!=null) {oWin=currentModalWin; oWin.location.replace(newUrl);}
          else {oWin = window.open(newUrl, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
              currentModalWin=oWin;}
          showShadowForAll(); oWin.focus();
        }
        else oWin = window.open(newUrl, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
        return oWin;*/
  } 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 if (top.frames[target]) {
    targetFrame = getFrame(top, 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 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 updatePage() {
  if (self.parent) {
    if (self.parent.list && self.parent.list.refreshWin) {
      self.parent.list.refreshWin();
    } else if (self.parent.refreshWin) {
      self.parent.refreshWin();
    }
  } else if (self.refreshWin) {
    self.refreshWin();
  }
}

function updateFrame() {
  if (window && window.location)
    window.location.reload(true);
}

/* has navigator on page ?  (uses in structure shablons)*/
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;
}

function getListFrame(frameName) {
  var parentFrame = (self.parent && self.parent != self && self.parent.frames) ? self.parent : self;
  var fr = (!frameName) ? parentFrame.frames["list"] : parentFrame.frames[frameName];
  return fr;
}

function makeInput(form, type, name, value) {
  var inputTagHtml = "<INPUT type=" + type + " name=" + name + " value=\"" + value + "\">";   
  form.innerHTML += inputTagHtml;
  var inputTag = form.elements[name];
  inputTag.setAttribute("id", name);
  return inputTag;
}

function addInput(form, name, value) {
  var inputTag = document.createElement("INPUT");
  inputTag.setAttribute("TYPE", "hidden");
  inputTag.setAttribute("NAME", name);
  inputTag.setAttribute("VALUE", value);
  form.appendChild(inputTag);
}

// Функция поиска индекса OPTION в SELECT
function getIndexByOptionValue(List, value){
  var result = 0;
   for (var i = 0; i < List.length; i++) {
		    if (List.options[i].value == value) {
          result = i;
        }
   }
  return result;
}

// Добавляет в указанный SELECT новую запись
function addOption(List, value, text, data, skipCheck) {
    var Well = 'true';
	if (!skipCheck){
	    for (var i = 0; i < List.length; i++) {
		    if (List.options[i].value == value) {
			    Well = 'false';
			}
		}
	}

    if (Well == 'true') {
        var newCondList = document.createElement("OPTION");
        newCondList.text = text;
        if (value!=null && value!="") newCondList.value = value;
        if (data!=null && data!="") newCondList.data = data;
        //  Для добавления элемента используется либо метод IE,
        //  либо DOM, которые не совпадают по параметрам
        (List.options.add) ? List.options.add(newCondList) : List.add(newCondList, null);
    }
}


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 setCheckBox(fromField, toField, value, form, linkedField) {
  if (!form)form = document.forms[document.forms.length - 1];
  if (form[fromField]) {
    form[fromField].checked = value;
    form[fromField].setAttribute("checked", value);
  }
  //alert(form[fromField].checked);
  if (form[toField])
    form[toField].value = value;
  if (linkedField != null) {
    if (value) form[linkedField].removeAttribute("disabled");
    else form[linkedField].setAttribute("disabled", "true");
    //	form[linkedField].disabled = !value;
  }
}

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 = 'menuL_over';");
      obj.onmouseout = new Function("this.parentNode.className = 'menuL';");
    }
  }
  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 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.
  //alert(object_value);
  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;
  }
	var arr = object_value.split(",");
	object_value=arr.join(".");

  return object_value.match('^([\-]){0,1}([0-9]+)([\.]){0,1}([0-9]+)$');
}

/* ------------------------------- editable object list ---------------------------------- */
var eframeName = "eattrFrame";
var eformName = "eattrForm";
var eattrHtml = null;
var isEAttrChanged = false;
var currentFieldValue = null;
var doBlurForDate = false;
var lastCalGridObject = null;
var eattrDateTimer = null;
var chooseButtonPressedForDate = false;

/* 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))");
      }
      //	alert(node.tagName);
      if (node.addEventListener) node.addEventListener("keypress", preventSubmitOnEnterPress, false);
      else if (node.attachEvent) node.attachEvent("onkeypress", preventSubmitOnEnterPress);
    }
  }

  /* if frame undefined - add it !!! */
  if (isHasEAttr && !document.getElementById(eframeName)) {
    /* get body tag */
    if (document.getElementsByTagName("body").length == 0)
      return;
    var body = document.getElementsByTagName("body").item(0);
    /* add frame */
    emulate_insertAdjacentHTML();
    try {
      body.insertAdjacentHTML("beforeBegin", "<iframe id='" + eframeName + "' name='" + eframeName + "' class='eattrFrame'></iframe>");
    } catch(e) {
    }
    // 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 */
    var 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 += "";
    document.close();
  }
}

function preventSubmitOnEnterPress(e) {
  var ev = window.event ? window.event : e;
  var src = window.event ? ev.srcElement : ev.target;
  if (ev.keyCode == 13 && src.nodeType == 1 && src.tagName.toUpperCase() == "INPUT") {
    src.blur();
    return getFalse(ev);
  }
}

function doEdit(e, el) {
  isEAttrChanged = false;
  var type = el.getAttribute("type");
  if (el.getAttribute("readonly") == "false") {

	if (el!=null) {el.style.width="";}

    if (type == "string") {
      setNewStr(el);
    }
    if (type == "date") {
      setNewDate(el);
    }
    if (type == "boolean") {
      setNewBoolean(el);
    }
  }
  if (self.setChanged) self.setChanged();
}
function setNewDate(el) {
  if (doBlurForDate == true) {
    if (lastCalGridObject) getNewDate(lastCalGridObject);
  }
  var text = getFirstChildTag(el);
  if (text && text.tagName == "INPUT")
    return;
  var aname = el.getAttribute("attrName");
  if (aname == null || aname == "") return;
  var aTitle = el.getAttribute("attrTitle");
  aTitle=(aTitle==null)?aname:aTitle;
  var f = getForm(el);
  if (f == null) return;
  var inpSize = (el.innerHTML=="&nbsp;")?0:el.offsetWidth;
  if (inpSize == 0) {
    if (el.getAttribute("mask") != null) {
      var maska = parseMask(el.getAttribute("mask"));
      inpSize = maska.length * 7;
    }
    else inpSize = 100;
  }
  eattrHtml = el.innerHTML;
  el.innerHTML = "";

  var tip = el.getAttribute("attrType");
  var inputTagH = "<input type='hidden' name='data(" + aname + ")' id='data(" + aname + ")' />";
  el.innerHTML += inputTagH;

  var inputTagHTML = "<input type='text' name='date(" + aname + ")'  id='date(" + aname + ")' attrTitle='"+aTitle+"' maxlength=10 hidElem='data(" + aname + ")' onblur='prepareGetNewDate(event)' />";
  if (self.addCalendar) {
    inputTagHTML += "<span id='buttons_" + aname + "'><button class='lnk' title='Выбрать' onClick=\"if (self.showCal) {doBlurForDate=false;chooseButtonPressedForDate=true;showCal('" + aname + "',null,event);}return getFalse(event);\"><img src='admin/images/view_up.gif' onMouseOver='newImg(this,view_down)' onMouseOut='newImg(this,view_up)'/></button></span>";
  }
  el.innerHTML += inputTagHTML;

  var inputTag = document.createElement("INPUT");
  //пляски с бубном для того чтобы перевести затем фокус в основное поле myTag
  inputTag.type = "text";
  inputTag.className = "virtual";
  el.appendChild(inputTag);
  inputTag.focus();

  var myTag = f.elements['date(' + aname + ')'];
  myTag.value = eattrHtml;
  myTag.className = "editStringAttr";
  myTag.style.width = inpSize + 5 + "px";
  if (el.getAttribute("mask") != null) {
    myTag.setAttribute("mask", el.getAttribute("mask"));
  }
  if (tip != null) {
    myTag.setAttribute("attrType", tip);
  }

  if (myTag.addEventListener) {
    myTag.addEventListener("focus", getCurrentFieldValue, false);
    myTag.addEventListener("blur", prepareGetNewDate, false);
    myTag.addEventListener("change", setEAttrChanged, false);
  }
  else if (myTag.attachEvent) {
    myTag.attachEvent("onfocus", getCurrentFieldValue);
    //		el.attachEvent("onblur", getNewDate);
    myTag.attachEvent("onchange", setEAttrChanged);
  }

  if (self.addCalendar) {
    addCalendar("Выберите дату", aname, f, "Не правильный формат даты  '"+ aTitle + "'");
  }

  myTag.focus();
  el.removeChild(inputTag);
}


function setNewStr(el) {
  var text = getFirstChildTag(el);
  if (text && text.tagName == "INPUT" && text.type.toUpperCase() == "TEXT")
    return;
  var inpSize = el.offsetWidth;
  if (inpSize == 0) {
    if (el.getAttribute("mask") != null) {
      var maska = parseMask(el.getAttribute("mask"));
      inpSize = (maska.length * 8) + 'px';
    }
    else inpSize = '100%';
  }
  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 (el.getAttribute("mask") != null) {
    inputTag.setAttribute("mask", el.getAttribute("mask"));
  }
  inputTag.style.width = inpSize;
  //+ 10 + "px";
  if (tip != null) {
    inputTag.setAttribute("attrType", tip);
  }
  el.appendChild(inputTag);

  /* attach event */
  if (inputTag.addEventListener) {
    inputTag.addEventListener("focus", getCurrentFieldValue, false);
    inputTag.addEventListener("blur", getNewStr, false);
    inputTag.addEventListener("change", setEAttrChanged, false);
  }
  else if (inputTag.attachEvent) {
    inputTag.attachEvent("onfocus", getCurrentFieldValue);
    inputTag.attachEvent("onblur", getNewStr);
    inputTag.attachEvent("onchange", setEAttrChanged);
  }

  //	alert(inputTag.onfocus+"\n"+inputTag.onblur+"\n"+inputTag.onchange);
  inputTag.focus();

}
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) {
  if (eattrDateTimer != null) {
    clearTimeout(eattrDateTimer);
    eattrDateTimer = null;
  }
  doBlurForDate = true;
  var obj = window.event ? window.event.srcElement : e.currentTarget;
  if (obj == null || obj.tagName != "INPUT") return;
  if (self.initMask) initMask(obj);
  if (!chooseButtonPressedForDate) 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 prepareGetNewDate(e, mode) {
  if (typeof(e.tagName) == "undefined") {
    blurElem = window.event ? window.event.srcElement : e.currentTarget;
  }
  else blurElem = e;
  lastCalGridObject = blurElem;
  mode = (typeof(mode) == "undefined") ? null : mode;
  if (doBlurForDate && mode) {
    getNewDate(blurElem);
  }
  if (!mode) eattrDateTimer = setTimeout("prepareGetNewDate(blurElem,true)", 300);
  else eattrDateTimer = setTimeout("getNewDate(blurElem)", 10000);
}

function getNewDate(e) {
  var el = (e.tagName == "INPUT") ? e : e.document.getElementsByTagName("INPUT")[1];
  var hidId = el.getAttribute("hidElem");
  if (hidId != null) {
	var atitle= el.getAttribute("attrTitle");
	atitle=(atitle==null)?el.name:atitle;
    setDatetoHidden(el, hidId, 'Не правильный формат даты поля " ' + atitle + ' "');
    var hid = document.getElementById(hidId);
  }
  testIfChanged(el);
  var node = el.parentNode;
  try {
    if (isEAttrChanged) {
//      if (hid != null && hid.value != "") {
      if (hid != null ) {
        document.forms[eformName].value.value = (hid.value!="")?hid.value:"";
        document.forms[eformName].objId.value = node.getAttribute("objId");
        document.forms[eformName].attrName.value = node.getAttribute("attrName");
        document.forms[eformName].submit();
        node.innerHTML = el.value;
      }
      else {
        //				if (hid==null)
        node.innerHTML = (el.value.indexOf("x") != -1) ? "&nbsp;" : el.value;
      }
    }
    else {
      if (!(el.tagName == "INPUT" && el.type.toUpperCase() == "TEXT") || eattrHtml != null)
        node.innerHTML = eattrHtml;
    }

    if (node.innerHTML.length == 0) {
      node.parentNode.onclick = new Function("doEdit(null,getFirstChildTag(this))");
    }
  } catch (e) {
  }
}

function getNewStr(e) {
  var el = window.event ? window.event.srcElement : e.currentTarget;
  var test = validateField(el, true);
  if (test == 0) return;
  /*	var sMask= el.getAttribute("mask");
   if (sMask!=null && sMask!="" && el.value!="") {
     if (el.value==sMask ) el.value="";
     else {
       if (!testValueByMask(el)) {
       //	alert("Введено некорректное значение.\nФормат ввода: "+el.getAttribute("mask"));
         return;
       }
       else {
         el.value=clearAllSpecialSimbols(el.value, sMask);
       }
     }
   }*/

  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();
    showFullValue(el);
    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;
  }
  if (node.innerHTML.length == 0) {
    node.parentNode.onclick = new Function("doEdit(event,getFirstChildTag(this))");
  }
}

// start initEditableObjList() on load
if (root) {
  if (root.addEventListener) root.addEventListener("load", initEditableObjList, false);
  else if (root.attachEvent) root.attachEvent("onload", initEditableObjList);
}

/* --------------------------/------end of editable objects list---------------------------------------------------------------------- */


/*---------------------------------------------popup window with message-----------------------------------------------------------------------*/
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>&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>';

  var obj = getObjById("newpopupmsg", inWindow);
  if (obj != null) {
    //	  obj.outerHTML = "";
    obj.innerHTML = "";
  }
  var obj = getObjById("newlayer", inWindow);
  if (obj != null) {
    //	  obj.outerHTML = "";
    obj.innerHTML = "";
  }
  emulate_insertAdjacentHTML();

  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();

  var obj = getObjById("newpopupmsg", inWindow);
  x_offset = Math.round(( (isIE ? inWindow.document.body.clientWidth : inWindow.outerWidth) - obj.offsetWidth) * 4 / 9);
  x = (isIE ? inWindow.document.body.scrollLeft : inWindow.scrollX) + x_offset;
  y_offset = Math.round(( (isIE ? inWindow.document.body.clientHeight : inWindow.innerHeight) - obj.offsetHeight) * 4 / 9);
  y = (isIE ? inWindow.document.body.scrollTop : inWindow.scrollY) + y_offset;

  if (isIE) {
    obj.style.pixelLeft = x;
    obj.style.pixelTop = y;
  }
  else {
    obj.style.left = x;
    obj.style.top = y;
  }
  if (isIE) obj.filters.item(0).Apply();
  obj.style.visibility = "visible";
  if (isIE)  obj.filters.item(0).Play();
}

function popupMsgOff(inWindow) {
  envokeAllEvent(inWindow)
  var obj = getObjById("newpopupmsg", inWindow);
  if (obj != null) {
    obj.outerHTML = "";
    //	  obj.innerHTML = "";
  }
  obj = getObjById("newlayer", inWindow);
  if (obj != null) {
    obj.outerHTML = "";
    //	  obj.innerHTML = "";
  }
}

function envokeAllEvent(winObj) {
  if (winObj.document.removeEventListener) {
    winObj.removeEventListener("scroll", stopEvents, false);
    winObj.document.removeEventListener("mouseup", stopEvents, false);
    winObj.document.removeEventListener("keydown", stopEvents, false);
    winObj.document.removeEventListener("keyup", stopEvents, false);
  }
  else if (winObj.document.detachEvent) {
    winObj.detachEvent("onscroll", stopEvents);
    winObj.document.detachEvent("onmouseup", stopEvents);
    winObj.document.detachEvent("onmousedown", stopEvents);
    winObj.document.detachEvent("onkeydown", stopEvents);
    winObj.document.detachEvent("onkeyup", stopEvents);
  }
}

function stopAllEvent(winObj) {
  winObj.document.oncontextmenu = new Function("return false");
  if (winObj.document.addEventListener) {
    winObj.addEventListener("scroll", stopEvents, false);
    winObj.document.addEventListener("mouseup", stopEvents, false);
    winObj.document.addEventListener("keydown", stopEvents, false);
    winObj.document.addEventListener("keyup", stopEvents, false);
  }
  else if (winObj.document.attachEvent) {
    winObj.attachEvent("onscroll", stopEvents);
    winObj.document.attachEvent("onmouseup", stopEvents);
    winObj.document.attachEvent("onmousedown", stopEvents);
    winObj.document.attachEvent("onkeydown", stopEvents);
    winObj.document.attachEvent("onkeyup", stopEvents);
  }
}

function stopEvents(e) {
  window.scrollTo(0, 0);
  var e = window.event ? window.event : e;
  e.cancelBubble = true;
  if (e.stopPropagation) {
    e.stopPropagation();
  }
  return false;
}
/*--------------------------------/--end of popup window-----------------------------------------------------------------------------------*/

/*-------------------------------------------End of common part ----------------------------------------*/



/*----------------------------------Object selection part --------------------------------------------------------------*/
var selectedIdArray = null;
var selectedTitleArray = null;
var exceptionIdArray =null;

var paramsHashCode = null;
var gridDataArray = null;
var selectAllSelected = "false";
var selectedObjClass = null;
var selectCheckersName="";
var saveListOfChoosenObj=false;

function makeGridRow(cName, code) {
  this.cName = cName;
  this.code = code;
}

var OBJECT_MODE = 0;
var FOLDER_MODE = 1;
var selectMode = OBJECT_MODE;
var doWithAll = 0;
var doSetAll = false;
//false -clear checked;  true - set checked

/* 1 - folders, 0 - objects */

var selectedObj = null;
/* use only in navigator */

function getSelectMode() {
  return selectMode;
}

function setSelectMode(newMode) {
  selectMode = newMode;
}

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 clearSelected(obj, tmpWin, objectName) {
  if (tmpWin==null) tmpWin=self;
  tmpWin.selectedIdArray = null;
  tmpWin.selectedTitleArray = null;
  tmpWin.exceptionIdArray = null;
  if (!objectName && obj == null) return;
  if (!objectName)objectName = obj.name;
  /* clear array*/
  if (objectName && objectName.length > 0) {
    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];
      //alert(tmpWin.name+"   "+tmpWin.getSelectMode()+"="+mode);
      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 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 (tmpWin.gridDataArray && tmpWin.gridDataArray.length > 0) {
        ret[2] = new Array();
        ret[2] = ret[2].concat(tmpWin.gridDataArray);
      }
    }
  } else {
    ret[0] = selectedIdArray;
    ret[1] = selectedTitleArray;
    if (gridDataArray && gridDataArray.length > 0) {
      ret[2] = new Array();
      ret[2] = gridDataArray;
    }
  }
  return ret;
}

function getSelectAllSelected() {
  result = null;
  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.selectAllSelected == "true") {
        result = tmpWin.selectAllSelected;
      }
    }
  } else {
    result = selectAllSelected;
  }
  return result;
}

function getExceptObjects() {
  var exobj = new Array();
  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.exceptionIdArray) {
        exobj = exobj.concat(tmpWin.exceptionIdArray);
      }
    }
  } else {
    exobj = exceptionIdArray;
  }
  return exobj;
}

function sendExceptionObjIds(form) {
	if (form==null || form.tagName.toUpperCase() != "FORM")  return;
	s = exceptionObjIds();
	if (s!="") makeInput(form, "hidden", "exeptionObjIds", s);
}

function exceptionObjIds() {
  s = "";
  var exobj = getExceptObjects();
  if (exobj) {
    for (var i = 0; i < exobj.length; i++) {
      s += exobj[i];
      if (i < (exobj.length - 1)) s += ",";
    }
  }
  return s;
}

function getParamsHashCode() {
  result = null;
  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];
      result = tmpWin.paramsHashCode;
    }
  } else {
    result = paramsHashCode;
  }
  return result;
}

function setParamsHashCode(newParamsHashCode) {
  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];
      tmpWin.paramsHashCode = newParamsHashCode;
    }
  } else {
    paramsHashCode = newParamsHashCode;
  }
}

function getSelectedIdArray() {
  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];
      return tmpWin.selectedIdArray;
    }
  } else {
    return selectedIdArray;
  }
}

function setSelectedIdArray(newArray) {
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames["list"]) {
    var tmpWin = self.parent.frames["list"];
    if (tmpWin) {
      tmpWin.selectedIdArray = newArray;
    }
    tmpWin = self.parent.frames["nav"];
    if (tmpWin) {
      tmpWin.selectedIdArray = null;
    }
  } else {
    selectedIdArray = newArray;
  }
}


function setSelectedTitleArray(newArray) {
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames["list"]) {
    var tmpWin = self.parent.frames["list"];
    if (tmpWin) {
      tmpWin.selectedTitleArray = newArray;
    }
    tmpWin = self.parent.frames["nav"];
    if (tmpWin) {
      tmpWin.selectedTitleArray = null;
    }
  } else {
    selectedTitleArray = newArray;
  }
}


function getSelectedTitleArray() {
  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];
      return tmpWin.selectedTitleArray;
    }
  } else {
    return selectedTitleArray;
  }
}

function isSelected() {
  var ar = getSelObjects();
  var vIsSelected = false;
  try {
    vIsSelected = (ar && ar.length > 0 && ar[0].length > 0);
  } catch(e) {
  }
  if (getSelectAllSelected() == "true") {
    vIsSelected = true;
  }
  return vIsSelected;
}

function prepareListAttrValues(gridType) {
  var form = self.document.forms["getCustomObjList"];
  var res = getSelObjects();
  var s = "";
  for (var i = 0; i < res[0].length; i++) {
    s += res[0][i];
    if (i < (res[0].length - 1)) s += ",";
  }
  form.elements["customObjList"].value = s;
  //	   alert("IN -> "+form.elements["customObjList"].value);
  if (gridType != null && gridType) form.elements["operation"].value = "getViewLinkMN";
  form.sessionParams.value = getSelectAllSelected();
  sendExceptionObjIds(form);
  form.submit();
}

function recieveListAttrValues() {
  var frame = null;
  if (isIE) {
    frame = self.document.frames["getObjListAttrVals"];
  } else {
    frame = self.frames["getObjListAttrVals"];
  }
  if (frame && frame.ar != null) {
    var Arr = frame.ar;
    gridDataArray = new Array();
    for (var i = 0; i < Arr.length; i++) {
      var gridMassiv = new Array();
      var gridNamesMassiv = new Array();
      for (var j = 0; j < Arr[i].length; j++) {
        var tmp = Arr[i][j];
        gridMassiv.push(tmp[1]);
        gridNamesMassiv.push(tmp[0]);
      }
      if (gridMassiv.length > 0 && gridNamesMassiv.length > 0) {
        var gridItem = new makeGridRow(gridNamesMassiv, gridMassiv)
        gridDataArray.push(gridItem);
      }
    }
  }
  selectObj(window, true, null, "false");
}

function selectObj(win, isClose, canDouble, selectAll,winIsOpener) {
	if (isClose == null) isClose = true;
	if (selectAll == "true") {
		selectAllSelectObj('chooseFrame', 'ChooseForm', isClose, canDouble);
	} else {
		ret = getSelObjects();
		if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
			var result =false;
			if (winIsOpener){ // if win is allready opener
				var exist=self.parent.$(win.name);
				result=(exist && win.setLinkObj!=null)?((canDouble != null) ? win.setLinkObj(ret, win, canDouble) : win.setLinkObj(ret, win)) : false;
				if (isClose && result) {
					if (exist && win.hideShadowForAll) win.hideShadowForAll();
				//	self.parent.close();
				}
			}
			else {
				var wo = self.parent.opener;
				result = (wo && !wo.closed && wo.setLinkObj != null) ? ((canDouble != null) ? wo.setLinkObj(ret, self.parent, canDouble) : wo.setLinkObj(ret, self.parent)) : false;
				if (isClose && result) {
					if (wo && !wo.closed && wo.hideShadowForAll) wo.hideShadowForAll();
					self.parent.close();
				}
			}
			return result;
		} else {
			var wo = window.opener;
			try {
				var result = (wo && !wo.closed && wo.setLinkObj != null) ? ((canDouble != null) ? wo.setLinkObj(ret, win, canDouble) : wo.setLinkObj(ret, win)) : false;
				if (isClose && result) {
					if (wo && !wo.closed && wo.hideShadowForAll) wo.hideShadowForAll();
					window.close();
				}
			} catch(e) {}
			return result;
		}
	}
}

function selectAllSelectObj(frameName, formName, isClose, canDouble) {
  var frame = getListFrame(frameName);
  var form = self.document.forms[formName];
	sendExceptionObjIds(form);
	form.isClose.value = isClose;
  form.canDouble.value = canDouble;
  form.submit();
}

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.id != element.id) {
      oldElement.className = oldClass;
      hElement.value = objId;
    }
    else {
      element.className = oldClass;
      hElement.value = "";
    }
  }   else {
     hElement.value = objId;
  }
  //		hElement.value = objId;
  //        alert(hElement.value);
}

// choose folder function (for visual editor)
function fldSelFolder(obj, idField, titleField) {
  if (self.parent.nav.fldid != null) {
    self.parent.nav.fldid.value = obj[idField];
  }
}

function selFolder(obj, idField, titleField) {
  if (getSelectMode() != FOLDER_MODE) setSelectMode(FOLDER_MODE);
  prepareSelect(obj, FOLDER_MODE);
  setSelectMode(FOLDER_MODE);
  selId(obj, idField, titleField);
}

function selObject(obj, idField, titleField) {
  if (getSelectMode() != OBJECT_MODE) setSelectMode(OBJECT_MODE);
  if (doWithAll == 0) {
    prepareSelect(obj, OBJECT_MODE);
    setSelectMode(OBJECT_MODE);
    selId(obj, idField, titleField);
    // object choose for external application
    if (self.parent != null && self.parent.toolbar != null && self.parent.toolbar.selobjid != null) {
      self.parent.toolbar.selobjid.value = obj[idField];
    }
  }
  else {
    if (doWithAll == 1) {
      prepareSelect(obj, OBJECT_MODE);
      setSelectMode(OBJECT_MODE);
      selAllId(obj, idField, titleField);
      doWithAll = 2;
    }
  }
}

function selId(obj, idField, titleField) {
  if (!idField)idField = "value";
  if (!titleField)titleField = "title";
  exceptionIdArray = new Array();
  selectedIdArray = new Array();
  selectedTitleArray = new Array();
  if (self.getAllreadySelected) getAllreadySelected();
  if (selectAllSelected=="true") {// очищаем массивы ранее выбранных объектов
	selectedIdArray.length=0;
	selectedTitleArray.length=0;
  }

  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) {
		if (selectAllSelected=="true") {
			if (contains(exceptionIdArray, objects[i][idField])) {
				exceptionIdArray.pop(objects[i][idField]);
			}
		}
		else {
			if (!contains(selectedIdArray, objects[i][idField])) {
				selectedIdArray.push(objects[i][idField]);
				selectedTitleArray.push(objects[i][titleField]);
			}
		}
      } else {
			if (selectAllSelected=="true") {
				if (!contains(exceptionIdArray, objects[i][idField])) {
					exceptionIdArray.push(objects[i][idField]);
				}
			} else {
				if (contains(selectedIdArray, objects[i][idField])) {
					selectedIdArray.pop(objects[i][idField]);
					selectedTitleArray.pop(objects[i][titleField]);
				}
			}
		}
    }
  } else if (objects[0].type == "radio") {
    if (!contains(selectedIdArray, obj[idField])) {
      selectedIdArray.push(obj[idField]);
      selectedTitleArray.push(obj[titleField]);
    }
  } else {
    if (!contains(selectedIdArray, obj[idField])) {
      selectedIdArray.push(obj[idField]);
      selectedTitleArray.push(obj[titleField]);
    }
  }

  //obj.blur();
  //	alert(selectedIdArray.length)
//  alert("selectAllSelected="+selectAllSelected+"-> ["+(selectAllSelected=="false")+"]\n\n"+self.showChoosenObjNumber);
  if (self.showChoosenObjNumber && selectAllSelected=="false") showChoosenObjNumber();
  if (self.setButtonState) setButtonState();
}

function selAllId(obj, idField, titleField) {
  if (!idField)idField = "value";
  if (!titleField)titleField = "title";
  selectedIdArray = new Array();
  selectedTitleArray = new Array();
  if (self.getAllreadySelected ) getAllreadySelected();
  if (selectAllSelected=="true") {// очищаем массивы ранее выбранных объектов
	selectedIdArray.length=0;
	selectedTitleArray.length=0;
  }

  var objects = document.getElementsByName(obj.name);
  if (objects.length == 0 || objects[0].type != "checkbox") return;
  for (var i = 0; i < objects.length; i++) {
    if (doSetAll) {
      objects[i].checked = "true";
      //		alert("1-> ("+doSetAll+") "+objects[i].title);
	  if (selectAllSelected=="true") {
			if (contains(exceptionIdArray, objects[i][idField])) {
				exceptionIdArray.pop(objects[i][idField]);
			}
	  } else {
			if (!contains(selectedIdArray, objects[i][idField])) {
				selectedIdArray.push(objects[i][idField]);
				selectedTitleArray.push(objects[i][titleField]);
			}
      }
    }
    else {
      //		alert("2-> ("+doSetAll+") "+objects[i].title);
		if (selectAllSelected=="true") {
			if (!contains(exceptionIdArray, objects[i][idField])) {
				exceptionIdArray.push(objects[i][idField]);
			}
		} else {
				if (contains(selectedIdArray, objects[i][idField])) {
					selectedIdArray.pop(objects[i][idField]);
					selectedTitleArray.pop(objects[i][titleField]);
				}
		}
      objects[i].removeAttribute("checked");
    }
  }
  if (self.setButtonState) setButtonState();
}

function delLinksOnDelete(win, objId) {
  var attrName = getWinAttr(win);
  if (!attrName) return;
  var Sel = document.getElementById("title_" + attrName);
  var row = document.getElementById("grid_" + attrName);
  if (Sel == null) return;

  if (Sel.tagName == "SELECT" || (Sel.tagName == "INPUT" && row)) DelFromList(attrName, objId);
  else delLinkObj(attrName);
}

var updateToOpenerOpener = false;
function setLinkObj(ret, win, canDouble) {
  if (updateToOpenerOpener) {
    var wo = win.opener;
    if (wo && !wo.closed) win = wo;
  }
  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);
	var mgAttrName=Sel.getAttribute("megaGridAttr"); // attrName аттрибута при создании или редактировании непосредственно в гриде
	if (mgAttrName!=null) {
		attrName=mgAttrName;
	}
    if (canDouble == null) {
      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 (!isLinkNto1) isLinkNto1 = document.getElementById("isLink1to1_" + attrName);
    if (Sel.tagName == "SELECT") {
      var newop;
      var newoption;
      var ret_1_List = ret[0];
      var ret_2_List = ret[1];
      for (_i = 0; _i < ret_1_List.length; _i++) {
        if (!canDouble)
        {
          var skipFlag = false;
          for (var _x = 0; _x < Sel.length; _x++)
          {
            if (Sel.options[_x].value == ret_1_List[_i]) {
              Sel.options[_x].text = ret_2_List[_i];
              skipFlag = true;
              break;
            }
          }
          if (skipFlag) continue;
        }
        newop = document.createElement("OPTION");
        newop.value = ret_1_List[_i];
        newop.text = ret_2_List[_i];
        if (isIE) {
          newoption = Sel.add(newop);
        } else {
          newoption = Sel.add(newop, null);
        }
        Sel.selectedIndex = Sel.length - 1;
        ToHidden(Sel, Hid);
        removeFromHiddenDel(attrName, ret_1_List[_i]);
        if (Sel && Sel.onchange) Sel.onchange();
      }
      if (Hid && Hid.onchange) Hid.onchange();


    } 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];
      var gridArr = ret[2];
      if (isLinkNto1) {
        var trObj = mainTable.getElementsByTagName("tbody")[0].getElementsByTagName("TR")[0];
        if (trObj) {
          var trObjId = trObj.getAttribute("objId");
          if (ret_1_List != trObjId) {
            document.getElementById("title_" + attrName).value = trObjId;
            DelFromList(attrName);
          }
        }
      }
      for (_i = 0; _i < ret_1_List.length; _i++) {
        tmpId = "grid_" + attrName + ret_1_List[_i];
        if (!canDouble)
        {
          trObj = null;
          if (document.getElementById(tmpId)) {
            trObj = document.getElementById(tmpId)
          }
          else {
            var a = getObjectByAttr(mainTable.getElementsByTagName("tbody")[0], "TR", "toId", ret_1_List[_i], 1);
            if (a != null) trObj = a[0];
          }
          if (trObj != null) {
            //        alert(tmpId +"   -  "+ _i +"  -  "+ret_1_List.length);
            if (gridArr == null || gridArr.length == 0) continue;
            var gridNames = gridArr[_i].cName;
            var gridValues = gridArr[_i].code;
            //						var trObj = document.getElementById(tmpId);
            var tdElems = trObj.getElementsByTagName("td");
            for (_w = 0; _w < tdElems.length; _w++) {
              var cn = tdElems[_w].getAttribute("cName");
              if (cn == null || cn == "") continue;
              var ind = contains(gridNames, cn, true);
              if (ind >= 0 && ind < gridValues.length) tdElems[_w].innerHTML = gridValues[ind];
            }
            continue;
          }
        }

        isMadTable = false;
        // проверка грида на таблицу связки
        isMadTable_field = document.getElementById("isMadTable_" + attrName);
        if (isMadTable_field != null && isMadTable_field.value == "true") isMadTable = true;

        trElem = document.createElement("tr");
        if (isMadTable) {
          if (typeof(ret_1_List[_i]) != "undefined") trElem.setAttribute("toId", ret_1_List[_i]);
        }
        trElem.setAttribute("id", tmpId);
        trElem.setAttribute("objId", ret_1_List[_i]);
        trElem.className = "gridRow";

        tdEmptyElem = document.createElement("td");
        txtEmptyNode = document.createTextNode(" ");
        tdEmptyElem.appendChild(txtEmptyNode);
        trElem.appendChild(tdEmptyElem);
		tdEmptyElem.innerHTML="&nbsp;";

        var tableHead = mainTable.getElementsByTagName("thead")[0];
		var headTR= tableHead.getElementsByTagName("tr")[0];
        var childs = headTR.childNodes;
        var tableCols = headTR.getElementsByTagName("td").length + headTR.getElementsByTagName("th").length;
		var insert_Rborder_Cell=true;

        if (gridArr == null || typeof(gridArr[_i]) == "undefined" || childs == null) {
          tdElem = document.createElement("td");
          txtNode = document.createTextNode(ret_2_List[_i]);
          tdElem.appendChild(txtNode);
          trElem.appendChild(tdElem);
          for (var x = 0; x < (tableCols - 3); x++) {
            tdEmpty = document.createElement("td");
            txtEmpty = document.createTextNode(" ");
            tdEmpty.appendChild(txtEmpty);
            trElem.appendChild(tdEmpty);
			tdEmpty.innerHTML="&nbsp;";
            tdEmpty = null;
            txtEmpty = null;
          }
        }
        else {
          var gridNames = gridArr[_i].cName;
          var gridValues = gridArr[_i].code;
		  var rb_exist=false;
          for (var x = 0; x < childs.length; x++) {
            var el = childs[x];
            if (el.nodeType != 1) continue;
            if (el.tagName.toUpperCase()== "SCRIPT" ) continue;
            if (el.className == "Lborder") continue;
			if (el.className == "Rborder") {rb_exist=true; continue;}

            tdEmpty = document.createElement("td");
            if (el.getAttribute("cName") == null) ind = -1;
            else {
              cName = el.getAttribute("cName");
              var ind = contains(gridNames, cName, true);
            }
            if (ind == -1) {
              txtEmpty = document.createTextNode(" ");
              tdEmpty.appendChild(txtEmpty);
			  tdEmpty.innerHTML="&nbsp;";

            }
            else {
              if (typeof(gridNames[ind]) != "undefined") tdEmpty.setAttribute("cName", gridNames[ind]);
              //	alert(gridValues[ind]);
              tdEmpty.innerHTML = (typeof(gridValues[ind]) != "undefined") ? gridValues[ind] : "&nbsp;";
            }
            trElem.appendChild(tdEmpty);
            tdEmpty = null;
            txtEmpty = null;
          }
		  insert_Rborder_Cell=rb_exist;
        }
		if (insert_Rborder_Cell) {
			tdEmpty = document.createElement("td");
			tdEmpty.className = "Rborder";
			txtEmpty = document.createTextNode(" ");
			tdEmpty.appendChild(txtEmpty);
			trElem.appendChild(tdEmpty);
		}

        table.appendChild(trElem);
        table.lastChild.onclick = new Function("gridSelect('grid_','title_','" + attrName + "','" + ret_1_List[_i] + "','silver','gridRow')");
        if (isLinkNto1) {
          Hid.value = ret_1_List[_i];
          //       Sel.value=ret[1];
        } else {
          Hid.value += "," + ret_1_List[_i];
        }
      }
      if (Sel && Sel.onchange) Sel.onchange();
      if (Hid && Hid.onchange)
        Hid.onchange();

    } else {
      Hid.value = ret[0];
      Sel.value = ret[1];
      if (Sel && Sel.onchange) Sel.onchange();
      if (Hid && Hid.onchange)
        Hid.onchange();
    }
    if (Hid) {
      var chEvent = Hid.onchange;
      var func = new Function(chEvent);
      func();
    }
  }
  //for formSave
  //if (self.setChanged) self.setChanged();
  return true;
}


/*---------------------------------Functions both for objects and list of objects -----------------------*/

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, multiBranches, gridType, prefix) {
  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 = "";
  }

  mb = "";
  if (multiBranches && multiSelect) mb = "&mb=1";

  gridt = "";
  if (gridType != null && gridType != "" && gridType == true) gridt = "&gridt=1";


  if (selectPage && selectPage.indexOf(".htm") == (selectPage.length - 4)) {
    selectPage = selectPage.substring(0, (selectPage.length - 4));
  }
  //	alert(baseUrl + selectPage + '.htm?id=' + folder + selCls + '&sm=' + sm + curObj);
  var selectWindow = doOpenWindow(baseUrl + selectPage + '.htm?id=' + folder + selCls + '&sm=' + sm + gridt + mb + curObj);
  //    var 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");

  var myAttrName=((prefix==null)?"":prefix)+attrName;
  addWin(selectWindow, myAttrName);
}

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;
  }

  var selectWindow = doOpenWindow(baseUrl + selectPage + '.htm?id=' + folder + selCls + '&sm=' + sm + curQuery);
  //    var 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, target, prefix) {
  var dsStr = "";
  if (ds && ds != "null") {
    dsStr = "&ds=" + ds;
  }
  var linkStr = "";
  if (refLink)
    linkStr = "&link=" + refLink;
  if (!addParams)
    addParams = "";

  var href= createPage + '.htm?id=' + id + '&cls=' + refClass + '&ra=' + refAttr + dsStr + linkStr + addParams;
  var createWindow= url(href,target);
  //var createWindow = doOpenWindow(baseUrl + createPage + '.htm?id=' + id + '&cls=' + refClass + '&ra=' + refAttr + dsStr + linkStr + addParams);
  //    var 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");

  var myAttrName=((prefix==null)?"":prefix)+attrName;
  addWin(createWindow, myAttrName);
  if (updFunc)
    addUpdateFrameFunction(createWindow, updFunc);
}

function viewObj(id, newPage, urlCommon, updFunc, target, customID) {
  var myId=(customID==null)?id:customID;
  var el = document.getElementById(myId);
  if (!el) return false;
  //		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;
  link = link.replace(/\s/g,'%20');
  if (urlCommon == null) urlCommon = "";
  var href= newPage + '.htm?id=' + link + urlCommon;
  viewWindow = url(href,target);// doOpenWindow(href);
  //    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");
  var ind = (customID==null)?id.indexOf("_"):customID.indexOf("_");
  var aName = (customID==null)? id.substring(ind + 1, id.length):customID.substring(ind + 1, customID.length);
  addWin(viewWindow, aName);
  if (updFunc)
    addUpdateFrameFunction(viewWindow, updFunc);
}
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
  if (self.setChanged) 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 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 DelFromList(attrName, objId) {
  var Sel = document.getElementById("title_" + attrName);
  var Hid = document.getElementById("id_" + attrName);
  var delHid = document.getElementById("del_id_" + attrName);


  var re = new RegExp("[, ]", "g");
  var str = Sel.value.replace(re, '');

  if (str == "") {
    if (objId != null && objId != "") var elId = objId;
    else return;
  }
  else var elId = Sel.value;
  var row = document.getElementById("grid_" + attrName + elId);

  if (Sel.tagName == "INPUT" && row) {
    var table = row.parentNode;
    table.removeChild(row);
    var str = Hid.value ;
    var sel = "," + elId;

    Hid.value = Hid.value.substring(0, Hid.value.indexOf(sel)) + Hid.value.substring(Hid.value.indexOf(sel) + sel.length, Hid.value.length)
    if (delHid) {
      delHid.value += sel;
    }
    Sel.value = "";
  } else {
    i = 0;
    while (i < Sel.length)
    {
      if (Sel.options[i].selected)
      {
        if (delHid) {
          delHid.value += "," + Sel.options[i].value;
        }
        Sel.remove(i);
      }
      else ++i;
    }
    ToHidden(Sel, Hid);
  }
  //for formSave
  if (self.setChanged) setChanged();
  if (Hid && Hid.onchange) {
    Hid.onchange();
  }
  if (Sel && Sel.onchange) {
    Sel.onchange();
  }
}

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 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 postParamsPares(name, value) {
  this.name = name;
  this.value = value;
}
function sendPostInNewWindow(action, params, name, w, h) {
  if (action == null || params == null) return;
  if (typeof(params.length) == "undefined" || params.length == 0) return;
  var winName = (name == null || trim(name) == "") ? "myPostWin" : name;
  var width = (w == null || trim(w) == "") ? getPopupWinWidth() : w;
  var height = (h == null || trim(h) == "") ? getPopupWinHeight() : h;
  var win = window.open("", winName, "height=" + height + ",width=" + width + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");

  var body = null;
  var formTag = null;
  if (isIE) {
    body = document.getElementsByTagName("body").item(0);
    formTag = document.createElement("FORM");
    formTag.target = winName;
  } else {
    win.document.write('<html><head><base href="' + baseUrl + '"></head><body></body></html>');
    body = win.document.getElementsByTagName("body").item(0);
    formTag = win.document.createElement("FORM");
    formTag.target = "_self";
  }
  formTag.action = action;
  formTag.method = "POST";

  formTag.className = "eattrFrame";
  for (var i = 0; i < params.length; i++) {
    makeInput(formTag, "hidden", params[i].name, params[i].value);
  }
  body.appendChild(formTag);
  formTag.submit();
}


/*----------------------------------------------------------------------------------------------------------------*/

/*-----------------------------------------------modal window functions---------------------------------------*/

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 manageShadowForFrameset(frameset,mode) {
	var tmpWin;
	for (var x = 0; x < frameset.frames.length; x++) {
		tmpWin = frameset.frames[x];
//		alert(x+") "+tmpWin.location+"\nframeset->"+tmpWin.document.getElementsByTagName('frameset')[0]);
		if ( (typeof(tmpWin.document.getElementsByTagName('frameset')[0]) == "undefined") ) {
//			alert("have body");
			if (mode) {
				addShadow(tmpWin);
				showShadow(tmpWin);
			}
			else hideShadow(tmpWin);
		}
		else {
//			alert("have frameset");
			manageShadowForFrameset(tmpWin,mode);
		}
	}
}

function showShadowForAll() {
	if (!useModalWindows) return;
	var frameset=top;
	if (frameset.frames && frameset.frames.length > 0) {
		if (typeof(frameset.document.getElementsByTagName('body')[0]) != "undefined") {
			addShadow(frameset);
			showShadow(frameset);
		}
		else {
				manageShadowForFrameset(frameset,true);
		}
	}
	else {
		addShadow();
		showShadow();
	}
}

function hideShadowForAll() {
	if (!useModalWindows) return;
	var frameset=top;
	if (frameset.frames && frameset.frames.length > 0) {
		if (typeof(frameset.document.getElementsByTagName('body')[0]) != "undefined") {
			hideShadow(frameset);
		}
		else {
			var tmpWin;
			manageShadowForFrameset(frameset,false);
		}
	}
	else {
		hideShadow();
	}
}


/*
function showShadowForAll() {
  if (!useModalWindows) return;

  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    if (typeof(self.parent.document.getElementsByTagName('body')[0]) != "undefined") {
      addShadow(self.parent);
      showShadow(self.parent);
    }
    else {
      var tmpWin;
      for (var x = 0; x < self.parent.frames.length; x++) {
        tmpWin = self.parent.frames[x];
        addShadow(tmpWin);
        showShadow(tmpWin);
      }
    }
	var pWin=self.parent;
	if (pWin.parent && pWin.parent!=pWin) {

	}
  }
  else {
    addShadow();
    showShadow();
  }
}

function hideShadowForAll() {
  if (!useModalWindows) return;
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    if (typeof(self.parent.document.getElementsByTagName('body')[0]) != "undefined") {
      hideShadow(self.parent);
    }
    else {
      var tmpWin;
      for (h = 0; h < self.parent.frames.length; h++) {
        tmpWin = self.parent.frames[h];
        hideShadow(tmpWin);
      }
    }
  }
  else {
    hideShadow();
  }
}*/

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";

  if (s.addEventListener) {
    s.addEventListener("focus", setFocusToModal, false);
    s.addEventListener("scroll", setFocusToModal, false);
  }
  else if (s.attachEvent) {
    s.attachEvent("onfocus", setFocusToModal);
    s.attachEvent("onscroll", setFocusToModal);
  }
}

function hideShadow(frame) {
  if (frame == null) frame = self;
  var s = frame.document.getElementById("overlay");
  if (s == null) return;
  s.style.display = "none";
  currentModalWin = null;
  if (s.removeEventListener) {
    s.removeEventListener("focus", setFocusToModal, false);
    s.removeEventListener("scroll", setFocusToModal, false);
  }
  else if (s.detachEvent) {
    s.detachEvent("onfocus", setFocusToModal);
    s.detachEvent("onscroll", setFocusToModal);
  }
}

function setFocusToModal() {
  if (currentModalWin == null) return;
  currentModalWin.focus();
}

function doOpenWindow(urlToOpen) {
  var oWin = null;
  if (useModalWindows) {
    //		currentModalWin=(currentModalWin!=null)?currentModalWin:(self.opener && self.opener.currentModalWin) ? self.opener.currentModalWin : null;
    if (currentModalWin != null) {
      oWin = currentModalWin;
      oWin.location.replace(urlToOpen);
    }
    else {//oWin = window.showModelessDialog(urlToOpen,"","dialogHeight:"+getPopupWinHeight()+"px; dialogWidth:"+getPopupWinWidth()+"px; center: Yes; help: No; resizable: Yes; status: No;");
      oWin = window.open(urlToOpen, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
      currentModalWin = oWin;
    }
    showShadowForAll();
    oWin.focus();
    handleModalLoad();
  }
  else {
    var idStr = "_blank";
    if (urlToOpen.indexOf("edit") != -1) {
      var specialSymbols = new Array("/", "@", ".", ",", "$", "&", "!", "?", ":", "*", "#", "+", ";", "_", "=", "-", "%");
      var temp = urlToOpen.match("id=([^&]*)");
      if (temp != null && temp.length >= 2) {
        var path = baseUrl;
        idStr = path + temp[1];
        for (var i = 0; i < specialSymbols.length; i++) {
          idStr = replaceSubstring(idStr, specialSymbols[i]);
        }
      }
    }
    oWin = window.open(urlToOpen, idStr, "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
    oWin.focus();
  }

  return oWin;
}

function handleModalLoad() {
  var mw = currentModalWin;
  if (mw.closed) {
    hideShadowForAll();
    return;
  }
  var mwbody = null;
  try {
    mwbody = mw.document.body;
  } catch(e) {
  }
  if (mwbody == null || mwbody.innerHTML == "") setTimeout("handleModalLoad()", 1000);
}

function doThisBeforeClose() {
  var psq = function(e) {
    var ev = window.event ? window.event : e;
    var arg = (document.getElementById('modified') != null) ? document.getElementById('modified').form : null;
    saveQuery(arg, ev);
  }
  if (isIE) document.body.onbeforeunload = psq;
  else window.onbeforeunload = psq;

  var func = new Function("var wo=window.opener; if(closeWinFlag==true && wo && !wo.closed && wo.hideShadowForAll) wo.hideShadowForAll();");
  onPerformUnload(window, func);
}

/*----------------------------------------------------------------------------------------------------------------*/

function prepareObjs(defVal) {
	var objects = null;
	objects = getSelObjects()[0];
	if (objects && objects.length > 0) {
		objects = objects.join(',');
	} else {
		objects = defVal;
		if (objects.indexOf("SXUser") == -1) return null;
	}
	$('__createPersCards_ids').value = objects;
	$('createPersCards').submit();
	return null;
}

function printF(wind) {
  wind.onblur = function() {
    wind.focus();
  }
  wind.focus();
  wind.print();
  wind.onblur = function() { }
}
