kukit=new function(){var ku=this;ku.isDevelMode=false;var _isKineticStylesheet=function(node){var rel=node.rel;if(rel=="kinetic-stylesheet"){return true}
if(rel=="kukit"||rel=="k-stylesheet"){return true}
return false};var _RuleSheetLink=function(href,res_type){this.href=href;this.res_type=res_type};ku.Engine=function(){this.initialize=function(){this.documentRules=new kukit.rd.MethodTable();this._ruleProcessorClasses={};this._ruleProcessorClasses.kss=kukit.kssp.KssRuleProcessor;this._ruleProcessors=[];this.bindScheduler=new kukit.ut.SerializeScheduler();this.stateVariables={};this.requestManager=new kukit.rm.RequestManager();this.binderInfoRegistry=new kukit.er.BinderInfoRegistry();this.loadScheduler=new kukit.rd.LoadActions();this.initializedOnDOMLoad=false;this.setupEventsQueue=[];this.setupEventsInProgress=false;this.baseUrl=this.calculateBase()};this.calculateBase=function(){var base='';try{var _dummy=document;_dummy=window} catch(e){return base}
base=kukit.ut.calculateBase(document,window.location.href);return base};this.getRuleSheetLinks=function(){var nodes=document.getElementsByTagName("link");var results=[];for(var i=0;i<nodes.length;i++){if(_isKineticStylesheet(nodes[i])){var res_type=null;if((nodes[i].type=='text/css')||(nodes[i].type=='text/kss')){res_type='kss'}
var newRuleLink=new _RuleSheetLink(nodes[i].href,res_type);results[results.length]=newRuleLink}}
return results};this.createRuleProcessor=function(rulelink){var _RuleProcessorClass=this._ruleProcessorClasses[rulelink.res_type];if(_RuleProcessorClass){var ruleprocessor=new _RuleProcessorClass(rulelink.href);this._ruleProcessors[this._ruleProcessors.length]=ruleprocessor;return ruleprocessor}
return null};this.getRules=function(){var rules=[];var ruleProcessors=this._ruleProcessors;for(var j=0;j<ruleProcessors.length;j++){var ruleProcessor=ruleProcessors[j];for(var i=0;i<ruleProcessor.rules.length;i++){rules.push(ruleProcessor.rules[i])}}
return rules};this.getRuleProcessors=function(){return this._ruleProcessors};this.setupEvents=function(inNodes){if(this.setupEventsInProgress){this.setupEventsQueue=this.setupEventsQueue.concat(inNodes)} else{this.doSetupEvents(inNodes)}};this.beginSetupEventsCollection=function(){this.setupEventsInProgress=true};this.finishSetupEventsCollection=function(){this.setupEventsInProgress=false;var setupEventsQueue=this.setupEventsQueue;this.setupEventsQueue=[];this.doSetupEvents(setupEventsQueue)};this.doSetupEvents=function(inNodes){var self=this;var deferredEventsSetup=function(){self._setupEvents(inNodes)};var found=false;if(!inNodes){found=true} else{for(var i=0;i<inNodes.length;i++){var node=inNodes[i];if(node.nodeType==1){if(!found){found=true}}}}
if(found){var remark='';this.bindScheduler.addPre(deferredEventsSetup,remark)}};this._setupEvents=function(inNodes){var phase;if(typeof(inNodes)=='undefined'){phase=1} else{phase=2}
this.binderInfoRegistry.startBindingPhase();var rules=this.getRules();var ruletable=new kukit.rd.RuleTable(this.loadScheduler);for(var y=0;y<rules.length;y++){rules[y].mergeForSelectedNodes(ruletable,phase,inNodes)}
if(phase==1){this.documentRules.bindall(phase)}
ruletable.bindall(phase);this.binderInfoRegistry.processBindingEvents()};this.initializeRules=function(){if(window.kukitRulesInitializing||window.kukitRulesInitialized){return}
kukit.engine=this;window.kukitRulesInitializing=true;var rulelinks=this.getRuleSheetLinks();for(var i=0;i<rulelinks.length;i++){var rulelink=rulelinks[i];var ruleprocessor=this.createRuleProcessor(rulelink);if(ruleprocessor){ruleprocessor.load();ruleprocessor.parse()}}
this.setupEvents();window.kukitRulesInitializing=false;window.kukitRulesInitialized=true};this.initialize.apply(this,arguments)};ku.initializeRules=function(){kukit.bootstrap()};ku.bootstrap=function(){var engine=new kukit.Engine();engine.initializeRules()};ku.bootstrapFromDOMLoad=function(){var engine=new kukit.Engine();engine.initializedOnDOMLoad=true;engine.initializeRules()}}();if(typeof(kukit)=='undefined'){var kukit={}}
kukit.E='Unknown message (kss optimized for production mode)';try{kukit.HAVE_SAFARI=navigator.vendor&&navigator.vendor.indexOf('Apple')!=-1;kukit.HAVE_IE=eval("_SARISSA_IS_IE")} catch(e){}
kukit.readCookie=function(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ') c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0) return c.substring(nameEQ.length,c.length)}
return null};kukit._null=function(){};kukit._COOKIE_LOGLEVEL='__kss_loglevel';kukit._logger=new function(){this.updateLogLevel=function(){this._setupHandlers()};this._setupHandlers=function(){this.logDebug=kukit._null;this.log=kukit._null;this.logWarning=kukit._null;this.logError=kukit._null;this.logFatal=kukit._null}}();kukit.logDebug=function(message){kukit._logger.logDebug(message)};kukit.log=function(message){kukit._logger.log(message)};kukit.logWarning=function(message){kukit._logger.logWarning(message)};kukit.logError=function(message){kukit._logger.logError(message)};kukit.logFatal=function(message){kukit._logger.logFatal(message)};kukit.setLogLevel=function(level){};kukit._logger.updateLogLevel();kukit.ut=new function(){var ut=this;ut.FifoQueue=function(){this.initialize=function(){this.reset()};this.reset=function(){this.elements=new Array()};this.push=function(obj){this.elements.push(obj)};this.pop=function(){return this.elements.shift()};this.empty=function(){return!this.elements.length};this.size=function(){return this.elements.length};this.front=function(){return this.elements[0]};this.initialize.apply(this,arguments)};ut.SortedQueue=function(){this.initialize=function(comparefunc){if(comparefunc){this.comparefunc=comparefunc}
this.reset()};this.comparefunc=function(a,b){if(a<b){return-1} else if(a>b){return+1} else{return 0}};this.reset=function(){this.elements=new Array()};this.push=function(obj){var i=0;var length=this.elements.length;while(i<length&&this.comparefunc(this.elements[i],obj)==-1){i++}
this.elements.splice(i,0,obj)};this.pop=function(){return this.elements.shift()};this.popn=function(n){return this.elements.splice(0,n)};this.empty=function(){return!this.elements.length};this.size=function(){return this.elements.length};this.get=function(n){return this.elements[n]};this.front=function(){return this.elements[0]};this.initialize.apply(this,arguments)};ut.evalBool=function(value,errname){if(value=='true'||value=='True'||value=='1'){value=true} else if(value=='false'||value=='False'||value=='0'||value==''){value=false}
return value};ut.evalInt=function(value,errname){value=parseInt(value);return value};ut.evalList=function(value,errname){value=value.replace(/^ +/,'');value=value.replace(/ +$/,'');if(value==''){value=[]} else{value=value.split(/ *, */)}
return value};ut.TimerCounter=function(){this.initialize=function(delay,func,restart){this.delay=delay;this.func=func;if(typeof(restart)=='undefined'){restart=false}
this.restart=restart;this.timer=null};this.start=function(){if(this.timer){throw new Error(kukit.E)}
var self=this;var func=function(){self.timeout()};this.timer=setTimeout(func,this.delay)};this.timeout=function(){this.func();if(this.restart){this.timer=null;this.start()}};this.clear=function(){if(this.timer){window.clearTimeout(this.timer);this.timer=null}
this.restart=false};this.initialize.apply(this,arguments)};ut.Scheduler=function(){this.initialize=function(func){this.func=func;this.timer=null;this.nextWake=null};this.setNextWake=function(ts){if(this.nextWake){this.clear()}
if(!ts){return}
var now=(new Date()).valueOf();if(ts>now){this.nextWake=ts;var self=this;var func=function(){self.timeout()};this.timer=setTimeout(func,ts-now)} else{this.func()}};this.setNextWakeAtLeast=function(ts){if(!ts||!this.nextWake||ts<this.nextWake){this.setNextWake(ts)} else{var now=(new Date()).valueOf()}};this.timeout=function(){this.timer=null;this.nextWake=null;this.func()};this.clear=function(){if(this.nextWake){window.clearTimeout(this.timer);this.timer=null;this.nextWake=null}};this.initialize.apply(this,arguments)};ut.SerializeScheduler=function(){this.initialize=function(){this.items=[];this.lock=false};this.addPre=function(func,remark){this.items.push({func:func,remark:remark});this.execute()};this.addPost=function(func,remark){this.items.unshift({func:func,remark:remark});this.execute()};this.execute=function(){if(!this.lock){this.lock=true;while(true){var item=this.items.pop();if(!item){break}
try{item.func()} catch(e){this.lock=false;throw e}}
this.lock=false}};this.initialize.apply(this,arguments)};ut.registerEventListener=function(elem,event,func){if(elem.addEventListener){elem.addEventListener(event,func,false);return true} else if(elem.attachEvent){var result=elem.attachEvent("on"+event,func);return result}
return false};if(typeof(window)!='undefined'){ut.registerEventListener(window,"load",kukit.bootstrap)}
ut.DictCollector=function(){this.initialize=function(){this.result={}};this.add=function(key,value){this.result[key]=value};this.initialize.apply(this,arguments)};ut.TupleCollector=function(){this.initialize=function(){this.result=[]};this.add=function(key,value){this.result.push([key,value])};this.initialize.apply(this,arguments)};ut.calculateBase=function(documentInstance,pageLocation){var base='';var nodes=documentInstance.getElementsByTagName("link");if(nodes.length>0){for(var i=0;i<nodes.length;i++){var link=nodes[i];if(link.rel=='kss-base-url'){var base=link.href;if(!/\/$/.test(base)){base=base+'/'}}}}
if(!base){nodes=documentInstance.getElementsByTagName("base");if(nodes.length!=0){var base=nodes[0].href} else{var base=pageLocation}}
var pieces=base.split('/');pieces.pop();base=pieces.join('/')+'/';return base}}();kukit.err=new function(){var err=this;var ErrorAnnotation=function(){this.constructError=function(e,name,message,kw){this.kw=kw;if(!e){e=new Error(kukit.E)}
e.name=name;e.info=this;return e}};var setErrorInfo=function(e,name,message,kw){return new ErrorAnnotation().constructError(e,name,message,kw)};err.explicitError=function(errorcommand){var kw={'errorcommand':errorcommand};return setErrorInfo(null,'ExplicitError',kukit.E,kw)};err.responseParsingError=function(message){return setErrorInfo(null,'ResponseParsingError',message)};err.parsingError=function(message,cursor){var kw={};return setErrorInfo(null,'ParsingError',message,kw)}}();kukit.op=new function(){var op=this;op.Oper=function(){this.initialize=function(dict){this.node=null;this.parms={};this.eventRule=null;this.binder=null;this.orignode=null;this.action=null;this.browserevent=null;this.clone=function(dict,restricted){var newoper=new kukit.op.Oper(this);newoper.unrestrictedUpdate(dict,restricted);return newoper};this.update=function(dict){this.unrestrictedUpdate(dict,true)};this.unrestrictedUpdate=function(dict,restricted){if(typeof(dict)=='undefined'){return}
for(var key in dict){var value=dict[key];if(typeof(value)!='function'){this[key]=value}}};this.unrestrictedUpdate(dict)};this.clone=function(dict,restricted){var newoper=new kukit.op.Oper(this);newoper.unrestrictedUpdate(dict,restricted);return newoper};this.update=function(dict){this.unrestrictedUpdate(dict,true)};this.unrestrictedUpdate=function(dict,restricted){if(typeof(dict)=='undefined'){return}
for(var key in dict){var value=dict[key];if(typeof(value)!='function'){this[key]=value}}};this.logDebug=function(){};this.executeClientAction=function(name){var nodes=null;for(key in this.kssParms){switch(key){case 'kssSelector':{nodes=this.kssParms[key]} break;default:{throw new Error(kukit.E)} break}}
var executeActions=kukit.actionsGlobalRegistry.get(name);if(nodes!=null){for(var i=0;i<nodes.length;i++){this.node=nodes[i];executeActions(this)}} else{executeActions(this)}};this.executeDefaultAction=function(name,optional){var namespace=this.binder.__eventNamespace__;var kssevent=kukit.eventsGlobalRegistry.get(namespace,name);var methodName=kssevent.defaultActionMethodName;var success=false;if(!methodName){} else{if(typeof(this.defaultParameters)!='undefined'){this.parms=this.defaultParameters} else{this.parms={}}
this.binder.callMethod(namespace,name,this,methodName);success=true}
return success};this.executeServerAction=function(name){for(key in this.kssParms){if(key=='kssSubmitForm'){var formQuery=this.kssParms[key];if(typeof(formQuery)=='string'){var locator=new kukit.fo.NamedFormLocator(formQuery);var collector=new kukit.ut.TupleCollector();formQuery=kukit.fo.getAllFormVars(locator,collector)}}}
var sa=new kukit.sa.ServerAction(name,this)};this.getEventName=function(){return this.eventRule.kssSelector.name};this.getEventNamespace=function(){return this.eventRule.kssSelector.namespace};this.hasExecuteActions=function(){if(this.eventRule){if(this.eventRule.actions.hasActions())
return true;var kssevent=kukit.eventsGlobalRegistry.get(this.getEventNamespace(),this.getEventName());var methodName=kssevent.defaultActionMethodName;return(typeof methodName!='undefined')} else
return false};this.makeExecuteActionsHook=function(filter){if(!this.hasExecuteActions()){return function(){}}
var eventName=this.getEventName();var self=this;var func_to_bind=function(dict){var newoper=self.clone(dict,true);if(filter&&!filter(newoper)) return false;newoper.binder.triggerEvent(eventName,newoper);return true};return func_to_bind};this.evaluateParameters=function(mandatory,defaults,errname,allow_excess){var newParameters={};for(var i=0;i<mandatory.length;i++){var next=mandatory[i];newParameters[next]=this.parms[next]}
for(var key in defaults){var val=this.parms[key];if(typeof(val)=='undefined'){newParameters[key]=defaults[key]} else{newParameters[key]=val}}
for(var key in this.parms){if(typeof(newParameters[key])=='undefined'){newParameters[key]=this.parms[key]}}
this.parms=newParameters};this.completeParms=function(mandatory,defaults,errname,allow_excess){this.evaluateParameters(mandatory,defaults,errname,allow_excess)};this.evalBool=function(key,errname){var value=this.parms[key];this.parms[key]=kukit.ut.evalBool(value,kukit.E)};this.evalInt=function(key,errname){var value=this.parms[key];this.parms[key]=kukit.ut.evalInt(value,kukit.E)};this.evalList=function(key,errname){var value=this.parms[key];this.parms[key]=kukit.ut.evalList(value,kukit.E)};this.initialize.apply(this,arguments)}}();kukit.tk=new function(){var tk=this;tk._TokenBase=function(){this.emitError=function(msg){throw new Error(kukit.E)};this.updateFinished=function(){if(!this.finished&&this.cursor.text.length==this.cursor.pos){if(this.isTopLevelParser){this.finished=true} else{this.emitError(kukit.E)}}}};tk._ParserBase=function(){this.initialize=function(){};this.emitAndReturn=function(token){this.finished=true;return token};this.nextStep=function(){var table=this.table;var cursor=this.cursor;var best_pos=cursor.text.length;var best_symbol=null;for(var symbol in table){var pos=cursor.text.indexOf(symbol,cursor.pos);if(pos!=-1&&pos<best_pos){best_pos=pos;best_symbol=symbol}};if(best_pos>cursor.pos){this.result.push(new tk.Fraction(cursor,best_pos));cursor.pos=best_pos};if(best_symbol){var tokens=table[best_symbol].call(this);if(typeof(tokens)!='undefined'){if(typeof(tokens.length)=='undefined'){tokens=[tokens]};for(var i=0;i<tokens.length;i++){this.result.push(tokens[i])}}}};this.process=function(){this.txt='';for(var i=0;i<this.result.length;i++){this.txt+=this.result[i].txt}};this.expectToken=function(context,token){var i=context.nextTokenIndex;if(token){var symbol=token.prototype.symbol;if(i>=this.result.length){this.emitError(kukit.E)} else if(this.result[i].symbol!=symbol){this.emitError(kukit.E)}} else{if(i>=this.result.length){this.emitError(kukit.E)}}
context.token=this.result[i];context.nextTokenIndex+=1};this.resultIsNullOrNotToken=function(token,currentValue){return(!token||currentValue.symbol!=token.prototype.symbol)};this.notInTokens=function(context,token1,token2,token3,token4){var i=context.nextTokenIndex;var currentValue=this.result[i];return!((i>=this.result.length)||(this.resultIsNullOrNotToken(token1,currentValue)&&this.resultIsNullOrNotToken(token2,currentValue)&&this.resultIsNullOrNotToken(token3,currentValue)&&this.resultIsNullOrNotToken(token4,currentValue)))};this.digestTxt=function(context,token1,token2,token3,token4){this.digestExactTxt(context,token1,token2,token3,token4);context.txt=this.removeWhitespacesAndTrim(context.txt)};this.digestExactTxt=function(context,token1,token2,token3,token4){var result='';while(this.notInTokens(context,token1,token2,token3,token4)){result+=this.result[context.nextTokenIndex].txt;context.nextTokenIndex++}
context.txt=result};this.removeWhitespaces=function(txt){if(txt!=' '){txt=txt.replace(/[\r\n\t ]+/g,' ')}
return txt};this.removeWhitespacesAndTrim=function(txt){txt=this.removeWhitespaces(txt);if(txt&&txt.charAt(0)==' '){txt=txt.substr(1)}
txt=txt.replace(/ $/,'');return txt}};tk._ParserBase.prototype=new tk._TokenBase();tk.Fraction=function(){this.initialize=function(cursor,endpos){this.txt=cursor.text.substring(cursor.pos,endpos);this.startpos=cursor.pos;this.endpos=cursor.pos;this.finished=true};this.initialize.apply(this,arguments)};tk.Fraction.prototype.symbol='fraction';tk.mkToken=function(symbol,txt){f=function(cursor){this.cursor=cursor;this.startpos=cursor.pos;if(cursor.text.substr(cursor.pos,txt.length)!=txt){this.emitError(kukit.E)} else{cursor.pos+=txt.length;this.finished=true}
this.endpos=cursor.pos};f.prototype=new tk._TokenBase();f.prototype.symbol=symbol;f.prototype.txt=txt;return f};tk.mkParser=function(symbol,table,_class){f=function(cursor,tokenClass,isTopLevelParser){this.table=table;this.cursor=cursor;this.startpos=cursor.pos;this.finished=false;this.isTopLevelParser=isTopLevelParser;this.result=[];if(tokenClass){this.result.push(new tokenClass(this.cursor))}
this.updateFinished();while(!this.finished){this.nextStep();this.updateFinished()}
this.endpos=cursor.pos;this.initialize.apply(this,arguments);this.process()};f.prototype=new tk._ParserBase();var _prototype=new _class();for(key in _prototype){f.prototype[key]=_prototype[key]}
f.prototype.symbol=symbol;return f};tk.Cursor=function(){this.initialize=function(txt){this.text=txt;this.pos=0};this.makeMarker=function(pos){var cursor=new tk.Cursor();cursor.text=this.text;cursor.pos=pos;cursor.calcRowCol();return cursor};this.getRowCol=function(pos){if(typeof(pos)=='undefined'){pos=this.pos}
var index=0;var row=1;var next=0;while(true){next=this.text.indexOf('\n',index);if(next==-1||next>=pos){break}
index=next+1;row+=1}
var col=pos-index+1;return{'row':row,'col':col}};this.calcRowCol=function(pos){var rowcol=this.getRowCol();this.row=rowcol.row;this.col=rowcol.col};this.initialize.apply(this,arguments)}}();kukit.pr=new function(){var pr=this;pr.ValueProviderRegistry=function(){this.initialize=function(){this.content={}};this.register=function(name,func,returnType){if(typeof(func)=='undefined'){throw new Error(kukit.E)}
this.content[name]=func;func.prototype.returnType=returnType};this.exists=function(name){var entry=this.content[name];return(typeof(entry)!='undefined')};this.get=function(name){var func=this.content[name];if(!func){throw new Error(kukit.E)}
return func};this.initialize.apply(this,arguments)}}();kukit.dummy=new function(){var _IdentityPP=function(){this.check=function(args){};this.eval=function(args,node){return args[0]}};var _FormVarPP=function(){this.check=function(args){};this.eval=function(args,node){return kukit.fo.getFormVar(new kukit.fo.NamedFormLocator(args[0]),args[1])}};var _CurrentFormVarPP=function(){this.check=function(args){};this.eval=function(args,node){if(args.length==1){return kukit.fo.getFormVar(new kukit.fo.CurrentFormLocator(node),args[0])} else{return kukit.fo.getValueOfFormElement(node)}}};var _CurrentFormVarFromKssAttrPP=function(){this.check=function(args){};this.eval=function(args,node){var argname=args[0];var recurseParents=false;if(args.length==2){recurseParents=kukit.ut.evalBool(args[1],kukit.E)}
var formvarname=kukit.dom.getRecursiveAttribute(node,argname,recurseParents,kukit.dom.getKssAttribute);return kukit.fo.getFormVar(new kukit.fo.CurrentFormLocator(node),formvarname)}};var _NodeAttrPP=function(){this.check=function(args){};this.eval=function(args,node){var argname=args[0]};this.eval=function(args,node){var argname=args[0];var recurseParents=false;if(args.length==2){recurseParents=args[1];recurseParents=kukit.ut.evalBool(recurseParents,kukit.E)}
return kukit.dom.getRecursiveAttribute(node,argname,recurseParents,kukit.dom.getAttribute)}};var _KssAttrPP=function(){this.check=function(args){};this.eval=function(args,node){var argname=args[0];var recurseParents=false};this.eval=function(args,node){var argname=args[0];var recurseParents=false;if(args.length==2){recurseParents=args[1];recurseParents=kukit.ut.evalBool(recurseParents,kukit.E)}
return kukit.dom.getRecursiveAttribute(node,argname,recurseParents,kukit.dom.getKssAttribute)}};var _NodeContentPP=function(){this.check=function(args){};this.eval=function(args,node){var recursive=false;if(args.length==1){recursive=args[0]}
return kukit.dom.textContent(node,recursive)}};var _StateVarPP=function(){this.check=function(args){};this.eval=function(args,node){var key=args[0];var value=kukit.engine.stateVariables[key];if(typeof(value)=='undefined'){throw new Error(kukit.E)}
return value}};var _PassPP=function(){this.check=function(args){};this.eval=function(args,node,defaultParameters){var key=args[0];var value=defaultParameters[key];if(typeof(value)=='undefined'){throw new Error(kukit.E)}
return value}};var _UrlPP=function(){this.check=function(args){}};_UrlPP.prototype=new _IdentityPP();var _AliasPP=function(){this.check=function(args){}};_AliasPP.prototype=new _IdentityPP();kukit.pprovidersGlobalRegistry=new kukit.pr.ValueProviderRegistry();kukit.pprovidersGlobalRegistry.register('',_IdentityPP);kukit.pprovidersGlobalRegistry.register('currentFormVar',_CurrentFormVarPP);kukit.pprovidersGlobalRegistry.register('currentFormVarFromKssAttr',_CurrentFormVarFromKssAttrPP);kukit.pprovidersGlobalRegistry.register('formVar',_FormVarPP);kukit.pprovidersGlobalRegistry.register('kssAttr',_KssAttrPP);kukit.pprovidersGlobalRegistry.register('stateVar',_StateVarPP);kukit.pprovidersGlobalRegistry.register('pass',_PassPP);kukit.pprovidersGlobalRegistry.register('nodeContent',_NodeContentPP);kukit.pprovidersGlobalRegistry.register('nodeAttr',_NodeAttrPP);kukit.pprovidersGlobalRegistry.register('url',_UrlPP,'url');kukit.pprovidersGlobalRegistry.register('alias',_AliasPP,'alias')}();kukit.rd=new function(){var rd=this;rd.KssSelector=function(){this.initialize=function(isEvent,css,name,namespace,id,ppid){this.isEventSelector=isEvent;this.isMethodSelector=!isEvent;this.css=css;this.name=name;this.namespace=namespace;this.className=null;this.id=id;this.ppid=ppid;this.setClassName()};this.setClassName=function(){try{this.className=kukit.eventsGlobalRegistry.get(this.namespace,this.name).className} catch(e){throw kukit.err.parsingError(e.message)}};this.prepareId=function(){if(this.ppid==null){if(this.id==null&&this.ppid==null){this.id=kukit.er.makeId(this.namespace,this.className)}
this.mergeId=kukit.er.makeMergeId(this.id,this.namespace,this.name)}};this.getId=function(node){if(this.id){return this.id} else{var id=this.ppid.pprovider.eval(this.ppid.args,node,{});if(!id){}
return id}};this.getMergeId=function(node){if(this.mergeId){return this.mergeId} else{var id=this.getId(node);this.mergeId=kukit.er.makeMergeId(id,this.namespace,this.name)}};this.initialize.apply(this,arguments)};rd.KssTextValue=function(txt){this.initialize=function(txt){this.txt=txt};this.check=function(registry){this.pprovider=new(kukit.pprovidersGlobalRegistry.get(''))()};this.evaluate=function(node,defaultParameters){return this.pprovider.eval([this.txt],node,defaultParameters)};this.initialize.apply(this,arguments)};rd.KssTextValue.prototype.isMethod=false;rd.KssMethodValue=function(){this.initialize=function(methodName,args){this.methodName=methodName;this.args=args};this.check=function(registry){var f=kukit.pprovidersGlobalRegistry.get(this.methodName);this.pprovider=new f();for(var i=0;i<this.args.length;i++){var arg=this.args[i];if(arg.check){arg.check()}}};this.evaluate=function(node,defaultParameters){var newArgs=[];for(var i=0;i<this.args.length;i++){var arg=this.args[i];if(arg.evaluate){newArgs.push(arg.evaluate(node,defaultParameters))} else{newArgs.push(arg)}}
return this.pprovider.eval(newArgs,node,defaultParameters)};this.initialize.apply(this,arguments)};rd.KssMethodValue.prototype.isMethod=true;rd.KssEventValue=function(methodName,arg){this.methodName=methodName;this.arg=arg;this.check=function(){}};rd.KssEventValue.prototype.isMethod=true;rd.EventRuleNr=0;rd.EventRule=function(){this.initialize=function(kssSelector,parms,actions){if(typeof(parms)=='undefined'){this.kssSelector=kssSelector} else{this.index=rd.EventRuleNr;this.mergedIndex=null;rd.EventRuleNr=this.index+1;this.kssSelector=kssSelector;this.parms=parms;this.actions=actions}};this.getIndex=function(){if(this.mergedIndex){return this.mergedIndex} else{return this.index}};this.mergeForSelectedNodes=function(ruletable,phase,inNodes){if(this.kssSelector.isEventSelector){var nodes=kukit.dom.cssQuery(this.kssSelector.css,inNodes);var counter=0;for(var y=0;y<nodes.length;y++){var node=nodes[y];if(typeof(node._kukitMark)=='undefined'){ruletable.add(node,this);counter+=1}}} else if(typeof(inNodes)=='undefined'){kukit.engine.documentRules.add(this)}};this.getBinderInfo=function(node){var id=this.kssSelector.getId(node);return kukit.engine.binderInfoRegistry.getOrCreateBinderInfo(this.kssSelector.id,this.kssSelector.className,this.kssSelector.namespace)};this.bind=function(node){this.store(node);var oper=new kukit.op.Oper();var binderInfo=this.getBinderInfo(node);oper.node=node;oper.eventRule=this;oper.binder=binderInfo.binder;oper.parms=this.parms;binderInfo.bindOper(oper)};this.store=function(node){if(node==null){return}
if(typeof(node.kukitEventRules)=='undefined'){var rules=[];node.kukitEventRules=rules}
node.kukitEventRules.push(this)};this.isMerged=function(){return(this.mergedIndex!=null)};this.cloneForMerge=function(){var merged=new rd.EventRule(this.kssSelector);merged.actions=new rd.ActionSet();merged.parms={};merged.mergedIndex='X';merged.merge(this);merged.mergedIndex=this.getIndex();return merged};this.merge=function(other){this.mergedIndex=this.mergedIndex+','+other.getIndex();for(var key in other.parms){this.parms[key]=other.parms[key]}
this.actions.merge(other.actions)};this.mergeIntoDict=function(dict,key){var mergedRule=dict[key];if(typeof(mergedRule)=='undefined'){dict[key]=this} else{if(!mergedRule.isMerged()){mergedRule=mergedRule.cloneForMerge();dict[key]=mergedRule}
mergedRule.merge(this)}};this.initialize.apply(this,arguments)};rd.ActionSet=function(){this.initialize=function(){this.content={}};this.hasActions=function(){for(var name in this.content){return true}
return false};this.merge=function(other){for(var key in other.content){var action=this.content[key];var action2=other.content[key];if(typeof(action)=='undefined'){if(action2.type!='X'){action=new _Action();this.content[key]=action} else{throw new Error(kukit.E)}}
if(action2.type!='X'){action.merge(action2)} else{this.deleteAction(key)}}};this.execute=function(oper){for(var key in this.content){var action=this.content[key];if(action.type!='E'){action.execute(oper)}}
if(typeof(this.content['default'])=='undefined'){var name=oper.eventRule.kssSelector.name;oper=oper.clone({'parms':{}});oper.executeDefaultAction(name,true)}};this.getOrCreateAction=function(name,valuesByReturnType){var nameOverride;if(valuesByReturnType.alias){nameOverride=name;name=valuesByReturnType.alias.args[0]}
var action=this.content[name];if(typeof(action)=='undefined'){action=new _Action();action.setName(name,nameOverride);this.content[name]=action}
if(valuesByReturnType.selection){action.parms.kssSelector=valuesByReturnType.selection}
if(valuesByReturnType.formquery){action.parms.kssSubmitForm=valuesByReturnType.formquery}
if(valuesByReturnType.url){action.parms.kssUrl=valuesByReturnType.url}
return action};this.getActionOrNull=function(name){var action=this.content[name];if(typeof(action)=='undefined'){action=null}
return action};this.deleteAction=function(name){var action=this.content[name];delete this.content[name]};this.getDefaultAction=function(){return this.getActionOrNull('default')};this.getErrorActionFor=function(action){return this.getActionOrNull(action.error)};this.initialize.apply(this,arguments)};var _Action=function(){this.initialize=function(){this.name=null;this.error=null;this.parms={};this.type=null;this.nameOverride=null};this.getExecutingName=function getExecutingName(){return this.nameOverride||this.name};this.setName=function(name,nameOverride){if(typeof(nameOverride)=='undefined'||name==nameOverride){nameOverride=null}
this.name=name;if(nameOverride!=null){this.nameOverride=nameOverride}
if(name=='default'){this.setType('D')}};this.setType=function(type){this.type=type};this.setError=function(error){this.error=error};this.merge=function(other){if(other.name!=null){this.setName(other.name,other.nameOverride)}
if(other.type!=null){this.setType(other.type)}
if(other.error!=null){this.setError(other.error)}
for(var key in other.parms){this.parms[key]=other.parms[key]}};var _defaultStringHandling={'kssSelector':'css','kssSubmitForm':'form'};this.makeActionOper=function(oper){var parms={};var kssParms={};if(typeof(oper.defaultParameters)=='undefined'){oper.defaultParameters={}}
for(var key in this.parms){var value=this.parms[key].evaluate(oper.node,oper.defaultParameters);var providerName=_defaultStringHandling[key];if(providerName&&typeof(value)=='string'){var providerClass=kukit.pprovidersGlobalRegistry.get(providerName);var provider=new providerClass();value=provider.eval([value],oper.node,oper.defaultParameters)}
if(key.match(/^kss/)){kssParms[key]=value} else{parms[key]=value}}
var anOper=oper.clone({'parms':parms,'kssParms':kssParms,'action':this});return anOper};this.execute=function(oper){oper=this.makeActionOper(oper);switch(this.type){case 'D':{var name=oper.eventRule.kssSelector.name;oper.executeDefaultAction(name)} break;case 'S':{oper.executeServerAction(this.name)} break;case 'C':{oper.executeClientAction(this.getExecutingName())} break;case 'E':{oper.executeClientAction(this.name)} break}};this.initialize.apply(this,arguments)};rd.LoadActions=function(){this.initialize=function(){this.items=[]};this.empty=function(){return(this.size()==0)};this.size=function(){return this.items.length};this.push=function(f){if(this.items.length>=100){throw('Infinite recursion, stack full')}
this.items.push(f)};this.execute=function(){var f=this.items.shift();if(f){f();return true} else{return false}};this.executeAll=function(){var i=0;while(true){var success=this.execute();if(!success){break}
i++}
return i};this.initialize.apply(this,arguments)};rd.RuleTable=function(){this.initialize=function(loadScheduler){this.loadScheduler=loadScheduler;this.nodes={}};this.add=function(node,eventRule){var nodehash=rd.hashNode(node);var nodeval=this.nodes[nodehash];if(typeof(nodeval)=='undefined'){nodeval={'node':node,'val':{}};this.nodes[nodehash]=nodeval}
eventRule.mergeIntoDict(nodeval.val,eventRule.kssSelector.getMergeId(node))};this.bindall=function(phase){var counter=0;for(var nodehash in this.nodes){var nodeval=this.nodes[nodehash];nodeval.node._kukitMark=phase;for(var id in nodeval.val){var eventRule=nodeval.val[id];eventRule.bind(nodeval.node)}
counter+=1}
var loadactions=this.loadScheduler;if(!loadactions.empty()){var count=loadactions.executeAll()}};this.initialize.apply(this,arguments)};rd.uid=0;rd.hashNode=function(node){if(node==null){return '<<DOCUMENT>>'}
var id=node.uniqueID;if(typeof(id)=='undefined'){id=rd.uid;node.uniqueID=id;rd.uid++}
return id};rd.MethodTable=function(){this.initialize=function(){this.content={};this.content['document']={};this.content['behaviour']={}};this.add=function(eventRule){var category=eventRule.kssSelector.css;var dict=this.content[category];eventRule.mergeIntoDict(dict,eventRule.kssSelector.getMergeId())};this.getMergedRule=function(category,name,binder){var dict=this.content[category];var namespace=binder.__eventNamespace__;var id=binder.__binderId__;var mergeId=kukit.er.makeMergeId(id,namespace,name);var mergedRule=dict[mergeId];if(typeof(mergedRule)=='undefined'){mergedRule=null}
return mergedRule};this.bindall=function(){var documentRules=this.content['document'];var counter=0;for(var mergeId in documentRules){documentRules[mergeId].bind(null);counter+=1}};this.initialize.apply(this,arguments)}}();kukit.kssp=new function(){var kssp=this;kssp.openComment=kukit.tk.mkToken('openComment',"\/\*");kssp.closeComment=kukit.tk.mkToken('closeComment',"\*\/");kssp.openBrace=kukit.tk.mkToken('openBrace',"{");kssp.closeBrace=kukit.tk.mkToken('closeBrace',"}");kssp.openBracket=kukit.tk.mkToken('openBracket',"[");kssp.closeBracket=kukit.tk.mkToken('closeBracket',"]");kssp.openParent=kukit.tk.mkToken('openParent',"(");kssp.closeParent=kukit.tk.mkToken('closeParent',")");kssp.semicolon=kukit.tk.mkToken('semicolon',";");kssp.colon=kukit.tk.mkToken('colon',":");kssp.quote=kukit.tk.mkToken('quote',"'");kssp.dquote=kukit.tk.mkToken('dquote','"');kssp.backslash=kukit.tk.mkToken('backslash','\x5c');kssp.comma=kukit.tk.mkToken('comma',",");kssp.equals=kukit.tk.mkToken('equals',"=");var _emitAndReturn=function(){return this.emitAndReturn()};var _mkEmitAndReturnToken=function(klass){return function(){var token=new klass(this.cursor);return this.emitAndReturn(token)}};var _mkReturnToken=function(klass){return function(){return new klass(this.cursor)}};var _returnComment=function(){return new kssp.Comment(this.cursor,kssp.openComment)};var _returnString=function(){return new kssp.String(this.cursor,kssp.quote)};var _returnString2=function(){return new kssp.String2(this.cursor,kssp.dquote)};var _returnMethodArgs=function(){return new kssp.MethodArgs(this.cursor,kssp.openParent)};var _returnBackslashed=function(){return new kssp.Backslashed(this.cursor,kssp.backslash)};var _Document=function(){this.process=function(){this.eventRules=[];var context={'nextTokenIndex':0};while(context.nextTokenIndex<this.result.length){this.digestTxt(context,kukit.tk.Fraction,kssp.Comment);var key=context.txt;if(!key){break}
this.expectToken(context,kssp.Block);var block=context.token;var rules=block.parseSelectors(key);this.addRules(rules)}
this.result=[];this.txt=''};this.addRules=function(rules){for(var i=0;i<rules.length;i++){this.eventRules.push(rules[i])}}};kssp.Document=kukit.tk.mkParser('document',{"\/\*":_returnComment,"{": function(){return new kssp.Block(this.cursor,kssp.openBrace)}},_Document);var _Comment=function(){this.process=function(){this.result=[];this.txt=' '}};kssp.Comment=kukit.tk.mkParser('comment',{"\*\/":_mkEmitAndReturnToken(kssp.closeComment)},_Comment);var _Block=function(){this.process=function(){this.eventFullNames={};this.actions=new kukit.rd.ActionSet();var context={'nextTokenIndex':1};while(context.nextTokenIndex<this.result.length-1){this.digestTxt(context,kukit.tk.Fraction,kssp.Comment);var key=context.txt;if(!key){break}
this.expectToken(context,kssp.colon);this.expectToken(context,kssp.MultiPropValue);this.addDeclaration(key,context.token.values);if(context.nextTokenIndex==this.result.length-1) break;this.expectToken(context,kssp.semicolon)}
this.result=[];this.txt=''};this.parseSelectors=function(key){var cursor=new kukit.tk.Cursor(key+' ');var parser=new kssp.KssSelectors(cursor,null,true);var results=[];var hasFullNames=false;for(var eventFullName in this.eventFullNames){var hasFullNames=true;var found=false;for(var i=0;i<parser.selectors.length;++i){var fullName='';var kssSelector=parser.selectors[i];if(kssSelector.namespace){fullName=kssSelector.namespace+'-'}
fullName+=kssSelector.name;if(fullName==eventFullName){var eventParameters=this.eventFullNames[fullName];var eventRule;if(typeof(eventParameters)!='undefined'){eventRule=new kukit.rd.EventRule(kssSelector,eventParameters,this.actions)}
else{eventRule=new kukit.rd.EventRule(kssSelector,{},this.actions)}
results.push(eventRule);found=true}}
if(!found){this.emitError(kukit.E)}}
if(!hasFullNames){for(var i=0;i<parser.selectors.length;++i){var kssSelector=parser.selectors[i];eventRule=new kukit.rd.EventRule(kssSelector,{},this.actions);results.push(eventRule)}}
return results};this.addEventDeclaration=function(key,splitkey,values){var eventNamespace;var eventName;var eventKey;var eventFullName;if(splitkey.length==3){eventName=splitkey[1];eventKey=splitkey[2];eventFullName=eventName} else{eventNamespace=splitkey[1];eventName=splitkey[2];eventKey=splitkey[3];eventFullName=eventNamespace+'-'+eventName}
var allowedReturnTypes;var value=this.preprocessValues(values,allowedReturnTypes,kukit.E).string;var eventParameters=this.eventFullNames[eventFullName];if(typeof(eventParameters)=='undefined'){this.eventFullNames[eventFullName]={};eventParameters=this.eventFullNames[eventFullName]}
eventParameters[eventKey]=value.txt};this.addActionDeclaration=function(key,splitkey,values){var atab={'server':'S','client':'C','cancel':'X'};var actionType=atab[splitkey[1]];var allowedReturnTypes;var valuesByReturnType=this.preprocessValues(values,allowedReturnTypes,kukit.E);var value=valuesByReturnType.string;var action=this.actions.getOrCreateAction(value.txt,valuesByReturnType);if(actionType=='X'&&action.type!=null){this.actions.deleteAction(value.txt)} else{action.setType(actionType)}};this.addActionError=function(action,key,values){var allowedReturnTypes;var value=this.preprocessValues(values,allowedReturnTypes,kukit.E).string;action.setError(value.txt);var err_action=this.actions.getOrCreateAction(value.txt,{});err_action.setType('E')};this.addActionParameter=function(action,key,values){var value;if(key.substr(0,3)=='kss'){value=values[0];this.preprocessValues(values,allowedReturnTypes,kukit.E,true)} else{var allowedReturnTypes;var valuesByReturnType=this.preprocessValues(values,allowedReturnTypes,kukit.E);value=valuesByReturnType.string}
action.parms[key]=value};this.addDeclaration=function(key,values){var splitkey=key.split('-');var name=splitkey[0];if(name=='evt'){this.addEventDeclaration(key,splitkey,values)} else if(name=='action'){this.addActionDeclaration(key,splitkey,values)} else{var actionName;var actionKey;if(splitkey.length==2){actionName=splitkey[0];actionKey=splitkey[1]} else{actionName=splitkey[0]+'-'+splitkey[1];actionKey=splitkey[2]}
var action=this.actions.getOrCreateAction(actionName,{});if(actionKey=='error'){this.addActionError(action,key,values)} else{this.addActionParameter(action,actionKey,values)}}};this.preprocessValues=function(values,allowedReturnTypes,errInfo,noStringRequired){var valuesByReturnType={};for(var i=0;i<values.length;i++){var value=values[i];try{value.check()} catch(e){this.emitError(kukit.E)}
var returnType=(typeof(value.pprovider)!='undefined')&&value.pprovider.returnType;if(!returnType){returnType='string'}
valuesByReturnType[returnType]=value}
return valuesByReturnType}};kssp.Block=kukit.tk.mkParser('block',{";":_mkReturnToken(kssp.semicolon),":": function(){return [new kssp.colon(this.cursor),new kssp.MultiPropValue(this.cursor)]},"}":_mkEmitAndReturnToken(kssp.closeBrace)},_Block);var _PropValue=function(){this.process=function(){this.values=[];var context={'nextTokenIndex':0};this.txt='';var txtCarry='';while(context.nextTokenIndex<this.result.length){if(this.notInTokens(context,kukit.kssp.String)){if(txtCarry){this.produceTxt(txtCarry);txtCarry=''}
this.expectToken(context,kukit.kssp.String);this.produceTxt(context.token.txt)} else if(this.notInTokens(context,kukit.kssp.MethodArgs)){if(!txtCarry){this.emitError(kukit.E)}
this.expectToken(context,kukit.kssp.MethodArgs);this.addValue(new kukit.rd.KssMethodValue(txtCarry,context.token.args),txtCarry);txtCarry=''} else{this.digestTxt(context,kukit.tk.Fraction,kukit.kssp.Comment);var words=context.txt.split(' ');if(txtCarry){this.produceTxt(txtCarry);txtCarry=''}
if(words.length>0){for(var i=0;i<words.length-1;i++){this.produceTxt(words[i])}
txtCarry=words[words.length-1]}}}
if(txtCarry){this.produceTxt(txtCarry)}
this.result=[]};this.initialize=function(){this.multiword_allowed=false;this.valueClass=kukit.rd.KssMethodValue};this.produceTxt=function(txt){this.addValue(new kukit.rd.KssTextValue(txt),txt)};this.addValue=function(value,errInfo){if(this.value){this.emitError(kukit.E)}
this.value=value};this.initialize.apply(this,arguments)};kssp.PropValue=kukit.tk.mkParser('propValue',{";":_emitAndReturn,"}":_emitAndReturn,")":_emitAndReturn,"]":_emitAndReturn,",":_emitAndReturn,"'":_returnString,'"':_returnString2,"\/\*":_returnComment,"(":_returnMethodArgs},_PropValue);var _MultiPropValue=function(){this.addValue=function(value,errInfo){this.values.push(value)};this.initialize=function(){this.multiword_allowed=true}};_MultiPropValue.prototype=new _PropValue();kssp.MultiPropValue=kukit.tk.mkParser('multiPropValue',{";":_emitAndReturn,"}":_emitAndReturn,")":_emitAndReturn,",":_emitAndReturn,"'":_returnString,'"':_returnString2,"\/\*":_returnComment,"(":_returnMethodArgs},_MultiPropValue);var _EventValue=function(){this.initialize=function(){this.multiword_allowed=false};this.process=function(){var context={'nextTokenIndex':0};this.digestTxt(context,kukit.tk.Fraction,kssp.Comment);this.txt='';var txt=context.txt;if(this.notInTokens(context,kssp.String)){if(txt){this.emitError(kukit.E)}
this.expectToken(context,kssp.String);this.produceTxt(context.token.txt)} else if(this.notInTokens(context,kssp.openParent)){this.expectToken(context,kssp.openParent);this.expectToken(context,kssp.PropValue);this.value=new kukit.rd.KssEventValue(txt,context.token.value);this.digestTxt(context,kukit.tk.Fraction,kssp.Comment);if(context.txt){this.emitError(kukit.E)}
this.expectToken(context,kssp.closeParent)} else{if(!this.multiword_allowed&&txt.indexOf(' ')!=-1){this.emitError(kukit.E)}
this.produceTxt(txt)}
if(context.nextTokenIndex<this.result.length){this.digestTxt(context,kukit.tk.Fraction,kssp.Comment);if(context.nextTokenIndex<this.result.length||context.txt){this.emitError(kukit.E)}}
this.result=[]};this.produceTxt=function(txt){this.value=new kukit.rd.KssEventValue(txt,null)};this.initialize.apply(this,arguments)};kssp.EventValue=kukit.tk.mkParser('propValue',{"{":_emitAndReturn," ":_emitAndReturn,"\t":_emitAndReturn,"\n":_emitAndReturn,"\r":_emitAndReturn,"\/\*":_emitAndReturn,":":_emitAndReturn,"(": function(){return [new kssp.openParent(this.cursor),new kssp.PropValue(this.cursor)]},")":_mkEmitAndReturnToken(kssp.closeParent)},_EventValue);var _String=function(){this.process=function(){this.txt='';for(var i=1;i<this.result.length-1;i++){this.txt+=this.result[i].txt}}};kssp.String=kukit.tk.mkParser('string',{"'":_mkEmitAndReturnToken(kssp.quote),'\x5c':_returnBackslashed},_String);kssp.String2=kukit.tk.mkParser('string',{'"':_mkEmitAndReturnToken(kssp.dquote),'\x5c':_returnBackslashed},_String);var _StringInSelector=function(){this.process=function(){this.txt='';for(var i=0;i<this.result.length;i++){this.txt+=this.result[i].txt}}};kssp.StringInSelector=kukit.tk.mkParser('string',{"'":_mkEmitAndReturnToken(kssp.quote),'\x5c':_returnBackslashed},_StringInSelector);kssp.String2InSelector=kukit.tk.mkParser('string',{'"':_mkEmitAndReturnToken(kssp.dquote),'\x5c':_returnBackslashed},_StringInSelector);var _Backslashed=function(){this.nextStep=function(table){var cursor=this.cursor;var length=cursor.text.length;if(length<cursor.pos+1){this.emitError(kukit.E)} else{this.result.push(new kukit.tk.Fraction(cursor,cursor.pos+1));this.cursor.pos+=1;this.finished=true}};this.process=function(){this.txt=this.result[1].txt}};kssp.Backslashed=kukit.tk.mkParser('backslashed',{},_Backslashed);var _MethodArgs=function(){this.process=function(){this.args=[];var context={'nextTokenIndex':1};while(context.nextTokenIndex<this.result.length-1){this.digestTxt(context,kukit.tk.Fraction,kssp.Comment);var value=context.txt;if(!value){if(context.nextTokenIndex==this.result.length-1) break;this.expectToken(context,kssp.String);value=context.token.txt} else{if(value.indexOf(' ')!=-1){this.emitError(kukit.E)}}
var valueClass;var args;var providedValue;if(this.notInTokens(context,kssp.MethodArgs)){this.expectToken(context,kssp.MethodArgs);valueClass=kukit.rd.KssMethodValue;args=context.token.args;providedValue=new valueClass(value,args)} else{providedValue=value}
this.args.push(providedValue);if(context.nextTokenIndex==this.result.length-1) break;this.expectToken(context,kssp.comma)}
this.result=[];this.txt=''}};kssp.MethodArgs=kukit.tk.mkParser('methodargs',{"'":_returnString,'"':_returnString2,",":_mkReturnToken(kssp.comma),")":_mkEmitAndReturnToken(kssp.closeParent),"(":_returnMethodArgs,"\/\*":_returnComment},_MethodArgs);var _KssSelectors=function(){this.process=function(){this.selectors=[];var context={'nextTokenIndex':0};while(context.nextTokenIndex<this.result.length){this.digestTxt(context,kukit.tk.Fraction,kssp.Comment,kssp.String,kssp.String2);var cursor=new kukit.tk.Cursor(context.txt+' ');var parser=new kssp.KssSelector(cursor,null,true);this.selectors.push(parser.kssSelector);if(context.nextTokenIndex==this.result.length) break;this.expectToken(context,kssp.comma);if(context.nextTokenIndex==this.result.length){this.emitError(kukit.E)}};this.result=[];this.txt=''}};kssp.KssSelectors=kukit.tk.mkParser('kssselectors',{"'": function(){return new kssp.StringInSelector(this.cursor,kssp.quote)},'"': function(){return new kssp.String2InSelector(this.cursor,kssp.dquote)},",":_mkReturnToken(kssp.comma),"{":_emitAndReturn,"\/\*":_returnComment},_KssSelectors);var _KssSelector=function(){this.process=function(){var name;var namespace=null;var id=null;var tokenIndex=this.result.length-1;var cycle=true;while(cycle&&tokenIndex>=0){var token=this.result[tokenIndex];switch(token.symbol){case kukit.tk.Fraction.prototype.symbol:{if(token.txt.match(/^[\r\n\t ]*$/)!=null){tokenIndex-=1} else{this.emitError(kukit.E)}} break;case kssp.Comment.prototype.symbol:{tokenIndex-=1} break;default:{cycle=false} break}}
tokenIndex-=2;if(tokenIndex<0||(this.result[tokenIndex+2].symbol!=kssp.EventValue.prototype.symbol)||(this.result[tokenIndex+1].symbol!=kssp.colon.prototype.symbol)||(this.result[tokenIndex].symbol!=kukit.tk.Fraction.prototype.symbol)){this.emitError(kukit.E)}
var lasttoken=this.result[tokenIndex];var commatoken=this.result[tokenIndex+1];var pseudotoken=this.result[tokenIndex+2];var txt=lasttoken.txt;if(txt.match(/[\r\n\t ]$/)!=null){this.emitError(kukit.E)}
if(!pseudotoken.value.methodName){this.emitError(kukit.E)}
css=this.cursor.text.substring(this.startpos,commatoken.startpos);var singleword=css.replace(/[\r\n\t ]/g,' ');if(singleword&&singleword.charAt(0)==' '){singleword=singleword.substring(1)}
var isEvent=(singleword!='document'&&singleword!='behaviour');if(!isEvent){css=singleword}
var id=null;var ppid=null;if(pseudotoken.value.arg){if(pseudotoken.value.arg.isMethod){ppid=pseudotoken.value.arg;ppid.check(kukit.pprovidersGlobalRegistry)} else{id=pseudotoken.value.arg.txt}}
var name=pseudotoken.value.methodName;var splitname=name.split('-');var namespace=null;if(splitname.length>2){this.emitError(kukit.E)} else if(splitname.length==2){name=splitname[1];namespace=splitname[0]}
this.kssSelector=new kukit.rd.KssSelector(isEvent,css,name,namespace,id,ppid,kukit.eventsGlobalRegistry);this.txt='';this.result=[]}};kssp.KssSelector=kukit.tk.mkParser('kssselector',{":": function(){return [new kssp.colon(this.cursor),new kssp.EventValue(this.cursor)]},"{":_emitAndReturn,"\/\*":_returnComment},_KssSelector);kssp.KssRuleProcessor=function(href){this.initialize=function(){this.href=href;this.loaded=false;this.rules=[]};this.load=function(){var domDoc=new XMLHttpRequest();domDoc.open("GET",this.href,false);domDoc.send(null);this.txt=domDoc.responseText;this.loaded=true};this.parse=function(){var cursor=new kukit.tk.Cursor(this.txt);var parser=new kssp.Document(cursor,null,true);for(var i=0;i<parser.eventRules.length;i++){var rule=parser.eventRules[i];rule.kssSelector.prepareId();this.rules.push(rule)}};this.initialize.apply(this,arguments)}}();kukit.er=new function(){var er=this;var _eventClassCounter=0;var _EventRegistry=function(){this.initialize=function(){this.content={};this.classes={};this.eventSets=[]};this.registerBinder=function(klass){if(typeof(klass)=='undefined'){throw new Error(kukit.E)}
if(klass.__decorated_for_kss__){return}
var binder_prototype=new _EventBinder();for(var key in binder_prototype){klass.prototype[key]=binder_prototype[key]}
className=''+_eventClassCounter;_eventClassCounter+=1;klass.prototype.__className__=className;this.classes[className]=klass;klass.__decorated_for_kss__=true};this.existsBinder=function(className){var klass=this.classes[className];return(typeof(klass)!='undefined')};this.getBinderClass=function(className){var klass=this.classes[className];if(!klass){throw new Error(kukit.E)}
return klass};this._register=function(namespace,eventName,klass,bindMethodName,defaultActionMethodName,iterName){if(typeof(defaultActionMethodName)=='undefined'){throw new Error(kukit.E)}
this.registerBinder(klass);if(!eventName){throw new Error(kukit.E)}
var key=this._getKey(namespace,eventName);var entry=this.content[key];if(typeof(entry)!='undefined'){if(key[0]=='-'){key=key.substring(1)}
throw new Error(kukit.E)}
if(!er.getBindIterator(iterName)){throw new Error(kukit.E)}
this.content[key]={'className':className,'bindMethodName':bindMethodName,'defaultActionMethodName':defaultActionMethodName,'iterName':iterName}};this._registerEventSet=function(namespace,names,iterName,bindMethodName){this.eventSets.push({'namespace':namespace,'names':names,'iterName':iterName,'bindMethodName':bindMethodName})};this.register=function(namespace,eventName,klass,bindMethodName,defaultActionMethodName){this._register(namespace,eventName,klass,bindMethodName,defaultActionMethodName,'EachLegacy');this._registerEventSet(namespace,[eventName],'EachLegacy',bindMethodName)};this.unregister=function(namespace,eventName){var key=this._getKey(namespace,eventName);delete this.content[key];var found=null;for(var i=0;i<this.eventSets.length;i++){var eventSet=this.eventSets[i];if(eventSet['namespace']==namespace){found=i;break}}
if(found!=null){this.eventSets.splice(found,1)}};this.registerForAllEvents=function(namespace,eventNames,klass,bindMethodName,defaultActionMethodName,iterName){if(typeof(eventNames)=='string'){eventNames=[eventNames]}
for(var i=0;i<eventNames.length;i++){var eventName=eventNames[i];this._register(namespace,eventName,klass,bindMethodName,defaultActionMethodName,iterName)}
this._registerEventSet(namespace,eventNames,iterName,bindMethodName)};this._getKey=function(namespace,eventName){if(namespace==null){namespace=''} else if(namespace.split('-')>1){throw new Error(kukit.E)}
return namespace+'-'+eventName};this.exists=function(namespace,eventName){var key=this._getKey(namespace,eventName);var entry=this.content[key];return(typeof(entry)!='undefined')};this.get=function(namespace,eventName){var key=this._getKey(namespace,eventName);var entry=this.content[key];if(typeof(entry)=='undefined'){throw new Error(kukit.E)}
return entry};this.getBinderClassByEventNamespace=function(namespace,eventName){return this.getBinderClass(this.get(namespace,eventName).className)};this.initialize.apply(this,arguments)};kukit.eventsGlobalRegistry=new _EventRegistry();var _eventRegistry=function(){this.register=function(namespace,eventName,klass,bindMethodName,defaultActionMethodName){kukit.eventsGlobalRegistry.register(namespace,eventName,klass,bindMethodName,defaultActionMethodName)}};var _LateBinder=function(){this.initialize=function(binder,name,node){this.binder=binder;this.name=name;this.node=node;this.boundEvent=null};this.executeActions=function(){if(!this.boundEvent){if(kukit.hasFirebug){kukit.log(this.node)}
var info=kukit.engine.binderInfoRegistry.getBinderInfoById(this.binder.__binderId__);var oper=info.bound.getBoundOperForNode(this.name,this.node);if(oper){oper.parms={};this.boundEvent=function(){this.binder.triggerEvent(this.name,oper)}} else{this.boundEvent=function(){}}}
this.boundEvent()};this.initialize.apply(this,arguments)};var _EventBinder=function(){this.continueEvent=function(name,node,defaultParameters){var oper=new kukit.op.Oper();oper.node=node;if(node){var info=kukit.engine.binderInfoRegistry.getBinderInfoById(this.__binderId__);var newOper=info.bound.getBoundOperForNode(name,node);if(newOper){oper=newOper}} else{oper.eventRule=kukit.engine.documentRules.getMergedRule('document',name,this)}
var behav_eventRule=kukit.engine.documentRules.getMergedRule('behaviour',name,this);if(behav_eventRule){if(!oper.eventRule){oper.eventRule=behav_eventRule} else{}}
if(typeof(defaultParameters)!='undefined'){oper.defaultParameters=defaultParameters} else{oper.defaultParameters={}}
this.triggerEvent(name,oper)};this.__continueEvent__=function(name,node,defaultParameters){this.continueEvent(name,node,defaultParameters)};this.continueEventAllNodes=function(name,defaultParameters){var executed=0;var oper=new kukit.op.Oper();var info=kukit.engine.binderInfoRegistry.getBinderInfoById(this.__binderId__);var opers=info.bound.getBoundOpers(name);for(var i=0;i<opers.length;i++){var oper=opers[i];var newOper=oper.clone();if(typeof(defaultParameters)!='undefined'){newOper.defaultParameters=defaultParameters} else{newOper.defaultParameters={}}
this.triggerEvent(name,newOper);executed+=1}};this.__continueEvent_allNodes__=function(name,defaultParameters){this.continueEventAllNodes(name,defaultParameters)};this.makeFuncToBind=function(name,node){var executor=new er._LateBinder(this,name,node);return function(){executor.executeActions()}};this.__makeFuncToBind__=function(name,node){this.makeFuncToBind(name,node)};this.triggerEvent=function(name,oper){oper.binder=this;if(oper.eventRule){oper.eventRule.actions.execute(oper)} else{var namespace=this.__eventNamespace__;var success=oper.executeDefaultAction(name,true);if(!success){throw new Error(kukit.E)}}};this._EventBinder_triggerEvent=function(name,oper){this.triggerEvent(name,oper)};this.callMethod=function(namespace,name,oper,methodName){var method=this[methodName];if(!method){throw new Error(kukit.E)}
oper.binder=this;method.call(this,name,oper)};this._EventBinder_callMethod=function(namespace,name,oper,methodName){this.callMethod(namespace,name,oper,methodName)}};er.BinderInfoRegistry=function(){this.initialize=function(){this.info={}};this.getOrCreateBinderInfo=function(id,className,namespace){var binderInfo=this.info[id];if(typeof(binderInfo)=='undefined'){var binderClass=kukit.eventsGlobalRegistry.getBinderClass(className);var binder=new binderClass();binderInfo=this.info[id]=new _BinderInfo(binder);binder.__binderId__=id;binder.__binderClassName__=className;binder.__eventNamespace__=namespace} else if(binderInfo.getBinder().__binderClassName__!=className){throw new Error(kukit.E)}
return binderInfo};this.getBinderInfoById=function(id){var binderInfo=this.info[id];if(typeof(binderInfo)=='undefined'){throw new Error(kukit.E)}
return binderInfo};this.getSingletonBinderInfoByName=function(namespace,name){var className=kukit.eventsGlobalRegistry.get(namespace,name).className;var id=er.makeId(namespace,className);var binderInfo=this.info[id];if(typeof(binderInfo)=='undefined'){throw new Error(kukit.E)}
return binderInfo};this.startBindingPhase=function(){for(var id in this.info){var binderInfo=this.info[id];binderInfo.startBindingPhase()}};this.processBindingEvents=function(){for(var id in this.info){var binderInfo=this.info[id];binderInfo.processBindingEvents()}};this.initialize.apply(this,arguments)};var _BinderInfo=function(){this.initialize=function(binder){this.binder=binder;this.bound=new _OperRegistry();this.getBinder=function(){return this.binder};this.startBindingPhase=function(){this.binding=new _OperRegistry()};this.bindOper=function(oper){this.bound.checkOperBindable(oper);this.binding.bindOper(oper)};this.processBindingEvents=function(){this.binding.processBindingEvents(this.binder);this.binding.propagateTo(this.bound);this.binding=null};this.startBindingPhase()};this.getBinder=function(){return this.binder};this.startBindingPhase=function(){this.binding=new _OperRegistry()};this.bindOper=function(oper){this.bound.checkOperBindable(oper);this.binding.bindOper(oper)};this.processBindingEvents=function(){this.binding.processBindingEvents(this.binder);this.binding.propagateTo(this.bound);this.binding=null};this.initialize.apply(this,arguments)};var _iterators={};_iterators['EachLegacy']=function(eventSet,binder){for(var i=0;i<eventSet.names.length;i++){var rulesPerName=this.infoPerName[eventSet.names[i]];if(typeof(rulesPerName)!='undefined'){for(var nodeHash in rulesPerName){var oper=rulesPerName[nodeHash];var eventName=oper.getEventName();var funcToBind=oper.makeExecuteActionsHook();this.callBindMethod(eventSet,binder,eventName,funcToBind,oper)}}}};_iterators['Each']=function(eventSet,binder){for(var i=0;i<eventSet.names.length;i++){var rulesPerName=this.infoPerName[eventSet.names[i]];if(typeof(rulesPerName)!='undefined'){for(var nodeHash in rulesPerName){var oper=rulesPerName[nodeHash];this.callBindMethod(eventSet,binder,oper)}}}};_iterators['Opers']=function(eventSet,binder){var opers=[];for(var i=0;i<eventSet.names.length;i++){var rulesPerName=this.infoPerName[eventSet.names[i]];if(typeof(rulesPerName)!='undefined'){for(var nodeHash in rulesPerName){opers.push(rulesPerName[nodeHash])}}}
this.callBindMethod(eventSet,binder,opers)};_iterators['Node']=function(eventSet,binder){for(var nodeHash in this.infoPerNode){var rulesPerNode=this.infoPerNode[nodeHash];var filteredRules={};var operFound=false;for(var i=0;i<eventSet.names.length;i++){var name=eventSet.names[i];var oper=rulesPerNode[name];if(typeof(oper)!='undefined'){filteredRules[name]=oper;operFound=oper}}
if(operFound){this.callBindMethod(eventSet,binder,filteredRules,operFound.node)}}};_iterators['AllNodes']=function(eventSet,binder){var items=[];var hasResult=false;for(var nodeHash in this.infoPerNode){var rulesPerNode=this.infoPerNode[nodeHash];var filteredRules={};var operFound=false;for(var i=0;i<eventSet.names.length;i++){var name=eventSet.names[i];var oper=rulesPerNode[name];if(typeof(oper)!='undefined'){filteredRules[name]=oper;operFound=oper}}
if(operFound){var item={node:operFound.node,opersByEventName:filteredRules};items.push(item);hasResult=true}}
if(hasResult){this.callBindMethod(eventSet,binder,items)}};er.getBindIterator=function(iterName){var canonical=iterName.substring(0,1).toUpperCase()+iterName.substring(1);if(canonical=='Allnodes'){canonical='AllNodes'}
if(iterName!=canonical){iterName=canonical}
return _iterators[iterName]};var _OperRegistry=function(){this.initialize=function(){this.infoPerName={};this.infoPerNode={}};this.propagateTo=function(newreg){for(var key in this.infoPerName){var rulesPerName=this.infoPerName[key];for(var name in rulesPerName){var oper=rulesPerName[name];newreg.bindOper(oper)}}};this.checkOperBindable=function(oper,name,nodeHash){var info=this.infoPerName;if(typeof(nodeHash)=='undefined'){name=oper.eventRule.kssSelector.name;nodeHash=kukit.rd.hashNode(oper.node)}
var rulesPerName=info[name];if(typeof(rulesPerName)=='undefined'){rulesPerName=info[name]={}} else if(typeof(rulesPerName[nodeHash])!='undefined'){throw new Error(kukit.E)}
return rulesPerName};this.bindOper=function(oper){var name=oper.eventRule.kssSelector.name;var nodeHash=kukit.rd.hashNode(oper.node);var rulesPerName=this.checkOperBindable(oper,name,nodeHash);rulesPerName[nodeHash]=oper;var rulesPerNode=this.infoPerNode[nodeHash];if(typeof(rulesPerNode)=='undefined'){rulesPerNode=this.infoPerNode[nodeHash]={}}
rulesPerNode[name]=oper};this.processBindingEvents=function(binder){var eventRegistry=kukit.eventsGlobalRegistry;for(var i=0;i<eventRegistry.eventSets.length;i++){var eventSet=eventRegistry.eventSets[i];if(eventSet.bindMethodName){if(binder.__eventNamespace__==eventSet.namespace){var iterator=er.getBindIterator(eventSet.iterName);iterator.call(this,eventSet,binder)}}}};this.getBoundOperForNode=function(name,node){var rulesPerName=this.infoPerName[name];if(typeof(rulesPerName)=='undefined'){return null}
var nodeHash=kukit.rd.hashNode(node);var oper=rulesPerName[nodeHash];if(typeof(oper)=='undefined'){return null}
return oper};this.getBoundOpers=function(name){var opers=[];var rulesPerName=this.infoPerName[name];if(typeof(rulesPerName)!='undefined'){for(var nodeHash in rulesPerName){opers.push(rulesPerName[nodeHash])}}
return opers};this.callBindMethod=function(eventSet,binder,p1,p2,p3,p4,p5,p6){var method=binder[eventSet.bindMethodName];method.call(binder,p1,p2,p3,p4,p5,p6)};this.initialize.apply(this,arguments)};er.makeId=function(namespace,name){if(namespace==null){namespace=''}
return '@'+namespace+'@'+name};er.makeMergeId=function(id,namespace,name){if(namespace==null){namespace=''}
return id+'@'+namespace+'@'+name}}();kukit.ar=new function(){var ar=this;var _ActionRegistry=function(){this.initialize=function(){this.content={}};this.register=function(name,func){if(this.content[name]){return}
this.content[name]=func};this.exists=function(name){var entry=this.content[name];return(typeof(entry)!='undefined')};this.get=function(name){var func=this.content[name];if(!func){throw Error(kukit.E)}
return func};this.initialize.apply(this,arguments)};kukit.actionsGlobalRegistry=new _ActionRegistry();ar.actionRegistry=function(){this.register=function(name,func){kukit.actionsGlobalRegistry.register(name,func)}}}();kukit.dom=new function(){var dom=this;dom.getPreviousSiblingTag=function(node){var toNode=node.previousSibling;while((toNode!=null)&&(toNode.nodeType!=1)){toNode=toNode.previousSibling}
return toNode};dom.getNextSiblingTag=function(node){var toNode=node.nextSibling;while((toNode!=null)&&(toNode.nodeType!=1)){toNode=toNode.nextSibling}
return toNode};dom.insertBefore=function(nodes,parentNode,toNode){for(var i=0;i<nodes.length;i++){parentNode.insertBefore(nodes[i],toNode)}};dom.appendChildren=function(nodes,toNode){for(var i=0;i<nodes.length;i++){toNode.appendChild(nodes[i])}};dom.clearChildNodes=function(node){Sarissa.clearChildNodes(node)};dom.parseHTMLNodes=function(txt){var node=document.createElement('div');node.innerHTML=txt;var resultNodes=[];for(var i=0;i<node.childNodes.length;i++){resultNodes.push(node.childNodes.item(i))}
return resultNodes};dom.cssQuery=function(selector,inNodes){if(typeof(inNodes)!='undefined'&&inNodes==null){throw new Error(kukit.E)}
return _cssQuery(selector,inNodes)};var _USE_BASE2=(typeof(base2)!='undefined');if(_USE_BASE2){var _USE_BASE2_LEGACY=(typeof(base2.DOM.Document.querySelectorAll)=='undefined');if(!_USE_BASE2_LEGACY){var _cssQuery=function(selector,inNodes){var results=base2.DOM.Document.querySelectorAll(document,selector);var nodes=[];for(var i=0;i<results.length;i++){nodes.push(results.item(i))}
return nodes}} else{var _cssQuery=function(selector,inNodes){var results=base2.DOM.Document.matchAll(document,selector);var nodes=[];for(var i=0;i<results.length;i++){nodes.push(results.item(i))}
return nodes}}} else{var _cssQuery=function(selector,inNodes){var results=cssQuery(selector);return results}};dom.focus=function(node){tagName=node.tagName.toLowerCase();if((tagName=='input')||(tagName=='select')||(tagName=='textarea')){node.focus()}};dom.blur=function(node){tagName=node.tagName.toLowerCase();if((tagName=='input')||(tagName=='select')||(tagName=='textarea')){node.blur()}};dom.textContent=function(node,recursive){var value=_textContent(node,recursive);value=value.replace(/\r\n/g,' ');value=value.replace(/[\r\n]/g,' ');return value};var _textContent=function(node,recursive){if(typeof(recursive)=='undefined'){recursive=false}
var value='';var childnodes=node.childNodes;for(var i=0;i<childnodes.length;i++){var child=childnodes[i];if(child.nodeType==3){value+=child.nodeValue} else if(recursive&&child.nodeType==1){value+=dom.textContent(child,true)}}
return value};dom.getAttribute=function(node,attrname){if(attrname.toLowerCase()=='style'){throw new Error('Style attribute is not allowed with getAttribute')}
try{var value=node.getAttribute(attrname)}
catch(e){var value=null}
if(!value){if(attrname.toLowerCase()=='class'){value=node.className} else if(attrname.toLowerCase()=='for'){value=node.htmlFor}}
return value};dom.setAttribute=function(node,attrname,value){if(attrname.toLowerCase()=='style'){throw new Error('Style attribute is not allowed with setAttribute')}
else if(attrname.toLowerCase()=='class'){node.className=value} else if(attrname.toLowerCase()=='for'){node.htmlFor=value;node.setAttribute(attrname,value)} else if(attrname.toLowerCase()=='value'){node.value=value} else if(attrname.toLowerCase()=='checked'){value=!(value==''||value=='false'||value=='False');node.checked=value} else{node.setAttribute(attrname,value)}};var _kssAttrNamespace='kssattr';var _kssNamespacePrefix='kss';var _getKssValueFromEncodings=function(encodings,prefix){prefix=prefix+'-';var prefixLength=prefix.length;for(var i=0;i<encodings.length;i++){var encoding=encodings[i];if(encoding.substr(0,prefixLength)==prefix){return encoding.substr(prefixLength)}}
return null};var _getKssClassAttribute=function(node,attrname){var klass=dom.getAttribute(node,'class');if(klass){var splitclass=klass.split(/ +/);return _getKssValueFromEncodings(splitclass,'kssattr-'+attrname)}
return null};dom.getKssAttribute=function(node,attrname){var fullName=_kssAttrNamespace+':'+attrname;var result=dom.getAttribute(node,fullName);if(!result){result=_getKssClassAttribute(node,attrname)}
return result};dom.setKssAttribute=function(node,attrname,value){var fullName=_kssAttrNamespace+':'+attrname;dom.setAttribute(node,fullName,value)};dom.getKssValue=function(node,keyType,key){var namespacedName=_kssNamespacePrefix+'-'+keyType;var attrName=namespacedName+':'+key;var result=node.getAttribute(attrName);if(!result){result=null;var klass=dom.getAttribute(node,'class');var encodings;if(klass){encodings=klass.split(/ +/)} else{encodings=[]}
var id=dom.getAttribute(node,'id');if(id){encodings.unshift(id)}
var prefix=namespacedName+'-'+key;return _getKssValueFromEncodings(encodings,prefix)}
return result};dom.setKssValue=function(node,keyType,key,value){var namespacedName=_kssNamespacePrefix+'-'+keyType;var attrName=namespacedName+':'+key;node.setAttribute(attrName,value)};dom.locateMarkup=function(node,recurseParents,getter,p1,p2,p3,p4,p5){var value=getter(node,p1,p2,p3,p4,p5);var element=node;if(recurseParents){while(!value){element=element.parentNode;if(!element||!element.getAttribute){break}
value=getter(element,p1,p2,p3,p4,p5)}}
if(typeof(value)=='undefined'){value=null}
return{value:value,node:element}};dom.getRecursiveAttribute=function(node,attrname,recurseParents,getter){return dom.locateMarkup(node,recurseParents,getter,attrname).value};var _getIframeDocument=function(framename){var iframe=document.getElementById(framename);var doc=iframe.contentWindow||iframe.contentDocument;if(doc.document){doc=doc.document}
return doc};dom.EmbeddedContentLoadedScheduler=function(){this.initialize=function(framename,func,autodetect){this.framename=framename;this.func=func;this.autodetect=autodetect;var self=this;var f=function(){self.check()};this.counter=new kukit.ut.TimerCounter(250,f,true);this.counter.start()};this.check=function(){var doc=_getIframeDocument(this.framename);if(doc['_'+'embeddedContentLoadedInitDone']){this.counter.restart=false}
if(typeof doc['_'+'kssReadyForLoadEvent']!='undefined'){this.counter.restart=false}
if(this.autodetect&&this.counter.restart){if(doc.location.href=='about:blank'){return}
if(/KHTML|WebKit/i.test(navigator.userAgent)){if(/loaded|complete/.test(doc.readyState)){this.counter.restart=false}} else if(typeof doc.getElementsByTagName!='undefined'&&(doc.getElementsByTagName('body')[0]!=null||doc.body!=null)){this.counter.restart=false}}
if(!this.counter.restart){doc['_'+'embeddedContentLoadedInitDone']=true;this.func()}};this.initialize.apply(this,arguments)};dom.getNsTags=function(dom_obj,tagName){tags=dom_obj.getElementsByTagName(tagName);return tags};var _hasClassName=function(node,class_name){return new RegExp('\\b'+class_name+'\\b').test(node.className)};dom.addClassName=function(node,class_name){if(!node.className){node.className=class_name} else if(!_hasClassName(node,class_name)){var className=node.className+" "+class_name;node.className=className.split(/\s+/).join(' ')}};dom.removeClassName=function(node,class_name){var className=node.className;if(className){className=className.replace(new RegExp('\\b'+class_name+'\\b'),'');className=className.replace(/\s+/g,' ');node.className=className.replace(/\s+$/g,'')}};dom.createCookie=function(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days * 24 * 60 * 60 * 1000));var expires="; expires="+date.toGMTString()}
else var expires="";document.cookie=name+"="+value+expires+"; path=/"};dom.readCookie=kukit.readCookie;dom.eraseCookie=function(name){createCookie(name,"",-1)}}();kukit.cr=new function(){var cr=this;var _CommandRegistry=function(){this.initialize=function(){this.commands={}};this.registerFromAction=function(srcname,factory,name){if(typeof(name)=='undefined'){name=srcname}
var f=kukit.actionsGlobalRegistry.get(srcname);factory(name,f)};this.register=function(name,klass){if(this.commands[name]){return}
this.commands[name]=klass};this.get=function(name){var klass=this.commands[name];return klass};this.initialize.apply(this,arguments)};kukit.commandsGlobalRegistry=new _CommandRegistry();cr.commandRegistry={};cr.commandRegistry.registerFromAction=function(srcname,factory,name){kukit.commandsGlobalRegistry.registerFromAction(srcname,factory,name)};cr.makeCommand=function(selector,name,type,parms,transport){var commandClass=kukit.commandsGlobalRegistry.get(name);var command=new commandClass();command.selector=selector;command.name=name;command.selectorType=type;command.parms=parms;command.transport=transport;return command};var _executeCommand=function(oper){var newoper=oper.clone({'parms':this.parms,'orignode':oper.node,'node':null});this.executeOnScope(newoper)};var _executeCommandOnSelector=function(oper){var selectorType=this.selectorType||kukit.selectorTypesGlobalRegistry.defaultSelectorType;var providerClass=kukit.pprovidersGlobalRegistry.get(selectorType);if(providerClass.prototype.returnType!='selection'){kukit.E='Undefined selector type ['+selectorType+'], ';kukit.E='it exists as provider but it does not return a selection.';throw new Error(kukit.E)}
var provider=new providerClass();var args=[this.selector];var nodes=provider.eval(args,oper.orignode,{});for(var i=0;i<nodes.length;i++){oper.node=nodes[i];this.executeOnSingleNode(oper)}};cr.makeSelectorCommand=function(name,executeOnSingleNode){var commandClass=function(){this.execute=_executeCommand;this.executeOnScope=_executeCommandOnSelector;this.executeOnSingleNode=executeOnSingleNode};kukit.commandsGlobalRegistry.register(name,commandClass)};cr.makeGlobalCommand=function(name,executeOnce){var commandClass=function(){this.execute=_executeCommand;this.executeOnScope=executeOnce;this.executeOnSingleNode=executeOnce};kukit.commandsGlobalRegistry.register(name,commandClass)}}();kukit.sa=new function(){var sa=this;sa.ServerActionBase=function(){this.initialize=function(name,oper){this.oper=oper;this.url=oper.kssParms.kssUrl;if(typeof(this.url)=='undefined'){this.url=name}
this.url=this.calculateAbsoluteURL(this.url);this.notifyServer()};this.calculateAbsoluteURL=function(url){if(url.match(RegExp("/^https?:\/\//"))){return url}
var absoluteMatch=url.match(RegExp(/^(\/)(.*)/));var path=kukit.engine.baseUrl;if(absoluteMatch){var base=path.match(RegExp(/^(.*:\/\/[^\/]*)(\/?)/))[1];url=base+url;return url}
if(!path.match(RegExp("/$"))){path+='/'}
url=path+url;return url};this.notifyServer=function(){var self=this;var sendHook=function(queueItem){self.oper.queueItem=queueItem;self.reallyNotifyServer()};var timeoutHook=function(queueItem){self.oper.queueItem=queueItem;self.processError('timeout')};kukit.engine.requestManager.notifyServer(sendHook,this.url,timeoutHook)};this.reallyNotifyServer=function(){var domDoc=new XMLHttpRequest();var self=this;var notifyServer_done=function(){self.notifyServer_done(domDoc)};var query=new kukit.fo.FormQuery();for(var key in this.oper.parms){query.appendElem(key,this.oper.parms[key])}
var submitForm=this.oper.kssParms.kssSubmitForm;if(submitForm){for(var i=0;i<submitForm.length;i++){var item=submitForm[i];query.appendElem(item[0],item[1])}}
var encoded=query.encode();var ts=new Date().getTime();var tsurl=this.url+"?kukitTimeStamp="+ts;domDoc.open("POST",tsurl,true);domDoc.onreadystatechange=notifyServer_done;domDoc.setRequestHeader("Content-Type","application/x-www-form-urlencoded");domDoc.send(encoded)};this.notifyServer_done=function(domDoc){if(domDoc.readyState==4){var success=this.oper.queueItem.receivedResult();if(success){try{this.processResult(domDoc)} catch(e){if(e.name=='ResponseParsingError'){this.processError(kukit.E)} else if(e.name=='ExplicitError'){this.processError(e.info.kw.errorcommand)} else{throw e}}}}};this.processResult=function(domDoc){var dom;var commandstags=[];if(domDoc.responseXML){dom=domDoc.responseXML;commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}}
if(dom==null){var payload=domDoc.getResponseHeader('X-KSSCOMMANDS');if(payload){try{dom=(new DOMParser()).parseFromString(payload,"text/xml")} catch(e){throw kukit.err.responseParsingError(kukit.E)}
commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}} else{throw kukit.err.responseParsingError(kukit.E)}};if(dom==null){throw kukit.err.responseParsingError(msg)}
var commands=kukit.dom.getNsTags(dom,'command');if(commands.length==0){return}
var command_processor=new kukit.cp.CommandProcessor();command_processor.parseCommands(commands,domDoc);kukit.engine.beginSetupEventsCollection();command_processor.executeCommands(this.oper);kukit.engine.finishSetupEventsCollection()};this.processError=function(errorcommand){var error_action=null;if(this.oper.eventRule){var error_action=this.oper.eventRule.actions.getErrorActionFor(this.oper.action)}
if(error_action){error_action.execute(this.oper)} else{}}};sa.ServerAction=function(){this.initialize.apply(this,arguments)};sa.ServerAction.prototype=new sa.ServerActionBase()}();kukit.rm=new function(){var rm=this;rm._rid=0;var _RequestItem=function(){this.initialize=function(sendHook,url,timeoutHook,timeout,now){if(typeof(now)=='undefined'){now=(new Date()).valueOf()}
this.sent=now;this.expire=now+timeout;this.handled=false;this.sendHook=sendHook;this.url=url;this.timeoutHook=timeoutHook;this.rid=rm._rid;rm._rid++;if(rm._rid>=10000000000){rm._rid=0}};this.callTimeoutHook=function(){if(this.timeoutHook){this.timeoutHook(this)}};this.setReceivedCallback=function(func){this._receivedCallback=func};this.receivedResult=function(now){var result=this._receivedCallback(this,now);this._receivedCallback=null;return result};this.initialize.apply(this,arguments)};rm.TestRequestItem=function(){kukit.logWarning('Use class [rm.TestRequestItem] only in tests !');this.initialize.apply(this,arguments)};rm.TestRequestItem.prototype=new _RequestItem();var _TimerQueue=function(){this.initialize=function(callback){this.callback=callback;this.queue=new kukit.ut.SortedQueue(this._sentSort);this.count=0};this._sentSort=function(a,b){if(a.expire<b.expire) return-1;else if(a.expire>b.expire) return+1;else return 0};this.push=function(item){this.queue.push(item);this.count+=1};this.pop=function(item){if(typeof(item)=='undefined'||item.handled){return false} else{item.handled=true;this.count-=1;return true}};this.handleExpiration=function(now){if(typeof(now)=='undefined'){now=(new Date()).valueOf()}
var to;for(to=0;to<this.queue.size();to++){var item=this.queue.get(to);if(!item.handled){if(item.expire>now){break} else{item.handled=true;this.count-=1;this.callback(item)}}}
this.queue.popn(to);var front=this.queue.front();var next_expire=null;if(front){next_expire=front.expire}
return next_expire};this.initialize.apply(this,arguments)};rm.TestTimerQueue=function(){kukit.logWarning('Use class [rm.TestTimerQueue] only in tests !');this.initialize.apply(this,arguments)};rm.TestTimerQueue.prototype=new _TimerQueue();rm.RequestManager=function(){this.initialize=function(name,maxNr,schedulerClass,sendingTimeout){this.waitingQueue=new kukit.ut.FifoQueue();this.sentNr=0;var self=this;var timeoutItem=function(item){self.timeoutItem(item)};this.timerQueue=new _TimerQueue(timeoutItem);if(typeof(name)=='undefined'){name=null}
this.name=name;var nameString='';if(name!=null){nameString='['+name+'] '}
this.nameString=nameString;if(typeof(maxNr)=='undefined'||maxNr==null){maxNr=4}
this.maxNr=maxNr;var checkTimeout=function(){self.checkTimeout()};if(typeof(schedulerClass)=='undefined'){schedulerClass=kukit.ut.Scheduler}
this.timeoutScheduler=new schedulerClass(checkTimeout);this.spinnerEvents={'off':[],'on':[]};this.spinnerState=false;if(typeof(sendingTimeout)!='undefined'&&sendingTimeout!=null){this.sendingTimeout=sendingTimeout}};this.setSpinnerState=function(newState){if(this.spinnerState!=newState){this.spinnerState=newState;var events=this.spinnerEvents[newState?'on':'off'];for(var i=0;i<events.length;i++){events[i]()}}};this.pushWaitingRequest=function(item,now){this.waitingQueue.push(item);this.checkTimeout(now)};this.popWaitingRequest=function(){var q=this.waitingQueue;while(!q.empty()&&q.front().handled){q.pop()}
if(!q.empty()){return q.pop()} else{return null}};this.pushSentRequest=function(item,now){this.sentNr+=1;this.setSpinnerState(true);this.checkTimeout(now);var self=this;var func=function(item,now){return self.receiveItem(item,now)};item.setReceivedCallback(func);item.sendHook(item)};this.checkTimeout=function(now){var nextWake=this.timerQueue.handleExpiration(now);if(nextWake){nextWake+=50} else{this.setSpinnerState(false)}
this.timeoutScheduler.setNextWakeAtLeast(nextWake)};this.popSentRequest=function(item){var success=this.timerQueue.pop(item);this.sentNr-=1;return success};this.isSentRequestQueueFull=function(){return(this.sentNr>=this.maxNr)};this.receivedResult=function(item,now){var success=this.popSentRequest(item);var waiting=this.popWaitingRequest();if(waiting!=null){this.pushSentRequest(waiting,now)} else{this.setSpinnerState(false)}
return success};this.receiveItem=function(item,now){var success=this.receivedResult(item,now);return success};this.timeoutItem=function(item){item.callTimeoutHook()};this.notifyServer=function(sendHook,url,timeoutHook,timeout,now){if(typeof(timeout)=='undefined'){timeout=this.sendingTimeout}
var item=new _RequestItem(sendHook,url,timeoutHook,timeout,now);this.timerQueue.push(item);if(!this.isSentRequestQueueFull()){this.pushSentRequest(item,now)} else{this.pushWaitingRequest(item,now)}};this.registerSpinnerEvent=function(func,state){this.spinnerEvents[state?'on':'off'].push(func)};this.initialize.apply(this,arguments)};rm.RequestManager.prototype.sendingTimeout=8000}();kukit.cp=new function(){var cp=this;cp.CommandProcessor=function(){this.initialize=function(){this.commands=new Array()};this.parseCommands=function(commands,transport){for(var y=0;y<commands.length;y++){var command=commands[y];this.parseCommand(command,transport);var lastcommand=this.commands[this.commands.length-1];if(lastcommand.name=='error'){throw kukit.err.explicitError(lastcommand)}}};this.parseCommand=function(command,transport){var selector="";var params={};var name="";selector=command.getAttribute("selector");name=command.getAttribute("name");type=command.getAttribute("selectorType");if(name==null)
name="";var childNodes=command.childNodes;for(var n=0;n<childNodes.length;n++){var childNode=childNodes[n];if(childNode.nodeType!=1)
continue;if(childNode.localName){if(childNode.localName.toLowerCase()!="param"){throw new Error('Bad payload, expected param')}} else{if(childNode.nodeName.toLowerCase()!="param"){throw new Error('Bad payload, expected param (IE)')}}
var data=childNode.getAttribute('name');if(data!=null){var childCount=childNode.childNodes.length;var result;if(childCount==0){result=''} else{result=childNode.firstChild.nodeValue}
params[data]=result} else{throw new Error('Bad payload, expected attribute "name"')}}
var command=new kukit.cr.makeCommand(selector,name,type,params,transport);this.addCommand(command)};this.addCommand=function(command){this.commands[this.commands.length]=command};this.executeCommands=function(oper){if(typeof(oper)=='undefined'||oper==null){oper=new kukit.op.Oper()}
var commands=this.commands;for(var y=0;y<commands.length;y++){var command=commands[y];command.execute(oper)}};this.initialize.apply(this,arguments)}}();kukit.sr=new function(){var sr=this;sr.pproviderSelRegistry=new kukit.pr.ValueProviderRegistry();var _AnyPP=function(){this.check=function(args){};this.eval=function(args,node,defaultParameters){var f=kukit.selectorTypesGlobalRegistry.get(this.selector_type);return f(args[0],node,defaultParameters,node)}};sr.pproviderSelRegistry.register('',_AnyPP);sr.makeAnyPP=function(selector_type){var pp=function(){};pp.prototype=new _AnyPP();pp.prototype.selector_type=selector_type;return pp};var _PassnodePP=function(){this.check=function(args){};this.eval=function(args,node,defaultParameters){var value=defaultParameters[args[0]];if(typeof(value)=='undefined'){throw new Error(kukit.E)}
nodes=[value];return nodes}};sr.pproviderSelRegistry.register('passnode',_PassnodePP,'selection');var _SelectorTypeRegistry=function(){this.initialize=function(){this.mapping={}};this.register=function(name,func){if(typeof(func)=='undefined'){throw new Error('Func is mandatory.')}
this.mapping[name]=func;var pp=sr.makeAnyPP(name);kukit.pprovidersGlobalRegistry.register(name,pp,'selection')};this.get=function(name){if(!name){name=this.defaultSelectorType}
var result=this.mapping[name];return result};this.initialize.apply(this,arguments)};_SelectorTypeRegistry.prototype.defaultSelectorType='css';kukit.selectorTypesGlobalRegistry=new _SelectorTypeRegistry();kukit.selectorTypesGlobalRegistry.register('htmlid', function(expr,node){var nodes=[];var node=document.getElementById(expr);if(node){nodes.push(node)}
return nodes});kukit.selectorTypesGlobalRegistry.register('css', function(expr,node){var nodes=kukit.dom.cssQuery(expr);return nodes});kukit.selectorTypesGlobalRegistry.register('samenode', function(expr,node){nodes=[node];return nodes});kukit.selectorTypesGlobalRegistry.register('parentnode', function(expr,node){var selectednodes=kukit.dom.cssQuery(expr);var parentnodes=[];var parentnode=node.parentNode;while(parentnode.parentNode){parentnodes.push(parentnode);parentnode=parentnode.parentNode}
var results=[];for(var i=0;i<selectednodes.length;i++){var inchain=false;for(var j=0;j<parentnodes.length;j++){if(selectednodes[i]===parentnodes[j]){inchain=true}}
if(inchain){results.push(selectednodes[i])}}
return results})}();kukit.fo=new function(){var fo=this;var _dictPrefix='';var _dictSeparator='.';var _dictPostfix=':record';var _FormQueryElem=function(){this.initialize=function(name,value){this.name=name;this.value=value};this.encode=function(){return this.name+"="+encodeURIComponent(this.value)};this.initialize.apply(this,arguments)};fo.FormQuery=function(){this.initialize=function(){this.l=[]};this.appendElem=function(name,value){if(value==null){}
else if(typeof(value)=='string'){var elem=new _FormQueryElem(name,value);this.l.push(elem)}
else if(typeof(value)=='object'&&typeof(value.length)=='number'&&typeof(value.pop)=='function'){for(var i=0;i<value.length;i++){var elem=new _FormQueryElem(name,value[i]);this.l.push(elem)}}
else if(typeof(value)=='object'){for(var key in value){var qkey=_dictPrefix+name+_dictSeparator;qkey+=key+_dictPostfix;var elem=new _FormQueryElem(qkey,value[key]);this.l.push(elem)}}};this.encode=function(){var poster=[];for(var i=0;i<this.l.length;i++){poster[poster.length]=this.l[i].encode()}
return poster.join("&")};this.toDict=function(){var d={};for(var i=0;i<this.l.length;i++){var elem=this.l[i];d[elem.name]=elem.value}
return d};this.initialize.apply(this,arguments)};var findContainer=function(node,func){while(node!=null){if(func(node)){return node}
node=node.parentNode}
return null};fo.CurrentFormLocator=function(){this.initialize=function(target){this.target=target};this.queryForm=function(){return findContainer(this.target, function(node){if(!node.nodeName){return false}
if(node.nodeName.toLowerCase()=="form"){return true} else{return false}})};this.getForm=function(){var form=this.queryForm();if(!form){return null}
return form};this.initialize.apply(this,arguments)};fo.NamedFormLocator=function(){this.initialize=function(formname){this.formname=formname};this.queryForm=function(){return document.forms[this.formname]};this.initialize.apply(this,arguments)};fo.NamedFormLocator.prototype=new fo.CurrentFormLocator();fo.getValueOfFormElement=function(element){this.fieldUpdateRegistry.doUpdate(element);if(element.disabled){return null}
if(element.selectedIndex!=undefined){if(!element.multiple){if(element.selectedIndex<0){value=""} else{var option=element.options[element.selectedIndex];value=option.value||option.text}} else{var value=[];for(i=0;i<element.options.length;i++){var option=element.options[i];if(option.selected){value.push(option.value||option.text)}}}} else if(typeof element.length!='undefined'&&((typeof element[0]!='undefined'&&element[0].type=="radio")||(typeof element.item(0)!='undefined'&&element.item(0).type=="radio"))){var radioList=element;value=null;for(var i=0;i<radioList.length;i++){var radio=radioList[i]||radioList.item(i);if(radio.checked){value=radio.value}}} else if(element.type=="radio"||element.type=="checkbox"){if(element.checked){value=element.value} else{value=null}} else if((element.tagName.toLowerCase()=='textarea')||(element.tagName.toLowerCase()=='input'&&element.type!='submit'&&element.type!='reset')){value=element.value} else{value=null}
return value};fo.getFormVar=function(locator,name){var form=locator.getForm();if(!form)
return null;var value=null;var element=form[name];if(element){var value=fo.getValueOfFormElement(element)}
return value};fo.getAllFormVars=function(locator,collector){var form=locator.getForm();if(!form)
return collector.result;var elements=form.elements;for(var y=0;y<elements.length;y++){var element=elements[y];var value=fo.getValueOfFormElement(element);if(value!=null){collector.add(element.name,value)}}
return collector.result};var _FieldUpdateRegistry=function(){this.initialize=function(){this.editors={}};this.register=function(node,editor){var hash=kukit.rd.hashNode(node);if(typeof(this.editors[hash])!='undefined'){throw new Error(kukit.E)}
this.editors[hash]=editor;editor.doInit()};this.doUpdate=function(node){var hash=kukit.rd.hashNode(node);var editor=this.editors[hash];if(typeof(editor)!='undefined'){editor.doUpdate(node)}};this.initialize.apply(this,arguments)};this.fieldUpdateRegistry=new _FieldUpdateRegistry();var _FormValueProvider=function(){this.check=function(args){};this.eval=function(args,node){var locator=new fo.NamedFormLocator(args[0]);var collector=new kukit.ut.TupleCollector();return fo.getAllFormVars(locator,collector)}};kukit.pprovidersGlobalRegistry.register('form',_FormValueProvider,'formquery');var _CurrentFormValueProvider=function(){this.check=function(args){};this.eval=function(args,node){var locator=new fo.CurrentFormLocator(node);var collector=new kukit.ut.TupleCollector();return fo.getAllFormVars(locator,collector)}};kukit.pprovidersGlobalRegistry.register('currentForm',_CurrentFormValueProvider,'formquery');fo.getCurrentForm=function(target){return new fo.CurrentFormLocator(target).getForm()};fo.getFormVarFromCurrentForm=function(target,name){return fo.getFormVar(new fo.CurrentFormLocator(target),name)};fo.getFormVarFromNamedForm=function(formname,name){return fo.getFormVar(new fo.NamedFormLocator(formname),name)};fo.getAllFormVarsFromCurrentForm=function(target){return fo.getAllFormVars(new fo.CurrentFormLocator(target),new kukit.ut.DictCollector())};fo.getAllFormVarsFromNamedForm=function(formname){return fo.getAllFormVars(new fo.NamedFormLocator(formname),new kukit.ut.DictCollector())}}();kukit.pl=new function(){var pl=this;pl.getTargetForBrowserEvent=function(e){if(!e) var e=window.event;var target=null;if(e.target){target=e.target} else if(e.srcElement){target=e.srcElement}
return target};pl.registerBrowserEvent=function(oper,filter,eventName){var func_to_bind=oper.makeExecuteActionsHook(filter);if(!eventName)
eventName=oper.getEventName();var func=function(e){var target=pl.getTargetForBrowserEvent(e);if(oper.parms.allowbubbling||target==oper.node){var exc;var success;try{success=func_to_bind({'browserevent':e})} catch(exc1){exc=exc1}
if(success||exc){if(oper.parms.preventdefault){if(e.preventDefault)
e.preventDefault();try{e.returnValue=false} catch(exc2){}}
if(oper.parms.preventbubbling){if(!e) var e=window.event;e.cancelBubble=true;if(e.stopPropagation) e.stopPropagation()}}
if(exc!=null){throw exc}}};kukit.ut.registerEventListener(oper.node,eventName,func);if(oper.parms.preventdefault&&kukit.HAVE_SAFARI&&(oper.parms.allowbubbling||eventName=='click'&&oper.node.tagName.toLowerCase()=='a')){oper.node.onclick=function cancelClickSafari(){return false}}};pl.NativeEventBinder=function(){this.__bind__node=function(name,func_to_bind,oper){this.__bind__(name,func_to_bind,oper)};this.__bind__nodeorwindow=function(name,func_to_bind,oper){if(oper.node==null){oper.node=window}
this.__bind__(name,func_to_bind,oper)};this.__bind__window=function(name,func_to_bind,oper){oper.node=window;this.__bind__(name,func_to_bind,oper)};this.__bind__nodeordocument=function(name,func_to_bind,oper){if(oper.node==null){oper.node=document}
this.__bind__(name,func_to_bind,oper)};this.__bind__=function(name,func_to_bind,oper){oper.evaluateParameters([],{'preventdefault':'','allowbubbling':'','preventbubbling':''});oper.evalBool('preventdefault');oper.evalBool('allowbubbling');oper.evalBool('preventbubbling');if(oper.parms.preventdefault){if(name!='click'){throw new Error(kukit.E)}}
pl.registerBrowserEvent(oper,null,name)};this.__bind_key__=function(name,func_to_bind,oper){oper.evaluateParameters([],{'preventdefault':'true','allowbubbling':'','preventbubbling':'','keycodes':''});oper.evalList('keycodes');oper.evalBool('preventdefault');oper.evalBool('allowbubbling');oper.evalBool('preventbubbling');var selected_keycodes_only=false;if(oper.parms.keycodes.length>0){var keycodes={};for(var i=0;i<oper.parms.keycodes.length;i++){var keyCode=oper.parms.keycodes[i];keycodes[keyCode]=true}
selected_keycodes_only=true}
var filter=function(oper){var keyCode=oper.browserevent.keyCode;if(keyCode==0){keyCode=oper.browserevent.charCode} else{if(keyCode>=65&&keyCode<=90&&oper.browserevent.shiftKey==false){keyCode=keyCode+32}}
if(keyCode){keyCode=keyCode.toString()} else{kukit.logWarning(keyCode);keyCode='0'}
kukit.log(keyCode);oper.defaultParameters={keycode:keyCode};if(selected_keycodes_only){if(keyCode=='0'){return false} else{return keycodes[keyCode]}} else{return true}};pl.registerBrowserEvent(oper,filter)}};pl.TimeoutEventBinder=function(){this.initialize=function(){this.counters={}};this.__bind__=function(name,func_to_bind,oper){oper.evaluateParameters(['delay'],{'repeat':'true'});oper.evalBool('repeat');var key=oper.eventRule.getIndex();if(!(oper.parms.repeat&&this.counters[key])){var f=function(){if(oper.node!=null&&!oper.node.parentNode){this.clear()} else{func_to_bind()}};var delay=oper.parms.delay;var repeat=oper.parms.repeat;var counter=new kukit.ut.TimerCounter(delay,f,repeat);this.counters[key]=counter;counter.start()}};this.initialize.apply(this,arguments)};pl.LoadEventBinder=function(){this.processParameters=function(oper,iload){if(!oper){return}
if(iload){oper.evaluateParameters(['autodetect'],{'initial':'true','insert':'true'});oper.evalBool('autodetect')} else{oper.evaluateParameters([],{'initial':'true','insert':'true'})}
oper.evalBool('initial');oper.evalBool('insert');var phase;if(oper.node==null){phase=1} else{phase=oper.node._kukitMark}
if(phase==1&&!oper.parms.initial){return}
if(phase==2&&!oper.parms.insert){return}
return oper};this.__bind__=function(opers_by_eventName){var loadoper=opers_by_eventName.load;var iloadoper=opers_by_eventName.iload;loadoper=this.processParameters(loadoper);iloadoper=this.processParameters(iloadoper,true);var anyoper=loadoper||iloadoper;if(!anyoper){return}
if(anyoper.node!=null&&anyoper.node.tagName.toLowerCase()=='iframe'){if(loadoper&&!iloadoper){iloadoper=loadoper;loadoper=null;iloadoper.parms.autodetect=false}} else{if(iloadoper){throw new Error(kukit.E)}}
if(loadoper){var func_to_bind=loadoper.makeExecuteActionsHook();var remark='';kukit.engine.bindScheduler.addPost(func_to_bind,remark)}
if(iloadoper){var phase=iloadoper.node._kukitMark;if(phase==2||(phase==1&&kukit.engine.initializedOnDOMLoad)){var g=function(){var f=function(){var func_to_bind=iloadoper.makeExecuteActionsHook();var remark='';kukit.engine.bindScheduler.addPost(func_to_bind,remark)};new kukit.dom.EmbeddedContentLoadedScheduler(iloadoper.node.id,f,iloadoper.parms.autodetect)};var remark='';kukit.engine.bindScheduler.addPost(g,remark)} else{var func_to_bind=iloadoper.makeExecuteActionsHook();var remark='';kukit.engine.bindScheduler.addPost(func_to_bind,remark)}}}};pl.SpinnerEventBinder=function(){this.initialize=function(){this.state=false;var self=this;var _timeoutSetState=function(spinnerevent){self.timeoutSetState(spinnerevent)};this.scheduler=new kukit.ut.Scheduler(_timeoutSetState)};this.__bind__=function(name,func_to_bind,oper){oper.evaluateParameters([],{'laziness':0});oper.evalInt('laziness');var state_to_bind=(name=='spinneron');var self=this;var func=function(){self.setState(func_to_bind,state_to_bind,oper.parms.laziness)};kukit.engine.requestManager.registerSpinnerEvent(func,state_to_bind)};this.setState=function(func_to_bind,state,laziness){this.func_to_bind=func_to_bind;this.state=state;var now=(new Date()).valueOf();var wakeUp=now+laziness;this.scheduler.setNextWakeAtLeast(wakeUp)};this.timeoutSetState=function(){var func=this.func_to_bind;func()};this.initialize.apply(this,arguments)}}();kukit.eventsGlobalRegistry.register(null,'blur',kukit.pl.NativeEventBinder,'__bind__nodeorwindow',null);kukit.eventsGlobalRegistry.register(null,'focus',kukit.pl.NativeEventBinder,'__bind__nodeorwindow',null);kukit.eventsGlobalRegistry.register(null,'resize',kukit.pl.NativeEventBinder,'__bind__nodeorwindow',null);kukit.eventsGlobalRegistry.register(null,'click',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'dblclick',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'mousedown',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'mouseup',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'mousemove',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'mouseover',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'mouseout',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'change',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'reset',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'select',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'submit',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'keydown',kukit.pl.NativeEventBinder,'__bind_key__',null);kukit.eventsGlobalRegistry.register(null,'keypress',kukit.pl.NativeEventBinder,'__bind_key__',null);kukit.eventsGlobalRegistry.register(null,'keyup',kukit.pl.NativeEventBinder,'__bind_key__',null);kukit.eventsGlobalRegistry.register(null,'timeout',kukit.pl.TimeoutEventBinder,'__bind__',null);kukit.eventsGlobalRegistry.registerForAllEvents(null,['load','iload'],kukit.pl.LoadEventBinder,'__bind__',null,'Node');kukit.eventsGlobalRegistry.register(null,'spinneron',kukit.pl.SpinnerEventBinder,'__bind__',null);kukit.eventsGlobalRegistry.register(null,'spinneroff',kukit.pl.SpinnerEventBinder,'__bind__',null);kukit.actionsGlobalRegistry.register('error', function(oper){throw new Error('The builtin error action should never execute.')});kukit.commandsGlobalRegistry.registerFromAction('error',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('logDebug', function(oper){var name='[logDebug] action';oper.evaluateParameters([],{'message':'[logDebug] action'},name);var message=oper.parms.message;kukit.logDebug(message)});kukit.commandsGlobalRegistry.registerFromAction('logDebug',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('log', function(oper){oper.evaluateParameters([],{'message':'Log action'},'log action');var message=oper.parms.message;kukit.log(message)});kukit.commandsGlobalRegistry.registerFromAction('log',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('alert', function(oper){oper.evaluateParameters([],{'message':'Alert action'},'alert action');var message=oper.parms.message;alert(message)});kukit.commandsGlobalRegistry.registerFromAction('alert',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('replaceInnerHTML', function(oper){oper.evaluateParameters(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var node=oper.node;node.innerHTML=oper.parms.html;var insertedNodes=[];for(var i=0;i<node.childNodes.length;i++){insertedNodes.push(node.childNodes[i])}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(insertedNodes)}});kukit.commandsGlobalRegistry.registerFromAction('replaceInnerHTML',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('replaceHTML', function(oper){oper.evaluateParameters(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var node=oper.node;var elements=kukit.dom.parseHTMLNodes(oper.parms.html);var length=elements.length;if(length>0){var parentNode=node.parentNode;var insertedNodes=[];var next=elements[length-1];parentNode.replaceChild(next,node);insertedNodes.push(next);for(var i=length-2;i>=0;i--){var inserted=parentNode.insertBefore(elements[i],next);insertedNodes.push(inserted);next=inserted}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(insertedNodes)}}});kukit.commandsGlobalRegistry.registerFromAction('replaceHTML',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setAttribute', function(oper){oper.evaluateParameters(['name','value'],{});if(oper.parms.name.toLowerCase()=='style'){throw new Error(kukit.E)}
kukit.dom.setAttribute(oper.node,oper.parms.name,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('setAttribute',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setKssAttribute', function(oper){oper.evaluateParameters(['name','value'],{});kukit.dom.setKssAttribute(oper.node,oper.parms.name,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('setKssAttribute',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setStyle', function(oper){oper.evaluateParameters(['name','value'],{});oper.node.style[oper.parms.name]=oper.parms.value});kukit.commandsGlobalRegistry.registerFromAction('setStyle',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('addClass', function(oper){oper.evaluateParameters(['value'],{});kukit.dom.addClassName(oper.node,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('addClass',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('removeClass', function(oper){oper.evaluateParameters(['value'],{});kukit.dom.removeClassName(oper.node,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('removeClass',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLAfter', function(oper){oper.evaluateParameters(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);var parentNode=oper.node.parentNode;var toNode=kukit.dom.getNextSiblingTag(oper.node);if(toNode==null){kukit.dom.appendChildren(content,parentNode)} else{kukit.dom.insertBefore(content,parentNode,toNode)}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAfter',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLBefore', function(oper){oper.evaluateParameters(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);var toNode=oper.node;var parentNode=toNode.parentNode;kukit.dom.insertBefore(content,parentNode,toNode);if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLBefore',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLAsLastChild', function(oper){oper.evaluateParameters(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);kukit.dom.appendChildren(content,oper.node);if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAsLastChild',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLAsFirstChild', function(oper){oper.evaluateParameters(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);var parentNode=oper.node;var toNode=parentNode.firstChild;if(toNode==null){kukit.dom.appendChildren(content,parentNode)} else{kukit.dom.insertBefore(content,parentNode,toNode)}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAsFirstChild',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('deleteNodeAfter', function(oper){var parentNode=oper.node.parentNode;var toNode=kukit.dom.getNextSiblingTag(oper.node);if(toNode!=null){parentNode.removeChild(toNode)}});kukit.commandsGlobalRegistry.registerFromAction('deleteNodeAfter',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('deleteNodeBefore', function(oper){var parentNode=oper.node.parentNode;var toNode=kukit.dom.getPreviousSiblingTag(oper.node);parentNode.removeChild(toNode)});kukit.commandsGlobalRegistry.registerFromAction('deleteNodeBefore',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('deleteNode', function(oper){var parentNode=oper.node.parentNode;parentNode.removeChild(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('deleteNode',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('clearChildNodes', function(oper){oper.evaluateParameters([],{'none':false});kukit.dom.clearChildNodes(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('clearChildNodes',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('focus', function(oper){oper.evaluateParameters([],{'none':false});kukit.dom.focus(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('focus',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('blur', function(oper){oper.evaluateParameters([],{'none':false});kukit.dom.blur(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('blur',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('moveNodeAfter', function(oper){var node=oper.node;var parentNode=node.parentNode;parentNode.removeChild(node);var toNode=document.getElementById(oper.parms.html_id);var nextNode=kukit.dom.getNextSiblingTag(toNode);if(nextNode==null){toNode.parentNode.appendChild(node)} else{parentNode.insertBefore(node,nextNode)}});kukit.commandsGlobalRegistry.registerFromAction('moveNodeAfter',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('moveNodeBefore', function(oper){var node=oper.node;var toNode=document.getElementById(oper.parms.html_id);var parentNode=toNode.parentNode;parentNode.insertBefore(node,toNode)});kukit.commandsGlobalRegistry.registerFromAction('moveNodeBefore',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('moveNodeAsLastChild', function(oper){var node=oper.node;var parentNode=document.getElementById(oper.parms.html_id);parentNode.appendChild(node)});kukit.commandsGlobalRegistry.registerFromAction('moveNodeAsLastChild',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('copyChildNodesFrom', function(oper){var fromNode=document.getElementById(oper.parms.html_id);Sarissa.copyChildNodes(fromNode,oper.node)});kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesFrom',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('copyChildNodesTo', function(oper){toNode=document.getElementById(oper.parms.html_id);Sarissa.copyChildNodes(oper.node,toNode)});kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesTo',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setStateVar', function(oper){kukit.engine.stateVariables[oper.parms.varname]=oper.parms.value});kukit.commandsGlobalRegistry.registerFromAction('setStateVar',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('continueEvent', function(oper){oper.evaluateParameters(['name'],{'allnodes':'false'},'',true);oper.evalBool('allnodes','continueEvent');var parms=oper.parms;var binder=oper.binder;var allNodes=parms.allnodes;var actionParameters={};for(var key in parms){if(key!='name'&&key!='allnodes'){actionParameters[key]=parms[key]}}
if(parms.allnodes){binder.continueEventAllNodes(parms.name,actionParameters)} else{binder.continueEvent(parms.name,oper.orignode,actionParameters)}});kukit.commandsGlobalRegistry.registerFromAction('continueEvent',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('executeCommand', function(oper){oper.evaluateParameters(['name','selector'],{'selectorType':null},'',true);var parms=oper.parms;var actionParameters={};for(var key in parms){if(key!='name'&&key!='selector'&&key!='selectorType'){actionParameters[key]=parms[key]}}
var command=new kukit.cr.makeCommand(parms.selector,parms.name,parms.selectorType,actionParameters);command.execute(oper)});kukit.actionsGlobalRegistry.register('toggleClass', function(oper){kukit.actionsGlobalRegistry.BBB_classParms(oper);var node=oper.node;var className=oper.parms.value;var nodeclass=kukit.dom.getAttribute(node,'class');var classFoundAtIndex=-1;var parts=nodeclass.split(' ');for(var i=0;i<parts.length;i++){if(parts[i]==className){classFoundAtIndex=i}}
if(classFoundAtIndex==-1){parts.push(className)} else{parts.splice(classFoundAtIndex,1)}
kukit.dom.setAttribute(node,'class',parts.join(' '))});kukit.commandsGlobalRegistry.registerFromAction('toggleClass',kukit.cr.makeSelectorCommand);kukit.commandsGlobalRegistry.registerFromAction('replaceInnerHTML',kukit.cr.makeSelectorCommand,'setHtmlAsChild');kukit.commandsGlobalRegistry.registerFromAction('replaceHTML',kukit.cr.makeSelectorCommand,'replaceNode');kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAfter',kukit.cr.makeSelectorCommand,'addAfter');kukit.commandsGlobalRegistry.registerFromAction('deleteNodeAfter',kukit.cr.makeSelectorCommand,'removeNextSibling');kukit.commandsGlobalRegistry.registerFromAction('deleteNodeBefore',kukit.cr.makeSelectorCommand,'removePreviousSibling');kukit.commandsGlobalRegistry.registerFromAction('deleteNode',kukit.cr.makeSelectorCommand,'removeNode');kukit.commandsGlobalRegistry.registerFromAction('clearChildNodes',kukit.cr.makeSelectorCommand,'clearChildren');kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesFrom',kukit.cr.makeSelectorCommand,'copyChildrenFrom');kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesTo',kukit.cr.makeSelectorCommand,'copyChildrenTo');kukit.commandsGlobalRegistry.registerFromAction('setStateVar',kukit.cr.makeGlobalCommand,'setStatevar');kukit.actionsGlobalRegistry.register('addClassName', function(oper){kukit.actionsGlobalRegistry.BBB_classParms(oper);kukit.actionsGlobalRegistry.get('addClass')(oper)});kukit.commandsGlobalRegistry.registerFromAction('addClassName',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('removeClassName', function(oper){kukit.actionsGlobalRegistry.BBB_classParms(oper);kukit.actionsGlobalRegistry.get('removeClass')(oper)});kukit.commandsGlobalRegistry.registerFromAction('removeClassName',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.BBB_classParms=function(oper){var old;var has_old;if(typeof(oper.parms.className)!='undefined'){old=oper.parms.className;has_old=true}
if(typeof(oper.parms.name)!='undefined'){old=oper.parms.name;has_old=true}
if(has_old){if(typeof(oper.parms.value)=='undefined'){oper.parms={value:old}} else{oper.parms={}}}};if(typeof(Effect)!="undefined"){kukit.HASEFFECTS=1} else{kukit.HASEFFECTS=0}
if(kukit.HASEFFECTS&&typeof(Effect.Transitions)!="undefined"){kukit.actionsGlobalRegistry.register("effect", function(oper){oper.evaluateParameters([],{'type':'fade'},'scriptaculous effect');var node=oper.node;if(oper.parms.type=='fade'){new Effect.Fade(node)} else if(oper.parms.type=='appear'){new Effect.Appear(node)} else if(oper.parms.type=='puff'){new Effect.Puff(node)} else if(oper.parms.type=='blinddown'){new Effect.BlindDown(node)} else if(oper.parms.type=='blindup'){new Effect.BlindUp(node)}});kukit.commandsGlobalRegistry.registerFromAction('effect',kukit.cr.makeSelectorCommand);this.$=function $(){var results=[],element;for(var i=0;i<arguments.length;i++){element=arguments[i];if(typeof element=='string')
element=document.getElementById(element);results.push(Element.extend(element))}
return results.length<2?results[0]:results}}
if(!kukit.plugin){kukit.plugin={}}
kukit.plugin.cacheability=new function(){var ca=this;ca.ServerAction=function(){this.initialize=function initialize(name,oper,method){this.oper=oper;this.url=oper.kssParms.kssUrl;if(typeof(this.url)=='undefined'){this.url=name}
if(typeof(method)=='undefined'){this.method='GET'} else{this.method=method}};this.execute=function execute(){this.url=this.calculateAbsoluteURL(this.url);this.notifyServer()};this.calculateAbsoluteURL=function(url){if(url.match(RegExp("/^https?:\/\//"))){return url}
var absoluteMatch=url.match(RegExp(/^(\/)(.*)/));var path=kukit.engine.baseUrl;if(absoluteMatch){var base=path.match(RegExp(/^(.*:\/\/[^\/]*)(\/?)/))[1];url=base+url;return url}
if(!path.match(RegExp("/\/$/"))){path+='/'}
url=path+url;return url};this.reallyNotifyServer=function(){var domDoc=new XMLHttpRequest();var self=this;var notifyServer_done=function(){self.notifyServer_done(domDoc)};var query=new kukit.fo.FormQuery();for(var key in this.oper.parms){query.appendElem(key,this.oper.parms[key])}
var submitForm=this.oper.kssParms.kssSubmitForm;if(submitForm){for(var i=0;i<submitForm.length;i++){var item=submitForm[i];query.appendElem(item[0],item[1])}}
var encoded=query.encode();var url=this.url;if(this.method=='POST'){domDoc.open("POST",url,true);domDoc.onreadystatechange=notifyServer_done;domDoc.setRequestHeader("Content-Type","application/x-www-form-urlencoded");domDoc.send(encoded)} else{url=url+'?'+encoded;domDoc.open("GET",url,true);domDoc.onreadystatechange=notifyServer_done;domDoc.send(null)}};this.notifyServer=function(){var self=this;var sendHook=function(queueItem){self.oper.queueItem=queueItem;self.reallyNotifyServer()};var timeoutHook=function(queueItem){self.oper.queueItem=queueItem;self.processError('timeout')};kukit.engine.requestManager.notifyServer(sendHook,this.url,timeoutHook)};this.notifyServer_done=function(domDoc){if(domDoc.readyState==4){var success=this.oper.queueItem.receivedResult();if(success){try{this.processResult(domDoc)} catch(e){if(e.name=='ResponseParsingError'){this.processError(kukit.E)} else if(e.name=='ExplicitError'){this.processError(e.info.kw.errorcommand)} else{throw e}}}}};this.processResult=function(domDoc){var dom;var commandstags=[];if(domDoc.responseXML){dom=domDoc.responseXML;commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}}
if(dom==null){var payload=domDoc.getResponseHeader('X-KSSCOMMANDS');if(payload){try{dom=(new DOMParser()).parseFromString(payload,"text/xml")} catch(e){throw kukit.err.responseParsingError(kukit.E)}
commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}}
if(dom==null){var payload=domDoc.getResponseHeader('X-KSSCOMMANDS');if(payload){try{dom=(new DOMParser()).parseFromString(payload,"text/xml")} catch(e){throw kukit.err.responseParsingError(kukit.E)}
commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}} else{throw kukit.err.responseParsingError(kukit.E)}}
if(dom==null){throw kukit.err.responseParsingError(msg)}
var commands=kukit.dom.getNsTags(dom,'command');if(commands.length==0){return}
var command_processor=new kukit.cp.CommandProcessor();command_processor.parseCommands(commands,domDoc);kukit.engine.beginSetupEventsCollection();command_processor.executeCommands(this.oper);kukit.engine.finishSetupEventsCollection()};this.processError=function(errorcommand){var error_action=null;if(this.oper.eventRule){var error_action=this.oper.eventRule.actions.getErrorActionFor(this.oper.action)}
if(error_action){error_action.execute(this.oper)} else{throw kukit.err.responseParsingError(kukit.E)}}
if(dom==null){throw kukit.err.responseParsingError(msg)}
var commands=kukit.dom.getNsTags(dom,'command');if(commands.length==0){return}
var command_processor=new kukit.cp.CommandProcessor();command_processor.parseCommands(commands,domDoc);kukit.engine.beginSetupEventsCollection();command_processor.executeCommands(this.oper);kukit.engine.finishSetupEventsCollection()};this.processError=function(errorcommand){var error_action=null;if(this.oper.eventRule){var error_action=this.oper.eventRule.actions.getErrorActionFor(this.oper.action)}
if(error_action){error_action.execute(this.oper)} else{}};this.initialize.apply(this,arguments)};kukit.actionsGlobalRegistry.register('cacheability-serverAction', function(oper){oper.evaluateParameters(['url'],{'method':'GET'},'',true);var method=oper.parms.method.toUpperCase();var newparms={};for(var key in oper.parms){if(key!='url'&&key!='method'){newparms[key]=oper.parms[key]}}
var newoper=oper.clone({parms:newparms});var sa=new ca.ServerAction(oper.parms.url,newoper,method);sa.execute()});kukit.actionsGlobalRegistry.register('cacheability-triggerEventInBinder', function(oper){oper.evaluateParameters(['name'],{'binderid':null},'',true);var parms=oper.parms;var defaultParameters={};for(var key in parms){if(key!='name'&&key!='binderid'){defaultParameters[key]=parms[key]}}
var splitname=parms.name.split('-',2);var namespace;var name;if(splitname.length==2){namespace=splitname[0];name=splitname[1]} else{namespace=null;name=parms.name}
var binderid=parms.binderid;var is_singleton=(binderid==null);var className=kukit.eventsGlobalRegistry.get(namespace,name).className;if(is_singleton){binderid=kukit.er.makeId(namespace,className)}
var binderInfo=kukit.engine.binderInfoRegistry.info[binderid];if(typeof(binderInfo)=='undefined'){binderInfo=kukit.engine.binderInfoRegistry.getOrCreateBinderInfo(binderid,className,namespace)}
var binder=binderInfo.getBinder();binder.continueEvent(name,oper.node,defaultParameters)});kukit.commandsGlobalRegistry.registerFromAction('cacheability-triggerEventInBinder',kukit.cr.makeGlobalCommand)}();kukit.actionsGlobalRegistry.register("ksstutorial-demoplugin", function(oper){oper.completeParms(['text'],{},'ksstutorial-demoplugin action');alert(oper.parms.text);if(_SARISSA_HAS_DOM_FEATURE&&document.implementation.hasFeature("XPath","3.0")){
function SarissaNodeList(i){this.length=i};SarissaNodeList.prototype.item=function(i){return(i<0||i>=this.length)?null:this[i]};SarissaNodeList.prototype.expr="";XMLDocument.prototype.setProperty=function(x,y){};Sarissa.setXpathNamespaces=function(oDoc,sNsSet){oDoc._sarissa_useCustomResolver=true;var namespaces=sNsSet.indexOf(" ")>-1?sNsSet.split(" "):new Array(sNsSet);oDoc._sarissa_xpathNamespaces=new Array(namespaces.length);for(var i=0;i<namespaces.length;i++){var ns=namespaces[i];var colonPos=ns.indexOf(":");var assignPos=ns.indexOf("=");if(colonPos==5&&assignPos>colonPos+2){var prefix=ns.substring(colonPos+1,assignPos);var uri=ns.substring(assignPos+2,ns.length-1);oDoc._sarissa_xpathNamespaces[prefix]=uri}else{throw "Bad format on namespace declaration(s) given"}}};XMLDocument.prototype._sarissa_useCustomResolver=false;XMLDocument.prototype._sarissa_xpathNamespaces=new Array();XMLDocument.prototype.selectNodes=function(sExpr,contextNode){var nsDoc=this;var nsresolver=this._sarissa_useCustomResolver? function(prefix){var s=nsDoc._sarissa_xpathNamespaces[prefix];if(s)return s;else throw "No namespace URI found for prefix: '" + prefix+"'"}:this.createNSResolver(this.documentElement);var oResult=this.evaluate(sExpr,(contextNode?contextNode:this),nsresolver,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);var nodeList=new SarissaNodeList(oResult.snapshotLength);nodeList.expr=sExpr;for(var i=0;i<nodeList.length;i++)
nodeList[i]=oResult.snapshotItem(i);return nodeList};Element.prototype.selectNodes=function(sExpr){var doc=this.ownerDocument;if(doc.selectNodes)
return doc.selectNodes(sExpr,this);else
throw "Method selectNodes is only supported by XML Elements"};XMLDocument.prototype.selectSingleNode=function(sExpr,contextNode){var ctx=contextNode?contextNode:null;sExpr="("+sExpr+")[1]";var nodeList=this.selectNodes(sExpr,ctx);if(nodeList.length>0)
return nodeList.item(0);else
return null};Element.prototype.selectSingleNode=function(sExpr){var doc=this.ownerDocument;if(doc.selectSingleNode)
return doc.selectSingleNode(sExpr,this);else
throw "Method selectNodes is only supported by XML Elements"};Sarissa.IS_ENABLED_SELECT_NODES=true};
function addEventHandler(element,event,method,context){var wrappedmethod=new ContextFixer(method,context);var args=new Array(null,null);for(var i=4;i<arguments.length;i++){args.push(arguments[i])};wrappedmethod.args=args;try{if(_SARISSA_IS_MOZ){element.addEventListener(event,wrappedmethod.execute,false)} else if(_SARISSA_IS_IE){element.attachEvent("on"+event,wrappedmethod.execute)} else{throw _("Unsupported browser!")};return wrappedmethod.execute} catch(e){alert(_('exception ${message} while registering an event handler '+'for element ${element}, event ${event}, method ${method}',{'message':e.message,'element':element,'event':event,'method':method}))}};
function removeEventHandler(element,event,method){if(_SARISSA_IS_MOZ){window.removeEventListener(event,method,false)} else if(_SARISSA_IS_IE){element.detachEvent("on"+event,method)} else{throw _("Unsupported browser!")}};
function getFromSelector(selector){var match=/#(\S+)\s*([^ .]+)\.(\S+)/.exec(selector);if(!match){return window.document.getElementById(selector)}
var id=match[1],tag=match[2],className=match[3];var base=window.document.getElementById(id);return getBaseTagClass(base,tag,className)}
function getBaseTagClass(base,tag,className){var classPat=new RegExp('\\b'+className+'\\b');var nodes=base.getElementsByTagName(tag);for(var i=0;i<nodes.length;i++){if(classPat.test(nodes[i].className)){return nodes[i]}}
return null}
function openPopup(url,width,height){var sw=screen.width;var sh=screen.height;var left=sw/ 2 - width / 2;var top=sh/ 2 - height / 2;var win=window.open(url,'someWindow','width='+width+',height='+height+',left='+left+',top='+top);return win};
function selectSelectItem(select,item){for(var i=0;i<select.options.length;i++){var option=select.options[i];if(option.value==item){select.selectedIndex=i;return}}
select.selectedIndex=0};
function ParentWithStyleChecker(tagnames,style,stylevalue,command){return function(selNode,button,editor,event){if(command){var result=editor.getInnerDocument().queryCommandState(command)
if(result||editor.getSelection().getContentLength()==0){return result}};var currnode=selNode;while(currnode&&currnode.style){for(var i=0;i<tagnames.length;i++){if(currnode.nodeName.toLowerCase()==tagnames[i].toLowerCase()){return true}};if(style&&currnode.style[style]==stylevalue){return true};currnode=currnode.parentNode};return false}};
function _load_dict_helper(element){var dict={};for(var i=0;i<element.childNodes.length;i++){var child=element.childNodes[i];if(child.nodeType==1){var value='';for(var j=0;j<child.childNodes.length;j++){if(child.childNodes[j].nodeType==1){value=_load_dict_helper(child);break} else if(typeof(value)==typeof('')){value+=child.childNodes[j].nodeValue}};if(typeof(value)==typeof('')&&!isNaN(parseInt(value))&&parseInt(value).toString().length==value.length){value=parseInt(value)} else if(typeof(value)!=typeof('')){if(value.length==1){value=value[0]}};var name=child.nodeName.toLowerCase();if(dict[name]!=undefined){if(!dict[name].push){dict[name]=new Array(dict[name],value)} else{dict[name].push(value)}} else{dict[name]=value}}};return dict};
function loadDictFromXML(document,islandid){var dict={};var confnode=getFromSelector(islandid);var root=null;for(var i=0;i<confnode.childNodes.length;i++){if(confnode.childNodes[i].nodeType==1){root=confnode.childNodes[i];break}};if(!root){throw(_('No element found in the config island!'))};dict=_load_dict_helper(root);return dict};
function NodeIterator(node,continueatnextsibling){this.node=node;this.current=node;this.terminator=continueatnextsibling?null:node;this.next=function(){if(this.current===false){this.current=this.node};var current=this.current;if(current.firstChild){this.current=current.firstChild} else{while(current!=this.terminator&&!current.nextSibling){current=current.parentNode};if(current==this.terminator){this.current=false} else{this.current=current.nextSibling}};return this.current};this.reset=function(){this.current=this.node};this.setCurrent=function(node){this.current=node}};
function BaseSelection(){this.splitNodeAtSelection=function(node){if(!this.selectionInsideNode(node)){throw(_('Selection not inside the node!'))};var doc=this.document.getDocument();var br=doc.createElement('br');br.setAttribute('node_splitter','indeed');this.replaceWithNode(br);var clone=node.cloneNode(true);var iterator=new NodeIterator(node);var currnode=iterator.next();var remove=false;while(currnode){if(currnode.nodeName.toLowerCase()=='br'&&currnode.getAttribute('node_splitter')=='indeed'){remove=true};var lastnode=currnode;currnode=iterator.next();if(remove&&(lastnode.nodeType==3||!lastnode.hasChildNodes())){lastnode.parentNode.removeChild(lastnode)}};var iterator=new NodeIterator(clone);var currnode=iterator.next();var remove=true;while(currnode){var lastnode=currnode;currnode=iterator.next();if(lastnode.nodeName.toLowerCase()=='br'&&lastnode.getAttribute('node_splitter')=='indeed'){lastnode.parentNode.removeChild(lastnode);remove=false};if(remove&&(lastnode.nodeType==3||!lastnode.hasChildNodes())){lastnode.parentNode.removeChild(lastnode)}};if(node.nextSibling){node.parentNode.insertBefore(clone,node.nextSibling)} else{node.parentNode.appendChild(clone)};this.reset();return clone};this.selectionInsideNode=function(node){var currnode=this.parentElement();while(currnode){if(currnode==node){return true};currnode=currnode.parentNode};return false}};
function MozillaSelection(document){this.document=document;this.selection=document.getWindow().getSelection();this.selectNodeContents=function(node){this.selection.removeAllRanges();this.selection.selectAllChildren(node)};this.collapse=function(collapseToEnd){try{if(!collapseToEnd){this.selection.collapseToStart()} else{this.selection.collapseToEnd()}} catch(e){}};this.replaceWithNode=function(node,selectAfterPlace){var range=this.selection.getRangeAt(0);this.selection.removeAllRanges();range.deleteContents();var container=range.startContainer;var pos=range.startOffset;var range=this.document.getDocument().createRange();if(container.nodeType==3&&node.nodeType==3){container.insertData(pos,node.nodeValue);range.setEnd(container,pos+node.length);range.setStart(container,pos+node.length)} else{var afterNode;if(container.nodeType==3){var textNode=container;var container=textNode.parentNode;var text=textNode.nodeValue;var textBefore=text.substr(0,pos);var textAfter=text.substr(pos);var beforeNode=this.document.getDocument().createTextNode(textBefore);afterNode=this.document.getDocument().createTextNode(textAfter);container.insertBefore(afterNode,textNode);container.insertBefore(node,afterNode);container.insertBefore(beforeNode,node);container.removeChild(textNode)} else{afterNode=container.childNodes[pos];if(afterNode){container.insertBefore(node,afterNode)} else{container.appendChild(node)}}
range.setEnd(afterNode,0);range.setStart(afterNode,0)}
if(selectAfterPlace){this.selection=this.document.getWindow().getSelection();this.selection.addRange(range);if(selectAfterPlace.nodeType==1){this.selection.selectAllChildren(selectAfterPlace)} else{if(node.hasChildNodes()){this.selection.selectAllChildren(node)} else{var range=this.selection.getRangeAt(0).cloneRange();this.selection.removeAllRanges();range.selectNode(node);this.selection.addRange(range)}};this.document.getWindow().focus()};return node};this.startOffset=function(){var startnode=this.startNode();var startnodeoffset=0;if(startnode==this.selection.anchorNode){startnodeoffset=this.selection.anchorOffset} else{startnodeoffset=this.selection.focusOffset};var parentnode=this.parentElement();if(startnode==parentnode){return startnodeoffset};var currnode=parentnode.firstChild;var offset=0;if(!currnode){if(startnodeoffset!=0){throw(_('Start node offset detected in a node without children!'))};return 0};while(currnode!=startnode){if(currnode.nodeType==3){offset+=currnode.nodeValue.length};currnode=currnode.nextSibling};return offset+startnodeoffset};this.startNode=function(){var anode=this.selection.anchorNode;var aoffset=this.selection.anchorOffset;var onode=this.selection.focusNode;var ooffset=this.selection.focusOffset;var arange=this.document.getDocument().createRange();arange.setStart(anode,aoffset);var orange=this.document.getDocument().createRange();orange.setStart(onode,ooffset);return arange.compareBoundaryPoints('START_TO_START',orange)<=0?anode:onode};this.endOffset=function(){var endnode=this.endNode();var endnodeoffset=0;if(endnode=this.selection.focusNode){endnodeoffset=this.selection.focusOffset} else{endnodeoffset=this.selection.anchorOffset};var parentnode=this.parentElement();var currnode=parentnode.firstChild;var offset=0;if(parentnode==endnode){for(var i=0;i<parentnode.childNodes.length;i++){var child=parentnode.childNodes[i];if(i==endnodeoffset){return offset};if(child.nodeType==3){offset+=child.nodeValue.length}}};if(!currnode){if(endnodeoffset!=0){var msg=_('End node offset detected in a node without '+'children!');alert(msg);throw(msg)};return 0};while(currnode!=endnode){if(currnode.nodeType==3){offset+=currnode.nodeValue.length};currnode=currnode.nextSibling};return offset+endnodeoffset};this.endNode=function(){var anode=this.selection.anchorNode;var aoffset=this.selection.anchorOffset;var onode=this.selection.focusNode;var ooffset=this.selection.focusOffset;var arange=this.document.getDocument().createRange();arange.setStart(anode,aoffset);var orange=this.document.getDocument().createRange();orange.setStart(onode,ooffset);return arange.compareBoundaryPoints('START_TO_START',orange)>0?anode:onode};this.getContentLength=function(){return this.selection.toString().length};this.cutChunk=function(startOffset,endOffset){var range=this.selection.getRangeAt(0);var offsetParent=this.parentElement();var currnode=offsetParent.firstChild;var curroffset=0;var startparent=null;var startparentoffset=0;while(currnode){if(currnode.nodeType==3){var nodelength=currnode.nodeValue.length;if(curroffset+nodelength<startOffset){curroffset+=nodelength} else{startparent=currnode;startparentoffset=startOffset-curroffset;break}};currnode=currnode.nextSibling};var currnode=offsetParent.firstChild;var curroffset=0;var endparent=null;var endoffset=0;while(currnode){if(currnode.nodeType==3){var nodelength=currnode.nodeValue.length;if(curroffset+nodelength<endOffset){curroffset+=nodelength} else{endparent=currnode;endparentoffset=endOffset-curroffset;break}};currnode=currnode.nextSibling};if(!startparent){throw(_('Start offset out of range!'))};if(!endparent){throw(_('End offset out of range!'))};var newrange=range.cloneRange();newrange.setStart(startparent,startparentoffset);newrange.setEnd(endparent,endparentoffset);return newrange.extractContents()};this.getElementLength=function(element){var length=0;var currnode=element.firstChild;while(currnode){if(currnode.nodeType==3){length+=currnode.nodeValue.length};currnode=currnode.nextSibling};return length};this.parentElement=function(){if(this.selection.rangeCount==0){var parent=this.document.getDocument().body;while(parent.firstChild){parent=parent.firstChild}} else{var range=this.selection.getRangeAt(0);var parent=range.commonAncestorContainer;var inv=range.compareBoundaryPoints(Range.START_TO_END,range)<0;var startNode=inv?range.endContainer:range.startContainer;var startOffset=inv?range.endOffset:range.startOffset;var endNode=inv?range.startContainer:range.endContainer;var endOffset=inv?range.startOffset:range.endOffset;var selectedChild=null;var child=parent.firstChild;while(child){if(range.intersectsNode(child)&&!(child==startNode&&startOffset==child.length)&&!(child==endNode&&endOffset==0)){if(selectedChild){selectedChild=null;break} else{selectedChild=child}} else if(selectedChild){break};child=child.nextSibling};if(selectedChild){parent=selectedChild}};if(parent.nodeType==Node.TEXT_NODE){parent=parent.parentNode};return parent};this.getSelectedNode=this.parentElement;this.moveStart=function(offset){var offsetparent=this.parentElement();var startoffset=this.startOffset();var realoffset=offset+startoffset;if(realoffset>=0){var currnode=offsetparent.firstChild;var curroffset=0;var startparent=null;var startoffset=0;while(currnode){if(currnode.nodeType==3){var nodelength=currnode.nodeValue.length;if(curroffset+nodelength>=realoffset){var range=this.selection.getRangeAt(0);range.setStart(currnode,realoffset-curroffset);return}};currnode=currnode.nextSibling};var currnode=offsetparent.nextSibling;while(currnode){if(currnode.nodeType==3){var nodelength=currnode.nodeValue.length;if(curroffset+nodelength>=realoffset){var range=this.selection.getRangeAt(0);var endnode=this.endNode();var endoffset=this.endOffset();range.setEnd(currnode,realoffset-curroffset);range.setStart(endnode,endoffset);return};curroffset+=nodelength};currnode=currnode.nextSibling};throw(_('Offset out of document range'))} else if(realoffset<0){var currnode=offsetparent.prevSibling;var curroffset=0;while(currnode){if(currnode.nodeType==3){var currlength=currnode.nodeValue.length;if(curroffset-currlength<realoffset){var range=this.selection.getRangeAt(0);range.setStart(currnode,realoffset-curroffset)};curroffset-=currlength};currnode=currnode.prevSibling}} else{var range=this.selection.getRangeAt(0);range.setStart(offsetparent,0)}};this.moveEnd=function(offset){};this.reset=function(){this.selection=this.document.getWindow().getSelection()};this.cloneContents=function(){var range=this.selection.getRangeAt(0);return range.cloneContents()};this.containsNode=function(node){return this.selection.containsNode(node,true)}
this.toString=function(){return this.selection.toString()};this.getRange=function(){return this.selection.getRangeAt(0)}
this.restoreRange=function(range){var selection=this.selection;selection.removeAllRanges();selection.addRange(range)}};MozillaSelection.prototype=new BaseSelection;
function IESelection(document){this.document=document;this.selection=document.getDocument().selection;var doc=document.getDocument();var range=this.selection.createRange()
var parent=this.selection.type=="Text"?range.parentElement():this.selection.type=="Control"?range.parentElement:null;if(parent&&parent.ownerDocument!=doc){var range=doc.body.createTextRange();range.collapse();range.select()}
this.selectNodeContents=function(node){var range=this.selection.createRange().duplicate();range.moveToElementText(node);range.moveStart('character',1);range.moveStart('character',-1);range.moveEnd('character',-1);range.moveEnd('character',1);range.select();this.selection=this.document.getDocument().selection};this.collapse=function(collapseToEnd){var range=this.selection.createRange();range.collapse(!collapseToEnd);range.select();this.selection=document.getDocument().selection};this.replaceWithNode=function(newnode,selectAfterPlace){if(this.selection.type=='Control'){var range=this.selection.createRange();range.item(0).parentNode.replaceChild(newnode,range.item(0));for(var i=1;i<range.length;i++){range.item(i).parentNode.removeChild(range[i])};if(selectAfterPlace){var range=this.document.getDocument().body.createTextRange();range.moveToElementText(newnode);range.select()}} else{var document=this.document.getDocument();var range=this.selection.createRange();range.pasteHTML('<img id="kupu-tempnode">');tempnode=document.getElementById('kupu-tempnode');tempnode.replaceNode(newnode);if(selectAfterPlace){if(selectAfterPlace.nodeType==Node.ELEMENT_NODE){range.moveToElementText(selectAfterPlace)} else{range.moveToElementText(newnode)};range.select()}};this.reset();return newnode};this.startOffset=function(){var startoffset=0;var selrange=this.selection.createRange();var parent=selrange.parentElement();var elrange=selrange.duplicate();elrange.moveToElementText(parent);var tempstart=selrange.duplicate();while(elrange.compareEndPoints('StartToStart',tempstart)<0){startoffset++;tempstart.moveStart('character',-1)};return startoffset};this.endOffset=function(){var endoffset=0;var selrange=this.selection.createRange();var parent=selrange.parentElement();var elrange=selrange.duplicate();elrange.moveToElementText(parent);var tempend=selrange.duplicate();while(elrange.compareEndPoints('EndToEnd',tempend)>0){endoffset++;tempend.moveEnd('character',1)};return endoffset};this.getContentLength=function(){if(this.selection.type=='Control'){return this.selection.createRange().length};var contentlength=0;var range=this.selection.createRange();var endrange=range.duplicate();while(range.compareEndPoints('StartToEnd',endrange)<0){range.move('character',1);contentlength++};return contentlength};this.cutChunk=function(startOffset,endOffset){var range=this.selection.createRange().duplicate();range.moveStart('character',startOffset);range.moveEnd('character',-endOffset);range.pasteHTML('')};this.getElementLength=function(element){var length=0;var range=this.selection.createRange().duplicate();range.moveToElementText(element);range.moveStart('character',1);range.moveEnd('character',-1);var endpoint=range.duplicate();endpoint.collapse(false);range.collapse();while(!range.isEqual(endpoint)){range.moveEnd('character',1);range.moveStart('character',1);length++};return length};this.parentElement=function(){if(this.selection.type=='Control'){return this.selection.createRange().item(0)} else{return this.selection.createRange().parentElement()}};this.getSelectedNode=this.parentElement;this.moveStart=function(offset){var range=this.selection.createRange();range.moveStart('character',offset);range.select()};this.moveEnd=function(offset){var range=this.selection.createRange();range.moveEnd('character',offset);range.select()};this.reset=function(){this.selection=this.document.getDocument().selection};this.cloneContents=function(){var contents=this.selection.createRange().htmlText;var doc=this.document.getDocument();var docfrag=doc.createElement('span');docfrag.innerHTML=contents;return docfrag};this.containsNode=function(node){var selected=this.selection.createRange();if(this.selection.type.toLowerCase()=='text'){var range=doc.body.createTextRange();range.moveToElementText(node);if(selected.compareEndPoints('StartToEnd',range)>=0||selected.compareEndPoints('EndToStart',range)<=0){return false}
return true} else{for(var i=0;i<selected.length;i++){if(selected.item(i).contains(node)){return true}}
return false}};this.getRange=function(){return this.selection.createRange()}
this.restoreRange=function(range){try{range.select()} catch(e){}}
this.toString=function(){return this.selection.createRange().text}};IESelection.prototype=new BaseSelection;
function ContextFixer(func,context){this.func=func;this.context=context;this.args=arguments;var self=this;this.execute=function(){var args=new Array();for(var i=0;i<self.args.length-2;i++){args.push(self.args[i+2])};for(var i=0;i<arguments.length;i++){args.push(arguments[i])};return self.func.apply(self.context,args)}};
function Timer(){this.lastid=0;this.functions={};this.registerFunction=function(object,func,timeout){var args=new Array();for(var i=0;i<arguments.length-3;i++){args.push(arguments[i+3])}
var id=this._createUniqueId();this.functions[id]=new Array(object,func,args);setTimeout("timer_instance._handleFunction("+id+")",timeout)};this._handleFunction=function(id){var obj=this.functions[id][0];var func=this.functions[id][1];var args=this.functions[id][2];this.functions[id]=null;func.apply(obj,args)};this._createUniqueId=function(){while(this.lastid in this.functions&&this.functions[this.lastid]){this.lastid++;if(this.lastid>100000){this.lastid=0}}
return this.lastid}};timer_instance=new Timer();Array.prototype.contains=function(element,objectequality){for(var i=0;i<this.length;i++){if(objectequality){if(element===this[i]){return true}} else{if(element==this[i]){return true}}};return false};Array.prototype.removeDoubles=function(){var ret=[];for(var i=0;i<this.length;i++){if(!ret.contains(this[i])){ret.push(this[i])}};return ret};Array.prototype.map=function(func){for(var i=0;i<this.length;i++){this[i]=func(this[i])}};Array.prototype.reversed=function(){var ret=[];for(var i=this.length;i>0;i--){ret.push(this[i-1])};return ret};String.prototype.strip=function(){var stripspace=/^\s*([\s\S]*?)\s*$/;return stripspace.exec(this)[1]};String.prototype.reduceWhitespace=function(){var spacereg=/(\s+)/g;var copy=this;while(true){var match=spacereg.exec(copy);if(!match){return copy};copy=copy.replace(match[0],' ')}};String.prototype.entitize=function(){var ret=this.replace(/&/g,'&amp;');ret=ret.replace(/"/g,'&quot;');ret=ret.replace(/'/g, '&apos;');ret=ret.replace(/</g,'&lt;');ret=ret.replace(/>/g,'&gt;');return ret};String.prototype.deentitize=function(){var ret=this.replace(/&gt;/g,'>');ret=ret.replace(/&lt;/g,'<');ret=ret.replace(/&quot;/g,'"');ret=ret.replace(/&apos;/g,"'");ret=ret.replace(/&amp;/g,'&');return ret};String.prototype.urldecode=function(){var reg=/%([a-fA-F0-9]{2})/g;var str=this;while(true){var match=reg.exec(str);if(!match||!match.length){break};var repl=new RegExp(match[0],'g');str=str.replace(repl,String.fromCharCode(parseInt(match[1],16)))};return str};String.prototype.centerTruncate=function(maxlength){if(this.length<=maxlength){return this};var chunklength=maxlength/2-3;var start=this.substr(0,chunklength);var end=this.substr(this.length-chunklength);return start+' ... '+end};
function debug(str,win){if(!win){win=window};var doc=win.document;var div=doc.createElement('div');div.appendChild(doc.createTextNode(str));doc.getElementsByTagName('body')[0].appendChild(div)};
function Exception(){return};UpdateStateCancelBubble=new Exception();
function KupuDocument(iframe){this.editable=iframe;this.window=this.editable.contentWindow;this.document=this.window.document;this._browser=_SARISSA_IS_IE?'IE':'Mozilla';this.execCommand=function(command,arg){if(arg===undefined) arg=null;this.document.execCommand(command,false,arg)};this.reloadSource=function(){document.location=document.location};this.getDocument=function(){return this.document};this.getWindow=function(){return this.window};this.getSelection=function(){if(this._browser=='Mozilla'){return new MozillaSelection(this)} else{return new IESelection(this)}};this.getEditable=function(){return this.editable}};
function KupuEditor(document,config,logger){this.document=document;this.config=config;this.log=logger;this.tools={};this.filters=new Array();this._designModeSetAttempts=0;this._initialized=false;this._previous_range=null;this.content_changed=false;this.initialize=function(){this._initializeEventHandlers();if(this.getBrowserName()=="IE"){var body=this.getInnerDocument().getElementsByTagName('body')[0];body.setAttribute('contentEditable','true');this._initialized=true;if(this.afterInit){this.afterInit()};this._saveSelection()} else{this._setDesignModeWhenReady()};this.logMessage(_('Editor initialized'))};this.setContextMenu=function(menu){menu.initialize(this)};this.registerTool=function(id,tool){this.tools[id]=tool;tool.initialize(this)};this.getTool=function(id){return this.tools[id]};this.registerFilter=function(filter){this.filters.push(filter);filter.initialize(this)};this.updateStateHandler=function(event){var interesting_codes=new Array(8,13,37,38,39,40,46);this._saveSelection();if(event.type=='click'||event.type=='mouseup'||(event.type=='keyup'&&interesting_codes.contains(event.keyCode))){this.updateState(event)}};this.updateState=function(event){var selNode=this.getSelectedNode();for(var id in this.tools){try{this.tools[id].updateState(selNode,event)} catch(e){if(e==UpdateStateCancelBubble){this.updateState(event);break} else{this.logMessage(_('Exception while processing updateState on '+'${id}: ${msg}',{'id':id,'msg':e}),2)}}}};this.saveDocument=function(redirect,synchronous){if(!this.config.dst){this.logMessage(_('No destination URL available!'),2);return}
var sourcetool=this.getTool('sourceedittool');if(sourcetool){sourcetool.cancelSourceMode()};if(!this._initialized){return}
this._initialized=false;window.status=_("Please wait while saving document...");for(var id in this.tools){var tool=this.tools[id];if(tool.beforeSave){try{tool.beforeSave()} catch(e){alert(e);this._initialized=true;return}}};this.logMessage(_("Starting HTML cleanup"));var transform=this._filterContent(this.getInnerDocument().documentElement);var contents=this._serializeOutputToString(transform);this.logMessage(_("Cleanup done, sending document to server"));var request=new XMLHttpRequest();if(!synchronous){request.onreadystatechange=(new ContextFixer(this._saveCallback,this,request,redirect)).execute;request.open("PUT",this.config.dst,true);request.setRequestHeader("Content-type",this.config.content_type);request.send(contents);this.logMessage(_("Request sent to server"))} else{this.logMessage(_('Sending request to server'));request.open("PUT",this.config.dst,false);request.setRequestHeader("Content-type",this.config.content_type);request.send(contents);this.handleSaveResponse(request,redirect)}};this.prepareForm=function(form,id){var sourcetool=this.getTool('sourceedittool');if(sourcetool){sourcetool.cancelSourceMode()};if(!this._initialized){return}
this._initialized=false;window.status=_("Please wait while saving document...");for(var tid in this.tools){var tool=this.tools[tid];if(tool.beforeSave){try{tool.beforeSave()} catch(e){alert(e);this._initialized=true;return}}};if(!id){id='kupu'};this.logMessage(_("Starting HTML cleanup"));var transform=this._filterContent(this.getInnerDocument().documentElement);var contents=this._serializeOutputToString(transform);this.logMessage(_("Cleanup done, sending document to server"));var document=form.ownerDocument?form.ownerDocument:window.document;var ta=document.createElement('textarea');ta.style.visibility='hidden';var text=document.createTextNode(contents);ta.appendChild(text);ta.setAttribute('name',id);form.appendChild(ta);return true};this.execCommand=function(command,param){if(!this._initialized){this.logMessage(_('Editor not initialized yet!'));return};if(this.getBrowserName()=="IE"){this._restoreSelection()} else{this.focusDocument();if(command!='useCSS'){this.content_changed=true;this.getDocument().execCommand('useCSS',!this.config.use_css)}};this.getDocument().execCommand(command,param);var message=_('Command ${command} executed',{'command':command});if(param){message=_('Command ${command} executed with parameter ${param}',{'command':command,'param':param})}
this.updateState();this.logMessage(message)};this.getSelection=function(){this._restoreSelection();return this.getDocument().getSelection()};this.getSelectedNode=function(){return this.getSelection().parentElement()};this.getNearestParentOfType=function(node,type){var type=type.toLowerCase();while(node){if(node.nodeName.toLowerCase()==type){return node}
var node=node.parentNode}
return false};this.removeNearestParentOfType=function(node,type){var nearest=this.getNearestParentOfType(node,type);if(!nearest){return false};var parent=nearest.parentNode;while(nearest.childNodes.length){var child=nearest.firstChild;child=nearest.removeChild(child);parent.insertBefore(child,nearest)};parent.removeChild(nearest)};this.getDocument=function(){return this.document};this.getInnerDocument=function(){return this.getDocument().getDocument()};this.insertNodeAtSelection=function(insertNode,selectNode){if(!this._initialized){this.logMessage(_('Editor not initialized yet!'));return};this.content_changed=true;var browser=this.getBrowserName();if(browser!="IE"){this.focusDocument()};var ret=this.getSelection().replaceWithNode(insertNode,selectNode);this._saveSelection();return ret};this.focusDocument=function(){this.getDocument().getWindow().focus()}
this.logMessage=function(message,severity){this.log.log(message,severity)};this.registerContentChanger=function(element){addEventHandler(element,'change', function(){this.content_changed=true},this)};this.getBrowserName=function(){if(_SARISSA_IS_MOZ){return "Mozilla"} else if(_SARISSA_IS_IE){return "IE"} else{throw _("Browser not supported!")}};this.handleSaveResponse=function(request,redirect){if(request.status!='200'&&request.status!='204'&&request.status!='1223'){var msg=_('Error saving your data.\nResponse status: '+'${status}.\nCheck your server log for more '+'information.',{'status':request.status});alert(msg);window.status=_("Error saving document")} else if(redirect){window.document.location=redirect;this.content_changed=false} else{this.content_changed=false;if(this.config.reload_after_save){this.reloadSrc()};window.status=_("Document saved")};this._initialized=true};this._addEventHandler=addEventHandler;this._saveCallback=function(request,redirect){if(request.readyState==4){this.handleSaveResponse(request,redirect)}};this.reloadSrc=function(){this.getDocument().reloadSource();if(this.getBrowserName()=="Mozilla"){this.getInnerDocument().designMode="On"}};this._initializeEventHandlers=function(){this._addEventHandler(this.getInnerDocument(),"click",this.updateStateHandler,this);this._addEventHandler(this.getInnerDocument(),"dblclick",this.updateStateHandler,this);this._addEventHandler(this.getInnerDocument(),"keyup",this.updateStateHandler,this);this._addEventHandler(this.getInnerDocument(),"keyup", function(){this.content_changed=true},this);this._addEventHandler(this.getInnerDocument(),"mouseup",this.updateStateHandler,this)};this._setDesignModeWhenReady=function(){this._designModeSetAttempts++;if(this._designModeSetAttempts>25){alert(_('Couldn\'t set design mode. Kupu will not work on this browser.'));return};var success=false;try{this._setDesignMode();success=true} catch(e){timer_instance.registerFunction(this,this._setDesignModeWhenReady,100)};if(success){if(this.afterInit){this.afterInit()}}};this._setDesignMode=function(){this.getInnerDocument().designMode="On";this.execCommand("undo");this._initialized=true};this._saveSelection=function(){if(this._isDocumentSelected()){var currange=this.getInnerDocument().selection.createRange();this._previous_range=currange}};this._restoreSelection=function(){if(this._previous_range&&!this._isDocumentSelected()){try{this._previous_range.select()} catch(e){alert("Error placing back selection");this.logMessage(_('Error placing back selection'))}}};if(this.getBrowserName()!="IE"){this._saveSelection=function(){};this._restoreSelection=function(){}}
this._isDocumentSelected=function(){var editable_body=this.getInnerDocument().getElementsByTagName('body')[0];try{var selrange=this.getInnerDocument().selection.createRange()} catch(e){return false}
var someelement=selrange.parentElement?selrange.parentElement():selrange.item(0);while(someelement.nodeName.toLowerCase()!='body'){someelement=someelement.parentNode};return someelement==editable_body};this._clearSelection=function(){this._previous_range=null};this._filterContent=function(documentElement){var xhtmldoc=Sarissa.getDomDocument();var doc=this._convertToSarissaNode(xhtmldoc,documentElement);for(var i=0;i<this.filters.length;i++){var doc=this.filters[i].filter(xhtmldoc,doc)};this._fixXML(doc,xhtmldoc);return doc};this.getXMLBody=function(transform){var bodies=transform.getElementsByTagName('body');var data='';for(var i=0;i<bodies.length;i++){data+=Sarissa.serialize(bodies[i])}
return this.escapeEntities(data)};this.getHTMLBody=function(){var doc=this.getInnerDocument();var docel=doc.documentElement;var bodies=docel.getElementsByTagName('body');var data='';for(var i=0;i<bodies.length;i++){data+=bodies[i].innerHTML}
return this.escapeEntities(data)};this.setHTMLBody=function(text){var bodies=this.getInnerDocument().documentElement.getElementsByTagName('body');for(var i=0;i<bodies.length-1;i++){bodies[i].parentNode.removeChild(bodies[i])}
bodies[bodies.length-1].innerHTML=text};this._fixXML=function(doc,document){var heads=doc.getElementsByTagName('head');var titles=doc.getElementsByTagName('title');if(!heads.length){var body=doc.getElementsByTagName('body')[0];var head=document.createElement('head');body.parentNode.insertBefore(head,body);var title=document.createElement('title');var titletext=document.createTextNode('');head.appendChild(title);title.appendChild(titletext)} else if(!titles.length){var head=heads[0];var title=document.createElement('title');var titletext=document.createTextNode('');head.appendChild(title);title.appendChild(titletext)};var dualtons=new Array('a','abbr','acronym','address','applet','b','bdo','big','blink','blockquote','button','caption','center','cite','comment','del','dfn','dir','div','dl','dt','em','embed','fieldset','font','form','frameset','h1','h2','h3','h4','h5','h6','i','iframe','ins','kbd','label','legend','li','listing','map','marquee','menu','multicol','nobr','noembed','noframes','noscript','object','ol','optgroup','option','p','pre','q','s','script','select','small','span','strike','strong','style','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','u','ul','xmp');for(var i=0;i<dualtons.length;i++){var elname=dualtons[i];var els=doc.getElementsByTagName(elname);for(var j=0;j<els.length;j++){var el=els[j];if(!el.hasChildNodes()){var child=document.createTextNode('');el.appendChild(child)}}}};this.xhtmlvalid=new XhtmlValidation(this);this._convertToSarissaNode=function(ownerdoc,htmlnode){return this.xhtmlvalid._convertToSarissaNode(ownerdoc,htmlnode)};this._fixupSingletons=function(xml){return xml.replace(/<([^>]+)\/>/g,"<$1 />")}
this._serializeOutputToString=function(transform){if(this.config.strict_output){var contents='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" '+'"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n'+'<html xmlns="http://www.w3.org/1999/xhtml">'+Sarissa.serialize(transform.getElementsByTagName("head")[0])+Sarissa.serialize(transform.getElementsByTagName("body")[0])+'</html>'} else{var contents='<html>'+Sarissa.serialize(transform.getElementsByTagName("head")[0])+Sarissa.serialize(transform.getElementsByTagName("body")[0])+'</html>'};contents=this.escapeEntities(contents);if(this.config.compatible_singletons){contents=this._fixupSingletons(contents)};return contents};this.escapeEntities=function(xml){return xml;return xml.replace(/[^\r\n -\177]/g,
function(c){return '&#'+c.charCodeAt(0)+';'})}
this.getFullEditor=function(){var fulleditor=this.getDocument().getEditable();while(!/kupu-fulleditor/.test(fulleditor.className)){fulleditor=fulleditor.parentNode}
return fulleditor}
this.setClass=function(name){this.getFullEditor().className+=' '+name}
this.clearClass=function(name){var fulleditor=this.getFullEditor();fulleditor.className=fulleditor.className.replace(' '+name,'')}
this.suspendEditing=function(){this._previous_range=this.getSelection().getRange();this.setClass('kupu-modal');for(var id in this.tools){this.tools[id].disable()}
if(this.getBrowserName()=="IE"){var body=this.getInnerDocument().getElementsByTagName('body')[0];body.setAttribute('contentEditable','false')} else{this.getInnerDocument().designMode="Off";var iframe=this.getDocument().getEditable();iframe.style.position=iframe.style.position?"":"relative"}
this.suspended=true}
this.resumeEditing=function(){if(!this.suspended){return}
this.suspended=false;this.clearClass('kupu-modal');for(var id in this.tools){this.tools[id].enable()}
if(this.getBrowserName()=="IE"){this._restoreSelection();var body=this.getInnerDocument().getElementsByTagName('body')[0];body.setAttribute('contentEditable','true')} else{var doc=this.getInnerDocument();doc.designMode="On";this.getSelection().restoreRange(this._previous_range)}}}
function KupuTool(){this.toolboxes={};this.initialize=function(editor){this.editor=editor};this.registerToolBox=function(id,toolbox){this.toolboxes[id]=toolbox;toolbox.initialize(this,this.editor)};this.updateState=function(selNode,event){for(id in this.toolboxes){this.toolboxes[id].updateState(selNode,event)}};this.enable=function(){}
this.disable=function(){}
addEventHandler=addEventHandler;this._selectSelectItem=function(select,item){this.editor.logMessage(_('Deprecation warning: KupuTool._selectSelectItem'))};this._fixTabIndex=function(element){var tabIndex=this.editor.getDocument().getEditable().tabIndex-1;if(tabIndex&&!element.tabIndex){element.tabIndex=tabIndex}}}
function KupuToolBox(){this.initialize=function(tool,editor){this.tool=tool;this.editor=editor};this.updateState=function(selNode,event){};this._selectSelectItem=function(select,item){this.editor.logMessage(_('Deprecation warning: KupuToolBox._selectSelectItem'))}};
function NoContextMenu(object){object.createContextMenuElements=function(selNode,event){return []}
return object}
function KupuButtonDisable(button){button=button||this.button;button.disabled="disabled";button.className+=' disabled'}
function KupuButtonEnable(button){button=button||this.button;button.disabled="";button.className=button.className.replace(/ *\bdisabled\b/g,'')}
function KupuButton(buttonid,commandfunc,tool){this.buttonid=buttonid;this.button=getFromSelector(buttonid);this.commandfunc=commandfunc;this.tool=tool;this.initialize=function(editor){this.editor=editor;this._fixTabIndex(this.button);addEventHandler(this.button,'click',this.execCommand,this)};this.execCommand=function(){this.commandfunc(this,this.editor,this.tool)};this.updateState=function(selNode,event){};this.disable=KupuButtonDisable;this.enable=KupuButtonEnable};KupuButton.prototype=new KupuTool;
function KupuStateButton(buttonid,commandfunc,checkfunc,offclass,onclass){this.buttonid=buttonid;this.button=getFromSelector(buttonid);this.commandfunc=commandfunc;this.checkfunc=checkfunc;this.offclass=offclass;this.onclass=onclass;this.pressed=false;this.execCommand=function(){this.button.className=(this.pressed?this.offclass:this.onclass);this.pressed=!this.pressed;this.editor.focusDocument();this.commandfunc(this,this.editor)};this.updateState=function(selNode,event){var currclass=this.button.className;var newclass=null;if(this.checkfunc(selNode,this,this.editor,event)){newclass=this.onclass;this.pressed=true} else{newclass=this.offclass;this.pressed=false};if(currclass!=newclass){this.button.className=newclass}}};KupuStateButton.prototype=new KupuButton;
function KupuLateFocusStateButton(buttonid,commandfunc,checkfunc,offclass,onclass){KupuStateButton.apply(this,[buttonid,commandfunc,checkfunc,offclass,onclass]);this.execCommand=function(){this.button.className=(this.pressed?this.offclass:this.onclass);this.pressed=!this.pressed;this.commandfunc(this,this.editor);this.editor.focusDocument()}}
KupuLateFocusStateButton.prototype=new KupuStateButton;
function KupuRemoveElementButton(buttonid,element_name,cssclass){this.button=getFromSelector(buttonid);this.onclass='invisible';this.offclass=cssclass;this.pressed=false;this.commandfunc=function(button,editor){editor.removeNearestParentOfType(editor.getSelectedNode(),element_name)};this.checkfunc=function(currnode,button,editor,event){var element=editor.getNearestParentOfType(currnode,element_name);return(element?false:true)}};KupuRemoveElementButton.prototype=new KupuStateButton;
function KupuUI(textstyleselectid){this.tsselect=getFromSelector(textstyleselectid);var paraoptions=[];var tableoptions=[];this.optionstate=-1;this.otherstyle=null;this.tablestyles={};this.styles={};this.initialize=function(editor){this.editor=editor;this.cleanStyles();this.enableOptions(false);this._fixTabIndex(this.tsselect);this._selectevent=addEventHandler(this.tsselect,'change',this.setTextStyleHandler,this)};this.getStyles=function(){if(!paraoptions){this.cleanStyles()}
return [paraoptions,tableoptions]}
this.setTextStyleHandler=function(event){this.setTextStyle(this.tsselect.options[this.tsselect.selectedIndex].value)};this.basicButtonHandler=function(action){this.editor.execCommand(action);this.editor.updateState()};this.saveButtonHandler=function(){this.editor.saveDocument()};this.saveAndExitButtonHandler=function(redirect_url){this.editor.saveDocument(redirect_url)};this.cutButtonHandler=function(){try{this.editor.execCommand('Cut')} catch(e){if(this.editor.getBrowserName()=='Mozilla'){alert(_('Cutting from JavaScript is disabled on your Mozilla due to security settings. For more information, read http://www.mozilla.org/editor/midasdemo/securityprefs.html'))} else{throw e}};this.editor.updateState()};this.copyButtonHandler=function(){try{this.editor.execCommand('Copy')} catch(e){if(this.editor.getBrowserName()=='Mozilla'){alert(_('Copying from JavaScript is disabled on your Mozilla due to security settings. For more information, read http://www.mozilla.org/editor/midasdemo/securityprefs.html'))} else{throw e}};this.editor.updateState()};this.pasteButtonHandler=function(){try{this.editor.execCommand('Paste')} catch(e){if(this.editor.getBrowserName()=='Mozilla'){alert(_('Pasting from JavaScript is disabled on your Mozilla due to security settings. For more information, read http://www.mozilla.org/editor/midasdemo/securityprefs.html'))} else{throw e}};this.editor.updateState()};this.cleanStyles=function(){var options=this.tsselect.options;var parastyles=this.styles;var tablestyles=this.tablestyles;tableoptions.push([options[0].text,'td|']);tablestyles['td']=0;paraoptions.push([options[0].text,'p|']);parastyles['p']=0;while(options.length>1){opt=options[1];var v=opt.value;if (/^thead|tbody|table|t[rdh]\b/i.test(v)){var otable=tableoptions;var styles=tablestyles} else{var otable=paraoptions;var styles=parastyles}
if(v.indexOf('|')>-1){var split=v.split('|');v=split[0].toLowerCase()+"|"+split[1]} else{v=v.toLowerCase()+"|"};otable.push([opt.text,v]);styles[v]=otable.length-1;options[1]=null}
options[0]=null}
this.enableOptions=function(inTable){var select=this.tsselect;var options=select.options;if(this.otherstyle){options[options.length-1]=null;this.otherstyle=null}
if(this.optionstate==inTable) return;var valid=inTable?tableoptions:paraoptions;while(options.length) options[0]=null;this.otherstyle=null;for(var i=0;i<valid.length;i++){var opt=document.createElement('option');opt.text=valid[i][0];opt.value=valid[i][1];options.add(opt)}
select.selectedIndex=0;this.optionstate=inTable}
this.setIndex=function(currnode,tag,index,styles){var className=currnode.className;this.styletag=tag;this.classname=className;var style=tag+'|'+className;if(style in styles){return styles[style]} else if(!className&&tag in styles){return styles[tag]}
return index}
this.nodeStyle=function(node){var currnode=node;var index=-1;var options=this.tsselect.options;this.styletag=undefined;this.classname='';this.intable=false;while(currnode){var tag=currnode.nodeName.toLowerCase();if (/^body$/.test(tag)){if(!this.styletag){return-1}
break}
if (/^(p|div|h.|ul|ol|dl|menu|dir|pre|blockquote|address|center)$/.test(tag)){index=this.setIndex(currnode,tag,index,this.styles)}
if (/^thead|tbody|table|t[rdh]$/.test(tag)){this.intable=true;index=this.setIndex(currnode,tag,index,this.tablestyles);if(index>0||tag=='table'){return index}}
currnode=currnode.parentNode}
return index}
this.updateState=function(selNode){var index=undefined;var mixed=false;var styletag,classname;var selection=this.editor.getSelection();for(var el=selNode.firstChild;el;el=el.nextSibling){if(el.nodeType==1&&selection.containsNode(el)){var i=this.nodeStyle(el);if(index===undefined){index=i;styletag=this.styletag;classname=this.classname}
if(index!=i||styletag!=this.styletag||classname!=this.classname){mixed=true;break}}};if(index===undefined){index=this.nodeStyle(selNode)}
this.enableOptions(this.intable);if(index<0||mixed){if(mixed){var caption='Mixed styles'} else if(this.styletag){var caption='Other: '+this.styletag+' '+this.classname} else{var caption='<no style>'}
var opt=document.createElement('option');opt.text=caption;this.otherstyle=opt;this.tsselect.options.add(opt);index=this.tsselect.length-1}
this.tsselect.selectedIndex=Math.max(index,0)};this._cleanNode=function(node){var len=node.childNodes.length;
function stripspace(){var c;while((c=node.lastChild)&&c.nodeType==3&&/^\s*$/.test(c.data)){node.removeChild(c)}}
stripspace();var c=node.lastChild;if(c&&c.nodeType==1&&c.tagName=='BR'){node.removeChild(c)}
stripspace();if(node.childNodes.length==0){node.parentNode.removeChild(node)}}
this._cleanCell=function(eltype,classname){var selNode=this.editor.getSelectedNode();var el=this.editor.getNearestParentOfType(selNode,eltype);if(!el){el=this.editor.getNearestParentOfType(selNode,eltype=='TD'?'TH':'TD')}
if(!el) return;var node,nxt,n;for(node=el.firstChild;node;){if (/DIV|P/.test(node.nodeName)){for(var n=node.firstChild;n;){var nxt=n.nextSibling;el.insertBefore(n,node);n=nxt}
nxt=node.nextSibling;el.removeChild(node);node=nxt} else{node=node.nextSibling}}
if(eltype!=el.tagName){var node=el.ownerDocument.createElement(eltype);var parent=el.parentNode;parent.insertBefore(node,el);while(el.firstChild){node.appendChild(el.firstChild)}
parent.removeChild(el);el=node}
if(classname){el.className=classname} else{el.removeAttribute("class");el.removeAttribute("className")}}
this._setClass=function(el,classname){var parent=el.parentNode;if(parent.tagName=='DIV'){var gp=parent.parentNode;if(el!=parent.firstChild){var previous=parent.cloneNode(false);while(el!=parent.firstChild){previous.appendChild(parent.firstChild)}
gp.insertBefore(previous,parent);this._cleanNode(previous)}
gp.insertBefore(el,parent);this._cleanNode(el);this._cleanNode(parent)} else{this._cleanNode(el)}
if(classname){el.className=classname} else{el.removeAttribute("class");el.removeAttribute("className")}}
this.setTextStyle=function(style,noupdate){var classname='';var eltype=style.toUpperCase();if(style.indexOf('|')>-1){style=style.split('|');eltype=style[0].toUpperCase();classname=style[1]};var command=eltype;if(this.editor.getBrowserName()=='IE'){command='<'+eltype+'>'};if (/T[RDH]/.test(eltype)){this._cleanCell(eltype,classname)}
else{this.editor.getDocument().execCommand('formatblock',command);var selNode=this.editor.getSelectedNode();var el=this.editor.getNearestParentOfType(selNode,eltype);if(el){this._setClass(el,classname)} else{var selection=this.editor.getSelection();var elements=selNode.getElementsByTagName(eltype);for(var i=0;i<elements.length;i++){el=elements[i];if(selection.containsNode(el)){this._setClass(el,classname)}}}}
if(el){this.editor.getSelection().selectNodeContents(el)}
if(!noupdate){this.editor.updateState()}};this.createContextMenuElements=function(selNode,event){var ret=new Array();ret.push(new ContextMenuElement(_('Cut'),this.cutButtonHandler,this));ret.push(new ContextMenuElement(_('Copy'),this.copyButtonHandler,this));ret.push(new ContextMenuElement(_('Paste'),this.pasteButtonHandler,this));return ret};this.disable=function(){this.tsselect.disabled="disabled"}
this.enable=function(){this.tsselect.disabled=""}}
KupuUI.prototype=new KupuTool;
function ColorchooserTool(fgcolorbuttonid,hlcolorbuttonid,colorchooserid){this.fgcolorbutton=getFromSelector(fgcolorbuttonid);this.hlcolorbutton=getFromSelector(hlcolorbuttonid);this.ccwindow=getFromSelector(colorchooserid);this.command=null;this.initialize=function(editor){this.editor=editor;this.createColorchooser(this.ccwindow);addEventHandler(this.fgcolorbutton,"click",this.openFgColorChooser,this);addEventHandler(this.hlcolorbutton,"click",this.openHlColorChooser,this);addEventHandler(this.ccwindow,"click",this.chooseColor,this);this.hide();this.editor.logMessage(_('Colorchooser tool initialized'))};this.updateState=function(selNode){this.hide()};this.openFgColorChooser=function(){this.command="forecolor";this.show()};this.openHlColorChooser=function(){if(this.editor.getBrowserName()=="IE"){this.command="backcolor"} else{this.command="hilitecolor"}
this.show()};this.chooseColor=function(event){var target=_SARISSA_IS_MOZ?event.target:event.srcElement;var cell=this.editor.getNearestParentOfType(target,'td');this.editor.execCommand(this.command,cell.getAttribute('bgColor'));this.hide();this.editor.logMessage(_('Color chosen'))};this.show=function(command){this.ccwindow.style.display="block"};this.hide=function(){this.command=null;this.ccwindow.style.display="none"};this.createColorchooser=function(table){var chunks=new Array('00','33','66','99','CC','FF');table.setAttribute('id','kupu-colorchooser-table');table.style.borderWidth='2px';table.style.borderStyle='solid';table.style.position='absolute';table.style.cursor='default';table.style.display='none';var tbody=document.createElement('tbody');for(var i=0;i<6;i++){var tr=document.createElement('tr');var r=chunks[i];for(var j=0;j<6;j++){var g=chunks[j];for(var k=0;k<6;k++){var b=chunks[k];var color='#'+r+g+b;var td=document.createElement('td');td.setAttribute('bgColor',color);td.style.backgroundColor=color;td.style.borderWidth='1px';td.style.borderStyle='solid';td.style.fontSize='1px';td.style.width='10px';td.style.height='10px';var text=document.createTextNode('\u00a0');td.appendChild(text);tr.appendChild(td)}}
tbody.appendChild(tr)}
table.appendChild(tbody);return table};this.enable=function(){KupuButtonEnable(this.fgcolorbutton);KupuButtonEnable(this.hlcolorbutton)}
this.disable=function(){KupuButtonDisable(this.fgcolorbutton);KupuButtonDisable(this.hlcolorbutton)}}
ColorchooserTool.prototype=new KupuTool;
function PropertyTool(titlefieldid,descfieldid){this.titlefield=getFromSelector(titlefieldid);this.descfield=getFromSelector(descfieldid);this.initialize=function(editor){this.editor=editor;addEventHandler(this.titlefield,"change",this.updateProperties,this);addEventHandler(this.descfield,"change",this.updateProperties,this);var heads=this.editor.getInnerDocument().getElementsByTagName('head');if(!heads[0]){this.editor.logMessage(_('No head in document!'),1)} else{var head=heads[0];var titles=head.getElementsByTagName('title');if(titles.length){this.titlefield.value=titles[0].text}
var metas=head.getElementsByTagName('meta');if(metas.length){for(var i=0;i<metas.length;i++){var meta=metas[i];if(meta.getAttribute('name')&&meta.getAttribute('name').toLowerCase()=='description'){this.descfield.value=meta.getAttribute('content');break}}}}
this.editor.logMessage(_('Property tool initialized'))};this.updateProperties=function(){var doc=this.editor.getInnerDocument();var heads=doc.getElementsByTagName('HEAD');if(!heads){this.editor.logMessage(_('No head in document!'),1);return}
var head=heads[0];var titles=head.getElementsByTagName('title');if(!titles){var title=doc.createElement('title');var text=doc.createTextNode(this.titlefield.value);title.appendChild(text);head.appendChild(title)} else{var title=titles[0];if(title.childNodes.length==0){title.removeNode(true);title=doc.createElement('title');title.innerText=this.titlefield.value;head.appendChild(title)} else{title.childNodes[0].nodeValue=this.titlefield.value}}
document.title=this.titlefield.value;var metas=doc.getElementsByTagName('meta');var descset=0;for(var i=0;i<metas.length;i++){var meta=metas[i];if(meta.getAttribute('name')&&meta.getAttribute('name').toLowerCase()=='description'){meta.setAttribute('content',this.descfield.value);descset=1}}
if(!descset){var meta=doc.createElement('meta');meta.setAttribute('name','description');meta.setAttribute('content',this.descfield.value);head.appendChild(meta)}
this.editor.logMessage(_('Properties modified'))}}
PropertyTool.prototype=new KupuTool;
function LinkTool(){this.initialize=function(editor){this.editor=editor;this.editor.logMessage(_('Link tool initialized'))};this.createLinkHandler=function(event){var linkWindow=openPopup('kupupopups/link.html',300,200);linkWindow.linktool=this;linkWindow.focus()};this.updateLink=function(linkel,url,type,name,target,title){if(type&&type=='anchor'){linkel.removeAttribute('href');linkel.setAttribute('name',name)} else{linkel.href=url;if(linkel.innerHTML==""){var doc=this.editor.getInnerDocument();linkel.appendChild(doc.createTextNode(title||url))}
if(title){linkel.title=title} else{linkel.removeAttribute('title')}
if(target&&target!=''){linkel.setAttribute('target',target)}
else{linkel.removeAttribute('target')};linkel.style.color=this.linkcolor}};this.formatSelectedLink=function(url,type,name,target,title){var currnode=this.editor.getSelectedNode();var linkel=this.editor.getNearestParentOfType(currnode,'A');if(linkel){this.updateLink(linkel,url,type,name,target,title);return true}
if(currnode.nodeType!=1) return false;var linkelements=currnode.getElementsByTagName('A');var selection=this.editor.getSelection();var containsLink=false;for(var i=0;i<linkelements.length;i++){linkel=linkelements[i];if(selection.containsNode(linkel)){this.updateLink(linkel,url,type,name,target,title);containsLink=true}};return containsLink}
this.createLink=function(url,type,name,target,title){if(!this.formatSelectedLink(url,type,name,target,title)){this.editor.execCommand("CreateLink",url);if(!this.formatSelectedLink(url,type,name,target,title)){var doc=this.editor.getInnerDocument();linkel=doc.createElement("a");linkel.setAttribute('href',url);linkel.setAttribute('class','generated');this.editor.getSelection().replaceWithNode(linkel,true);this.updateLink(linkel,url,type,name,target,title)}}
this.editor.logMessage(_('Link added'));this.editor.updateState()};this.deleteLink=function(){var currnode=this.editor.getSelectedNode();var linkel=this.editor.getNearestParentOfType(currnode,'a');if(!linkel){this.editor.logMessage(_('Not inside link'));return};while(linkel.childNodes.length){linkel.parentNode.insertBefore(linkel.childNodes[0],linkel)};linkel.parentNode.removeChild(linkel);this.editor.logMessage(_('Link removed'));this.editor.updateState()};this.createContextMenuElements=function(selNode,event){var ret=new Array();var link=this.editor.getNearestParentOfType(selNode,'a');if(link){ret.push(new ContextMenuElement(_('Delete link'),this.deleteLink,this))} else{ret.push(new ContextMenuElement(_('Create link'),this.createLinkHandler,this))};return ret}}
LinkTool.prototype=new KupuTool;
function LinkToolBox(inputid,buttonid,toolboxid,plainclass,activeclass){this.input=getFromSelector(inputid);this.button=getFromSelector(buttonid);this.toolboxel=getFromSelector(toolboxid);this.plainclass=plainclass;this.activeclass=activeclass;this.initialize=function(tool,editor){this.tool=tool;this.editor=editor;addEventHandler(this.input,"blur",this.updateLink,this);addEventHandler(this.button,"click",this.addLink,this)};this.updateState=function(selNode){var linkel=this.editor.getNearestParentOfType(selNode,'a');if(linkel){if(this.toolboxel){this.toolboxel.className=this.activeclass};this.input.value=linkel.getAttribute('href')} else{if(this.toolboxel){this.toolboxel.className=this.plainclass};this.input.value=''}};this.addLink=function(event){var url=this.input.value;this.tool.createLink(url)};this.updateLink=function(){var currnode=this.editor.getSelectedNode();var linkel=this.editor.getNearestParentOfType(currnode,'A');if(!linkel){return}
var url=this.input.value;linkel.setAttribute('href',url);this.editor.logMessage(_('Link modified'))}};LinkToolBox.prototype=new LinkToolBox;
function ImageTool(){this.initialize=function(editor){this.editor=editor;this.editor.logMessage(_('Image tool initialized'))};this.createImageHandler=function(event){var imageWindow=openPopup('kupupopups/image.html',300,200);imageWindow.imagetool=this;imageWindow.focus()};this.createImage=function(url,alttext,imgclass){var img=this.editor.getInnerDocument().createElement('img');img.src=url;img.removeAttribute('height');img.removeAttribute('width');if(alttext){img.alt=alttext};if(imgclass){img.className=imgclass};img=this.editor.insertNodeAtSelection(img,1);this.editor.logMessage(_('Image inserted'));this.editor.updateState();return img};this.setImageClass=function(imgclass){var currnode=this.editor.getSelectedNode();var currimg=this.editor.getNearestParentOfType(currnode,'IMG');if(currimg){currimg.className=imgclass}};this.createContextMenuElements=function(selNode,event){return new Array(new ContextMenuElement(_('Create image'),this.createImageHandler,this))}}
ImageTool.prototype=new KupuTool;
function ImageToolBox(inputfieldid,insertbuttonid,classselectid,toolboxid,plainclass,activeclass){this.inputfield=getFromSelector(inputfieldid);this.insertbutton=getFromSelector(insertbuttonid);this.classselect=getFromSelector(classselectid);this.toolboxel=getFromSelector(toolboxid);this.plainclass=plainclass;this.activeclass=activeclass;this.initialize=function(tool,editor){this.tool=tool;this.editor=editor;addEventHandler(this.classselect,"change",this.setImageClass,this);addEventHandler(this.insertbutton,"click",this.addImage,this)};this.updateState=function(selNode,event){var imageel=this.editor.getNearestParentOfType(selNode,'img');if(imageel){if(this.toolboxel){this.toolboxel.className=this.activeclass;this.inputfield.value=imageel.getAttribute('src');var imgclass=imageel.className?imageel.className:'image-inline';selectSelectItem(this.classselect,imgclass)}} else{if(this.toolboxel){this.toolboxel.className=this.plainclass}}};this.addImage=function(){var url=this.inputfield.value;var sel_class=this.classselect.options[this.classselect.selectedIndex].value;this.tool.createImage(url,null,sel_class);this.editor.focusDocument()};this.setImageClass=function(){var sel_class=this.classselect.options[this.classselect.selectedIndex].value;this.tool.setImageClass(sel_class);this.editor.focusDocument()}};ImageToolBox.prototype=new KupuToolBox;
function TableTool(){this.createContextMenuElements=function(selNode,event){var table=this.editor.getNearestParentOfType(selNode,'table');if(!table){ret=new Array();var el=new ContextMenuElement(_('Add table'),this.addPlainTable,this);ret.push(el);return ret} else{var ret=new Array();ret.push(new ContextMenuElement(_('Add row'),this.addTableRow,this));ret.push(new ContextMenuElement(_('Delete row'),this.delTableRow,this));ret.push(new ContextMenuElement(_('Add column'),this.addTableColumn,this));ret.push(new ContextMenuElement(_('Delete column'),this.delTableColumn,this));ret.push(new ContextMenuElement(_('Delete Table'),this.delTable,this));return ret}};this.addPlainTable=function(){this.createTable(2,3,1,'plain')};this.createTable=function(rows,cols,makeHeader,tableclass){if(rows<1||rows>99||cols<1||cols>99){this.editor.logMessage(_('Invalid table size'),1);return};var doc=this.editor.getInnerDocument();table=doc.createElement("table");table.className=tableclass;if(makeHeader){var tr=doc.createElement("tr");var thead=doc.createElement("thead");for(i=0;i<cols;i++){var th=doc.createElement("th");th.appendChild(doc.createTextNode("Col "+i+1));tr.appendChild(th)}
thead.appendChild(tr);table.appendChild(thead)}
tbody=doc.createElement("tbody");for(var i=0;i<rows;i++){var tr=doc.createElement("tr");for(var j=0;j<cols;j++){var td=doc.createElement("td");var content=doc.createTextNode('\u00a0');td.appendChild(content);tr.appendChild(td)}
tbody.appendChild(tr)}
table.appendChild(tbody);this.editor.insertNodeAtSelection(table);this._setTableCellHandlers(table);this.editor.logMessage(_('Table added'));this.editor.updateState();return table};this._setTableCellHandlers=function(table){addEventHandler(table,'click',this._selectContentIfEmpty,this);var cells=table.getElementsByTagName('td');for(var i=0;i<cells.length;i++){addEventHandler(cells[i],'click',this._selectContentIfEmpty,this)};var firstcell=cells[0];if(firstcell){var children=firstcell.childNodes;if(children.length==1&&children[0].nodeType==3&&children[0].nodeValue=='\xa0'){var selection=this.editor.getSelection();selection.selectNodeContents(firstcell)}}};this._selectContentIfEmpty=function(){var selNode=this.editor.getSelectedNode();var cell=this.editor.getNearestParentOfType(selNode,'td');if(!cell){return};var children=cell.childNodes;if(children.length==1&&children[0].nodeType==3&&children[0].nodeValue=='\xa0'){var selection=this.editor.getSelection();selection.selectNodeContents(cell)}};this.addTableRow=function(){var currnode=this.editor.getSelectedNode();var currtbody=this.editor.getNearestParentOfType(currnode,"TBODY");var bodytype="tbody";if(!currtbody){currtbody=this.editor.getNearestParentOfType(currnode,"THEAD");bodytype="thead"}
var parentrow=this.editor.getNearestParentOfType(currnode,"TR");var nextrow=parentrow.nextSibling;var colcount=0;for(var i=0;i<currtbody.childNodes.length;i++){var el=currtbody.childNodes[i];if(el.nodeType!=1){continue}
if(el.nodeName.toLowerCase()=='tr'){var cols=0;for(var j=0;j<el.childNodes.length;j++){if(el.childNodes[j].nodeType==1){cols++}}
if(cols>colcount){colcount=cols}}}
var newrow=this.editor.getInnerDocument().createElement("TR");for(var i=0;i<colcount;i++){var newcell;if(bodytype=='tbody'){newcell=this.editor.getInnerDocument().createElement("TD")} else{newcell=this.editor.getInnerDocument().createElement("TH")}
var newcellvalue=this.editor.getInnerDocument().createTextNode("\u00a0");newcell.appendChild(newcellvalue);newrow.appendChild(newcell)}
if(!nextrow){currtbody.appendChild(newrow)} else{currtbody.insertBefore(newrow,nextrow)}
this.editor.focusDocument();this.editor.logMessage(_('Table row added'))};this.delTableRow=function(){var currnode=this.editor.getSelectedNode();var parentrow=this.editor.getNearestParentOfType(currnode,"TR");if(!parentrow){this.editor.logMessage(_('No row to delete'),1);return}
var selection=this.editor.getSelection();if(parentrow.nextSibling){selection.selectNodeContents(parentrow.nextSibling.firstChild)} else if(parentrow.previousSibling){selection.selectNodeContents(parentrow.previousSibling.firstChild)};parentrow.parentNode.removeChild(parentrow);this.editor.focusDocument();this.editor.logMessage(_('Table row removed'))};this.addTableColumn=function(){var currnode=this.editor.getSelectedNode();var currtd=this.editor.getNearestParentOfType(currnode,'TD');if(!currtd){currtd=this.editor.getNearestParentOfType(currnode,'TH')}
if(!currtd){this.editor.logMessage(_('No parentcolumn found!'),1);return}
var currtr=this.editor.getNearestParentOfType(currnode,'TR');var currtable=this.editor.getNearestParentOfType(currnode,'TABLE');var tdindex=this._getColIndex(currtd);this.editor.logMessage(_('tdindex: ${tdindex}'));var theads=currtable.getElementsByTagName('THEAD');if(theads){for(var i=0;i<theads.length;i++){var currthead=theads[i];for(var j=0;j<currthead.childNodes.length;j++){var tr=currthead.childNodes[j];if(tr.nodeType!=1){continue}
var currindex=0;for(var k=0;k<tr.childNodes.length;k++){var th=tr.childNodes[k];if(th.nodeType!=1){continue}
if(currindex==tdindex){var doc=this.editor.getInnerDocument();var newth=doc.createElement('th');var text=doc.createTextNode('\u00a0');newth.appendChild(text);if(tr.childNodes.length==k+1){tr.appendChild(newth)} else{tr.insertBefore(newth,tr.childNodes[k+1])}
break}
currindex++}}}}
var tbodies=currtable.getElementsByTagName('TBODY');if(tbodies){for(var i=0;i<tbodies.length;i++){var currtbody=tbodies[i];for(var j=0;j<currtbody.childNodes.length;j++){var tr=currtbody.childNodes[j];if(tr.nodeType!=1){continue}
var currindex=0;for(var k=0;k<tr.childNodes.length;k++){var td=tr.childNodes[k];if(td.nodeType!=1){continue}
if(currindex==tdindex){var doc=this.editor.getInnerDocument();var newtd=doc.createElement('td');var text=doc.createTextNode('\u00a0');newtd.appendChild(text);if(tr.childNodes.length==k+1){tr.appendChild(newtd)} else{tr.insertBefore(newtd,tr.childNodes[k+1])}
break}
currindex++}}}}
this.editor.focusDocument();this.editor.logMessage(_('Table column added'))};this.delTableColumn=function(){var currnode=this.editor.getSelectedNode();var currtd=this.editor.getNearestParentOfType(currnode,'TD');if(!currtd){currtd=this.editor.getNearestParentOfType(currnode,'TH')}
var currcolindex=this._getColIndex(currtd);var currtable=this.editor.getNearestParentOfType(currnode,'TABLE');var selection=this.editor.getSelection();if(currtd.nextSibling){selection.selectNodeContents(currtd.nextSibling)} else if(currtd.previousSibling){selection.selectNodeContents(currtd.previousSibling)};var heads=currtable.getElementsByTagName('THEAD');if(heads.length){for(var i=0;i<heads.length;i++){var thead=heads[i];for(var j=0;j<thead.childNodes.length;j++){var tr=thead.childNodes[j];if(tr.nodeType!=1){continue}
var currindex=0;for(var k=0;k<tr.childNodes.length;k++){var th=tr.childNodes[k];if(th.nodeType!=1){continue}
if(currindex==currcolindex){tr.removeChild(th);break}
currindex++}}}}
var bodies=currtable.getElementsByTagName('TBODY');for(var i=0;i<bodies.length;i++){var currtbody=bodies[i];var relevant_rowspan=0;for(var j=0;j<currtbody.childNodes.length;j++){var tr=currtbody.childNodes[j];if(tr.nodeType!=1){continue}
var currindex=0
for(var k=0;k<tr.childNodes.length;k++){var cell=tr.childNodes[k];if(cell.nodeType!=1){continue}
var colspan=cell.colSpan;if(currindex==currcolindex){tr.removeChild(cell);break}
currindex++}}}
this.editor.focusDocument();this.editor.logMessage(_('Table column deleted'))};this.delTable=function(){var currnode=this.editor.getSelectedNode();var table=this.editor.getNearestParentOfType(currnode,'table');if(!table){this.editor.logMessage(_('Not inside a table!'));return};table.parentNode.removeChild(table);this.editor.logMessage(_('Table removed'))};this.setColumnAlign=function(newalign){var currnode=this.editor.getSelectedNode();var currtd=this.editor.getNearestParentOfType(currnode,"TD");var bodytype='tbody';if(!currtd){currtd=this.editor.getNearestParentOfType(currnode,"TH");bodytype='thead'}
var currcolindex=this._getColIndex(currtd);var currtable=this.editor.getNearestParentOfType(currnode,"TABLE");for(var i=0;i<currtable.childNodes.length;i++){var currtbody=currtable.childNodes[i];if(currtbody.nodeType!=1||(currtbody.nodeName.toUpperCase()!="THEAD"&&currtbody.nodeName.toUpperCase()!="TBODY")){continue}
for(var j=0;j<currtbody.childNodes.length;j++){var row=currtbody.childNodes[j];if(row.nodeType!=1){continue}
var index=0;for(var k=0;k<row.childNodes.length;k++){var cell=row.childNodes[k];if(cell.nodeType!=1){continue}
if(index==currcolindex){if(this.editor.config.use_css){cell.style.textAlign=newalign} else{cell.setAttribute('align',newalign)}
cell.className='align-'+newalign}
index++}}}};this.setTableClass=function(sel_class){var currnode=this.editor.getSelectedNode();var currtable=this.editor.getNearestParentOfType(currnode,'TABLE');if(currtable){currtable.className=sel_class}};this._getColIndex=function(currcell){var prevsib=currcell.previousSibling;var currcolindex=0;while(prevsib){if(prevsib.nodeType==1&&(prevsib.tagName.toUpperCase()=="TD"||prevsib.tagName.toUpperCase()=="TH")){var colspan=prevsib.colSpan;if(colspan){currcolindex+=parseInt(colspan)} else{currcolindex++}}
prevsib=prevsib.previousSibling;if(currcolindex>30){alert(_("Recursion detected when counting column position"));return}}
return currcolindex};this._getColumnAlign=function(selNode){var align;var td=this.editor.getNearestParentOfType(selNode,'td');if(!td){td=this.editor.getNearestParentOfType(selNode,'th')};if(td){align=td.getAttribute('align');if(this.editor.config.use_css){align=td.style.textAlign}};return align};this.fixTable=function(event){var currnode=this.editor.getSelectedNode();var table=this.editor.getNearestParentOfType(currnode,'TABLE');if(!table){this.editor.logMessage(_('Not inside a table!'));return};this._fixTableHelper(table)};this._isBodyRow=function(row){for(var node=row.firstChild;node;node=node.nextSibling){if (/TD/.test(node.nodeName)){return true}}
return false}
this._cleanCell=function(el){dump('_cleanCell('+el.innerHTML+')\n');var node,nxt,n;for(node=el.firstChild;node;){if (/DIV|P/.test(node.nodeName)){for(var n=node.firstChild;n;){var nxt=n.nextSibling;el.insertBefore(n,node);n=nxt}
nxt=node.nextSibling;el.removeChild(node);node=nxt} else{node=node.nextSibling}}
var c;while(el.firstChild&&(c=el.firstChild).nodeType==3&&/^\s+/.test(c.data)){c.data=c.data.replace(/^\s+/,'');if(!c.data){el.removeChild(c)} else{break}};while(el.lastChild&&(c=el.lastChild).nodeType==3&&/\s+$/.test(c.data)){c.data=c.data.replace(/\s+$/,'');if(!c.data){el.removeChild(c)} else{break}};el.removeAttribute('colSpan');el.removeAttribute('rowSpan')}
this._countCols=function(rows,numcols){for(var i=0;i<rows.length;i++){var row=rows[i];var currnumcols=0;for(var node=row.firstChild;node;node=node.nextSibling){if (/td|th/i.test(node.nodeName)){currnumcols+=parseInt(node.getAttribute('colSpan')||'1')}};if(currnumcols>numcols){numcols=currnumcols}};return numcols}
this._cleanRows=function(rows,container,numcols){for(var i=0;i<rows.length;i++){dump("row "+i+'\n');var row=rows[i];var doc=this.editor.getInnerDocument();var newrow=doc.createElement('tr');if(row.className){newrow.className=row.className}
for(var node=row.firstChild;node;){dump("child\n");var nxt=node.nextSibling;if (/TD|TH/.test(node.nodeName)){this._cleanCell(node);newrow.appendChild(node)};node=nxt};if(newrow.childNodes.length){container.appendChild(newrow)}};for(row=container.firstChild;row;row=row.nextSibling){var cellname=row.lastChild.nodeName;while(row.childNodes.length<numcols){var cell=doc.createElement(cellname);var nbsp=doc.createTextNode('\u00a0');cell.appendChild(nbsp);row.appendChild(cell)}}};this._fixTableHelper=function(table){var doc=this.editor.getInnerDocument();var thead=doc.createElement('thead');var tbody=doc.createElement('tbody');var tfoot=doc.createElement('tfoot');var table_classes=this.editor.config.table_classes;
function cleanClassName(name){var allowed_classes=table_classes['class'];for(var i=0;i<allowed_classes.length;i++){var classname=allowed_classes[i];classname=classname.classname||classname;if(classname==name) return name};return allowed_classes[0]}
if(table_classes){table.className=cleanClassName(table.className)} else{table.removeAttribute('class');table.removeAttribute('className')};table.removeAttribute('border');table.removeAttribute('cellpadding');table.removeAttribute('cellPadding');table.removeAttribute('cellspacing');table.removeAttribute('cellSpacing');var hrows=[],brows=[],frows=[];for(var node=table.firstChild;node;node=node.nextSibling){var nodeName=node.nodeName;if (/TR/.test(node.nodeName)){brows.push(node)} else if (/THEAD|TBODY|TFOOT/.test(node.nodeName)){var rows=nodeName=='THEAD'?hrows:nodeName=='TFOOT'?frows:brows;for(var inode=node.firstChild;inode;inode=inode.nextSibling){if (/TR/.test(inode.nodeName)){rows.push(inode)}}}};dump('extract head and foot\n');while(brows.length&&!this._isBodyRow(brows[0])){hrows.push(brows[0]);brows.shift()}
while(brows.length&&!this._isBodyRow(brows[brows.length-1])){var last=brows[brows.length-1];brows.length-=1;frows.unshift(last)}
dump('count cols\n');var numcols=this._countCols(hrows,0);numcols=this._countCols(brows,numcols);numcols=this._countCols(frows,numcols);dump('clean rows\n');this._cleanRows(hrows,thead);this._cleanRows(brows,tbody);this._cleanRows(frows,tfoot);dump('remove old\n');while(table.firstChild){table.removeChild(table.firstChild)}
if(hrows.length)
table.appendChild(thead);if(brows.length)
table.appendChild(tbody);if(frows.length)
table.appendChild(tfoot);dump('finish up\n');this.editor.focusDocument();this.editor.logMessage(_('Table cleaned up'))};this.fixAllTables=function(){var tables=this.editor.getInnerDocument().getElementsByTagName('table');for(var i=0;i<tables.length;i++){this._fixTableHelper(tables[i])}}};TableTool.prototype=new KupuTool;
function TableToolBox(addtabledivid,edittabledivid,newrowsinputid,newcolsinputid,makeheaderinputid,classselectid,alignselectid,addtablebuttonid,addrowbuttonid,delrowbuttonid,addcolbuttonid,delcolbuttonid,fixbuttonid,fixallbuttonid,toolboxid,plainclass,activeclass){this.addtablediv=getFromSelector(addtabledivid);this.edittablediv=getFromSelector(edittabledivid);this.newrowsinput=getFromSelector(newrowsinputid);this.newcolsinput=getFromSelector(newcolsinputid);this.makeheaderinput=getFromSelector(makeheaderinputid);this.classselect=getFromSelector(classselectid);this.alignselect=getFromSelector(alignselectid);this.addtablebutton=getFromSelector(addtablebuttonid);this.addrowbutton=getFromSelector(addrowbuttonid);this.delrowbutton=getFromSelector(delrowbuttonid);this.addcolbutton=getFromSelector(addcolbuttonid);this.delcolbutton=getFromSelector(delcolbuttonid);this.fixbutton=getFromSelector(fixbuttonid);this.fixallbutton=getFromSelector(fixallbuttonid);this.toolboxel=getFromSelector(toolboxid);this.plainclass=plainclass;this.activeclass=activeclass;this.initialize=function(tool,editor){this.tool=tool;this.editor=editor;if(this.editor.config.table_classes){var classes=this.editor.config.table_classes['class'];while(this.classselect.hasChildNodes()){this.classselect.removeChild(this.classselect.firstChild)};for(var i=0;i<classes.length;i++){var classname=classes[i];classname=classname.classname||classname;var option=document.createElement('option');var content=document.createTextNode(classname);option.appendChild(content);option.setAttribute('value',classname);this.classselect.appendChild(option)}};addEventHandler(this.addtablebutton,"click",this.addTable,this);addEventHandler(this.addrowbutton,"click",this.tool.addTableRow,this.tool);addEventHandler(this.delrowbutton,"click",this.tool.delTableRow,this.tool);addEventHandler(this.addcolbutton,"click",this.tool.addTableColumn,this.tool);addEventHandler(this.delcolbutton,"click",this.tool.delTableColumn,this.tool);addEventHandler(this.alignselect,"change",this.setColumnAlign,this);addEventHandler(this.classselect,"change",this.setTableClass,this);addEventHandler(this.fixbutton,"click",this.tool.fixTable,this.tool);addEventHandler(this.fixallbutton,"click",this.tool.fixAllTables,this.tool);this.addtablediv.style.display="block";this.edittablediv.style.display="none";this.editor.logMessage(_('Table tool initialized'))};this.updateState=function(selNode){var table=this.editor.getNearestParentOfType(selNode,'table');if(table){this.addtablediv.style.display="none";this.edittablediv.style.display="block";var align=this.tool._getColumnAlign(selNode);selectSelectItem(this.alignselect,align);selectSelectItem(this.classselect,table.className);if(this.toolboxel){this.toolboxel.className=this.activeclass}} else{this.edittablediv.style.display="none";this.addtablediv.style.display="block";this.alignselect.selectedIndex=0;this.classselect.selectedIndex=0;if(this.toolboxel){this.toolboxel.className=this.plainclass}}};this.addTable=function(){var rows=this.newrowsinput.value;var cols=this.newcolsinput.value;var makeHeader=this.makeheaderinput.checked;var classchooser=getFromSelector("kupu-table-classchooser-add");var tableclass=this.classselect.options[this.classselect.selectedIndex].value;this.tool.createTable(rows,cols,makeHeader,tableclass)};this.setColumnAlign=function(){var newalign=this.alignselect.options[this.alignselect.selectedIndex].value;this.tool.setColumnAlign(newalign)};this.setTableClass=function(){var sel_class=this.classselect.options[this.classselect.selectedIndex].value;if(sel_class){this.tool.setTableClass(sel_class)}}};TableToolBox.prototype=new KupuToolBox;
function ListTool(addulbuttonid,addolbuttonid,ulstyleselectid,olstyleselectid){this.addulbutton=getFromSelector(addulbuttonid);this.addolbutton=getFromSelector(addolbuttonid);this.ulselect=getFromSelector(ulstyleselectid);this.olselect=getFromSelector(olstyleselectid);this.style_to_type={'decimal':'1','lower-alpha':'a','upper-alpha':'A','lower-roman':'i','upper-roman':'I','disc':'disc','square':'square','circle':'circle','none':'none'};this.type_to_style={'1':'decimal','a':'lower-alpha','A':'upper-alpha','i':'lower-roman','I':'upper-roman','disc':'disc','square':'square','circle':'circle','none':'none'};this.initialize=function(editor){this.editor=editor;this._fixTabIndex(this.addulbutton);this._fixTabIndex(this.addolbutton);this._fixTabIndex(this.ulselect);this._fixTabIndex(this.olselect);addEventHandler(this.addulbutton,"click",this.addUnorderedList,this);addEventHandler(this.addolbutton,"click",this.addOrderedList,this);addEventHandler(this.ulselect,"change",this.setUnorderedListStyle,this);addEventHandler(this.olselect,"change",this.setOrderedListStyle,this);this.ulselect.style.display="none";this.olselect.style.display="none";this.editor.logMessage(_('List style tool initialized'))};this._handleStyles=function(currnode,onselect,offselect){if(this.editor.config.use_css){var currstyle=currnode.style.listStyleType} else{var currstyle=this.type_to_style[currnode.getAttribute('type')]}
selectSelectItem(onselect,currstyle);offselect.style.display="none";onselect.style.display="inline";offselect.selectedIndex=0};this.updateState=function(selNode){for(var currnode=selNode;currnode;currnode=currnode.parentNode){var tag=currnode.nodeName.toLowerCase();if(tag=='ul'){this._handleStyles(currnode,this.ulselect,this.olselect);return} else if(tag=='ol'){this._handleStyles(currnode,this.olselect,this.ulselect);return}}
with(this.ulselect){selectedIndex=0;style.display="none"};with(this.olselect){selectedIndex=0;style.display="none"}};this.addList=function(command){this.ulselect.style.display="inline";this.olselect.style.display="none";this.editor.execCommand(command);this.editor.focusDocument()};this.addUnorderedList=function(){this.addList("insertunorderedlist")};this.addOrderedList=function(){this.addList("insertorderedlist")};this.setListStyle=function(tag,select){var currnode=this.editor.getSelectedNode();var l=this.editor.getNearestParentOfType(currnode,tag);var style=select.options[select.selectedIndex].value;if(this.editor.config.use_css){l.style.listStyleType=style} else{l.setAttribute('type',this.style_to_type[style])}
this.editor.focusDocument();this.editor.logMessage(_('List style changed'))};this.setUnorderedListStyle=function(){this.setListStyle('ul',this.ulselect)};this.setOrderedListStyle=function(){this.setListStyle('ol',this.olselect)};this.enable=function(){KupuButtonEnable(this.addulbutton);KupuButtonEnable(this.addolbutton);this.ulselect.disabled="";this.olselect.disabled=""}
this.disable=function(){KupuButtonDisable(this.addulbutton);KupuButtonDisable(this.addolbutton);this.ulselect.disabled="disabled";this.olselect.disabled="disabled"}};ListTool.prototype=new KupuTool;
function ShowPathTool(){this.updateState=function(selNode){var path='';var url=null;var currnode=selNode;while(currnode!=null&&currnode.nodeName!='#document'){if(currnode.nodeName.toLowerCase()=='a'){url=currnode.getAttribute('href')};path='/'+currnode.nodeName.toLowerCase()+path;currnode=currnode.parentNode}
try{window.status=url?(path.toString()+' - contains link to \''+url.toString()+'\''):path} catch(e){this.editor.logMessage(_('Could not set status bar message, '+'check your browser\'s security settings.'),1)}}};ShowPathTool.prototype=new KupuTool;
function ViewSourceTool(){this.sourceWindow=null;this.viewSource=function(){if(this.sourceWindow){this.sourceWindow.close()};this.sourceWindow=window.open('#','sourceWindow');var contents='<html>\n'+this.editor.getInnerDocument().documentElement.innerHTML+'\n</html>';var doc=this.sourceWindow.document;doc.write('\xa0');doc.close();var body=doc.getElementsByTagName("body")[0];while(body.hasChildNodes()){body.removeChild(body.firstChild)};var pre=doc.createElement('pre');var textNode=doc.createTextNode(contents);body.appendChild(pre);pre.appendChild(textNode)};this.createContextMenuElements=function(selNode,event){return new Array(new ContextMenuElement(_('View source'),this.viewSource,this))}};ViewSourceTool.prototype=new KupuTool;
function DefinitionListTool(dlbuttonid){this.dlbutton=getFromSelector(dlbuttonid);this.initialize=function(editor){this.editor=editor;this._fixTabIndex(this.dlbutton);addEventHandler(this.dlbutton,'click',this.createDefinitionList,this);addEventHandler(editor.getInnerDocument(),'keyup',this._keyDownHandler,this);addEventHandler(editor.getInnerDocument(),'keypress',this._keyPressHandler,this)};this.handleEnterPress=function(selNode){var dl=this.editor.getNearestParentOfType(selNode,'dl');if(dl){var dt=this.editor.getNearestParentOfType(selNode,'dt');if(dt){if(dt.childNodes.length==1&&dt.childNodes[0].nodeValue=='\xa0'){this.escapeFromDefinitionList(dl,dt,selNode);return};var selection=this.editor.getSelection();var startoffset=selection.startOffset();var endoffset=selection.endOffset();if(endoffset>startoffset){selection.cutChunk(startoffset,endoffset);selection=this.editor.getSelection();startoffset=selection.startOffset()};var ellength=selection.getElementLength(selection.parentElement());if(startoffset>=ellength-1){this.createDefinition(dl,dt)} else{var doc=this.editor.getInnerDocument();var newdt=selection.splitNodeAtSelection(dt);var newdd=doc.createElement('dd');while(newdt.hasChildNodes()){if(newdt.firstChild!=newdt.lastChild||newdt.firstChild.nodeName.toLowerCase()!='br'){newdd.appendChild(newdt.firstChild)}};newdt.parentNode.replaceChild(newdd,newdt);selection.selectNodeContents(newdd);selection.collapse()}} else{var dd=this.editor.getNearestParentOfType(selNode,'dd');if(!dd){this.editor.logMessage(_('Not inside a definition list element!'));return};if(dd.childNodes.length==1&&dd.childNodes[0].nodeValue=='\xa0'){this.escapeFromDefinitionList(dl,dd,selNode);return};var selection=this.editor.getSelection();var startoffset=selection.startOffset();var endoffset=selection.endOffset();if(endoffset>startoffset){selection.cutChunk(startoffset,endoffset);selection=this.editor.getSelection();startoffset=selection.startOffset()};var ellength=selection.getElementLength(selection.parentElement());if(startoffset>=ellength-1){this.createDefinitionTerm(dl,dd)} else{var br=this.editor.getInnerDocument().createElement('br');this.editor.insertNodeAtSelection(br,1);selection.collapse(true)}}}};this.handleTabPress=function(selNode){};this._keyDownHandler=function(event){var selNode=this.editor.getSelectedNode();var dl=this.editor.getNearestParentOfType(selNode,'dl');if(!dl){return};switch(event.keyCode){case 13:if(event.preventDefault){event.preventDefault()} else{event.returnValue=false};break}};this._keyPressHandler=function(event){var selNode=this.editor.getSelectedNode();var dl=this.editor.getNearestParentOfType(selNode,'dl');if(!dl){return};switch(event.keyCode){case 13:this.handleEnterPress(selNode);if(event.preventDefault){event.preventDefault()} else{event.returnValue=false};break;case 9:if(event.preventDefault){event.preventDefault()} else{event.returnValue=false};this.handleTabPress(selNode)}};this.createDefinitionList=function(){var selection=this.editor.getSelection();var doc=this.editor.getInnerDocument();var selection=this.editor.getSelection();var cloned=selection.cloneContents();var iterator=new NodeIterator(cloned);var currnode=null;var remove=false;while(currnode=iterator.next()){if(currnode.nodeName.toLowerCase()=='br'){remove=true};if(remove){var next=currnode;while(!next.nextSibling){next=next.parentNode};next=next.nextSibling;iterator.setCurrent(next);currnode.parentNode.removeChild(currnode)}};var dtcontentcontainer=cloned;var collapsetoend=false;var dl=doc.createElement('dl');this.editor.insertNodeAtSelection(dl);var dt=this.createDefinitionTerm(dl);if(dtcontentcontainer.hasChildNodes()){collapsetoend=true;while(dt.hasChildNodes()){dt.removeChild(dt.firstChild)};while(dtcontentcontainer.hasChildNodes()){dt.appendChild(dtcontentcontainer.firstChild)}};var selection=this.editor.getSelection();selection.selectNodeContents(dt);selection.collapse(collapsetoend)};this.createDefinitionTerm=function(dl,dd){var doc=this.editor.getInnerDocument();var dt=doc.createElement('dt');if(dd){if(dd.lastChild.nodeName.toLowerCase()=='br'){dd.removeChild(dd.lastChild)}};if(!dd||dl==dd.lastChild){dl.appendChild(dt)} else{var nextsibling=dd.nextSibling;if(nextsibling){dl.insertBefore(dt,nextsibling)} else{dl.appendChild(dt)}};var nbsp=doc.createTextNode('\xa0');dt.appendChild(nbsp);var selection=this.editor.getSelection();selection.selectNodeContents(dt);selection.collapse();this.editor.focusDocument();return dt};this.createDefinition=function(dl,dt,initial_content){var doc=this.editor.getInnerDocument();var dd=doc.createElement('dd');var nextsibling=dt.nextSibling;if(dt){if(dt.lastChild.nodeName.toLowerCase()=='br'){dt.removeChild(dt.lastChild)}};while(nextsibling){var name=nextsibling.nodeName.toLowerCase();if(name=='dd'||name=='dt'){break} else{nextsibling=nextsibling.nextSibling}};if(nextsibling){dl.insertBefore(dd,nextsibling)} else{dl.appendChild(dd)};if(initial_content){for(var i=0;i<initial_content.length;i++){dd.appendChild(initial_content[i])}};var nbsp=doc.createTextNode('\xa0');dd.appendChild(nbsp);var selection=this.editor.getSelection();selection.selectNodeContents(dd);selection.collapse()};this.escapeFromDefinitionList=function(dl,currel,selNode){var doc=this.editor.getInnerDocument();var p=doc.createElement('p');var nbsp=doc.createTextNode('\xa0');p.appendChild(nbsp);if(dl.lastChild==currel){dl.parentNode.insertBefore(p,dl.nextSibling)} else{for(var i=0;i<dl.childNodes.length;i++){var child=dl.childNodes[i];if(child==currel){var newdl=this.editor.getInnerDocument().createElement('dl');while(currel.nextSibling){newdl.appendChild(currel.nextSibling)};dl.parentNode.insertBefore(newdl,dl.nextSibling);dl.parentNode.insertBefore(p,dl.nextSibling)}}};currel.parentNode.removeChild(currel);var selection=this.editor.getSelection();selection.selectNodeContents(p);selection.collapse();this.editor.focusDocument()};this._fixStructure=function(doc,dl,offsetnode){var currname=offsetnode.nodeName.toLowerCase();var currnode=offsetnode.nextSibling;while(currnode){if(currnode.nodeType==1){var nodename=currnode.nodeName.toLowerCase();if(currname=='dt'&&nodename=='dt'){var dd=doc.createElement('dd');while(currnode.hasChildNodes()){dd.appendChild(currnode.childNodes[0])};currnode.parentNode.replaceChild(dd,currnode)} else if(currname=='dd'&&nodename=='dd'){var dt=doc.createElement('dt');while(currnode.hasChildNodes()){dt.appendChild(currnode.childNodes[0])};currnode.parentNode.replaceChild(dt,currnode)}};currnode=currnode.nextSibling}}};DefinitionListTool.prototype=new KupuTool;
function KupuZoomTool(buttonid,firsttab,lasttab){this.button=getFromSelector(buttonid);firsttab=firsttab||'kupu-tb-styles';lasttab=lasttab||'kupu-logo-button';this.initialize=function(editor){this.offclass='kupu-zoom';this.onclass='kupu-zoom-pressed';this.pressed=false;this.baseinitialize(editor);this.button.tabIndex=this.editor.document.editable.tabIndex;addEventHandler(window,"resize",this.onresize,this);addEventHandler(window,"scroll",this.onscroll,this);var lastbutton=getFromSelector(lasttab);var firstbutton=getFromSelector(firsttab);var iframe=editor.getInnerDocument();this.setTabbing(iframe,firstbutton,lastbutton);this.setTabbing(firstbutton,null,editor.getDocument().getWindow());this.editor.logMessage(_('Zoom tool initialized'))}};KupuZoomTool.prototype=new KupuLateFocusStateButton;KupuZoomTool.prototype.baseinitialize=KupuZoomTool.prototype.initialize;KupuZoomTool.prototype.onscroll=function(){if(!this.zoomed) return;var top=window.pageYOffset!=undefined?window.pageYOffset:document.documentElement.scrollTop;var left=window.pageXOffset!=undefined?window.pageXOffset:document.documentElement.scrollLeft;if(top||left) window.scrollTo(0,0)}
KupuZoomTool.prototype.setTabbing=function(control,forward,backward){
function TabDown(event){if(event.keyCode!=9||!this.zoomed) return;var target=event.shiftKey?backward:forward;if(!target) return;if(event.stopPropogation) event.stopPropogation();event.cancelBubble=true;event.returnValue=false;target.focus();return false}
addEventHandler(control,"keydown",TabDown,this)}
KupuZoomTool.prototype.onresize=function(){if(!this.zoomed) return;var editor=this.editor;var iframe=editor.getDocument().editable;var sourcetool=editor.getTool('sourceedittool');var sourceArea=sourcetool?sourcetool.getSourceArea():null;var fulleditor=iframe.parentNode;var body=document.body;if(window.innerWidth){var width=window.innerWidth;var height=window.innerHeight} else if(document.documentElement){var width=document.documentElement.offsetWidth-5;var height=document.documentElement.offsetHeight-5} else{var width=document.body.offsetWidth-5;var height=document.body.offsetHeight-5}
width=width+'px';var offset=iframe.offsetTop;if(sourceArea) offset=sourceArea.offsetTop-1;var nheight=Math.max(height-offset-1,10);nheight=nheight+'px';fulleditor.style.width=width;iframe.style.width=width;iframe.style.height=nheight;if(sourceArea){sourceArea.style.width=width;sourceArea.style.height=height}}
KupuZoomTool.prototype.checkfunc=function(selNode,button,editor,event){return this.zoomed}
KupuZoomTool.prototype.commandfunc=function(button,editor){var zoom=button.pressed;this.zoomed=zoom;var zoomClass='kupu-fulleditor-zoomed';var iframe=editor.getDocument().getEditable();var body=document.body;var html=document.getElementsByTagName('html')[0];if(zoom){html.style.overflow='hidden';window.scrollTo(0,0);editor.setClass(zoomClass);body.className+=' '+zoomClass;this.onresize()} else{html.style.overflow='';var fulleditor=iframe.parentNode;fulleditor.style.width='';body.className=body.className.replace(/ *kupu-fulleditor-zoomed/,'');editor.clearClass(zoomClass);iframe.style.width='';iframe.style.height='';var sourcetool=editor.getTool('sourceedittool');var sourceArea=sourcetool?sourcetool.getSourceArea():null;if(sourceArea){sourceArea.style.width='';sourceArea.style.height=''}}
var doc=editor.getInnerDocument();doc.designMode=doc.designMode;window.scrollTo(0,iframe.offsetTop);editor.focusDocument()}
function DebugLogger(){this.log=function(message,severity){if(severity>1){alert("Error: "+message)} else if(severity==1){alert("Warning: "+message)} else{alert("Log message: "+message)}}}
function PlainLogger(debugelid,maxlength){this.debugel=getFromSelector(debugelid);this.maxlength=maxlength;this.log=function(message,severity){if(severity>1){throw message} else{if(this.maxlength){if(this.debugel.childNodes.length>this.maxlength-1){this.debugel.removeChild(this.debugel.childNodes[0])}}
var now=new Date();var time=now.getHours()+':'+now.getMinutes()+':'+now.getSeconds();var div=document.createElement('div');var text=document.createTextNode(time+' - '+message);div.appendChild(text);this.debugel.appendChild(div)}}}
function DummyLogger(){this.log=function(message,severity){if(severity>1){throw message}}};window._=function(msgid,interpolations){if(interpolations){for(var id in interpolations){var value=interpolations[id];var reg=new RegExp('\\\$\\\{'+id+'\\\}','g');msgid=msgid.replace(reg,""+value)}};return msgid};
function CleanupExpressionsTool(actionselectid,performactionbuttonid){this.actionselect=document.getElementById(actionselectid);this.performactionbutton=document.getElementById(performactionbuttonid)};CleanupExpressionsTool.prototype=new KupuTool;CleanupExpressionsTool.prototype.initialize=function(editor){this.editor=editor;this.expressions=this.generateExpressionsMapping();this.populateActionSelect(this.expressions);addEventHandler(this.performactionbutton,'click',this.performAction,this)};CleanupExpressionsTool.prototype.generateExpressionsMapping=function(){var ret={};var expressions=this.editor.config['cleanup_expressions'];if(!expressions){alert('no cleanup expressions configured');return ret};var sets=expressions.set;for(var i=0;i<sets.length;i++){var set=sets[i];var name=set.name;ret[name]=[];var exprs=set.expression;if(exprs.length){for(var j=0;j<exprs.length;j++){var expr=exprs[j];var regexp=expr.reg.strip();var replacement=this._prepareReplacement(expr.replacement)
ret[name].push([regexp,replacement])}} else{var regexp=exprs.reg.strip();var replacement=this._prepareReplacement(exprs.replacement);ret[name].push([regexp,replacement])}};return ret};CleanupExpressionsTool.prototype._prepareReplacement=function(data){data=data.strip();var reg=/\\x([0-9a-f]{2})/g;while(true){var match=reg.exec(data);if(!match||!match.length){return data};data=data.replace(match[0],String.fromCharCode(parseInt(match[1],16)))}};CleanupExpressionsTool.prototype.populateActionSelect=function(mapping){for(var name in mapping){var option=document.createElement('option');option.value=name;option.appendChild(document.createTextNode(name));this.actionselect.appendChild(option)};this.actionselect.style.width='100%'};CleanupExpressionsTool.prototype.performAction=function(){var action=this.actionselect.options[this.actionselect.selectedIndex].value;var sets=this.expressions[action];for(var i=0;i<sets.length;i++){var body=this.editor.getInnerDocument().getElementsByTagName('body')[0];var nodeiterator=new NodeIterator(body);while(true){var current=nodeiterator.next();if(!current){break};if(current.nodeType==3){var value=current.nodeValue;if(value.strip()){this.performReplaceOnNode(current,sets[i][0],sets[i][1])}}}};alert('Cleanup done')};CleanupExpressionsTool.prototype.performReplaceOnNode=function(node,regexp,replacement){var value=node.nodeValue;while(true){var reg=new RegExp(regexp,'g');var match=reg.exec(value);if(!match||!match.length){node.nodeValue=value;return};value=value.replace(match[0],this.createReplacement(replacement,match))}};CleanupExpressionsTool.prototype.createReplacement=function(pattern,interpolations){var reg=/\\([0-9])/g;while(true){var match=reg.exec(pattern);if(!match||!match.length){return pattern};pattern=pattern.replace(match[0],interpolations[parseInt(match[1])])}};
function NonXHTMLTagFilter(){if(arguments.length){this.filterdata=arguments[0]} else{this.filterdata={'html':1,'body':1,'head':1,'title':1,'a':1,'abbr':1,'acronym':1,'address':1,'b':1,'base':1,'blockquote':1,'br':1,'caption':1,'cite':1,'code':1,'col':1,'colgroup':1,'dd':1,'dfn':1,'div':1,'dl':1,'dt':1,'em':1,'h1':1,'h2':1,'h3':1,'h4':1,'h5':1,'h6':1,'h7':1,'i':1,'img':1,'kbd':1,'li':1,'link':1,'meta':1,'ol':1,'p':1,'pre':1,'q':1,'samp':1,'script':1,'span':1,'strong':1,'style':1,'sub':1,'sup':1,'table':1,'tbody':1,'td':1,'tfoot':1,'th':1,'thead':1,'tr':1,'ul':1,'u':1,'var':1,'font':1,'center':0}};this.initialize=function(editor){this.editor=editor};this.filter=function(ownerdoc,htmlnode){return this._filterHelper(ownerdoc,htmlnode)};this._filterHelper=function(ownerdoc,node){if(node.nodeType==3){return ownerdoc.createTextNode(node.nodeValue)} else if(node.nodeType==4){return ownerdoc.createCDATASection(node.nodeValue)};var newnode=ownerdoc.createElement(node.nodeName);for(var i=0;i<node.attributes.length;i++){var attr=node.attributes[i];newnode.setAttribute(attr.nodeName,attr.nodeValue)};for(var i=0;i<node.childNodes.length;i++){var child=node.childNodes[i];var nodeType=child.nodeType;var nodeName=child.nodeName.toLowerCase();if(nodeType==3||nodeType==4){newnode.appendChild(this._filterHelper(ownerdoc,child))};if(nodeName in this.filterdata&&this.filterdata[nodeName]){newnode.appendChild(this._filterHelper(ownerdoc,child))} else if(nodeName in this.filterdata){for(var j=0;j<child.childNodes.length;j++){newnode.appendChild(this._filterHelper(ownerdoc,child.childNodes[j]))}}};return newnode}};
function XhtmlValidation(editor){this.Set=function(ary){if(typeof(ary)==typeof('')) ary=[ary];if(ary instanceof Array){for(var i=0;i<ary.length;i++){this[ary[i]]=1}}
else{for(var v in ary){this[v]=1}}}
this._exclude=function(array,exceptions){var ex;if(exceptions.split){ex=exceptions.split("|")} else{ex=exceptions}
var exclude=new this.Set(ex);var res=[];for(var k=0;k<array.length;k++){if(!exclude[array[k]]) res.push(array[k])}
return res}
this.setAttrFilter=function(attributes,filter){for(var j=0;j<attributes.length;j++){var attr=attributes[j];this.attrFilters[attr]=filter||this._defaultCopyAttribute}}
this.setTagAttributes=function(tags,attributes){for(var j=0;j<tags.length;j++){this.tagAttributes[tags[j]]=attributes}}
this.includeTagAttributes=function(tags,attributes){for(var j=0;j<tags.length;j++){var tag=tags[j];this.tagAttributes[tag]=this.tagAttributes[tag].concat(attributes)}}
this.excludeTagAttributes=function(tags,attributes){var bad=new this.Set(attributes);var tagset=new this.Set(tags);for(var tag in tagset){var val=this.tagAttributes[tag];for(var i=val.length;i>=0;i--){if(bad[val[i]]){val=val.concat();val.splice(i,1)}}
this.tagAttributes[tag]=val;this.badTagAttributes[tag]=attributes}}
this.excludeTags=function(badtags){if(typeof(badtags)==typeof('')) badtags=[badtags];for(var i=0;i<badtags.length;i++){delete this.tagAttributes[badtags[i]]}}
this.excludeAttributes=function(badattrs){this.excludeTagAttributes(this.tagAttributes,badattrs);for(var i=0;i<badattrs.length;i++){delete this.attrFilters[badattrs[i]]}}
if(editor.getBrowserName()=="IE"){this._getTagName=function(htmlnode){var nodename=htmlnode.nodeName.toLowerCase();if(htmlnode.scopeName&&htmlnode.scopeName!="HTML"){nodename=htmlnode.scopeName+':'+nodename}
return nodename}} else{this._getTagName=function(htmlnode){return htmlnode.nodeName.toLowerCase()}};this.elements=new function(validation){this.attributes=['abbr','accept','accept-charset','accesskey','action','align','alink','alt','archive','axis','background','bgcolor','border','cellpadding','cellspacing','char','charoff','charset','checked','cite','class','classid','clear','code','codebase','codetype','color','cols','colspan','compact','content','coords','data','datetime','declare','defer','dir','disabled','enctype','face','for','frame','frameborder','headers','height','href','hreflang','hspace','http-equiv','id','ismap','label','lang','language','link','longdesc','marginheight','marginwidth','maxlength','media','method','multiple','name','nohref','noshade','nowrap','object','onblur','onchange','onclick','ondblclick','onfocus','onkeydown','onkeypress','onkeyup','onload','onmousedown','onmousemove','onmouseout','onmouseover','onmouseup','onreset','onselect','onsubmit','onunload','profile','prompt','readonly','rel','rev','rows','rowspan','rules','scheme','scope','scrolling','selected','shape','size','span','src','standby','start','style','summary','tabindex','target','text','title','type','usemap','valign','value','valuetype','vlink','vspace','width','xml:lang','xml:space','xmlns'];this.coreattrs=['id','title','style','class'];this.i18n=['lang','dir','xml:lang'];this.events=[];this.focusevents=[];this.loadevents=[];this.formevents=[];this.inputevents=[] ;this.focus=['accesskey','tabindex'].concat(this.focusevents);this.attrs=[].concat(this.coreattrs,this.i18n,this.events);this.special_extra=['object','applet','img','map','iframe'];this.special_basic=['br','span','bdo'];this.special=[].concat(this.special_basic,this.special_extra);this.fontstyle_extra=['big','small','font','basefont'];this.fontstyle_basic=['tt','i','b','u','s','strike'];this.fontstyle=[].concat(this.fontstyle_basic,this.fontstyle_extra);this.phrase_extra=['sub','sup'];this.phrase_basic=['em','strong','dfn','code','q','samp','kbd','var','cite','abbr','acronym'];this.inline_forms=['input','select','textarea','label','button'];this.misc_inline=['ins','del'];this.misc=['noscript'].concat(this.misc_inline);this.inline=['a'].concat(this.special,this.fontstyle,this.phrase,this.inline_forms);this.Inline=['#PCDATA'].concat(this.inline,this.misc_inline);this.heading=['h1','h2','h3','h4','h5','h6'];this.lists=['ul','ol','dl','menu','dir'];this.blocktext=['pre','hr','blockquote','address','center','noframes'];this.block=['p','div','isindex','fieldset','table'].concat(this.heading,this.lists,this.blocktext);this.Flow=['#PCDATA','form'].concat(this.block,this.inline)}(this);this._commonsetting=function(self,names,value){for(var n=0;n<names.length;n++){self[names[n]]=value}}
this.tagAttributes=new function(el,validation){this.title=el.i18n.concat('id');this.html=this.title.concat('xmlns');this.head=this.title.concat('profile');this.base=['id','href','target'];this.meta=this.title.concat('http-equiv','name','content','scheme');this.link=el.attrs.concat('charset','href','hreflang','type','rel','rev','media','target');this.style=this.title.concat('type','media','title','xml:space');this.script=['id','charset','type','language','src','defer','xml:space'];this.iframe=['longdesc','name','src','frameborder','marginwidth','marginheight','scrolling','align','height','width'].concat(el.coreattrs);this.body=['background','bgcolor','text','link','vlink','alink'].concat(el.attrs,el.loadevents);validation._commonsetting(this,['p','div'].concat(el.heading),['align'].concat(el.attrs));this.dl=this.dir=this.menu=el.attrs.concat('compact');this.ul=this.menu.concat('type');this.ol=this.ul.concat('start');this.li=el.attrs.concat('type','value');this.hr=el.attrs.concat('align','noshade','size','width');this.pre=el.attrs.concat('width','xml:space');this.blockquote=this.q=el.attrs.concat('cite');this.ins=this.del=this.blockquote.concat('datetime');this.a=el.attrs.concat(el.focus,'charset','type','name','href','hreflang','rel','rev','shape','coords','target');this.bdo=el.coreattrs.concat(el.events,'lang','xml:lang','dir');this.br=el.coreattrs.concat('clear');validation._commonsetting(this,['noscript','noframes','dt','dd','address','center','span','em','strong','dfn','code','samp','kbd','var','cite','abbr','acronym','sub','sup','tt','i','b','big','small','u','s','strike','fieldset'],el.attrs);this.basefont=['id','size','color','face'];this.font=el.coreattrs.concat(el.i18n,'size','color','face');this.object=el.attrs.concat('declare','classid','codebase','data','type','codetype','archive','standby','height','width','usemap','name','tabindex','align','border','hspace','vspace');this.param=['id','name','value','valuetype','type'];this.applet=el.coreattrs.concat('codebase','archive','code','object','alt','name','width','height','align','hspace','vspace');this.img=el.attrs.concat('src','alt','name','longdesc','height','width','usemap','ismap','align','border','hspace','vspace');this.map=this.title.concat('title','name','style','class',el.events);this.area=el.attrs.concat('shape','coords','href','nohref','alt','target',el.focus);this.form=el.attrs.concat('action','method','name','enctype',el.formevents,'accept','accept-charset','target');this.label=el.attrs.concat('for','accesskey',el.focusevents);this.input=el.attrs.concat('type','name','value','checked','disabled','readonly','size','maxlength','src','alt','usemap',el.input,'accept','align',el.focus);this.select=el.attrs.concat('name','size','multiple','disabled','tabindex',el.focusevents,el.input);this.optgroup=el.attrs.concat('disabled','label');this.option=el.attrs.concat('selected','disabled','label','value');this.textarea=el.attrs.concat('name','rows','cols','disabled','readonly',el.inputevents,el.focus);this.legend=el.attrs.concat('accesskey','align');this.button=el.attrs.concat('name','value','type','disabled',el.focus);this.isindex=el.coreattrs.concat('prompt',el.i18n);this.table=el.attrs.concat('summary','width','border','frame','rules','cellspacing','cellpadding','align','bgcolor');this.caption=el.attrs.concat('align');this.col=this.colgroup=el.attrs.concat('span','width','align','char','charoff','valign');this.thead=el.attrs.concat('align','char','charoff','valign');this.tfoot=this.tbody=this.thead;this.tr=this.thead.concat('bgcolor');this.td=this.th=this.tr.concat('abbr','axis','headers','scope','rowspan','colspan','nowrap','width','height')}(this.elements,this);this.badTagAttributes=new this.Set({});this.States=new function(el,validation){var here=this;
function setStates(tags,value){var valset=new validation.Set(value);for(var i=0;i<tags.length;i++){here[tags[i]]=valset}}
setStates(['html'],['head','body']);setStates(['head'],['title','base','script','style','meta','link','object','isindex']);setStates(['base','meta','link','hr','param','img','area','input','br','basefont','isindex','col',],[]);setStates(['title','style','script','option','textarea'],['#PCDATA']);setStates(['noscript','iframe','noframes','body','div','li','dd','blockquote','center','ins','del','td','th',],el.Flow);setStates(el.heading,el.Inline);setStates(['p','dt','address','span','bdo','caption','em','strong','dfn','code','samp','kbd','var','cite','abbr','acronym','q','sub','sup','tt','i','b','big','small','u','s','strike','font','label','legend'],el.Inline);setStates(['ul','ol','menu','dir','ul',],['li']);setStates(['dl'],['dt','dd']);setStates(['pre'],validation._exclude(el.Inline,"img|object|applet|big|small|sub|sup|font|basefont"));setStates(['a'],validation._exclude(el.Inline,"a"));setStates(['applet','object'],['#PCDATA','param','form'].concat(el.block,el.inline,el.misc));setStates(['map'],['form','area'].concat(el.block,el.misc));setStates(['form'],validation._exclude(el.Flow,['form']));setStates(['select'],['optgroup','option']);setStates(['optgroup'],['option']);setStates(['fieldset'],['#PCDATA','legend','form'].concat(el.block,el.inline,el.misc));setStates(['button'],validation._exclude(el.Flow,['a','form','iframe'].concat(el.inline_forms)));setStates(['table'],['caption','col','colgroup','thead','tfoot','tbody','tr']);setStates(['thead','tfoot','tbody'],['tr']);setStates(['colgroup'],['col']);setStates(['tr'],['th','td'])}(this.elements,this);this.styleWhitelist=new this.Set(['text-align','list-style-type','float']);this.classBlacklist=new this.Set(['MsoNormal','MsoTitle','MsoHeader','MsoFootnoteText','Bullet1','Bullet2']);this.classFilter=function(value){var classes=value.split(' ');var filtered=[];for(var i=0;i<classes.length;i++){var c=classes[i];if(c&&!this.classBlacklist[c]){filtered.push(c)}}
return filtered.join(' ')}
this._defaultCopyAttribute=function(name,htmlnode,xhtmlnode){var val=htmlnode.getAttribute(name);if(val) xhtmlnode.setAttribute(name,val)}
var filter=this;this.attrFilters=new function(validation,editor){var attrs=validation.elements.attributes;for(var i=0;i<attrs.length;i++){this[attrs[i]]=validation._defaultCopyAttribute}
this['class']=function(name,htmlnode,xhtmlnode){var val=htmlnode.getAttribute('class');if(val) val=validation.classFilter(val);if(val) xhtmlnode.setAttribute('class',val)}
this['*']=function(name,htmlnode,xhtmlnode){var nodeName=filter._getTagName(htmlnode);var bad=filter.badTagAttributes[nodeName];for(var i=0;i<htmlnode.attributes.length;i++){var attr=htmlnode.attributes[i];if(bad&&bad.contains(attr.name)){continue};if(attr.value!==null&&attr.value!==undefined){xhtmlnode.setAttribute(attr.name,attr.value)}}}
if(editor.getBrowserName()=="IE"){this['class']=function(name,htmlnode,xhtmlnode){var val=htmlnode.className;if(val) val=validation.classFilter(val);if(val) xhtmlnode.setAttribute('class',val)}
this['http-equiv']=function(name,htmlnode,xhtmlnode){var val=htmlnode.httpEquiv;if(val) xhtmlnode.setAttribute('http-equiv',val)}
this['xml:lang']=this['xml:space']=function(name,htmlnode,xhtmlnode){try{var val=htmlnode.getAttribute(name);if(val) xhtmlnode.setAttribute(name,val)} catch(e){}}}
this.rowspan=this.colspan=function(name,htmlnode,xhtmlnode){var val=htmlnode.getAttribute(name);if(val&&val!='1') xhtmlnode.setAttribute(name,val)}
this.style=function(name,htmlnode,xhtmlnode){var val=htmlnode.style.cssText;if(val){var styles=val.split(/; */);for(var i=styles.length;i>=0;i--) if(styles[i]){var parts=/^([^:]+): *(.*)$/.exec(styles[i]);var name=parts[1].toLowerCase();if(validation.styleWhitelist[name]){styles[i]=name+': '+parts[2]} else{styles.splice(i,1)}}
if(styles[styles.length-1]) styles.push('');val=styles.join('; ').strip()}
if(val) xhtmlnode.setAttribute('style',val)}}(this,editor);this.excludeTags(['center']);if(editor.config&&editor.config.htmlfilter){this.filterStructure=editor.config.htmlfilter.filterstructure;var exclude=editor.config.htmlfilter;if(exclude.a)
this.excludeAttributes(exclude.a);if(exclude.t)
this.excludeTags(exclude.t);if(exclude.c){var c=exclude.c;if(!c.length) c=[c];for(var i=0;i<c.length;i++){this.excludeTagAttributes(c[i].t,c[i].a)}}
if(exclude.xstyle){var s=exclude.xstyle;for(var i=0;i<s.length;i++){this.styleWhitelist[s[i]]=1}}
if(exclude['class']){var c=exclude['class'];for(var i=0;i<c.length;i++){this.classBlacklist[c[i]]=1}}};this._copyAttributes=function(htmlnode,xhtmlnode,valid){if(valid.contains('*')){this.attrFilters['*'](name,htmlnode,xhtmlnode);return};for(var i=0;i<valid.length;i++){var name=valid[i];var filter=this.attrFilters[name];if(filter) filter(name,htmlnode,xhtmlnode)}}
this._convertToSarissaNode=function(ownerdoc,htmlnode,xhtmlparent){return this._convertNodes(ownerdoc,htmlnode,xhtmlparent,new this.Set(['html']))};this._convertNodes=function(ownerdoc,htmlnode,xhtmlparent,permitted){var name,parentnode=xhtmlparent;var nodename=this._getTagName(htmlnode);var nostructure=!this.filterstructure;var validattrs=this.tagAttributes[nodename];if(validattrs&&(nostructure||permitted[nodename])){try{var xhtmlnode=ownerdoc.createElement(nodename);parentnode=xhtmlnode} catch(e){};if(validattrs&&xhtmlnode)
this._copyAttributes(htmlnode,xhtmlnode,validattrs)}
var kids=htmlnode.childNodes;var permittedChildren=this.States[parentnode.tagName]||permitted;if(kids.length==0){if(htmlnode.text&&htmlnode.text!=""&&(nostructure||permittedChildren['#PCDATA'])){var text=htmlnode.text;var tnode=ownerdoc.createTextNode(text);parentnode.appendChild(tnode)}} else{for(var i=0;i<kids.length;i++){var kid=kids[i];if(kid.parentNode!==htmlnode){if(kid.tagName=='BODY'){if(nodename!='html') continue} else if(kid.parentNode.tagName===htmlnode.tagName){continue}}
if(kid.nodeType==1){var newkid=this._convertNodes(ownerdoc,kid,parentnode,permittedChildren);if(newkid!=null){parentnode.appendChild(newkid)}} else if(kid.nodeType==3){if(nostructure||permittedChildren['#PCDATA'])
parentnode.appendChild(ownerdoc.createTextNode(kid.nodeValue))} else if(kid.nodeType==4){if(nostructure||permittedChildren['#PCDATA'])
parentnode.appendChild(ownerdoc.createCDATASection(kid.nodeValue))}}}
return xhtmlnode}}
this.kuputoolcollapser=new function(){var ToolCollapser=function(toolboxesparentid){this.parent=document.getElementById(toolboxesparentid)};this.Collapser=ToolCollapser;ToolCollapser.prototype.initialize=function(){var initial_state={};if(navigator.cookieEnabled){var cookie=document.cookie;var reg=/initial_state=([^;]+);?/;var match=cookie.match(reg);if(match){eval(unescape(match[0]))}};for(var i=0;i<this.parent.childNodes.length;i++){var child=this.parent.childNodes[i];if(child.className=='kupu-toolbox'){var heading=child.getElementsByTagName('h1')[0];if(!heading){throw('heading not found by collapser for toolbox '+child.id)};heading.setAttribute('title',_('click to unfold'));var body=this.getToolBody(child);var handler=function(heading){if(this.style.display=='none'){this.style.display='block';heading.className='kupu-toolbox-heading-opened';heading.setAttribute('title',_('click to fold'))} else{this.style.display='none';heading.className='kupu-toolbox-heading-closed';heading.setAttribute('title',_('click to unfold'))}};var wrap_openhandler=function(body,heading){return function(){body.style.display='block';heading.className='kupu-toolbox-heading-opened'}};addEventHandler(heading,'click',handler,body,heading);if(initial_state[child.id]===undefined||initial_state[child.id]=='0'){body.style.display='none'} else{heading.className='kupu-toolbox-heading-opened';heading.setAttribute('title',_('click to fold'))};child.open_handler=wrap_openhandler(body,heading)}};addEventHandler(window,'beforeunload',this.saveState,this)};ToolCollapser.prototype.getToolBody=function(tool){var heading=tool.getElementsByTagName('h1')[0];var currchild=heading.nextSibling;while(currchild.nodeType!=1){currchild=currchild.nextSibling;if(!currchild){throw('body not found by collapser for toolbox '+child.id)}};return currchild};ToolCollapser.prototype.saveState=function(){if(!navigator.cookieEnabled){return};var current_state={};for(var i=0;i<this.parent.childNodes.length;i++){var child=this.parent.childNodes[i];if(child.nodeType!=1){continue};var body=this.getToolBody(child);current_state[child.id]=body.style.display=='none'?'0':'1'};var exp=new Date();exp.setTime(exp.getTime()+(100 * 365 * 24 * 60 * 60 * 1000));var cookie='initial_state='+escape(this.serializeMapping(current_state))+';'+'expires='+exp.toGMTString()+';'+'path=/';document.cookie=cookie};ToolCollapser.prototype.serializeMapping=function(mapping){if(typeof(mapping)=='string'){return "'" + mapping + "'"};var ret='{';var first=true;for(var key in mapping){if(!first){ret+=', '};ret+="'" + key + "': "+this.serializeMapping(mapping[key]);first=false};return ret+'}'}}();
function ContextMenu(){this.contextmenu=null;this.seperator=1;this.initialize=function(editor){this.editor=editor;addEventHandler(this.editor.getInnerDocument(),"contextmenu",this.createContextMenu,this);addEventHandler(document,"focus",this.hideContextMenu,this);addEventHandler(editor.getInnerDocument(),"mousedown",this.hideContextMenu,this);addEventHandler(document,"mousedown",this.hideContextMenu,this)};this.createContextMenu=function(event){if(event.stopPropagation){event.stopPropagation()};event.returnValue=false;if(this.editor.getBrowserName()=='IE'){this.editor._saveSelection()};if(this.editor.getBrowserName()=='Mozilla'&&this.contextmenu){return false};this.hideContextMenu();var selNode=this.editor.getSelectedNode();var elements=new Array();for(var id in this.editor.tools){var tool=this.editor.tools[id];if(tool.createContextMenuElements){var els=tool.createContextMenuElements(selNode,event);elements=elements.concat(els)}};this._createNewContextMenu(elements,event);this.last_event=event;return false};this.hideContextMenu=function(event){if(this.contextmenu){try{window.document.getElementsByTagName('body')[0].removeChild(this.contextmenu)} catch(e){};this.contextmenu=null}};this._createNewContextMenu=function(elements,event){var doc=window.document;var menu=doc.createElement('div');menu.contentEditable=false;menu.designMode='Off';this._setMenuStyle(menu);for(var i=0;i<elements.length;i++){var element=elements[i];if(element!==this.seperator){var div=doc.createElement('div');div.style.width='100%';var label=doc.createTextNode('\u00a0'+element.label);div.appendChild(label);menu.appendChild(div);element.element=div;addEventHandler(div,"mousedown",element.action,element.context);addEventHandler(div,"mouseover",element.changeOverStyle,element);addEventHandler(div,"mouseout",element.changeNormalStyle,element);addEventHandler(div,"mouseup",this.hideContextMenu,this)} else{var hr=doc.createElement('hr');menu.appendChild(hr)}};var iframe=this.editor.getDocument().getEditable();var left=event.clientX;var top=event.clientY;var currnode=iframe;if(this.editor.getBrowserName()=='IE'){while(currnode){left+=currnode.offsetLeft+currnode.clientLeft;top+=currnode.offsetTop+currnode.clientTop;currnode=currnode.offsetParent}} else{while(currnode){left+=currnode.offsetLeft;top+=currnode.offsetTop;currnode=currnode.offsetParent}};menu.style.left=left+'px';menu.style.top=top+'px';menu.style.visibility='visible';addEventHandler(menu,'focus', function(){this.blur},menu)
doc.getElementsByTagName('body')[0].appendChild(menu);this.contextmenu=menu};this._setMenuStyle=function(menu){menu.style.position='absolute';menu.style.backgroundColor='white';menu.style.fontFamily='Verdana, Arial, Helvetica, sans-serif';menu.style.fontSize='12px';menu.style.lineHeight='16px';menu.style.borderWidth='1px';menu.style.borderStyle='solid';menu.style.borderColor='black';menu.style.cursor='default';menu.style.width="8em"};this._showOriginalMenu=function(event){window.document.dispatchEvent(this._last_event)}};
function ContextMenuElement(label,action,context){this.label=label;this.action=action;this.context=context;this.element=null;this.changeOverStyle=function(event){this.element.style.backgroundColor='blue'};this.changeNormalStyle=function(event){this.element.style.backgroundColor='white'}};
function initKupu(iframe){var l=new PlainLogger('kupu-toolbox-debuglog',5);var conf=loadDictFromXML(document,'kupuconfig');var doc=new KupuDocument(iframe);var kupu=new KupuEditor(doc,conf,l);var contextmenu=new ContextMenu();kupu.setContextMenu(contextmenu);var ui=new KupuUI('kupu-tb-styles');kupu.registerTool('ui',ui);var execCommand=function(cmd){return function(button,editor){editor.execCommand(cmd)}};var boldchecker=ParentWithStyleChecker(new Array('b','strong'),'fontWeight','bold');var boldbutton=new KupuStateButton('kupu-bold-button',execCommand('bold'),boldchecker,'kupu-bold','kupu-bold-pressed');kupu.registerTool('boldbutton',boldbutton);var italicschecker=ParentWithStyleChecker(new Array('i','em'),'fontStyle','italic');var italicsbutton=new KupuStateButton('kupu-italic-button',execCommand('italic'),italicschecker,'kupu-italic','kupu-italic-pressed');kupu.registerTool('italicsbutton',italicsbutton);var underlinechecker=ParentWithStyleChecker(new Array('u'),'textDecoration','underline');var underlinebutton=new KupuStateButton('kupu-underline-button',execCommand('underline'),underlinechecker,'kupu-underline','kupu-underline-pressed');kupu.registerTool('underlinebutton',underlinebutton);var subscriptchecker=ParentWithStyleChecker(new Array('sub'));var subscriptbutton=new KupuStateButton('kupu-subscript-button',execCommand('subscript'),subscriptchecker,'kupu-subscript','kupu-subscript-pressed');kupu.registerTool('subscriptbutton',subscriptbutton);var superscriptchecker=ParentWithStyleChecker(new Array('super','sup'));var superscriptbutton=new KupuStateButton('kupu-superscript-button',execCommand('superscript'),superscriptchecker,'kupu-superscript','kupu-superscript-pressed');kupu.registerTool('superscriptbutton',superscriptbutton);var justifyleftbutton=new KupuButton('kupu-justifyleft-button',execCommand('justifyleft'));kupu.registerTool('justifyleftbutton',justifyleftbutton);var justifycenterbutton=new KupuButton('kupu-justifycenter-button',execCommand('justifycenter'));kupu.registerTool('justifycenterbutton',justifycenterbutton);var justifyrightbutton=new KupuButton('kupu-justifyright-button',execCommand('justifyright'));kupu.registerTool('justifyrightbutton',justifyrightbutton);var outdentbutton=new KupuButton('kupu-outdent-button',execCommand('outdent'));kupu.registerTool('outdentbutton',outdentbutton);var indentbutton=new KupuButton('kupu-indent-button',execCommand('indent'));kupu.registerTool('indentbutton',indentbutton);var undobutton=new KupuButton('kupu-undo-button',execCommand('undo'));kupu.registerTool('undobutton',undobutton);var redobutton=new KupuButton('kupu-redo-button',execCommand('redo'));kupu.registerTool('redobutton',redobutton);var removeimagebutton=new KupuRemoveElementButton('kupu-removeimage-button','img','kupu-removeimage');kupu.registerTool('removeimagebutton',removeimagebutton);var removelinkbutton=new KupuRemoveElementButton('kupu-removelink-button','a','kupu-removelink');kupu.registerTool('removelinkbutton',removelinkbutton);var colorchoosertool=new ColorchooserTool('kupu-forecolor-button','kupu-hilitecolor-button','kupu-colorchooser');kupu.registerTool('colorchooser',colorchoosertool);var listtool=new ListTool('kupu-list-ul-addbutton','kupu-list-ol-addbutton','kupu-ulstyles','kupu-olstyles');kupu.registerTool('listtool',listtool);var definitionlisttool=new DefinitionListTool('kupu-list-dl-addbutton');kupu.registerTool('definitionlisttool',definitionlisttool);var proptool=new PropertyTool('kupu-properties-title','kupu-properties-description');kupu.registerTool('proptool',proptool);var linktool=new LinkTool();kupu.registerTool('linktool',linktool);var linktoolbox=new LinkToolBox("kupu-link-input","kupu-link-button",'kupu-toolbox-links','kupu-toolbox','kupu-toolbox-active');linktool.registerToolBox('linktoolbox',linktoolbox);var imagetool=new ImageTool();kupu.registerTool('imagetool',imagetool);var imagetoolbox=new ImageToolBox('kupu-image-input','kupu-image-addbutton','kupu-image-float-select','kupu-toolbox-images','kupu-toolbox','kupu-toolbox-active');imagetool.registerToolBox('imagetoolbox',imagetoolbox);var tabletool=new TableTool();kupu.registerTool('tabletool',tabletool);var tabletoolbox=new TableToolBox('kupu-toolbox-addtable','kupu-toolbox-edittable','kupu-table-newrows','kupu-table-newcols','kupu-table-makeheader','kupu-table-classchooser','kupu-table-alignchooser','kupu-table-addtable-button','kupu-table-addrow-button','kupu-table-delrow-button','kupu-table-addcolumn-button','kupu-table-delcolumn-button','kupu-table-fix-button','kupu-table-fixall-button','kupu-toolbox-tables','kupu-toolbox','kupu-toolbox-active');tabletool.registerToolBox('tabletoolbox',tabletoolbox);var showpathtool=new ShowPathTool();kupu.registerTool('showpathtool',showpathtool);var sourceedittool=new SourceEditTool('kupu-source-button','kupu-editor-textarea');kupu.registerTool('sourceedittool',sourceedittool);var opendrawer=function(drawerid){return function(button,editor){drawertool.openDrawer(drawerid)}};var imagelibdrawerbutton=new KupuButton('kupu-imagelibdrawer-button',opendrawer('imagelibdrawer'));kupu.registerTool('imagelibdrawerbutton',imagelibdrawerbutton);var linklibdrawerbutton=new KupuButton('kupu-linklibdrawer-button',opendrawer('linklibdrawer'));kupu.registerTool('linklibdrawerbutton',linklibdrawerbutton);var linkdrawerbutton=new KupuButton('kupu-linkdrawer-button',opendrawer('linkdrawer'));kupu.registerTool('linkdrawerbutton',linkdrawerbutton);var tabledrawerbutton=new KupuButton('kupu-tabledrawer-button',opendrawer('tabledrawer'));kupu.registerTool('tabledrawerbutton',tabledrawerbutton);var drawertool=new DrawerTool();kupu.registerTool('drawertool',drawertool);var linklibdrawer=new LinkLibraryDrawer(linktool,conf['link_xsl_uri'],conf['link_libraries_uri'],conf['link_images_uri']);drawertool.registerDrawer('linklibdrawer',linklibdrawer);var imagelibdrawer=new ImageLibraryDrawer(imagetool,conf['image_xsl_uri'],conf['image_libraries_uri'],conf['search_images_uri']);drawertool.registerDrawer('imagelibdrawer',imagelibdrawer);var linkdrawer=new LinkDrawer('kupu-linkdrawer',linktool);drawertool.registerDrawer('linkdrawer',linkdrawer);var tabledrawer=new TableDrawer('kupu-tabledrawer',tabletool);drawertool.registerDrawer('tabledrawer',tabledrawer);var savebutton=getFromSelector('kupu-save-button');
function prepareForm(){var drawer=window.document.getElementById('kupu-librarydrawer');if(drawer){drawer.parentNode.removeChild(drawer)}
kupu.prepareForm(savebutton.form,'kupu');savebutton.form.submit()};addEventHandler(savebutton,'click',prepareForm,kupu);var nonxhtmltagfilter=new NonXHTMLTagFilter();kupu.registerFilter(nonxhtmltagfilter);return kupu};
function startKupu(){var frame=getFromSelector('kupu-editor');var kupu=initKupu(frame);if(!window.i18n_message_catalog){continueStartKupu(kupu);return kupu};var handler=function(request){if(this.readyState==4){var status=this.status;if(status!='200'){alert(_('Error loading translation (status ${status} '+'), falling back to english'),{'status':status});continueStartKupu(kupu);return};var dom=this.responseXML;window.i18n_message_catalog.initialize(dom);continueStartKupu(kupu)}};var request=new XMLHttpRequest();request.onreadystatechange=(new ContextFixer(handler,request)).execute;request.open('GET','kupu.pox',true);request.send('');return kupu};
function continueStartKupu(kupu){kupu.initialize();return kupu};
function SourceEditTool(sourcebuttonid,sourceareaid){this.sourceButton=getFromSelector(sourcebuttonid);this.sourcemode=false;this._currently_editing=null;this.getSourceArea=function(){return getFromSelector(sourceareaid)}};SourceEditTool.prototype=new KupuTool;SourceEditTool.prototype.cancelSourceMode=function(){if(this._currently_editing){this.switchSourceEdit(null,true)}};SourceEditTool.prototype.updateState=SourceEditTool.prototype.cancelSourceMode;SourceEditTool.prototype.initialize=function(editor){this.editor=editor;this._fixTabIndex(this.sourceButton);addEventHandler(this.sourceButton,"click",this.switchSourceEdit,this);this.editor.logMessage(_('Source edit tool initialized'))};SourceEditTool.prototype.switchSourceEdit=function(event,nograb){var kupu=this.editor;var docobj=this._currently_editing||kupu.getDocument();var editorframe=docobj.getEditable();var sourcearea=this.getSourceArea();var kupudoc=docobj.getDocument();var sourceClass='kupu-sourcemode';if(!this.sourcemode){if(window.drawertool){window.drawertool.closeDrawer()};if (/on/i.test(kupudoc.designMode)){kupudoc.designMode='Off'};kupu._initialized=false;var data='';if(kupu.config.filtersourceedit){window.status=_('Cleaning up HTML...');var transform=kupu._filterContent(kupu.getInnerDocument().documentElement);data=kupu.getXMLBody(transform);data=kupu._fixupSingletons(data).replace(/<\/?body[^>]*>/g,"");window.status=''} else{data=kupu.getHTMLBody()};sourcearea.value=data;kupu.setClass(sourceClass);editorframe.style.display='none';sourcearea.style.display='block';if(!nograb){sourcearea.focus()};this._currently_editing=docobj} else{kupu.setHTMLBody(sourcearea.value);kupu.clearClass(sourceClass);sourcearea.style.display='none';editorframe.style.display='block';if (/off/i.test(kupudoc.designMode)){kupudoc.designMode='On'};if(!nograb){docobj.getWindow().focus();var selection=this.editor.getSelection();selection.collapse()};kupu._initialized=true;this._currently_editing=null;this.editor.updateState()};this.sourcemode=!this.sourcemode};SourceEditTool.prototype.enable=function(){KupuButtonEnable(this.sourceButton)};SourceEditTool.prototype.disable=function(){KupuButtonDisable(this.sourceButton)};
function MultiSourceEditTool(sourcebuttonid,textareaprefix){this.sourceButton=getFromSelector(sourcebuttonid);this.textareaprefix=textareaprefix;this._currently_editing=null};MultiSourceEditTool.prototype=new SourceEditTool;MultiSourceEditTool.prototype.getSourceArea=function(){var docobj=this._currently_editing||kupu.getDocument();var sourceareaid=this.textareaprefix+docobj.getEditable().id;return getFromSelector(sourceareaid)};
function KupuSpellChecker(buttonid,scripturl,spanstyle,winwidth,winheight,skip_tags){this.button=document.getElementById(buttonid);this.scripturl=scripturl;this.spanstyle=spanstyle||'color: red; '+'text-decoration: underline;';this.winwidth=winwidth||'600';this.winheight=winheight||'400';this.skip_tags=skip_tags||['head','script']};KupuSpellChecker.prototype=new KupuTool;KupuSpellChecker.prototype.initialize=function(editor){this.editor=editor;addEventHandler(this.button,'click',this.check,this)};KupuSpellChecker.prototype.check=function(){var request=new XMLHttpRequest();request.open('POST',this.scripturl,true);request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');request.onreadystatechange=new ContextFixer(this.stateChangeHandler,this,request).execute;var result=this.getCurrentContents();result=escape(result.strip().replace('\n',' ').reduceWhitespace());request.send('text='+result)};KupuSpellChecker.prototype.stateChangeHandler=function(request){if(request.readyState==4){if(request.status=='200'){var result=request.responseXML;result=this.xmlToMapping(result);if(!result){alert(_('There were no errors.'))} else{this.displayUnrecognized(result)}} else{alert(_('Error loading data, status ${status}',{'status':request.status}))}}};KupuSpellChecker.prototype.getCurrentContents=function(){var doc=this.editor.getInnerDocument().documentElement;var iterator=new NodeIterator(doc);var bits=[];while(true){var node=iterator.next();if(!node){break};while(this.skip_tags.contains(node.nodeName.toLowerCase())){node=node.nextSibling;iterator.setCurrent(node)};if(node.nodeType==3){bits.push(node.nodeValue)}};return bits.join(' ')};KupuSpellChecker.prototype.displayUnrecognized=function(mapping){var doc=this.editor.getInnerDocument();var docel=doc.documentElement;var win=window.open('kupublank.html','spellchecker','width='+this.winwidth+','+'height='+this.winheight+',toolbar=no,'+'menubar=no,scrollbars=yes,status=yes');if(!win){alert(_('This feature requires pop-ups to be enabled on your browser!'));return};var html=docel.innerHTML;html=html.replace(/<meta[^>]*http-equiv="[Cc]ontent-[Tt]ype"[^>]*>/gm,'');win.document.write('<html>'+html+'</html>');win.deentitize=function(str){return str.deentitize()};win.document.close();if(!win.document.getElementsByTagName('body').length){addEventHandler(win,'load',this.continueDisplay,this,win,mapping)} else{this.continueDisplay(win,mapping)}};KupuSpellChecker.prototype.continueDisplay=function(win,mapping){timer_instance.registerFunction(this,this.continueDisplayHelper,1000,win,mapping)};KupuSpellChecker.prototype.continueDisplayHelper=function(win,mapping){var body=win.document.getElementsByTagName('body')[0];body.setAttribute('contentEditable','false');var iterator=new NodeIterator(body);var node=iterator.next();timer_instance.registerFunction(this,this.displayHelperNodeLoop,10,iterator,node,win,mapping)};KupuSpellChecker.prototype.displayHelperNodeLoop=function(iterator,node,win,mapping){if(!node){return};var next=iterator.next();if(node.nodeType==3){if(win.closed){return};var span=win.document.createElement('span');var before=node.nodeValue;var after=this.colourText(before,mapping);if(before!=after){span.innerHTML=after;var last=span.lastChild;var parent=node.parentNode;parent.replaceChild(last,node);while(span.hasChildNodes()){parent.insertBefore(span.firstChild,last)}}} else if(node.nodeType==1&&node.nodeName.toLowerCase()=='a'){var cancelEvent=function(e){if(e.preventDefault){e.preventDefault()} else{e.returnValue=false};return false};addEventHandler(node,'click',cancelEvent);addEventHandler(node,'mousedown',cancelEvent);addEventHandler(node,'mouseup',cancelEvent)};timer_instance.registerFunction(this,this.displayHelperNodeLoop,10,iterator,next,win,mapping)};KupuSpellChecker.prototype.colourText=function(text,mapping){var currtext=text;var newtext='';for(var word in mapping){var replacements=mapping[word];replacements=replacements.entitize();replacements=replacements.replace(/\'/g,"&apos;");var reg=new RegExp('^(.*\\\W)?('+word+')(\\\W.*)?$','mg');while(true){var match=reg.exec(currtext);if(!match){newtext+=currtext;currtext=newtext;newtext='';break};var m=(match[1]||'')+match[2];newtext+=currtext.substr(0,currtext.indexOf(m));newtext+=(match[1]||'')+'<span style="'+this.spanstyle+'" '+'onclick="alert(deentitize(\''+replacements+'\'));" '+'title="'+replacements+'">'+match[2]+'</span>';currtext=currtext.substr(currtext.indexOf(m)+m.length)}};return currtext};KupuSpellChecker.prototype.xmlToMapping=function(docnode){var docel=docnode.documentElement;var result={};var incorrect=docel.getElementsByTagName('incorrect');for(var i=0;i<incorrect.length;i++){var word=incorrect[i].firstChild.firstChild.nodeValue;var replacements='';if(incorrect[i].lastChild.hasChildNodes()){replacements=incorrect[i].lastChild.firstChild.nodeValue};result[word]=replacements};var attrs=[];return result};
function DrawerTool(){this.drawers={};this.current_drawer=null;this.initialize=function(editor){this.editor=editor;this.isIE=this.editor.getBrowserName()=='IE';window.drawertool=this};this.registerDrawer=function(id,drawer,editor){this.drawers[id]=drawer;drawer.initialize(editor||this.editor,this)};this.openDrawer=function(id){if(this.current_drawer){this.closeDrawer()};var drawer=this.drawers[id];if(this.isIE){drawer.editor._saveSelection()}
drawer.createContent();drawer.editor.suspendEditing();this.current_drawer=drawer};this.updateState=function(selNode){};this.closeDrawer=function(button){if(!this.current_drawer){return};this.current_drawer.hide();this.current_drawer.editor.resumeEditing();this.current_drawer=null}};DrawerTool.prototype=new KupuTool;
function Drawer(elementid,tool){this.element=getFromSelector(elementid);this.tool=tool;this.initialize=function(editor,drawertool){this.editor=editor;this.drawertool=drawertool};this.createContent=function(){this.element.style.display='block';this.focusElement()};this.hide=function(){this.element.style.display='none';this.focussed=false};this.focusElement=function(){this.focussed=false;var iterator=new NodeIterator(this.element);var currnode=iterator.next();while(currnode){if(currnode.tagName&&(currnode.tagName.toUpperCase()=='BUTTON'||(currnode.tagName.toUpperCase()=='INPUT'&&!(/nofocus/.test(currnode.className))))){this.focussed=true;
function focusit(){currnode.focus()}
timer_instance.registerFunction(this,focusit,100);return}
currnode=iterator.next()}}};
function LinkDrawer(elementid,tool,wrap){this.element=getFromSelector(elementid);this.tool=tool;
function wrap(id,tag){return '#'+this.element.id+' '+tag+'.'+id}
var input=getBaseTagClass(this.element,'input','kupu-linkdrawer-input');var preview=getBaseTagClass(this.element,'iframe','kupu-linkdrawer-preview');this.createContent=function(){var currnode=this.editor.getSelectedNode();var linkel=this.editor.getNearestParentOfType(currnode,'a');input.value="";this.preview();if(linkel){input.value=linkel.getAttribute('href')} else{input.value='http://'};this.element.style.display='block';this.focusElement()};this.save=function(){this.editor.resumeEditing();var url=input.value;var target='_self';if(this.target) target=this.target;this.tool.createLink(url,null,null,target);input.value='';this.drawertool.closeDrawer()};this.preview=function(){preview.src=input.value;if(this.editor.getBrowserName()=='IE'){preview.width="800";preview.height="365";preview.style.zoom="60%"}}
this.preview_loaded=function(){if(input.value!=preview.src){input.value=preview.src}}};LinkDrawer.prototype=new Drawer;
function TableDrawer(elementid,tool){this.element=getFromSelector(elementid);this.tool=tool;this.addpanel=getBaseTagClass(this.element,'div','kupu-tabledrawer-addtable');this.editpanel=getBaseTagClass(this.element,'div','kupu-tabledrawer-edittable');var editclassselect=getBaseTagClass(this.element,'select','kupu-tabledrawer-editclasschooser');var addclassselect=getBaseTagClass(this.element,'select','kupu-tabledrawer-addclasschooser');var alignselect=getBaseTagClass(this.element,'select','kupu-tabledrawer-alignchooser');var newrowsinput=getBaseTagClass(this.element,'input','kupu-tabledrawer-newrows');var newcolsinput=getBaseTagClass(this.element,'input','kupu-tabledrawer-newcols');var makeheadercheck=getBaseTagClass(this.element,'input','kupu-tabledrawer-makeheader');this.createContent=function(){var editor=this.editor;var selNode=editor.getSelectedNode();
function fixClasses(classselect){if(editor.config.table_classes){var classes=editor.config.table_classes['class'];while(classselect.hasChildNodes()){classselect.removeChild(classselect.firstChild)};for(var i=0;i<classes.length;i++){var classinfo=classes[i];var caption=classinfo.xcaption||classinfo;var classname=classinfo.classname||classinfo;var option=document.createElement('option');var content=document.createTextNode(caption);option.appendChild(content);option.setAttribute('value',classname);classselect.appendChild(option)}}};fixClasses(addclassselect);fixClasses(editclassselect);var table=editor.getNearestParentOfType(selNode,'table');if(!table){show=this.addpanel;hide=this.editpanel} else{show=this.editpanel;hide=this.addpanel;var align=this.tool._getColumnAlign(selNode);selectSelectItem(alignselect,align);selectSelectItem(editclassselect,table.className)};hide.style.display='none';show.style.display='block';this.element.style.display='block';this.focusElement()};this.createTable=function(){this.editor.resumeEditing();var rows=newrowsinput.value;var cols=newcolsinput.value;var style=addclassselect.value;var add_header=makeheadercheck.checked;this.tool.createTable(parseInt(rows),parseInt(cols),add_header,style);this.drawertool.closeDrawer()};this.delTableRow=function(){this.editor.resumeEditing();this.tool.delTableRow();this.editor.suspendEditing()};this.addTableRow=function(){this.editor.resumeEditing();this.tool.addTableRow();this.editor.suspendEditing()};this.delTableColumn=function(){this.editor.resumeEditing();this.tool.delTableColumn();this.editor.suspendEditing()};this.addTableColumn=function(){this.editor.resumeEditing();this.tool.addTableColumn();this.editor.suspendEditing()};this.fixTable=function(){this.editor.resumeEditing();this.tool.fixTable();this.editor.suspendEditing()};this.fixAllTables=function(){this.editor.resumeEditing();this.tool.fixAllTables();this.editor.suspendEditing()};this.setTableClass=function(className){this.editor.resumeEditing();this.tool.setTableClass(className);this.editor.suspendEditing()};this.setColumnAlign=function(align){this.editor.resumeEditing();this.tool.setColumnAlign(align);this.editor.suspendEditing()}};TableDrawer.prototype=new Drawer;
function LibraryDrawer(tool,xsluri,libsuri,searchuri,baseelement){this.init=function(tool,xsluri,libsuri,searchuri,baseelement){this.drawerid='kupu-librarydrawer';this.librariespanelid='kupu-librariespanel';this.resourcespanelid='kupu-resourcespanel';this.propertiespanelid='kupu-propertiespanel';if(baseelement){this.baseelement=getFromSelector(baseelement)} else{this.baseelement=getBaseTagClass(document.body,'div','kupu-librarydrawer-parent')}
this.tool=tool;this.element=document.getElementById(this.drawerid);if(!this.element){var e=document.createElement('div');e.id=this.drawerid;e.className='kupu-drawer '+this.drawerid;this.baseelement.appendChild(e);this.element=e}
this.shared.xsluri=xsluri;this.shared.libsuri=libsuri;this.shared.searchuri=searchuri;this.shared.newimages=null;this.shared.xsl=null;this.shared.xmldata=null};if(tool){this.init(tool,xsluri,libsuri,searchuri)}
this.initialize=function(editor,drawertool){this.editor=editor;this.drawertool=drawertool;this.selecteditemid='';var wrapped_callback=new ContextFixer(this._libsXslCallback,this);this._loadXML(this.shared.xsluri,wrapped_callback.execute)};this._libsXslCallback=function(dom){this.shared.xsl=dom;try{var xsltproc=new XSLTProcessor();this.shared.xsltproc=xsltproc;xsltproc.importStylesheet(dom);xsltproc.setParameter("","drawertype",this.drawertype);xsltproc.setParameter("","drawertitle",this.drawertitle);xsltproc.setParameter("","showupload",this.showupload);if(this.editor.config.captions){xsltproc.setParameter("","usecaptions",'yes')}} catch(e){return}};this.createContent=function(){if(this.element.parentNode!=this.baseelement){this.baseelement.appendChild(this.element)}
if(!this.shared.xmldata){if(!window.XSLTProcessor){alert("This function requires better XML support in your browser.");return}
this.loadLibraries()} else{if(this.shared.newimages){this.reloadCurrent();this.shared.newimages=null};this.updateDisplay();this.initialSelection()};this.element.style.display='block'};this._singleLibsXslCallback=function(dom){this.singlelibxsl=dom};this.loadLibraries=function(){var wrapped_callback=new ContextFixer(this._libsContentCallback,this);this._loadXML(this.shared.libsuri,wrapped_callback.execute)};this._libsContentCallback=function(dom){this.shared.xmldata=dom;this.shared.xmldata.setProperty("SelectionLanguage","XPath");this.updateDisplay(this.drawerid);this.initialSelection()};this.initialSelection=function(){var libnode_path='/libraries/library[@selected]';var libnode=this.shared.xmldata.selectSingleNode(libnode_path);if(libnode){var id=libnode.getAttribute('id');this.selectLibrary(id)}}
this.updateDisplay=function(id){if(!id){id=this.drawerid};try{this.shared.xsltproc.setParameter("","showupload",this.showupload)} catch(e){};var doc=this._transformXml();var sourcenode=doc.selectSingleNode('//*[@id="'+id+'"]');var targetnode=document.getElementById(id);sourcenode=document.importNode(sourcenode,true);Sarissa.copyChildNodes(sourcenode,targetnode);if(!this.focussed){this.focusElement()}
if(this.editor.getBrowserName()=='IE'&&id==this.resourcespanelid){this.updateDisplay(this.drawerid)}};this.deselectActiveCollection=function(){while(1){var selected=this.shared.xmldata.selectSingleNode('//*[@selected]');if(!selected){return};selected.removeAttribute('selected')}};this.selectLibrary=function(id){this.deselectActiveCollection();var divs=this.element.getElementsByTagName('div');for(var i=0;i<divs.length;i++){if(divs[i].className=='kupu-libsource-selected'){divs[i].className='kupu-libsource'}};var libnode_path='/libraries/library[@id="'+id+'"]';var libnode=this.shared.xmldata.selectSingleNode(libnode_path);libnode.setAttribute('selected','1');var items_xpath="items";var items_node=libnode.selectSingleNode(items_xpath);if(items_node&&!this.shared.newimages){this.updateDisplay(this.resourcespanelid);this.updateDisplay(this.propertiespanelid)} else{var src_uri=libnode.selectSingleNode('src/text()').nodeValue;src_uri=src_uri.strip();var wrapped_callback=new ContextFixer(this._libraryContentCallback,this);this._loadXML(src_uri,wrapped_callback.execute,null);this.shared.newimages=null};var newseldiv=document.getElementById(id);newseldiv.className='kupu-libsource-selected'};this._libraryContentCallback=function(dom,src_uri){var libnode=this.shared.xmldata.selectSingleNode('//*[@selected]');var itemsnode=libnode.selectSingleNode("items");var newitemsnode=dom.selectSingleNode("//items");if(this.editor.getBrowserName()=='IE'){newitemsnode=newitemsnode.cloneNode(true)} else{newitemsnode=this.shared.xmldata.importNode(newitemsnode,true)}
if(!itemsnode){libnode.appendChild(newitemsnode)} else{libnode.replaceChild(newitemsnode,itemsnode)};this.updateDisplay(this.resourcespanelid);this.updateDisplay(this.propertiespanelid)};this.selectCollection=function(id){this.deselectActiveCollection();this.removeSelection();var leafnode_path="//collection[@id='" + id + "']";var leafnode=this.shared.xmldata.selectSingleNode(leafnode_path);var loadedInNode=leafnode.getAttribute('loadedInNode');if(loadedInNode){var collnode_path="/libraries/collection[@id='" + loadedInNode + "']";var collnode=this.shared.xmldata.selectSingleNode(collnode_path);if(collnode){collnode.setAttribute('selected','1');this.updateDisplay(this.resourcespanelid);this.updateDisplay(this.propertiespanelid);return}};uri=leafnode.selectSingleNode('uri/text()').nodeValue;uri=(new String(uri)).strip();var collnode_path="/libraries/collection/uri[text()='" + uri + "']/..";var collnode=this.shared.xmldata.selectSingleNode(collnode_path);if(collnode){id=collnode.getAttribute('id');leafnode.setAttribute('loadedInNode',id);collnode.setAttribute('selected','1');this.updateDisplay(this.resourcespanelid);this.updateDisplay(this.propertiespanelid);return};leafnode.setAttribute('selected','1');var src_uri=leafnode.selectSingleNode('src/text()').nodeValue;src_uri=src_uri.strip();var wrapped_callback=new ContextFixer(this._collectionContentCallback,this);this._loadXML(src_uri,wrapped_callback.execute,null)};this._collectionContentCallback=function(dom,src_uri){date=new Date();time=date.getTime();var leafnode=this.shared.xmldata.selectSingleNode('//*[@selected]');leafnode.setAttribute('loadedInNode',time);this.deselectActiveCollection()
var collnode=dom.selectSingleNode('/collection');collnode.setAttribute('id',time);collnode.setAttribute('selected','1');var libraries=this.shared.xmldata.selectSingleNode('/libraries');if(this.editor.getBrowserName()=='IE'){collnode=collnode.cloneNode(true)} else{collnode=this.shared.xmldata.importNode(collnode,true)}
libraries.appendChild(collnode);this.updateDisplay(this.resourcespanelid);this.updateDisplay(this.propertiespanelid)};this.reloadCurrent=function(){this.showupload='';var current=this.shared.xmldata.selectSingleNode('//*[@selected]');if(current.tagName=="resource"){current.removeAttribute("selected");current=current.parentNode;current.setAttribute("selected","1")};var src_node=current.selectSingleNode('src');if(!src_node){return};var src_uri=src_node.selectSingleNode('text()').nodeValue;src_uri=src_uri.strip();var wrapped_callback=new ContextFixer(this._libraryContentCallback,this);this._loadXML(src_uri,wrapped_callback.execute)};this.removeSelection=function(){var oldselxpath='/libraries/*[@selected]//resource[@selected]';var oldselitem=this.shared.xmldata.selectSingleNode(oldselxpath);if(oldselitem){oldselitem.removeAttribute("selected")};if(this.selecteditemid){var item=document.getElementById(this.selecteditemid);if(item){var span=item.getElementsByTagName('span');if(span.length>0){span=span[0];span.className=span.className.replace(' selected-item','')}}
this.selecteditemid=''}
this.showupload=''}
this.selectUpload=function(){this.removeSelection();this.showupload='yes';this.updateDisplay(this.resourcespanelid);this.updateDisplay(this.propertiespanelid)}
this.selectItem=function(item,id){this.removeSelection();var newselxpath='/libraries/*[@selected]//resource[@id="'+id+'"]';var newselitem=this.shared.xmldata.selectSingleNode(newselxpath);newselitem.setAttribute("selected","1");this.updateDisplay(this.propertiespanelid);var span=item.getElementsByTagName('span');if(span.length>0){span=span[0];span.className+=' selected-item'}
this.selecteditemid=id;if(this.editor.getBrowserName()=='IE'){var ppanel=document.getElementById(this.propertiespanelid)
var height=ppanel.clientHeight;if(height>ppanel.scrollHeight) height=ppanel.scrollHeight;if(height<260) height=260;document.getElementById(this.resourcespanelid).style.height=height+'px'}
return}
this.search=function(){var searchvalue=getFromSelector('kupu-searchbox-input').value;var body='SearchableText='+escape(searchvalue);var chunks=this.shared.searchuri.split('?');var searchuri=chunks[0];if(chunks[1]){body+="&"+chunks[1]};var wrapped_callback=new ContextFixer(this._searchCallback,this);this._loadXML(searchuri,wrapped_callback.execute,body)};this._searchCallback=function(dom){var resultlib=dom.selectSingleNode("/library");var items=resultlib.selectNodes("items/*");if(!items.length){alert("No results found.");return};date=new Date();time=date.getTime();resultlib.setAttribute("id",time);this.deselectActiveCollection();resultlib.setAttribute("selected","1");if(this.editor.getBrowserName()=='IE'){resultlib=resultlib.cloneNode(true)} else{this.shared.xmldata.importNode(resultlib,true)}
var libraries=this.shared.xmldata.selectSingleNode("/libraries");libraries.appendChild(resultlib);this.updateDisplay(this.drawerid);var newseldiv=getFromSelector(time);newseldiv.className='selected'};this.save=function(){throw "Not yet implemented"};this._transformXml=function(){var doc=Sarissa.getDomDocument();var result=this.shared.xsltproc.transformToDocument(this.shared.xmldata);return result};this._loadXML=function(uri,callback,body){var xmlhttp=new XMLHttpRequest();var method='GET';if(body){method='POST'} else{body=null};xmlhttp.open(method,uri,true);var wrapped_callback=new ContextFixer(this._sarissaCallback,xmlhttp,callback,uri);xmlhttp.onreadystatechange=wrapped_callback.execute;if(method=="POST"){xmlhttp.setRequestHeader('content-type','application/x-www-form-urlencoded')};xmlhttp.send(body)};this._sarissaCallback=function(user_callback,uri){var errmessage='Error loading XML: ';if(uri){errmessage='Error loading '+uri+':'};if(this.readyState==4){if(this.status&&this.status!=200){alert(errmessage+this.status);throw "Error loading XML"};var dom=this.responseXML;user_callback(dom,uri)}}};LibraryDrawer.prototype=new Drawer;LibraryDrawer.prototype.shared={};
function ImageLibraryDrawer(tool,xsluri,libsuri,searchuri,baseelement){this.drawertitle="Insert Image";this.drawertype="image";this.showupload='';if(tool){this.init(tool,xsluri,libsuri,searchuri,baseelement)}
this.uploadImage=function(){var form=document.kupu_upload_form;if(!form||form.node_prop_image.value=='') return;if(form.node_prop_caption.value==""){alert("Please enter a title for the image you are uploading");return};var targeturi=this.shared.xmldata.selectSingleNode('/libraries/*[@selected]/uri/text()').nodeValue
document.kupu_upload_form.action=targeturi+"/kupuUploadImage";document.kupu_upload_form.submit()};this.cancelUpload=function(msg){var s=this.shared.xmldata.selectSingleNode('/libraries/*[@selected]');s.removeAttribute("selected");this.updateDisplay();if(msg!=''){alert(msg)}};this.finishUpload=function(url){this.editor.resumeEditing();var imgclass='image-inline';if(this.editor.config.captions){imgclass+=" captioned"};this.tool.createImage(url,null,imgclass);this.shared.newimages=1;this.drawertool.closeDrawer()};this.save=function(){this.editor.resumeEditing();var selxpath='//resource[@selected]';var selnode=this.shared.xmldata.selectSingleNode(selxpath);if(!selnode){var uploadbutton=this.shared.xmldata.selectSingleNode("/libraries/*[@selected]//uploadbutton");if(uploadbutton){this.uploadImage()};return};var uri=selnode.selectSingleNode('uri/text()').nodeValue;uri=uri.strip();var alt=getFromSelector('image_alt').value;var radios=document.getElementsByName('image-align');for(var i=0;i<radios.length;i++){if(radios[i].checked){var imgclass=radios[i].value}};var caption=document.getElementsByName('image-caption');if(caption&&caption.length>0&&caption[0].checked){imgclass+=" captioned"};this.tool.createImage(uri,alt,imgclass);this.drawertool.closeDrawer()}};ImageLibraryDrawer.prototype=new LibraryDrawer;ImageLibraryDrawer.prototype.shared={};
function LinkLibraryDrawer(tool,xsluri,libsuri,searchuri,baseelement){this.drawertitle="Insert Link";this.drawertype="link";this.showupload='';if(tool){this.init(tool,xsluri,libsuri,searchuri,baseelement)}
this.save=function(){this.editor.resumeEditing();var selxpath='//resource[@selected]';var selnode=this.shared.xmldata.selectSingleNode(selxpath);if(!selnode){return};var uri=selnode.selectSingleNode('uri/text()').nodeValue;uri=uri.strip();var title='';title=selnode.selectSingleNode('title/text()').nodeValue;title=title.strip();var type=null;var name=getFromSelector('link_name').value;var target=null;if(getFromSelector('link_target')&&getFromSelector('link_target').value!='')
target=getFromSelector('link_target').value;this.tool.createLink(uri,type,name,target,title);this.drawertool.closeDrawer()}};LinkLibraryDrawer.prototype=new LibraryDrawer;LinkLibraryDrawer.prototype.shared={};
function HandleDrawerEnter(event,clickid){var key;event=event||window.event;key=event.which||event.keyCode;if(key==13){if(clickid){var button=document.getElementById(clickid);if(button){button.click()}}
event.cancelBubble=true;if(event.stopPropogation) event.stopPropogation();return false}
return true}
kupu=startKupu()});kukit.commandsGlobalRegistry.registerFromAction('ksstutorial-demoplugin',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("ksswidth", function(oper){oper.completeParms(['text'],{},'ksswidth action');
function wh(){if(window.innerHeight){return(window.innerHeight-150)}
else if(document.body&&document.body.offsetHeight){return document.body.offsetHeight-200} else{return 200}}
a=document.body.clientWidth;b=wh();document.getElementById('windowWidth').value=a;document.getElementById('windowHeight').value=b});kukit.commandsGlobalRegistry.registerFromAction('ksswidth',kukit.cr.makeSelectorCommand);kukit.Xjsload=new function(){var _absoluteUrl=this.absoluteUrl=function(url){if(url.match(RegExp("/^https?:\/\//"))){return url}
var absoluteMatch=url.match(RegExp(/^(\/)(.*)/));var path=kukit.engine.baseUrl;if(absoluteMatch){var base=path.match(RegExp(/^(.*:\/\/[^\/]*)(\/?)/))[1];url=base+url;return url}
if(!path.match(RegExp("/\/$/"))){path+='/'}
url=path+url;return url};var _Loader=this.Loader=function(src,continuationHandler,extra_info,auto_eval){if(typeof(auto_eval)=='undefined'){auto_eval=true}
this.src=_absoluteUrl(src);this.continuationHandler=continuationHandler;this.extra_info=extra_info;this.auto_eval=auto_eval
this.timeout=8000;this._startNotify=function(queueItem){var request=new XMLHttpRequest();var self=this;var notifyDone=function(){self._notifyDone(request,queueItem)}
request.open("GET",this.src,true);request.onreadystatechange=notifyDone;request.send(null)};this._notifyDone=function(request,queueItem){if(request.readyState==4){var success=queueItem.receivedResult();if(success){this.code=request.responseText
if(this.auto_eval){this.evaluateCode()}
if(this.continuationHandler){this.continuationHandler()}}}};this._processError=function(queueItem){};this.load=function(){var self=this;var startNotify=function(queueItem){self._startNotify(queueItem)};var processError=function(queueItem){self._processError(queueItem)};kukit.engine.requestManager.notifyServer(startNotify,this.src,processError,this.timeout)};this.evaluateCode=function(){window.eval(this.code)}};this.GroupLoader=function(continuationHandler,extra_info){this.continuationHandler=continuationHandler;this.extra_info=extra_info;this.loaders=[];this.sources={};this.add=function(src){if(typeof(this.sources[src])!='undefined'){return}
var self=this;var continuation=this._groupContinuations.makeContinuation(src);var loader=new _Loader(src,continuation,this.extra_info,false);this.loaders.push(loader);this.sources[src]=true};this.empty=function(){return(this.loaders.length==0)};this.getSources=function(){result=[]
for(var i=0;i<this.loaders.length;i++){result.push(this.loaders[i].src)}
return result};this.load=function(){for(var i=0;i<this.loaders.length;i++){this.loaders[i].load()}};this._loadFinish=function(){var nrLoaders=this.loaders.length;for(var i=0;i<nrLoaders;i++){this.loaders[i].evaluateCode()}
if(this.continuationHandler){this.continuationHandler()}};var _GroupContinuations=function(groupContinuationHandler){var waitingNr=0;var _handleContinue=function(src){waitingNr-=1;if(waitingNr==0){groupContinuationHandler()}}
this.makeContinuation=function(src){waitingNr+=1;var self=this;var f=function(){return _handleContinue(src)};return f}};var self=this;var loadfinish=function(){self._loadFinish()};this._groupContinuations=new _GroupContinuations(loadfinish)}}();new function(){var sources=["/static/kupuNeededLibs.js"];var do_activate=function(oper){var parms=oper.parms;if(!jsMath.Click){jsMath.Click={}}
jsMath.Click.CheckDblClick=function(){};jsMath.Controls.cookie.scale=parms.scale;jsMath.Setup.Styles();jsMath.Message.Set=function(){};jsMath.Font.HideMessage();jsMath.tex2math.Convert(oper.node,{processSingleDollars:parms.processSingleDollars,processDoubleDollars:parms.processDoubleDollars,processSlashParens:parms.processSlashParens,processSlashBrackets:parms.processSlashBrackets,processLaTeXenvironments:parms.processLaTeXenvironments,custom:parms.custom,fixEscapedDollars:parms.fixEscapedDollars});jsMath.Process(oper.node);document.getElementById('jsMath_button').style.display='none'};var _friendlyLog=function(message){};var activate=function(oper){oper.evaluateParameters([],{scale:'120',processSingleDollars:'',processDoubleDollars:'',processSlashParens:'true',processSlashBrackets:'true',processLaTeXenvironments:'true',custom:'',fixEscapedDollars:''});oper.evalInt('scale');oper.evalBool('processSingleDollars');oper.evalBool('processDoubleDollars');oper.evalBool('processSlashParens');oper.evalBool('processSlashBrackets');oper.evalBool('processLaTeXenvironments');oper.evalBool('custom');oper.evalBool('fixEscapedDollars');var is_loaded=(typeof(window.jsMath)!='undefined');if(is_loaded){do_activate(oper)} else{var baseurl=kukit.Xjsload.absoluteUrl('/static/');window.jsMath={Autoload:{root:baseurl},Font:{Message:_friendlyLog,PrintMessage:_friendlyLog}};var f=function(){do_activate(oper)};var loader=new kukit.Xjsload.GroupLoader(f);for(var i=0;i<sources.length;i++){loader.add(sources[i])}
loader.load()}};kukit.actionsGlobalRegistry.register('kupuLoadJs',activate);kukit.commandsGlobalRegistry.registerFromAction('kupuLoadJs',kukit.cr.makeGlobalCommand)}();kukit.actionsGlobalRegistry.register("gmapLoad", function(oper){oper.completeParms(['text'],{},'gmapLoad action');oper.completeParms(['laenge'],{},'gmapLoad action');oper.completeParms(['breite'],{},'gmapLoad action');var text=oper.parms.text;var laenge=oper.parms.laenge;var breite=oper.parms.breite;var map=null;var geocoder=null;if(text!='0'){
function gmapLoad(){if(GBrowserIsCompatible()){map=new GMap2(document.getElementById("map"));map.addControl(new GSmallMapControl());map.addControl(new GMapTypeControl());geocoder=new GClientGeocoder();var point=new GLatLng(laenge,breite);var marker=new GMarker(point);map.addOverlay(marker);map.setCenter(new GLatLng(laenge,breite),17);GEvent.addListener(marker,"click", function(){marker.openInfoWindowHtml(text)});marker.openInfoWindowHtml(text)}}}
gmapLoad();window.resizeBy(-1,-1)});kukit.commandsGlobalRegistry.registerFromAction('gmapLoad',kukit.cr.makeSelectorCommand);
