// ######################################################################## //
// ######################################################################## //
// ### SysJsLib.js ######################################################## //
// ######################################################################## //
// ######################################################################## //

// ######################################################################## //
// ### globals ############################################################ //
// ######################################################################## //

var isError=false;
var inputId=0;

// *** Drag & Drop *** //
var enterSubmit=true;
var enterKey=13; // enter
var moveKey=16;  // shift
var widthKey=17; // ctrl
var ddObj=false; // Drag & Drop
var wwObj=false; // width input
var ddId=0;
var ddClass=false;
var ddMethod=false;
var ddPhpObjName=false;
document.onkeydown=ddOkd; // call
document.onkeyup  =ddOku; // call

var xMouseBuf=0;
var yMouseBuf=0;
var xObjBuf=0;
var yObjBuf=0;
var changePos=false;
var changeWidth=false;
var widthDown=false;
var deleteWarningSet=false;
var sidName=false;

// ######################################################################## //
// ### forms ############################################################## //
// ######################################################################## //

// ************************************************************************ // 
// *** setDivTxt ********************************************************** // 
// ************************************************************************ // 
function setDivTxt(divName,cName,mName,rowId) { 
	var oSid=document.getElementById(sidName);
	var	oDiv=document.getElementById(divName);
    var sid=(oSid) ? oSid.value : '';
    var httpStr=mainFile+'?'+sidName+'='+sid
    					+'&c='+cName
                        +'&m='+mName
                        +'&r='+rowId;
    httpStr=encodeURI(httpStr);
    var reqObj=getReqObj(); 
    if (reqObj) {
        var asynchron=false;
        reqObj.open('GET', httpStr, asynchron);
        reqObj.send(null);
        oDiv.innerHTML=reqObj.responseText;
    }
}

// ************************************************************************ // 
// *** getLookup ********************************************************** // 
// ************************************************************************ // 
function getLookup(pc,pm,mid,mcid,scid,ilist,bgColor) { 
	var o=document.getElementById(sidName);
    var sid=(o) ? o.value : '';
    var oInput=document.getElementById(mid);
    var val=oInput.value;
    var tdId=mid + '_td';
    var tdObj=document.getElementById(tdId);
    var httpStr=mainFile+'?c='    +pc+
                         '&m='    +pm+
                         '&'+sidName+'='+sid+
                         '&val='  +val+
                         '&mid='  +mid+
                         '&mcid=' +mcid+
                         '&scid=' +scid+
                         '&ilist='+ilist;
    httpStr=encodeURI(httpStr);
    var reqObj=getReqObj(); 
    if (reqObj) {
        var asynchron=false;
        reqObj.open('GET', httpStr, asynchron);
        reqObj.send(null);
        var anwser=reqObj.responseText;
        var aExpl =anwser.split(ajaxSepChar);
        tdObj.innerHTML=aExpl[0];
        var newId=aExpl[1];
        oInput.value=newId;
        var msg=aExpl[2];
        if (msg.length) {
            oInput.style.backgroundColor=bgColor;
        }
        else {
            oInput.style.backgroundColor='';
        }
        setMsg(msg);
    }
}

// ************************************************************************ // 
// *** ddOkd ************************************************************** // 
// ************************************************************************ // 
function ddOkd(evt) { // onkeydown
    if (!evt) {evt=window.event;} // MSIE

    if (evt.keyCode==enterKey && !enterSubmit) { // enter
        return false;
    }

    if (ddObj || wwObj) {

        if (evt.keyCode==moveKey || evt.keyCode==evt.shiftKey) { // shiftKey MSIE
            widthDown=true;
        }


        if (ddObj && !widthDown) {
            var changePos=false;
            var x=parseInt(ddObj.style.left.substr(0,ddObj.style.left.length-2)); // -2: px
            var y=parseInt(ddObj.style.top.substr(0,ddObj.style.top.length-2)); // -2: px
            switch (evt.keyCode) {
                case 27: ddOnFocus(true,false); break; // escape
                case 37: x-=1; changePos=true; break; 
                case 39: x+=1; changePos=true; break; 
                case 38: y-=1; changePos=true; break; // up
                case 40: y+=1; changePos=true; break; // down
            }
            if (changePos) {
                ddObj.style.left=x+"px";
                ddObj.style.top=y+"px";
            }
        }


        else {
            if (wwObj && widthDown ) {
                var w=parseInt(wwObj.style.width.substr(0,wwObj.style.width.length-2)); // -2: px
                var h=false;
                if (wwObj.style.height) {
                    var h=parseInt(wwObj.style.height.substr(0,wwObj.style.height.length-2)); // -2: px
                }
                switch (evt.keyCode) {
                    case 27: ddOnFocus(true,false); break; // escape
                    case 37: w-=1; wwObj.style.width=w+"px"; break; // left
                    case 39: w+=1; wwObj.style.width=w+"px"; break; // right
                    case 38: if (h) {h-=1; wwObj.style.height=h+"px";} break; // up
                    case 40: if (h) {h+=1; wwObj.style.height=h+"px";} break; // down
                }
            }
        }
    }
    return true;
}

