/* ------------------------------------------------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 winClassArray = new Array();
var gridTabIndexArr= new Array();
var winLast = null;
var updateFrameFunctionArray = new Array();
var gridTabIndexArr= 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;

var HashMap =
function() {
    this.keys = new Array();
    this.entries = {};
    this.length = 0;
  }
  HashMap.prototype.put = function(key, value) {
    if (!this.entries[key]) {
      this.entries[key] = {k:(this.keys.push(key) - 1),v:value};
      this.length++;
    } else
      this.entries[key].k = value;
  }
  HashMap.prototype.get = function(key) {
    return this.entries[key]&&this.entries[key].v;
  }
  HashMap.prototype.containsKey = function(key) {
    return (this.entries[key])? true: false;
  }
  HashMap.prototype.remove = function(key) {
    if(this.entries[key]){
    delete this.keys[this.entries[key].k];
    delete this.entries[key];
    this.length--;
    }
  }
   HashMap.prototype.clear = function(key) {
    for(var i in this.keys){
    delete this.entries[this.keys[i]];
    delete this.keys[i];
    }
    this.length = 0;
  }
  HashMap.prototype.getMap = function(){
    return this.entries;
  }
  HashMap.prototype.keySet = function() {
    return this.keys;
  }
  HashMap.prototype.size = function(){
     return this.length;
  }

if(typeof($) == 'undefined') {
	var $ = function (id) {
		return (typeof(id)=="object")?id:document.getElementById(id);
	}
}

function saveGridTabIndex(attrName, rows, cells,lastIndex) {
	this.name = attrName;
	this.rows=rows;
	this.cells=cells;
	this.lastIndex=lastIndex;
}

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)
    }
  }
	if(self.parent==self) {
		saveToolbarZonesToCookie();
	}
}

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 saveToolbarZonesToCookie() {
	for (var key in toolbarZones){
		if (typeof(toolbarZones[key])=="undefined" || toolbarZones[key]==null) continue;
		var item=toolbarZones[key];
		if (!item.display) setCookie(item.id,"hidden");
		else clearCookie(item.id,"hidden");
	}
}
function getToolbarZonesFromCookie() {
	var item=null;
	var value="";
	for (var key in toolbarZones){
		if (typeof(toolbarZones[key])=="undefined" || toolbarZones[key]==null) continue;
		item=toolbarZones[key];
		value=getCookie(item.id);
		if(value!=null) {
			setDisplay(item,false);
			collapsToolBar(item.img,item.id);
		}
	}
}

function addWin(win, value, cls) {
  //    winLast = win;
  var len = winArray.length;
  winArray[len] = win;
  winAttrArray[len] = value;
  winClassArray[len]=(cls==null)?"":cls;
  return len;
}

//cls -  класс открываемого на редактирование или создание объекта
// если задан то ищем и по объекту окна и по имени класса
function getWinAttr(win,cls) {
  var found = false;
  for (var i = 0; i < winArray.length; i++) {
    if (winArray[i] == win && !winArray[i].closed) {
	  if (typeof(cls)!="undefined" && cls!=null && cls!="" ) {
			if (winClassArray[i]!=cls) continue;
	  }
      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) {
  var x = 0;
  var 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;
  if (attrName=="class" || attrName=="className") {
	  attrName=(isIE) ? "className":"class";
  }
  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.length==0)?null: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;
}
var stopEventBuble= function(e) { return getFalse(e);};

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;
}
//Функция для проверки наличия элемента с таким-то аттрибутом в массиве
//arr -array
// attrName -  the array item object attribute name
// attrValue -  the array item object attribute value
//mode  -  0,null: return boolean; 1: return array index; 2- return array item (object);
function isElemInArray(arr,attrName,attrValue,mode) {
	if (arr==null) return null;
	for (var i=0; i<arr.length;i++) {
		var item=arr[i];
		if (typeof(item)!="object") continue;
		var attr= eval("item."+attrName);
		if (attr==null) continue;
		if (attr==attrValue) {
			switch (mode) {
				case 1: return i;break;
				case 2: return item;break;
				default: return true;
			}
		}
	}
	switch (mode) {
		case 1: return -1;break;
		case 2: return null;break;
		default: return false;
	}
 }

if (!String.prototype.capitalize) {
	String.prototype.capitalize = function(){
		return this.replace(/[A-Za-z0-9_а-яёА-ЯЁ]+/g, function(a){
			return a.charAt(0).toUpperCase() + a.slice(1).toLowerCase();
		});
	};
}

function push(val) {
  if (val == undefined) return;
  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,depth) { // depth -  show the number of object to find in hierarchy
	var d=(depth!=null && typeof(depth)!="undefined")?parseInt(depth):0;
	if (isNaN(d)) d=0;
	if (d<0) d=0;
	var tmpObj = obj;
	while (tmpObj) {
		tmpObj = tmpObj.previousSibling;
		if (tmpObj && tmpObj.tagName) {
			if (d==0) {
				return tmpObj;
			}
			d=d-1;
		}
	}
	return null;
}

function getNextSiblingTag(obj,depth) { // depth -  show the number of object to find in hierarchy
	var d=(depth!=null && typeof(depth)!="undefined")?parseInt(depth):0;
	if (isNaN(d)) d=0;
	if (d<0) d=0;
	var tmpObj = obj;
	while (tmpObj) {
		tmpObj = tmpObj.nextSibling;
		if (tmpObj && tmpObj.tagName) {
			if (d==0) {
				return tmpObj;
			}
			d=d-1;
		}
	}
	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;
  }
  parentTag = (parentTag!=null)?parentTag.toLocaleUpperCase():parentTag;
  var parent = null;
  var retElement = null;
  var pNode = node;
  while (parent = pNode.parentNode) {
    if (parent.nodeType == 1 && (parentTag == null || parent.tagName.toLocaleUpperCase() == parentTag )) {
      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) {
      var 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 obj.outerHTML=htmlCode  for Mozilla
function setOuterHTML(obj,htmlCode){
  if (!obj) return;
  if (obj.outerHTML) {
      obj.outerHTML = htmlCode;
      return;
  }
  var newElement = document.createElement('span');
  newElement.innerHTML=htmlCode;
  var np=obj.parentNode;
  np.replaceChild(newElement,obj);
}

// 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) {
  var t=title.split("&#034;");
  title=t.join('"');
  t=title.split("&#039;");
  title=t.join("'");
  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);
}

function clearSelectedObjBar() {
	var lf=getListFrame();
	if (!lf) lf=self;
	if (lf.clearSelectedInList) {
		var boxes=(typeof("selectCheckersName")!="undefined")?selectCheckersName:"selId(0)";
		lf.clearSelectedInList(boxes);
	}
}

/* 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) {
  if (!name || name=="") return null;
  var inputTagHtml = "<INPUT type=" + type + " name=" + name + " value=\"" + value + "\">";
  form.innerHTML += inputTagHtml;
  var inputTag = form.elements[name];
  if (!inputTag) return null;
  inputTag.setAttribute("id", name);
  return inputTag;
}

function addInput(form, name, value, setID) {
  var inputTag = document.createElement("INPUT");
  inputTag.setAttribute("TYPE", "hidden");
  inputTag.setAttribute("NAME", name);
  if (setID) inputTag.setAttribute("id", name);
  inputTag.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 delOption(list, index, value) {
  var ind=parseInt(index);
  if ( isNaN(ind) || ind<0 ) {
		if (!value) return;
		ind= getIndexByOptionValue(list, value);
  }
  if (ind > -1) {
    list.options[ind] = null;
  }
}

//direction(boolean):  true=Двигаем слева направо; false/null - Двигаем справа налево
//all(boolean): true=все опшины; false/null- только выбранные
function moveHorizontal(name1,name2,direction,all) {
	var box1 =  (direction) ? $(name1) : $(name2);
	var box2 =  (direction) ? $(name2) : $(name1);
	if (!box1 || !box2) return;
	var move,remove,item;
	for (var i = 0; i < box1.length; i++) {
		item=box1.options[i];
		move=(all)?true:(item.selected);
		if (move) {
			addOption(box2, item.value, item.text, item.data);
		}
	}
	for (var i = box1.length - 1; i >= 0; i--) {
		item=box1.options[i];
		remove=(all)?true:(item.selected);
		if (remove) delOption(box1, i);
	}
}

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] != "#") {
	  if (table.childNodes[i].getAttribute("objId")!=null){
		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 = function (event) {doEdit(event, getFirstChildTag(this));};
		//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") {
    try {
      src.blur();
    } catch(ex) {
      // do nothing
    }
    return getFalse(ev);
  }
}

function prepareDoEditOnGridCell(e) {
	var ev = window.event ? window.event : e;
	var td = window.event ? ev.srcElement : ev.target;
	if (ev.keyCode != 13 || td.tagName.toUpperCase()!="TD") return getFalse(ev);
	var spanA= td.getElementsByTagName("span");
	var span=null;
	for (var i=0; i<spanA.length;i++) {
		if (spanA[i].className=="eattr" && spanA[i].onclick!=null && spanA[i].onclick.toString().indexOf("doEdit")>0) {
			span=spanA[i];
			break;
		}
	}
	if (span==null) return getFalse(ev);
	span.click();
	return true;
}

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) {
    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 objClass="";
  var objID = el.getAttribute("objId");
  if (objID) {
	objClass= "_"+objID.substring((objID.indexOf("@")+1));
  }
  var aTitle = el.getAttribute("attrTitle");
  aTitle=(aTitle==null)?aname:aTitle;
  var f = getForm(el);
  if (f == null) return;
  if (el.innerHTML=="&nbsp;"){ el.innerHTML=""; }
  var inpSize = (el.offsetWidth>0)?(el.offsetWidth<80)?80:el.offsetWidth:0;

  if (inpSize == 0) {
    if (el.getAttribute("mask") != null) {
      var maska = parseMask(el.getAttribute("mask"));
      inpSize = maska.length * 8;
    }
    else inpSize = 80;
  }
  eattrHtml = el.innerHTML;
  el.innerHTML = "";

  var tip = el.getAttribute("attrType");
  //var inputTagH = "<input type='hidden' name='data(" + aname + ")' id='data(" + aname +objClass+ ")' />";
  el.innerHTML += inputTagH;

  var inputTagHTML = "<input type='text' name='date(" + aname + ")'  id='date(" + aname +objClass+ ")' tip='date' attrTitle='"+aTitle+"' maxlength=10 hidElem='data(" + aname + objClass+ ")' onblur='prepareGetNewDate(event)' />";
  if (self.addCalendar) {
    inputTagHTML += "<span id='buttons_" + aname +objClass+ "'><button class='lnk' title='Выбрать' onClick=\"if (self.showCal) {doBlurForDate=false;chooseButtonPressedForDate=true;showCal('" + aname + objClass +"',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 + ')'];
  var myTag = $("date("+ aname +objClass+ ")");
  myTag.value = eattrHtml;
  myTag.className = "editStringAttr";
  myTag.style.width = inpSize + "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+objClass, 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>0)?(el.offsetWidth<70)?70:el.offsetWidth:0;
  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;
  if (tip != null && "3" == tip){
    var vv = inputTag.value;
    if (vv) {
      while (vv.indexOf(" ") > -1) {
        vv = vv.replace(' ', '');
      }
    }
    inputTag.value = vv;
  }
  var attrLength=el.getAttribute("attrLength");
  if (attrLength!=null && !isNaN(Number(attrLength)) && Number(attrLength)!=0 ) {
	inputTag.maxLength=attrLength;
  }
  inputTag.className = "editStringAttr";

  if (el.getAttribute("mask") != null) {
    inputTag.setAttribute("mask", el.getAttribute("mask"));
  }
  if (el.getAttribute("regexp_rule") != null) { // если используется новая маска ....
    inputTag.setAttribute("regexp_rule", el.getAttribute("regexp_rule"));
    if (el.getAttribute("inline") != null) { // признак вывода в строку
        inputTag.setAttribute("inline", el.getAttribute("inline"));
    }
  }

  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 elem = inputTag;
  var node = elem.parentNode;
  document.forms[eformName].value.value = elem.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;
  }*/
  var obj = window.event ? window.event.srcElement : e.currentTarget;
  if (obj == null || obj.tagName != "INPUT") return;

  var field_tip=obj.getAttribute("tip");
  if (field_tip && field_tip=="date") {
	  doBlurForDate = true;
  }

  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) {
  var blurElem;
  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);
  }
  else {
	  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 = $(hidId);
  }
  testIfChanged(el);
