
/* - ++resource++onlinecirius.theme.js/patch_kukit_serveraction.js - */
// http://www.iu.dk/portal_javascripts/++resource++onlinecirius.theme.js/patch_kukit_serveraction.js?original=1
kukit.sa=new function(){var sa=this;sa.ServerAction=function(){this.initialize=function(name,oper){this.oper=oper;this.url=oper.kssParms.kssUrl;if(typeof(this.url)=='undefined'){this.url=name}
this.calculateAbsoluteURL=function(url){if(url.match(RegExp('/^https?:\/\//'))){return url} else{var result=kukit.engine.baseUrl+'/'+url;return result}};this.url=this.calculateAbsoluteURL(this.url);this.notifyServer()};this.calculateAbsoluteURL=function(url){if(url.match(RegExp('/^https?:\/\//'))){return url} else{var result=kukit.engine.baseUrl+url;return result}};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){;var msg='Request readyState = '+domDoc.readyState+'.';kukit.logDebug(msg);if(domDoc.readyState==4){var success=this.oper.queueItem.receivedResult();if(success){try{this.processResult(domDoc)} catch(e){;if(e.name=='RuleMergeError'||e.name=='EventBindError'){;throw kukit.err.eventSetupError(e)}
if(e.name=='ResponseParsingError'){;kukit.E='Response parsing error: '+e;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){;kukit.E='Error parsing X-KSSCOMMANDS header.';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){;kukit.E='Error parsing X-KSSCOMMANDS header.';throw kukit.err.responseParsingError(kukit.E)}
commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}} else if(commandstags.length==0){dom=function(text){var doc;if(window.ActiveXObject){doc=new ActiveXObject("Microsoft.XMLDOM");doc.async=false;doc.loadXML(text)} else{doc=(new DOMParser()).parseFromString(text,"application/xml")}
return doc}(domDoc.responseText);commandstags=kukit.dom.getNsTags(dom,'commands')} else{;dom=domDoc.responseXML;kukit.E='Unknown server error (invalid KSS response, no error';kukit.E+=' info received)';if(dom&&dom.parseError&&(dom.parseError!=0)){;kukit.E+=' : '+Sarissa.getParseErrorText(dom)}
throw kukit.err.responseParsingError(kukit.E)}}
if(dom==null){;kukit.E='Neither xml nor html payload.';throw kukit.err.responseParsingError(msg)}
var commands=kukit.dom.getNsTags(dom,'command');if(commands.length==0){;kukit.log('No commands in kukit response');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)}
;var reason='';if(typeof(errorcommand)=='string'){;reason=', client_reason="'+errorcommand+'" '} else if(typeof(errorcommand)!='undefined'){;reason=', server_reason="'+errorcommand.parms.message+'" '}
if(error_action){;kukit.E='Request failed at url '+this.oper.queueItem.url;kukit.E+=', rid='+this.oper.queueItem.rid+reason;kukit.E+=', will be handled by action "'+error_action.name+'"';kukit.logWarning(kukit.E);error_action.execute(this.oper)} else{;dom=domDoc.responseXML;kukit.E='Unknown server error (invalid KSS response, no error';kukit.E+=' info received)';if(dom&&dom.parseError&&(dom.parseError!=0)){;kukit.E+=' : '+Sarissa.getParseErrorText(dom)}
throw kukit.err.responseParsingError(kukit.E)}}
if(dom==null){;kukit.E='Neither xml nor html payload.';throw kukit.err.responseParsingError(msg)}
var commands=kukit.dom.getNsTags(dom,'command');if(commands.length==0){;kukit.log('No commands in kukit response');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)}
;var reason='';if(typeof(errorcommand)=='string'){;reason=', client_reason="'+errorcommand+'" '} else if(typeof(errorcommand)!='undefined'){;reason=', server_reason="'+errorcommand.parms.message+'" '}
if(error_action){;kukit.E='Request failed at url '+this.oper.queueItem.url;kukit.E+=', rid='+this.oper.queueItem.rid+reason;kukit.E+=', will be handled by action "'+error_action.name+'"';kukit.logWarning(kukit.E);error_action.execute(this.oper)} else{;kukit.E='Request failed at url '+this.oper.queueItem.url;kukit.E+=', rid='+this.oper.queueItem.rid+reason;kukit.logError(kukit.E);return}};this.initialize.apply(this,arguments)}}();