// ************************************************************************ // 
// *** ddOku ************************************************************** // 
// ************************************************************************ // 
function ddOku(evt) { // onkeyup
    if (ddObj || wwObj) {
        if (!evt) {evt=window.event;} // MSIE
        if (evt.keyCode==moveKey || evt.keyCode==evt.shiftKey) { // shiftKey MSIE
            widthDown=false;
        }
        switch (evt.keyCode) {
            case 37:
            case 39:
            case 38:
            case 40:
                var w='';
                var h='';
                var sid=document.getElementById(sidName).value;
                if (wwObj) {
                    w=parseInt(wwObj.style.width.substr(0,wwObj.style.width.length-2)); // -2: px
                    if (wwObj.style.height) {
                        h=parseInt(wwObj.style.height.substr(0,wwObj.style.height.length-2)); // -2: px
                    }
                }
                var x=parseInt(ddObj.style.left.substr(0,ddObj.style.left.length-2)); // -2: px
                var y=parseInt(ddObj.style.top.substr(0,ddObj.style.top.length-2)); // -2: px
                var httpStr=mainFile+'?c='+ddClass+'&m='+ddMethod+'&'+sidName+'='+sid+
                                     '&x='+x+'&y='+y+'&w='+w+'&h='+h+
                                     '&id='+ddId+'&o='+ddPhpObjName;
                var asynchron=false;
                var rc=getAjax(asynchron,httpStr);
                break;
        }
    }
}

// ************************************************************************ // 
// *** ddOmo ************************************************************** // 
// ************************************************************************ // 
function ddOmo(evt,obj,ddCl,ddMe,itemId,phpObjName) { // onmouseover
    if (!evt) {evt=window.event;} // MSIE
    if (ddObj) {
        ddOnFocus(true,false);
    }
    ddClass=ddCl;
    ddMethod=ddMe;
    ddId=itemId;
    ddPhpObjName=phpObjName;

    ddObj=obj;
    var aInput   =ddObj.getElementsByTagName("input");
    var aSelect  =ddObj.getElementsByTagName("select");
    var aTextarea=ddObj.getElementsByTagName("textarea");
    if (aInput[0]) {
        wwObj=aInput[0];
    }
    else if (aSelect[0]) {
      wwObj=aSelect[0];
    }
    else if (aTextarea[0]) {
      wwObj=aTextarea[0];
    }
    xMouseBuf=evt.clientX;
    yMouseBuf=evt.clientY;
    var yObjStr=ddObj.style.top;
    var xObjStr=ddObj.style.left;
    xObjBuf=xObjStr.substr(0,xObjStr.length-2); // -2: px
    yObjBuf=yObjStr.substr(0,yObjStr.length-2); // -2: px
}