//  var node = el.parentNode;
  var node = getParentByTagName(el,"span");
  if (node==null) return;
  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 = function (event) {doEdit(event,getFirstChildTag(this));};
    }
  } catch (e) { }
	doBlurForDate=false;

  if (eattrDateTimer!=null) {
	  clearTimeout(eattrDateTimer);
  }
}

function getNewStr(e) {
  var el = window.event ? window.event.srcElement : e.currentTarget;
  var test = 0;
  if (el && el.getAttribute("regexp_rule") != null){
        test = validateFieldByRegExp(el);
  }else {
    test = validateField(el, true);
  }
  if (test == 0 || !test) return getFalse(e);
  /*	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") {
        if (!checkinteger(el.value)) {// Integer
         alert("Это поле может содержать только целые числа");
          correct = false;
        }
      } else if (type == "3") {
        if (!checknumber(el.value)) {//Float
          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 = function (event) {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 isVisible(obj) {
  do{
    try{if (obj.nodeType > 1) break;}catch(e){}
    var display = obj.currentStyle
            ?obj.currentStyle.display
            :isN6 ? obj.ownerDocument.defaultView.getComputedStyle(obj, null).getPropertyValue("display"):'';
    var visibility = obj.currentStyle
            ?obj.currentStyle.visibility
            :isN6 ? obj.ownerDocument.defaultView.getComputedStyle(obj, null).getPropertyValue("visibility"):'';
    if (display == 'none' || visibility == 'invisible') {
      return false;
    }
  }while((obj=obj.parentElement?obj.parentElement:obj.parentNode))
  return true;
}

function popupMsgOn(inWindow, str, title) {
  var win=(inWindow)?inWindow:window;
  win.document.body.scrollTop = 0;
  win.document.body.scrollLeft = 0;
  stopAllEvent(win);
  var 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>';
  var titletr = (title != null) ? '<tr><td align="left" valign="top" height="1" style="background-color: ActiveCaption; color: CaptionText;padding-left:3px;padding-bottom:2px">' + title + '</td></tr>':"";
  var header = '<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"></head>';
  var 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 popupFrm = win.frames["popupIFRAME"];
  if (!popupFrm) {
  emulate_insertAdjacentHTML();
  win.document.body.insertAdjacentHTML("beforeEnd", 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>');
  popupFrm=win.frames["popupIFRAME"];
  }

/*  var obj = getObjById("newlayer", win);
  if (obj != null) {
    //	  obj.outerHTML = "";
    obj.innerHTML = "";
  }*/

  var canShow=false;
  if (popupFrm) {
	var frmDoc=(popupFrm.document)?popupFrm.document:(popupFrm.contentDocument)?popupFrm.contentDocument:null;
	if (frmDoc) {
		frmDoc.write(header + '<body>' + newdiv + '</body>');
		frmDoc.close();
		canShow=true;
	}
  }

  var obj = getObjById("newpopupmsg", win);
  if (obj && canShow) {
	x_offset = Math.round(( (isIE ? win.document.body.clientWidth : win.outerWidth) - obj.offsetWidth) * 4 / 9);
	x = (isIE ? win.document.body.scrollLeft : win.scrollX) + x_offset;
	y_offset = Math.round(( (isIE ? win.document.body.clientHeight : win.innerHeight) - obj.offsetHeight) * 4 / 9);
	y = (isIE ? win.document.body.scrollTop : win.scrollY) + y_offset;

	if (isIE) {
		obj.style.pixelLeft = x;
		obj.style.pixelTop = y;
	}
	else {
		obj.style.left = x+"px";
		obj.style.top = y+"px";
	}
	if (isIE) obj.filters.item(0).Apply();
	obj.style.visibility = "visible";
	if (isIE)  obj.filters.item(0).Play();
  }
}

