var isOpera = (navigator.userAgent.indexOf("Opera") != -1)?true:false;
var isOpera5 = (navigator.appVersion.indexOf("MSIE 5") != -1 && navigator.userAgent.indexOf("Opera 5") != -1)?true:false;
var isOpera6 = (navigator.appVersion.indexOf("MSIE 5") != -1 && navigator.userAgent.indexOf("Opera 6") != -1)?true:false;
var isN6 = (navigator.userAgent.indexOf("Gecko") != -1);
var isN4 = (document.layers)?true:false;
var isMac = (navigator.userAgent.indexOf("Mac") != -1);
var isIE = (document.all && !isOpera && (!isMac || navigator.appVersion.indexOf("MSIE 4") == -1))?true:false;

var baseUrl = document.getElementsByTagName("base")[0].href;

var OBJECT_MODE = 0;
var FOLDER_MODE = 1;
var selectMode = OBJECT_MODE;
/* 1 - folders, 0 - objects */

var useModalWindows = false;
var currentModalWin = null;

var treeFrame = null;
var treePage = null;
var treeId = null;
var childs = null;
var container = null;
var folder = null;
var treeTableClass = null;
var treePlusClass = null;

var updateFrameFunctionArray = new Array();
var selectedIdArray = null;
var selectedTitleArray = null;
var selectedObj = null;
var saveListOfChoosenObj=false;

/* use only in navigator */

var popupWinWidth = 750;
var popupWinHeight = 550;

if(typeof($) == 'undefined') {
	var $ = function (id) {
		return (typeof(id)=="object")?id:document.getElementById(id);
	}
}

function push(val) {
  this[this.length] = val;
  return this[this.length - 1];
}
Array.prototype.push = push;

function getPopupWinWidth() {
  return (popupWinWidth || popupWinWidth == 0) ? popupWinWidth : 750;
}
function getPopupWinHeight() {
  return (popupWinHeight || popupWinHeight == 0) ? popupWinHeight : 550;
}

function addUpdateFrameFunction(win, value) {
  updateFrameFunctionArray[win] = value;
}
function getUpdateFrameFunction(win) {
  return updateFrameFunctionArray[win];
}
function delUpdateFrameFunction(win) {
  if (win) updateFrameFunctionArray[win] = null;
}

function updateFrame() {
  if (window && window.location)
    window.location.reload(true);
}

/* has navigator on page ? */
function checkNavigator(tagName, attr, value) {
  var tags = document.getElementsByTagName(tagName);
  var tmpVal;
  for (var i = 0; i < tags.length; i++) {
    tmpVal = (attr != "class") ? tags[i].getAttribute(attr):tags[i].className;
    if (tmpVal == value)
      return true;
  }
  return false;
}

function removeSelection() {
  if(typeof(document.selection)!="undefined") document.selection.empty();
  else {
    var selection= window.getSelection();
    if(!selection.isCollapsed) {
        selection.collapseToStart();
    }
  }
}
function _sub(obj) {
  removeSelection();
  if (obj != null) getSubTree(obj, 'navigator', 'folder', 'plus', 'childs', 'container');
}

function _foldClick(id) {
  if (id == null || (id != null && trim(id) == "")) return false;
  var win = url(self.parent.editPage + '.htm?id=' + id);
  addUpdateParentTree(win, 'self', 'plus' + id, 'navigator', 'folder', 'plus', 'childs', 'container');
  return true;
}

function _titleClick(e, mode, link, obj) {
  treeTitleClick(e, mode, 'navigator','folder','childs','container', 'selId(0)', link, 'list',obj);
  return getFalse(e);
}