// ************************************************************************ // 
// *** ddOnFocus ********************************************************** // 
// ************************************************************************ // 
function ddOnFocus(isLayoutMode,argClassId) { // ajax

    // *** drag && drop *** //
    if (isLayoutMode) {
        if (changePos || changeWidth) {
            // ddSendDdXyWidth();
        }
        ddObj=false;
        wwObj=false;
        changePos=false;
        changeWidth=false;
    }

    // *** set value of hidden submit button implicitly clicked by CR *** //
    var aBuf= new Array();

    if (argClassId>0) {
        var oHiddenBut=document.getElementById('hidden_submit_but');
        if (oHiddenBut) {
			var butBack='';
			var butInsUp='';
            var aAllBut=document.getElementById(ctWorkspace).getElementsByTagName('button');
            var oBut=false;
            for (var ix=0;ix<aAllBut.length;ix++) {
                var oBut=aAllBut[ix];
                if(oBut.name==formButName) {
                    var butVal=oBut.value
                    var aExpl=butVal.split('-');
                    var thisClassId=aExpl[0];
                    var toDo=aExpl[aExpl.length-1];
					if (thisClassId==argClassId && oBut.id!='hidden_submit_but') {
						switch (toDo) {
							case 'b': // back
								butBack=butVal;
								break;
							case 'i': // insert
							case 'u': // update
								butBack=butVal; 
								break;
						}
					}
                }
            }
            if (butInsUp.length) {
				oHiddenBut.value=butInsUp;
			}
			else if (butBack.length) {
				oHiddenBut.value=butBack;
			}
        }
    }

	/*
	aBuf.push(aAllBut.length);
	aBuf.push(oBut.value);
	str=aBuf.join(' # '); // implode
	devMsg(str);
	*/

}

// ######################################################################## //
// ### prototyping ######################################################## //
// ######################################################################## //

// ************************************************************************ //
// *** trim *************************************************************** //
// ************************************************************************ //
String.prototype.trim = function (str) {
    // *** erst führende und dann abschließende Whitespaces entfernen *** //
    return this.replace (/^\s+/, '').replace (/\s+$/, '');
}

// ************************************************************************ //
// *** inArray ************************************************************ //
// ************************************************************************ //
Array.prototype.inArray = function (elem) {
    for (var i=0;i<this.length;++i) {
        if (this[i]==elem) {
            return true;
        }
    }
    return false;
}

// ######################################################################## //
// ### lib ################################################################ //
// ######################################################################## //

// ************************************************************************ //
// *** getArgsToArr  ****************************************************** //
// ************************************************************************ //
function getArgsToArr(args) {

    var aArgs= new Array();
    var buf='';
    for (var ix=0;ix<args.length;ix++) {
        aArgs.push(args[ix]);
    }
    return aArgs;
}

// ************************************************************************ //
// *** getReqObj ********************************************************** //
// ************************************************************************ //
function getReqObj() {
    var reqObj=false;
    if(window.XMLHttpRequest){
       reqObj=new XMLHttpRequest();
    } else if(window.ActiveXObject){
       try{
          reqObj=new ActiveXObject("Msxml2.XMLHTTP");
       }catch(ex){
          try{
             reqObj=new ActiveXObject("Microsoft.XMLHTTP");
          }catch(ex){
          }
       }
    } 
    return reqObj;
}

// ************************************************************************ //
// *** getAjax ************************************************************ //
// ************************************************************************ //
function getAjax() {

    setMsg();

    // *** HTTP-Request-Objekt anlegen *** //
    var asynchron=arguments[0]
    var httpStr=arguments[1]

    httpStr=encodeURI(httpStr);
    var reqObj=getReqObj(); 
    if (reqObj) {
        //asynchron=false
        reqObj.open('GET', httpStr, asynchron);
        reqObj.send(null);

        // *** asynchron *** //
        if (asynchron) {
            reqObj.onreadystatechange=function() {
                if (reqObj.readyState==4 && arguments[2]) { // 0=Uninitialized 1=Open 2=Sent 3=Receiving 4=Loaded  
                    obj=arguments[2]
                    obj.innerHTML=reqObj.responseText;
                }
            }
        }

        // *** synchron, hier Rückgabe mit RETURN möglich *** //
        else {
            var anwser=reqObj.responseText;
            return anwser 
        }
    }
    return '';
}

// ************************************************************************ //
// *** getHttpStr ********************************************************* //
// ************************************************************************ //
function getHttpStr() {
    var ix=0;
    var args=arguments[0];
    var id      =args[ix++];    // 0
    var servFct =args[ix++];    // 1
    var servArg =args[ix++];    // 2
    var family  =args[ix++];    // 3
    var sepChar =args[ix++];    // 4
    var vThis   =args[ix++];    // 5
    var vEvt    =args[ix++];    // 6
    var argPlus1=(args[ix++]) ? args[ix-1] : ''; // 7
    var argPlus2=(args[ix++]) ? args[ix-1] : ''; // 8

	var o=document.getElementById(sidName);
    var sid=(o) ? o.value : '';
    var pFile=mainFile;

    var httpStr=
        pFile+'?'
        + 'c='         + servFct
        + '&m='        + servArg
        + '&'+ sidName+'=' + sid
        + '&id='       + id
        + '&family='   + family
        + '&argplus1=' + argPlus1
        + '&argplus2=' + argPlus2;
    return httpStr;
}