function popupMsgOff(inWindow) {
  var win=(inWindow)?inWindow:window;
  envokeAllEvent(win)
  var obj = getObjById("newpopupmsg", win);
  if (obj != null) {
    var parentObj = obj.parentNode;
    if (parentObj) {
      parentObj.removeChild(obj);
    }
  }
  obj = getObjById("newlayer", win);
  if (obj != null) {
    var parentObj = obj.parentNode;
    if (parentObj) {
      parentObj.removeChild(obj);
    }
  }
}

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;
  this.toString = function() {
	 return "names:\n"+this.cName.toString()+"\n\ncodes:\n"+this.code.toString();
  }
}

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(onlySelf) { // onlySelf - get selected objects only from current window
  ret = new Array();
  if (!onlySelf && 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;
	  if (result!=null && typeof(result)!="undefined") break;
    }
  } 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 (var 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 (var 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();     
  if ((res[0] == null || res[0] == "") && getSelectAllSelected() != "true") {
    alert("Ни один объект не выбран.");
    return false;
  }
  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,cls) {
	if (isClose == null) isClose = true;
	if (selectAll == "true") {
		selectAllSelectObj('chooseFrame', 'ChooseForm', isClose, canDouble);
	} else {
		if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
			var result =false;
			if (winIsOpener){ // if win is allready opener
				ret = getSelObjects(true);
//				alert(ret[0].toString()+"\n\n"+ret[1].toString()+"\n\n"+((typeof(ret[2])!="undefined")?"ret[2] length= "+ret[2].length+"\n"+ret[2][0].toString():"- no grid data -") );
				var exist=self.parent.$(win.name);
				try {
					result=(exist && win.setLinkObj!=null)?((canDouble != null) ? win.setLinkObj(ret, win, canDouble, cls) : win.setLinkObj(ret, win, null, cls)) : false;
					if (isClose && result) {
						if (exist && win.hideShadowForAll) win.hideShadowForAll();
					//	self.parent.close();
					}
				} catch(e) {}
			}
			else {
				ret = getSelObjects();
				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 {
			ret = getSelObjects();
			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);
  if (!element) return;
  var hElement = document.getElementById(hPrefix + attrName);
  var oldElement = (hElement && hElement.value!="")? document.getElementById(elementPrefix + attrName + hElement.value):null;

  var setNew=true;
  if (oldElement) {
    if (oldElement.id == element.id) setNew=false;
    oldElement.className = oldClass;
    hElement.value = "";
    if (window.showDelButInRow ) window.showDelButInRow(oldElement,attrName,false);
  }
  if (setNew) {
     if (newClass) element.className = newClass;
     hElement.value = objId;
     if (window.showDelButInRow ) window.showDelButInRow(element,attrName,true);
  }
  //        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);
}
function fireOnChange(obj) {
  if (obj.fireEvent) {
    obj.fireEvent("onchange");
  } else if (obj.dispatchEvent) {
    var e = document.createEvent("HTMLEvents");
    e.initEvent("change", true, true);
    obj.dispatchEvent(e);
  } else if (obj.onchange) {
    obj.onchange();
  }
}
var updateToOpenerOpener = false;
function setLinkObj(ret, win, canDouble, cls) {
  if (updateToOpenerOpener) {
    var wo = win.opener;
    if (wo && !wo.closed) win = wo;
  }
  var attrName = getWinAttr(win,cls);
  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);
    var newop,_i,size;
    if (Sel.tagName == "SELECT") {
      var newoption,temp;
      var ret_1_List = ret[0];
      var ret_2_List = ret[1];
      var map = new HashMap();
      if (!canDouble) {
        for (var _x = 0; _x < Sel.length; _x++)
          map.put(Sel.options[_x].value, _x);
      }
      for (_i = 0, size = ret_1_List.length; _i < size; _i++) {
        temp = new Date().getTime();
        if (!canDouble && map.containsKey(ret_1_List[_i])) {
          Sel.options[map.get(ret_1_List[_i])].text = ret_2_List[_i];
          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;
        removeFromHiddenDel(attrName, ret_1_List[_i]);
      }
      map.clear();
      ToHidden(Sel, Hid);
      if (Sel) {
        fireOnChange(Sel);
      }
      if (Hid) {
        fireOnChange(Hid);
      }
    } else if (Sel.tagName == "INPUT" && row) {
      var mainTable,thead,tbody,headTR;
      var table = row.parentNode;
      if (table.nodeName.toLowerCase() == "table") {
        mainTable = table;
        thead = mainTable.getElementsByTagName("thead").item(0);
        var htr=thead.getElementsByTagName("tr");
        headTR=htr[htr.length-1];
      }
      else {
          mainTable = table.parentNode;
          thead = (table.nodeName.toLowerCase() == "thead")?table:mainTable.getElementsByTagName("thead").item(0);
          headTR=row;
      }
      tbody = getNextSiblingTag(thead);
      table=null;

      var trElem, tdElem, txtNode;
      var tmpId;
      var rowsAmount=tbody.getElementsByTagName("TR").length;
      ret_1_List = ret[0];
      ret_2_List = ret[1];
      var gridArr = ret[2];
      if (isLinkNto1) {
        var trObj = tbody.getElementsByTagName("TR")[0];
        if (trObj) {
          var trObjId = trObj.getAttribute("objId");
          if (ret_1_List != trObjId) {
            document.getElementById("title_" + attrName).value = trObjId;
            DelFromList(attrName);
          }
        }
      }
	  var gridTabIndexObj=isElemInArray(gridTabIndexArr,"name",attrName,2);
	  var gridLastTabIndex = (gridTabIndexObj!=null)?gridTabIndexObj.lastIndex:-1;
	  var gridObjRows = (gridTabIndexObj!=null)?gridTabIndexObj.rows:0;
      var gridNames,gridValues,ind,x;
      for (_i = 0, size = ret_1_List.length; _i < size; _i++) {
        tmpId = "grid_" + attrName + ret_1_List[_i];
        if (!canDouble) {
          trObj = document.getElementById(tmpId);
          if (!trObj) {
            var a = getObjectByAttr(tbody, "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;
            gridNames = gridArr[_i].cName;
            gridValues = gridArr[_i].code;
            //						var trObj = document.getElementById(tmpId);
            var tdElems = trObj.getElementsByTagName("td");
            for (var _w = 0; _w < tdElems.length; _w++) {
              var cn = tdElems[_w].getAttribute("cName");
              if (cn == null || cn == "") continue;
              ind = contains(gridNames, cn, true);
              if (ind >= 0 && ind < gridValues.length) tdElems[_w].innerHTML = gridValues[ind];
            }
            continue;
          }
        }

        var isMadTable = false;
        // проверка грида на таблицу связки
        var isMadTable_field = document.getElementById("isMadTable_" + attrName);
        if (isMadTable_field != null && isMadTable_field.value == "true") isMadTable = true;

        trElem = document.createElement("tr");
		gridObjRows++;
        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";

        var tdEmptyElem = document.createElement("td");
        var txtEmptyNode = document.createTextNode(" ");
        tdEmptyElem.appendChild(txtEmptyNode);
        trElem.appendChild(tdEmptyElem);
        tdEmptyElem.innerHTML = "&nbsp;";

        // var tableHead = mainTable.getElementsByTagName("thead")[0];
        // var headTR = thead.getElementsByTagName("tr")[0];
        var childs = headTR.childNodes;
        var tableCols = headTR.getElementsByTagName("td").length + headTR.getElementsByTagName("th").length;
        var insert_Rborder_Cell = true;
	    var tdEmpty,txtEmpty;
        if (gridArr == null || typeof(gridArr[_i]) == "undefined" || childs == null) {
          tdElem = document.createElement("td");
		  tdElem.setAttribute("tabIndex",((gridLastTabIndex<0)?-1:gridLastTabIndex++));
		  txtNode = document.createTextNode(ret_2_List[_i]);
          tdElem.appendChild(txtNode);
          trElem.appendChild(tdElem);
		  if (gridLastTabIndex>=0) {tdElem.onkeyup= function (event) {return prepareDoEditOnGridCell(event);}}
          for ( x = 0; x < (tableCols - 3); x++) {
            tdEmpty = document.createElement("td");
			tdEmpty.setAttribute("tabIndex",((gridLastTabIndex<0)?-1:gridLastTabIndex++));
            txtEmpty = document.createTextNode(" ");
            tdEmpty.appendChild(txtEmpty);
            trElem.appendChild(tdEmpty);
            tdEmpty.innerHTML = "&nbsp;";
		    if (gridLastTabIndex>=0) {tdEmpty.onkeyup= function (event) {return prepareDoEditOnGridCell(event);}}
            tdEmpty = null;
            txtEmpty = null;
          }
        }
        else {
          gridNames = gridArr[_i].cName;
          gridValues = gridArr[_i].code;
          var rb_exist = false;
          for (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 {
               var cName = el.getAttribute("cName");
               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;";
	  		  tdEmpty.setAttribute("tabIndex",((gridLastTabIndex<0)?-1:gridLastTabIndex++));
            }
            trElem.appendChild(tdEmpty);
		    if (gridLastTabIndex>=0) {tdEmpty.onkeyup= function (event) {return prepareDoEditOnGridCell(event);}}
            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);
        }

        tbody.appendChild(trElem);
        tbody.lastChild.onclick = new Function("gridSelect('grid_','title_','" + attrName + "','" + ret_1_List[_i].replace(/'/g, "\\'") + "','silver','gridRow')");
        if (isLinkNto1) {
          Hid.value = ret_1_List[_i];
          //       Sel.value=ret[1];
        } else {
          Hid.value += "," + ret_1_List[_i];
        }
      }
	  if (gridTabIndexObj != null) {
		  gridTabIndexObj.rows = gridObjRows;
		  gridTabIndexObj.lastIndex=gridLastTabIndex;
	  }
      if (Sel) fireOnChange(Sel);
      if (Hid){
	      fireOnChange(Hid);
      }
      if (rowsAmount==1 && tbody.getElementsByTagName("TR").length>1) {
         if (self.removeNoDataGridRow) removeNoDataGridRow(mainTable);
      }
	  if (!isIE && initScrollContentForMozz) {
		  initScrollContentForMozz( "grid_container_thead_"+attrName, "grid_container_tbody_"+attrName, "grid_container_"+attrName, true);
	  }

    } else {
      Hid.value = ret[0];
      Sel.value = ret[1];
      if (Sel) fireOnChange(Sel);
      if (Hid){
	      fireOnChange(Hid);
      }
    }
  /*  if (Hid) {
      //fireOnChange(Hid);
    }   */
  }
  //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 escapeEx(str) {
   var ret = '';
   for (i = 0; i < str.length; i++){
     var n = str.charCodeAt(i);
     if (n >= 0x410 && n <= 0x44F)
       n -= 0x350;
     else if (n == 0x451)
       n = 0xB8;
     else if (n == 0x401)
       n = 0xA8;
     if ((n < 65 || n > 90) && (n < 97 || n > 122) && n < 256){
       if (n < 16)
         ret += '%0' + n.toString(16);
       else
         ret += '%' + n.toString(16);
     }
     else
       ret += String.fromCharCode(n);
   }
   return ret;
 }


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)=" + escapeEx(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) {
    gridt = "&gridt=1";
  }

  if (selectPage && selectPage.indexOf(".htm") == (selectPage.length - 4)) {
    selectPage = selectPage.substring(0, (selectPage.length - 4));
  }
  var selectWindow = doOpenWindow(baseUrl + selectPage + '.htm?id=' + folder + selCls + '&sm=' + sm + gridt + mb + curObj);
  var myAttrName=((prefix==null)?"":prefix)+attrName;
  addWin(selectWindow, myAttrName, refClass);
}

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, refClass);
}

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;
  var winArrIndex=addWin(createWindow, myAttrName, refClass);
  if (updFunc)
    addUpdateFrameFunction(createWindow, updFunc);
  return winArrIndex;
}

