// Copyright (c) 2001-2008 SpinTag Technologies, Klaue & Kundel // Author site at http://www.spintag.de or http://www.spintag.com // this credit must stay intact - do not edit this file ! STVersionInfo={}; STVersionInfo["SpinTag.Framework"] = "$Id: framework.js,v 1.251 2008-04-11 18:11:14 chris Exp $"; function Timer(autoStart) { this.startCount = 0; this.stopCount = 0; this.duration = 0; this.lastDuration = 0; this.children = {}; this.created = new Date().getTime(); if (autoStart) this.start(); } Timer.prototype.alert = function (msg) { this.stop() alert(this.format(msg)); } Timer.prototype.start = function () { this.startCount++; this.started = new Date().getTime(); } Timer.prototype.stop = function () { this.stopCount++; this.stopped = new Date().getTime(); this.lastDuration = this.stopped - this.started; this.duration += this.lastDuration; } Timer.prototype.format = function (f) { f = f.replace(/\%c/, this.stopCount); f = f.replace(/\%d/, this.duration); f = f.replace(/\%i/, this.startCount - this.stopCount); f = f.replace(/\%a/, Math.round(100* this.duration / this.stopCount)/100); return f; } Profiler = { items : {}, stack : [], supressZero : true, dumpWin : "profilerBox", start : function(id) { if(!G_JSCompliant) return; if(!this.items[id]) this.items[id] = new Timer(); this.stack.push(id); this.items[id].start(); }, stop : function(id) { if(!G_JSCompliant) return; if(!this.items[id]) alert(id + " not started yet"); else if(this.stack.pop()!=id) { alert(id + " not on stack. start() missing!"); } else { this.items[id].stop(); if(this.stack.length) { var parent = this.items[this.stack[this.stack.length-1]]; if(!parent.children[id]) parent.children[id] = {c:1,d:this.items[id].lastDuration}; else { parent.children[id].c++; parent.children[id].d += this.items[id].lastDuration; } } } }, formatter : function(ftm) { var profilerEnabled=false; var s=[]; if(ftm=="doc") { s[s.length]=''; } else { s[s.length]=' '; s[s.length]=' '; s[s.length]=' '; } s[s.length]=''; s[s.length]=''; var z=1; for(var i in this.items) { profilerEnabled=true; if(this.supressZero && this.items[i].duration==0) continue; var color=(this.items[i].startCount-this.items[i].stopCount)!=0?"red":"white"; s[s.length] = this.items[i].format( '' +'' +'' +''); var sum=0; for(var n in this.items[i].children) { var c = this.items[i].children[n].c; var d = this.items[i].children[n].d; if(this.supressZero && d==0) continue; s[s.length] = '' +'' +'' +'' +'' +''; sum += d } if(sum>0) s[s.length] = '' +'' +'' +'' +'' +''; } s[s.length]='
itemcallsavaragetotal ms
' +(z++)+") "+i+' ' +'%c%a%d
'+Math.round(d/this.items[i].duration*100)+' %'+n+''+ c +''+ (Math.round(100* d / c)/100) +''+ (Math.round(100* d)/100) +'
'+(100-Math.round(sum/this.items[i].duration*100))+' %unkown  '+ (Math.round(100* (this.items[i].duration-sum))/100) +'
'; if(ftm=="doc") s[s.length]=''; return profilerEnabled?s.join(''):"profiling disabled"; }, toggleZero : function() { this.supressZero = !this.supressZero; this.dump(); }, dump : function() { var win = getSTFC(this.dumpWin); if(!win) STFramework.create( 'SpinTag.Window', this.dumpWin, STSession, 'name:Profiler Window;state:show;hideMenu:false;onUpdate:setTimeout("Profiler.dump()",1)'); else { win.setText(this.formatter()); win.maximize(); } }, print : function() { var win = window.open("", "Drucken", "menubar=yes,scrollbars=yes,resizable=yes"); win.document.write(this.formatter("doc")); win.focus(); } } function assert(expr, ctx) { if(!expr) { alert("assertion"+(arguments.length>1?" with context: "+ctx:"")+" failed:\n\r"+assert.caller); return false; } return true; } G_JSCompliant = true; if( !document.createElement || document.createElement("div")== null || !Array.prototype.push ) G_JSCompliant = false; if(G_JSCompliant) document.write(""); STSession = 0; STFramework = { enableTrace : false, control : null, cidAutoIncrement : 0, autoNameIncrement : 0, mvIncrement : 0, cid : 0, action : "framework.php", clientCtx : "no context", serverCtx : ""+STSession, typeName: "SpinTag.Framework", requestValue : null, responseValue : null, directory : "", icons: "", compList : [], compByName: {}, compSpecList : {}, state : "initial", mvList : [], properties: [ ], introspection: function() { return this.properties; }, setDirectory : function (dir) { this.directory = dir; this.action = dir + "framework.php"; }, getDirectory : function () { return this.directory; }, addMV : function (value, observer) { this.mvList[this.mvIncrement] = {v:value,o:observer}; return this.mvIncrement++; }, getMV : function (id) { return this.mvList[id]; }, setMV : function (id, value) { this.mvList[id].o(this.mvList[id].v, value); }, getName: function () { return "autoName" + (++this.autoNameIncrement); }, encodeSourceRequest : function (){ var s=[]; s[s.length]=""; s[s.length]=""; for (var n in this.compSpecList) s[s.length]=''; s[s.length]=""; s[s.length]=""; return s.join(""); }, loadCore : function (){ if(this.state!="initial"){ STFramework.trace("loadCore - canceled. Wrong state "+this.state); return; } this.state = "loading"; this.requestValue = this.encodeSourceRequest(); this.methodName = "loadCore"; STFramework.trace("loadCore","requestValue",this.requestValue); STFramework.rpc(0); }, requireSource : function (name){ if(!this.compSpecList[name]) this.compSpecList[name] = {state:"required"}; }, loadSource : function (name){ if(this.compSpecList[name] && this.compSpecList[name].state =="present") { STFramework.trace("loadSource - skipped: previous request has delivered source already", "name", name); return; } this.compSpecList[name] = {state:"required"}; if (this.state=="loading"){ STFramework.trace("loadSource - postponed", "name", name); setTimeout('STFramework.loadSource("'+name+'");', 130); return; } this.state = "loading"; this.requestValue = this.encodeSourceRequest(); this.methodName = "loadSource"; STFramework.trace("loadSource - executing", "name", name, "requestValue",this.requestValue); STFramework.rpc(0); }, start : function() { if(!G_JSCompliant) { return false; } STFramework.trace("Framework start","state",this.state); this.compSpecList["SpinTag.Framework"] = {state:"present",action:"framework.php"}; if(this.state=="initial") this.loadCore(); else { this.onStart(); this.activate(document.body); this.onActivate(); } }, onStart : function(){}, onActivate : function(){}, onReturn : function(wind) { if(!wind.errorMsg) { switch(this.methodName) { case "loadCore": this.onStart(); this.activate(document.body); this.onActivate(); break; case "loadSource": break; } } else { alert("SpinTagFramework onReturn: "+wind.errorMsg); } this.state = "idle"; STFramework.trace("onReturn", "cid", this.cid, "method", this.methodName, "value", this.requestValue); }, setSource : function(name,spec,source) { if(!G_JSCompliant) { return false; } ; if(this.compSpecList[name]&&(this.compSpecList[name].state=="present"||this.compSpecList[name].state=="error")) { STFramework.trace("Framework.setSource: Skip source OVERWRITE", "name", name,"state",this.compSpecList[name].state); return; } function exportGlobal(variable) { STFramework.trace("Framework.setSource: Export "+(window[variable]?"OVERWRITE":"")+" global", "variable", variable); eval('window["'+variable+'"]='+variable); } STFramework.trace("Framework.setSource: Evaluate source", "name", name); var msg=""; var state=spec.state; if(state!="error") { try { eval(source); state="present"; } catch(e) { msg += "Exception: "+e.name+"::"+e.message+"\n\n"; state="error"; } } var constructor=null; if(state!="error") { var defCon = name.replace(/\./,""); var s = false; if(spec.constructor) s = "constructor="+spec.constructor+";\n"; else { if(window[defCon]) { s = "constructor="+defCon+";\n"; STFramework.trace("Framework.setSource: Default constructor resolved", "constructor", defCon+"()"); } else STFramework.trace("Framework.setSource: Default constructor skiped", "constructor", defCon+"()"); } if(s) eval(s); } this.compSpecList[name] = { constructor: constructor, action: this.directory + spec.action, state:state}; if(state!="error") this.fire("onComponent_"+name+"_running"); else STAddLog("error","Framework","Framework.setSource("+name+") evaluation failed.\n\n "+msg+this.encodeSourceRequest()); ; }, createByNode : function (node) { this.create(node.getAttribute("comp"), node, node.getAttribute("ctx"), node); }, create : function (name, clientCtx, serverCtx, properties) { ; if(!clientCtx) clientCtx = this.getName(); else if (typeof(clientCtx) == "object") { if (clientCtx.id == '') clientCtx.id = this.getName(); clientCtx = clientCtx.id; } var co = this.compByName[clientCtx]; if(!co) { this.compByName[clientCtx] = {obj:null,posts:{}}; this.fire("onComponent_"+clientCtx+"_required"); } else if(co.state.match(/created|running|updated/)) { alert("Duplicate Create "+clientCtx+" skipped. Current state: "+co.state); return false; } if (!this.compSpecList[name]) this.loadSource(name); switch (this.compSpecList[name].state) { case "dynamic": case "required": var me = this; var args = {name:name, clientCtx:clientCtx, serverCtx:serverCtx, properties:properties}; function createProxy() { me.create(args.name, args.clientCtx, args.serverCtx, args.properties); } STFramework.trace("create - waiting for source", "name", name, "client Ctx", clientCtx, "server Ctx", serverCtx, "properties", properties); this.post(name, createProxy); ; return null; case "present": break; default: alert("unknown state '"+state+"' in framework!"); case "error": this.fire("onComponent_"+clientCtx+"_error"); ; return null; } STFramework.trace("create", "name", name, "client Ctx", clientCtx, "server Ctx", serverCtx, "properties", properties); if(!this.compSpecList[name].constructor) { alert("No constructor for "+name); this.compByName[clientCtx].state='error'; this.fire("onComponent_"+clientCtx+"_"+this.compByName[clientCtx].state); ; return null; } var obj = new this.compSpecList[name].constructor(clientCtx, serverCtx); obj.cid = (++this.cidAutoIncrement); obj.embedded = false; obj.action = this.compSpecList[name].action; this.compList[obj.cid] = obj; this.compByName[clientCtx].obj = obj; this.setProperties(obj, properties); obj.init(); this.fire("onComponent_"+clientCtx+"_created"); if(obj.requires) STFramework.waitForInstance( clientCtx, "run(); STFramework.fire('onComponent_"+clientCtx+"_running');", obj.requires ); else { obj.run(); this.fire("onComponent_"+clientCtx+"_running"); } if(this.control && this.control.visible) this.control.formatter(); ; return obj; }, activate : function (n,pr){ if(!pr); if (n.className) { switch(n.className) { case "spintag": case "SpinTag": var ctx=null; if (n.getAttribute("comp")) { ctx = n.getAttribute("ctx"); this.create(n.getAttribute("comp"), n, ctx?ctx:"", n); n.className = "SpinTag2"; if(!pr) ; return; } var pattern = /\s*(SpinTag\.[a-zA-Z0-9_]+),([\/\.\:a-zA-Z0-9_]+|\'.*\')?,?(.*$)/; if( (-1) == n.firstChild.nodeValue.search(pattern) ) { alert("invalid component spec: '"+ n.innerHTML+"'"); if(!pr) ; return; } if(RegExp.$2.charAt(0) == "'") ctx = RegExp.$2.slice(1,RegExp.$2.length-1); else ctx = RegExp.$2; alert("alte syntax: "+n.outerHTML); this.create(RegExp.$1, n, ctx, RegExp.$3); n.className = "SpinTag2"; if(!pr) ; return; case "javascript": ScriptContext = n; n.className = "javascript2"; if(n.firstChild) this.eval(n.firstChild.nodeValue); if(!pr) ; return; case "javascript_example": ScriptContext = n; n.className = "javascript_example2"; if(n.firstChild) { var s=n.firstChild.nodeValue; this.eval(s); n.innerHTML = colorize(s.replace(/window\["[a-zA-Z0-9]+"\]=[a-zA-Z0-9]+;/,"")); } if(!pr) ; return; case "stmsg": n.innerHTML = STL(n.innerHTML); n.className = "stmsg2"; if(!pr) ; return; } } for (var child=n.firstChild; child; child=child.nextSibling) this.activate(child,true); if(!pr) ; }, destroy : function (clientCtx) { this.trace("destroy", "clientCtx", clientCtx); for (var i=1; i3)?result:"")); return 0; }, trace : function (context){ if (!this.enableTrace) return; if (!this.startTime) this.startTime=new Date().getTime(); var delta = new Date().getTime() - this.startTime; if (!this.traceWin || this.traceWin.closed) this.traceWin = window.open("", "trace", "scrollbars=yes,resizable=yes"); if(!this.traceWin || !this.traceWin.scrollTo) return; var doc = this.traceWin.document; var len = arguments.length; doc.write((this.traceNbr++) + " ts: (+"+(delta-this.traceLastTs)+") "+delta+" "+context+": "); for (var i=1; i/g,'>'); doc.write(""+arguments[i]+": "+val+", "); } doc.writeln("
"); this.traceWin.scrollTo(0,100000); this.traceLastTs=delta; }, traceWin : null, traceNbr : 0, traceLastTs : 0, applyViewPath : function (viewpath) { if(!viewpath || !G_JSCompliant) return false; var p = viewpath.split("\/"); var t = p.shift(); if(t.charAt(0)=="#") { t = t.substr(1); var node = document.getElementsByName(t)[0] if(node) node.scrollIntoView(); } else STFramework.post(t,"applyViewPath('"+p.join("/")+"')"); return true; }, include : function (url) { STFramework.trace("framework include", "url", url); var node = document.createElement("script"); node.src = url + "?" + new Date().getTime(); document.body.appendChild(node); }, createHTTPTunnel : function (cid) { STFramework.trace("createHTTPTunnel", "cid", cid); var hide = (this.enableTrace)?'text':'hidden'; var style = (this.enableTrace)?"":"height:1px;width:1px;position:absolute;left:-100px;top:-100px;visibility:hidden"; var s = '
' + '' + '' + '' + '' + '
'; if( this.enableTrace) s += ''; else s += ''; return newNode('
' + s + '
'); }, pendingRequests : [], acceptRequest : function (sequenceId) { if(this.pendingRequests[sequenceId]) { this.pendingRequests[sequenceId]=false; return true; } STAddLog('warning','Zurück nach '+sequenceId+" aktuell:"+this.sequenceId, STL("backButton")) return false; }, sequenceId : 0, cacheSeperator : "", rpc : function (cid) { var obj = STFramework.compList[cid]; var sequenceId = ++STFramework.sequenceId; var tunnel = getById("ST_tunnel"+cid); if (!tunnel) tunnel = this.createHTTPTunnel(cid); var f = tunnel.firstChild; if(this.cacheSeperator) f.action = obj.action.replace(/\.php/,this.cacheSeperator+sequenceId+".php"); else f.action = obj.action; f.methodName.value = obj.methodName; f.requestValue.value = obj.requestValue; f.serverCtx.value = obj.serverCtx; this.pendingRequests[sequenceId]=true; f.sequenceId.value = sequenceId; STFramework.trace("rpc", "cid", cid, "sequenceId", sequenceId, "action", f.action, "server Ctx", obj.serverCtx, "method Name", obj.methodName ); f.submit(); }, setProperty: function (obj, name, value) { switch (typeof obj[name]) { case "boolean": obj[name] = (value=="true")?true:false; break; case "string": case "number": obj[name] = value; break; case "object": if (value.charAt(0)=="[" && value.charAt(value.length-1)=="]" ) eval('obj[name]='+value); else obj[name][obj[name].length] = value; break; default: alert(obj.clientCtx+ " property '"+name+"' unknown or value has invalid type '"+typeof obj[name]+"'"); } }, setProperties : function (obj, properties) { if (properties=="") return; var objProps = obj.introspection(); if(typeof properties == "object") { for (var i=0,len=objProps.length; i'; for(var n=0; n'; } } s[s.length] = '' s[s.length] = '' + i + ''; s[s.length] = '' + ctx + ''; s[s.length] = '' + STFC[i].serverCtx + ''; s[s.length] = '' + STFC[i].typeName + ''; s[s.length] = '' + ps + ''; s[s.length] = ''; } return s.join(""); }, showVersion: function (out) { var v = getById(out); if (!v) return; var s = ""; s += ''; s += ''; var infos = []; for (var i in STVersionInfo) { var sp = this.compSpecList[i]; var vi = STVersionInfo[i].split(" "); var ps=""; if(this.compByName[i]) for(var state in this.compByName[i].posts) { ps += ''+state+' ('+this.compByName[i].posts[state].length+')
'; for(var n=0; n'; } infos[infos.length] = '' + '' + '' + '' + '' + '' +''; } infos.sort(); s += infos.join(""); s += '
KomponenteVersionDateStatusPostings
' + i + '' + vi[2] + '' + vi[3] + '' + (typeof sp == "object" ? sp.state : "embedded")+ '' + ps + '
'; v.innerHTML=s; } } STFramework.setDirectory("/stc/"); STFramework.icons = STFramework.directory + "icons/"; function ICONS(name){return STFramework.icons+name+".gif"} STFramework.addMV(null, new Function("mv","value",'') ); STFC = STFramework.compList; STFC[0] = STFramework; function getSTFC(name) { return STFramework.compByName[name]?STFramework.compByName[name].obj:null; } function getById(id) {return document.getElementById(id);} function newNode(data){ var n = document.createElement("div"); n.innerHTML = data; return document.body.appendChild(n.firstChild); } function exportGlobal(variable) { return STFramework.eval('window["'+variable+'"]='+variable); } function STAddLog (severity,action,result,date,duration) { return STFramework.log(0,severity,action,result,date,duration); } function STUpdateLog (eventId,severity,action,result,date,duration) { return STFramework.log(eventId,severity,action,result,date,duration); } STLANG = []; function STL(key) { if(!key) return ""; if(STLANG[key]) key=STLANG[key]; if(key.indexOf("%")==(-1)) return key; var i=1; var p=0; var r=""; while(1) { p = key.indexOf("%"); if(p==-1) { r += key; break; } r += key.substr(0,p) if(p!=key.indexOf("%%")) { r += arguments[i++]; key = key.substr(p+1); } else { r += "%"; key = key.substr(p+2); } } return r; } window.onload = function() { STFramework.start(); } ScriptContext = null; STV = {}; STV["PROJECT_NAME"]="generic"; STV["HOST"]="www.spintag.de:80"; STV["DOCUMENT_ROOT"]="/srv/public/www/spintag/"; STV["TABLE_ALIAS"]="ALIAS"; STV["TABLE_WORDS"]="WORDS_"; STV["DATE"]="08. Sep 10"; STFramework.setSource("SpinTag.Util",{ constructor:"", action:"", state:"required" },"\nSTVersionInfo[\"SpinTag.Util\"] = \"$Id: util.class.js,v 1.55 2009-11-14 01:22:08 chris Exp $\";\nfunction addURLParameter(url, parameter) {\nif(url&¶meter) {\nif(url.search(/\\?/)==-1) url += \"?\";\nelse if(url.search(/&/)+1\");\nspan.innerHTML = s;\ns = span.firstChild.nodeValue;\nvar sb = [];\nfor(var i=0; i < s.length; i++)\nsb[s.charCodeAt(i)]=true;\nspan.parentNode.removeChild(span);\nreturn sb;\n}\nfunction isSingleByte(code) {\nif(code<256)\nreturn true;\nif(!g_SingleBytes)\ng_SingleBytes = mkSingleBytes();\nreturn g_SingleBytes[code]==true;\n}\nexportGlobal(\"isSingleByte\");\ng_multiByteString = null;\nfunction multiByteHandling (sub)\n{\nif (sub == \'\\xA0\')\nreturn \' \';\nif (!g_multiByteString)\n{\nvar t=\"\";\nfor(var i=128; i < 256; i++)\nt += \"&#\"+i+\";\";\nvar span = newNode(\"\");\nspan.innerHTML = t;\ng_multiByteString = span.innerHTML; \nspan.parentNode.removeChild(span);\n}\nvar pos = g_multiByteString.search(sub);\nif (pos >= 0)\nreturn \"&#\"+(128+pos)+\";\";\nelse\n{\nreturn \'\';\n}\n}\nexportGlobal(\"multiByteHandling\");\nfunction getCookie() {\nvar c={};\nif(document.cookie && document.cookie.match(/webword=([^;]+)/)) {\nvar cs = RegExp.$1;\ncs=decodeURIComponent(cs);\ntry {\neval(\'c=\'+cs);\n} \ncatch(e) {\nSTAddLog(\"error\",\"Invalid Cookie\", \"Exception: \"+e.name+\"::\"+e.message+\"\\n Data:\"+cs);\n}\n}\nreturn c;\n}\nexportGlobal(\"getCookie\");\nfunction setCookie(c) {\nvar exp = new Date();\nvar over = exp.getTime() +((STModel?STModel.getKey(\"application/sessionLifeTime\",24):24) * 60 * 60 * 1000);\nexp.setTime(over);\ndocument.cookie = \"webword=\"+json(c)+\"; expires=\"+exp.toGMTString();\n}\nexportGlobal(\"setCookie\");\nfunction removeCookie() {\nvar exp = new Date();\nvar over = exp.getTime() - 1000;\nexp.setTime(over);\ndocument.cookie = \"webword={}; expires=\"+exp.toGMTString();\n}\nexportGlobal(\"removeCookie\");\nfunction setCookieParam(parameter,value) {\nvar c = getCookie();\nc[parameter]=value;\nsetCookie(c);\n}\nexportGlobal(\"setCookieParam\");\nfunction getCookieParam(parameter) {\nvar c = getCookie();\nif(c)\nreturn c[parameter];\nreturn \"\";\n}\nexportGlobal(\"getCookieParam\");\nfunction json(arg) {\nvar i, o, v;\nswitch (typeof arg) {\ncase \'object\':\nif (arg) {\nif (arg.constructor == Array) {\no = \'[\';\nfor (i = 0; i < arg.length; ++i) {\nv = json(arg[i]);\nif (v != \'function\' && typeof v != \'undefined\') {\no += (o != \'[\' ? \',\' : \'\') + v;\n}\nelse {\no += \',\';\n}\n}\nreturn o + \']\';\n}\nelse if (typeof arg.toString != \'undefined\') {\no = \'{\';\nfor (i in arg) {\nv = json(arg[i]);\nif (v != \'function\' && typeof v != \'undefined\') {\no += (o != \'{\' ? \',\' : \'\') + \'\"\' + i.replace(/([\"\\\\])/g, \'\\\\$1\') + \'\"\' + \':\' + v;\n}\n}\nreturn o + \'}\';\n}\nelse {\nreturn;\n}\n}\nreturn \'null\';\ncase \'unknown\':\ncase \'undefined\':\nreturn;\ncase \'string\':\nreturn \'\"\' + arg.replace(/([\"\\\\])/g, \'\\\\$1\') + \'\"\';\ncase \'function\':\nreturn \'function\';\ndefault:\nreturn String(arg);\n}\n}\nexportGlobal(\"json\");\ndumpObjectID=0;\nfunction showObject(obj, name, nodeId, limit)\n{\nvar dumpObject = [];\nfunction _showObj(obj, name, limit) {\nvar s = \"\" + name + \": \";\nswitch (typeof(obj)) {\ncase \"object\":\nif (obj == null) {\ns += \"null
\";\nbreak;\n}\nif(!limit) {\ns = \"\";\nvar i = ++dumpObjectID; \nvar hid = \"dump\" + name.replace(/[^_a-zA-Z0-9]/g,\'_\') +i;\ns += \"
\";\ns += \"
\"+name+\" ... (\"+(obj.length?obj.length:\"obj\")+\")\\\"
\";\ns += \"
\";\ndumpObject[i] = obj;\nbreak;\n}\n\nvar bg = [ \"#F0FFF0\", \"#F0F0FF\", \"#FFF0F0\"];\nif(typeof obj[\"length\"]==\"number\" || obj.constructor == Array)\ns += \"
Array
\";\nelse\ns += \"
Object
\";\nfor(var p in obj) {\ns += _showObj(obj[p], p, limit-1);\n}\ns += \"
\";\nbreak;\ncase \"string\":\ns += \"\\\"\" + obj.replace(/\\/g, \">\") + \"\\\"
\";\nbreak;\ncase \"number\":\ns += \"\" +obj + \"
\";\nbreak;\ncase \"boolean\":\ns += \"\" + ((obj)?\"true\":\"false\") + \"
\";\nbreak;\ncase \"undefined\":\ns += \"undefined
\";\nbreak;\ncase \"function\":\ns = \"\";\nbreak;\ndefault:\nalert(\"unhandled type: \" + typeof(obj) + s);\ns += \"unhandled type: \" + typeof(obj) + s + \"
\";\nbreak;\n}\nreturn s;\n}\nif (arguments.length < 4)\nlimit=32;\nif(!name)\nname=typeof(obj);\nvar s = _showObj(obj, name, limit);\n\nvar node;\nvar scroll=false;\nif(arguments.length > 2)\nnode = getById(nodeId);\nif(node == null) {\nnode = document.createElement(\'div\');\ndocument.body.appendChild(node);\nnode.id = nodeId;\nscroll=true;\n}\nnode.innerHTML = \"
\" + s + \"
\";\nif(scroll)\nnode.scrollIntoView(true);\nfor(var i in dumpObject) {\nvar n=getById(\"dumpObject\"+i);\nif(n)\nn.obj = dumpObject[i];\n}\n}\nexportGlobal(\"showObject\");\nfunction showDOM(readCtx, writeCtx, isLeafe)\n{\nfunction mouseClick(evt) {\nvar node = window.event?event.srcElement:evt.target;\nwhile(node && node.nodeName!=\"LI\")\nnode=node.parentNode;\nvar hide = node.getAttribute(\"hidden\")!=\"true\";\nfor(var r=node.firstChild; r; r=r.nextSibling) {\nif(hide)\nr.style.display = \'none\'\nelse\nr.style.display = \'\'\n}\nnode.setAttribute(\"hidden\", hide?\"true\":\"false\");\nnode.style.backgroundColor = hide?\"red\":\"\";\n}\nif(!isLeafe)\nwriteCtx.onclick = mouseClick;\nwith(document) {\nvar w = createElement(\'ol\');\nfor (var r=readCtx.firstChild; r; r=r.nextSibling)\n{\nif ((3 == r.nodeType) && (-1 == r.nodeValue.search(/\\S/)))\n{\ncontinue;\n}\nvar li = createElement(\'li\');\nvar div = createElement(\'div\');\nif (3 == r.nodeType)\ndiv.className = \"text\";\nelse if (4 == r.nodeType)\ndiv.className = \"cdata\";\nelse\ndiv.className = \"tag\";\nli.appendChild(div);\nw.appendChild(li);\nif (3 == r.nodeType || 4 == r.nodeType)\ndiv.appendChild(createTextNode(\"\'\"+r.nodeValue.replace(/\\&\\;/g,\"+\")+\"\'\"));\nelse\ndiv.appendChild(createTextNode(r.nodeName.toLowerCase()));\nif (r.attributes)\n{\nvar len = r.attributes.length;\nvar txt = \'\';\nfor (var i=0; idump id \'+dumpId+\'
\');\nvar args = {\'obj\':obj, \'title\':title, \'dumpId\':dumpId, \'deep\':deep};\nfunction dumpProxy() {\ndumpWin(args.obj, args.title, args.dumpId, args.deep);\n}\nSTFramework.post(dumpId, dumpProxy);\n}\nexportGlobal(\"dumpWin\");\nfunction colorize(src)\n{\nfunction fixIntentation(s)\n{\nreturn s.replace(/ {2}/g,\'  \').replace(/\\t/g, \'   \');\n}\nsrc=src.replace(/&/g,\"&\").replace(//g,\">\");\nvar keyword = {\n\"function\":1, \"var\":1, \"while\":1, \"do\":1, \"return\":1, \"with\":1,\n\"true\":1, \"false\":1, \"typof\":1, \"if\":1,\"then\":1, \"else\":1,\n\"for\":1, \"in\":1, \"new\":1, \"delete\":1, \"switch\":1, \"case\":1,\n\"default\":1, \"break\":1, \"continue\":1, \"null\":1, \"this\":1,\n\"undefined\":1,\"catch\":1,\"try\":1,\"throw\":1,\"finally\":1,\"typeof\":1\n};\nvar i, len, a=[];\nvar pattern = new RegExp(/(\\/\\/.*?)\\r|(\\/\\*.*\\*\\/)|(\'.*?\'|\".*?\")|([a-zA-Z_\\$]\\w*)|(\\d+)/g);\nwhile( -1 != (i=src.search(pattern)) )\n{\na.push(src.slice(0,i));\nif (RegExp.$1) {\na.push(\'\'+RegExp.$1+\'\\n\');\nlen = RegExp.$1.length;\n}\nelse if (RegExp.$2) {\na.push(\'\'+RegExp.$2+\'\');\nlen = RegExp.$2.length;\n}\nelse if (RegExp.$3) {\na.push(\'\'+RegExp.$3+\'\');\nlen = RegExp.$3.length;\n}\nelse if (RegExp.$4) {\nif (keyword[RegExp.$4])\na.push(\'\'+RegExp.$4+\'\');\nelse\na.push(RegExp.$4);\nlen = RegExp.$4.length;\n}\nelse if (RegExp.$5) {\na.push(\'\'+RegExp.$5+\'\');\nlen = RegExp.$5.length;\n}\ni += len;\nsrc=src.slice(i);\n}\na.push(src);\nvar lines = a.join(\'\').split(/\\r/);\na=[]; \na.push(\'\');\nfor (var i=1; i\');\na.push(\'
\'+i+\'\'+fixIntentation(lines[i-1])+\'
\');\nreturn a.join(\'\');\n}\nexportGlobal(\"colorize\");\nString.prototype.escapeXML = function(nice) {\nif(nice)\nreturn this\n.replace(/&/g, \'&\')\n.replace(//g, \'&my_gt;\')\n.replace(/&my_lt;(\\/)/g, \'</\')\n.replace(/&my_lt;/g, \'<\')\n.replace(/(\\/)&my_gt;/g, \'/>/\')\n.replace(/&my_gt;/g, \'>\')\n.replace(/\\n /g, \'\\n  \')\n.replace(/\\n /g, \'\\n \')\n.replace(/\\r?\\n/g, \'
\')\n;\nreturn this.replace(/&/g, \'&\').replace(//g, \'>\');\n}\nString.prototype.escapeHTML = function() {\nreturn this.escapeXML().replace(/\\r?\\n/g, \"
\");\n}\nString.prototype.trim = function() {\nvar s = this.replace(/^\\s*/, \"\");\nvar s = s.replace(/\\s*$/, \"\");\nreturn s;\n}\nfunction getOffset(obj)\n{\n;\nvar left = 0;\nvar top = 0;\nvar height = obj.offsetHeight;\nvar width = obj.offsetWidth;\nwhile (obj.offsetParent)\n{\nleft += obj.offsetLeft;\ntop += obj.offsetTop;\nobj = obj.offsetParent;\n}\n;\nreturn {\"left\":left, \"top\":top, \"height\":height, \"width\":width};\n}\nexportGlobal(\"getOffset\");\nfunction getClientOffset(obj)\n{\nvar left = 0;\nvar top = 0;\nvar height = obj.offsetHeight;\nvar width = obj.offsetWidth;\nwhile (obj.offsetParent)\n{\nleft += obj.offsetLeft;\ntop += obj.offsetTop;\nleft -= obj.scrollLeft;\ntop -= obj.scrollTop;\nobj = obj.offsetParent;\n}\nreturn {\"left\":left, \"top\":top, \"height\":height, \"width\":width};\n}\nexportGlobal(\"getClientOffset\");\nfunction formatOffset(obj,asRect)\n{\nvar o = getOffset(obj);\nif(!asRect)\nreturn \"{left:\"+o.left+\",top:\"+o.top+\",width:\"+o.width+\",height:\"+o.height+\"}\";\nelse\nreturn \"{left:\"+o.left+\",top:\"+o.top+\",right:\"+(o.left+o.width)+\",bottom:\"+(o.top+o.height)+\"}\";\n}\nexportGlobal(\"formatOffset\");\nfunction isContained(parent, child)\n{\nwhile (child)\n{\nif (child === parent)\nreturn true;\nchild = child.parentNode;\n}\nreturn false;\n}\nexportGlobal(\"isContained\");\nfunction cancelEvent(evt)\n{\nif(window[\"event\"]) {\nwindow.event.returnValue = false;\nwindow.event.cancelBubble = true;\n}\nelse {\nevt.preventDefault();\n}\nreturn true;\n}\nexportGlobal(\"cancelEvent\");\nSTContextMenu = {\nitems:[],\nreset: function ()\n{\nthis.items = [];\n},\nshow: function ()\n{\nvar wind = getSTFC(\'contextMenu\');\nif (!wind) {\nwind = STFramework.create(\'SpinTag.Window\', \'contextMenu\', 0,\'name:Context;isFrameless:true;hideMenu:true\');\nwind.onDeactivate=wind.hide;\n}\nwind.setX(event.clientX + document.body.scrollLeft + 5);\nwind.setY(event.clientY + document.body.scrollTop + 5);\nvar s = \'\';\nif (!this.items[this.items.length-1].text)\nthis.items.pop();\nfor (var i=0; i\';\nelse\ns += \'\';\n}\ns += \"
\'+this.items[i].text+\'
\";\nwind.setText(s);\nwind.maximize();\nthis.reset();\n},\nhide: function ()\n{\nthis.reset();\nvar wind = getSTFC(\'contextMenu\');\nif (wind)\nwind.hide();\n},\naddCommand: function (text, command)\n{\nthis.items.push({text:text,command:command});\n},\naddSeparator: function ()\n{\nthis.items.push({text:\"\",command:\"\"});\n}\n}\nexportGlobal(\"STContextMenu\");\nfunction STFrameworkCC ()\n{\nSTFramework.trace(\"STFrameworkCC\");\nSTFramework.include(\"/stc/inc/DOMTree.js\");\nvar cc = document.createElement(\'div\');\ncc.id = \'STFrameworkCC\';\ncc.innerHTML =\n\'
\' +\ndocument.body.appendChild(cc);\nthis.visible = true;\nthis.formatter = function ()\n{\nvar s = \"\";\ns += \'\';\ns += \'\';\ns += \'\';\ns += \'
\';\ns += STFramework.formatter();\ns += \'
\';\ns += \'close  \'+(STFramework.enableTrace?\"no \":\"\")+\'trace\';\ns += \'
\';\ngetById(\"STFrameworkCCBackground\").innerHTML = s;\n}\nthis.toggleTrace = function () {\nSTFramework.enableTrace = !STFramework.enableTrace;\nif (STFramework.control && STFramework.control.visible)\nSTFramework.control.formatter();\nif(STFramework.enableTrace)\nSTFramework.trace(\"trace activated\", \"time\", new Date().getTime());\n}\nthis.show = function (cid)\n{\ngetById(\"STFrameworkCC\").style.display = \"\";\nthis.visible = true;\n}\nthis.hide = function ()\n{\ngetById(\"STFrameworkCC\").style.display = \"none\";\nthis.visible = false;\n}\n}\nexportGlobal(\"STFrameworkCC\");\nfunction STSpinCopyright (parent)\n{\nthis.offset = 0;\nthis.active = null;\nthis.cid = parent.cid;\nthis.embedded = parent.embedded;\nthis.name = parent.clientCtx;\n}\nSTSpinCopyright.tags = [\"MK\",\"CK\",\"div\",\"form\",\"input\",\"table\",\"script\"];\nSTSpinCopyright.prototype.stop = function ()\n{\nwindow.clearTimeout(this.active);\n}\nSTSpinCopyright.prototype.start = function ()\n{\nthis.offset = 0;\n}\nSTSpinCopyright.prototype.text = function ()\n{\nvar s = \"\";\ns += \'© 2001-2004 SpinTag\';\nreturn s;\n}\nSTSpinCopyright.prototype.run = function ()\n{\nvar s = \"\";\nvar cid = this.cid;\nif (this.embedded)\nreturn;\nif (this.offset == STSpinCopyright.tags.length)\nthis.offset = 0;\nif (this.offset)\ns = \' 2001-2004\' +\n\' Spin<\' + STSpinCopyright.tags[this.offset] + \'>\';\nelse\ns = \' 2001-2004 SpinTag\';\nvar node = getById(\'copyright\'+cid);\nif (!node)\n{\nSTFramework.destroy(this.name);\nreturn;\n}\nelse\nnode.innerHTML = s;\nthis.active = window.setTimeout (\'STFC[\'+cid+\'].spin.run();\', this.offset?200:10000);\nthis.offset++;\n}\nexportGlobal(\"STSpinCopyright\");\nfunction makeUnselectable(node)\n{\nif (node.nodeType == 1)\n{\nnode.unselectable = \"on\";\nif (node.hasChildNodes())\nfor (var c = node.firstChild; c; c = c.nextSibling)\nmakeUnselectable(c);\n}\n}\nexportGlobal(\"makeUnselectable\");\nfunction removeHandler(node, keepRootHandler)\n{\nvar handler = [\n\"onclick\", \"ondblclick\", \"oncontextmenu\",\n\"onmousedown\", \"onmouseup\", \"onmousemove\",\n\"onmouseover\", \"onmouseout\", \"onUpdate\",\n\"onblur\", \"onkeyup\", \"onfocus\", \"ondragstart\", \"onselectstart\",\n\"ondrop\", \"ondragenter\", \"onbeforeeditfocus\"];\nfunction _remove (n)\n{\nif (n.nodeType != 1)\nreturn;\nfor (var i=0; iInitial ein Menü Kommando ausführen:
_help_about:Copyright Hinweise
_view_showLog:Events anzeigen
_help_onlineHelp:FAQ
_help_hotKeys:aktuelle Shortcut Belegung
_help_serverManual: Serverhandbuch
_article_new: ohne Artikel starten; Auswahlfenster für neuen Artikel
_article_open: ohne Artikel starten; Auswahlfenster für bestehende Artikel
\';\nSTLANG[\"enterUser\"] = \"Bitte einen Benutzernamen eingeben!\";\nSTLANG[\"articleTitle\"] = \"Name des Artikels\";\nSTLANG[\"ReadOnly\"] = \"(gesperrt)\";\nSTLANG[\"ReadOnlyTitle\"] = \"Status des Artikels im Repository: Zur Publikation freigegeben.\";\nSTLANG[\"Locked\"] = \" \";\nSTLANG[\"LockedTitle\"] = \"Status des Artikels im Repository: Durch Redakteur gesperrt.\";\nSTLANG[\"Modified\"] = \"(nicht gespeichert)\";\nSTLANG[\"Original\"] = \"(gespeichert)\";\nSTLANG[\"Empty\"] = \"kein Artikel\";\nSTLANG[\"EmptyTitle\"] = \"Artikelmodus: kein Artikel geladen\";\nSTLANG[\"Chars\"] = \" Zeichen: \";\nSTLANG[\"CharsTitle\"] = \"Anzahl der Zeichen im aktuellen Feld\";\nSTLANG[\"ModifiedTitle\"] = \"Status des Artikels im Editor\";\nSTLANG[\"InvalidParam\"] = \"Ungültiger Parameter\";\nSTLANG[\"SyncWithSTCServer\"] = \"synchronisiere mit STC Server ...\";\nSTLANG[\"ConfigurationWarning\"] = \"Konfigurationswarnung: Keine URL für \";\nSTLANG[\"Service\"] = \" Service \";\nSTLANG[\"Specified\"] = \" spezifiziert.\";\nSTLANG[\"ConfirmDataLostQuery\"] =\n\"Es existieren noch nicht gespeicherte Daten in Artikel %. \\n\"+\n\"Bei Ausführung dieses Befehles werden diese verloren gehen. \\n\"+\n\"Wollen Sie dennoch fortfahren?\";\nSTLANG[\"ConfirmPossibleDataLostQuery\"] =\n\"Es existieren noch nicht gespeicherte Daten. \\n\"+\n\"Bei Ausführung dieses Befehles können diese ggf. verloren gehen. \\n\"+\n\"Wollen Sie dennoch fortfahren?\";\nSTLANG[\"CloseSecundaryBrowserSession\"] =\n\"Anscheined wird der Artikel bereits in einem Browser Fenster bearbeitet. \\n\"+\n\"Beim Speichern werden BEIDE Fenster aktualisiert \\nwobei Modifikationen im anderen Fenster verloren gehen. \\n\"+\n\"\\nWollen Sie tatsächlich mit zwei Instanzen am selben Artikel arbeiten ? \\n\\n\"+\n\"Wählen Sie Abbrechen (empfohlen), um einen anderen Artikel zu öffnen.\";\nSTLANG[\"NoData\"] = \"keine Daten\";\nSTLANG[\"Loading\"] = \"lade Daten ...\";\nSTLANG[\"Waiting\"] = \"warte auf Daten ...\";\nSTLANG[\"Message\"] = \"Nachricht \";\nSTLANG[\"GlobalVar\"] = \" Globale Variable \";\nSTLANG[\"Undefined\"] = \" undefiniert!\";\nSTLANG[\"InvalidParamContext\"] = \"Unzulässiger Parameterkontext: \";\nSTLANG[\"UnresolvedCommand\"] = \"ST Befehl: ungelöster Befehlsverweis \";\nSTLANG[\"InvalidTagCMD\"] = \"ST Befehl: unzulässiges Tag in CMD \";\nSTLANG[\"ScriptExecuted\"] = \"Script ausgeführt\";\nSTLANG[\"Comp\"] = \"Komponente \";\nSTLANG[\"Unknown\"] = \"Unbekannte \";\nSTLANG[\"HandleURLUnknownAction\"] = \"URL-Aufruf unbekannte Aktion\";\nSTLANG[\"ParamErrorForAction\"] = \"Parameter-Fehler für diese Aktion: \";\nSTLANG[\"OrderWithUnknownTargetIgnored\"] = \"Befehl mit unbekanntem Ziel wird ignoriert: \";\nSTLANG[\"CantExecute\"] = \" kann nicht ausgeführt werden.\";\nSTLANG[\"Executes\"] = \" führt aus: \";\nSTLANG[\"Execute\"] = \"Ausführen: \";\nSTLANG[\"PerformingRequest\"] = \"bearbeite Anfrage ...\";\nSTLANG[\"Fired\"] = \"Ereignis erzeugt: \";\nSTLANG[\"MenuCreated\"] = \"Menu erstellt\";\nSTLANG[\"WindowNotExist\"] = \"STMenuNode.init:\\nFolgendes Fenster existiert nicht: \";\nSTLANG[\"UnkownTargetState\"] = \"Unbekannter Zielstatus \";\nSTLANG[\"InTransition\"] = \" bei Transition!\";\nSTLANG[\"LicencedFor\"] = \"Lizenziert für: \";\nSTLANG[\"Update\"] = \"Daten aktualisieren\";\nSTLANG[\"Time\"] = \"Zeit\";\nSTLANG[\"Action\"] = \"Aktion\";\nSTLANG[\"Event\"] = \"Ereignis\";\nSTLANG[\"Duration\"] = \"Dauer\";\nSTLANG[\"InstanceRunning\"] = \"Instanz läuft: \";\nSTLANG[\"SynchronizationRestarted\"] = \"Synchronisation Neustart\";\nSTLANG[\"LastStarted\"] = \"zuletzt gestartet: \";\nSTLANG[\"Expected\"] = \"erwartet: \";\nSTLANG[\"SourceEvaluated\"] = \"Quelle ausgewertet: \";\nSTLANG[\"CommandNotSupported\"] = \"Der Befehl wird nicht unterstützt.\";\nSTLANG[\"EventLog\"] = \"Event Log\";\nSTLANG[\"Spellcheck\"] = \"Rechtschreibung\";\nSTLANG[\"ChartProposals\"] = \"Chart-Vorschläge\";\nSTLANG[\"ArticleIsExamined\"] = \"Der Artikel wird untersucht ... \";\nSTLANG[\"ExaminationIsFinished\"] = \"Die Untersuchung ist abgeschlossen!\";\nSTLANG[\"DuringExaminationAProblemOccured\"] = \"Das serverseitige Wörterbuch und die Vorschlagliste sind nicht verfügbar!
Diese Funktionalität wird bis zum Neustart des Browsers deaktiviert!\";\nSTLANG[\"InvalidCommandInSpellchecker\"] = \"Falscher Befehl für die Rechtschreibprüfung.\";\nSTLANG[\"InvalidSelectionDontCrossFields\"] = \"Falsche Auswahl! Die Grenzen der Eingabefelder bitte nicht überschreiten.\";\nSTLANG[\"InvalidClassifyValue\"] = \"Falscher Classify-Wert\";\nSTLANG[\"NoMetadataForAttribute\"] = \"Keine Metadaten für das Attribut: \";\nSTLANG[\"LayoutRequiresClassificationAttribute\"] = \"Layout-Bedingung erwartet das Classification-Attribut: \";\nSTLANG[\"InvalidFramework\"] = \"Ungültiges Framework oder ungültige Komponente\";\nSTLANG[\"ExcecutingRequest\"] = \" führe Anfrage aus ...\";\nSTLANG[\"backButton\"] = \"Bitte nicht den Zurück-Button benutzen. Sie könnten Ihre Daten verlieren!\";\nSTLANG[\"Back\"] = \" Zurück zum Editor\";\nSTLANG[\"UnicodeFiltered%%\"] = \"Unicode Buchstabe &#%; gefiltert. \'%\' ersetzt durch \'#\'\";\nSTLANG[\"Lock\"] = \"Sperren\";\nSTLANG[\"TryToLock\"] = \"Artikel wird gesperrt ...\";\nSTLANG[\"Release\"] = \"Freigabe\";\nSTLANG[\"TryToRelease\"] = \"Artikel wird freigegeben ...\";\nSTLANG[\"Reload\"] = \"Neu laden\";\nSTLANG[\"TryToReload\"] = \"Artikel wird erneut geladen ...\";\nSTLANG[\"TryToReleaseAndLeave\"] = \"Artikel wird freigegeben und anschließend verlassen ...\";\nSTLANG[\"SaveAs\"] = \"Duplizieren\";\nSTLANG[\"Save\"] = \"Speichern\";\nSTLANG[\"TryToSave\"] = \"Artikel wird gespeichert ...\";\nSTLANG[\"TryToUpdate\"] = \"Neu angepasste Werte werden geladen ...\";\nSTLANG[\"Load\"] = \"Laden\";\nSTLANG[\"TryToLoadAssets\"] = \"Assets werden geladen ...\";\nSTLANG[\"Create\"] = \"Erstellen\";\nSTLANG[\"TryToCreate\"] = \"Erstelle Daten aus PDF Zwischenablage ...\";\nSTLANG[\"Window\"] = \"Fenster:\";\nSTLANG[\"Properties\"] = \"- Eigenschaften\";\nSTLANG[\"Hide\"] = \"Schliessen\";\nSTLANG[\"HideWindow\"] = \"Fenster schliessen\";\nSTLANG[\"Show\"] = \"Anzeigen\";\nSTLANG[\"ShowWindow\"] = \"Fenster anzeigen\";\nSTLANG[\"Minimize\"] = \"Minimieren\";\nSTLANG[\"MinimizeWindow\"] = \"Fenster minimieren\";\nSTLANG[\"Maximize\"] = \"Maximieren\";\nSTLANG[\"MaximizeWindow\"] = \"Fenster maximieren\";\nSTLANG[\"Chase\"] = \"Folgen\";\nSTLANG[\"ChaseWindow\"] = \"Fenster folgt dem Bildschirm\";\nSTLANG[\"Pinup\"] = \"Fixieren\";\nSTLANG[\"PinupWindow\"] = \"Fenster fixiert sich auf dem Dokument\";\nSTLANG[\"Inline\"] = \"Integrieren\";\nSTLANG[\"InlineWindow\"] = \"Fenster im Textfluss einfügen\";\nSTLANG[\"Horizontal\"] = \"Horizontal\";\nSTLANG[\"HorizontalWindow\"] = \"Fenster horizontal darstellen\";\nSTLANG[\"Vertical\"] = \"Vertikal\";\nSTLANG[\"VerticalWindow\"] = \"Fenster vertikal darstellen\";\nSTLANG[\"MoreEntries\"] = \"weitere Einträge\";\nSTLANG[\"CloseWindow\"] = \"Fenster schliessen\";\nSTLANG[\"InputCantDisplayInWysiwyg\"] =\n\'