// ######################################################################## //
// ### DOM ################################################################ //
// ######################################################################## //

// ************************************************************************ //
// *** setBgImg *********************************************************** //
// ************************************************************************ //
function setBgImg(obj,img) {
    if (img.length) {
        obj.style.backgroundImage=img;
    }
    else {
        obj.style.backgroundImage='';
    }
}

// ************************************************************************ //
// *** completeHref ******************************************************* //
// ************************************************************************ //
function completeHref(obj,formId) {
    var addStr='';
    var oForm=document.getElementById(formId);
    var aAllObj=getAllChilds(oForm);
    for(var ix=0;ix<aAllObj.length;ix++) {
        var thisName=aAllObj[ix].nodeName.toUpperCase();
        if (thisName=='INPUT' && aAllObj[ix].id!=sidName) {
            addStr+='&' + aAllObj[ix].id + '=' + aAllObj[ix].value;
        }
    }
    if (addStr.length) {
        addStr=encodeURI(addStr);
        obj.href+=addStr;
    }
    //document.location.href=hrefStr;

    return ;
}

// ************************************************************************ //
// *** getAllChilds ******************************************************* //
// ************************************************************************ //
function getAllChilds(o) {
    //var aObj=new Array();
    var sib;
    var aRc =new Array();
    var aBuf=new Array();
    if (o.hasChildNodes()) {
        sib=o.firstChild;
        while (sib) {
            if (sib.nodeType==1 && sib.id) {
                aRc.push(sib);
            }
            if (sib.hasChildNodes()) {
                aBuf=getAllChilds(sib);
                if (aBuf.length) {
                    aRc=aRc.concat(aBuf);
                }
            }
            sib=sib.nextSibling;
        }
    }
    return aRc;
}

// ######################################################################## //
// ### output ############################################################# //
// ######################################################################## //

// ************************************************************************ //
// *** setMsg ************************************************************* //
// ************************************************************************ //
function setMsg() {

    var msgDiv=document.getElementById(ctMessages);
    var txt='';
    if (arguments.length) {
        //msgDiv.style.top='12px';
        txt=arguments[0];
    }
    msgDiv.innerHTML=txt;

}

// ************************************************************************ //
// *** devMsg ************************************************************* //
// ************************************************************************ //
function devMsg(msg) {
	o=document.getElementById(ctHidden);
	o.innerHTML='<div style="font-weight:bold;font-seize:15px;background-color:red">&nbsp;' + msg  + '&nbsp;</div>';
	o.style.visibility='visible';
}

// ************************************************************************ //
// *** getMiniWorkspace *************************************************** //
// ************************************************************************ //
function getMiniWorkspace() {
    
    // *** SHOW *** //
    if (arguments.length) {
        var aArgs   =getArgsToArr(arguments);
        var evt     =aArgs[6];
        var o       =aArgs[5];
        var strId   =o.id;
        var aExpl   =strId.split('_');
        var id      =aExpl[aExpl.length-1]
        aArgs[0]    =id;
        //var wsObj   =document.getElementById(ctWorkspace);
        var obj     =document.getElementById(ctHidden);
        var divParentObj=obj.parentNode;
        var xPlus   =15;
        var yPlus   =15;
        var myX     =evt.clientX - (divParentObj.offsetLeft - divParentObj.scrollLeft + xPlus);
        var myY     =evt.clientY - (divParentObj.offsetTop  - divParentObj.scrollTop  + yPlus);
        obj.style.left=myX + 'px';
        obj.style.top =myY + 'px';
        var httpStr     =getHttpStr(aArgs);
        // *** ajax && content *** //
        var asynchron=false;
        obj.innerHTML=getAjax(asynchron,httpStr);
        obj.style.visibility='visible';
    }

    // *** HIDE *** //
    else {
        setMsg();
        deleteWarningSet=false;
        obj=document.getElementById(ctHidden);
        obj.style.visibility='hidden';
    }
}