function viewObj(id, newPage, urlCommon, updFunc, target, customID, objID) {
  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 = (objID==null) ? el.value: objID; // objID- id объекта открываемого на редактирование, передается при нажатии на кнопку редактирования в строке грида.
  if (objID!=null) el.value=objID;
  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);
  var winArrIndex=addWin(viewWindow, aName);
  if (updFunc) {
    addUpdateFrameFunction(viewWindow, updFunc);
  }
  return winArrIndex;
}
function delLinkObj(attrName, message) {
  var Hid = document.getElementById("id_" + attrName);
  var changed = !!Hid.value;
  Hid.value = "";
  if (!message) {
    message = "";
  }
  var Sel = document.getElementById("title_" + attrName);
  Sel.value = message;
  //for formchange
  setChanged();
  if (changed) {
    //fire change events
    fireOnChange(Hid);
    fireOnChange(Sel);
  }
}

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,tag) {
  if (frame == null) frame = self;
  var b = (!tag)? frame.document.getElementsByTagName('body')[0]:tag;
  if (frame.document.getElementById("overlay") == null) {
    var overlay = frame.document.createElement('iframe');
    overlay.setAttribute("frameborder", "no");
    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) {
     addShadow();
     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);
  }
  var p=s.parentNode;
  if (p) p.removeChild(s);
}

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("/", "@", ".", ",", "$", "&", "!", "?", ":", "*", "#", "+", ";", "_", "=", "-","%40", "%");      //%40 = @
      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]);
        }
      }
    }
    try {
      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();
    } catch(e) {
      if(window.debug) {
        window.debug(e);
      }
    }
  }

  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() { }
}