function getSubTree(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
  getTree(obj, false, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function refreshSubTree(obj, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
  getTree(obj, true, navigatorTableClass, folderClassName, className, childsClassName, containerClassName);
}

function getTree(obj, isRefresh, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {

  if (!treeFrame || !treePage) {
    alert("Tree frame is undefined in navigator page !");
    return;
  }
  var navigator = getParentByClassName(obj, navigatorTableClass);
  folder = getParentByClassName(obj, folderClassName);
  if (folder) {
    var id = folder.getAttribute("id");
    treeId = id;
    childs = getNextSiblingByClassName(folder, childsClassName);
    container = getElementByClassName(childs, containerClassName);
    var isEmpty = (navigator.getAttribute("objAmount") == 0);
    var node = getElementByClassName(folder, className);
    if (childs.style.display != "none") {
      // hide subtree and return
      childs.style.display = "none";
      if (node && !isEmpty) {
        if (folder.getAttribute("position") != "last") {
          node.src = tree_plus.src;
        } else {
          node.src = tree_plus_last.src;
        }
      }
      if (!isRefresh)
        return;
    }

    if (node) {
      if (folder.getAttribute("position") != "last") {
        node.src = tree_minus.src;
      } else {
        node.src = tree_minus_last.src;
      }
    }

    var href = folder.getAttribute("href"); 
    var i = href.indexOf("?");
    href = href.substring(i, href.length + 1);
    var j = href.indexOf("&blk");
    href = href.substring(0, j);
    if (container.getAttribute("level")) {
      var treeLvl = parseInt(container.getAttribute("level"));
      treeLvl = treeLvl + 1;
      if (href.length > 0) href = href + "&treeLvl=" + treeLvl;
      else href = "?treeLvl=" + treeLvl;
    }
	
    var newTag = document.forms["newTag"];
    if (!newTag) {
      newTag = self.document.createElement("FORM");
    }
    newTag.innerHTML = "";
    newTag.setAttribute("ACTION", "" + treePage + ".htm");
    newTag.action = "" + treePage+".htm";
    newTag.method = "POST";
    newTag.target = "" + treeFrame.getAttribute("name") + "";
    newTag.name = "newTag";
    newTag.id = "newTag";

    document.getElementsByTagName("body").item(0).appendChild(newTag);

    var folderPath= "";
    var prevFolder = getPrevSiblingByClassName(getParentByClassName(getParentByClassName(childs, navigatorTableClass),childsClassName), folderClassName);
    if (!prevFolder) {
      prevFolder = getPrevSiblingByClassName(getParentByClassName(childs,childsClassName), folderClassName);
    }

    while (prevFolder) {
      folderPath = prevFolder.getAttribute("id") + "," +  folderPath ;
      var tempFolder = getPrevSiblingByClassName(getParentByClassName(getParentByClassName(prevFolder, navigatorTableClass),childsClassName), folderClassName);
      if (!tempFolder) {
        tempFolder = getPrevSiblingByClassName(getParentByClassName(prevFolder,childsClassName), folderClassName);
      }
      prevFolder = tempFolder;
    }

    var inputTag = self.document.createElement("INPUT");
    inputTag.setAttribute("TYPE", "hidden");
    inputTag.setAttribute("style", "display:none;");
    inputTag.setAttribute("NAME", "folderPath");
    inputTag.setAttribute("VALUE", "" + folderPath + "");
    newTag.appendChild(inputTag);

    var paramArray = href.substring(href.indexOf("?") + 1, href.length + 1).split("&");
    if (paramArray) {
      for (var n = 0; n < paramArray.length; n++) {
        var paramValue = paramArray[n].split("=");
        if (paramValue) {
          inputTag = self.document.createElement("INPUT");
          inputTag.setAttribute("TYPE", "hidden");
          inputTag.setAttribute("style", "display:none;");
          inputTag.setAttribute("NAME", "" + paramValue[0] + "");
          inputTag.setAttribute("VALUE", "" + paramValue[1] + "");
          newTag.appendChild(inputTag);
        }
      }
    }

    document.forms["newTag"].innerHTML += "";
    newTag.submit();

    treeTableClass = navigatorTableClass;
    treePlusClass = className;
  } else {
    /* alert(folder); */
  }
}

function getSubTreeHTML() {
  var treeDocument = null;
  if (self.frames.length > 0) {
    treeDocument = self.frames[treeFrame.getAttribute("name")].document;
  } else {
    treeDocument = self.frames.document;
  }

  if (treeDocument != null) {
    var obj = treeDocument.getElementById("body");
	if (treeTableClass==null || treeTableClass=="") {
		// если класс, по которому ищем необходимый тег в ифраме, не задан то пытаемся взять первую таблицу, если ее нет выходим без алерта.
		var tbl=obj.getElementsByTagName("table")[0];
		if (tbl==null) return;
		var navigator = tbl;
	}
	else {
		var navigator = getElementByClassName(obj, treeTableClass);
	}
    if (navigator == null) {
      alert("Error while getting folders.");
      return;
    }
    var isEmpty = (navigator.getAttribute("objAmount") == 0);
    if (!isEmpty) {
	  if (container!=null) {
			container.innerHTML = obj.innerHTML;
	  }
	   obj.innerHTML = "&nbsp;";
	   if (childs !=null) {
			childs.style.display = "";
	   }
    } else {
      var node = getElementByClassName(folder, treePlusClass);
      if (node) {
        if (folder.getAttribute("position") != "last") {
          node.src = tree_line.src;
        } else {
          node.src = tree_line_last.src;
        }
      }
    }
    treeDocument.close();
    document.close();
  }
}

function getCurrentTreeHTML()
{
  var treeDocument = null;
  if (self.frames.length > 0)
  {
    treeDocument = self.frames[treeFrame.getAttribute("name")].document;
  }
  else {
    treeDocument = self.frames.document;
  }

  if (treeDocument != null)
  {
    var obj = treeDocument.getElementById("body");
	if (treeTableClass==null || treeTableClass=="") {
		// если класс, по которому ищем необходимый тег в ифраме, не задан то пытаемся взять первую таблицу, если ее нет выходим без алерта.
		var tbl=obj.getElementsByTagName("table")[0];
		if (tbl==null) return;
		var navigator = tbl;
	}
	else {
		var navigator = getElementByClassName(obj, treeTableClass);
	}
    if (navigator == null)
    {
      alert("Error while getting folders.");
      return;
    }

	if (container!=null) {
		container.innerHTML = obj.innerHTML;
	}
	if (childs!=null) {
	    childs.style.display = "";
	}
    treeDocument.close();
    document.close();
  }
}

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 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 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 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 getFirstChildTag(obj) {
  if (!obj) {
    return null;
  }
  for (var i = 0; i < obj.childNodes.length; i++) {
    var tmpNode = obj.childNodes[i];
    if (tmpNode != null && tmpNode.tagName) {
      return tmpNode;
    }
  }
  return null;
}

function updateCurrentTree(frameLink, objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName) {
    if (!frameLink)
        frameLink = "self";
    uFun = new Function("var el = " + frameLink + ".document.getElementById('" + objId + "');" +
                        "if(!el)return;" +
                        frameLink + ".refreshSubTree(el, '" +
                        navigatorTableClass + "', '" +
                        folderClassName + "', '" +
                        className + "', '" +
                        childsClassName + "', '" +
                        containerClassName + "');");
    uFun();
}

function updateParentTree(frameLink,objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName){
  	if(!frameLink)
		frameLink = "self";
	uFun = new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
		"if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
		"if(!el)return; el = getParentByClassName(el,'" + childsClassName + "');" +
		"if(!el)return; el = getPrevSiblingByClassName(el,'" + folderClassName + "');" +
		"if(!el)return; el = getFirstChildTag(el);" +
		frameLink + ".refreshSubTree(el, '" +
		navigatorTableClass + "', '" +
		folderClassName + "', '" +
		className +"', '" +
		childsClassName + "', '" +
		containerClassName + "'); }");
        uFun();
}

function addUpdateParentTree(win,frameLink,objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName,destWin){
	if(!frameLink)
		frameLink = "self";
	if(!destWin)
		destWin = self;
	destWin.addUpdateFrameFunction(win,new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
		"if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
		"if(!el)return; el = getParentByClassName(el,'" + childsClassName + "');" +
		"if(!el)return; el = getPrevSiblingByClassName(el,'" + folderClassName + "');" +
		"if(!el)return; el = getFirstChildTag(el);" +
		frameLink + ".refreshSubTree(el, '" +
		navigatorTableClass + "', '" +
		folderClassName + "', '" +
		className +"', '" +
		childsClassName + "', '" +
		containerClassName + "')}"));
}

function addUpdateTree(win,frameLink,objId, navigatorTableClass, folderClassName, className, childsClassName, containerClassName,destWin){
	if(!frameLink)
		frameLink = "self";
	if(!destWin)
		destWin = self;
	destWin.addUpdateFrameFunction(win,new Function("var els = " + frameLink + ".document.getElementsByName('" + objId + "');" +
		"if(!els)return;for(var i=0; i < els.length; i++){ var el = els[i];" +
		frameLink + ".refreshSubTree(el, '" +
		navigatorTableClass + "', '" +
		folderClassName + "', '" +
		className +"', '" +
		childsClassName + "', '" +
		containerClassName + "')}"));
}

function treeTitleClick(e, sm, navigatorTableClass, folderClassName, childsClassName, containerClassName, objectName, href, target,tag,skipTitleChange) {
//function treeTitleClick(e, sm, folderClassName, objectName, href, target){
    /*event,'null','folder','selId(0)','admin/list.htm?id=10125863@SXFolder&amp;fid=0&amp;_inherit=false&amp;_dynnav=true&amp;link=10125863@SXFolder&amp;blk=10174315', 'list'*/
	/* select temporary element */
	var haveEvent=false;
	if (typeof(e)=="undefined" || e==null) {
		if (tag==null) return;
		var obj=tag;
	}
	else {
		e = window.event ? window.event : e;
		if(!e) return;
		haveEvent=true;
		var obj = isIE ? e.srcElement : e.target;
	}
	if (obj==null || !obj.tagName) return;
	var folder = getParentByClassName(obj, folderClassName);
//	alert(folderClassName+"\n"+href);
	var enableMultiChoose=(folder.getAttribute("enableMultiChoose")!=null)?true: false;
	var folderPath= "";
	var prevFolder = getPrevSiblingByClassName(getParentByClassName(getParentByClassName(folder, navigatorTableClass),childsClassName), folderClassName);
	if (!prevFolder) {
		getPrevSiblingByClassName(getParentByClassName(getNextSiblingByClassName(folder, childsClassName),childsClassName), folderClassName);
	}

	while (prevFolder) {
		if (prevFolder.getAttribute("enableMultiChoose")!=null) enableMultiChoose=true;
		folderPath = prevFolder.getAttribute("id") + "," +  folderPath ;
		var tempFolder = getPrevSiblingByClassName(getParentByClassName(getParentByClassName(prevFolder, navigatorTableClass),childsClassName), folderClassName);
		if (!tempFolder) {
			tempFolder = getPrevSiblingByClassName(getParentByClassName(prevFolder,childsClassName), folderClassName);
		}
		prevFolder = tempFolder;
	}


	if (self.selectFromDifferentBranches && (sm=="mo" || sm=="m")) {} // this flag sets in pubNavigator template
	else {
		var pframe=(self.parent && self.parent.frames["param"]) ? self.parent.frames["param"] :null;
		var madFolder=(href.indexOf("SXFolderAttrSearch")!=-1)?true:false;
		if (madFolder && enableMultiChoose) {
			var foldID= href.substring(href.indexOf("id")+3,href.indexOf("@",href.indexOf("id")));
			if (pframe!=null) {
				var curMadFolder=pframe.document.getElementById("currentMadFolder");
				if (curMadFolder) {
					if (curMadFolder.value!=foldID){
						prepareSelect(obj, FOLDER_MODE, objectName);
						if (pframe!=null) pframe.document.body.innerHTML="<input type='"+curMadFolder.type+"' name='"+curMadFolder.getAttribute("id")+"' id='"+curMadFolder.getAttribute("id")+"' value='"+foldID+"'>";
					}
				}
				else {
					pframe.document.body.innerHTML="<input type='hidden' name='currentMadFolder' id='currentMadFolder' value='"+foldID+"'>";
				}
			}
		}
		else {
			if (!saveListOfChoosenObj) { // чистим все
				prepareSelect(obj, FOLDER_MODE, objectName);
				if (pframe!=null) pframe.document.body.innerHTML="";
			}
			else { // чистим только selectAllSeleted
					if (pframe!=null && pframe.document.forms["saveSelectedObj"] !=null){
						pframe.document.forms["saveSelectedObj"].elements["selectAllSelected"].value=false;
						pframe.document.forms["saveSelectedObj"].elements["selectAllSelected"].setAttribute("dropIt",true);
					}
			}
		}
		setSelectMode(FOLDER_MODE);
	}
	var title = trim(obj.innerHTML);
	if(folder) {
		if(self.selectedObj){
			self.selectedObj.className = "black";
		}
		if(self.selectedObj != obj){
			obj.className = "selected";

			var id = folder.getAttribute("id");

			if(sm == ''){
				self.selectedIdArray = new Array(id);
				self.selectedTitleArray = new Array(title);
			}

			self.selectedObj = obj;
		} else {
			if(sm == ''){
				self.selectedIdArray = null;
				self.selectedTitleArray = null;
			}

			self.selectedObj = null;
		}
	}

  href = href + "&folderPath=" + folderPath;

	if (haveEvent) {
		if(!e.ctrlKey){
			/* load object list */
			if(!skipTitleChange) addToTitle(title);
			url(href,target);
		} else {
	//		setButtonState();
			}
	}
	else {
		if(!skipTitleChange) addToTitle(title);
		url(href,target);
	}

    removeSelection();
}


function addToTitle(title){
	var 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 trim(s){
   return s != null ? s.replace(/(^\s*)|(\s*$)/,"") : s;
}

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 (typeof(target)=="object"){
        targetFrame= target;
    }
    else {
        if(!target || target == "_blank"){
            return doOpenWindow(newUrl);
        }
        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 getFalse(e) {
  e = window.event ? window.event : e;
  if(!e) return false;
  e.cancelBubble = true;
  if (e.stopPropagation) {
    e.stopPropagation();
  }
  return false;
}

// Управление выбором папки или объекта
//-------------------------------------------------------

function setSelectMode(newMode) {
  selectMode = newMode;
}

function getSelectMode() {
  return selectMode;
}

function selFolder(obj, idField, titleField) {
  if (getSelectMode() != FOLDER_MODE) setSelectMode(FOLDER_MODE);
  prepareSelect(obj, FOLDER_MODE);
  setSelectMode(FOLDER_MODE);
  selId(obj, idField, titleField);
}

function prepareSelect(obj, mode, objectName) {
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    var tmpWin;
    for (i = 0; i < self.parent.frames.length; i++) {
      tmpWin = self.parent.frames[i];
      if (tmpWin.getSelectMode && tmpWin.getSelectMode() != mode) {
        /* clear checkers and select in folder element*/
        clearSelected(obj, tmpWin, objectName);
      }
    }
  } else {
    /* clear checkers and select in folder element*/
    if (getSelectMode && getSelectMode() != mode)
      clearSelected(obj, self, objectName);
  }
}

function clearSelected(obj, tmpWin, objectName) {
  if (!objectName)objectName = obj.name;
  /* clear array*/
  tmpWin.selectedIdArray = null;
  tmpWin.selectedTitleArray = null;
  var objects = tmpWin.document.getElementsByName(objectName);
  if (objects.length != 0) {
    /* clear checkers and select in folder element*/
    if (objects[0].type == "checkbox" || objects[0].type == "radio") {
      for (var i = 0; i < objects.length; i++)
        objects[i].checked = false;
    } else {
      alert("Ошибка в шаблоне или в object.js !");
    }
  }
  /* clear folder select */
  if (tmpWin.selectedObj) {
    tmpWin.selectedObj.className = "black";
    tmpWin.selectedObj = null;
  }
  tmpWin.setSelectMode(OBJECT_MODE);
}

function selId(obj, idField, titleField) {
  if (!idField)idField = "value";
  if (!titleField)titleField = "title";
  selectedIdArray = new Array();
  selectedTitleArray = new Array();
  var objects = document.getElementsByName(obj.name);
  if (objects.length == 0)return;
  if (objects[0].type == "checkbox") {
    for (var i = 0; i < objects.length; i++) {
      if (objects[i].checked) {
        selectedIdArray.push(objects[i][idField]);
        selectedTitleArray.push(objects[i][titleField]);
      }
    }
  } else if (objects[0].type == "radio") {
    selectedIdArray.push(obj[idField]);
    selectedTitleArray.push(obj[titleField]);
  } else {
    selectedIdArray.push(obj[idField]);
    selectedTitleArray.push(obj[titleField]);
  }
  //obj.blur();
  // if (self.setButtonState) self.setButtonState();
}

function getSelObjects() {
  ret = new Array();
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    var tmpWin;
    ret[0] = new Array();
    ret[1] = new Array();
    for (i = 0; i < self.parent.frames.length; i++) {
      tmpWin = self.parent.frames[i];
      if (tmpWin.selectedIdArray && tmpWin.selectedTitleArray) {
        ret[0] = ret[0].concat(tmpWin.selectedIdArray);
        ret[1] = ret[1].concat(tmpWin.selectedTitleArray);
      }
    }
  } else {
    ret[0] = selectedIdArray;
    ret[1] = selectedTitleArray;
  }
  return ret;
}

function selectObj(win, isClose, canDouble) {
  if (isClose == null)isClose = true;
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    ret = getSelObjects();
    //			win.alert("self.parent :  "+ret[0]+"   "+ret[1]);
    var result = (self.parent.opener && !self.parent.opener.closed && self.parent.opener.setLinkObj != null) ?  ((canDouble != null) ? self.parent.opener.setLinkObj(ret, self.parent, canDouble) : self.parent.opener.setLinkObj(ret, self.parent)) : false;
    if (isClose && result)self.parent.close();
    return result;
  } else {
    ret = getSelObjects();
    //			win.alert("itself : "+ret[0]+"   "+ret[1]);
    try {
      var result = (window.opener && !window.opener.closed && window.opener.setLinkObj != null) ? ((canDouble != null) ? window.opener.setLinkObj(ret, win, canDouble) :window.opener.setLinkObj(ret, win)) : false;
      if (isClose && result)window.close();
    } catch(e) {
    }
    return result;
  }
}