// ************************************************************************ //
// *** checkVal *********************************************************** //
// ************************************************************************ //
function checkVal() {

    if (isError) {
        isError=false;
        return true;
    }

    setMsg();


    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));
    var evt     =aArgs[6];
    var o       =aArgs[5];
    var strId   =o.id;
    
    aExpl=o.id.split('_');
    aArgs[8]=aExpl[1];
    if (o.nodeName.toUpperCase()=='INPUT')  {
        aArgs[7]=o.value;
    }
    else if (o.nodeName.toUpperCase()=='SELECT') {
        var aVal=new Array();
        var len=o.childNodes.length;
        for (var ix=0;ix<len;ix++) {
            var child=o.childNodes[ix];
            if (child.selected) {
                aVal.push(child.value);
            }
        }
        aArgs[7]=aVal.join(',');
    }
    var httpStr=getHttpStr(aArgs);
    var asynchron=false;
    var rc=getAjax(asynchron,httpStr);

    if (rc.length) {
        var aRc=rc.split(sepChar);
        for (var ix=0;ix<aRc.length;ix++) {
            var aArr=aRc[ix].split('=');
            var key=aArr[0];
            var val=aArr[1];
            // *** error *** //
            if (key=='setMsg') {
                    var msg=val;
                    o.style.backgroundColor='rgb(150,255,150)';
                    setMsg(msg);
                    window.setTimeout('o.focus();',20);
                    isError=true;
            }
            // *** Neubelegung *** //
            else {
                aArr.shift();
                var val=aArr.join('=');
                child=document.getElementById(key);
                oParent=child.parentNode;
                oParent.removeChild(child);
                oParent.innerHTML=val;
            }
        }

    }

    // *** kein Fehler *** //
    if (!isError) {
        o.style.backgroundColor='white';
    }
    return '';
}

// ************************************************************************ //
// *** checkInput ********************************************************* //
// ************************************************************************ //
function checkInput() {

    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var evt     =(aArgs[6]) ? aArgs[6] : window.event; // MSIE

    // *** submit *** //
    if(evt.keyCode==13) { // CR
        checkLine(aArgs[0],aArgs[1],aArgs[2],aArgs[3],aArgs[4],aArgs[5],aArgs[6]);
    }

    // *** set label value *** //
    else if(evt.keyCode==45) { // Ins/Einfg
        var oIdent=aArgs[5];
        var oName =document.getElementById('attr_name_'+id);
        var aExpl=oIdent.id.split('_');
        if (aExpl[1]=='label' && !oIdent.value.length && oName) {
            var val=oName.value;
            oIdent.value=val.substr(0,1).toUpperCase() + val.substr(1);
        }
    }
    return true;
}

// ************************************************************************ //
// *** checkLine ********************************************************** //
// ************************************************************************ //
function checkLine() {

    getMiniWorkspace();

    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));

    // *** line table *** //
    var tabId   ='tab_' + id;
    var oTab=document.getElementById(tabId);

    var sendStr='';
    var aAllObj=getAllChilds(oTab);
    for(var ix=0;ix<aAllObj.length;ix++) {
        var o=aAllObj[ix];
        var thisId=o.id;
        var thisVal;
        var aExpl=thisId.split('_');
        if (aExpl.length==3) {
            switch (o.nodeName) {
                case 'SPAN':
                    thisVal=o.innerHTML;
                    break;
                case 'INPUT':
                    o.className=clInput;
                    thisVal=o.value;
                    break;
                case 'SELECT':
                    thisVal=o.value;
                    break;
                default:
                    thisVal=o.nodeName;
            }
            if (sendStr.length) {
                sendStr+=sepChar;
            }
            sendStr+= o.id + '=' + thisVal;
        }

    }
    
    aArgs[7]=sendStr;
    var httpStr=getHttpStr(aArgs);
    var asynchron=false;
    var getStr=getAjax(asynchron,httpStr);
    var aRc=getStr.split(sepChar);
	// *** html line *** //
    if (aRc[0].length) {
        oTab.parentNode.innerHTML=aRc[0];
    }
	// *** error message *** //
    if (aRc[1].length) {
        setMsg(aRc[1]);
		// *** set css error class *** //
	    if (aRc[2].length) {
			aErrId=aRc[2].split('|');
			for (var ix=0;ix<aErrId.length;ix++) {
				o=document.getElementById(aErrId[ix]);
				o.className=clError;
			}
		}
    }
}

