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