/*-----------------------------------------------modal window functions---------------------------------------*/

function addShadow(frame) {
  if (frame == null) frame = self;
  var b = frame.document.getElementsByTagName('body')[0];
  if (frame.document.getElementById("overlay") == null) {
    var overlay = frame.document.createElement('iframe');
    overlay.setAttribute("scrolling", "no");
    overlay.setAttribute("id", "overlay");
    overlay.style.overflow = "hidden";
    b.appendChild(overlay);
  }
}

function showShadowForAll() {
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    var tmpWin;
    for (var x = 0; x < self.parent.frames.length; x++) {
      tmpWin = self.parent.frames[x];
      addShadow(tmpWin);
      showShadow(tmpWin);
    }
  }
  else {
    addShadow();
    showShadow();
  }
}

function hideShadowForAll() {
  if (self.parent && self.parent != self && self.parent.frames && self.parent.frames.length > 0) {
    var tmpWin;
    for (h = 0; h < self.parent.frames.length; h++) {
      tmpWin = self.parent.frames[h];
      hideShadow(tmpWin);
    }
  }
  else {
    hideShadow();
  }
}

function showShadow(frame) {
  if (frame == null) frame = self;
  var s = frame.document.getElementById("overlay");
  if (s == null) return;
  var winWidth = isIE?frame.document.body.clientWidth:frame.outerWidth;
  var winHeight = isIE?frame.document.body.clientHeight:frame.innerHeight;
  var contentWidth = frame.document.body.scrollWidth;
  var contentHeight = frame.document.body.scrollHeight;

  s.style.width = (contentWidth > winWidth)? contentWidth: winWidth;
  s.style.height = (contentHeight > winHeight)? contentHeight: winHeight;
  s.style.display = "block";

  if (s.addEventListener) {
    s.addEventListener("focus", setFocusToModal, false);
    s.addEventListener("scroll", setFocusToModal, false);
  }
  else if (s.attachEvent) {
    s.attachEvent("onfocus", setFocusToModal);
    s.attachEvent("onscroll", setFocusToModal);
  }
}