// ************************************************************************ //
// *** resetLine ********************************************************** //
// ************************************************************************ //
function resetLine() {
    
    getMiniWorkspace();

    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));

    var httpStr=getHttpStr(aArgs);
    var asynchron=false;
    var iHtml=getAjax(asynchron,httpStr);

    // *** substitute line *** //
    var tabId   ='tab_' + id;
    var oTab=document.getElementById(tabId);

    // *** if not closed with implicit [-]
    if (oTab) {
        oTab.parentNode.innerHTML=iHtml;
        inputId=0;
    }
}

// ************************************************************************ //
// *** editLine *********************************************************** //
// ************************************************************************ //
function editLine() {

    getMiniWorkspace();
    

    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));

    // *** reset - switch a[0] && a[5] *** //
    /*
    if (inputId>0 && inputId!=id) {
        var i=0;
        var a=aArgs;
        //resetLine(inputId,a[1],a[2],a[3],a[4],a[10],a[6],a[7],a[8],a[9],a[10]);
        //resetLine(inputId,a[1],a[2],a[3],a[4],a[10],a[6],a[7],a[8]);
    }
    */

    var httpStr=getHttpStr(aArgs);
    var asynchron=false;
    var iHtml=getAjax(asynchron,httpStr);

    // *** zeile ersetzen *** //
    var tabId   ='tab_' + id;
    var oTab=document.getElementById(tabId);
    var oParent=oTab.parentNode;
    oParent.removeChild(oTab);
    oParent.innerHTML=iHtml;

    // *** erstes INPUT-field suchen und focus setzen *** //
    var aAllObj=getAllChilds(oParent);
    var len=aAllObj.length;
    var aId='';
    for(var ix=0;ix<aAllObj.length;ix++) {
        var o=aAllObj[ix];
        if (o.nodeName.toUpperCase()=='INPUT') {
            aId=o.id.split('_');
            if (aId.length>1 && aId[1]=='name') {
                //o.focus();
                o.select();
                break;
            }
        }
    }

    // *** inputId neu setzen *** //
    inputId=id;
}

// ************************************************************************ //
// *** deleteLine ********************************************************* //
// ************************************************************************ //
function deleteLine() {

    var aArgs=getArgsToArr(arguments);

    if (!deleteWarningSet && aArgs[7].length) {
        var warningMsg=aArgs[7];
        setMsg(warningMsg);
        deleteWarningSet=true;
    }

    else {
        getMiniWorkspace();
        var id      =parseInt(aArgs[0]);
        var sepChar =String.fromCharCode(parseInt(aArgs[4]));


        // *** getAjax *** //
        var httpStr=getHttpStr(aArgs);
        var asynchron=false;
        var rc=getAjax(asynchron,httpStr);
        var aId=rc.split(sepChar);
        var deletedId=0;
		var errMsg=aId[0];

		// *** error *** //
		if (errMsg.length) {
	        setMsg(errMsg);
		}

		// *** delete *** //
		else {

			// *** delete items *** //
			for (var ix=1;ix<aId.length;ix++) {
				deletedId=parseInt(aId[ix]);

				var tabId   ='tab_' + deletedId;
				var oTab=document.getElementById(tabId);
				if (oTab) {

					var td   =oTab.parentNode;
					var tr   =td.parentNode;
					var tbody=tr.parentNode;

					td.removeChild(oTab);
					tr.removeChild(td);
					tbody.removeChild(tr);

					// *** no childs, remove parent +/- graphic *** //
					if(tbody.childNodes.length==0) {
						var p=tbody;
						while (!p.id.length) {
							p=p.parentNode;
						}
						if(p.id.length) {
							var o=p.firstChild.firstChild.firstChild;
							o.innerHTML='&nbsp;';
							o.className=clBlank;
						}
					}

				}
			}
		}
        deleteWarningSet=false;
    }
}

// ************************************************************************ //
// *** getThemeItemData *************************************************** //
// ************************************************************************ //
function getThemeItemData() {
    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));
    var oSelect =aArgs[5];
    var oEvt    =aArgs[6];

	var sName   =oSelect.value;
    aArgs[7]    =sName;

    var httpStr=getHttpStr(aArgs);
    var asynchron=false;
    var aRc=getAjax(asynchron,httpStr);
    var aExpl=aRc.split(sepChar);

    var oValue      =document.getElementById('attr_value_'+id);
    var oComment    =document.getElementById('attr_comment_'+id);
    var oAlternative=document.getElementById('attr_alternative_'+id);
	oValue.parentNode.innerHTML      =aExpl[0];
	oComment.value                   =aExpl[1];
	oAlternative.parentNode.innerHTML=aExpl[2];
}