//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";
	}
}
function getCookie(name) {
	var kuki=document.cookie;
	var b=kuki.split(";");
	kuki=b.join("");
	var pares = kuki.split(" ");
	for (var i=0;i<pares.length;i++) {
		var args=pares[i].split("=");
		if (args[0]==name) return args[1];
	}
	return null
}
function clearCookie(name,val) {
	if (val==null || val=="") val=getCookie(name);
	if (!val) val="";
	var exp = new Date();
	exp.setTime (exp.getTime() - (24*60*60*1000));
	document.cookie = name+"="+val+"; expires="+exp.toGMTString()+"; path=/";
}
function setCookie(name,val,h) {
	if (isNaN(parseInt(h))) h=1;
	var exp = new Date();
	exp.setTime (exp.getTime() + ((h+3)*60*60*1000));
	document.cookie = name+"="+val+"; expires="+exp.toGMTString()+"; path=/";
}

    /**
     * Копирование данных формы в форму при переносе с помощью innerHTML
     * @param source откуда берем данные для копирования
     * @param dest куда копируем данные формы
     */
    function copyFormToForm(source, dest) {
        var f1 = source;
        var f2 = dest;
        for (var i = 0; i < f1.elements.length; i++) {
            var el = f1.elements[i];
            if (el.value != null && el.value != '') {
                if (f2.elements[el.name] != null && typeof(f2.elements[el.name]) != "undefined" && f2.elements[el.name].type == el.type) {
                    //					alert(el.name+"->"+el2.name);
                    var el2 = f2.elements[el.name];
                    switch (el.type) {
                        case "text":
                        case "textarea": el2.value = el.value; break;
                        case "CHECKBOX":
                        case "RADIO":
                            if (el.checked) {
                                el2.checked = true;
                            }
                            break;

                        case "select-one":el2.selectedIndex = el.selectedIndex; break;
                        case "select-multiple":
                            for (var j = 0; j < el.options.length; j++) {
                                if (el.options[j].selected) {
                                    if (el2.options[j] != null && typeof(el2.options[j]) != "undefined") {
                                        el2.options[j].selected = true;
                                    }
                                }
                            }
                            break;
                    }
                }
            }
        }
    }

function selectObjColor(attrName) {
  var attrValueField = document.getElementById('id_' + attrName);
  var attrColorField = document.getElementById('color_id_' + attrName);
  var attrColor = showModalDialog(baseUrl+'scripts/selcolor.html', window, 'dialogWidth:370px;dialogHeight:240px;help:no;scroll:no;status:no');
  if (attrValueField) {
    attrValueField.value = attrColor;
  }
  if (attrColorField) {
    attrColorField.style.backgroundColor = attrColor;
  }
}