function hideShadow(frame) {
  if (frame == null) frame = self;
  var s = frame.document.getElementById("overlay");
  if (s == null) return;
  s.style.display = "none";
  currentModalWin = null;
  if (s.removeEventListener) {
    s.removeEventListener("focus", setFocusToModal, false);
    s.removeEventListener("scroll", setFocusToModal, false);
  }
  else if (s.detachEvent) {
    s.detachEvent("onfocus", setFocusToModal);
    s.detachEvent("onscroll", setFocusToModal);
  }
}

function setFocusToModal() {
  if (currentModalWin == null) return;
  currentModalWin.focus();
}

function 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 doOpenWindow(urlToOpen) {
  var oWin = null;
  if (useModalWindows) {
    if (currentModalWin != null) {
      oWin = currentModalWin;
      oWin.location.replace(newUrl);
    }
    else {
      oWin = window.open(urlToOpen, "_blank", "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
      currentModalWin = oWin;
    }
    showShadowForAll();
    oWin.focus();
    handleModalLoad();
  }
  else  {
		var idStr="_blank";
		if (urlToOpen.indexOf("edit") != -1) {
		  var specialSymbols = new Array ("/","@",".",",","$","&","!","?",":","*","#","+",";","_","=","-","%");
		  var temp=urlToOpen.match("id=([^&]*)");
		  if (temp!=null && temp.length>=2) {
		  	  var path=baseUrl;
			  idStr=path+temp[1];
			  for (var i=0; i<specialSymbols.length;i++ ) {
				  idStr=replaceSubstring(idStr,specialSymbols[i]);
			  }
		  }
		}  
		oWin = window.open(urlToOpen, idStr, "height=" + getPopupWinHeight() + ",width=" + getPopupWinWidth() + ",status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,resizable=yes,channelmode=no");
		oWin.focus();
  }
  return oWin;
}

function handleModalLoad() {
  var mw = currentModalWin;
  if (mw.closed) {
    hideShadowForAll();
    return;
  }
  var mwbody = null;
  try {
    mwbody = mw.document.body;
  } catch(e) {
  }
  if (mwbody == null || mwbody.innerHTML == "") setTimeout("handleModalLoad()", 1000);
}

function doThisBeforeClose() {
  var psq = function(e) {
    var ev = window.event ? window.event : e;
    saveQuery(document.getElementById('modified').form, 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);
}