Bitte korrigieren Sie den Fehler und stellen Sie sicher, dass der Artikel \'+\n\'gueltiges XML ist.

\'+\n\'Wählen Sie dann unter \"Ansicht\" den Menüpunkt \"WYSIWYG editieren\", um den \'+\n\'HTML-Modus zu verlassen.

\'+\n\'Don\\\'t panic - bei Fragen wenden Sie sich bitte ans Producing oder an den Webmaster Ihres Vertrauens.\';\nSTLANG[\"DefaultShortcuts\"] = \"Tabelle der Voreinstellungen\";\nSTLANG[\"QuickMapDataNotCorrect\"] = \"Die Quick-Map Daten sind nicht korrekt.\";\nSTLANG[\"MakeXLinkDataNotCorrect\"] = \"Die Link Daten sind nicht korrekt.\";\nSTLANG[\"ProblemDuringFileUpload\"] = \"Ein Problem ist während des File Uploads aufgetreten.\";\nSTLANG[\"RemovingPictureFromServer\"] = \"Bild wird auf dem Server gelöscht! Möchten Sie fortfahren?\";\nSTLANG[\"OpenUploadDialog\"] = \"Upload Dialog öffnen\";\nSTLANG[\"AcceptDisplayedPicture\"] = \"Angezeigtes Bild übernehmen!\";\nSTLANG[\"TransferToServer\"] = \"zum Server übertragen\";\nSTLANG[\"ClickHere\"] = \"hier klicken, wenn keine Antwort\";\nSTLANG[\"pile\"] = \"mehr ...\";\nSTLANG[\"view\"] = \"Ansicht\";\nSTLANG[\"menu\"] = \"Menue\";\nSTLANG[\"tree\"] = \"Baumstrucktur\";\nSTLANG[\"tab\"] = \"Ordner mit vertikalen Laschen\";\nSTLANG[\"htab\"] = \"Ordner mit horizontalen Laschen\";\nSTLANG[\"table\"] = \"Tabelle\";\nSTLANG[\"recordset\"] = \"Einzelne Elemente\";\nSTLANG[\"menuview\"] = \"Zeige Daten als \"+STLANG[\"menu\"];\nSTLANG[\"treeview\"] = \"Zeige Daten als \"+STLANG[\"tree\"];\nSTLANG[\"tabview\"] = \"Zeige Daten als \"+STLANG[\"tab\"];\nSTLANG[\"htabview\"] = \"Zeige Daten als \"+STLANG[\"htab\"];\nSTLANG[\"tableview\"] = \"Zeige Daten als \"+STLANG[\"table\"];\nSTLANG[\"recordsetview\"] = \"Zeige Daten als \"+STLANG[\"recordset\"];\n"); STFramework.setSource("SpinTag.XML",{ constructor:"", action:"", state:"required" },"\nSTVersionInfo[\"SpinTag.XML\"] = \"$Id: xml.class.js,v 1.20 2006-04-06 08:08:17 chris Exp $\";\n\nfunction STXML(xml){\nthis.div = null;\nthis.root = xml;\n}\nvar STXml = new STXML();\nSTXML.prototype.parse = function(s) {\n;\ntry {\nif(window[\"DOMParser\"]) {\nthis.doc = new DOMParser().parseFromString(s, \'application\\/xhtml+xml\');\nthis.root = this.doc.documentElement;\n}\nelse if(document[\"implementation\"] && document.implementation[\"createLSParser\"]) {\nvar parser = document.implementation.createLSParser(document.implementation.MODE_SYNCHRONOUS, \'http:/\'+\'/www.w3.org/TR/REC-xml\');\nvar input = document.implementation.createLSInput();\ninput.stringData = s;\n\nthis.doc = this.root = parser.parse(input);\nthis.root = this.root.documentElement;\n}\nelse if(navigator.userAgent.indexOf(\'MSIE\')!=(-1)) {\nif(!this.div)\nthis.div = document.createElement(\"div\");\nthis.div.innerHTML = \'\'+s+\'\';\nthis.root = this.div.firstChild.documentElement;\nif (!this.root) \n{\n\n}\n}\nelse {\nalert(\"XML Parser support missing\");\n}\n}\ncatch (e) {\nwindow.alert(\"XML Parser Exeption: Fehlercode \" + e.code);\n}\n;\nreturn this.root;\n}\nSTXML.prototype.toString = function(node) {\n;\nvar x = [];\nif(arguments.length<1) {\nif(this.root && this.root.xml)\nreturn this.root.xml;\nelse\nthis._toString(x,this.root);\nif(this.div)\nx[x.length]=\"invalid XML\";\n}\nelse\nthis._toString(x,node);\n;\nreturn x.join(\"\");\n}\nSTXML.prototype._toString = function(x,node) {\nif(node)\nswitch(node.nodeType) {\ncase 1: \ncase 9: \nx[x.length]=\'<\';\nx[x.length] = node.nodeName;\nvar a = node.attributes;\nif(a)\nfor(var i=0,len=a.length;i\';\nvar end = x.length;\nfor (var i=0,len=node.childNodes.length; i\';\nx[x.length] = \'\';\n}\nbreak;\ncase 3: \nvar cdata = node.nodeValue.indexOf(\'<\')>=0;\nif(cdata) x[x.length] = \"\";\nbreak;\ncase 4: \nx[x.length] = \"\";\nbreak;\ncase 8: \nx[x.length] = \"\";\nbreak;\ndefault:\nalert(\"toString(): unhandled nodeType \"+node.nodeType+\" \"+node.nodeName);\nbreak;\n}\n}\nSTXML.prototype.xgetSingle = function(xpath,node) {\nvar list = this.xget(xpath,node);\nif (list.length > 0)\nreturn list[0];\nelse\nreturn null;\n}\nSTXML.prototype.xget = function(xpath,node) {\n;\nif(!xpath)\nreturn false;\nif(!node)\nnode = this.root;\nvar tokens = xpath.match(/[\\/\\[\\]@,]|[\\w*()]*=?[\"\']?[\\w+\\s+]*[\'\"]?/g);\nif(!tokens) {\nalert(\"invalid XPath \'\" +xpath+\"\'\");\nreturn false;\n}\nvar r = this._xget({node:node,levels:tokens,index:0,opt:false});\n;\nreturn r;\n}\nSTXML.prototype._xget = function(queue) {\nvar nodes = [queue.node];\nvar att=false;\nvar eol=false;\nvar si = queue.index;\nwhile( si < queue.levels.length) {\nvar token = queue.levels[si++];\nif(!token.length) continue;\nswitch( token.charAt(0) ) {\ncase \"[\": queue.opt=true; continue;\ncase \"]\": queue.opt=false; continue;\ncase \"@\": att=true; continue;\ncase \"/\": eol=true; break;\ncase \"*\":\ndefault:\nif(si-1 == queue.index)\nnodes = [];\nbreak;\n}\nvar tag = \"\";\nvar value =\"\";\nvar n=0;\nvar eq = token.search(/=/);\nif(eq != -1) {\ntag = token.slice(0,eq);\nif(!tag) tag=\"text()\";\ntoken=token.slice(eq+1);\nif( token.charAt(0) == \"\'\" || token.charAt(0) == \'\"\' ) {\nif(token.charAt(0) == \'\"\') n = token.search(/[^\\\\]\"/);\nelse n = token.search(/[^\\\\]\'/);\nvalue = token.slice(1,n+1);\n}\nelse {\nn = token.search(/[^\\w]|$/);\nvalue = token.slice(0,n);\n}\n}\nelse if( (n=token.search(/[^\\w*()]|$/)) > 0 ) {\ntag = token.slice(0,n);\nif(!isNaN(tag)) {\nvalue=tag;\ntag=\"position()\";\n}\n}\nif(eol) { \nvar org = nodes;\nnodes = [];\nfor(var i=0,len=org.length; i0) {\nif(queue.opt) nodes[nodes.length] = org[i];\nelse nodes=nodes.concat(result);\n}\n}\nelse alert(i+ \" \"+org[i].nodeType+\" \"+org[i].nodeName);\n}\nreturn nodes;\n}\nelse if((n=tag.search(/\\(\\)$/)) !=-1) { \ntag = tag.slice(0,n);\nvar org = queue.opt? nodes : [queue.node];\nnodes = [];\nif(tag == \"position\") {\nif(value >=0 && value\'+ e.macro + \'\';\n}\nelse {\nif(!v && v!=\"\"){\nvar def=this.defaults[e.macro];\nif (def)\ns += def;\nelse\ns += \"{\" + e.macro + \"}\";\n}\nelse\ns += v;\n}\n}\ns+=this.macros[len].pretext;\nif ( s.match(this.pattern) )\n{\nif (Template.prototype.level > 16)\nalert(\"possible recursion in macro substitution detected!\");\nelse {\ns = (new Template(s)).render(values);\n}\n}\nTemplate.prototype.level--;\nreturn s;\n}\n}\nexportGlobal(\"Template\");\nexportGlobal(\"TemplateDictionary\");\n"); STFramework.setSource("SpinTag.Command",{ constructor:"STCommand", action:"", state:"required" },"\nSTVersionInfo[\"SpinTag.Command\"]=\"$Id: command.class.js,v 1.100 2008-11-20 16:51:34 chris Exp $\";\nfunction embedURL(url, silent ) {\nSTCommand.prototype.createTunnel(url, 0, \"load url to frame\", null, !silent);\n}\n\nfunction STCommand()\n{\n}\n\nSTCommand.prototype.execute = function (command,session,refTab)\n{\nthis.session = session;\nif(!command)\nreturn -1;\nvar cmds = STXml.xget(\"*\",command);\nvar ret=0;\nfor(var i=0; i\"+ctx+\": \"+name + \"=\" + value;\nswitch(ctx) {\ncase \"literal\":\ncase \"global\":\ncase \"slot\":\ncase \"xslot\":\ncase \"xreg\":\nwindow[name] = value;\nbreak;\ncase \"member\":\nif(component) {\nvar s=\"getSTFC(\'\"+component+\"\').\"+name+\"=\'\"+value+\"\';\";\neval(s);\n}\nbreak;\ndefault: break;\n}\n}\nif(STFramework.enableTrace)\neventId = STAddLog(status, \"script\", \"executing ...\");\nif(component && command )\nif(getSTFC(component)) {\nif(getSTFC(component).command(command)) {\nstatus = \"info\";\nmsg = STL(\"Comp\")+ \"\'\"+component+\"\'\" +STL(\"Executes\")+ \"\'\"+command+\"\'\";\n}\nelse {\nstatus = \"error\";\nmsg = STL(\"Comp\")+ \"\'\"+component+\"\':
\'\"+command+\"\'\" +STL(\"CantExecute\");\n}\n}\nelse {\nstatus = \"error\";\nmsg = STL(\"Unknown\")+STL(\"Comp\")+ \"\'\"+component+\"\'.
\'\"+command+\"\'\" +STL(\"CantExecute\");\n}\nif(script) {\nif(!STFramework.eval(script,null,\"STCommand.handleScript(\"+ctx+\")\"))\nstatus = \"error\";\n}\n}\nif(STFramework.enableTrace) {\nSTFramework.trace(\"STCommand: handleScript\", \"component\", component,\"command\",command,\"script\",script,\"msg\",msg + pmsg);\nSTUpdateLog(eventId,status, \"script\", msg + (script?\'
\'+script:\'\') + pmsg);\n}\nreturn (status != \"error\");\n}\nSTCommand.prototype.handleURL = function (entry)\n{\nif(!entry)\nreturn false;\nvar target = entry.getAttribute(\"target\");\nvar system = entry.getAttribute(\"system\");\nvar action = entry.getAttribute(\"action\");\nvar targetName= entry.getAttribute(\"targetName\");\nvar url = STModel.getAction(system, action);\nif(!url) {\nSTFramework.trace(STL(\"HandleURLUnknownAction\"), \"system\",system,\"action\",action,\"target\",target,\"targetName\",targetName);\nSTAddLog(\"error\", \"exec\", STL(\"ConfigurationWarning\")+\"
\"+system+\"\"+ STL(\"Service\")+\"\"+action+\"\"+ STL(\"Specified\")+\" \"+ STL(\"Target\")+\": \"+target+\"\");\nreturn false;\n}\nSTFramework.trace(\"STCommand: handleURL\", \"system\",system,\"action\",action,\"target\",target,\"targetName\",targetName,\"url\",url);\nvar status = \"\";\nvar params = STXml.xget(\"parameter\",entry);\nvar plist = this.resolveParams(params,\"\");\nif(!plist) {\nreturn false;\n}\nelse if(typeof plist == \"string\") {\nSTAddLog(\"error\", \"exec\", STL(\"ParamErrorForAction\") +system+ STL(\"Service\")+ \"\" +action + \".\");\nreturn false;\n}\nfor(var name in plist) {\nvar splitAt = plist[name].indexOf(\':\');\nvar ctx = plist[name].substr(0,splitAt);\nvar value = plist[name].substr(splitAt+1);\nurl = addURLParameter(url, name + \"=\" + value);\n}\nvar ts = new Date().getTime();\nswitch(target) {\ncase \"self\":\nwindow.location.href = url;\nbreak;\ncase \"browser\":\nif(!targetName) targetName =\"target_\"+ts;\nwindow.open(url,targetName);\nbreak;\ncase \"window\":\nif(!targetName) targetName =\"target_\"+ts;\nvar win = window.open(url,targetName,\"dependent=yes,scrollbars=yes,resizable=yes\");\nwin.focus();\nbreak;\ncase \"msgbox\":\nif(!targetName) targetName =\"ServerMessage\";\nvar win = window.open(url,targetName,\"dependent=yes,scrollbars=yes,resizable=yes,width=550,height=150,left=250,top=250\");\nwin.focus();\nbreak;\ncase \"iframe\":\nvar msg = STL(\"Execute\") +system+ \" \"+ action + \".\"; \nvar eventId = STAddLog(\"info\", STL(\"Command\"), msg);\nthis.createTunnel(url, eventId, msg, targetName, true);\nbreak;\ncase \"box\":\nif(!targetName) targetName =\"ServerBox\";\nvar id = targetName.replace(/\\s+/,\"_\");\nvar win = getSTFC(id);\nif(!win)\nSTFramework.create(\'SpinTag.Window\', id, this.session,\'name:\'+targetName+\';mode:chase;state:show;url:\'+url+\';onUpdate:getSTFC(\\\'\'+id+\'\\\').translateHREF()\');\nelse {\nwin.run(url);\nwin.show();\n}\nbreak;\ncase \"silent\":\nvar id = \"proxy_\"+ts;\nvar eventId = STAddLog(\"query\", STL(\"Execute\") +system+\" \"+action, \"\");\nthis.callProxy(addURLParameter(url,\"eventId=\"+eventId));\nbreak;\ndefault:\nSTAddLog(\"error\", \"exec\", STL(\"OrderWithUnknownTargetIgnored\")+ \"\'\"+target+\"\' \"+targetName+\": \"+system+\" - \"+action+\";
\" +url);\nreturn false;\n}\nif(target.match(/self|browser|window|msgbox/))\nSTAddLog(\"info\", \"exec\", STL(\"Execute\") +system+\" \"+ action + \" in \" +target+\".\"); \nreturn true;\n}\nSTCommand.proxyMax = 3;\nSTCommand.proxyNext = 0;\nSTCommand.proxies = [];\nSTCommand.prototype.callProxy = function (url) {\nvar pxid = STCommand.proxyNext++ % STCommand.proxyMax;\nif(STCommand.proxies.length < STCommand.proxyMax) {\nSTCommand.proxies[pxid] = STFramework.create(\"SpinTag.Proxy\",\"STCommandProxy\"+pxid, this.session, \"url:\"+url+\";state:hidden\");\n}\nelse if(STCommand.proxies[pxid].status == \"busy\") {\nSTFramework.trace(\"STCommand: proxy \"+pxid+\" busy, request postphoned\", \"url\", url);\nsetTimeout(\'STCommand.prototype.callProxy(\"\'+url+\'\")\',50);\n}\nelse {\nSTCommand.proxies[pxid].url = url;\nSTCommand.proxies[pxid].run();\n}\n}\nSTCommand.prototype.createTunnel = function (url, eventId, msg, targetName, visible) {\nif(!targetName)\ntargetName = STModel.getKey(\"application/defaultTargetFrame\");\nvar name = \"_blank\";\nvar win = getSTFC(targetName);\nif(win) {\nname = targetName+\"_embeddedReceiver\";\nvar inode=getById(name);\nif(inode) {\ninode.onload=\'STUpdateLog(\'+eventId+\',\\\'notice\\\', \\\'\'+STL(\"Command\")+\'\\\', \\\'\'+msg+\'\\\')\';\ninode.onerror=\'STUpdateLog(\'+eventId+\',\\\'error\\\', \\\'\'+STL(\"Command\")+\'\\\', \\\'\'+url+\'\\\')\';\n}\nelse {\n\nwin.setText(\n\'\'\n);\n}\nwindow.open(url,name);\nwin.maximize();\n}\nelse\nSTUpdateLog(eventId,\"warning\", msg, STL(\"OrderWithUnknownTargetIgnored\")+ \" targetName:\'\"+targetName+\"\'
\" +url);\nreturn name;\n}\n\nSTCommand.prototype.onAction = function (wind) {\neval(wind);\nalert(\"STCommand wind \"+wind);\n}\nexportGlobal(\"embedURL\");\nexportGlobal(\"STCommand\");\n"); STFramework.setSource("SpinTag.MenuNode",{ constructor:"STMenuNode", action:"", state:"required" },"\nSTVersionInfo[\"SpinTag.MenuNode\"]=\"$Id: menu.class.js,v 1.76 2007-12-13 14:21:19 chris Exp $\";\nSTMenuManager = {\ndata : null, \nitems : {}, \nviews : [], \nviewSpec : null, \ncursor : null,\nstatePred : [],\ninit : function ()\n{\nthis.data = new STXML();\nthis.data.parse(\'\');\nthis.statePred[\"active\"]=0;\nthis.statePred[\"enabled\"]=1;\nthis.statePred[\"disabled\"]=2;\nthis.statePred[\"hidden\"]=3;\nthis.statePred[\"delimitter\"]=4;\nthis.statePred[\"undefined\"]=5; \nSTFramework.post(\'STModel\',\n\' open(\"registry\", \"r\");\'\n+\' register(\"registry\", -1, \"STMenuManager.loadViewSpec\", true);\'\n,\'created\');\nSTFramework.post(\'SpinTag.Key\',\'STInputController.connect(\"key\",STMenuManager,\"handleKey\");\');\n},\nsetCursor : function (node,item)\n{\nif(!this.cursor) {\nthis.cursor = document.createElement(\"img\");\nthis.cursor.src = ICONS(\"trans\");\nthis.cursor.style.position = \"absolute\";\nthis.cursor.style.zIndex = 100000;\nthis.cursor.menuCursor = true;\nthis.cursor.unselectable = \"on\"; \n\nthis.cursor.onclick = function(evt) {return STMenuManager.handleCursor(evt); };\nthis.cursor.onmouseout = function(evt) {STMenuManager.setCursor(null,null); };\ndocument.body.appendChild(this.cursor);\n}\nif(this.cursor.node&&this.cursor.item)\nthis.cursor.node.applyClass(this.cursor.item,\"menu_\"+this.cursor.node.symetrie+\"_\"+this.cursor.item.getAttribute(\"state\"));\nif(item) {\nvar g = getClientOffset(item);\nthis.cursor.style.left= g.left-1;\nthis.cursor.style.top= (g.top+g.height)-item.firstChild.offsetHeight-1;\nthis.cursor.style.width = (node.symetrie==\"horizontal\")?g.width+1:item.parentNode.parentNode.offsetWidth;\nthis.cursor.style.height = item.firstChild.offsetHeight+1;\nif(!item.getAttribute(\"state\").match(/_hover/))\nnode.applyClass(item,\"menu_\"+node.symetrie+\"_\"+item.getAttribute(\"state\")+\"_hover\");\n}\nelse {\nthis.cursor.style.left= 0;\nthis.cursor.style.top= 0;\nthis.cursor.style.width = 1;\nthis.cursor.style.height = 1;\n}\nthis.cursor.node= node;\nthis.cursor.item= item;\n},\nhandleCursor : function (evt) {\nevt = window.event?window.event:evt;\nevt.cancelBubble = true;\nif(this.cursor.node&&this.cursor.item)\nthis.cursor.node.handle(this.cursor.item);\nthis.setCursor(null,null);\n},\ncreateView : function (winId)\n{\nvar view = new STMenuNode(winId);\nthis.views[winId] = view; \nreturn view;\n},\ncreateViewEmbedded : function (winId)\n{\nvar view = new STMenuNode(winId);\nthis.views[winId] = view; \nreturn view;\n},\nloadViewSpec : function ()\n{\nif(this.viewSpec)\nreturn; \nthis.viewSpec = STModel.get(\"registry\").xgetSingle(\"/reg[@name=menu]/reg[@name=views]\");\nif(!this.viewSpec)\nreturn;\nvar viewSpec = this.viewSpec.xget(\"reg\");\nif(viewSpec.length)\nfor(var i=0; i\';\nelse\ns += \'\';\ns += menuXML;\nwhile(added--)\ns += \'\';\nrootId=\"\";\n}\nelse {\ns=\"\"+menuXML+\"\";\n}\n}\nelse {\ns=menuXML; \n}\nvar menu = new STXML();\nif(!assert(menu.parse(s),s))\nreturn;\nthis.updateCache(menu.root,rootId);\nthis.updateKeyList(menu.root,rootId);\nvar node = menu.mergeChildren(menu, parent?parent:this.data.root);\nif(rootId) { \nthis.items[rootId] = node;\n} \n;\n},\nupdateCache : function (menuNode,parentId) {\nif(menuNode.nodeName!=\"menu\")\nreturn;\nvar name = menuNode.getAttribute(\"name\");\nif(name) {\nparentId += \"_\" + name;\nthis.items[parentId] = menuNode;\n}\nfor(var i=0,len=menuNode.childNodes.length; i 123) ) \nreturn false;\nif(key==32) \nch=\"Space\";\nvar nodeId = this.itemsByKey[modifier+ch];\nif(nodeId) {\nthis.returnValue = true;\nthis.handle(nodeId);\nreturn this.returnValue;\n}\nreturn false;\n},\nhotKeyFormatter : function()\n{\nvar s=[];\ns[s.length]= \"\";\ns[s.length]= \"\";\nfor(var k in this.itemsByKey) {\nvar menuId = this.itemsByKey[k];\nvar entry = this.getMenuItem(menuId);\ns[s.length]= \"\";\ns[s.length]= \"\";\ns[s.length]= \"\";\ns[s.length]= \"\";\n}\ns[s.length]= \"
ShortcutFunktion
\"+k+\"\"+entry.getAttribute(\"desc\")+\"
\";\ns[s.length]= \"

 \"+STL(\"DefaultShortcuts\")+\"

\";\nreturn s.join(\"\");\n},\nformatter : function()\n{\nvar s=[];\nvar t=[];\nfor(var k in this.items) {\nvar cmds = STXml.xget(\"cmd/\\*\",this.items[k]);\nvar chls = STXml.xget(\"menu\",this.items[k]);\nvar key = this.items[k].getAttribute(\"key\");\nvar icon = this.items[k].getAttribute(\"icon\");\ns[s.length]= \"\";\ns[s.length]= \'\';\nif(icon)\ns[s.length]= \'\';\nelse\ns[s.length]= \'(na)\';\ns[s.length]= \'\';\ns[s.length]= \'\'+k;\nif(cmds.length)\ns[s.length]= \' (run)\';\ns[s.length]= \'\';\ns[s.length]= \'\'+chls.length+\'\';\ns[s.length]= \'\'+(key?key:\"-\")+\'\';\ns[s.length]= \'\'+this.items[k].getAttribute(\"state\")+\'\';\ns[s.length]= \'\'+this.items[k].getAttribute(\"desc\")+\'\';\ns[s.length]= \'\';\nfor(var i=0; i0?\"
\":\"\")+STXml.toString(cmds[i]).escapeXML();\ns[s.length]= \'\';\ns[s.length]= \"\";\nt[t.length]= s.join(\"\");\ns=[];\n}\nt.sort();\ns[s.length]= \'

 dump STMenuManager.data.root

\';\ns[s.length]= \"\";\ns[s.length]= \"\";\ns[s.length]= t.join(\"\");\ns[s.length]= \"
IconItemChildrenKeyStateDescriptionFunktion
\";\nreturn s.join(\"\");\n}\n} \nexportGlobal(\"STMenuManager\");\nSTMenuManager.init();\nfunction STMenuNode(winId,menuId,domParent)\n{\nthis.div = null; \nthis.myId = STMenuNode.prototype.autoincrement++;\nthis.winId = winId;\nthis.menuId = menuId;\nthis.domParent = domParent;\nthis.child = null;\nthis.symetrie = \"horizontal\"; \nthis.items = [];\nthis.menus = {};\nthis.pageClass = \"menuBarPage\"; \nthis.paneClass = \"menuBarPane\"; \nthis.subClass = \"menuBarSub\"; \nthis.barPane = 0;\nthis.details = STMenuNode.prototype.defaultDetails;\nthis.expanded = false;\nthis.onDeactivateOrgHnd = null;\nvar me = this;\nthis.initProxy = function () {me.init()};\nthis.mouseoverProxy = function (evt) {me.mouseover(evt)};\nthis.deactivateProxy =\nfunction () {\nme.collapse();\nSTMenuManager.setCursor(null,null);\nif(me.win) \nme.win.manager.selectCtrlHack();\nif(me.onDeactivateOrgHnd)\nme.onDeactivateOrgHnd();\n};\nthis.win = null;\nif(this.winId)\nthis.win = getSTFC(this.winId);\nif(this.win)\nthis.init();\n}\nSTMenuNode.prototype = {\ngetMenuItem : function(nodeID) { return STMenuManager.getMenuItem(nodeID); },\ngetItemState : function(nodeID) { return STMenuManager.getItemState(nodeID); },\nupdateMenuItem : function(nodeID,state) { return STMenuManager.enableItem(nodeID,state); },\ndefaultDetails : new Array(\"color\",\"icon\",\"text\",\"state\",\"key\",\"children\"),\nautoincrement : 1,\nsetDetails : function(details) {\nthis.details = details?details:this.defaultDetails;\n},\ninit : function(div) {\nif(div){ \nthis.div = div;\nthis.div.className = this.pageClass;\nreturn;\n}\nif(!this.win) {\nthis.div = document.body;\nthis.symetrie = \"horizontal\";\nalert(STL(\"WindowNotExist\")+ this.winId);\nreturn;\nalert(this.winId);\nsetTimeout(this.initProxy,300);\n}\nelse if(!this.menuId) {\nthis.menuId = \"\"; \nthis.div = this.win.div;\nif(this.win.isBar)\nthis.div.className = this.pageClass;\nthis.symetrie = this.win.layout;\nthis.onDeactivateOrgHnd = this.win.onDeactivate; \nthis.win.onDeactivate = this.deactivateProxy; \n}\nelse if(this.domParent && !this.div ){\nthis.div = document.createElement(\"div\");\nthis.div.className = this.subClass;\nthis.div.style.position = \"absolute\";\nthis.div.style.left= 0;\nthis.div.style.top= 0;\nthis.domParent.div.appendChild(this.div);\nthis.symetrie = \"vertical\";\n}\n},\nreset : function(menuId,domParent) {\nthis.collapse();\nthis.child=null;\nif(this.domParent!=domParent) {\nif(this.domParent.div.firstChild)\nalert(\"reset: unexpected firstchild in \"+this.menuId +\", reset to \"+ menuId);\nthis.div = null;\nthis.domParent = domParent;\n}\nelse\nthis.div.innerHTML = \"\";\nthis.menuId = menuId;\nthis.menus = {};\nthis.items = [];\nthis.init();\n},\nread : function(xmlMenu, clear) {\n;\nif(!xmlMenu || !xmlMenu.hasChildNodes()) {\n;\nSTFramework.trace(\"STMenuNode.read called with no data\",\"this.menuId\",this.menuId);\nreturn false;\n}\nif(clear) {\nthis.menus = {};\nthis.items = [];\n}\nvar items = [];\nfor(var i=0; i\'),\nreference : function(menuIds, clear) {\n;\nif(clear) {\nthis.menus = {};\nthis.items = [];\n}\nvar menus = menuIds.split(\",\");\nfor (var i=0; i\"\"\';\n},\nitemFormatter : function(menuId,node,state)\n{\n;\nif(state==\"delimitter\") {\n;\nreturn this.delimitterFormatter();\n}\nvar name = node.getAttribute(\"name\");\nvar title = node.getAttribute(\"title\");\nif(!title) title=name;\nvar key = node.getAttribute(\"key\");\nvar desc = node.getAttribute(\"desc\");\nif(!desc) desc=title;\nif(key) desc += \"\\n\"+key;\nvar bg = node.getAttribute(\"color\");\nvar isNode = node.getElementsByTagName(\"menu\").length;\nvar tooltip = title +\": \\n\"+ desc;\nvar tr=[];\ntr[tr.length] = \'\';\nbreak;\ncase \"icon\":\nvar icon = node.getAttribute(\"icon\");\nif(icon) {\ns = \'\';\n}\nelse {\ns = \" \"\nif(!dstr.match(/text/))\ns = title+\"  \";\nstyle += \"height:24;\";\n}\nbreak;\ncase \"state\":\ns = \'\';\nbreak;\ncase \"text\":\ns = title+\"   \"\ntd[td.length] = \' align=\"left\"\';\ntooltip = desc;\nbreak;\ncase \"key\":\nvar key = node.getAttribute(\"key\");\ns = \"\";\nif(key) s += key;\ns += \" \"\nbreak;\ncase \"children\":\nif(isNode)\ns = \'\';\nelse\ns = \" \";\ntd[td.length] = \' align=\"right\"\';\nbreak;\ndefault:\ns = details[i]+\"?\";\nbreak;\n}\ntd[td.length] = style+\'\" >\';\ntd[td.length] = s;\ntd[td.length] = \'\';\n}\n\ntr[tr.length] = \' title=\"\'+tooltip+\'\"\';\ntr[tr.length] = \'>\';\ntr[tr.length] = td.join(\"\");\ntr[tr.length] = \'\';\n;\nreturn tr.join(\"\");\n},\nformatter : function() {\n;\nvar tab= [];\ntab[tab.length] = \'\'; \nvar pre=\"\";\nvar post=\"\";\nif(this.symetrie == \"horizontal\") {\ntab[tab.length] = \"\";\npre += \'\'+post;\ntab[tab.length] = pre;\n}\ntab[tab.length] = this.items.join(post+pre);\nif(this.symetrie == \"horizontal\") {\ntab[tab.length] = post;\ntab[tab.length] = \"\";\n}\ntab[tab.length] = \'
\';\npost = \'
\'; \n;\nreturn tab.join(\"\");\n},\nhide : function() {\nthis.collapse();\nthis.div.style.display=\"none\";\n},\nshow : function(left,top) {\nif(arguments.length >0)\nthis.div.style.left=left;\nif(arguments.length >1)\nthis.div.style.top=top;\nthis.div.style.display=\"\";\nif(this.win) {\nthis.win.manager.selectCtrlHack(this.div, this.win.zIndex);\n}\n},\ncollapse : function() {\nif(this.expanded) {\nthis.updateItem(this.expanded,\"enabled\");\nthis.expanded = false;\n}\nif(this.child) {\nthis.child.hide();\n}\n},\nexpand : function(menuId, forceUpdate) {\n\nif(this.expanded)\nif(this.expanded != menuId)\nthis.collapse(); \nvar stnSub = this.menus[menuId];\nif(!stnSub)\nreturn false;\nthis.expanded = menuId;\nthis.updateItem(menuId,(this.symetrie==\"vertical\")?\"active_hover\":\"active\");\nif(this.child)\nthis.child.reset(menuId, this);\nelse\nthis.child = new STMenuNode(this.winId, menuId, this);\nthis.child.details = this.defaultDetails;\nthis.child.read(stnSub);\nvar tr = document.getElementById(\"menuItem\"+this.myId+menuId);\nvar left, top;\nvar itemPos = getOffset(tr);\nvar contPos = getOffset(this.div);\nif(this.symetrie == \"vertical\") {\nleft = this.div.firstChild.offsetWidth+1; \ntop = itemPos.top - contPos.top-1;\n}\nelse { \nleft = itemPos.left- contPos.left; \ntop = contPos.height+2; \n}\nthis.child.show(left,top);\nif(0)\nwindow.status =\n\"expand item l:\"+ itemPos.left+\" w:\"+ itemPos.width+\" t:\"+ itemPos.top +\" h:\"+ itemPos.height+\n\" container l:\"+ contPos.left+\" w:\"+ contPos.width+\" t:\"+ contPos.top +\" h:\"+ contPos.height+\n\" set \"+\" a:\"+ this.symetrie+\" l:\"+ left+\" t:\"+ top;\n},\n\ngetItemFromEvent : function(evt) {\nevt = window.event?window.event:evt;\nvar node = window.event?event.srcElement:evt.target;\nwhile(node&&!node.id)\nnode = node.parentNode;\nif(node&&node.id.match(/^menuItem/))\nreturn node;\nreturn null;\n},\napplyClass : function(node,className) {\nif(this.symetrie == \"vertical\") {\nvar nodes = node.childNodes;\nfor(var i=0; i\');\nthis.dc.style.display = this.state==\"hidden\"?\'none\':\'inline\';\nif(this.macros.search(/\\([^\\)]+\\)$/)!=-1) { \nvar value = this.macros.slice(1,this.macros.length-1);\nvalue = value.split(\",\");\nfor (var i=0; i this.timeout) {\nclearInterval(this.timer);\nthis.callTime = now - this.callTime;\nif(this.status == \"busy\") \nthis.dc.innerHTML = \'\';\nthis.count=0;\n}\nelse\nthis.dc.innerHTML += \". \";\n}\nSpinTagProxy.prototype.onReturn = function(wind)\n{\nthis.status = \"ready\";\nif(this.errorMsg)\nalert(this.errorMsg);\nthis.update();\n}\nSpinTagProxy.prototype.term = function()\n{\n}\nSpinTagProxy.prototype.formatter = function ()\n{\nvar skin = new Template(this.value);\nreturn skin.render(this.nvl);\n}\nSpinTagProxy.prototype.update = function()\n{\nif(this.onBeforeUpdate)\nthis.onBeforeUpdate(this);\nvar s = this.formatter();\nvar n = document.createElement(\"div\");\nn.innerHTML = s;\nwhile (this.dc.firstChild)\nthis.dc.removeChild(this.dc.firstChild);\nwhile (n.firstChild)\nthis.dc.appendChild(n.firstChild);\nSTFramework.activate(this.dc);\nif(this.onUpdate)\nthis.onUpdate(this.dc);\nSTFramework.fire(\"onComponent_\"+this.clientCtx+\"_updated\");\n}\nexportGlobal(\"SpinTagProxy\");\n"); STFramework.setSource("SpinTag.Monitor",{ constructor:"", action:"comp/response.php", state:"required" },"\nfunction SpinTagMonitor (clientCtx, serverCtx)\n{\nthis.clientCtx = clientCtx;\nthis.serverCtx = serverCtx;\nthis.requestValue = \"\";\nthis.value = {clientIP:\"localhost\", serverIP:\"unknown\", start:0, stop:0, elapse:0};\nthis.visible = 5;\nthis.history = Array(); \nfor (var i=0; i\';\ns += \'\';\ns += \'Server: \'\nif(this.value.serverName)\ns += this.value.serverName;\nvar avg = this.count>0? Math.round(this.totalElapse*1000/this.count)/1000 : 0;\nvar togo = (this.samples-(this.count%this.samples))%this.samples;\ns += \'
Mittel: \' + avg + \'s\';\ns += \'
M\'+this.count+\' dauerte \' + this.value.elapse + \'s\';\ns += \'\';\ns += \'\';\ns += \'\';\ns += \'\';\ns += \'\';\nfor (var i=0; isecWidth)\ncolor=\"red\";\nif (val>2*secWidth)\nval=2*secWidth;\ns += \'\';\n}\ns += \'
\';\ns += \'\';\ns += \'\';\ns += \'\';\ns += \'
0.5
1.0
2.0sec
\';\nif (!this.embedded)\ns += \'\' + this.spin.text() + \'\\n\';\ns += \'\\n\';\nreturn s;\n}\nSpinTagMonitor.prototype.shiftHistory = function()\n{\nfor (var i=1; i= 100)\nzoom = 100;\nif ((zoom+delta)<= 0)\n{\nzoom = 0;\nnode.style.display = \"none\";\n}\nnode.style.zoom = \"\"+zoom+\"%\";\nif (zoom<100 && zoom>0)\nsetTimeout(\"STFC[\"+this.cid+\"].animateZoom(\"+zoom+\",\"+delta+\")\",10);\n}\nSpinTagToggle.prototype.show = function(style)\n{\nvar target = getById(this.subject);\nif (!target.activated)\n{\nif (window[\"STFramework\"])\nSTFramework.activate(target);\ntarget.activated = true;\n}\nthis.img.src = this.img.open;\ntarget.style.display = \"\";\nif (target.scrollIntoView)\n{\nif (arguments.length==1 && style==\"icon\")\nthis.img.scrollIntoView();\nelse\ntarget.scrollIntoView();\n}\nif (this.zoom)\nthis.animateZoom(0,10);\nthis.open=true;\n}\nSpinTagToggle.prototype.toggle = function()\n{\nvar target = getById(this.subject);\nif (!this.open)\n{\nif (!target.activated)\n{\nSTFramework.activate(target);\ntarget.activated = true;\n}\nthis.img.src = this.img.open;\ntarget.style.display = \"\";\nif (this.zoom)\nthis.animateZoom(0,17);\nthis.open=true;\n}\nelse\n{\nthis.img.src = this.img.close;\nif (this.zoom)\nthis.animateZoom(100,-17);\nelse\ntarget.style.display = \"none\";\nthis.open=false;\n}\n}\nexportGlobal(\"SpinTagToggle\");\n"); STFramework.setSource("SpinTag.Tab",{ constructor:"", action:"", state:"required" },"\nSTVersionInfo[\"SpinTag.Tab\"]=\"$Id: tab.js,v 1.45 2006-01-13 14:59:11 mario Exp $\";\nfunction SpinTagTab (clientCtx, serverCtx)\n{\nthis.clientCtx = clientCtx;\nthis.serverCtx = serverCtx;\nthis.requestValue = \"\";\nthis.header = null;\nthis.content = null;\nthis.idSelected = \"\";\nthis.idHeader = \"\";\nthis.tabVisible = true;\nthis.tplTabActive = \"defTabActive\";\nthis.tplTabInactive = \"defTabInactive\";\nthis.cssContent = \"defTabContent\";\nthis.cssConnector = \"defTabConnector\";\nthis.onSelectTab = \"\"; \nthis.orientation = \"top\"; \nthis.timer = 0;\nthis.scrollable = true;\n}\nSpinTagTab.properties = [\n\"orientation\",\n\"tplTabActive\",\n\"tplTabInactive\",\n\"cssContent\",\n\"cssConnector\",\n\"idHeader\",\n\"tabVisible\",\n\"onSelectTab\",\n\"scrollable\"\n];\nSpinTagTab.prototype = {\ntypeName : \"SpinTag.Tab\",\nintrospection : function() { return SpinTagTab.properties; },\ninitDefTab : function() {\nTemplateDictionary[\"defTabActive\"] = new Template(\n\'\'\n+ \'\'\n+ \'\'\n+ \'\'\n+\'\'\n+\'
{s:tab}
\'\n);\nTemplateDictionary[\"defTabInactive\"] = new Template(\n\'\'\n+ \'\'\n+ \'\'\n+ \'\'\n+\'\'\n+\'
{s:tab}
\'\n);\n},\ninit : function ()\n{\nthis.content = document.createElement(\"div\");\nthis.content.id = this.clientCtx+\"_content\";\nthis.content.className = this.cssContent;\nif(this.idHeader) \nthis.initTabs(getById(this.idHeader));\nvar ctx = getById(this.clientCtx);\nthis.initTabs(ctx); \nvar s= \'\';\nswitch(this.orientation) {\ncase \"top\":\ns +=\n\'\'+\n\'\'+\n\'\';\nbreak;\ncase \"bottom\":\ns +=\n\'\'+\n\'\'+\n\'\';\nbreak;\ncase \"left\":\ns +=\n\'\'+\n\'\'+\n\'\'+\n\'\' +\n\'\';\nbreak;\ncase \"right\":\ns +=\n\'\'+\n\'\'+\n\'\'+\n\'\'+\n\'\';\nbreak;\ndefault:\nalert(\'invalid orientation: \'+this.orientation);\nbreak;\n}\ns += \'
\';\nctx.innerHTML = s;\nvar cn = getById(this.clientCtx+\"_body\");\ncn.appendChild(this.content);\nctx.style.display = \'block\';\nthis.header = getById(this.idHeader?this.idHeader:this.clientCtx+\"_header\");\nif(this.idSelected)\nsetTimeout(\"STFC[\"+this.cid+\"].focus()\",1);\n},\ninitTabs : function(node) {\nwhile(node.hasChildNodes()) {\nvar child = node.firstChild;\nif(child.nodeType != 1) {\nnode.removeChild(child);\ncontinue;\n}\nvar url = \"\";\nvar href = child.getAttribute(\"href\");\nif(href) {\nvar r = /((.*)\\/(de|en)\\/(.*))\\/#_STA_.*$/;\nr.exec(href);\nhref = RegExp.$1;\nurl = RegExp.$2+\"/index.php?vp=\"+RegExp.$4+\"&dc=plain\";\n}\nnode.removeChild(child);\nvar tab = child.getAttribute(\"tab\");\nif(!tab) {\nSTFramework.activate(child); \ncontinue;\n}\nvar selected = child.getAttribute(\"show\");\nvar present = this.findTab(tab);\nif(present) { \nthis.content.replaceChild(child,present);\nchild.id = present.id;\nchild.setAttribute(\"vp\", present.getAttribute(\"vp\"));\nif(present.getAttribute(\"show\")==\"hidden\") {\nif(selected==\"yes\")\nthis.idSelected = child.id;\nchild.setAttribute(\"show\",\"hidden\");\n}\ncontinue;\n}\nif(!child.id)\nchild.id = this.clientCtx + \"_\"+tab;\nif(selected==\"yes\")\nthis.idSelected = child.id;\nif(href) {\nchild = newNode(\n\'
\'\n+\'
\'\n+\'
\');\n}\nchild.style.display = \'none\';\nthis.content.appendChild(child);\n}\n},\nfindTab : function(tab) {\nfor(var i=0; i0) {\nthis.idSelected=selected;\nvar proxy = null; \nif((proxy=getById(selected+\'_proxy\'))&&!getSTFC(selected+\'_proxy\')) { \nif(proxy.className!=\"SpinTag2\")\nproxy.className=\"SpinTag\";\nSTFramework.activate(proxy.parentNode);\nSTFramework.post(selected+\'_proxy\',\'STFC[\'+this.cid+\'].update()\',\"updated\");\nthis.timer = setTimeout(\'STFC[\'+this.cid+\'].update()\',1500);\nreturn;\n}\n}\nclearTimeout(this.timer);\nvar tplActive = TemplateDictionary[this.tplTabActive];\nvar tplInactive = TemplateDictionary[this.tplTabInactive];\ntplActive.setDefault(\"_cid_\",this.cid);\ntplInactive.setDefault(\"_cid_\",this.cid);\nvar s = \'\';\nvar pre = \'\';\nif(this.orientation==\"top\"||this.orientation==\"bottom\") {\ns += \'\';\npre = \'\';\n}\nvar first=true;\nfor(var i=0; i\';\ns += \'
\';\nvar post = \'
\';\npost = \'
\';\nif(this.tabVisible)\nthis.header.innerHTML = s;\n},\nfocus : function (name) {\nif(arguments.length>0)\nthis.selectByName(name);\nvar ctx=this.header; \nif (ctx.scrollIntoView && this.scrollable)\nctx.scrollIntoView();\n},\nselect : function (id)\n{\nthis.idSelected=id;\nif(this.content) {\nthis.update(id);\n}\nelse\n{\nalert(\"schedule select\");\nvar me = this;\nsetTimeout(function(){me.select(id)}, 100);\n}\n},\nselectByName : function (name) {\nvar tab = this.findTab(name);\nif(tab) {\nthis.select(tab.id);\nreturn tab.id;\n}\nreturn 0;\n},\napplyViewPath : function (viewpath) {\nif(viewpath) {\nvar p = viewpath.split(\"\\/\");\nvar t = p.shift();\nif(!p.length) \nthis.focus(t);\nelse {\nvar id = this.selectByName(t);\np = p.join(\"/\");\nif(getSTFC(id+\'_proxy\')) \nSTFramework.post(id+\'_proxy\',\'STFramework.applyViewPath(\"\'+p+\'\")\',\"updated\");\nelse\nSTFramework.applyViewPath(p); \n}\n}\n}\n}\nexportGlobal(\"SpinTagTab\");\n"); STFramework.setSource("SpinTag.Window",{ constructor:"", action:"comp/proxy.php", state:"required" },"\nSTVersionInfo[\"SpinTag.Window\"]=\"$Id: window.js,v 1.273 2008-11-20 16:51:34 chris Exp $\";\nSTWindowManager = {\nstepTime : 100, \nchaseDelay : 5, \nfitDelay : 20, \nminPinupMarginTop : 60, \nminPinupMarginLeft : 0, \nminPinupMarginRight : 21, \nminFullScreenMarginLeft : 0, \nwindows : [],\nwinActive : null,\ntimer : null,\nclock : 0,\nidle : 0,\nlastX : 0,\nlastY : 0,\nmenuState : \"enabled\", \n_scrollTop : -1,\n_scrollLeft : -1,\n_scrollHeight : -1,\n_scrollWidth : -1,\n_clientHeight : -1,\n_clientWidth : -1,\ninit : function() {\nthis.runProxy = function(evt) {STWindowManager.run()};\nwindow.onresize = function(evt) {STWindowManager.onresize(evt)};\nwindow.onscroll = function(evt) {STWindowManager.onscroll(evt)};\ndocument.onclick = function(evt) {STWindowManager.onclick(evt)};\nthis.minPinupMarginRight=this.isLockedToScreen()?21:0;\nthis.wait = 0;\nthis.timer = setInterval(this.runProxy, this.stepTime);\nreturn this;\n},\ntrigger : function() {\nthis.setActiveApp();\nthis.run(true);\n},\nformatter : function() {\nvar sa = [];\nsa[sa.length]= \n\"
\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n; \nif(this.winActive) {\nvar pos = getOffset(getById(this.winActive.clientCtx));\nwith (this.winActive) {\nsa[sa.length]= \n\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n+\"\"\n;\n} \n}\nelse\nsa[sa.length]= \"\";\nsa[sa.length]= \"
STWindowManager
isLockedToScreen:\"+this.isLockedToScreen()\n+\" (toggle)
clock:\"+this.clock+\"
chase delay:\"+(this.stepTime*this.chaseDelay)+\" ms
fit delay:\"+(this.stepTime*this.fitDelay)+\" ms

getScrollLeft/Top:\"+this.getScrollLeft()+\"/\"+this.getScrollTop()+\"
getClient/ScrollWidth:\"+this.getClientWidth()+\"/\"+this.getScrollWidth()+\"
getClient/ScrollHeight:\"+this.getClientHeight()+\"/\"+this.getScrollHeight()+\"
minPinupMarginLeft/Top/Right:\"+this.minPinupMarginLeft+\"/\"+this.minPinupMarginTop+\"/\"+this.minPinupMarginRight+\"
hasHScroll/VScroll:\"+(this.hasHScroll(document.body)?\"yes\":\"no\")+\"/\"+(this.hasVScroll(document.body)?\"yes\":\"no\")+\"

Active Window
winActive.clientCtx:\"\n+\"\"+clientCtx+\"\"\n+\"
mode/state:\"+mode+\"/\"+state+\"
zIndex:\"+zIndex+\"
frame style left:\"+frame.style.left+\"
get offset left:\"+pos.left+\"
frame style top:\"+frame.style.top+\"
get offset top:\"+pos.top+\"

div style width:\"+div.style.width+\"
div client/offset/scroll Width:\"+div.clientWidth+\"/\"+div.offsetWidth+\"/\"+div.scrollWidth+\"
div style height:\"+div.style.height+\"
div client/offset/scroll Height:\"+div.clientHeight+\"/\"+div.offsetHeight+\"/\"+div.scrollHeight+\"
hasHScroll/VScroll:\"+(this.hasHScroll(div)?\"yes\":\"no\")+\"/\"+(this.hasVScroll(div)?\"yes\":\"no\")+\"
no active window
\";\nreturn sa.join(\"\");\n},\nrun : function(forced) {\n;\nvar dcLeft = this.getScrollLeft();\nvar dcTop = this.getScrollTop();\nif(this.lastX!=dcLeft || this.lastY!=dcTop) {\nthis.lastX=dcLeft;\nthis.lastY=dcTop;\nthis.wait=this.clock+this.chaseDelay;\n}\nelse if(this.wait==this.clock) {\nthis.wait=0;\nif(this.isLockedToScreen()) {\ndocument.body.scrollTop = 0;\ndocument.body.scrollLeft = 0;\n}\nelse\nthis.moveDcTo(dcLeft,dcTop);\n}\nif(this.clock%(8*this.fitDelay)==0 || forced) \nthis.clearCache();\nif(!this.wait && (this.clock%this.fitDelay==0 || forced)) {\nvar ch = this.getClientHeight();\nvar minMarg=0;\nfor(var i=0; iminMarg && bevt.clientY+dm || a.top+a.heightevt.clientX+dm || a.left+a.widthb.left && a.leftb.top && a.top0 && region) {\nvar regPos = getClientOffset(region);\nfor(var i=0;i b.zIndex )? -1 : 1; }\nthis.windows.sort(winsort);\nfor(var i=0;i\';\nvar title \n= \'\'\n+ \'\'\n+ (this.icon?\'\':\'\')\n+ \'\"\n+ \"
\'\n+ (this.isBar?\'\"\"\' : this.name)\n+ \"
\";\nvar f = [];\nf[f.length]= \"\";\nf[f.length]= \"\";\nif(this.layout==\"horizontal\") {\nif(this.isBar) {\nf[f.length]= \'\';\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\n}\nelse {\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\n\n}\n}\nelse if(this.layout==\"vertical\") {\nif(this.isBar) {\nf[f.length]= \'\';\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\n}\nelse {\nf[f.length]= \"\";\n\n}\n}\nf[f.length]= \"\";\nf[f.length]= \"
\"\"\"+title+\"\"+title+\"\"\"
\"+title+\"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"\";\nf[f.length]= \"
\"+title+\"
\";\nf[f.length]= \"
\";\nf[f.length]= \"\";\nvar trans = \'\"\"\';\nif(this.resizeBarSize) {\nf[f.length]= \'\';\nf[f.length]= \'\';\nf[f.length]= \'\';\nf[f.length]= \"\";\nf[f.length]= \'\';\n}\nf[f.length]= \"\";\nif(this.resizeBarSize) {\nf[f.length]= \'\';\nf[f.length]= \"\";\nf[f.length]= \'\';\nf[f.length]= \'\';\nf[f.length]= \'\';\n}\nf[f.length]= \"
\'+trans+\'\'+trans+\'\'+trans+\'
\'+trans+\'
\'+trans+\'
\'+trans+\'\'+trans+\'\'+trans+\'
\";\nreturn f.join(\"\");\n},\nupdate : function(){\n;\nvar ctx = this.clientCtx;\nif(this.isFrameless||this.takeFullScreen||!this.isResizable) {\nthis.resizeBarSize=0;\n}\nthis.frame.style.width = \"1%\";\nthis.frame.innerHTML = this.formatter();\nthis.div = getById(ctx+\"text\");\nthis.div.onmousedown=this.raiseProxy;\nthis.div.style.overflow = (this.isBar||!(this.takeFullScreen||this.isResizable)?\"\":\"auto\");\nthis.title = getById(ctx+\"title\");\nvar bar = getById(ctx+\"bar\"); \nif(bar) {\nif(!this.takeFullScreen) {\nbar.onmousedown=this.mdDragProxy;\nbar.style.cursor =\"move\";\n}\nbar.onselectstart = bar.ondragstart = function(){return false;};\nbar.ondblclick = this.minimizeProxy;\nthis.menu = STMenuManager.createViewEmbedded(this.clientCtx);\nthis.menu.menuId = \"_windows_\"+this.clientCtx; \nthis.menu.details = Array(\"icon\");\nthis.menu.pageClass = \"STWindowMenuPage\";\nthis.menu.paneClass = \"STWindowMenuPane\";\nthis.menu.symetrie = \"horizontal\"; \nthis.menu.init(getById(this.clientCtx+\"menu\"));\n}\nvar grap = getById(ctx+\"grab\"); \nif(grap && !this.takeFullScreen) {\ngrap.onmousedown=this.mdDragProxy;\ngrap.style.cursor =\"move\";\n}\nthis.setWidth(this.width,true);\nthis.setHeight(this.height,true);\nthis.setX(this.x,true);\nthis.setY(this.y,true);\nthis.setZIndex(this.zIndex);\nthis.updateContent();\nif(this.onLoad)\nthis.onLoad();\nthis.registerMenu();\nthis[this.state]();\n;\n},\nupdateContent : function() {\n;\nvar skin = new Template(this.value);\nskin.setDefault(\"_stcpath_\",STFramework.getDirectory());\nskin.setDefault(\"_session_\",STSession);\nskin.setDefault(\"_window_\",\'STFC[\'+this.cid+\']\');\nvar s = skin.render(this.nvl);\nvar cd = s.split(//g);\nif(cd.length>1) {\ns=\"\";\nfor(var i=0; i < cd.length; i++)\nif(i%2 == 0)\ns += cd[i];\nelse\ns += \'cdata\';\n}\nthis.setText(s);\nif(cd.length>1) {\nfor(var i=0; i < cd.length; i++)\nif(i%2 == 1) {\nvar ctext = document.createTextNode(cd[i]);\nvar n = getById(\"cdata_placeholder_\"+i);\nn.parentNode.replaceChild(ctext,n);\n}\n}\nSTFramework.activate(this.div);\nif(this.onUpdate)\nSTFramework.eval(this.onUpdate);\nSTFramework.fire(\"onComponent_\"+this.clientCtx+\"_updated\");\n;\n},\nisActive : function() {\nreturn this.manager.isActive(this);\n},\nsetMacro : function(name,value) {\nthis.nvl[name] = value;\n},\ngetMacro : function(name) {\nreturn this.nvl[name]?this.nvl[name]:\"\";\n},\nsetContent : function(text) {\nthis.value = text;\nthis.updateContent();\n},\nsetText : function(text) {\nremoveHandler(this.div,true);\nthis.div.innerHTML = text;\n},\nappendText : function(text) {\nvar div = document.createElement(\"div\");\ndiv.innerHTML = text;\nthis.div.appendChild(div);\n},\ngetText : function() {\nreturn this.div.innerHTML;\n},\nsetTitle : function (title, text) {\nif(!this.title)\nreturn false;\nif(!text) {\nthis.title.firstChild.innerHTML = title;\n}\nelse {\nthis.title.firstChild.innerHTML = \"\";\nvar tdList = this.title.childNodes;\nfor(var i=0; i< tdList.length; i++)\nif(tdList[i].title == title) {\ntdList[i].innerHTML = text;\nbreak;\n}\nif(i==tdList.length) {\nvar td = document.createElement(\"td\");\ntd.style.whiteSpace = \"nowrap\";\ntd.title = title;\ntd.innerHTML = text;\nthis.title.appendChild(td);\n}\n}\n},\n\ngetX : function() { return this.x; },\ngetY : function() { return this.y; },\ngetWidth : function() { return this.frame.offsetWidth; },\ngetHeight : function() { return this.frame.offsetHeight; },\nsetX : function(x,force) {\nx = (x<1?0:x);\nif(x!=this.x||force) {\nthis.x=x;\nthis.frame.style.left= this.x+\"px\";\nreturn true;\n}\nreturn false;\n},\nsetY : function(y,force) {\ny=(y<1?0:y);\nif(y!=this.y||force) {\nthis.y=y;\nthis.frame.style.top= this.y +\"px\";\nreturn true;\n}\nreturn false;\n},\nsetWidth : function(w,force) {\nw = (w<1?0:w);\nif(w!=this.width||force) {\nthis.width=w;\nvar node=null;\nif(!w)\nthis.div.style.width=\"\";\nelse if(this.sizeByContent && (node=getById(this.sizeByContent)) ) {\nif(this.resizeBarSize)\nw -= (2+2*this.resizeBarSize);\nnode.style.width= (w<1?1:w) +\"px\";\n}\nelse if(w>this.minWidth) {\nw -= (2+2*this.resizeBarSize); \nthis.div.style.width= (w<1?1:w) +\"px\";\n}\nreturn true;\n}\nreturn false;\n},\nsetHeight : function(h,force) {\nh = (h<1?0:h);\nif(h!=this.height||force) {\nthis.height=h;\nvar node=null;\nif(!h) {\nthis.div.style.height= \"\";\nreturn true;\n}\nelse if(this.sizeByContent && (node=getById(this.sizeByContent)) ) {\nh -= 20;\nnode.style.height= (h<1?1:h) +\"px\";\nreturn true;\n}\nelse if(this.isBar || h>this.minHeight) {\nh -= (this.frame.offsetHeight -this.div.offsetHeight);\nthis.div.style.height= (h<1?1:h)+\"px\";\nreturn true;\n}\n}\nreturn false;\n},\ngetParentWindow : function() {\nvar node = getById(this.clientCtx);\nwhile(node && (node=node.parentNode)) {\nif(node.nodeType==1 && node.getAttribute(\"comp\")==\"SpinTag.Window\")\nreturn getSTFC(node.id);\n}\nreturn null;\n},\nscrollTo : function(x,y) {\nvar ret=false;\nvar geo = getOffset(this.div);\nif(!isNaN(x)) {\nx = x - geo.left + this.div.scrollLeft;\nif(this.div.clientWidth==this.div.scrollWidth)\n; \nelse if(x-this.minScrollMarginthis.div.scrollLeft+this.div.clientWidth) {\nthis.div.scrollLeft = Math.min(this.div.scrollWidth-this.div.clientWidth,x+this.minScrollMargin-this.div.clientWidth);\nret=true;\n}\n}\nif(!isNaN(y)) {\ny = y - geo.top + this.div.scrollTop;\nif(this.div.clientHeight>=this.div.scrollHeight)\n;\nelse if(y-this.minScrollMarginthis.div.scrollTop+this.div.clientHeight) {\nthis.div.scrollTop = y+this.minScrollMargin-this.div.clientHeight; \nret=true;\n}\n}\nvar p=this.getParentWindow()\nif(p){\np.scrollTo(x,y);\n}\nelse if(!this.manager.isLockedToScreen())\n;\nif(0)\nstatus = this.clientCtx\n+\" y:\"+y+ \" this.div.scrollTop:\"+this.div.scrollTop\n+\" this.div.scrollHeight:\"+this.div.scrollHeight\n+\" this.div.clientHeight:\"+this.div.clientHeight;\nreturn ret;\n},\nmoveTo : function(x,y,w,h) {\n\nvar changed=false;\nif(!isNaN(x)) changed |= this.setX(x);\nif(!isNaN(y)) changed |= this.setY(y);\nif(arguments.length>2 && (this.takeFullScreen||this.isResizable)) {\nif(!isNaN(w)) changed |= this.setWidth(w);\nif(!isNaN(h)) changed |= this.setHeight(h);\n}\nif(changed) {\nthis.manager.selectCtrlHack();\n}\nreturn changed;\n},\ncalcEmbed : function (t,dt,s,ds,dsmin,maximize){\nif(ds=t+dt || (maximize && s+ds>t+dt))\ns=t+Math.max(dt-ds,0);\nelse if(s+dsmin>t+dt)\ns=t+Math.max(dt-dsmin,0);\nif(ds>dt-(s-t))\nds=dt-(s-t);\nreturn {\'s\':s,\'ds\':ds}\n},\n\ncalcPos : function (x,y,w,h,maximize){\nvar locked = this.manager.isLockedToScreen();\nvar takeFullScreen = (!locked && this.mode==\"chase\")?false:this.takeFullScreen;\nvar sTop = (!locked && this.mode!=\"chase\")?0:this.manager.getScrollTop();\nvar sLeft = (!locked && this.mode!=\"chase\")?0:this.manager.getScrollLeft();\nvar xmax = this.manager.getClientWidth(); \nvar ymax = this.manager.getClientHeight(); \nvar a = getOffset(this.frame.firstChild);\nvar b = getOffset(this.div);\nvar xmin = Math.min(this.minWidth, a.width); \nvar ymin = Math.min(this.minHeight, a.height); \nif(this.layout==\"vertical\" && a.width -b.width -(2+2*this.resizeBarSize)>0) {\nxmin = a.width;\n}\nvar fdx = Math.min(a.width -b.width,12);\nvar fdy = a.height -b.height;\nif(isNaN(x)) x = a.left;\nif(isNaN(y)) y = a.top;\nif(isNaN(w)) w = a.width;\nif(isNaN(h)) h = a.height;\nif(this.isFrameless)\nmaximize=true;\nif(takeFullScreen && !this.isMinimized()) {\nif(1||locked) { \nw = xmax - this.x;\nh = ymax - this.y;\n}\nelse {\nmaximize = true;\n}\nif(this.mode!=\"inline\") {\nx = this.manager.minFullScreenMarginLeft;\ny = this.minMarginTop;\n}\n}\nelse if(!locked && this.mode!=\"chase\") {\nxmax = 64000; \nymax = 64000; \n}\nelse {\nxmax -= (this.isBar||this.getParentWindow()||this.takeFullScreen?0:this.manager.minPinupMarginRight);\nymax -= this.minMarginTop;\n}\nif(!takeFullScreen && maximize) {\nvar c = this.getContentSize();\nw = fdx+c.width;\nh = fdy+c.height;\nif(this.manager.hasVScroll(this.div)) w += (b.width-this.div.clientWidth);\nif(this.manager.hasHScroll(this.div)) h += (b.height-this.div.clientHeight);\n}\nif(x0){\nthis.zIndex = zIndex;\nthis.frame.style.zIndex = zIndex;\n}\n},\nraise : function () {\n;\nthis.manager.setActive(this);\nthis.updateCmd();\nvar zi=0;\nif(this.mode == \"inline\"||(this.takeFullScreen&&this.isFrameless)) {\nif(this.zIndex!=SpinTagWindow.prototype.zIndexInline)\nzi = ++SpinTagWindow.prototype.zIndexInline;\n}\nelse if(this.isBar||this.isMinimized()) {\nif(this.zIndex!=SpinTagWindow.prototype.zIndexBar)\nzi = ++SpinTagWindow.prototype.zIndexBar;\n}\nelse if(this.zIndex!=SpinTagWindow.prototype.zIndexWindow)\nzi = ++SpinTagWindow.prototype.zIndexWindow;\nif(zi) {\nthis.setZIndex(zi);\nthis.manager.selectCtrlHack();\n}\n;\nreturn true;\n},\nisMinimized : function() { return this._store.x > -1; },\ntoggle : function() {\nif(this.state != \"hide\")\nthis.hide();\nelse\nthis.maximize();\n},\nshow : function() {\nthis.state = \"show\";\nthis.restore();\nthis[this.mode]();\n},\nhide : function() {\nthis.previousState = this.state;\nif(this.state != \"hide\")\n{\nif(this.preOnclose)\nthis.preOnclose(); \nthis.state = \"hide\";\nthis.manager.selectCtrlHack();\nthis.updateCmd();\nif(this.onclose)\nthis.onclose();\n}\n},\nhideAbs : function() {\nif(this.mode!=\"inline\" && this.state!=\"minimize\")\nthis.hide();\nelse\nthis.previousState = this.state;\n},\nshowAbs : function() {\nif(this.previousState) {\nthis[this.previousState]();\n}\n},\nminimize : function() {\nif(this.state != \"minimize\") {\nthis.state = \"hide\";\nthis.manager.selectCtrlHack();\nthis.state = \"minimize\";\nthis._store.mode = this.mode;\nthis._store.x = this.getX();\nthis._store.y = this.getY();\nif(this._store.mx == -1) { \nthis._store.mx = this.getX();\nthis._store.my = this.getY();\n}\nthis.setX(this._store.mx);\nthis.setY(this._store.my);\nvar bar=getById(this.clientCtx+\"bar\");\nif(bar) {\nbar.ondblclick = this.maximizeProxy;\nbar.onmousedown = this.mdDragProxy;\nbar.style.cursor =\"move\";\nif(!(this.title.childNodes.length>1||this.title.firstChild.innerHTML.length))\nthis.setTitle(this.name);\n}\nthis.chase();\n}\n},\nrestore : function() {\nthis.state = \"restore\";\nif(this.isMinimized()) {\nthis._store.mx = this.getX();\nthis._store.my = this.getY();\nthis.setX(this._store.x);\nthis.setY(this._store.y);\nthis.mode = this._store.mode;\nthis._store.x = -1;\nthis._store.y = -1;\nthis._store.mode=\"\";\n}\nvar p=this.getParentWindow()\nif(this.mode == \"pinup\" && !this.manager.isLockedToScreen())\nthis.moveTo(NaN,this.manager.getScrollTop()+this.minMarginTop+(p?p.div.scrollTop:0));\nelse if(this.mode == \"inline\") {\nvar o = getOffset(this.frame);\nif(this.manager.isLockedToScreen())\nif(o.top+o.height>this.manager.getClientHeight())\nthis.manager.lockToScreen(false);\nif(!this.manager.isLockedToScreen())\nif(p)\np.scrollTo(0,0);\nelse\nwindow.scrollTo(0,Math.max(o.top-this.minMarginTop,0));\n}\nvar bar=getById(this.clientCtx+\"bar\");\nif(bar) {\nbar.ondblclick = this.minimizeProxy;\nif(this.takeFullScreen) {\nbar.onmousedown=null;\nbar.style.cursor =\"\";\n}\n}\n},\nmaximize : function() {\nthis.restore();\nthis.state = \"maximize\";\nthis.fitOnScreen(true);\nthis[this.mode]();\n},\ncenter : function() {\nvar clientW = this.manager.getClientWidth();\nvar clientH = this.manager.getClientHeight();\nvar W = this.getWidth();\nvar H = this.getHeight();\nvar verticalOffset = 50;\nthis.setX( Math.floor((clientW-W)/2) );\nthis.setY( verticalOffset + Math.floor((clientH-H)/2) );\n},\ninline : function()\n{\nif(window[\"STModel\"]\n&& STModel.getKey(\"application/spreading\")!=\"document\"\n&& !this.takeFullScreen) {\nthis.pinup();\nreturn;\n}\nthis.mode = \"inline\";\nthis.frame.style.position = \"static\";\nvar pos = getOffset(this.frame);\nthis.moveTo(pos.left,pos.top);\n},\npinup : function()\n{\nthis.mode = \"pinup\";\nthis.frame.style.position = \"absolute\";\nthis.raise();\n},\nchase : function()\n{\n\n\nthis.mode = \"chase\";\nthis.frame.style.position = \"absolute\";\nthis.raise();\n\n},\nvertical : function() {\nif(this.layout != \"vertical\") {\nthis.layout = \"vertical\";\nthis.update();\nif(this.isBar)\nthis.chase();\n}\n},\nhorizontal : function() {\nif(this.layout != \"horizontal\") {\nthis.layout = \"horizontal\";\nthis.update();\nif(this.isBar)\nthis.chase();\n}\n},\nupdateCmd : function() {\nvar upCmd = this.state + (this.isActive()?\"A\":\"I\") + this.mode;\nif(upCmd==this._upCmdLast) {\nreturn;\n}\nif(this[\"on\"+this.state])\nthis[\"on\"+this.state]();\nvar bar = getById(this.clientCtx+\"bar\");\nif(bar) {\nvar css =\n\"STWBar_\"\n+ (this.isMinimized()?\"minimized\":this.mode)\n+ (this.isActive()?\"_active\":\"\")\n;\nbar.parentNode.className = css;\nbar.firstChild.className = css;\nthis._upCmdLast = upCmd;\n}\nswitch(this.state) {\ncase \"hide\":\nthis.frame.style.display=\'none\';\nbreak;\ncase \"show\":\nthis.frame.style.display=\'\'; \nbreak;\ncase \"minimize\":\n\nvar c = getById(this.clientCtx+\"content\");\nif(!c) c = getById(this.clientCtx+\"text\");\nif(c) c.style.display=\'none\';\nthis.frame.style.display=\'\';\nbreak;\ncase \"restore\":\ncase \"maximize\":\nvar c = getById(this.clientCtx+\"content\");\nif(!c) c=getById(this.clientCtx+\"text\");\nif(c) c.style.display=\'\';\nthis.frame.style.display=\'\'; \nbreak;\ndefault:\nalert(\"SpinTagWindow: updateCmd invalid state:\"+this.state+\", mode:\"+this.mode);\nbreak;\n}\nthis.onUpdateCmd();\n},\nonUpdateCmd : function() {\nvar menuRoot=\"_windows_\"+this.clientCtx+\"_\";\nvar its = [];\nits[its.length] = menuRoot+\"show\"; its[its.length] = (this.state==\"hide\"?\"enabled\":\"active\");\nits[its.length] = menuRoot+\"hide\"; its[its.length] = (this.state==\"hide\"?\"hidden\":\"enabled\");\nits[its.length] = menuRoot+\"maximize\"; its[its.length] = (this.isMinimized()||!this.isBar?\"enabled\":\"hidden\");\nits[its.length] = menuRoot+\"minimize\"; its[its.length] = (this.isMinimized()?\"hidden\":\"enabled\");\nif(this.isBar) {\nits[its.length] = menuRoot+\"vertical\"; its[its.length] = (this.layout==\"horizontal\"?\"enabled\":\"hidden\");\nits[its.length] = menuRoot+\"horizontal\"; its[its.length] = (this.layout==\"horizontal\"?\"hidden\":\"enabled\");\n}\nif(this.state==\"minimize\" || this.manager.isLockedToScreen()) {\nits[its.length] = menuRoot+\"chase\"; its[its.length] = \"hidden\";\nits[its.length] = menuRoot+\"pinup\"; its[its.length] = \"hidden\";\nits[its.length] = menuRoot+\"inline\"; its[its.length] = \"hidden\";\n}\nelse {\nits[its.length] = menuRoot+\"chase\"; its[its.length] = (this.state==\"hide\"?\"disabled\":(this.mode==\"chase\"?\"active\":\"enabled\"));\nits[its.length] = menuRoot+\"pinup\"; its[its.length] = (this.state==\"hide\"?\"disabled\":(this.mode==\"pinup\"?\"active\":\"enabled\"));\nits[its.length] = menuRoot+\"inline\"; its[its.length] = (this.state==\"hide\"?\"disabled\":(this.mode==\"inline\"?\"active\":\"enabled\"));\n}\nSTMenuManager.enableItems(its);\n},\nregisterMenu : function() {\n;\nfunction mfo(state,command,stlTitle,icon,ctx,name) {\nm[m.length] = \'\';\nm[m.length] = \'