// ************************************************************************ //
// *** getTypeFormat ****************************************************** //
// ************************************************************************ //
function getTypeFormat() {
    var aArgs   =getArgsToArr(arguments);
    var id      =parseInt(aArgs[0]);
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));
    var oSelect=document.getElementById('attr_type_'+id);
    var type=oSelect.value;
    var len=oSelect.childNodes.length;
    var title='';
    for (var ix=0;ix<len;ix++) {
        var oOption=oSelect.childNodes[ix];
        if (oOption.value==type) {
            oSelect.title=oOption.title;
            break;
        }
    }
    var txtId='attr_format_'+id;
    aArgs[7]=type;
    aArgs[8]='';
    var child=document.getElementById(txtId);
    var o=child.parentNode;
    o.removeChild(child);
    var httpStr=getHttpStr(aArgs,id);
    var asynchron=false;
    var rc=getAjax(asynchron,httpStr);
    o.innerHTML=rc;

}

// ************************************************************************ //
// *** getPlusMinus ******************************************************* //
// ************************************************************************ //
function getPlusMinus() {
    
    getMiniWorkspace();

    var srcPlus =imgSrcPath + 'plus.gif';
    var srcMinus=imgSrcPath + 'minus.gif';
    var imgObj=arguments[5];
    var imgId=imgObj.id;
    var aExpl=imgId.split('_');
    var numId=aExpl[1];
    var tabId='tab_'+numId;

//getPlusMinus('1','SysXtree','ajaxExpand','','94',this,event)

    var oPmTab=document.getElementById(tabId);
    var flag=imgObj.alt;

    // *** Tabelle generieren *** //
    if (flag=='+') {
        var oTr=document.createElement('tr');
        var oTd1=document.createElement('td');
        var oTd2=document.createElement('td');
        oTr.appendChild(oTd1);
        oTr.appendChild(oTd2);
        oPmTab.firstChild.appendChild(oTr);
        var aArgs=getArgsToArr(arguments);
        aArgs[0]=numId; // id
        var httpStr=getHttpStr(aArgs,numId);
        var asynchron=false;
        var rc=getAjax(asynchron,httpStr);
        var sepChar=String.fromCharCode(parseInt(arguments[7]));
        aExpl=rc.split(sepChar);
        oTd2.innerHTML=aExpl[0];
    }

    // *** Tabelle löschen *** //
    else {
        var o=oPmTab.firstChild;
        var o=oPmTab.lastChild;
        o.removeChild(o.lastChild);
    }

    // *** flag umswitchen *** //
    if (flag=='+') {
        imgObj.src=srcMinus;
        imgObj.alt='-';
    }
    else {
        imgObj.src=srcPlus;
        imgObj.alt='+';
    }
    return;
}

// ************************************************************************ //
// *** addNode ************************************************************ //
// ************************************************************************ //
function addNode() {

    getMiniWorkspace();

    var aArgs   =getArgsToArr(arguments);
    var oldId   =parseInt(aArgs[0]);
    var family  =aArgs[3];
    var sepChar =String.fromCharCode(parseInt(aArgs[4]));

    var imgId='img_'+oldId;
    var tabId='tab_'+oldId;
    var oMasterTab=document.getElementById(tabId);
    var imgObj=document.getElementById(imgId);
    var pm=null;
    if (imgObj) {
        switch(imgObj.alt) {
            case '+': pm='p'; break;
            case '-': pm='m'; break;
        }
    }
    aArgs[7]=pm;

    // *** increment node ids *** //
    var o=document.getElementById('tagname_'+oldId);
    var tagName=o.innerHTML;
    var incrementId=1;
    if ( (tagName=='classes' && family=='child') || (tagName=='class' && family=='sibling') ) {
        // *** class: add 2 nodes - class && item *** //
        incrementId=2;
    }
    var newId=0;

    // *** get new node *** //
    var httpStr=getHttpStr(aArgs);
    var asynchron=false;

    var rc=getAjax(asynchron,httpStr);
    var aExpl=rc.split(sepChar);
    var iHtml=aExpl[0];
    var iImg =aExpl[1];
    var iMsg =aExpl[2];

    // *** error ********************************************************** //
    if (iMsg.length) {
        setMsg(iMsg);
    }

    // *** insert new child node ****************************************** //
    if (iHtml) {
        if (family=='child') {

            // *** expanded  TBODY      TR        TD
            if (pm=='m') {
                o=oMasterTab.firstChild.lastChild.lastChild;
                o.innerHTML=iHtml;
            }

            // *** closed || empty *** //
            else {
                // *** input form *** //
                var oTr=document.createElement('tr');
                var oTd1=document.createElement('td');
                var oTd2=document.createElement('td');
                oTr.appendChild(oTd1);
                oTr.appendChild(oTd2);
                oMasterTab.firstChild.appendChild(oTr);
                oTd2.innerHTML=iHtml;
                // *** pmBut TBODY      TR         TD
                o=oMasterTab.firstChild.firstChild.firstChild;
                o.className=clPm;
                o.innerHTML=iImg;
            }
        }

        // *** insert new sibling node ************************************ //
        else if (family=='sibling') {

            // *** get oParent && oOldTbody *** //
            var oParent=oMasterTab;
            do {
                oParent=oParent.parentNode;
                if (oParent.nodeName.toUpperCase()=='TBODY') {
                    var oOldTbody=oParent;
                }

            } while (oParent.parentNode && oParent.nodeName.toUpperCase()!='TABLE');


            // *** create new master table body *** //
            var oNewTbody=document.createElement('tbody');
            var oTable=false;
            var oTr=false;
            var oTd=false;

            // *** get all tables of oParent *** //
            var aAllObj=oParent.getElementsByTagName('table');
            while (aAllObj.length) {

                // *** shifts current table from aAllObj to oTable and decrements aAllObj.length *** //
                oTable=aAllObj[0]; 
                if (oTable.id) {

                    // *** addd old line *** //
                    oTr=document.createElement('tr');
                    oTd=document.createElement('td');
                    oTr.appendChild(oTd);
                    oTd.appendChild(oTable);
                    oNewTbody.appendChild(oTr);

                    // *** addd new line *** //
                    if (oTable.id==tabId) {
                        oTr=document.createElement('tr');
                        oTd=document.createElement('td');
                        oTr.appendChild(oTd);
                        oTd.innerHTML=iHtml;
                        oNewTbody.appendChild(oTr);
                    }
                }
            }

            // *** replace ************************************************ //
           oParent.replaceChild(oNewTbody, oParent.lastChild);
        }

        // *** set focus/select ******************************************* //
        if (true) {
            //var aAllObj=oMasterTab.parentNode.getElementsByTagName('input');
            var aAllObj=document.getElementsByTagName('input');
            for(var ix=0;ix<aAllObj.length;ix++) {
                o=aAllObj[ix];
                if (o.type=='text') {
                    //o.focus();
                    o.select();
                    break;
                }
            }
        }
    }

}

// ************************************************************************ //
// *** reOrgSiblings ****************************************************** //
// ************************************************************************ //
function reOrgSiblings() {
    var id=arguments[0];
    var iHtml=arguments[1];
    var isChild=arguments[2];
    var notInserted=true;
    var tabId='tab_'+id;
    var oAktTab=document.getElementById(tabId);

    // parent table *** //
    oParent=oAktTab.parentNode;
    while (!oParent.id) {
        oParent=oParent.parentNode;
    }

    // *** new tbody *** //
    var oNewTbody=document.createElement('tbody');

    // *** new tr *** //
    var oInsertTr=document.createElement('tr');
    var oInsertTd=document.createElement('td');
    oInsertTr.appendChild(oInsertTd);
    oInsertTd.innerHTML=iHtml;

    // *** old tbody *** //
                //  TBODY     TR        TD        TABLE     TBODY
    var oOldTbody=oParent.lastChild.lastChild.lastChild.lastChild.lastChild;

    // *** copy && delete *** //
    while(oOldTbody.childNodes.length) {
        thisId=oOldTbody.firstChild.lastChild.lastChild.id;
        oTr=oOldTbody.firstChild;
        oNewTbody.appendChild(oTr);
        if (tabId==thisId) {
            oNewTbody.appendChild(oInsertTr);
        }
    }
    // *** replace *** //
    oParent=oOldTbody.parentNode;
    oParent.replaceChild(oNewTbody, oParent.lastChild);
}

