
function S2Chat(oStartSessionParams)
{if(!oStartSessionParams)oStartSessionParams={};this.partnerJabber=oStartSessionParams['partnerJabber']?oStartSessionParams['partnerJabber']:gPartnerUser.jabberFullUserName;this.partnerName=oStartSessionParams['partnerName']?oStartSessionParams['partnerName']:gPartnerUser.displayUserName;this.workflowId=oStartSessionParams['workflowId']?oStartSessionParams['workflowId']:g_workflowId;this.sessionId=oStartSessionParams['sessionId']?oStartSessionParams['sessionId']:g_support_sessionId;this.messageStack=[];this.focusChat=true;this.typingNotificationTypeFlags={PHONE_NOTIFICATION:false,CHAT_NOTIFICATION:false,SUPPORTER_DISCONNECTED:false,CONSULTING_NOTIFICATION:false,SUPPORTER_CONNECTED:false}
this.widgetId=oStartSessionParams['widgetId'];this.flowMessages={};this.firstMessage=true;if(gCurrentUser.whoAmI==CUSTOMER){this.noMsgTimer=new S2Timer(gNoMsgTime,false,saveSessionEvent,{user:gCurrentUser,event:{action:SE_XMIN_NOMSG,description:"Customer:No chat messages sent during "+gNoMsgTime+" seconds"},sessionIdList:[this.sessionId],workflowId:this.workflowId});}
else if(gCurrentUser.whoAmI==SUPPORTER)
this.noMsgTimer=new S2Timer(gNoMsgTime,false,saveSessionEvent,{user:gCurrentUser,event:{action:SE_XMIN_NOMSG,description:"Expert:No chat messages sent during "+gNoMsgTime+" seconds"},sessionIdList:[this.sessionId],workflowId:this.workflowId});if(this.noMsgTimer)
this.noMsgTimer.start();}
S2Chat.prototype=new Object;S2Chat.prototype.onChatLoaded=function()
{this.observeElements();this.displayMessageStack();this.startClearTyping();setTimeout(this.focus.bind(this),3000);}
S2Chat.prototype.observeElements=function()
{var input=this.getInput();if(input){if(gCurrentUser.whoAmI==CUSTOMER){Event.observe(input,'click',clearFieldOnlyOneTime);setMyAttribute(input,'cleared',false);}
else{setMyAttribute(input,'cleared',true);}
Event.observe(input,'keypress',this.onInputKeyPress.bindAsEventListener(this));}
var sendButton=this.getSendButton();if(sendButton){Event.observe(sendButton,'click',this.onSendClicked.bindAsEventListener(this))}
var output=this.getOutput();if(output){Event.observe(output,'mouseenter',this.onOuptutEnter.bindAsEventListener(this))
Event.observe(output,'mouseleave',this.onOuptutLeave.bindAsEventListener(this))}
Event.observe($(this.widgetId),'resize',this.focus.bind(this));}
S2Chat.prototype.displayMessageStack=function()
{for(var i=0;i<this.messageStack.length;i++)
{var oMessage=this.messageStack.pop();this.updateChatZoneWithMessage(oMessage,false,false);}}
S2Chat.prototype.onSendClicked=function(){this.sendChatMsg();}
S2Chat.prototype.onInputKeyPress=function(evt){var d=new Date();if(!this.lastMessageSentDate||d.getTime()-this.lastMessageSentDate.getTime()>10000){this.sendTypingNotification();}
clearFieldOnlyOneTime(evt);if(!evt.shiftKey||evt.keyCode!=13)
{switch(evt.keyCode)
{case 13:this.sendChatMsg();Event.stop(evt);break;}}}
S2Chat.prototype.sendChatMsg=function()
{var input=this.getInput();if(!input)return false;var body=input.value;if(isUndefined(body)||body==''||!input.cleared)
return false;if(this.firstMessage)
{if(gCurrentUser.whoAmI==CUSTOMER){saveSessionEvent({user:gCurrentUser,event:{action:SE_FIRST_MSG,description:"Customer: First chat message sent"},sessionIdList:[this.sessionId],workflowId:this.workflowId});}
else if(gCurrentUser.whoAmI==SUPPORTER){saveSessionEvent({user:gCurrentUser,event:{action:SE_FIRST_MSG,description:"Supporter: First chat message sent"},sessionIdList:[this.sessionId],workflowId:this.workflowId});}}
this.firstMessage=false;gJabberConnection.sendMsg(gJabberConnection.addJabberDomainSuffix(this.partnerJabber),gJabberConnection.feature.chat,new ChatMessage().encode(this.sessionId,body),this.workflowId);var oMessage={from:gCurrentUser.jabberUserName,name:gCurrentUser.displayUserName,body:body};this.updateChatZoneWithMessage(oMessage,true,false);input.value='';if(this.noMsgTimer){this.noMsgTimer.restart();}
this.focus();this.lastMessageSentDate=null;return false;}
S2Chat.prototype.sendTypingNotification=function()
{gJabberConnection.sendMsg(gJabberConnection.addJabberDomainSuffix(this.partnerJabber),g_IS_TYPING,'',this.workflowId);this.lastMessageSentDate=new Date();}
S2Chat.prototype.setTypingText=function(text)
{var typingArea=this.getTypingArea();if(!typingArea)
return;text=text?text:'';if(typingArea.tagName=="INPUT"){typingArea.value=text;}else{typingArea.innerHTML=text;}
this.lastIsTypingDate=new Date();}
S2Chat.prototype.stopClearTyping=function()
{this.clearTypingPE.stop();}
S2Chat.prototype.startClearTyping=function()
{if(this.clearTypingPE&&this.clearTypingPE.timer){return;}
this.clearTypingPE=new PeriodicalExecuter(function(){var d=new Date();if(!this.lastIsTypingDate||d.getTime()-this.lastIsTypingDate.getTime()>15000){this.displayTypingNotification(CHAT_NOTIFICATION,false);}}.bind(this),10);}
S2Chat.prototype.displayTypingNotification=function(flagKey,flagValue,textNotification){this.setTypingNotificationFlag(flagKey,flagValue)
var text='';var partnerType=gCurrentUser.whoAmI==CUSTOMER?gCommonStrings.supporter:gCommonStrings.customer;for(var flag in this.typingNotificationTypeFlags){if(this.typingNotificationTypeFlags[flag])
{text=gSessionStrings[flag]?gSessionStrings[flag].replace(/###PARTNERNAME###/g,partnerType):textNotification;break;}}
this.setTypingText(text);}
S2Chat.prototype.setTypingNotificationFlag=function(flagKey,flagValue){this.typingNotificationTypeFlags[flagKey]=flagValue;}
S2Chat.prototype.updateChatZoneWithMessage=function(oMessage,encode,stepNum,whereToInsert)
{var output=this.getOutput();if(!output)
{this.messageStack.push(oMessage);return;}
var msgClass='';var msgFrom=oMessage.from;var msgName=oMessage.name;var sep=':';var fromDiv=stepNum?'':'<div class="dCSChatMsg_1">'+msgName+' ['+this.displayHour()+'] '+sep+'</div>';switch(msgFrom)
{case gJabberConnection.supportSpaceUsername:msgClass='dMsgS2';fromDiv='';break;case PERMISSION_REQUEST:msgClass='dMsgRequest';fromDiv='<div class="dCSChatMsg_1">'+'['+this.displayHour()+']'+sep+'</div>';break;case gCurrentUser.jabberUserName:switch(gCurrentUser.whoAmI)
{case CUSTOMER:msgClass='dMsgDefault customer';break;case SUPPORTER:msgClass='dMsgDefault supporter';break;case CONSULTANT:msgClass='dMsgDefault consultant';break;}
break;case this.partnerJabber:this.disableChat(false);switch(gCurrentUser.whoAmI)
{case CUSTOMER:showOverlayServicePage();msgClass='dMsgDefault supporter';break;case SUPPORTER:msgClass='dMsgDefault customer';break;case CONSULTANT:msgClass='dMsgDefault supporter';break;}
break;default:this.disableChat(false);msgClass='dMsgDefault consultant';}
var msg=encode?htmlEnc(oMessage.body):oMessage.body;msg=msg.replace(/###SUPPORTERNAME###/g,this.partnerName).replace(/###CUSTOMERNAME###/g,this.partnerName).replace(/###PARTNERNAME###/g,this.partnerName);msg=parseLinksInMessage(msg);var msgHTML='<div class="dCSChatMsg '+msgClass+'">'+fromDiv+'<div class="dCSChatMsg_2">'+msg+'</div></div>';var isWindowNotFocused=window.screenTop<0;if(window.focus&&isWindowNotFocused){var activeElt=document.activeElement;window.focus();if(this.focusChat){activeElt.focus();}}
if(whereToInsert==0)
output.insert({top:msgHTML});else
output.insert(msgHTML);this.scrollDown();this.displayTypingNotification(CHAT_NOTIFICATION,false);}
S2Chat.prototype.insert=function(html){var output=this.getOutput();output.insert({top:html});}
S2Chat.prototype.scrollDown=function(){var output=this.getOutput();scrollDown(output);}
S2Chat.prototype.focus=function()
{var input=this.getInput();var focusTimer=setInterval(function(){var focused=false;try{input.focus();focused=true;}catch(e){}
if(focused){clearInterval(focusTimer);}}.bind(this),20);}
S2Chat.prototype.disableChat=function(bool,bLayout)
{var input=this.getInput();if(input.disabled==bool){return;}
var layout=this.getLayout();var sendButton=this.getSendButton();if(bool){if(bLayout)
new Effect.Opacity(layout,{duration:0.7,from:1.0,to:0.6});this.stopClearTyping();}
else{if(bLayout)
new Effect.Opacity(layout,{duration:0.5,from:0.6,to:1.0});this.startClearTyping();}
input.disabled=bool;sendButton.disabled=bool;}
S2Chat.prototype.displayHour=function(){var curDateTime=new Date();var curHour=curDateTime.getHours();var curMin=curDateTime.getMinutes();var curAMPM=" AM";var curTime="";if(curHour>=12){curHour-=12;curAMPM=" PM";}
if(curHour==0){curHour=12;}
curTime=((curHour<10)?"0":"")+curHour+":"+((curMin<10)?"0":"")+curMin+curAMPM;return curTime;}
S2Chat.prototype.onOuptutEnter=function(){this.setOnOutput(true);}
S2Chat.prototype.onOuptutLeave=function(){this.setOnOutput(false);}
S2Chat.prototype.getInput=function(){if(!this.input){this.input=this.getLayout()?this.getLayout().down(".chatInput"):null}
return this.input;}
S2Chat.prototype.getOutput=function(){if(!this.output){this.output=this.getLayout()?this.getLayout().down(".chatOutput"):null;}
return this.output;}
S2Chat.prototype.getSendButton=function(){if(!this.sendButton){this.sendButton=this.getLayout()?this.getLayout().down(".sendMessageButton"):null;}
return this.sendButton;}
S2Chat.prototype.getTypingArea=function(){if(!this.typingArea){this.typingArea=this.getLayout()?this.getLayout().down(".chatNotification"):null;}
return this.typingArea;}
S2Chat.prototype.getLayout=function(){if(!this.layout){this.layout=$(this.widgetId)?$(this.widgetId).down(".chatLayout"):null;}
return this.layout;}
S2Chat.prototype.setWidgetId=function(widgetId){$(this.widgetId).id=widgetId;}
S2Chat.prototype.setPartner=function(oPartner){this.partnerJabber=oPartner['partnerJabber'];this.partnerName=oPartner['partnerName'];}
S2Chat.prototype.setWorkflowId=function(workflowId){this.workflowId=workflowId;}
S2Chat.prototype.setSessionId=function(sessionId){this.sessionId=sessionId;}
S2Chat.prototype.setOnOutput=function(bool){this.isOnOutput=bool;}
S2Chat.prototype.setFocusChat=function(bool){this.focusChat=bool;}
var gChats={};function initChat(oChat){gChats[oChat.widgetId]=new S2Chat(oChat);}
var JSJAC_HAVEKEYS=true;var JSJAC_NKEYS=16;var JSJAC_INACTIVITY=300;var JSJAC_ERR_COUNT=10;var JSJAC_ALLOW_PLAIN=true;var JSJAC_CHECKQUEUEINTERVAL=1;var JSJAC_CHECKINQUEUEINTERVAL=1;var JSJACHBC_BOSH_VERSION="1.6";var JSJACHBC_USE_BOSH_VER=true;var JSJACHBC_MAX_HOLD=1;var JSJACHBC_MAX_WAIT=300;var JSJACHBC_MAXPAUSE=120;String.prototype.htmlEnc=function(){var str=this.replace(/&/g,"&amp;");str=str.replace(/</g,"&lt;");str=str.replace(/>/g,"&gt;");str=str.replace(/\"/g,"&quot;");str=str.replace(/\n/g,"<br />");return str;};Date.jab2date=function(ts){var date=new Date(Date.UTC(ts.substr(0,4),ts.substr(5,2)-1,ts.substr(8,2),ts.substr(11,2),ts.substr(14,2),ts.substr(17,2)));if(ts.substr(ts.length-6,1)!='Z'){var offset=new Date();offset.setTime(0);offset.setUTCHours(ts.substr(ts.length-5,2));offset.setUTCMinutes(ts.substr(ts.length-2,2));if(ts.substr(ts.length-6,1)=='+')
date.setTime(date.getTime()-offset.getTime());else if(ts.substr(ts.length-6,1)=='-')
date.setTime(date.getTime()+offset.getTime());}
return date;};Date.hrTime=function(ts){return Date.jab2date(ts).toLocaleString();};Date.prototype.jabberDate=function(){var padZero=function(i){if(i<10)return"0"+i;return i;};var jDate=this.getUTCFullYear()+"-";jDate+=padZero(this.getUTCMonth()+1)+"-";jDate+=padZero(this.getUTCDate())+"T";jDate+=padZero(this.getUTCHours())+":";jDate+=padZero(this.getUTCMinutes())+":";jDate+=padZero(this.getUTCSeconds())+"Z";return jDate;};Number.max=function(A,B){return(A>B)?A:B;};var hexcase=0;var b64pad="=";var chrsz=8;function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length*chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length*chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length*chrsz));}
function hex_hmac_sha1(key,data){return binb2hex(core_hmac_sha1(key,data));}
function b64_hmac_sha1(key,data){return binb2b64(core_hmac_sha1(key,data));}
function str_hmac_sha1(key,data){return binb2str(core_hmac_sha1(key,data));}
function sha1_vm_test()
{return hex_sha1("abc")=="a9993e364706816aba3e25717850c26c9cd0d89d";}
function core_sha1(x,len)
{x[len>>5]|=0x80<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i<x.length;i+=16)
{var olda=a;var oldb=b;var oldc=c;var oldd=d;var olde=e;for(var j=0;j<80;j++)
{if(j<16)w[j]=x[i+j];else w[j]=rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);var t=safe_add(safe_add(rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j)));e=d;d=c;c=rol(b,30);b=a;a=t;}
a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);e=safe_add(e,olde);}
return Array(a,b,c,d,e);}
function sha1_ft(t,b,c,d)
{if(t<20)return(b&c)|((~b)&d);if(t<40)return b^c^d;if(t<60)return(b&c)|(b&d)|(c&d);return b^c^d;}
function sha1_kt(t)
{return(t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;}
function core_hmac_sha1(key,data)
{var bkey=str2binb(key);if(bkey.length>16)bkey=core_sha1(bkey,key.length*chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
var hash=core_sha1(ipad.concat(str2binb(data)),512+data.length*chrsz);return core_sha1(opad.concat(hash),512+160);}
function rol(num,cnt)
{return(num<<cnt)|(num>>>(32-cnt));}
function str2binb(str)
{var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)
bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(32-chrsz-i%32);return bin;}
function binb2str(bin)
{var str="";var mask=(1<<chrsz)-1;for(var i=0;i<bin.length*32;i+=chrsz)
str+=String.fromCharCode((bin[i>>5]>>>(32-chrsz-i%32))&mask);return str;}
function binb2hex(binarray)
{var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++)
{str+=hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8+4))&0xF)+
hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8))&0xF);}
return str;}
function binb2b64(binarray)
{var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i<binarray.length*4;i+=3)
{var triplet=(((binarray[i>>2]>>8*(3-i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*(3-(i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*(3-(i+2)%4))&0xFF);for(var j=0;j<4;j++)
{if(i*8+j*6>binarray.length*32)str+=b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}
return str;}
function hex_md5(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz));}
function b64_md5(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz));}
function str_md5(s){return binl2str(core_md5(str2binl(s),s.length*chrsz));}
function hex_hmac_md5(key,data){return binl2hex(core_hmac_md5(key,data));}
function b64_hmac_md5(key,data){return binl2b64(core_hmac_md5(key,data));}
function str_hmac_md5(key,data){return binl2str(core_hmac_md5(key,data));}
function md5_vm_test()
{return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72";}
function core_md5(x,len)
{x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16)
{var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);}
return Array(a,b,c,d);}
function md5_cmn(q,a,b,x,s,t)
{return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);}
function md5_ff(a,b,c,d,x,s,t)
{return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);}
function md5_gg(a,b,c,d,x,s,t)
{return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);}
function md5_hh(a,b,c,d,x,s,t)
{return md5_cmn(b^c^d,a,b,x,s,t);}
function md5_ii(a,b,c,d,x,s,t)
{return md5_cmn(c^(b|(~d)),a,b,x,s,t);}
function core_hmac_md5(key,data)
{var bkey=str2binl(key);if(bkey.length>16)bkey=core_md5(bkey,key.length*chrsz);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++)
{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}
var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128);}
function safe_add(x,y)
{var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);}
function bit_rol(num,cnt)
{return(num<<cnt)|(num>>>(32-cnt));}
function str2binl(str)
{var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)
bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);return bin;}
function binl2str(bin)
{var str="";var mask=(1<<chrsz)-1;for(var i=0;i<bin.length*32;i+=chrsz)
str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask);return str;}
function binl2hex(binarray)
{var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++)
{str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&0xF)+
hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);}
return str;}
function binl2b64(binarray)
{var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";for(var i=0;i<binarray.length*4;i+=3)
{var triplet=(((binarray[i>>2]>>8*(i%4))&0xFF)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&0xFF);for(var j=0;j<4;j++)
{if(i*8+j*6>binarray.length*32)str+=b64pad;else str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}
return str;}
function utf8t2d(t)
{t=t.replace(/\r\n/g,"\n");var d=new Array;var test=String.fromCharCode(237);if(test.charCodeAt(0)<0)
for(var n=0;n<t.length;n++)
{var c=t.charCodeAt(n);if(c>0)
d[d.length]=c;else{d[d.length]=(((256+c)>>6)|192);d[d.length]=(((256+c)&63)|128);}}
else
for(var n=0;n<t.length;n++)
{var c=t.charCodeAt(n);if(c<128)
d[d.length]=c;else if((c>127)&&(c<2048)){d[d.length]=((c>>6)|192);d[d.length]=((c&63)|128);}
else{d[d.length]=((c>>12)|224);d[d.length]=(((c>>6)&63)|128);d[d.length]=((c&63)|128);}}
return d;}
function utf8d2t(d)
{var r=new Array;var i=0;while(i<d.length)
{if(d[i]<128){r[r.length]=String.fromCharCode(d[i]);i++;}
else if((d[i]>191)&&(d[i]<224)){r[r.length]=String.fromCharCode(((d[i]&31)<<6)|(d[i+1]&63));i+=2;}
else{r[r.length]=String.fromCharCode(((d[i]&15)<<12)|((d[i+1]&63)<<6)|(d[i+2]&63));i+=3;}}
return r.join("");}
function b64arrays(){var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';b64=new Array();f64=new Array();for(var i=0;i<b64s.length;i++){b64[i]=b64s.charAt(i);f64[b64s.charAt(i)]=i;}}
function b64d2t(d){var r=new Array;var i=0;var dl=d.length;if((dl%3)==1){d[d.length]=0;d[d.length]=0;}
if((dl%3)==2)
d[d.length]=0;while(i<d.length)
{r[r.length]=b64[d[i]>>2];r[r.length]=b64[((d[i]&3)<<4)|(d[i+1]>>4)];r[r.length]=b64[((d[i+1]&15)<<2)|(d[i+2]>>6)];r[r.length]=b64[d[i+2]&63];i+=3;}
if((dl%3)==1)
r[r.length-1]=r[r.length-2]="=";if((dl%3)==2)
r[r.length-1]="=";var t=r.join("");return t;}
function b64t2d(t){var d=new Array;var i=0;t=t.replace(/\n|\r/g,"");t=t.replace(/=/g,"");while(i<t.length)
{d[d.length]=(f64[t.charAt(i)]<<2)|(f64[t.charAt(i+1)]>>4);d[d.length]=(((f64[t.charAt(i+1)]&15)<<4)|(f64[t.charAt(i+2)]>>2));d[d.length]=(((f64[t.charAt(i+2)]&3)<<6)|(f64[t.charAt(i+3)]));i+=4;}
if(t.length%4==2)
d=d.slice(0,d.length-2);if(t.length%4==3)
d=d.slice(0,d.length-1);return d;}
if(typeof(atob)=='undefined'||typeof(btoa)=='undefined')
b64arrays();if(typeof(atob)=='undefined'){atob=function(s){return utf8d2t(b64t2d(s));}}
if(typeof(btoa)=='undefined'){btoa=function(s){return b64d2t(utf8t2d(s));}}
function cnonce(size){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";var cnonce='';for(var i=0;i<size;i++){cnonce+=tab.charAt(Math.round(Math.random(new Date().getTime())*(tab.length-1)));}
return cnonce;}
function JSJaCJSON(){}
JSJaCJSON.toString=function(obj){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={array:function(x){var a=['['],b,f,i,l=x.length,v;for(i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=',';}
a[a.length]=v;b=true;}}}
a[a.length]=']';return a.join('');},'boolean':function(x){return String(x);},'null':function(x){return"null";},number:function(x){return isFinite(x)?String(x):'null';},object:function(x){if(x){if(x instanceof Array){return s.array(x);}
var a=['{'],b,f,i,v;for(i in x){if(x.hasOwnProperty(i)){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=',';}
a.push(s.string(i),':',v);b=true;}}}}
a[a.length]='}';return a.join('');}
return'null';},string:function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
c=b.charCodeAt();return'\\u00'+
Math.floor(c/16).toString(16)+
(c%16).toString(16);});}
return'"'+x+'"';}};switch(typeof(obj)){case'object':return s.object(obj);case'array':return s.array(obj);}};JSJaCJSON.parse=function(str){try{return!(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(str.replace(/"(\\.|[^"\\])*"/g,'')))&&eval('('+str+')');}catch(e){return false;}};function XmlHttp(){}
XmlHttp.create=function(){try{if(window.XMLHttpRequest){var req=new XMLHttpRequest();if(req.readyState==null){req.readyState=1;req.addEventListener("load",function(){req.readyState=4;if(typeof req.onreadystatechange=="function")
req.onreadystatechange();},false);}
return req;}
if(window.ActiveXObject){return new ActiveXObject(XmlHttp.getPrefix()+".XmlHttp");}}
catch(ex){}
throw new Error("Your browser does not support XmlHttp objects");};XmlHttp.getPrefix=function(){if(XmlHttp.prefix)
return XmlHttp.prefix;var prefixes=["MSXML2","Microsoft","MSXML","MSXML3"];var o;for(var i=0;i<prefixes.length;i++){try{o=new ActiveXObject(prefixes[i]+".XmlHttp");return XmlHttp.prefix=prefixes[i];}
catch(ex){};}
throw new Error("Could not find an installed XML parser");};function XmlDocument(){}
XmlDocument.create=function(name,ns){name=name||'foo';ns=ns||'';try{var doc;if(document.implementation&&document.implementation.createDocument){doc=document.implementation.createDocument(ns,name,null);if(doc.readyState==null){doc.readyState=1;doc.addEventListener("load",function(){doc.readyState=4;if(typeof doc.onreadystatechange=="function")
doc.onreadystatechange();},false);}}else if(window.ActiveXObject){doc=new ActiveXObject(XmlDocument.getPrefix()+".DomDocument");}
if(!doc.documentElement||doc.documentElement.tagName!=name||(doc.documentElement.namespaceURI&&doc.documentElement.namespaceURI!=ns)){try{if(ns!='')
doc.appendChild(doc.createElement(name)).setAttribute('xmlns',ns);else
doc.appendChild(doc.createElement(name));}catch(dex){doc=document.implementation.createDocument(ns,name,null);if(doc.documentElement==null)
doc.appendChild(doc.createElement(name));if(ns!=''&&doc.documentElement.getAttribute('xmlns')!=ns){doc.documentElement.setAttribute('xmlns',ns);}}}
return doc;}
catch(ex){alert(ex.name+": "+ex.message);}
throw new Error("Your browser does not support XmlDocument objects");};XmlDocument.getPrefix=function(){if(XmlDocument.prefix)
return XmlDocument.prefix;var prefixes=["MSXML2","Microsoft","MSXML","MSXML3"];var o;for(var i=0;i<prefixes.length;i++){try{o=new ActiveXObject(prefixes[i]+".DomDocument");return XmlDocument.prefix=prefixes[i];}
catch(ex){};}
throw new Error("Could not find an installed XML parser");};if(typeof(Document)!='undefined'&&window.DOMParser){Document.prototype.loadXML=function(s){var doc2=(new DOMParser()).parseFromString(s,"text/xml");while(this.hasChildNodes())
this.removeChild(this.lastChild);for(var i=0;i<doc2.childNodes.length;i++){this.appendChild(this.importNode(doc2.childNodes[i],true));}};}
if(window.XMLSerializer&&window.Node&&Node.prototype&&Node.prototype.__defineGetter__){XMLDocument.prototype.__defineGetter__("xml",function(){return(new XMLSerializer()).serializeToString(this);});Document.prototype.__defineGetter__("xml",function(){return(new XMLSerializer()).serializeToString(this);});Node.prototype.__defineGetter__("xml",function(){return(new XMLSerializer()).serializeToString(this);});}
var JSJaCBuilder={buildNode:function(doc,elementName){var element;if(arguments[2])
if(JSJaCBuilder._isStringOrNumber(arguments[2])||(arguments[2]instanceof Array)){element=doc.createElement(elementName);JSJaCBuilder._children(doc,element,arguments[2]);}else{if(arguments[2]['xmlns']){try{element=doc.createElementNS(arguments[2]['xmlns'],elementName);}catch(e){element=doc.createElement(elementName);}}else
element=doc.createElement(elementName);for(attr in arguments[2]){if(arguments[2].hasOwnProperty(attr)){if(attr=='xmlns'&&element.namespaceURI==attr)
continue;element.setAttribute(attr,arguments[2][attr]);}}}
else
element=doc.createElement(elementName);if(arguments[3])
JSJaCBuilder._children(doc,element,arguments[3]);return element;},_text:function(doc,text){return doc.createTextNode(text);},_children:function(doc,element,children){if(typeof children=='object'){for(var i in children){if(children.hasOwnProperty(i)){var e=children[i];if(typeof e=='object'){if(e instanceof Array){var node=JSJaCBuilder.buildNode(doc,e[0],e[1],e[2]);element.appendChild(node);}else{element.appendChild(e);}}else{if(JSJaCBuilder._isStringOrNumber(e)){element.appendChild(JSJaCBuilder._text(doc,e));}}}}}else{if(JSJaCBuilder._isStringOrNumber(children)){element.appendChild(JSJaCBuilder._text(doc,children));}}},_attributes:function(attributes){var attrs=[];for(attribute in attributes)
if(attributes.hasOwnProperty(attribute))
attrs.push(attribute+'="'+attributes[attribute].toString().htmlEnc()+'"');return attrs.join(" ");},_isStringOrNumber:function(param){return(typeof param=='string'||typeof param=='number');}};var NS_DISCO_ITEMS="http://jabber.org/protocol/disco#items";var NS_DISCO_INFO="http://jabber.org/protocol/disco#info";var NS_VCARD="vcard-temp";var NS_AUTH="jabber:iq:auth";var NS_AUTH_ERROR="jabber:iq:auth:error";var NS_REGISTER="jabber:iq:register";var NS_SEARCH="jabber:iq:search";var NS_ROSTER="jabber:iq:roster";var NS_PRIVACY="jabber:iq:privacy";var NS_PRIVATE="jabber:iq:private";var NS_VERSION="jabber:iq:version";var NS_TIME="jabber:iq:time";var NS_LAST="jabber:iq:last";var NS_XDATA="jabber:x:data";var NS_IQDATA="jabber:iq:data";var NS_DELAY="jabber:x:delay";var NS_EXPIRE="jabber:x:expire";var NS_EVENT="jabber:x:event";var NS_XCONFERENCE="jabber:x:conference";var NS_STATS="http://jabber.org/protocol/stats";var NS_MUC="http://jabber.org/protocol/muc";var NS_MUC_USER="http://jabber.org/protocol/muc#user";var NS_MUC_ADMIN="http://jabber.org/protocol/muc#admin";var NS_MUC_OWNER="http://jabber.org/protocol/muc#owner";var NS_PUBSUB="http://jabber.org/protocol/pubsub";var NS_PUBSUB_EVENT="http://jabber.org/protocol/pubsub#event";var NS_PUBSUB_OWNER="http://jabber.org/protocol/pubsub#owner";var NS_PUBSUB_NMI="http://jabber.org/protocol/pubsub#node-meta-info";var NS_COMMANDS="http://jabber.org/protocol/commands";var NS_STREAM="http://etherx.jabber.org/streams";var NS_STANZAS="urn:ietf:params:xml:ns:xmpp-stanzas";var NS_STREAMS="urn:ietf:params:xml:ns:xmpp-streams";var NS_TLS="urn:ietf:params:xml:ns:xmpp-tls";var NS_SASL="urn:ietf:params:xml:ns:xmpp-sasl";var NS_SESSION="urn:ietf:params:xml:ns:xmpp-session";var NS_BIND="urn:ietf:params:xml:ns:xmpp-bind";var NS_FEATURE_IQAUTH="http://jabber.org/features/iq-auth";var NS_FEATURE_IQREGISTER="http://jabber.org/features/iq-register";var NS_FEATURE_COMPRESS="http://jabber.org/features/compress";var NS_COMPRESS="http://jabber.org/protocol/compress";function STANZA_ERROR(code,type,cond){if(window==this)
return new STANZA_ERROR(code,type,cond);this.code=code;this.type=type;this.cond=cond;}
var ERR_BAD_REQUEST=STANZA_ERROR("400","modify","bad-request");var ERR_CONFLICT=STANZA_ERROR("409","cancel","conflict");var ERR_FEATURE_NOT_IMPLEMENTED=STANZA_ERROR("501","cancel","feature-not-implemented");var ERR_FORBIDDEN=STANZA_ERROR("403","auth","forbidden");var ERR_GONE=STANZA_ERROR("302","modify","gone");var ERR_INTERNAL_SERVER_ERROR=STANZA_ERROR("500","wait","internal-server-error");var ERR_ITEM_NOT_FOUND=STANZA_ERROR("404","cancel","item-not-found");var ERR_JID_MALFORMED=STANZA_ERROR("400","modify","jid-malformed");var ERR_NOT_ACCEPTABLE=STANZA_ERROR("406","modify","not-acceptable");var ERR_NOT_ALLOWED=STANZA_ERROR("405","cancel","not-allowed");var ERR_NOT_AUTHORIZED=STANZA_ERROR("401","auth","not-authorized");var ERR_PAYMENT_REQUIRED=STANZA_ERROR("402","auth","payment-required");var ERR_RECIPIENT_UNAVAILABLE=STANZA_ERROR("404","wait","recipient-unavailable");var ERR_REDIRECT=STANZA_ERROR("302","modify","redirect");var ERR_REGISTRATION_REQUIRED=STANZA_ERROR("407","auth","registration-required");var ERR_REMOTE_SERVER_NOT_FOUND=STANZA_ERROR("404","cancel","remote-server-not-found");var ERR_REMOTE_SERVER_TIMEOUT=STANZA_ERROR("504","wait","remote-server-timeout");var ERR_RESOURCE_CONSTRAINT=STANZA_ERROR("500","wait","resource-constraint");var ERR_SERVICE_UNAVAILABLE=STANZA_ERROR("503","cancel","service-unavailable");var ERR_SUBSCRIPTION_REQUIRED=STANZA_ERROR("407","auth","subscription-required");var ERR_UNEXPECTED_REQUEST=STANZA_ERROR("400","wait","unexpected-request");function JSJaCConnection(oArg){if(oArg&&oArg.oDbg&&oArg.oDbg.log)
this.oDbg=oArg.oDbg;else{this.oDbg=new Object();this.oDbg.log=function(){};}
if(oArg&&oArg.httpbase)
this._httpbase=oArg.httpbase;if(oArg&&oArg.allow_plain)
this.allow_plain=oArg.allow_plain;else
this.allow_plain=JSJAC_ALLOW_PLAIN;this._connected=false;this._events=new Array();this._keys=null;this._ID=0;this._inQ=new Array();this._pQueue=new Array();this._regIDs=new Array();this._req=new Array();this._status='intialized';this._errcnt=0;this._inactivity=JSJAC_INACTIVITY;this._sendRawCallbacks=new Array();if(oArg&&oArg.timerval)
this.setPollInterval(oArg.timerval);}
JSJaCConnection.prototype.connect=function(oArg){this._setStatus('connecting');this.domain=oArg.domain||'localhost';this.username=oArg.username;this.resource=oArg.resource;this.pass=oArg.pass;this.register=oArg.register;this.authhost=oArg.authhost||this.domain;this.authtype=oArg.authtype||'sasl';if(oArg.xmllang&&oArg.xmllang!='')
this._xmllang=oArg.xmllang;this.host=oArg.host||this.domain;this.port=oArg.port||5222;if(oArg.secure)
this.secure='true';else
this.secure='false';if(oArg.wait)
this._wait=oArg.wait;this.jid=this.username+'@'+this.domain;this.fulljid=this.jid+'/'+this.resource;this._rid=Math.round(100000.5+(((900000.49999)-(100000.5))*Math.random()));var slot=this._getFreeSlot();this._req[slot]=this._setupRequest(true);var reqstr=this._getInitialRequestString();this.oDbg.log(reqstr,4);this._req[slot].r.onreadystatechange=JSJaC.bind(function(){if(this._req[slot].r.readyState==4){this.oDbg.log("async recv: "+this._req[slot].r.responseText,4);this._handleInitialResponse(slot);}},this);if(typeof(this._req[slot].r.onerror)!='undefined'){this._req[slot].r.onerror=JSJaC.bind(function(e){this.oDbg.log('XmlHttpRequest error',1);return false;},this);}
this._req[slot].r.send(reqstr);};JSJaCConnection.prototype.connected=function(){return this._connected;};JSJaCConnection.prototype.disconnect=function(){this._setStatus('disconnecting');if(!this.connected())
return;this._connected=false;clearInterval(this._interval);clearInterval(this._inQto);if(this._timeout)
clearTimeout(this._timeout);var slot=this._getFreeSlot();this._req[slot]=this._setupRequest(false);request=this._getRequestString(false,true);this.oDbg.log("Disconnecting: "+request,4);this._req[slot].r.send(request);try{JSJaCCookie.read('JSJaC_State').erase();}catch(e){}
this.oDbg.log("Disconnected: "+this._req[slot].r.responseText,2);this._handleEvent('ondisconnect');};JSJaCConnection.prototype.getPollInterval=function(){return this._timerval;};JSJaCConnection.prototype.registerHandler=function(event){event=event.toLowerCase();var eArg={handler:arguments[arguments.length-1],childName:'*',childNS:'*',type:'*'};if(arguments.length>2)
eArg.childName=arguments[1];if(arguments.length>3)
eArg.childNS=arguments[2];if(arguments.length>4)
eArg.type=arguments[3];if(!this._events[event])
this._events[event]=new Array(eArg);else
this._events[event]=this._events[event].concat(eArg);this._events[event]=this._events[event].sort(function(a,b){var aRank=0;var bRank=0;with(a){if(type=='*')
aRank++;if(childNS=='*')
aRank++;if(childName=='*')
aRank++;}
with(b){if(type=='*')
bRank++;if(childNS=='*')
bRank++;if(childName=='*')
bRank++;}
if(aRank>bRank)
return 1;if(aRank<bRank)
return-1;return 0;});this.oDbg.log("registered handler for event '"+event+"'",2);};JSJaCConnection.prototype.unregisterHandler=function(event,handler){event=event.toLowerCase();if(!this._events[event])
return;var arr=this._events[event],res=new Array();for(var i=0;i<arr.length;i++)
if(arr[i]!=handler)
res.push(arr[i]);if(arr.length!=res.length){this._events[event]=res;this.oDbg.log("unregistered handler for event '"+event+"'",2);}};JSJaCConnection.prototype.registerIQGet=function(childName,childNS,handler){this.registerHandler('iq',childName,childNS,'get',handler);};JSJaCConnection.prototype.registerIQSet=function(childName,childNS,handler){this.registerHandler('iq',childName,childNS,'set',handler);};JSJaCConnection.prototype.resume=function(){try{this._setStatus('resuming');var s=unescape(JSJaCCookie.read('JSJaC_State').getValue());this.oDbg.log('read cookie: '+s,2);var o=JSJaCJSON.parse(s);for(var i in o)
if(o.hasOwnProperty(i))
this[i]=o[i];if(this._keys){this._keys2=new JSJaCKeys();var u=this._keys2._getSuspendVars();for(var i=0;i<u.length;i++)
this._keys2[u[i]]=this._keys[u[i]];this._keys=this._keys2;}
try{JSJaCCookie.read('JSJaC_State').erase();}catch(e){}
if(this._connected){this._handleEvent('onresume');setTimeout(JSJaC.bind(this._resume,this),this.getPollInterval());this._interval=setInterval(JSJaC.bind(this._checkQueue,this),JSJAC_CHECKQUEUEINTERVAL);this._inQto=setInterval(JSJaC.bind(this._checkInQ,this),JSJAC_CHECKINQUEUEINTERVAL);}
return(this._connected===true);}catch(e){if(e.message)
this.oDbg.log("Resume failed: "+e.message,1);else
this.oDbg.log("Resume failed: "+e,1);return false;}};JSJaCConnection.prototype.send=function(packet,cb,arg){if(!packet||!packet.pType){this.oDbg.log("no packet: "+packet,1);return false;}
if(!this.connected())
return false;if(cb){if(!packet.getID())
packet.setID('JSJaCID_'+this._ID++);this._registerPID(packet.getID(),cb,arg);}
try{this._handleEvent(packet.pType()+'_out',packet);this._handleEvent("packet_out",packet);this._pQueue=this._pQueue.concat(packet.xml());}catch(e){this.oDbg.log(e.toString(),1);return false;}
return true;};JSJaCConnection.prototype.sendIQ=function(iq,handlers,arg){if(!iq||iq.pType()!='iq'){return false;}
handlers=handlers||{};var error_handler=handlers.error_handler||function(aIq){this.oDbg.log(iq.xml(),1);};var result_handler=handlers.result_handler||function(aIq){this.oDbg.log(aIq.xml(),2);};var default_handler=handlers.default_handler||function(aIq){this.oDbg.log(aIq.xml(),2);};var iqHandler=function(aIq,arg){switch(aIq.getType()){case'error':error_handler(aIq);break;case'result':result_handler(aIq,arg);break;default:default_handler(aIq,arg);}};return this.send(iq,iqHandler,arg);};JSJaCConnection.prototype.setPollInterval=function(timerval){if(timerval&&!isNaN(timerval))
this._timerval=timerval;return this._timerval;};JSJaCConnection.prototype.status=function(){return this._status;};JSJaCConnection.prototype.suspend=function(){clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);this._suspend();var u=('_connected,_keys,_ID,_inQ,_pQueue,_regIDs,_errcnt,_inactivity,domain,username,resource,jid,fulljid,_sid,_httpbase,_timerval,_is_polling').split(',');u=u.concat(this._getSuspendVars());var s=new Object();for(var i=0;i<u.length;i++){if(!this[u[i]])continue;if(this[u[i]]._getSuspendVars){var uo=this[u[i]]._getSuspendVars();var o=new Object();for(var j=0;j<uo.length;j++)
o[uo[j]]=this[u[i]][uo[j]];}else
var o=this[u[i]];s[u[i]]=o;}
var c=new JSJaCCookie('JSJaC_State',escape(JSJaCJSON.toString(s)),this._inactivity);this.oDbg.log("writing cookie: "+unescape(c.value)+"\n(length:"+
unescape(c.value).length+")",2);c.write();try{var c2=JSJaCCookie.read('JSJaC_State');if(c.value!=c2.value){this.oDbg.log("Suspend failed writing cookie.\nRead: "+
unescape(JSJaCCookie.read('JSJaC_State')),1);c.erase();}
this._connected=false;this._setStatus('suspending');}catch(e){this.oDbg.log("Failed reading cookie 'JSJaC_State': "+e.message);}};JSJaCConnection.prototype._abort=function(){clearTimeout(this._timeout);clearInterval(this._inQto);clearInterval(this._interval);this._connected=false;this._setStatus('aborted');this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');this._handleEvent('onerror',JSJaCError('500','cancel','service-unavailable'));};JSJaCConnection.prototype._checkInQ=function(){for(var i=0;i<this._inQ.length&&i<10;i++){var item=this._inQ[0];this._inQ=this._inQ.slice(1,this._inQ.length);var packet=JSJaCPacket.wrapNode(item);if(!packet)
return;this._handleEvent("packet_in",packet);if(packet.pType&&!this._handlePID(packet)){this._handleEvent(packet.pType()+'_in',packet);this._handleEvent(packet.pType(),packet);}}};JSJaCConnection.prototype._checkQueue=function(){if(this._pQueue.length!=0)
this._process();return true;};JSJaCConnection.prototype._doAuth=function(){if(this.has_sasl&&this.authtype=='nonsasl')
this.oDbg.log("Warning: SASL present but not used",1);if(!this._doSASLAuth()&&!this._doLegacyAuth()){this.oDbg.log("Auth failed for authtype "+this.authtype,1);this.disconnect();return false;}
return true;};JSJaCConnection.prototype._doInBandReg=function(){if(this.authtype=='saslanon'||this.authtype=='anonymous')
return;var iq=new JSJaCIQ();iq.setType('set');iq.setID('reg1');iq.appendNode("query",{xmlns:"jabber:iq:register"},[["username",this.username],["password",this.pass]]);this.send(iq,this._doInBandRegDone);};JSJaCConnection.prototype._doInBandRegDone=function(iq){if(iq&&iq.getType()=='error'){this.oDbg.log("registration failed for "+this.username,0);this._handleEvent('onerror',iq.getChild('error'));return;}
this.oDbg.log(this.username+" registered succesfully",0);this._doAuth();};JSJaCConnection.prototype._doLegacyAuth=function(){if(this.authtype!='nonsasl'&&this.authtype!='anonymous')
return false;var iq=new JSJaCIQ();iq.setIQ(this.server,'get','auth1');iq.appendNode('query',{xmlns:'jabber:iq:auth'},[['username',this.username]]);this.send(iq,this._doLegacyAuth2);return true;};JSJaCConnection.prototype._doLegacyAuth2=function(iq){if(!iq||iq.getType()!='result'){if(iq&&iq.getType()=='error')
this._handleEvent('onerror',iq.getChild('error'));this.disconnect();return;}
var use_digest=(iq.getChild('digest')!=null);var iq=new JSJaCIQ();iq.setIQ(this.server,'set','auth2');query=iq.appendNode('query',{xmlns:'jabber:iq:auth'},[['username',this.username],['resource',this.resource]]);if(use_digest){query.appendChild(iq.buildNode('digest',hex_sha1(this.streamid+this.pass)));}else if(this.allow_plain){query.appendChild(iq.buildNode('password',this.pass));}else{this.oDbg.log("no valid login mechanism found",1);this.disconnect();return false;}
this.send(iq,this._doLegacyAuthDone);};JSJaCConnection.prototype._doLegacyAuthDone=function(iq){if(iq.getType()!='result'){if(iq.getType()=='error')
this._handleEvent('onerror',iq.getChild('error'));this.disconnect();}else
this._handleEvent('onconnect');};JSJaCConnection.prototype._doSASLAuth=function(){if(this.authtype=='nonsasl'||this.authtype=='anonymous')
return false;if(this.authtype=='saslanon'){if(this.mechs['ANONYMOUS']){this.oDbg.log("SASL using mechanism 'ANONYMOUS'",2);return this._sendRaw("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='ANONYMOUS'/>",this._doSASLAuthDone);}
this.oDbg.log("SASL ANONYMOUS requested but not supported",1);}else{if(this.mechs['DIGEST-MD5']){this.oDbg.log("SASL using mechanism 'DIGEST-MD5'",2);return this._sendRaw("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>",this._doSASLAuthDigestMd5S1);}else if(this.allow_plain&&this.mechs['PLAIN']){this.oDbg.log("SASL using mechanism 'PLAIN'",2);var authStr=this.username+'@'+
this.domain+String.fromCharCode(0)+
this.username+String.fromCharCode(0)+
this.pass;this.oDbg.log("authenticating with '"+authStr+"'",2);authStr=btoa(authStr);return this._sendRaw("<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>"+authStr+"</auth>",this._doSASLAuthDone);}
this.oDbg.log("No SASL mechanism applied",1);this.authtype='nonsasl';}
return false;};JSJaCConnection.prototype._doSASLAuthDigestMd5S1=function(el){if(el.nodeName!="challenge"){this.oDbg.log("challenge missing",1);this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));this.disconnect();}else{var challenge=atob(el.firstChild.nodeValue);this.oDbg.log("got challenge: "+challenge,2);this._nonce=challenge.substring(challenge.indexOf("nonce=")+7);this._nonce=this._nonce.substring(0,this._nonce.indexOf("\""));this.oDbg.log("nonce: "+this._nonce,2);if(this._nonce==''||this._nonce.indexOf('\"')!=-1){this.oDbg.log("nonce not valid, aborting",1);this.disconnect();return;}
this._digest_uri="xmpp/";this._digest_uri+=this.domain;this._cnonce=cnonce(14);this._nc='00000001';var A1=str_md5(this.username+':'+this.domain+':'+this.pass)+':'+this._nonce+':'+this._cnonce;var A2='AUTHENTICATE:'+this._digest_uri;var response=hex_md5(hex_md5(A1)+':'+this._nonce+':'+this._nc+':'+
this._cnonce+':auth:'+hex_md5(A2));var rPlain='username="'+this.username+'",realm="'+this.domain+'",nonce="'+this._nonce+'",cnonce="'+this._cnonce+'",nc="'+this._nc+'",qop=auth,digest-uri="'+this._digest_uri+'",response="'+response+'",charset=utf-8';this.oDbg.log("response: "+rPlain,2);this._sendRaw("<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>"+
binb2b64(str2binb(rPlain))+"</response>",this._doSASLAuthDigestMd5S2);}};JSJaCConnection.prototype._doSASLAuthDigestMd5S2=function(el){if(el.nodeName=='failure'){if(el.xml)
this.oDbg.log("auth error: "+el.xml,1);else
this.oDbg.log("auth error",1);this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));this.disconnect();return;}
var response=atob(el.firstChild.nodeValue);this.oDbg.log("response: "+response,2);var rspauth=response.substring(response.indexOf("rspauth=")+8);this.oDbg.log("rspauth: "+rspauth,2);var A1=str_md5(this.username+':'+this.domain+':'+this.pass)+':'+this._nonce+':'+this._cnonce;var A2=':'+this._digest_uri;var rsptest=hex_md5(hex_md5(A1)+':'+this._nonce+':'+this._nc+':'+
this._cnonce+':auth:'+hex_md5(A2));this.oDbg.log("rsptest: "+rsptest,2);if(rsptest!=rspauth){this.oDbg.log("SASL Digest-MD5: server repsonse with wrong rspauth",1);this.disconnect();return;}
if(el.nodeName=='success')
this._reInitStream(this.domain,this._doStreamBind);else
this._sendRaw("<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>",this._doSASLAuthDone);};JSJaCConnection.prototype._doSASLAuthDone=function(el){if(el.nodeName!='success'){this.oDbg.log("auth failed",1);this._handleEvent('onerror',JSJaCError('401','auth','not-authorized'));this.disconnect();}else
this._reInitStream(this.domain,this._doStreamBind);};JSJaCConnection.prototype._doStreamBind=function(){var iq=new JSJaCIQ();iq.setIQ(this.domain,'set','bind_1');iq.appendNode("bind",{xmlns:"urn:ietf:params:xml:ns:xmpp-bind"},[["resource",this.resource]]);this.oDbg.log(iq.xml());this.send(iq,this._doXMPPSess);};JSJaCConnection.prototype._doXMPPSess=function(iq){if(iq.getType()!='result'||iq.getType()=='error'){this.disconnect();if(iq.getType()=='error')
this._handleEvent('onerror',iq.getChild('error'));return;}
this.fulljid=iq.getChildVal("jid");this.jid=this.fulljid.substring(0,this.fulljid.lastIndexOf('/'));iq=new JSJaCIQ();iq.setIQ(this.domain,'set','sess_1');iq.appendNode("session",{xmlns:"urn:ietf:params:xml:ns:xmpp-session"},[]);this.oDbg.log(iq.xml());this.send(iq,this._doXMPPSessDone);};JSJaCConnection.prototype._doXMPPSessDone=function(iq){if(iq.getType()!='result'||iq.getType()=='error'){this.disconnect();if(iq.getType()=='error')
this._handleEvent('onerror',iq.getChild('error'));return;}else
this._handleEvent('onconnect');};JSJaCConnection.prototype._handleEvent=function(event,arg){event=event.toLowerCase();this.oDbg.log("incoming event '"+event+"'",3);if(!this._events[event])
return;this.oDbg.log("handling event '"+event+"'",2);for(var i=0;i<this._events[event].length;i++){var aEvent=this._events[event][i];if(aEvent.handler){try{if(arg){if(arg.pType){if((!arg.getNode().hasChildNodes()&&aEvent.childName!='*')||(arg.getNode().hasChildNodes()&&!arg.getChild(aEvent.childName,aEvent.childNS)))
continue;if(aEvent.type!='*'&&arg.getType()!=aEvent.type)
continue;this.oDbg.log(aEvent.childName+"/"+aEvent.childNS+"/"+aEvent.type+" => match for handler "+aEvent.handler,3);}
if(aEvent.handler.call(this,arg))
break;}
else
if(aEvent.handler.call(this))
break;}catch(e){this.oDbg.log(aEvent.handler+"\n>>>"+e.name+": "+e.message,1);}}}};JSJaCConnection.prototype._handlePID=function(aJSJaCPacket){if(!aJSJaCPacket.getID())
return false;for(var i in this._regIDs){if(this._regIDs.hasOwnProperty(i)&&this._regIDs[i]&&i==aJSJaCPacket.getID()){var pID=aJSJaCPacket.getID();this.oDbg.log("handling "+pID,3);try{if(this._regIDs[i].cb.call(this,aJSJaCPacket,this._regIDs[i].arg)===false){return false;}else{this._unregisterPID(pID);return true;}}catch(e){this.oDbg.log(e.name+": "+e.message);this._unregisterPID(pID);return true;}}}
return false;};JSJaCConnection.prototype._handleResponse=function(req){var rootEl=this._parseResponse(req);if(!rootEl)
return;for(var i=0;i<rootEl.childNodes.length;i++){if(this._sendRawCallbacks.length){var cb=this._sendRawCallbacks[0];this._sendRawCallbacks=this._sendRawCallbacks.slice(1,this._sendRawCallbacks.length);cb.fn.call(this,rootEl.childNodes.item(i),cb.arg);continue;}
this._inQ=this._inQ.concat(rootEl.childNodes.item(i));}};JSJaCConnection.prototype._parseStreamFeatures=function(doc){if(!doc){this.oDbg.log("nothing to parse ... aborting",1);return false;}
var errorTag;if(doc.getElementsByTagNameNS)
errorTag=doc.getElementsByTagNameNS("http://etherx.jabber.org/streams","error").item(0);else{var errors=doc.getElementsByTagName("error");for(var i=0;i<errors.length;i++)
if(errors.item(i).namespaceURI=="http://etherx.jabber.org/streams"){errorTag=errors.item(i);break;}}
if(errorTag){this._setStatus("internal_server_error");clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);this._handleEvent('onerror',JSJaCError('503','cancel','session-terminate'));this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');return false;}
this.mechs=new Object();var lMec1=doc.getElementsByTagName("mechanisms");this.has_sasl=false;for(var i=0;i<lMec1.length;i++)
if(lMec1.item(i).getAttribute("xmlns")=="urn:ietf:params:xml:ns:xmpp-sasl"){this.has_sasl=true;var lMec2=lMec1.item(i).getElementsByTagName("mechanism");for(var j=0;j<lMec2.length;j++)
this.mechs[lMec2.item(j).firstChild.nodeValue]=true;break;}
if(this.has_sasl)
this.oDbg.log("SASL detected",2);else{this.authtype='nonsasl';this.oDbg.log("No support for SASL detected",2);}
return true;};JSJaCConnection.prototype._process=function(timerval){if(!this.connected()){this.oDbg.log("Connection lost ...",1);if(this._interval)
clearInterval(this._interval);return;}
this.setPollInterval(timerval);if(this._timeout)
clearTimeout(this._timeout);var slot=this._getFreeSlot();if(slot<0)
return;if(typeof(this._req[slot])!='undefined'&&typeof(this._req[slot].r)!='undefined'&&this._req[slot].r.readyState!=4){this.oDbg.log("Slot "+slot+" is not ready");return;}
if(!this.isPolling()&&this._pQueue.length==0&&this._req[(slot+1)%2]&&this._req[(slot+1)%2].r.readyState!=4){this.oDbg.log("all slots busy, standby ...",2);return;}
if(!this.isPolling())
this.oDbg.log("Found working slot at "+slot,2);this._req[slot]=this._setupRequest(true);this._req[slot].r.onreadystatechange=JSJaC.bind(function(){if(!this.connected())
return;if(this._req[slot].r.readyState==4){this._setStatus('processing');this.oDbg.log("async recv: "+this._req[slot].r.responseText,4);this._handleResponse(this._req[slot]);if(this._pQueue.length){this._timeout=setTimeout(JSJaC.bind(this._process,this),100);}else{this.oDbg.log("scheduling next poll in "+this.getPollInterval()+" msec",4);this._timeout=setTimeout(JSJaC.bind(this._process,this),this.getPollInterval());}}},this);try{this._req[slot].r.onerror=JSJaC.bind(function(){if(!this.connected())
return;this._errcnt++;this.oDbg.log('XmlHttpRequest error ('+this._errcnt+')',1);if(this._errcnt>JSJAC_ERR_COUNT){this._abort();return false;}
this._setStatus('onerror_fallback');setTimeout(JSJaC.bind(this._resume,this),this.getPollInterval());return false;},this);}catch(e){}
var reqstr=this._getRequestString();if(typeof(this._rid)!='undefined')
this._req[slot].rid=this._rid;this.oDbg.log("sending: "+reqstr,4);this._req[slot].r.send(reqstr);};JSJaCConnection.prototype._registerPID=function(pID,cb,arg){if(!pID||!cb)
return false;this._regIDs[pID]=new Object();this._regIDs[pID].cb=cb;if(arg)
this._regIDs[pID].arg=arg;this.oDbg.log("registered "+pID,3);return true;};JSJaCConnection.prototype._sendEmpty=function JSJaCSendEmpty(){var slot=this._getFreeSlot();this._req[slot]=this._setupRequest(true);this._req[slot].r.onreadystatechange=JSJaC.bind(function(){if(this._req[slot].r.readyState==4){this.oDbg.log("async recv: "+this._req[slot].r.responseText,4);this._getStreamID(slot);}},this);if(typeof(this._req[slot].r.onerror)!='undefined'){this._req[slot].r.onerror=JSJaC.bind(function(e){this.oDbg.log('XmlHttpRequest error',1);return false;},this);}
var reqstr=this._getRequestString();this.oDbg.log("sending: "+reqstr,4);this._req[slot].r.send(reqstr);};JSJaCConnection.prototype._sendRaw=function(xml,cb,arg){if(cb)
this._sendRawCallbacks.push({fn:cb,arg:arg});this._pQueue.push(xml);this._process();return true;};JSJaCConnection.prototype._setStatus=function(status){if(!status||status=='')
return;if(status!=this._status){this._status=status;this._handleEvent('onstatuschanged',status);this._handleEvent('status_changed',status);}};JSJaCConnection.prototype._unregisterPID=function(pID){if(!this._regIDs[pID])
return false;this._regIDs[pID]=null;this.oDbg.log("unregistered "+pID,3);return true;};function JSJaCConsoleLogger(level){this.level=level||4;this.start=function(){};this.log=function(msg,level){level=level||0;if(level>this.level)
return;if(typeof(console)=='undefined')
return;try{switch(level){case 0:console.warn(msg);break;case 1:console.error(msg);break;case 2:console.info(msg);break;case 4:console.debug(msg);break;default:console.log(msg);break;}}catch(e){try{console.log(msg)}catch(e){}}};this.setLevel=function(level){this.level=level;return this;};this.getLevel=function(){return this.level;};}
function JSJaCCookie(name,value,secs)
{if(window==this)
return new JSJaCCookie(name,value,secs);this.name=name;this.value=value;this.expires=secs;this.write=function(){if(this.secs){var date=new Date();date.setTime(date.getTime()+(this.secs*1000));var expires="; expires="+date.toGMTString();}else
var expires="";document.cookie=this.getName()+"="+this.getValue()+expires+"; path=/";};this.erase=function(){var c=new JSJaCCookie(this.getName(),"",-1);c.write();};this.getName=function(){return this.name;};this.setName=function(name){this.name=name;return this;};this.getValue=function(){return this.value;};this.setValue=function(value){this.value=value;return this;};}
JSJaCCookie.read=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 new JSJaCCookie(name,c.substring(nameEQ.length,c.length));}
throw new JSJaCCookieException("Cookie not found");};JSJaCCookie.get=function(name){return JSJaCCookie.read(name).getValue();};JSJaCCookie.remove=function(name){JSJaCCookie.read(name).erase();};function JSJaCCookieException(msg){this.message=msg;this.name="CookieException";}
function JSJaCError(code,type,condition){var xmldoc=XmlDocument.create("error","jsjac");xmldoc.documentElement.setAttribute('code',code);xmldoc.documentElement.setAttribute('type',type);xmldoc.documentElement.appendChild(xmldoc.createElement(condition)).setAttribute('xmlns','urn:ietf:params:xml:ns:xmpp-stanzas');return xmldoc.documentElement;}
var JSJACJID_FORBIDDEN=['"',' ','&','\'','/',':','<','>','@'];function JSJaCJID(jid){this._node='';this._domain='';this._resource='';if(typeof(jid)=='string'){if(jid.indexOf('@')!=-1){this.setNode(jid.substring(0,jid.indexOf('@')));jid=jid.substring(jid.indexOf('@')+1);}
if(jid.indexOf('/')!=-1){this.setResource(jid.substring(jid.indexOf('/')+1));jid=jid.substring(0,jid.indexOf('/'));}
this.setDomain(jid);}else{this.setNode(jid.node);this.setDomain(jid.domain);this.setResource(jid.resource);}}
JSJaCJID.prototype.getNode=function(){return this._node;};JSJaCJID.prototype.getDomain=function(){return this._domain;};JSJaCJID.prototype.getResource=function(){return this._resource;};JSJaCJID.prototype.setNode=function(node){JSJaCJID._checkNodeName(node);this._node=node||'';return this;};JSJaCJID.prototype.setDomain=function(domain){if(!domain||domain=='')
throw new JSJaCJIDInvalidException("domain name missing");JSJaCJID._checkNodeName(domain);this._domain=domain;return this;};JSJaCJID.prototype.setResource=function(resource){this._resource=resource||'';return this;};JSJaCJID.prototype.toString=function(){var jid='';if(this.getNode()&&this.getNode()!='')
jid=this.getNode()+'@';jid+=this.getDomain();if(this.getResource()&&this.getResource()!="")
jid+='/'+this.getResource();return jid;};JSJaCJID.prototype.removeResource=function(){return this.setResource();};JSJaCJID.prototype.clone=function(){return new JSJaCJID(this.toString());};JSJaCJID.prototype.isEntity=function(jid){if(typeof jid=='string')
jid=(new JSJaCJID(jid));jid.removeResource();return(this.clone().removeResource().toString()===jid.toString());};JSJaCJID._checkNodeName=function(nodeprep){if(!nodeprep||nodeprep=='')
return;for(var i=0;i<JSJACJID_FORBIDDEN.length;i++){if(nodeprep.indexOf(JSJACJID_FORBIDDEN[i])!=-1){throw new JSJaCJIDInvalidException("forbidden char in nodename: "+JSJACJID_FORBIDDEN[i]);}}};function JSJaCJIDInvalidException(message){this.message=message;this.name="JSJaCJIDInvalidException";}
function JSJaCKeys(func,oDbg){var seed=Math.random();this._k=new Array();this._k[0]=seed.toString();if(oDbg)
this.oDbg=oDbg;else{this.oDbg={};this.oDbg.log=function(){};}
if(func){for(var i=1;i<JSJAC_NKEYS;i++){this._k[i]=func(this._k[i-1]);oDbg.log(i+": "+this._k[i],4);}}
this._indexAt=JSJAC_NKEYS-1;this.getKey=function(){return this._k[this._indexAt--];};this.lastKey=function(){return(this._indexAt==0);};this.size=function(){return this._k.length;};this._getSuspendVars=function(){return('_k,_indexAt').split(',');}}
var JSJACPACKET_USE_XMLNS=true;function JSJaCPacket(name){this.name=name;if(typeof(JSJACPACKET_USE_XMLNS)!='undefined'&&JSJACPACKET_USE_XMLNS)
this.doc=XmlDocument.create(name,'jabber:client');else
this.doc=XmlDocument.create(name,'');}
JSJaCPacket.prototype.pType=function(){return this.name;};JSJaCPacket.prototype.getDoc=function(){return this.doc;};JSJaCPacket.prototype.getNode=function(){if(this.getDoc()&&this.getDoc().documentElement)
return this.getDoc().documentElement;else
return null;};JSJaCPacket.prototype.setTo=function(to){if(!to||to=='')
this.getNode().removeAttribute('to');else if(typeof(to)=='string')
this.getNode().setAttribute('to',to);else
this.getNode().setAttribute('to',to.toString());return this;};JSJaCPacket.prototype.setFrom=function(from){if(!from||from=='')
this.getNode().removeAttribute('from');else if(typeof(from)=='string')
this.getNode().setAttribute('from',from);else
this.getNode().setAttribute('from',from.toString());return this;};JSJaCPacket.prototype.setID=function(id){if(!id||id=='')
this.getNode().removeAttribute('id');else
this.getNode().setAttribute('id',id);return this;};JSJaCPacket.prototype.setType=function(type){if(!type||type=='')
this.getNode().removeAttribute('type');else
this.getNode().setAttribute('type',type);return this;};JSJaCPacket.prototype.setXMLLang=function(xmllang){if(!xmllang||xmllang=='')
this.getNode().removeAttribute('xml:lang');else
this.getNode().setAttribute('xml:lang',xmllang);return this;};JSJaCPacket.prototype.getTo=function(){return this.getNode().getAttribute('to');};JSJaCPacket.prototype.getFrom=function(){return this.getNode().getAttribute('from');};JSJaCPacket.prototype.getToJID=function(){return new JSJaCJID(this.getTo());};JSJaCPacket.prototype.getFromJID=function(){return new JSJaCJID(this.getFrom());};JSJaCPacket.prototype.getID=function(){return this.getNode().getAttribute('id');};JSJaCPacket.prototype.getType=function(){return this.getNode().getAttribute('type');};JSJaCPacket.prototype.getXMLLang=function(){return this.getNode().getAttribute('xml:lang');};JSJaCPacket.prototype.getXMLNS=function(){return this.getNode().namespaceURI;};JSJaCPacket.prototype.getChild=function(name,ns){if(!this.getNode()){return null;}
name=name||'*';ns=ns||'*';if(this.getNode().getElementsByTagNameNS){return this.getNode().getElementsByTagNameNS(ns,name).item(0);}
var nodes=this.getNode().getElementsByTagName(name);if(ns!='*'){for(var i=0;i<nodes.length;i++){if(nodes.item(i).namespaceURI==ns){return nodes.item(i);}}}else{return nodes.item(0);}
return null;}
JSJaCPacket.prototype.getChildVal=function(name,ns){var node=this.getChild(name,ns);if(node&&node.firstChild){return node.firstChild.nodeValue;}else{return'';}};JSJaCPacket.prototype.clone=function(){return JSJaCPacket.wrapNode(this.getNode());};JSJaCPacket.prototype.isError=function(){return(this.getType()=='error');};JSJaCPacket.prototype.errorReply=function(stanza_error){var rPacket=this.clone();rPacket.setTo(this.getFrom());rPacket.setFrom();rPacket.setType('error');rPacket.appendNode('error',{code:stanza_error.code,type:stanza_error.type},[[stanza_error.cond]]);return rPacket;};JSJaCPacket.prototype.xml=function(){if(this.getDoc().xml)
return this.getDoc().xml;var xml=(new XMLSerializer()).serializeToString(this.getNode());if(typeof(xml)!='undefined')
return xml;return(new XMLSerializer()).serializeToString(this.doc);};JSJaCPacket.prototype._getAttribute=function(attr){return this.getNode().getAttribute(attr);};JSJaCPacket.prototype._replaceNode=function(aNode){for(var i=0;i<aNode.attributes.length;i++)
if(aNode.attributes.item(i).nodeName!='xmlns')
this.getNode().setAttribute(aNode.attributes.item(i).nodeName,aNode.attributes.item(i).nodeValue);for(var i=0;i<aNode.childNodes.length;i++)
if(this.getDoc().importNode)
this.getNode().appendChild(this.getDoc().importNode(aNode.childNodes.item(i),true));else
this.getNode().appendChild(aNode.childNodes.item(i).cloneNode(true));};JSJaCPacket.prototype._setChildNode=function(nodeName,nodeValue){var aNode=this.getChild(nodeName);var tNode=this.getDoc().createTextNode(nodeValue);if(aNode)
try{aNode.replaceChild(tNode,aNode.firstChild);}catch(e){}
else{aNode=this.getNode().appendChild(this.getDoc().createElement(nodeName));aNode.appendChild(tNode);}
return aNode;};JSJaCPacket.prototype.buildNode=function(elementName){return JSJaCBuilder.buildNode(this.getDoc(),elementName,arguments[1],arguments[2]);};JSJaCPacket.prototype.appendNode=function(element){if(typeof element=='object'){return this.getNode().appendChild(element)}else{return this.getNode().appendChild(this.buildNode(element,arguments[1],arguments[2]));}};function JSJaCPresence(){this.base=JSJaCPacket;this.base('presence');}
JSJaCPresence.prototype=new JSJaCPacket;JSJaCPresence.prototype.setStatus=function(status){this._setChildNode("status",status);return this;};JSJaCPresence.prototype.setShow=function(show){if(show=='chat'||show=='away'||show=='xa'||show=='dnd')
this._setChildNode("show",show);return this;};JSJaCPresence.prototype.setPriority=function(prio){this._setChildNode("priority",prio);return this;};JSJaCPresence.prototype.setPresence=function(show,status,prio){if(show)
this.setShow(show);if(status)
this.setStatus(status);if(prio)
this.setPriority(prio);return this;};JSJaCPresence.prototype.getStatus=function(){return this.getChildVal('status');};JSJaCPresence.prototype.getShow=function(){return this.getChildVal('show');};JSJaCPresence.prototype.getPriority=function(){return this.getChildVal('priority');};function JSJaCIQ(){this.base=JSJaCPacket;this.base('iq');}
JSJaCIQ.prototype=new JSJaCPacket;JSJaCIQ.prototype.setIQ=function(to,type,id){if(to)
this.setTo(to);if(type)
this.setType(type);if(id)
this.setID(id);return this;};JSJaCIQ.prototype.setQuery=function(xmlns){var query;try{query=this.getDoc().createElementNS(xmlns,'query');}catch(e){query=this.getDoc().createElement('query');}
if(query&&query.getAttribute('xmlns')!=xmlns)
query.setAttribute('xmlns',xmlns);this.getNode().appendChild(query);return query;};JSJaCIQ.prototype.getQuery=function(){return this.getNode().getElementsByTagName('query').item(0);};JSJaCIQ.prototype.getQueryXMLNS=function(){if(this.getQuery())
return this.getQuery().namespaceURI;else
return null;};JSJaCIQ.prototype.reply=function(payload){var rIQ=this.clone();rIQ.setTo(this.getFrom());rIQ.setType('result');if(payload){if(typeof payload=='string')
rIQ.getChild.appendChild(rIQ.getDoc().loadXML(payload));else if(payload.constructor==Array){var node=rIQ.getChild();for(var i=0;i<payload.length;i++)
if(typeof payload[i]=='string')
node.appendChild(rIQ.getDoc().loadXML(payload[i]));else if(typeof payload[i]=='object')
node.appendChild(payload[i]);}
else if(typeof payload=='object')
rIQ.getChild().appendChild(payload);}
return rIQ;};function JSJaCMessage(){this.base=JSJaCPacket;this.base('message');}
JSJaCMessage.prototype=new JSJaCPacket;JSJaCMessage.prototype.setBody=function(body){this._setChildNode("body",body);return this;};JSJaCMessage.prototype.setSubject=function(subject){this._setChildNode("subject",subject);return this;};JSJaCMessage.prototype.setThread=function(thread){this._setChildNode("thread",thread);return this;};JSJaCMessage.prototype.getThread=function(){return this.getChildVal('thread');};JSJaCMessage.prototype.getBody=function(){return this.getChildVal('body');};JSJaCMessage.prototype.getSubject=function(){return this.getChildVal('subject')};JSJaCPacket.wrapNode=function(node){var aNode;switch(node.nodeName.toLowerCase()){case'presence':aNode=new JSJaCPresence();break;case'message':aNode=new JSJaCMessage();break;case'iq':aNode=new JSJaCIQ();break;default:return null;}
aNode._replaceNode(node);return aNode;};function JSJaCHttpBindingConnection(oArg){this.base=JSJaCConnection;this.base(oArg);this._hold=JSJACHBC_MAX_HOLD;this._inactivity=0;this._last_requests=new Object();this._last_rid=0;this._min_polling=0;this._pause=0;this._wait=JSJACHBC_MAX_WAIT;}
JSJaCHttpBindingConnection.prototype=new JSJaCConnection();JSJaCHttpBindingConnection.prototype.inherit=function(oArg){this.domain=oArg.domain||'localhost';this.username=oArg.username;this.resource=oArg.resource;this._sid=oArg.sid;this._rid=oArg.rid;this._min_polling=oArg.polling;this._inactivity=oArg.inactivity;this._setHold(oArg.requests-1);this.setPollInterval(this._timerval);if(oArg.wait)
this._wait=oArg.wait;this._connected=true;this._handleEvent('onconnect');this._interval=setInterval(JSJaC.bind(this._checkQueue,this),JSJAC_CHECKQUEUEINTERVAL);this._inQto=setInterval(JSJaC.bind(this._checkInQ,this),JSJAC_CHECKINQUEUEINTERVAL);this._timeout=setTimeout(JSJaC.bind(this._process,this),this.getPollInterval());};JSJaCHttpBindingConnection.prototype.setPollInterval=function(timerval){if(timerval&&!isNaN(timerval)){if(!this.isPolling())
this._timerval=100;else if(this._min_polling&&timerval<this._min_polling*1000)
this._timerval=this._min_polling*1000;else if(this._inactivity&&timerval>this._inactivity*1000)
this._timerval=this._inactivity*1000;else
this._timerval=timerval;}
return this._timerval;};JSJaCHttpBindingConnection.prototype.isPolling=function(){return(this._hold==0)};JSJaCHttpBindingConnection.prototype._getFreeSlot=function(){for(var i=0;i<this._hold+1;i++)
if(typeof(this._req[i])=='undefined'||typeof(this._req[i].r)=='undefined'||this._req[i].r.readyState==4)
return i;return-1;};JSJaCHttpBindingConnection.prototype._getHold=function(){return this._hold;};JSJaCHttpBindingConnection.prototype._getRequestString=function(raw,last){raw=raw||'';var reqstr='';if(this._rid<=this._last_rid&&typeof(this._last_requests[this._rid])!='undefined')
reqstr=this._last_requests[this._rid].xml;else{var xml='';while(this._pQueue.length){var curNode=this._pQueue[0];xml+=curNode;this._pQueue=this._pQueue.slice(1,this._pQueue.length);}
reqstr="<body rid='"+this._rid+"' sid='"+this._sid+"' xmlns='http://jabber.org/protocol/httpbind' ";if(JSJAC_HAVEKEYS){reqstr+="key='"+this._keys.getKey()+"' ";if(this._keys.lastKey()){this._keys=new JSJaCKeys(hex_sha1,this.oDbg);reqstr+="newkey='"+this._keys.getKey()+"' ";}}
if(last)
reqstr+="type='terminate' ";else if(this._reinit){if(JSJACHBC_USE_BOSH_VER)
reqstr+="xmpp:restart='true' ";this._reinit=false;}
if(xml!=''||raw!=''){reqstr+=">"+raw+xml+"</body>";}else{reqstr+="/>";}
this._last_requests[this._rid]=new Object();this._last_requests[this._rid].xml=reqstr;this._last_rid=this._rid;for(var i in this._last_requests)
if(this._last_requests.hasOwnProperty(i)&&i<this._rid-this._hold)
delete(this._last_requests[i]);}
return reqstr;};JSJaCHttpBindingConnection.prototype._getInitialRequestString=function(){var reqstr="<body hold='"+this._hold+"' xmlns='http://jabber.org/protocol/httpbind' to='"+this.authhost+"' wait='"+this._wait+"' rid='"+this._rid+"'";if(this.host||this.port)
reqstr+=" route='xmpp:"+this.host+":"+this.port+"'";if(this.secure)
reqstr+=" secure='"+this.secure+"'";if(JSJAC_HAVEKEYS){this._keys=new JSJaCKeys(hex_sha1,this.oDbg);key=this._keys.getKey();reqstr+=" newkey='"+key+"'";}
if(this._xmllang)
reqstr+=" xml:lang='"+this._xmllang+"'";if(JSJACHBC_USE_BOSH_VER){reqstr+=" ver='"+JSJACHBC_BOSH_VERSION+"'";reqstr+=" xmpp:xmlns='urn:xmpp:xbosh'";if(this.authtype=='sasl'||this.authtype=='saslanon')
reqstr+=" xmpp:version='1.0'";}
reqstr+="/>";return reqstr;};JSJaCHttpBindingConnection.prototype._getStreamID=function(slot){this.oDbg.log(this._req[slot].r.responseText,4);if(!this._req[slot].r.responseXML||!this._req[slot].r.responseXML.documentElement){this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));return;}
var body=this._req[slot].r.responseXML.documentElement;if(body.getAttribute('authid')){this.streamid=body.getAttribute('authid');this.oDbg.log("got streamid: "+this.streamid,2);}else{this._timeout=setTimeout(JSJaC.bind(this._sendEmpty,this),this.getPollInterval());return;}
this._timeout=setTimeout(JSJaC.bind(this._process,this),this.getPollInterval());if(!this._parseStreamFeatures(body))
return;if(this.register)
this._doInBandReg();else
this._doAuth();};JSJaCHttpBindingConnection.prototype._getSuspendVars=function(){return('host,port,secure,_rid,_last_rid,_wait,_min_polling,_inactivity,_hold,_last_requests,_pause').split(',');};JSJaCHttpBindingConnection.prototype._handleInitialResponse=function(slot){try{this.oDbg.log(this._req[slot].r.getAllResponseHeaders(),4);this.oDbg.log(this._req[slot].r.responseText,4);}catch(ex){this.oDbg.log("No response",4);}
if(this._req[slot].r.status!=200||!this._req[slot].r.responseXML){this.oDbg.log("initial response broken (status: "+this._req[slot].r.status+")",1);this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));return;}
var body=this._req[slot].r.responseXML.documentElement;if(!body||body.tagName!='body'||body.namespaceURI!='http://jabber.org/protocol/httpbind'){this.oDbg.log("no body element or incorrect body in initial response",1);this._handleEvent("onerror",JSJaCError("500","wait","internal-service-error"));return;}
if(body.getAttribute("type")=="terminate"){this.oDbg.log("invalid response:\n"+this._req[slot].r.responseText,1);clearTimeout(this._timeout);this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));return;}
this._sid=body.getAttribute('sid');this.oDbg.log("got sid: "+this._sid,2);if(body.getAttribute('polling'))
this._min_polling=body.getAttribute('polling');if(body.getAttribute('inactivity'))
this._inactivity=body.getAttribute('inactivity');if(body.getAttribute('requests'))
this._setHold(body.getAttribute('requests')-1);this.oDbg.log("set hold to "+this._getHold(),2);if(body.getAttribute('ver'))
this._bosh_version=body.getAttribute('ver');if(body.getAttribute('maxpause'))
this._pause=Number.max(body.getAttribute('maxpause'),JSJACHBC_MAXPAUSE);this.setPollInterval(this._timerval);this._connected=true;this._inQto=setInterval(JSJaC.bind(this._checkInQ,this),JSJAC_CHECKINQUEUEINTERVAL);this._interval=setInterval(JSJaC.bind(this._checkQueue,this),JSJAC_CHECKQUEUEINTERVAL);this._getStreamID(slot);};JSJaCHttpBindingConnection.prototype._parseResponse=function(req){if(!this.connected()||!req)
return null;var r=req.r;try{if(r.status==404||r.status==403){this._abort();return null;}
if(r.status!=200||!r.responseXML){this._errcnt++;var errmsg="invalid response ("+r.status+"):\n"+r.getAllResponseHeaders()+"\n"+r.responseText;if(!r.responseXML)
errmsg+="\nResponse failed to parse!";this.oDbg.log(errmsg,1);if(this._errcnt>JSJAC_ERR_COUNT){this._abort();return null;}
this.oDbg.log("repeating ("+this._errcnt+")",1);this._setStatus('proto_error_fallback');setTimeout(JSJaC.bind(this._resume,this),this.getPollInterval());return null;}}catch(e){this.oDbg.log("XMLHttpRequest error: status not available",1);this._errcnt++;if(this._errcnt>JSJAC_ERR_COUNT){this._abort();}else{this.oDbg.log("repeating ("+this._errcnt+")",1);this._setStatus('proto_error_fallback');setTimeout(JSJaC.bind(this._resume,this),this.getPollInterval());}
return null;}
var body=r.responseXML.documentElement;if(!body||body.tagName!='body'||body.namespaceURI!='http://jabber.org/protocol/httpbind'){this.oDbg.log("invalid response:\n"+r.responseText,1);clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');this._setStatus('internal_server_error');this._handleEvent('onerror',JSJaCError('500','wait','internal-server-error'));return null;}
if(typeof(req.rid)!='undefined'&&this._last_requests[req.rid]){if(this._last_requests[req.rid].handled){this.oDbg.log("already handled "+req.rid,2);return null;}else
this._last_requests[req.rid].handled=true;}
if(body.getAttribute("type")=="terminate"){this.oDbg.log("session terminated:\n"+r.responseText,1);clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);if(body.getAttribute("condition")=="remote-stream-error")
if(body.getElementsByTagName("conflict").length>0)
this._setStatus("session-terminate-conflict");this._handleEvent('onerror',JSJaCError('503','cancel',body.getAttribute('condition')));this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');return null;}
this._errcnt=0;return r.responseXML.documentElement;};JSJaCHttpBindingConnection.prototype._reInitStream=function(to,cb,arg){this._reinit=true;cb.call(this,arg);};JSJaCHttpBindingConnection.prototype._resume=function(){if(this._pause==0&&this._rid>=this._last_rid)
this._rid=this._last_rid-1;this._process();};JSJaCHttpBindingConnection.prototype._setHold=function(hold){if(!hold||isNaN(hold)||hold<0)
hold=0;else if(hold>JSJACHBC_MAX_HOLD)
hold=JSJACHBC_MAX_HOLD;this._hold=hold;return this._hold;};JSJaCHttpBindingConnection.prototype._setupRequest=function(async){var req=new Object();var r=XmlHttp.create();try{r.open("POST",this._httpbase,async);r.setRequestHeader('Content-Type','text/xml; charset=utf-8');}catch(e){this.oDbg.log(e,1);}
req.r=r;this._rid++;req.rid=this._rid;return req;};JSJaCHttpBindingConnection.prototype._suspend=function(){if(this._pause==0)
return;var slot=this._getFreeSlot();this._req[slot]=this._setupRequest(false);var reqstr="<body pause='"+this._pause+"' xmlns='http://jabber.org/protocol/httpbind' sid='"+this._sid+"' rid='"+this._rid+"'";if(JSJAC_HAVEKEYS){reqstr+=" key='"+this._keys.getKey()+"'";if(this._keys.lastKey()){this._keys=new JSJaCKeys(hex_sha1,this.oDbg);reqstr+=" newkey='"+this._keys.getKey()+"'";}}
reqstr+=">";while(this._pQueue.length){var curNode=this._pQueue[0];reqstr+=curNode;this._pQueue=this._pQueue.slice(1,this._pQueue.length);}
reqstr+="</body>";this.oDbg.log("Disconnecting: "+reqstr,4);this._req[slot].r.send(reqstr);};function JSJaCHttpPollingConnection(oArg){this.base=JSJaCConnection;this.base(oArg);JSJACPACKET_USE_XMLNS=false;}
JSJaCHttpPollingConnection.prototype=new JSJaCConnection();JSJaCHttpPollingConnection.prototype.isPolling=function(){return true;};JSJaCHttpPollingConnection.prototype._getFreeSlot=function(){if(typeof(this._req[0])=='undefined'||typeof(this._req[0].r)=='undefined'||this._req[0].r.readyState==4)
return 0;else
return-1;};JSJaCHttpPollingConnection.prototype._getInitialRequestString=function(){var reqstr="0";if(JSJAC_HAVEKEYS){this._keys=new JSJaCKeys(b64_sha1,this.oDbg);key=this._keys.getKey();reqstr+=";"+key;}
var streamto=this.domain;if(this.authhost)
streamto=this.authhost;reqstr+=",<stream:stream to='"+streamto+"' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'";if(this.authtype=='sasl'||this.authtype=='saslanon')
reqstr+=" version='1.0'";reqstr+=">";return reqstr;};JSJaCHttpPollingConnection.prototype._getRequestString=function(raw,last){var reqstr=this._sid;if(JSJAC_HAVEKEYS){reqstr+=";"+this._keys.getKey();if(this._keys.lastKey()){this._keys=new JSJaCKeys(b64_sha1,this.oDbg);reqstr+=';'+this._keys.getKey();}}
reqstr+=',';if(raw)
reqstr+=raw;while(this._pQueue.length){reqstr+=this._pQueue[0];this._pQueue=this._pQueue.slice(1,this._pQueue.length);}
if(last)
reqstr+='</stream:stream>';return reqstr;};JSJaCHttpPollingConnection.prototype._getStreamID=function(){if(this._req[0].r.responseText==''){this.oDbg.log("waiting for stream id",2);this._timeout=setTimeout(JSJaC.bind(this._sendEmpty,this),1000);return;}
this.oDbg.log(this._req[0].r.responseText,4);if(this._req[0].r.responseText.match(/id=[\'\"]([^\'\"]+)[\'\"]/))
this.streamid=RegExp.$1;this.oDbg.log("got streamid: "+this.streamid,2);var doc;try{var response=this._req[0].r.responseText;if(!response.match(/<\/stream:stream>\s*$/))
response+='</stream:stream>';doc=XmlDocument.create("doc");doc.loadXML(response);if(!this._parseStreamFeatures(doc))
return;}catch(e){this.oDbg.log("loadXML: "+e.toString(),1);}
this._connected=true;if(this.register)
this._doInBandReg();else
this._doAuth();this._process(this._timerval);};JSJaCHttpPollingConnection.prototype._getSuspendVars=function(){return new Array();};JSJaCHttpPollingConnection.prototype._handleInitialResponse=function(){this.oDbg.log(this._req[0].r.getAllResponseHeaders(),4);var aPList=this._req[0].r.getResponseHeader('Set-Cookie');aPList=aPList.split(";");for(var i=0;i<aPList.length;i++){aArg=aPList[i].split("=");if(aArg[0]=='ID')
this._sid=aArg[1];}
this.oDbg.log("got sid: "+this._sid,2);this._connected=true;this._interval=setInterval(JSJaC.bind(this._checkQueue,this),JSJAC_CHECKQUEUEINTERVAL);this._inQto=setInterval(JSJaC.bind(this._checkInQ,this),JSJAC_CHECKINQUEUEINTERVAL);this._getStreamID();};JSJaCHttpPollingConnection.prototype._parseResponse=function(r){var req=r.r;if(!this.connected())
return null;if(req.status!=200){this.oDbg.log("invalid response ("+req.status+"):"+req.responseText+"\n"+req.getAllResponseHeaders(),1);this._setStatus('internal_server_error');clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');this._handleEvent('onerror',JSJaCError('503','cancel','service-unavailable'));return null;}
this.oDbg.log(req.getAllResponseHeaders(),4);var sid,aPList=req.getResponseHeader('Set-Cookie');if(aPList==null)
sid="-1:0";else{aPList=aPList.split(";");var sid;for(var i=0;i<aPList.length;i++){var aArg=aPList[i].split("=");if(aArg[0]=='ID')
sid=aArg[1];}}
if(typeof(sid)!='undefined'&&sid.indexOf(':0')!=-1){switch(sid.substring(0,sid.indexOf(':0'))){case'0':this.oDbg.log("invalid response:"+req.responseText,1);break;case'-1':this.oDbg.log("Internal Server Error",1);break;case'-2':this.oDbg.log("Bad Request",1);break;case'-3':this.oDbg.log("Key Sequence Error",1);break;}
this._setStatus('internal_server_error');clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);this._handleEvent('onerror',JSJaCError('500','wait','internal-server-error'));this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');return null;}
if(!req.responseText||req.responseText=='')
return null;try{var response=req.responseText.replace(/\<\?xml.+\?\>/,"");if(response.match(/<stream:stream/))
response+="</stream:stream>";var doc=JSJaCHttpPollingConnection._parseTree("<body>"+response+"</body>");if(!doc||doc.tagName=='parsererror'){this.oDbg.log("parsererror",1);doc=JSJaCHttpPollingConnection._parseTree("<stream:stream xmlns:stream='http://etherx.jabber.org/streams'>"+req.responseText);if(doc&&doc.tagName!='parsererror'){this.oDbg.log("stream closed",1);if(doc.getElementsByTagName('conflict').length>0)
this._setStatus("session-terminate-conflict");clearTimeout(this._timeout);clearInterval(this._interval);clearInterval(this._inQto);this._handleEvent('onerror',JSJaCError('503','cancel','session-terminate'));this._connected=false;this.oDbg.log("Disconnected.",1);this._handleEvent('ondisconnect');}else
this.oDbg.log("parsererror:"+doc,1);return doc;}
return doc;}catch(e){this.oDbg.log("parse error:"+e.message,1);}
return null;;};JSJaCHttpPollingConnection.prototype._reInitStream=function(to,cb,arg){this._sendRaw("<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='"+to+"' version='1.0'>",cb,arg);};JSJaCHttpPollingConnection.prototype._resume=function(){this._process(this._timerval);};JSJaCHttpPollingConnection.prototype._setupRequest=function(async){var r=XmlHttp.create();try{r.open("POST",this._httpbase,async);if(r.overrideMimeType)
r.overrideMimeType('text/plain; charset=utf-8');r.setRequestHeader('Content-Type','application/x-www-form-urlencoded');}catch(e){this.oDbg.log(e,1);}
var req=new Object();req.r=r;return req;};JSJaCHttpPollingConnection.prototype._suspend=function(){};JSJaCHttpPollingConnection._parseTree=function(s){try{var r=XmlDocument.create("body","foo");if(typeof(r.loadXML)!='undefined'){r.loadXML(s);return r.documentElement;}else if(window.DOMParser)
return(new DOMParser()).parseFromString(s,"text/xml").documentElement;}catch(e){}
return null;};var JSJaC={Version:'1.3',require:function(libraryName){document.write('<script type="text/javascript" src="'+libraryName+'"></script>');},load:function(){var includes=['xmlextras','jsextras','crypt','JSJaCConfig','JSJaCConstants','JSJaCCookie','JSJaCJSON','JSJaCJID','JSJaCBuilder','JSJaCPacket','JSJaCError','JSJaCKeys','JSJaCConnection','JSJaCHttpPollingConnection','JSJaCHttpBindingConnection','JSJaCConsoleLogger'];var scripts=document.getElementsByTagName("script");var path='./';for(var i=0;i<scripts.length;i++){if(scripts.item(i).src&&scripts.item(i).src.match(/JSJaC\.js$/)){path=scripts.item(i).src.replace(/JSJaC.js$/,'');break;}}
for(var i=0;i<includes.length;i++)
this.require(path+includes[i]+'.js');},bind:function(fn,obj,arg){return function(){if(arg)
fn.apply(obj,arg);else
fn.apply(obj);};}};if(typeof JSJaCConnection=='undefined')
JSJaC.load();var gJabberConnection=new JabberConnection();function JabberConnection(){this.httpBindDomain=window.location.hostname;this.httpBindPath="/httpbind/JHB/";this.resource="web";this.httpbase=g_app_server+this.httpBindPath;this.feature={chat:"chat",rc:"rc",consult:"consult"}
this.supportSpaceUsername="supportspace"+'@'+g_jabber_domain;this.jabberConnector=null;this.nbOfConnectionRetries=0;this.maxConnectionRetries=g_nbRetriesJabberConnection;this.isTryingToReconnect=false;this.nbOfJSDisconnections=0;this.keepAlivePeriodExec=0;this.selfKeepAlivePeriodExec=null;this.selfKeepAliveTimer=0;this.currentPriorityOfFlashConnectionType=0;this.shouldUseJSAsFallback=g_ConnectionMode=='FlashXiff';this.currentConnectionMode="";this.isResourceConflictError=false;}
JabberConnection.prototype.doLogin=function(oCallback)
{if(oCallback){this.connectionCallback=oCallback;}
this.connectionType="";debug_connection('g_ConnectionMode='+g_ConnectionMode);if(g_ConnectionMode!='JSJac'){if(this.isSwfLoaded()){this.chooseConnection();}else{this.retryConnection.bind(this).delay(2);}}else{debug_connection('Using JSJac by configuration');this.doLogin_jsjac();}};JabberConnection.prototype.isSwfLoaded=function(){return $('jabberConnector')&&$('jabberConnector').connectToJabberServer;};JabberConnection.prototype.chooseConnection=function(){switch(this.currentPriorityOfFlashConnectionType){case 0:this.initFlashObject();this.doLogin_flash(g_jabberFlashPrimaryConnectionType);break;case 1:if(g_jabberFlashSecondaryConnectionType!=""&&g_jabberFlashSecondaryConnectionType!="none"){this.doLogin_flash(g_jabberFlashSecondaryConnectionType);}else if(this.shouldUseJSAsFallback){this.doLogin_jsjac();}else{this.handleError("jabber connection failed: "+g_jabberFlashPrimaryConnectionType);}
break;case 2:if(this.shouldUseJSAsFallback){this.doLogin_jsjac();}else{this.handleError("jabber connection failed: "+g_jabberFlashSecondaryConnectionType);}
break;}};JabberConnection.prototype.retryConnection=function(){if(this.isSwfLoaded()){this.chooseConnection();}else{debug_connection('Flash object not found');if(this.shouldUseJSAsFallback){this.doLogin_jsjac();}else{this.handleError("jabber connection failed - probably no flash exists.");}}};JabberConnection.prototype.initFlashObject=function(){this.jabberConnector=$('jabberConnector');this.jabberConnector.setKeepAliveInterval(g_keepAliveInterval);};JabberConnection.prototype.prepareFlashConnector=function(){this.jabberConnector.setSocketConnectionTimeout(g_connectionTimeout);this.jabberConnector.setMyJabberUsername(gCurrentUser.jabberUserName);this.jabberConnector.setMyJabberPassword(gCurrentUser.jabberPassword);this.jabberConnector.setKeepAliveInterval(g_keepAliveInterval);};JabberConnection.prototype.doLogin_flash=function(connectionType){debug_connection('Connecting with flash '+connectionType);this.connectionType=connectionType;if(connectionType=="socket"){this.jabberConnector.createConnection("socket");}else if(connectionType=="bosh"){this.jabberConnector.createConnection("http",80,this.resource,this.httpBindDomain,this.httpBindPath);}
this.prepareFlashConnector();this.currentConnectionMode=g_ConnectionMode;$("jabberConnector").connectToJabberServer(g_jabber_domain,true);};JabberConnection.prototype.doLogin_jsjac=function()
{if(g_ConnectionMode=='FlashXiffOnly')
return;this.currentConnectionMode='JSJac';debug_connection('Connecting with jsjac');try{var oArgs=new Object();oArgs.httpbase=this.httpbase;oArgs.timerval=3000;this.jabberConnector=new JSJaCHttpBindingConnection(oArgs);if(typeof(handleMessage_jsjac)!=typeof(undefined)){this.jabberConnector.registerHandler('message',handleMessage_jsjac);}
this.jabberConnector.registerHandler('presence',this.handlePresence.bind(this));this.jabberConnector.registerHandler('iq',this.handleEvent.bind(this));this.jabberConnector.registerHandler('onconnect',function(){this.handleConnected("JsJac")}.bind(this));this.jabberConnector.registerHandler('onerror',this.handleError.bind(this));this.jabberConnector.registerHandler('status_changed',this.handleStatusChanged.bind(this));this.jabberConnector.registerHandler('ondisconnect',function(){this.handleDisconnected("JsJac")}.bind(this));oArgs=new Object();oArgs.domain=g_jabber_domain;oArgs.username=gCurrentUser.jabberUserName;oArgs.resource=this.resource;oArgs.pass=gCurrentUser.jabberPassword;this.jabberConnector.connect(oArgs);if(!this.isTryingToReconnect){logme("Connecting with JsJac to "+g_jabber_domain+" jabberUsername:"+gCurrentUser.jabberUserName+" NbRetries="+this.nbOfConnectionRetries)}}catch(e){debug_connection(e.toString());logme("Connection failed with JsJac to "+g_jabber_domain+" jabberUsername:"+gCurrentUser.jabberUserName+" NbRetries="+this.nbOfConnectionRetries+" : error "+e.description);return false;}
return true;}
JabberConnection.prototype.reconnect=function()
{this.stopReconnectProcess();if(!this.isTryingToReconnect){this.isTryingToReconnect=true;this.nbOfConnectionRetries=0;}
var delayForReconnect=3000;setTimeout(this.do_reconnect.bind(this),delayForReconnect);}
JabberConnection.prototype.do_reconnect=function()
{if(this.nbOfConnectionRetries<this.maxConnectionRetries){this.isTryingToReconnect=true;logme("reconnecting - "+this.nbOfConnectionRetries+"/"+this.maxConnectionRetries+" jabberUsername:"+gCurrentUser.jabberUserName);this.nbOfConnectionRetries++;this.doLogin();}else{logme("no more retries to reconnect for user "+gCurrentUser.jabberUserName);this.isTryingToReconnect=false;this.failoverConnectionType();}}
JabberConnection.prototype.failoverConnectionType=function()
{this.currentPriorityOfFlashConnectionType++;this.doLogin();}
JabberConnection.prototype.handleMessage=function(subject,body,from,threadId)
{debug_connection('handleMessage called');if(isUndefined(subject))subject='';if(isUndefined(body))body='';if(isUndefined(from))from='';if(isUndefined(threadId))threadId='';var aJSJaCPacket=new Object();aJSJaCPacket.getSubject=function(){return subject;};aJSJaCPacket.getBody=function(){return unescape(body);};aJSJaCPacket.getFrom=function(){return from;};aJSJaCPacket.getThread=function(){return threadId;};handleMessage_jsjac(aJSJaCPacket);}
JabberConnection.prototype.handleEvent=function(aJSJaCPacket){debug_connection("IN (raw):<br/>"+htmlEnc(aJSJaCPacket.xml())+'<hr noshade size="1"/>');}
JabberConnection.prototype.handlePresence=function(aJSJaCPacket){var presenceRawName=aJSJaCPacket.getFrom();var presenceName=presenceRawName.substring(0,presenceRawName.indexOf('@'));var msg=presenceName;if(!aJSJaCPacket.getType()&&!aJSJaCPacket.getShow())
msg+=gJabberStrings.become_available;else{msg+=gJabberStrings.set_precence;if(aJSJaCPacket.getType())
msg+=aJSJaCPacket.getType();else
msg+=aJSJaCPacket.getShow();if(aJSJaCPacket.getStatus())
msg+=aJSJaCPacket.getStatus();}
debug_connection("handlePresence - "+msg);};JabberConnection.prototype.handleConnected=function(withwhat){this.isTryingToReconnect=false;this.stopReconnectProcess();debug_connection("user "+gCurrentUser.jabberUserName+" is connected with "+withwhat);logme("user "+gCurrentUser.jabberUserName+" is connected with "+withwhat);if(gS2StartSession.disconnectedByUser){debug_connection("user "+gCurrentUser.jabberUserName+" is going to be disconnected (disconnectedByUser)");this.jabberDisconnect();return;}
if(gCurrentUser.isSupporter)
{if(typeof(gSessionContextManager)!="undefined"){var sessionIdList=gSessionContextManager.getSupportSessionIdList();if(gLastSessionEvent==SE_SJB_DISCONNECT)
saveSessionEvent({user:gCurrentUser,event:{action:SE_SJB_RECONNECT,description:"Expert reconnected after disconnection with "+withwhat},sessionIdList:sessionIdList})
else
saveSessionEvent({user:gCurrentUser,event:{action:SE_SJB_CONNECT,description:"Expert connected to the Jabber server with "+withwhat+" - system:"+navigator.userAgent},sessionIdList:sessionIdList})}}
else
{debug_connection("Connected with flash");if(this.connectionType!="socket"&&gMustWaitForGettingSelfKeepAliveToStartSession){this.sendSelfKeepAlive();if(this.selfKeepAlivePeriodExec==null){debug_connection("Starting sendSelfKeepAlive PeriodicalExecuter");this.selfKeepAlivePeriodExec=new PeriodicalExecuter(this.sendSelfKeepAlive.bind(this),3);}
this.selfKeepAliveTimer=function(){if(this.selfKeepAlivePeriodExec!=null){this.selfKeepAlivePeriodExec.stop();}
this.selfKeepAlivePeriodExec=null;gS2StartSession.popupStartSession({status:'sorry',reason:'ska_failure'});this.jabberDisconnect();saveSessionEvent({user:gCurrentUser,event:{action:SKA_FAILURE,description:"Message SELF_KEEP_ALIVE has not been received - ["+window.location.href+"] - "+navigator.userAgent}});}.bind(this).delay(20);}
if(gLastSessionEvent==SE_CJB_RECONNECT){saveSessionEvent({user:gCurrentUser,event:{action:SE_CJB_RECONNECT,description:"Service Page - Customer reconnected after disconnection with "+withwhat},sessionIdList:[g_support_sessionId]})}
else{saveSessionEvent({user:gCurrentUser,event:{action:SE_CJB_CONNECT,description:"Service Page - Customer connected to the Jabber server with "+withwhat+" - system:"+navigator.userAgent}});}}
if(gCurrentUser.isSupporter||!gMustWaitForGettingSelfKeepAliveToStartSession||this.connectionType=="socket"){if(this.connectionCallback){this.connectionCallback.onConnect();this.connectionCallback=null;}}
var jabberMode=(withwhat.indexOf("flash")>=0?"flash":"jsjac");if(jabberMode!="flash")
{debug_connection("Connected with JsJac");this.setConnectingStatus("Connected with JSJac");this.nbOfConnectionRetries=0;if(this.keepAlivePeriodExec==0)
this.keepAlivePeriodExec=new PeriodicalExecuter(this.sendKeepAlive.bind(this),g_keepAliveInterval);}};JabberConnection.prototype.handleStatusChanged=function(){debug_connection("handleStatusChanged");};JabberConnection.prototype.handleConnectionTimeoutEvent=function(){if(this.isTryingToReconnect){this.reconnect();}else{this.failoverConnectionType();}};JabberConnection.prototype.handleResourceConflictError=function(){this.isResourceConflictError=true;logme("Resource Conflict Error - "+gCurrentUser.jabberUserName);};JabberConnection.prototype.handleHTTPError=function(errorStr){if(g_ReconnectionProcessInterval>-1&&!this.isTryingToReconnect){logme("HTTP(Bind) Error - user: "+gCurrentUser.jabberUserName+" - connectionMode: "+this.currentConnectionMode+", g_ReconnectionTimeout = "+g_ReconnectionTimeout+"("+(errorStr?errorStr:"")+")");this.isTryingToReconnect=true;if(this.currentConnectionMode!="JSJac"){this.jabberConnector.setSocketConnectionTimeout(g_ReconnectionTimeout);}
this.startReconnectProcess();}};JabberConnection.prototype.startReconnectProcess=function(){this.stopReconnectProcess();this.doLogin();this.reconnectProcessInterval=new PeriodicalExecuter(function(){this.doLogin();}.bind(this),g_ReconnectionProcessInterval);};JabberConnection.prototype.stopReconnectProcess=function(){if(this.reconnectProcessInterval){this.reconnectProcessInterval.stop();}};JabberConnection.prototype.handleError=function(e){if(this.connectionCallback&&e){this.connectionCallback.errorHandler(e);}else{var errorStr=typeof(e)=="String"?e:e.xml?e.xml:"unknown error";this.handleHTTPError(errorStr);}};JabberConnection.prototype.handleDisconnected=function(withwhat,shouldTryToReconnect){logme("disconnected from "+withwhat+", jabberUsername:"+gCurrentUser.jabberUserName+", shouldTryToReconnect="+shouldTryToReconnect);if(withwhat.indexOf("flash")<0){this.nbOfJSDisconnections++;debug_connection("<b>Disconnected from JsJac</b>");}
else{if(gCurrentUser.isSupporter){var sessionIdList=gSessionContextManager.getSupportSessionIdList();saveSessionEvent({user:gCurrentUser,event:{action:SE_SJB_DISCONNECT,description:"Expert disconnected from"+withwhat},sessionIdList:sessionIdList})}else{saveSessionEvent({user:gCurrentUser,event:{action:SE_CJB_DISCONNECT,description:"Customer disconnected from "+withwhat},sessionIdList:[g_support_sessionId]})}}
if(shouldTryToReconnect){if(!this.isResourceConflictError){this.reconnect();}else{logme("will not reconnect due to resource conflict error - "+gCurrentUser.jabberUserName);}}}
JabberConnection.prototype.sendKeepAlive=function(){debug_connection(new Date()+":sendKeepAlive")
this.sendMsg(gJabberConnection.supportSpaceUsername,'KEEP_ALIVE','',-10);}
JabberConnection.prototype.sendSelfKeepAlive=function(){debug_connection(new Date()+":sendSelfKeepAlive");this.sendMsg(gJabberConnection.addJabberDomainSuffix(gCurrentUser.jabberUserName),'SELF_KEEP_ALIVE','SELF_KEEP_ALIVE',-100);}
JabberConnection.prototype.sendMsg=function(to,subject,body,threadId){debug_connection("sendMsg:subject="+subject+"-body="+body)
threadId=""+(threadId?threadId:(typeof(g_workflowId)!="undefined"?g_workflowId:-1));if($('jabberConnector')&&$('jabberConnector').sendMessage&&this.currentConnectionMode!='JSJac'){$('jabberConnector').sendMessage(body,subject,to,threadId);}else{this.sendMsg_jsjac(to,subject,body,threadId)}}
JabberConnection.prototype.sendMsg_jsjac=function(to,subject,body,threadId){var aMsg=new JSJaCMessage();aMsg.setTo(to);aMsg.setSubject(subject);aMsg.setBody(body);aMsg.setThread(threadId);if(this.jabberConnector.send)
this.jabberConnector.send(aMsg);}
JabberConnection.prototype.sendInitMsg=function(recipient,threadId)
{var to=recipient?recipient:gPartnerUser.jabberFullUserName;var body=Object.toJSON({event:"onload"});this.sendMsg(to,g_PAGE_EVENT,body,threadId);}
JabberConnection.prototype.sendUnblockMsg=function(recipient,workfowId)
{var body=Object.toJSON({event:"unblock"});this.sendMsg(recipient.jabberFullUserName,g_PAGE_EVENT,body,workfowId);}
JabberConnection.prototype.displayConnectionMessage=function(){}
JabberConnection.prototype.displayDisconnectMessage=function(){g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body=gJabberStrings.unable_to_connect;displayMessage(false,"dChatWindow");}
JabberConnection.prototype.setConnectingStatus=function(jabberStatus){if(!this.jabberConnector)
return;var presence=new JSJaCPresence();presence.setStatus(jabberStatus);if(this.jabberConnector.send)
this.jabberConnector.send(presence);}
JabberConnection.prototype.jabberDisconnect=function(){if(!this.jabberConnector)
return;if(this.currentConnectionMode=='JSJac')
{this.jabberConnector.disconnect();if(this.keepAlivePeriodExec)
this.keepAlivePeriodExec.stop();}
else if(this.jabberConnector.disconnectFromJabberServer){try{this.jabberConnector.disconnectFromJabberServer();}catch(e){logme("Unable to disconnect from Jabber ["+gCurrentUser.jabberUserName+"]");}}}
JabberConnection.prototype.addJabberDomainSuffix=function(jabberUser){return jabberUser+'@'+g_jabber_domain+'/'+this.resource;}
JabberConnection.prototype.getConnectionCallback=function(){return this.connectionCallback;}
JabberConnection.prototype.setConnectionCallback=function(callback){this.connectionCallback=callback;}
function flashunescape(str){return str.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%");}
function ChatMessage(){this.delimiter='|';}
ChatMessage.prototype.encode=function(sessionId,msg){return sessionId+this.delimiter+msg;}
ChatMessage.prototype.decode=function(str){if(isUndefined(str))
return"";return str.substring(str.indexOf(this.delimiter)+1);}
var g_FORWARD_OR_DISPATCH='';var g_PAGE_EVENT='page_event';var g_IS_TYPING='is_typing';var g_CUSTOMER_DISPATCH_REQUEST='customer_dispatch_request';var g_RCTV_REQUEST='rc_request';var g_RCWEBEX_REQUEST='rc_request_webex';var g_LOG_ME_IN='logMeIn';var ACCEPTED='accepted';var DECLINED='declined';var CALL='call';var CANCEL='cancel';var JBMSG_CREATING_JOBOFFER='creatingJobOffer';var JBMSG_JOBOFFER='jobOffer';var JBMSG_JOBOFFER_REJECTED='jobOfferRejected';var JBMSG_JOBOFFER_ACCEPTED='jobOfferAccepted';var JBMSG_JOBOFFER_CANCELED='jobOfferCanceled';var JBMSG_START_CONSULTING='startConsult';var JBMSG_STOP_CONSULTING='stopConsult';var JBMSG_LEAVESESSIONOPEN_APPROVE='leaveSessionOpenApprove';var JBMSG_LEAVESESSIONOPEN_DISAPPROVE='leaveSessionOpenDisapprove';var g_CHANGE_DESKTOP_SHARING_STATUS='changeDesktopSharingStatus';var g_SCOPE_OF_WORK_IS_SET='scopeOfWorkIsSet';var g_SESSION_TERMINATED='SESSION_TERMINATED';var g_SESSION_REPORT_STEP='sessionReportStep';var g_SESSION_REPORT_STEP_FROM_HAND_OFF='sessionReportStepFromHandOff';var g_SESSION_REPORT_STEP_FROM_LEAVE_OPEN='sessionReportStepFromLeaveOpen';var g_CASE_RESOLVED_CONFIRM='RESOLVED';var g_CASE_PARTIALLY_RESOLVED='PARTIALLY_RESOLVED';var g_FORWARD_CONFIRM='FORWARD';var g_CASE_CANTRESOLVE='CANT_RESOLVE';var g_CASE_UNRESOLVED_CANTFORWARD='UNRESOLVED_CANT_FORWARD';var g_CASE_UNRESOLVED_DISCONNECTED='UNRESOLVED_DISCONNECTED';var g_CASE_UNRESOLVED_LEFT_OPEN='UNRESOLVED_LEFT_OPEN';var g_START_NEW_SUPPORT_REQUEST_FLOW='START_NEW_SUPPORT_REQUEST_FLOW';var JBMSG_CUSTOMER_FEEDBACK='CUSTOMER_FEEDBACK';var g_CONSULT_NOTIFICATION_ENDED="stargate_consult_notification";var g_CONSULT_NOTIFICATION_TIMEOUT="stargate_consult_notification_timeout";var g_CUSTOMER_PAYED="customer_payed";var g_RESUME_SESSION_TIMEOUT="resume_session_timeout";var g_CUSTOMER_SOFTWARE_ACTIVATION="customer_software_activation";var RESOLUTION_SET="RESOLUTION_SET";var JBMSG_LOAD_CHECKLIST="sessionLoadCheckList";var JBMSG_CHECKLIST="sessionCheckListItem";var g_SUBMIT_CALL_REQUEST="submit_phone_call_request";var g_PHONE_CALL_STATUS="phone_call_status";var g_PHONE_CALL_DECLINED="call_declined_call_request";var g_PHONE_CALL_PROBLEM="call_problem";var g_PHONE_CALL_ENDED="call_ended";var g_PHONE_CALL_CALLING_EXPERT="call_expert";var g_PHONE_CALL_CALLING_YOU="call_you";var g_PHONE_CALL_TALKING="call_talking";var g_PHONE_CALL_EXPERT_BUSY="call_expert_busy";var g_PHONE_CALL_EXPERT_NOT_ANSWER="call_expert_not_answer";var g_PHONE_CALL_YOU_BUSY="call_you_busy";var g_PHONE_CALL_YOU_NOT_ANSWER="call_you_not_answer";var g_PHONE_CALL_CONGESTION="call_congestion";var g_PHONE_CALL_EXPERT_ENDED="call_expert_ended";var g_CONSULTANT_DISPATCH_REQUEST='consultant_dispatch_request';var g_FORWARD_EVENT='forward_event';var g_DISPATCH_EVENT='dispatch_event';var g_FORWARD_APPROVED_BY_CONSULTANT='forward_was_approved';var g_APPROVE_FORWARD='approve_forward';var g_INVALID_FORWARD='invalid_forward';var g_CALL_ME='call_me';var g_RC_AUTH='rc_auth';var g_RC_CANCEL='rc_cancel';var g_P2S_HANGUP='p2s_hangup';var g_P2S_HOLD_TRUE='p2s_hold_true';var g_P2S_HOLD_FALSE='p2s_hold_false';var g_P2S_BUSY='p2s_busy';var g_P2S_CLEAR='p2s_clear';var g_P2S_PHONE_PICKED_UP="p2s_phone_picked_up";var g_P2S_CALL_FAILURE="p2s_call_failure";var g_P2S_NOW_CALLING="p2s_now_calling";var g_DONT_BLINK=[g_IS_TYPING];var SUPPORT_REQUEST_ACCEPTED='SUPPORT_REQUEST_ACCEPTED';var JOB_OFFER_CREATION='JOB_OFFER_CREATION';var AGREE_JOB_OFFER='AGREE_JOB_OFFER';var PAY='PAY';var IN_SESSION='IN_SESSION';var CONSULTING='CONSULTING';var AWAITING_REPORT_APPROVAL='AWAITING_REPORT_APPROVAL';var SERVICE_REPORT_SUBMISSION_TASK='SERVICE_REPORT_SUBMISSION_TASK';var SESSION_ENDED='SESSION_ENDED';var REPORT_TASK='REPORT_TASK';var CUSTOMER_FEEDBACK='CUSTOMER_FEEDBACK';var END='END';var AWAITING_SESSION_RESUME_RESPONSE='AWAITING_SESSION_RESUME_RESPONSE';var AWAITING_RESUME_LEFT_OPEN_SESSION='AWAITING_RESUME_LEFT_OPEN_SESSION';var CONSULTANT_DISPATCHE_APPROVE='CONSULTANT_DISPATCHE_APPROVE';var CUSTOMER_DISPATCHE_APPROVE='CUSTOMER_DISPATCHE_APPROVE';var WAIT_FOR_CONSULT_RESPONSE='WAIT_FOR_CONSULT_RESPONSE';var CHAT_NOTIFICATION="CHAT_NOTIFICATION";var SUPPORTER_CREATING_JOBOFFER="SUPPORTER_CREATING_JOBOFFER";var CONSULTING_NOTIFICATION="CONSULTING_NOTIFICATION";var CONSULTING_NOTIFICATION_STOP="CONSULTING_NOTIFICATION_STOP";var SUPPORTER_DISCONNECTED="SUPPORTER_DISCONNECTED";var SUPPORTER_CONNECTED="SUPPORTER_CONNECTED";var PHONE_NOTIFICATION="PHONE_NOTIFICATION";var SERVICE_PAGE_WIDGET_ID="dCS";var PERMISSION_REQUEST="RequestPermision";var CUSTOMER="CUSTOMER";var SUPPORTER="SUPPORTER";var CONSULTANT="CONSULTANT";var g_PHONE="PHONE";var EXPERT_IDLE="EXPERT_IDLE";var CUSTOMER_IDLE="CUSTOMER_IDLE";var P2S_WAITING_FOR_SUPPORTER=1;var P2S_IN_CONVERSATION=2;var P2S_SUPPORTER_HANGUP=3;var CHECKLIST_NO_ANSWER="NO";var CHECKLIST_YES_ANSWER="YES";var CHECKLIST_NOT_COMPLETED="CHECKLIST_NOT_COMPLETED";function initSession(){if(DEBUG_CONNECTION){$('debug_log').show();}else{$('debug_log').hide();}}
function disableRequest(oElt,answerText)
{if(!oElt)return;var dRequest=$(oElt).up(1);var dResponses=$(oElt).up();var dCSChatMsg=dRequest.up('.dCSChatMsg');dCSChatMsg.style.color="#9A9A9A";dRequest.getElementsBySelector('input').each(function(elt){elt.disabled=true});var text=answerText?answerText:"";dResponses.style.color="#000000";dResponses.update(text);}
function S2Timer(time,elt,callback){if(!time)return;if(!callback)return;this.initialTime=time;this.time=this.initialTime*1000;this.callback=callback;this.args=Array.prototype.slice.call(arguments,3);this.timerH=null;this.internal_timerH=null;this.internal_timer=time;this.elt=elt;}
S2Timer.prototype=new Object;S2Timer.prototype.start=function(){if(this.timerH)
return;this.internal_timer=this.initialTime;this.timerH=setTimeout(this.timeExpired.bind(this),this.time);this.internal_timerH=setInterval(this.oneSecondPassed.bind(this),1000);}
S2Timer.prototype.stop=function(){clearTimeout(this.timerH);this.timerH=null;clearTimeout(this.internal_timerH);this.internal_timerH=null;}
S2Timer.prototype.restart=function(){this.stop();this.start();}
S2Timer.prototype.timeExpired=function(){this.stop();var str="";for(var i=0;i<this.args.length;i++)
str+="this.args["+i+"],";str=str.slice(0,str.length-1);eval("this.callback("+str+")");}
S2Timer.prototype.oneSecondPassed=function(){this.internal_timer--;this.display();}
S2Timer.prototype.display=function(){if(!$(this.elt))
return;$(this.elt).update(this.internal_timer);}
function evalJson(str){return isStrEmpty(str)?null:str.evalJSON();}
var g_Birthdate='';function showError(str,errorField)
{if(!gErrorDivs||!$(gErrorDivs.msg)||!$(gErrorDivs.ui))
{alert(str);return;}
if(str)
{$(gErrorDivs.msg).innerHTML=str;var index=str.indexOf("<br")==-1?str.length:str.indexOf("<br");$(gErrorDivs.msg).title=str.substr(0,index);$(gErrorDivs.ui).show();if(errorField){errorField.focus();}}
else
{$(gErrorDivs.msg).title="";$(gErrorDivs.ui).hide();}}
function validatePhoneNumber(phone)
{if(isPhoneNumberValid(phone)){return null;}
if(phone.length<7){return gSessionStrings.call_seven_digit_number_required;}
return gSessionStrings.call_invalid_number;}
function isPhoneNumberValid(phone)
{var len=phone.length;var re=/^\+?\d+([\+\-\.\s]?\d+)*$/;return((phone.match(re)!=null)&&len>=7&&len<=25);}
function setBirthdateValidation(birthdateId)
{var birthdate=$(birthdateId);if(!birthdate)
return;Event.observe(birthdate,'keydown',saveBirthdate)
Event.observe(birthdate,'keyup',checkBirthDate)
g_Birthdate=birthdate.value}
function saveBirthdate(evt)
{var birthdate=Event.element(evt);if(isNumberEvt(evt)||isSlashEvt(evt))
g_Birthdate=birthdate.value}
function checkBirthDate(evt)
{if(evt.ctrlKey||evt.keyCode==13||evt.keyCode==37||evt.keyCode==39)
return true;$('sdateMonth').className="validationNormal"
$('sdateDay').className="validationNormal"
$('sdateYear').className="validationNormal"
var birthdate=Event.element(evt);if(!isDelete(evt)&&!isNumberEvt(evt)&&!isSlashEvt(evt))
{birthdate.value=g_Birthdate
return false}
var currVal=birthdate.value;var mm=currVal.substr(0,2);if(mm.length<2)
{g_Birthdate=birthdate.value
return true}
var iValue=parseFloat(mm);if(!isInt(iValue)||iValue<1||iValue>12)
{$('sdateMonth').className="validationError"
if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}
if(currVal.length>=3)
{if(currVal.substr(2,1)!='/')
{$('sdateMonth').className="validationError"
if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}}
$('sdateMonth').className="validationOK"
var dd=currVal.substr(3,2);if(dd.length<2)
{g_Birthdate=birthdate.value
return true}
iValue=parseFloat(dd);if(!isInt(iValue)||dd<1||dd>31)
{$('sdateDay').className="validationError"
if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}
if(currVal.length>=6)
{if(currVal.substr(5,1)!='/')
{$('sdateDay').className="validationError"
if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}}
$('sdateDay').className="validationOK"
var yyyy=currVal.substr(6);if(yyyy.length<4)
{g_Birthdate=birthdate.value
return true}
if(yyyy.length>4)
{$('sdateYear').className="validationError"
if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}
var now=new Date();var thisyear=now.getFullYear();iValue=parseFloat(yyyy);if(!isInt(iValue)||yyyy<(thisyear-100)||yyyy>thisyear)
{$('sdateYear').className="validationError"
if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}
if(!dateCheck(mm,dd,yyyy))
{if(evt.keyCode==8||evt.keyCode==46)
return true;else
{birthdate.value=g_Birthdate
return false}}
$('sdateYear').className="validationOK"
g_Birthdate=birthdate.value
return true;}
function dateCheck(mm,dd,yyyy)
{var year=parseFloat(yyyy);var month=parseFloat(mm);var day=parseFloat(dd);if(month!='')
{if(month==4||month==6||month==9||month==11)
{if(day>30){showError(gErrorStrings.validation_month)
return false;}}
if(month==2)
{if(parseFloat(year)%4!=0&&day=="29")
{showError(gErrorStrings.validation_feb28)
return false;}
else if(day==30||day==31)
{showError(gErrorStrings.validation_feb29)
return false;}}
return checkAge(year,month,day);}
return false;}
function checkAge(year,month,day)
{month=month-1;var min_age=18;var theirDate=new Date((year+min_age),month,day);var today=new Date;if((today.getTime()-theirDate.getTime())<0){showError(gErrorStrings.age18);return false;}
return true;}
function isNumberEvt(evt){return((evt.keyCode>47&&evt.keyCode<58)||(evt.keyCode>95&&evt.keyCode<106))}
function isDelete(evt){return(evt.keyCode==46||evt.keyCode==8)}
function isSlashEvt(evt){return(evt.keyCode==191||evt.keyCode==111)}
function validateSSN(ssn){if((ssn.length==11)||(ssn.length==9)){var segments=ssn.split("-")
if((segments.length==3)){if((segments[0].length==3)&&(segments[1].length==2)&&(segments[2].length==4)){for(var i=0;i<3;i++){if(isNaN(segments[i]))
return false;}
return true;}}
else{if((segments.length==1)&&(!isNaN(ssn)))
return true;}}
return false;}
var Validator=Class.create();Validator.prototype={initialize:function(className,error,test,options){if(typeof test=='function'){this.options=$H(options);this._test=test;}else{this.options=$H(test);this._test=function(){return true};}
this.error=error||'Validation failed.';this.className=className;},test:function(v,elm){return(this._test(v,elm)&&this.options.all(function(p){return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true;}));}}
Validator.methods={pattern:function(v,elm,opt){return Validation.get('IsEmpty').test(v)||opt.test(v)},minLength:function(v,elm,opt){return v.length>=opt},maxLength:function(v,elm,opt){return v.length<=opt},min:function(v,elm,opt){return v>=parseFloat(opt)},max:function(v,elm,opt){return v<=parseFloat(opt)},notOneOf:function(v,elm,opt){return $A(opt).all(function(value){return v!=value;})},oneOf:function(v,elm,opt){return $A(opt).any(function(value){return v==value;})},is:function(v,elm,opt){return v==opt},isNot:function(v,elm,opt){return v!=opt},equalToField:function(v,elm,opt){return v==$F(opt)},notEqualToField:function(v,elm,opt){return v!=$F(opt)},include:function(v,elm,opt){return $A(opt).all(function(value){return Validation.get(value).test(v,elm);})}}
var Validation=Class.create();Validation.prototype={initialize:function(form,options){this.options=Object.extend({onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,onFormValidate:function(result,form){},onElementValidate:function(result,elm){}},options||{});this.form=$(form);if(this.options.onSubmit)Event.observe(this.form,'submit',this.onSubmit.bind(this),false);if(this.options.immediate){var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;Form.getElements(this.form).each(function(input){Event.observe(input,'blur',function(ev){Validation.validate(Event.element(ev),{useTitle:useTitles,onElementValidate:callback});});if(input.type.toLowerCase()=="hidden"){Event.observe(input,'s2Event:blur',function(ev){Validation.validate(Event.element(ev),{useTitle:useTitles,onElementValidate:callback});});}});}},onSubmit:function(ev){if(!this.validate())Event.stop(ev);},validate:function(){var result=false;var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;if(this.options.stopOnFirst){result=Form.getElements(this.form).all(function(elm){return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});});}else{result=Form.getElements(this.form).collect(function(elm){return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback});}).all();}
if(!result&&this.options.focusOnError){var input=Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first();if(input.type!="hidden"){input.focus()}}
this.options.onFormValidate(result,this.form);return result;},reset:function(){Form.getElements(this.form).each(Validation.reset);}}
Object.extend(Validation,{validate:function(elm,options){options=Object.extend({useTitle:false,onElementValidate:function(result,elm){}},options||{});elm=$(elm);var cn=elm.classNames();return result=cn.all(function(value){var test=Validation.test(value,elm,options.useTitle);options.onElementValidate(test,elm);return test;});},test:function(name,elm,useTitle){var v=Validation.get(name);var prop='__advice'+name.camelize();try{if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){if(!elm[prop]){var advice=Validation.getAdvice(name,elm);if(advice==null){var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error;advice='<div class="validation-advice" id="advice-'+name+'-'+Validation.getElmID(elm)+'" style="display:none">'+errorMsg+'</div>'
switch(elm.type.toLowerCase()){case'checkbox':case'radio':var p=elm.parentNode;if(p){new Insertion.Bottom(p,advice);}else{new Insertion.After(elm,advice);}
break;default:new Insertion.After(elm,advice);}
advice=Validation.getAdvice(name,elm);}
if(typeof Effect=='undefined'){advice.style.display='block';}else{new Effect.Appear(advice,{duration:1});}}
elm[prop]=true;elm.removeClassName('validation-passed');elm.addClassName('validation-failed');return false;}else{var advice=Validation.getAdvice(name,elm);if(advice!=null)advice.hide();elm[prop]='';elm.removeClassName('validation-failed');elm.addClassName('validation-passed');return true;}}catch(e){throw(e)}},isVisible:function(elm){while(elm.tagName!='BODY'){if(!$(elm).visible())return false;elm=elm.parentNode;}
return true;},getAdvice:function(name,elm){return $('advice-'+name+'-'+Validation.getElmID(elm))||$('advice-'+Validation.getElmID(elm));},getElmID:function(elm){return elm.id?elm.id:elm.name;},reset:function(elm){elm=$(elm);var cn=elm.classNames();cn.each(function(value){var prop='__advice'+value.camelize();if(elm[prop]){var advice=Validation.getAdvice(value,elm);advice.hide();elm[prop]='';}
elm.removeClassName('validation-failed');elm.removeClassName('validation-passed');});},add:function(className,error,test,options){var nv={};nv[className]=new Validator(className,error,test,options);Object.extend(Validation.methods,nv);},addAllThese:function(validators){var nv={};$A(validators).each(function(value){nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{}));});Object.extend(Validation.methods,nv);},get:function(name){return Validation.methods[name]?Validation.methods[name]:Validation.methods['_LikeNoIDIEverSaw_'];},methods:{'_LikeNoIDIEverSaw_':new Validator('_LikeNoIDIEverSaw_','',{})}});Validation.add('IsEmpty','',function(v){return((/^\s*$/.test(v)));});Validation.addAllThese([['required',gCommonErrors.required,function(v){return!Validation.get('IsEmpty').test(v);}],['validate-number',gCommonErrors.number,function(v){return Validation.get('IsEmpty').test(v)||(!isNaN(v)&&!/^\s+$/.test(v));}],['validate-digits',gCommonErrors.digits,function(v){return Validation.get('IsEmpty').test(v)||!/[^\d]/.test(v);}],['validate-alpha',gCommonErrors.alpha,function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z]+$/.test(v)}],['validate-alpha-more',gCommonErrors.alpha_more,function(v){return Validation.get('IsEmpty').test(v)||/^([a-zA-Z\s\-']+)$/.test(v)}],['validate-alphanum',gCommonErrors.alphanum,function(v){return Validation.get('IsEmpty').test(v)||!/\W/.test(v)}],['validate-ALPHANUM',gCommonErrors.alphanum,function(v){return Validation.get('IsEmpty').test(v)||/\w/.test(v)}],['validate-date',gCommonErrors.date,function(v){var test=new Date(v);return Validation.get('IsEmpty').test(v)||!isNaN(test);}],['validate-email',gCommonErrors.email,function(v){return Validation.get('IsEmpty').test(v)||/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(v)}],['validate-url',gCommonErrors.url,function(v){return Validation.get('IsEmpty').test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)}],['validate-zip-length',gCommonErrors.ziplength,function(v){return v.length>4;}],['validate-zipcode',gCommonErrors.zipcode,function(v){return Validation.get('IsEmpty').test(v)||/^[a-zA-Z0-9\- ]+$/.test(v);}],['validate-date-au',gCommonErrors.date_au,function(v){if(Validation.get('IsEmpty').test(v))return true;var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!regex.test(v))return false;var d=new Date(v.replace(regex,'$2/$1/$3'));return(parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear());}],['validate-currency-dollar',gCommonErrors.currency_dollar,function(v){return Validation.get('IsEmpty').test(v)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)}],['validate-currency',gCommonErrors.currency,function(v){return Validation.get('IsEmpty').test(v)||/^([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)}],['validate-selection',gCommonErrors.selection,function(v,elm){return!Validation.get('IsEmpty').test(v);}],['validate-one-required',gCommonErrors.one_required,function(v,elm){var p=elm.parentNode;var options=p.getElementsByTagName('INPUT');return $A(options).any(function(elm){return $F(elm);});}],['security-code-length',gCommonErrors.code_length,function(v){return Validation.get('IsEmpty').test(v)||v.length==3||v.length==4;}]]);Validation.add('validation-credit-card',gCommonErrors.credit_card,function(v){return validatePaymentCreditCard(v);});Validation.add('validation-exp-date',gCommonErrors.exp_date,function(v){return verifyExpirationDate();});Validation.add('validation-full-name',gCommonErrors.fullname,function(v){return Validation.get('IsEmpty').test(v)||/^([a-zA-Z]+)\s([\sa-zA-Z]+)$/.test(v)});Validation.add('validation-address',gCommonErrors.address,function(v){return Validation.get('IsEmpty').test(v)||/^[^<>"'&]+$/.test(v)});Validation.add('validation-password',gCommonErrors.password,function(v){return Validation.get('IsEmpty').test(v)||!/\s/.test(v)});Validation.add("validate-identical",gCommonErrors.identical,function(v){return Validation.get('IsEmpty').test(v)||v==$F("password");});Validation.add('validation-phone-number',gCommonErrors.phone_number,function(v){return Validation.get('IsEmpty').test(v)||isPhoneNumberValid(v);});var g_displaySupporterDisconnectMessage=true;var g_resumeSession;var gFixScore=0;var gSupporterConnectionTimer=5000;var gPhoneCallingStatusTimer=5000;var gConnectionTimeoutTimerId;var g_isResolutionApprovalReached=false;var g_stepNumber;var g_isPriceTypeFreeByExpert=false;function initCustomerSession()
{showChatWindow();saveSessionEvent({user:gCurrentUser,event:{action:SE_SP_LOADED,description:"Service page opened and done loading"},sessionIdList:[g_support_sessionId]});initChat({widgetId:"dCS",partnerJabber:gPartnerUser.jabberUserName,partnerName:gPartnerUser.displayUserName,workflowId:g_workflowId,sessionId:g_support_sessionId});gChats[SERVICE_PAGE_WIDGET_ID].onChatLoaded();refreshUIState();gConnectionTimeoutTimerId=connectionTimeout.delay(g_WaitingTime);observeCustomerSessionEvents();if(g_resumeSession){showOverlayServicePage();}}
function observeCustomerSessionEvents(){Event.observe($("dCS").down(".closeWin"),'beforeunload',onBeforeUnloadServicePage);Event.observe(window,'beforeunload',onBeforeUnloadServicePage);Event.observe(window,"unload",onCloseServicePage);observeSessionTab("joboffer");}
function connectionTimeout(){if(!g_resumeSession){$("customerSessionPreloader").down(".connectionFailed").show();setWarningOnClose(g_closeWarnings.nothing);}}
function showOverlayServicePage(){clearTimeout(gConnectionTimeoutTimerId);var customerChatContainer=$("customerChatContainer");var customerSessionPreloader=$("customerSessionPreloader");if(customerChatContainer){customerChatContainer.show();}
if(customerSessionPreloader){customerSessionPreloader.hide();}}
function toggleCustomerSessionFrame(){var customerSessionFrame=$("customerSession").down(".background .frame");var doOpen=customerSessionFrame.getWidth()<=0;openCustomerSessionFrame(doOpen);}
function openCustomerSessionFrame(doOpen){var customerSession=$("customerSession");var customerSessionFrame=customerSession.down(".background .frame");var stepsFrame=customerSession.down(".stepsFrame");var stepsFrameTabs=customerSession.down(".stepsFrame .tabs");var stepsFrameEffect;var newCustomerSessionWidth;var newCustomerSessionFrameWidth;var newCustomerStepsFrameWidth;var stepsFrameTabsAction=function(){};if(doOpen){stepsFrameEffect=new Effect.Appear(stepsFrameTabs,{sync:true});newCustomerSessionWidth="833px";newCustomerSessionFrameWidth="537px";newCustomerStepsFrameWidth="526px";stepsFrameTabsAction=function(){stepsFrameTabs.show()};customerSession.down(".frameToggler img").src=gCSUrls.frame_arrow_close;}else{stepsFrameEffect=new Effect.Fade(stepsFrameTabs,{sync:true});newCustomerSessionWidth="296px";newCustomerSessionFrameWidth="0px";newCustomerStepsFrameWidth="0px";stepsFrameTabs.hide();customerSession.down(".frameToggler img").src=gCSUrls.frame_arrow_open;}
new Effect.Parallel([new Effect.Morph(customerSession,{sync:true,style:'width:'+newCustomerSessionWidth}),new Effect.Morph(customerSessionFrame,{sync:true,style:'width:'+newCustomerSessionFrameWidth}),new Effect.Morph(stepsFrame,{sync:true,style:'width:'+newCustomerStepsFrameWidth})],{duration:0.8,delay:0.2,afterFinishInternal:stepsFrameTabsAction});}
function refreshUIState(currentState,isPaymentSettled,supportPackageName,originalJobOfferPriceType)
{if(!g_flowStep)return;var stepNumber=0;var LAST_STEP=3;var steps={1:supporterAskToContact,2:scopeOfWorkIsSet,3:displaySessionResolution,4:displayThankYouMessage};if(!currentState)
{currentState=g_flowStep.currentState;if(!currentState){currentState=SUPPORT_REQUEST_ACCEPTED;}
var sessionReport=null;if(g_flowStep.additionalFlowData&&g_flowStep.additionalFlowData.sessionReport)
sessionReport=g_flowStep.additionalFlowData.sessionReport;var jobOffer=null;if(g_flowStep.additionalFlowData&&g_flowStep.additionalFlowData.jobOffer)
jobOffer=g_flowStep.additionalFlowData.jobOffer}
switch(currentState){case JOB_OFFER_CREATION:case SUPPORT_REQUEST_ACCEPTED:case CONSULTANT_DISPATCHE_APPROVE:stepNumber=1;break;case CUSTOMER_DISPATCHE_APPROVE:stepNumber=1;g_FORWARD_OR_DISPATCH=g_CUSTOMER_DISPATCH_REQUEST;displayDispatchRequest();break;case AGREE_JOB_OFFER:stepNumber=1;openJobOffer();break;case PAY:stepNumber=1;break;case IN_SESSION:stepNumber=2;break;case CUSTOMER_FEEDBACK:stepNumber=3;break;case END:stepNumber=4;break;case AWAITING_SESSION_RESUME_RESPONSE:case AWAITING_RESUME_LEFT_OPEN_SESSION:enableStep(1);enableStep(2);g_resumeSession=new S2ResumeSession({workflowId:g_workflowId,supporter:{displayUserName:gPartnerUser.displayUserName}});g_resumeSession.connect();Event.observe($("customerSession").down(".closeWin"),"click",function(){g_resumeSession.cancel();g_resumeSession.close();});openJobOffer();loadChecklist(true);hideSessionTab("payment");break;default:stepNumber=0;}
if(stepNumber<LAST_STEP){if(!g_resumeSession){displayConnecting();}
initSession();}
if(stepNumber>0){for(var i=1;i<=stepNumber;i++){if(i==stepNumber){steps[i]();}else{enableStep(i);}}
for(i=stepNumber+1;i<=LAST_STEP;i++){disableStep(i);}}}
function enableStep(stepNumber){g_stepNumber=stepNumber;for(var i=1;i<=stepNumber;i++){$('imgStep'+i).src=gCSUrls['step'+i];}
$('dSessionProgressLabel').innerHTML=gCSStrings['step'+stepNumber+'title'];}
function disableStep(stepNumber){$('imgStep'+stepNumber).src=gCSUrls['step'+stepNumber+'_disabled'];}
function displayConnecting(){g_currentMsg.from=gJabberConnection.supportSpaceUsername;g_currentMsg.body="<div id='dConnecting'>"+gCSStrings.supporter_connecting+"</div>";displayMessage(false,false,0)}
function showChatWindow(){$("dCS").show();}
function showSupporterConnectedNotification(){gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(SUPPORTER_CONNECTED,true);setTimeout(function(){gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(SUPPORTER_CONNECTED,false);},gSupporterConnectionTimer);initCallmeButton();showChatWindow();}
function showSupporterConnection(bool){g_currentMsg.from=gJabberConnection.supportSpaceUsername;if(bool){showSupporterConnectedNotification();var spanDisconnect=$('spanDisconnect');if(spanDisconnect){spanDisconnect.up().style.color='#9A9A9A';spanDisconnect.replace(spanDisconnect.innerHTML);g_currentMsg.body=gCSStrings.supporter_reconnect;displayMessage(false);}
if($('dResume'))
$('dResume').up('.dCSChatMsg').remove();}else{gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(SUPPORTER_DISCONNECTED,true);gChats[SERVICE_PAGE_WIDGET_ID].noMsgTimer.stop();if(g_displaySupporterDisconnectMessage)
{if(g_stepNumber<=1||(g_isPriceTypeFreeByExpert&&!g_isResolutionApprovalReached)){g_currentMsg.body=gCSStrings.supporter_disconnect1+' <span class="linkTxt" id="spanDisconnect" onclick="disconnectAndHideConversation();displayThankYouMessage();">'+gCSStrings.supporter_disconnect2+'</span> '+gCSStrings.supporter_disconnect3a;displayMessage(false);hideSessionTab('feedback');}
else if(!g_isResolutionApprovalReached){g_currentMsg.body=gCSStrings.supporter_disconnect1+gCSStrings.supporter_disconnect3;displayMessage(false);handleBeforeFeedback();displayFeedback()}
disableCallMeButton();terminateAfterSupporterDisconnect();}}
setConversationActive(bool);}
function terminateAfterSupporterDisconnect(){supportRequestFlow.terminateAfterSupporterDisconnect(g_workflowId,{callback:function(){},errorHandler:function(errorString,exception){}});}
function setConversationActive(bool){gChats[SERVICE_PAGE_WIDGET_ID].disableChat(!bool,false);if(!bool){disableCallMeButton();}}
function enableServicePage(){showOverlayServicePage();showSupporterConnection(true);}
function displayMessage(encode,stepNum,whereToInsert){gChats[SERVICE_PAGE_WIDGET_ID].updateChatZoneWithMessage(g_currentMsg,encode,stepNum,whereToInsert);}
function showSessionTab(tabClassName){selectSessionTab(tabClassName);switch(tabClassName){case"joboffer":showJobOffer();break;case"payment":showPaymentPage();break;case"checklist":showChecklist();break;case"feedback":showCustomerFeedback();break;}
var contentPage=$("customerSession").down(".stepsFrame .content .page."+tabClassName);if(contentPage){contentPage.show();}}
function selectSessionTab(tabClassName){var customerSession=$("customerSession");customerSession.select(".stepsFrame .content .page").each(Element.hide);customerSession.select(".stepsFrame .tabs li").each(function(elt){elt.removeClassName("selected");elt.down("img").src=gCSUrls['tab_'+elt.className+'_non_selected'];});var tab=customerSession.down(".stepsFrame .tabs ."+tabClassName);tab.down("img").src=gCSUrls['tab_'+tab.className+'_selected'];customerSession.down(".tabs ."+tabClassName).addClassName("selected");}
function hideSessionTab(tabClassName){var customerSession=$("customerSession");var tab=customerSession.down(".stepsFrame .tabs ."+tabClassName);tab.hide();}
function observeSessionTab(tabClassName){var tabLink=$("customerSession").down(".stepsFrame .tabs ."+tabClassName+" a");tabLink.removeClassName("cursorDefault");Event.observe(tabLink,"click",function(){showSessionTab(tabClassName)});}
function supporterAskToContact(){enableStep(1);}
function initCallmeButton(){$('callmeButton').src=gCSUrls.call_me_regular;$('callmeButton').className="linkImg";$('callmeButton').alt=gCSStrings.call_me_tlp.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);$('callmeButton').disabled=false;Event.observe($('callmeButton'),'mousedown',function(){$('callmeButton').src=gCSUrls.call_me_pressed});Event.observe($('callmeButton'),'mouseup',function(){$('callmeButton').src=gCSUrls.call_me_regular});Event.observe($('callmeButton'),'mouseover',function(){$('callmeButton').src=gCSUrls.call_me_over});Event.observe($('callmeButton'),'mouseout',function(){$('callmeButton').src=gCSUrls.call_me_regular});Event.observe($('callmeButton'),'click',displayCallRequest);}
function disableCallMeButton(){$('callmeButton').replace('<img id="callmeButton" src="'+gCSUrls.call_me_disable+'" disabled/>');}
function displayCallRequest(phoneCallId)
{var expertRequest='';var denyAnswer=gSessionStrings.cancel;if(isInt(phoneCallId))
{expertRequest=gCSStrings.phone_call_request.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName)+'<br/>';denyAnswer=gSessionStrings.decline;}
phoneCallId=isInt(phoneCallId)?phoneCallId:-1;if($("customerPhoneRequest"))
{var phoneRequestDiv=$("customerPhoneRequest");phoneRequestDiv.innerHTML=gCSStrings.phone_call_rejected;phoneRequestDiv.parentNode.parentNode.style.color='black';phoneRequestDiv.id='';}
g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest" id="customerPhoneRequest">'+'<div>'+
expertRequest+
gCSStrings.phone_call_enter_number1+'<br/>'+'<font style="font-size:9px">'+gCSStrings.phone_call_enter_number2+'</font>'+'</div>'+'<div style="margin-top:6px;width:100%">'+'<input type="text" id="customerPhonePrefix" class="customerPhonePrefix grayBorderInput" maxlength="3" value="1"/>'+'<input type="text" id="customerPhoneNumber" class="customerPhoneNumber grayBorderInput" maxlength="16"/>'+'</div>'+'<div class="underFieldText">'+gCSStrings.phone_call_help+'</div>'+'<div class="sError"></div>'+'<div style="margin-top:3px">'+'<div id="dRequestDeny" class="dRequestDeny" onclick="requestCallResponse(this,DECLINED,'+phoneCallId+')">'+denyAnswer+'</div>'+'<div id="dRequestAcceptId" class="dRequestAccept" onclick="requestCallResponse(this,CALL,'+phoneCallId+')">'+gSessionStrings.call+'</div>'+'</div>'+'</div>';displayMessage(false);var focusPhoneField=function(){try{$("customerPhoneNumber").focus();}catch(e){};};setTimeout(focusPhoneField,600);}
function requestCallResponse(oElt,response,phoneCallId)
{var callAgreed=(response==CALL);var customerPhone=$('customerPhonePrefix').value+$('customerPhoneNumber').value;var errorDiv=$(oElt).up('.dCSChatMsg').down('.sError');errorDiv.hide();if(callAgreed)
{var validPhone=validatePhoneNumber(customerPhone);if(validPhone!=null)
{errorDiv.update(validPhone);errorDiv.show();return;}}
disableRequest(oElt);$('customerPhonePrefix').id='customerPhonePrefixDisabled';$('customerPhoneNumber').id='customerPhoneNumberDisabled';if(phoneCallId>=0)
phoneCallManager.acceptSupporterCallRequest(phoneCallId,callAgreed,customerPhone,{callback:function(){}});else if(callAgreed)
phoneCallManager.submitCustomerCallRequest(g_support_sessionId,customerPhone,{callback:function(){}});}
function terminateCustomerSession()
{g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body=gCSStrings.gotoHomePage1+' <a href="'+gCSUrls.homeURL+'">'+gCSStrings.gotoHomePage2+'</a> '+gCSStrings.gotoHomePage3;displayMessage(false);setConversationActive(false);setWarningOnClose(g_closeWarnings.nothing);g_displaySupporterDisconnectMessage=false;enableStep(3);}
function openJobOffer(){var oJobOfferPage=$("jobOfferPage");if(oJobOfferPage){new Ajax.Request(gCSUrls.customerJobOfferURL,{parameters:{workflowId:g_workflowId},method:'GET',onSuccess:function(response){var toggler=$("customerSession").down(".frameToggler img");toggler.show();Event.observe(toggler,"click",toggleCustomerSessionFrame);openCustomerSessionFrame(true);setWarningOnClose(g_closeWarnings.survey);oJobOfferPage.update(response.responseText);},onFailure:function(e){logme("Unable to display job offer - e="+e);responseDenied=function(reponseElt){jobOfferResponse(reponseElt,DECLINED,null,false,0,false);};var html='<div id="dCustomerJobOffer">'+'<h2 class="partnerColor ellipsis">'+gCSStrings.job_offer_title+'</h2>'+'<div class="dHSeparator">&nbsp;</div>'+'<div class="jobOfferContent">'+'<p class="bold partnerColor">'+'An error occurred, please <a href="#" onclick="responseDenied(this)">click here to continue</a>.'+'</p>'+'</div>'+'</div>';oJobOfferPage.update(html);},onComplete:function(){if(!g_resumeSession){showSessionTab("joboffer");}}});}}
function showJobOffer(){$("jobOfferPage").show();}
function jobOfferResponse(oElt,response,priceType,isPaymentSettled,price,isSupportPackageBased){var dActions=$(oElt).up();if(dActions){dActions.select('.linkImg').each(function(element){element.remove();});}
var messageBox=$('customerJobOfferMessageBoxText');var jobOfferAgreed=(response==ACCEPTED);var noPaymentAccepted=false;var showJobOfferDeclinedChatMessage=false;var showJobOfferAcceptedOnlyChatMessage=false;var msgTText;g_currentMsg.from=PERMISSION_REQUEST;supportRequestFlow.agreeJobOffer(g_workflowId,jobOfferAgreed,{callback:function(){if(isPaymentSettled){if(jobOfferAgreed){if(priceType=='freePrepaidPackageSession'){messageBox.innerHTML=gCSStrings.offer_prepaid_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}
else if(priceType=='fixed'&&price!=0&&!isSupportPackageBased){messageBox.innerHTML=gCSStrings.offer_forwarded_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}else{messageBox.innerHTML=gCSStrings.offer_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}
noPaymentAccepted=true;showJobOfferAcceptedOnlyChatMessage=true;}else{if(priceType=='freePrepaidPackageSession'){messageBox.innerHTML=gCSStrings.offer_prepaid_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}
else if(priceType=='fixed'&&price!=0&&!isSupportPackageBased){messageBox.innerHTML=gCSStrings.offer_forwarded_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}else{messageBox.innerHTML=gCSStrings.offer_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}
showJobOfferDeclinedChatMessage=true;}}
else{if(jobOfferAgreed){if(isPriceTypeFreeByExpert(priceType)){messageBox.innerHTML=gCSStrings.offer_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);g_isPriceTypeFreeByExpert=true;noPaymentAccepted=true;showJobOfferAcceptedOnlyChatMessage=true;}
else if(priceType=='supportPackageBySupporter'&&price==0){messageBox.innerHTML=gCSStrings.offer_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);noPaymentAccepted=true;showJobOfferAcceptedOnlyChatMessage=true;}else{messageBox.innerHTML=gCSStrings.offer_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);loadPaymentPage();msgTText=gCSStrings.offer_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName)+'<br/>'+'<div id="clickHerePayment">'+gCSStrings.offer_accepted_enter_payment+'<br/>'+'<div style="padding-top:5px;"><span class="linkTxt" onclick="loadPaymentPage()">'+gSessionStrings.Click_here+'</span> '+
gCSStrings.offer_accepted_problems+'</div>'+'</div>';g_currentMsg.body='<hr/>'+msgTText+'<hr/>';displayMessage(false);}}else{if(isPriceTypeFreeByExpert(priceType)){messageBox.innerHTML=gCSStrings.offer_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}
else if(priceType=='freePrepaidPackageSession'){messageBox.innerHTML=gCSStrings.offer_prepaid_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}else{messageBox.innerHTML=gCSStrings.offer_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);}
showJobOfferDeclinedChatMessage=true;}}
if(showJobOfferAcceptedOnlyChatMessage){msgTText=gCSStrings.offer_accepted.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);g_currentMsg.body='<hr/>'+msgTText+'<hr/>';displayMessage(false);}
if(showJobOfferDeclinedChatMessage){msgTText=gCSStrings.offer_declined.replace(/###SUPPORTERNAME###/g,gPartnerUser.displayUserName);g_currentMsg.body='<hr/>'+msgTText+'<hr/>';displayMessage(false);}
if(noPaymentAccepted){loadChecklist(true);hideSessionTab("payment");}}});}
function isPriceTypeFreeByExpert(priceType){return priceType=='freeSession'||priceType=='freeTestingSession'||priceType=='freeSessionRedo';}
function loadPaymentPage(){var url=buildUrl(gCSUrls.paymentURL,{pe:"liveSession",workflowId:g_workflowId});$("paymentPageIframe").src=url;(function(){showSessionTab("payment");observeSessionTab("payment");}).delay(1.5);}
function showPaymentPage(){$("dCSLPaymentPage").show();}
function scopeOfWorkIsSet(){enableStep(2);$("clickHerePayment").remove();loadChecklist(false);}
function loadChecklist(isShowTab){var url=buildUrl(gCSUrls.checklistPage,{sessionId:g_support_sessionId});new Ajax.Request(url,{method:'GET',onSuccess:function(response){$("checklistPage").update(response.responseText);observeSessionTab("checklist");if(isShowTab){showSessionTab("checklist");}},onFailure:function(){debug_connection("customer checklist error");}});}
function displaySoftwareActivationKey(properties)
{var softwareName=properties['softwareName'];var softwareLink=properties['softwareLink'];var softwareDownloadLink=properties['softwareDownloadLink'];var activationKey=properties['softwareActivationKey'];var isPaymentSettled=properties['isPaymentSettled'];g_currentMsg.from=PERMISSION_REQUEST;var message_part_1=gCSStrings.support_package_software_message_part1a;if(!(isPaymentSettled))
message_part_1=gCSStrings.support_package_software_message_part1b;var msgBody=message_part_1+' <a target="_blank" href="'+softwareLink+'">'+softwareName+'</a>.<br/>'+gCSStrings.support_package_software_message_part2+' <a target="_blank" href="'+softwareDownloadLink+'">'+gSessionStrings.click_here+'</a>.';if(activationKey){msgBody=msgBody+'<br/>'+gCSStrings.support_package_software_message_part3+activationKey;}
g_currentMsg.body=msgBody;displayMessage(false);}
function displaySessionResolution(properties)
{var sessionResolution=properties['resolution'];if(!sessionResolution)return;g_isResolutionApprovalReached=true;disableRequest($('dLSOAccept'));switch(sessionResolution)
{case'RESOLVED':displayResolutionApproval(gCSStrings.fixText);break;case'PARTIALLY_RESOLVED':displayResolutionApproval(gCSStrings.partiallyResolvedText);break;case'CANT_RESOLVE':displayCantResolve();break;case'UNRESOLVED_CANT_FORWARD':displayUnresolvedCantForward();break;case'UNRESOLVED_DISCONNECTED':displayUnresolvedDisconnect();break;case'FORWARD':displayForwardRequest();break;}}
function displayResolutionApproval(reportResolutionText)
{gFixScore++;g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+reportResolutionText+'</div>'+'<div>'+'<div class="dRequestAccept" onclick="resolutionApprovalResponse(this,ACCEPTED)">'+gCSStrings.agree+'</div>'+'<div class="dRequestDeny" onclick="resolutionApprovalResponse(this,DECLINED)">'+gCSStrings.dontagree+'</div>'+'</div>'+'</div>';displayMessage(false);}
function displayCantResolve()
{g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.cantResolve+'</div>'+'<div>'+'<div class="dRequestDeny" onclick="resolutionApprovalResponse(this,ACCEPTED)">'+gCSStrings.ok+'</div>'+'</div>'+'</div>';displayMessage(false);}
function displayUnresolvedCantForward()
{g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.unResolveCantForward1+'</div>'+'<div>'+gCSStrings.unResolveCantForward2+'</div>'+'<div>'+'<div class="dRequestDeny" onclick="resolutionApprovalResponse(this,ACCEPTED)">'+gCSStrings.ok+'</div>'+'</div>'+'</div>';displayMessage(false);}
function displayUnresolvedDisconnect()
{g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.unResolveDisconnected1+'</div>'+'<div>'+gCSStrings.unResolveDisconnected2+'</div>'+'<div>'+'<div class="dRequestDeny" onclick="resolutionApprovalResponse(this,ACCEPTED)">'+gCSStrings.ok+'</div>'+'<div>'+'</div>';displayMessage(false);}
function resolutionApprovalResponse(oElt,response)
{disableRequest(oElt);var fixAgreed=(response==ACCEPTED);if(fixAgreed){gFixScore++;}
setWarningOnClose(g_closeWarnings.nothing);g_currentMsg.from=gJabberConnection.supportSpaceUsername;if(g_isPriceTypeFreeByExpert){hideSessionTab('feedback');}else{handleBeforeFeedback();displayFeedback();}
var text=g_isPriceTypeFreeByExpert?gCSStrings.session_complete_no_feedback:gCSStrings.session_complete;var html='<div class="dRequest">'+'<div>'+text+'</div>'+'</div>';g_currentMsg.body=html.replace("###CLICKHERE###",'<span class="linkTxt" onclick="disconnectAndHideConversation();displayThankYouMessage();">'+gSessionStrings.click_here+'</span>');displayMessage(false);supportRequestFlow.approveSupportSessionResolution(g_workflowId,fixAgreed,{callback:function(){}});}
function displayUnresolvedLeaveOpen()
{g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.leaveOpenText+'</div>'+'<div>'+'<div class="dRequestAccept" id="dLSOAccept" onclick="leaveOpenResponse(this,ACCEPTED)">'+gCSStrings.agree+'</div>'+'<div class="dRequestDeny" onclick="leaveOpenResponse(this,DECLINED)">'+gCSStrings.dontagree+'</div>'+'</div>'+'</div>';displayMessage(false);}
function leaveOpenResponse(oElt,response)
{disableRequest(oElt);var leaveOpenAgreed=(response==ACCEPTED);if(leaveOpenAgreed)
{setWarningOnClose(g_closeWarnings.nothing);setConversationActive(false);g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.leaveOpenApproveText+'</div>'+'</div>';}
else
{g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.leaveOpenDisapproveText+'</div>'+'</div>';}
displayMessage(false);supportRequestFlow.approveFix(g_workflowId,leaveOpenAgreed,{callback:function(){}});}
function displayDispatchRequest(prop)
{g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+gCSStrings.forward_request+'</div>'+'<div>'+'<div class="dRequestAccept" onclick="dispatchResponse(this,ACCEPTED)">'+gCSStrings.dispatchMe+'</div>'+'<div class="dRequestDeny" onclick="dispatchResponse(this,DECLINED)">'+gCSStrings.noThanks+'</div>'+'</div>'+'</div>';if(prop)
{var forwardedSupporterDisplayName=prop['forwardedSupporterDisplayName'];g_currentMsg.body=g_currentMsg.body.replace(/###SUPPORTERNAME###/g,forwardedSupporterDisplayName);}
displayMessage(false);}
function dispatchResponse(oElt,response)
{var dispatchAgreed=(response==ACCEPTED);var responseText=dispatchAgreed?"":gCSStrings.forward_decline;disableRequest(oElt,responseText);var url=buildUrl(gCSUrls.customerResponseOnDispatchURL,{isDispatchAgreed:dispatchAgreed,workflowId:g_workflowId});new Ajax.Request(url,{method:'post',onSuccess:function(){},onFailure:function(){}});}
function displayForwardRequest(prop)
{var scopeOfWork=prop['scopeOfWork'];var forwardedSupporterDisplayName=prop['forwardedSupporterDisplayName'];g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequestIntro" style="color:#000000;">'+'<div style="font-weight:bold;">'+gCSStrings.step3title+':</div>'+'<div>'+scopeOfWork+'</div>'+'</div>'+'<div class="dRequest">'+'<div>'+gCSStrings.forward_request+'</div>'+'<div>'+'<div class="dRequestAccept" onclick="forwardResponse(this,ACCEPTED)">'+gCSStrings.forwardMe+'</div>'+'<div class="dRequestDeny" onclick="forwardResponse(this,DECLINED)">'+gCSStrings.noThanks+'</div>'+'</div>'+'</div>';g_currentMsg.body=g_currentMsg.body.replace(/###SUPPORTERNAME###/g,forwardedSupporterDisplayName);displayMessage(false);}
function forwardResponse(oElt,response)
{var fwdAgreed=(response==ACCEPTED);var responseText=fwdAgreed?"":gCSStrings.forward_decline;disableRequest(oElt,responseText);supportRequestFlow.approveFix(g_workflowId,fwdAgreed,{callback:function(){}});}
function switchToNewSession(properties)
{g_workflowId=properties["workflowId"];g_support_sessionId=properties["supportSessionId"];g_isResolutionApprovalReached=false;gPartnerUser.id=properties["supporterId"];gPartnerUser.jabberUserName=properties["supporterJabberUsername"];gPartnerUser.jabberFullUserName=gJabberConnection.addJabberDomainSuffix(properties["supporterJabberUsername"])
gPartnerUser.displayUserName=properties["supporterDisplayUsername"];gChats[SERVICE_PAGE_WIDGET_ID].setWorkflowId(g_workflowId);gChats[SERVICE_PAGE_WIDGET_ID].setSessionId(g_support_sessionId);gChats[SERVICE_PAGE_WIDGET_ID].setPartner({partnerJabber:gPartnerUser.jabberUserName,partnerName:gPartnerUser.displayUserName});var isPaymentSettled=properties['isPaymentSettled'];var supportPackageName=properties['supportPackageName'];var originalJobOfferPriceType=properties['originalJobOfferPriceType'];refreshUIState(SUPPORT_REQUEST_ACCEPTED,isPaymentSettled,supportPackageName,originalJobOfferPriceType);setConversationActive(true);g_currentMsg.from=PERMISSION_REQUEST;var text=g_FORWARD_OR_DISPATCH==g_FORWARD_CONFIRM?gCSStrings.switch_session_forward:gCSStrings.switch_session_dispatch;g_currentMsg.body=text+" "+gPartnerUser.displayUserName+"<hr/>";displayMessage(false);switchToSupporter({rating:properties["supporterRating"],picture:properties["supporterPicture"],displayUserName:gPartnerUser.displayUserName,supporterEstore:properties["supporterEstore"]});}
function switchToSupporter(supporter){if($('supporterPicture').src.indexOf("/images/common/expert_picture_37x41.gif")<0&&!supporter.picture){$('supporterPicture').src=gCSUrls.default_expert_picture;}
if(supporter.picture){$('supporterPicture').src=gCSUrls.expert_picture_path+supporter.picture;}
$('supporterPicture').alt=supporter.displayUserName;$('supporterNameLink').innerHTML=supporter.displayUserName;gCSUrls.eStore=gCSUrls.eStorePrefix+supporter.supporterEstore;$('supporterNameLink').href=gCSUrls.eStore;$('supporterPictureLink').href=gCSUrls.eStore;}
function handleBeforeFeedback(){setWarningOnClose(g_closeWarnings.feedback);$("dCloseSPConfirm").down("#cancelButton").onclick="void(0)";Event.observe($("dCloseSPConfirm").down("#cancelButton"),"click",function(){onCancelCloseServicePage();if(!$('dCustomerFeedback').visible()){displayFeedback();}});}
function displayFeedback(){enableStep(3);getCustomerFeedbackView();observeSessionTab('feedback');}
function showCustomerFeedback(){$("feedbackPage").show();}
function disconnectAndHideConversation()
{gJabberConnection.jabberDisconnect();$("dCSChat").style.height="405px";$("dChatNotification").hide();$("dCSChatTextFrame").hide();}
function getCustomerFeedbackView()
{var oFeedbackPage=$('feedbackPage');if(oFeedbackPage){new Ajax.Request(gCSUrls.customerFeedbackURL,{parameters:{workflowId:g_workflowId,supporterDisplayName:gPartnerUser.displayUserName},method:'GET',onSuccess:function(response){oFeedbackPage.update(response.responseText);showSessionTab('feedback');var afterRender=function(){customerFeedback.initFeedback();};afterRender.defer();},onFailure:function(e){logme("Unable to display job offer - e="+e);}});}}
function displayThankYouMessage(){setWarningOnClose(g_closeWarnings.nothing);$('dSessionProgress').hide();$('dCSChat').update();var checkout_deny_text=gFixScore>1?gCSStrings.checkout_disapprove_fixed.replace(/###CLICKHERE###/g,'<a href="'+gCSStrings.checkout_disapprove_refund_link+'='+g_support_sessionId+'" target="_blank">'+gSessionStrings.click_here+'</a>'):gCSStrings.checkout_disapprove_not_fixed.replace(/###HERE###/g,'<a href="'+gCSStrings.checkout_disapprove_refund_link+'='+g_support_sessionId+'" target="_blank">'+gSessionStrings.here+'</a>');g_currentMsg.from=gJabberConnection.supportSpaceUsername;g_currentMsg.body='<div id="dThankYou">'+'<div class="bold">'+gCSStrings.thanksMsg1+'</div>'+'<div class="close linkTxt" onclick="onCloseServicePage()">'+gCommonStrings.close_window+'</div><hr/>'+'<div>'+gCSStrings.thanksMsg2+'</div>'+'<div><img src="'+gCSUrls.bookmark_btn_regular+'" class="linkImg" alt="Bookmark Expert" onclick="bookmarkExpert()" onmousedown="this.src = \''+gCSUrls.bookmark_btn_pressed+'\'" onmouseup="this.src = \''+gCSUrls.bookmark_btn_regular+'\'" onmouseover="this.src = \''+gCSUrls.bookmark_btn_over+'\'" onmouseout="this.src = \''+gCSUrls.bookmark_btn_regular+'\'"/></div>'+'<div>'+gCSStrings.thanksMsg3+'</div>'+'<div><a href="'+gCSUrls.invite_friend+'" target="_blank"><img src="'+gCSUrls.invite_btn_regular+'" border="0" alt="Invite a Friend" onmousedown="this.src = \''+gCSUrls.invite_btn_pressed+'\'" onmouseup="this.src = \''+gCSUrls.invite_btn_regular+'\'" onmouseover="this.src = \''+gCSUrls.invite_btn_over+'\'" onmouseout="this.src = \''+gCSUrls.invite_btn_regular+'\'"/></a></div>'+'<div class="dRequestSmall">'+checkout_deny_text+'</div>'+'</div>';displayMessage(false);}
function handleRemoteControlRequest(){g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div>'+'<div>'+gCSStrings.rc_request+'</div>'+'<div style="padding-top:5px"><a href="#" onclick="displayRemoteControlForm()">'+gCSStrings.rc_link+'</a></div>'+'</div>';displayMessage(false);}
function displayRemoteControlForm(){openInIframe(gCSStrings.rc_url);if($("remoteControlID")){$("remoteControlID").id="";$("remoteControlPWD").id="";}
var instruction1=Prototype.Browser.IE?gCSStrings.rc_instruction1_ie:gCSStrings.rc_instruction1_ff;g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dRequest">'+'<div>'+instruction1+'</div>'+'<div>'+gCSStrings.rc_instruction2+'</div>'+'<div style="padding-top:5px">'+
gSessionStrings.rc_id+'<input type="text" id="remoteControlID" class="remoteControlId grayBorderInput" value="">&nbsp;&nbsp;&nbsp;&nbsp;'+
gSessionStrings.rc_pwd+'<input type="text" id="remoteControlPWD" class="remoteControlPwd grayBorderInput" value="">'+'</div>'+'<div style="padding-top:5px">'+'<div class="dRequestAccept" onclick="sendRemoteControlAuth()">'+gCommonStrings.send+'</div>'+'<div class="dRequestDeny" onclick="cancelRemoteControlRequest(this)">'+gCommonStrings.cancel+'</div>'+'</div>'+'</div>';displayMessage(false);}
function cancelRemoteControlRequest(oElt){disableRequest(oElt);gJabberConnection.sendMsg(gPartnerUser.jabberFullUserName,g_RC_CANCEL,"",g_workflowId);}
function sendRemoteControlAuth(){var body=Object.toJSON({id:$("remoteControlID").value,pwd:$("remoteControlPWD").value});gJabberConnection.sendMsg(gPartnerUser.jabberFullUserName,g_RC_AUTH,body.toString(),g_workflowId);g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div>'+gCSStrings.rc_details_sent+'</div>';displayMessage(false);}
function handleRemoteWebexControlRequest(properties){var attendeeURL=properties['attendeeURL'];g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="dWebexLink"><a href="#" onclick="openInIframe(\''+attendeeURL+'\');$$(\'.dWebexLink\').each(function(element){element.update()});">'+gSessionStrings.Click_here+'</a> '+gCSStrings.rc_webex+'</div><br/><div>'+gCSStrings.rc_webex_browser+'<br/>'+gCSStrings.rc_webex_let_expert_know+'</div>';displayMessage(false);}
function bookmarkExpert(){bookmarkUs(gPartnerUser.displayUserName+'@'+gCommonStrings.site_context_bookmark,gCSUrls.eStore);}
function onBeforeUnloadServicePage(evt){if(warningOnClose==g_closeWarnings.feedback||warningOnClose==g_closeWarnings.survey)
evt.returnValue=warningOnClose;}
function onCloseButtonPressed(){if(warningOnClose==g_closeWarnings.nothing){onCloseServicePage();}
else{$("dCloseSPConfirm").down(".dPopupText").update(warningOnClose);$("dCloseSPConfirm").show();$("customerSession").hide();}}
function onCancelCloseServicePage(){$("dCloseSPConfirm").hide();$("customerSession").show();}
function onCloseServicePage(){var body=Object.toJSON({event:"onclose"});gJabberConnection.sendMsg(gPartnerUser.jabberFullUserName,g_PAGE_EVENT,body.toString(),g_workflowId);gJabberConnection.jabberDisconnect();gS2StartSession.allowStartSession=true;if(typeof(gS2SolutionStartSession)!=="undefined"){gS2SolutionStartSession.allowStartSession=true;}
saveSessionEvent({user:gCurrentUser,event:{action:SE_CCLOSE,description:"Service Page - Customer:close page"},sessionIdList:[g_support_sessionId]})
if(warningOnClose==g_closeWarnings.survey){openLeavingSurveyPage();}
lightBoxOff();$("customerSession").hide();Event.stopObserving(window,'beforeunload',onBeforeUnloadServicePage);Event.stopObserving(window,"unload",onCloseServicePage);}
function openLeavingSurveyPage(){window.open(gCSUrls.leavingSurveyURL+'?supporterId='+gPartnerUser.id+'&workflowId='+g_workflowId+'&supportRequestId='+g_supportRequestId,'leavingPage','width=500,height=325,resizable=1,toolbar=0,status=0,scrollbars=1');}
function openInIframe(url){$("openLinkIframe").src=url;}
function handleMessage_jsjac(aJSJaCPacket)
{var msgSubject=aJSJaCPacket.getSubject();var msgBody=aJSJaCPacket.getBody();var msgFrom=aJSJaCPacket.getFrom();var threadId=aJSJaCPacket.getThread();debug_connection('handleMessage_jsjac::subject::'+msgSubject+' body::'+msgBody+' from::'+msgFrom+' threadId::'+threadId);if((msgFrom==gJabberConnection.addJabberDomainSuffix(gCurrentUser.jabberUserName))&&(threadId==-100)){gJabberConnection.selfKeepAlivePeriodExec.stop();gJabberConnection.selfKeepAlivePeriodExec=null;clearTimeout(gJabberConnection.selfKeepAliveTimer);var connectionCallback=gJabberConnection.getConnectionCallback();if(gMustWaitForGettingSelfKeepAliveToStartSession&&connectionCallback){connectionCallback.onConnect();gJabberConnection.setConnectionCallback(null);}}
if(typeof(g_workflowId)=="undefined"||(threadId!=g_workflowId)||(msgFrom!=gPartnerUser.jabberFullUserName&&msgFrom.indexOf(gJabberConnection.supportSpaceUsername)<0)){debug_connection('handleMessage_jsjac:FILTERED OUT:['+msgSubject+','+msgBody+"]");return;}
g_currentMsg.body=new ChatMessage().decode(msgBody);debug_connection('handleMessage_jsjac::body retrieved');switch(msgSubject)
{case gJabberConnection.feature.chat:g_currentMsg.from=gPartnerUser.jabberUserName;g_currentMsg.name=gPartnerUser.displayUserName;displayMessage(true);break;default:var properties=evalJson(msgBody);handleApplicationMessages(msgSubject,properties);break;}}
function handleApplicationMessages(msgSubject,properties)
{switch(msgSubject)
{case g_RCTV_REQUEST:handleRemoteControlRequest();break;case g_RCWEBEX_REQUEST:handleRemoteWebexControlRequest(properties);break;case JBMSG_START_CONSULTING:gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(CONSULTING_NOTIFICATION,true);break;case JBMSG_STOP_CONSULTING:gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(CONSULTING_NOTIFICATION,false);break;case JBMSG_JOBOFFER:openJobOffer();break;case JBMSG_LOAD_CHECKLIST:loadChecklist(true);break;case JBMSG_CHECKLIST:updateChecklist(properties);break;case g_PAGE_EVENT:debug_connection('handleApplicationMessages::page event');handlePartnerPageEvent(properties);break;case g_SCOPE_OF_WORK_IS_SET:gChats[SERVICE_PAGE_WIDGET_ID].setTypingText();scopeOfWorkIsSet();break;case g_SESSION_REPORT_STEP_FROM_LEAVE_OPEN:break;case RESOLUTION_SET:displaySessionResolution(properties);break;case g_CASE_UNRESOLVED_LEFT_OPEN:displayUnresolvedLeaveOpen();g_displaySupporterDisconnectMessage=false;break;case g_FORWARD_CONFIRM:g_FORWARD_OR_DISPATCH=g_FORWARD_CONFIRM;displayForwardRequest(properties);g_displaySupporterDisconnectMessage=false;break;case g_CASE_CANTRESOLVE:displayCantResolve();g_displaySupporterDisconnectMessage=false;break;case g_CASE_UNRESOLVED_CANTFORWARD:displayUnresolvedCantForward(properties);g_displaySupporterDisconnectMessage=false;break;case g_CASE_UNRESOLVED_DISCONNECTED:displayUnresolvedDisconnect(properties);g_displaySupporterDisconnectMessage=false;break;case g_START_NEW_SUPPORT_REQUEST_FLOW:gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(CONSULTING_NOTIFICATION,false);switchToNewSession(properties);break;case JBMSG_CUSTOMER_FEEDBACK:displayFeedback();break;case g_SESSION_TERMINATED:terminateCustomerSession();break;case g_IS_TYPING:gChats[SERVICE_PAGE_WIDGET_ID].displayTypingNotification(CHAT_NOTIFICATION,true);break;case g_CUSTOMER_DISPATCH_REQUEST:g_FORWARD_OR_DISPATCH=g_CUSTOMER_DISPATCH_REQUEST;displayDispatchRequest(properties);break;case g_RESUME_SESSION_TIMEOUT:g_resumeSession.updateUI({status:"sorry",reason:"noanswer"});break;case g_CUSTOMER_SOFTWARE_ACTIVATION:displaySoftwareActivationKey(properties);break;case g_SUBMIT_CALL_REQUEST:var phoneCallId=properties['phoneCallId'];displayCallRequest(phoneCallId);break;case EXPERT_IDLE:debug_connection('Expert is idle');handlePartnerPageEvent({event:"onclose"});break;case g_LOG_ME_IN:var url=properties['url'];handleLogMeIn(url);break;default:}}
function clearPreviousLogMeInLinks(){$$(".logMeInLink").each(function(element){element.update();});}
function handleLogMeIn(url){clearPreviousLogMeInLinks();g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div class="logMeInLink">'+'<a href="#" onclick="handleLogMeInClick(\''+url+'\')">'+gSessionStrings.Click_here+'</a> '+
gCSStrings.rc_webex+'</div>'+'<br/>'+'<div>'+gCSStrings.rc_webex_browser+'<br/>'+gCSStrings.rc_webex_let_expert_know+'</div>';displayMessage(false);}
function handleLogMeInClick(url){clearPreviousLogMeInLinks();openInIframe(url);}
function handlePartnerPageEvent(properties)
{var partnerEvent=properties['event'];debug_connection('handlePartnerPageEvent::page event::'+partnerEvent);switch(partnerEvent){case'onload':gJabberConnection.sendUnblockMsg(gPartnerUser,g_workflowId);debug_connection('handlePartnerPageEvent::unblock sent');enableServicePage();saveSessionEvent({user:gCurrentUser,event:{action:SEND_UNBLOCK,description:"Customer sends unblock to "+gPartnerUser.jabberFullUserName},sessionIdList:[g_support_sessionId]});break;case'onclose':showSupporterConnection(false);gJabberConnection.jabberDisconnect();break;default:logme("handlePartnerPageEvent("+partnerEvent+","+Object.toJSON(properties)+") has been not handled");}}
function setWarningOnClose(msg){warningOnClose=msg;}
function S2ResumeSession(oStartSessionParams)
{this.workflowId=oStartSessionParams['workflowId']?oStartSessionParams['workflowId']:-1;this.supporter=oStartSessionParams['supporter']?oStartSessionParams['supporter']:null;this.sessionEndedByUser=false;}
S2ResumeSession.prototype=new Object;S2ResumeSession.prototype.connect=function()
{this.updateUI({status:'calling'});supportRequestFlow.resumeLeftOpenSession(this.workflowId,{callback:function(){},errorHandler:function(status,exception){this.updateUI({status:"sorry",reason:status});}.bind(this)});}
S2ResumeSession.prototype.updateUI=function(oPopupStatus)
{switch(oPopupStatus.status)
{case'calling':g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div id="dResume" class="dRequest">'+'<div>'+gCSStrings.resume+'</div>'+'<div style="text-align:center;margin-top:4px"><img src="'+gCommonUrls.preloader+'" alt=""/></div>'+'<div class="dRequestDeny" onclick="g_resumeSession.cancel()">'+gSessionStrings.cancel+'</div>'+'</div>';break;case'canceled':g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div id="dResume" class="dRequest">'+'<div>'+gCSStrings.resume_canceled+'</div>'+'<div>'+gCSStrings.noanswer1+' <span class="linkTxt" onclick="g_resumeSession.connect()">'+gCSStrings.noanswer2+'</span>,'+' <span class="linkTxt" onclick="g_resumeSession.close()">'+gCSStrings.noanswer3+'</span> '+
gCSStrings.noanswer4+' <span class="linkTxt" onclick="g_resumeSession.end()">'+gCSStrings.noanswer5+'</span> '+
gCSStrings.noanswer6+'</div>'+'</div>';g_currentMsg.body=g_currentMsg.body.replace(/###SUPPORTERNAME###/g,this.supporter.displayUserName);break;case'sorry':switch(oPopupStatus.reason)
{case'busy':case'offline':var statustext=(oPopupStatus.reason=='busy')?gStartSessionStrings.expert_busy:gStartSessionStrings.expert_offline;g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div id="dResume" class="dRequest">'+'<div>'+statustext+'</div>'+'<div>'+gCSStrings.noanswer1+' <span class="linkTxt" onclick="g_resumeSession.close()">'+gCSStrings.noanswer3+'</span> '+
gCSStrings.noanswer4+'&nbsp;<span class="linkTxt" onclick="g_resumeSession.end()">'+gCSStrings.noanswer5+'</span> '+
gCSStrings.noanswer6+'</div>'+'</div>';g_currentMsg.body=g_currentMsg.body.replace(/###SUPPORTERNAME###/g,this.supporter.displayUserName);break;case'noanswer':g_currentMsg.from=PERMISSION_REQUEST;g_currentMsg.body='<div id="dResume" class="dRequest">'+'<div>'+gStartSessionStrings.expert_unavailable+'</div>'+'<div>'+gCSStrings.noanswer1+' <span class="linkTxt" onclick="g_resumeSession.connect()">'+gCSStrings.noanswer2+'</span>,'+' <span class="linkTxt" onclick="g_resumeSession.close()">'+gCSStrings.noanswer3+'</span> '+gCSStrings.noanswer4+' <span class="linkTxt" onclick="g_resumeSession.end()">'+gCSStrings.noanswer5+'</span> '+
gCSStrings.noanswer6+'</div>'+'</div>';g_currentMsg.body=g_currentMsg.body.replace(/###SUPPORTERNAME###/g,this.supporter.displayUserName);break;}
showChatWindow();break;}
$('dCSChat').innerHTML='';displayMessage(false);}
S2ResumeSession.prototype.cancel=function()
{supportRequestFlow.cancelResumeSession(this.workflowId,{callback:function(){this.updateUI({status:'canceled'});setConversationActive(false);}.bind(this),errorHandler:function(errorString,exception){}});}
S2ResumeSession.prototype.close=function()
{setWarningOnClose(g_closeWarnings.nothing);onCloseServicePage();}
S2ResumeSession.prototype.end=function()
{supportRequestFlow.closeLeftOpenSession(this.workflowId,{callback:function(){this.sessionEndedByUser=true;displayFeedback();}.bind(this),errorHandler:function(errorString,exception){}});}
S2ResumeSession.prototype.setSupporter=function(supporter){this.supporter=supporter;}
S2ResumeSession.prototype.setWorkflowId=function(workflowId)
{this.workflowId=workflowId;}
var Feedback=Class.create({initialize:function(){this.numberOfSupporterQuestions=3;this.numberOfCustomerQuestions=5;this.feedbackRating=0;this.defaultWasChanged=false;},initFeedback:function(){this.answersContainer=$("dFeedbackBody");this.additionalComments=$('feedbackAdditionalComments');this.errorDiv=$('dFeedbackValidationError');},getAnsweredQuestionValueAsNumber:function(index)
{var radioGroup=this.answersContainer.select('.answerGroup_'+index);for(var i=0;i<radioGroup.length;i++)
{if(radioGroup[i].checked){return i+1;}}
return-1;},validateFeedbackForm:function(isSupporter)
{var numberOfQuestions=isSupporter?this.numberOfSupporterQuestions:this.numberOfCustomerQuestions;var errors=new Array();var missingQuestionErrorMessage=false;for(var i=0;i<numberOfQuestions;i++){var answeredQuestion=this.getAnsweredQuestionValue(i);if(answeredQuestion==-1&&!missingQuestionErrorMessage){missingQuestionErrorMessage=true;errors.push(gFeedbackStrings.feedback_answer_question);}}
if(isSupporter&&this.feedbackRating==0){errors.push(gFeedbackStrings.feedback_rate_customer);}
var textAdditionalComments=this.additionalComments;if(textAdditionalComments&&textAdditionalComments.value.length>255){errors.push(gCommonErrors["errors.maxlength"].replace('{0}',gFeedbackStrings.feedback_comments).replace('{1}','255'));}
if(textAdditionalComments&&!textAdditionalComments.value.match(g_regExpNoHtmlTags)){errors.push(gCommonErrors["errors.htmlEscape"].replace('{0}',gFeedbackStrings.feedback_comments));}
return errors;},getAnsweredQuestionValue:function(index)
{var radioGroup=this.answersContainer.select('.answerGroup_'+index);for(var i=0;i<radioGroup.length;i++){if(radioGroup[i].checked){return radioGroup[i].value;}}
return-1;},setErrorMessages:function(feedbackErrors)
{if(!this.errorDiv){return;}
this.errorDiv.innerHTML="";for(var i=0;i<feedbackErrors.length;i++){this.errorDiv.innerHTML+="<div>"+feedbackErrors[i]+"</div>";}},setServerReply:function(successBool,errorString,isSupporter){if(successBool){if(isSupporter){this.getSupporterSession().setWarningOnClose(g_closeWarnings.nothing);this.getSupporterSession().getSupporterDesktop().displayEndSession();}else{setWarningOnClose(g_closeWarnings.nothing);}}else{if(this.errorDiv){this.errorDiv.innerHTML=gFeedbackStrings.feedback_not_saved;}}},getAdditionalComment:function()
{if(this.additionalComments.value!=gSessionStrings.additional_comments){return trim(this.additionalComments.value)+' ';}
else{return' ';}},clearDefaultText:function()
{if(this.defaultWasChanged){return;}
this.defaultWasChanged=true;this.additionalComments.value='';this.additionalComments.style.color='#585858'},clearRadioButtons:function(isSupporter)
{var numberOfQuestions=isSupporter?this.numberOfSupporterQuestions:this.numberOfCustomerQuestions;for(var i=0;i<numberOfQuestions;i++){var radioGroup=this.answersContainer.select('.answerGroup_'+i);for(var j=0;j<radioGroup.length;j++){radioGroup[j].checked=false;}}}});var CustomerFeedback=Class.create(Feedback,{initialize:function(){CustomerFeedback.basefeedback.call(this);},clearCustomerFeedbackForm:function(){this.clearRadioButtons(false);$('recommendExpert').checked=false;$('notRecommendExpert').checked=false;this.feedbackRating=0;this.additionalComments.value='';if(this.errorDiv){this.errorDiv.innerHTML='&nbsp;';}},submitCustomerFeedbackForm:function(formId){var oForm=$(formId);if(eval($('dFeedbackButtonSubmit').submitted))
return;this.errorDiv.update();var feedbackErrors=this.validateFeedbackForm(false);if(feedbackErrors.length>0)
{this.setErrorMessages(feedbackErrors);$('dFeedbackButtonSubmit').submitted=false;return;}
disableObject('dFeedbackButtonSubmit',true);$('dFeedbackButtonSubmit').submitted=true;$('dRating').value=this.getAnsweredQuestionValueAsNumber(4);this.additionalComments.innerHTML=this.getAdditionalComment();this.additionalComments.value=this.getAdditionalComment();oForm.request({parameters:{'workflowId':g_workflowId},onSuccess:function(response){oForm.disable();this.disableButtons();this.setServerReply(true,null,false);var customerFeedbackMessageBoxText=$('customerFeedbackMessageBoxText');if(customerFeedbackMessageBoxText){customerFeedbackMessageBoxText.update(gCSStrings.thanksMsg1);}
toggleCustomerSessionFrame();}.bind(this),onFailure:function(response){this.setServerReply(false,response.text,false);}.bind(this)})},disableButtons:function(){var customerFeedback=$('dCustomerFeedback');if(customerFeedback){customerFeedback.down('.actions').select('img.linkImg').each(function(elt){disableImageButton(elt);});}}});Object.inherit(CustomerFeedback,Feedback,"basefeedback");var customerFeedback=new CustomerFeedback();function updateChecklist(propertiesMap){var sessionCheckListId=propertiesMap["id"];var answer=propertiesMap["answer"];var reason=propertiesMap["reason"];if(answer.toUpperCase()==CHECKLIST_YES_ANSWER){markPositiveAnswer(sessionCheckListId);}else if(answer.toUpperCase()==CHECKLIST_NO_ANSWER){markNegativeAnswer(sessionCheckListId,reason);}}
function markPositiveAnswer(sessionCheckListId){var checklistAnswer=$('checklistAnswer_'+sessionCheckListId);if(checklistAnswer&&!checklistAnswer.hasClassName("yes")){var checklistReason=checklistAnswer.down(".reason");var checklistReasonText=checklistAnswer.down(".reasonText");checklistAnswer.addClassName("yes");checklistAnswer.removeClassName("no");checklistReasonText.update();checklistReason.style.visibility="hidden";}}
function markNegativeAnswer(sessionCheckListId,reason){var checklistAnswer=$('checklistAnswer_'+sessionCheckListId);if(checklistAnswer){var checklistReason=checklistAnswer.down(".reason");var checklistReasonText=checklistAnswer.down(".reasonText");if(!checklistAnswer.hasClassName("no")){checklistAnswer.addClassName("no");checklistAnswer.removeClassName("yes");}
checklistReasonText.update(reason);checklistReason.style.visibility="visible";}}
function showChecklist(){$("checklistPage").show();}
function S2SignupOrSignin(){}
S2SignupOrSignin.prototype=new Object;S2SignupOrSignin.prototype.init=function(submitHandler){this.submitHandler=submitHandler;this.observeElements();},S2SignupOrSignin.prototype.initSignin=function(){if($('externalLoginForm')){this.essSigninValidation=new Validation('externalLoginForm',{immediate:true});}},S2SignupOrSignin.prototype.initSignup=function(){if($('RegForm')){this.essSignupValidation=new Validation('RegForm',{immediate:true});}
generateCountryCodesSelectBox();this.resetSignupSubmitButton();},S2SignupOrSignin.prototype.observeElements=function(){if($("signinSubtitleLink")&&$("signupSubtitleLink")){Event.observe("signinSubtitleLink",'click',this.switchToSigninView);Event.observe("signupSubtitleLink",'click',this.switchToSignupView);this.resetSigninSubmitButton();}}
S2SignupOrSignin.prototype.submitESSAjaxSignupForm=function(){var oForm=$('RegForm');if(this.essSignupValidation.validate())
{this.disableSignupSubmitButton(true);new JsonP.FormRequest(oForm,{parameters:{ajax:true,submission:true},onSuccess:function(response){if(onDirectRegistrationSuccess(response)){this.submitHandler.onSuccess(response);}else{this.submitHandler.onFailure(response);}}.bind(this),onFailure:function(response){this.submitHandler.onFailure(response);this.disableSignupSubmitButton(false);handleFailureAjaxResponse(response,$("RegForm").down(".sError"),gCommonErrors);}.bind(this),onComplete:function(){this.disableSignupSubmitButton(false);}.bind(this)});return true;}
return false;}
S2SignupOrSignin.prototype.submitESSAjaxSigninForm=function(){var oForm=$('externalLoginForm');if(this.essSigninValidation.validate()){this.disableSigninSubmitButton(true);new JsonP.FormRequest(oForm,{parameters:{ajax:true},onSuccess:function(response){this.disableSigninSubmitButton(false);onLoginSuccess(oForm,response);this.submitHandler.onSuccess(response);}.bind(this),onFailure:function(response){this.disableSigninSubmitButton(false);onLoginFailed(oForm,response);this.submitHandler.onFailure();}.bind(this)});return true;}
return false;}
S2SignupOrSignin.prototype.setSubmitButtonImages=function(prefix){var prfx=prefix?prefix:"start_session";this.submitImages={regular:gStartSessionUrls[prfx+"_regular"],over:gStartSessionUrls[prfx+"_over"],pressed:gStartSessionUrls[prfx+"_pressed"],disabled:gStartSessionUrls[prfx+"_disabled"]}}
S2SignupOrSignin.prototype.resetSignupSubmitButton=function(){if(!$("dESSSignupBody")){return;}
var submitImg=$("dESSSignupBody").down(".submitButton img");submitImg.src=this.submitImages.regular;submitImg.className="linkImg";submitImg.show();Event.observe(submitImg,'click',this.submitESSAjaxSignupForm.bind(this));Event.observe(submitImg,'mouseout',function(){submitImg.src=this.submitImages.regular}.bind(this));Event.observe(submitImg,'mouseup',function(){submitImg.src=this.submitImages.regular}.bind(this));Event.observe(submitImg,'mouseover',function(){submitImg.src=this.submitImages.over}.bind(this));Event.observe(submitImg,'mousedown',function(){submitImg.src=this.submitImages.pressed}.bind(this));}
S2SignupOrSignin.prototype.resetSigninSubmitButton=function(){if(!$("dESSSigninBody")){return;}
var submitImg=$("dESSSigninBody").down(".submitButton img");submitImg.src=gStartSessionUrls.signin_regular;submitImg.className="linkImg"
Event.observe(submitImg,'click',this.submitESSAjaxSigninForm.bind(this));Event.observe(submitImg,'mouseout',function(){this.src=gStartSessionUrls.signin_regular});Event.observe(submitImg,'mouseup',function(){this.src=gStartSessionUrls.signin_regular});Event.observe(submitImg,'mouseover',function(){this.src=gStartSessionUrls.signin_over});Event.observe(submitImg,'mousedown',function(){this.src=gStartSessionUrls.signin_pressed});}
S2SignupOrSignin.prototype.disableSigninSubmitButton=function(bool){if(!$("dESSSigninBody")){return;}
var submitImg=$("dESSSigninBody").down(".submitButton img");disableObject(submitImg,bool);if(bool){submitImg.replace('<img src="'+gStartSessionUrls.signin_disabled+'"/>');}
else{this.resetSigninSubmitButton();}}
S2SignupOrSignin.prototype.disableSignupSubmitButton=function(bool){if(!$("dESSSignupBody")){return;}
var submitImg=$("dESSSignupBody").down(".submitButton img");disableObject(submitImg,bool);if(bool){submitImg.replace('<img src="'+this.submitImages.disabled+'"/>');}
else{this.resetSignupSubmitButton();}}
S2SignupOrSignin.prototype.display=function(parameters,submitHandler,displayHandler){if(parameters.mode=="overlay"){this.setSubmitButtonImages(parameters.submitButtonImgPrefix);lightBoxOff();lightBoxOn(parameters);}
var para={aiu:"UserRegistration"};if(parameters.aiu==null){Object.extend(parameters,para);}
new Ajax.Request(parameters.url,{parameters:parameters,method:'get',onSuccess:function(transport){$(parameters.rel).update(transport.responseText);var afterRender=function(){this.init(submitHandler);this.initSignup();this.initSignin();if(displayHandler){displayHandler.onSuccess();}}.bind(this);afterRender.defer();}.bind(this),onFailure:function(response){logme("Failed to open start page");if(displayHandler){displayHandler.onFailure(response);}}});}
S2SignupOrSignin.prototype.switchToSigninView=function(){$("dESSSignupBody").hide();$("dESSSigninBody").show();$("signupSubtitleLink").className="linkTxt";$("signinSubtitleLink").className="";}
S2SignupOrSignin.prototype.switchToSignupView=function(){$("dESSSigninBody").hide();$("dESSSignupBody").show();$("signinSubtitleLink").className="linkTxt";$("signupSubtitleLink").className="";}
var gSignupOrSignin=new S2SignupOrSignin();function S2SecuredAction()
{}
S2SecuredAction.prototype=new Object;S2SecuredAction.prototype.execute=function(startPageParams,loggedInAction){if(isLoggedIn()){loggedInAction();}
else{Object.extend(startPageParams,{rel:"dOverlayStartPage"});Object.extend(startPageParams,{url:gStartSessionUrls.internal_start});Object.extend(startPageParams,{mode:"overlay"});gSignupOrSignin.display(startPageParams,{onSuccess:function(){loggedInAction();},onFailure:function(){logme("Failed to open start page")}});}}
var gSecuredAction=new S2SecuredAction();if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(phoneCallManager==null)var phoneCallManager={};phoneCallManager._path=''+JAWR.jawr_dwr_path+'';phoneCallManager.acceptSupporterCallRequest=function(p0,p1,p2,callback){dwr.engine._execute(phoneCallManager._path,'phoneCallManager','acceptSupporterCallRequest',p0,p1,p2,callback);}
phoneCallManager.submitCustomerCallRequest=function(p0,p1,callback){dwr.engine._execute(phoneCallManager._path,'phoneCallManager','submitCustomerCallRequest',p0,p1,callback);}
if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(supportRequestFlow==null)var supportRequestFlow={};supportRequestFlow._path=''+JAWR.jawr_dwr_path+'';supportRequestFlow.startSupportRequestCall=function(p0,p1,p2,p3,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','startSupportRequestCall',p0,p1,p2,p3,callback);}
supportRequestFlow.cancelSupportRequest=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelSupportRequest',p0,callback);}
supportRequestFlow.inviteSupporterForConsult=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','inviteSupporterForConsult',p0,p1,callback);}
supportRequestFlow.handOffAfterConsult=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','handOffAfterConsult',p0,callback);}
supportRequestFlow.dispatchAfterConsult=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','dispatchAfterConsult',p0,callback);}
supportRequestFlow.stopConsult=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','stopConsult',p0,callback);}
supportRequestFlow.approveConsultantDispatch=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveConsultantDispatch',p0,p1,callback);}
supportRequestFlow.approveConsultantForward=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveConsultantForward',p0,p1,callback);}
supportRequestFlow.completeSupportSession=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','completeSupportSession',p0,p1,callback);}
supportRequestFlow.leaveSessionOpen=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','leaveSessionOpen',p0,callback);}
supportRequestFlow.resumeLeftOpenSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','resumeLeftOpenSession',p0,callback);}
supportRequestFlow.cancelResumeSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelResumeSession',p0,callback);}
supportRequestFlow.closeLeftOpenSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','closeLeftOpenSession',p0,callback);}
supportRequestFlow.cancelReport=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelReport',p0,callback);}
supportRequestFlow.terminateSupportSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateSupportSession',p0,callback);}
supportRequestFlow.terminateAfterStoppedWaiting=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateAfterStoppedWaiting',p0,callback);}
supportRequestFlow.createJobOffer=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','createJobOffer',p0,callback);}
supportRequestFlow.cancelJobOffer=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelJobOffer',p0,callback);}
supportRequestFlow.terminateJobOffer=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateJobOffer',p0,callback);}
supportRequestFlow.terminateAfterSupporterDisconnect=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateAfterSupporterDisconnect',p0,callback);}
supportRequestFlow.approveFix=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveFix',p0,p1,callback);}
supportRequestFlow.approveSupportSessionResolution=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveSupportSessionResolution',p0,p1,callback);}
supportRequestFlow.agreeJobOffer=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','agreeJobOffer',p0,p1,callback);}
supportRequestFlow.useOldCard=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','useOldCard',p0,p1,callback);}
supportRequestFlow.getActiveProcessCurrentState=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','getActiveProcessCurrentState',p0,callback);}
if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(searchManager==null)var searchManager={};searchManager._path=''+JAWR.jawr_dwr_path+'';searchManager.findEligibleSupportersSortedByWorkflowId=function(p0,p1,p2,p3,callback){dwr.engine._execute(searchManager._path,'searchManager','findEligibleSupportersSortedByWorkflowId',p0,p1,p2,p3,callback);}
searchManager.findEligibleSupportersSorted=function(p0,p1,p2,callback){dwr.engine._execute(searchManager._path,'searchManager','findEligibleSupportersSorted',p0,p1,p2,callback);}
searchManager.getSearchResultSupporterByPackageAndWorkflowId=function(p0,p1,p2,p3,p4,callback){dwr.engine._execute(searchManager._path,'searchManager','getSearchResultSupporterByPackageAndWorkflowId',p0,p1,p2,p3,p4,callback);}
searchManager.getSearchResultSupporterByPackage=function(p0,p1,p2,p3,callback){dwr.engine._execute(searchManager._path,'searchManager','getSearchResultSupporterByPackage',p0,p1,p2,p3,callback);}
searchManager.getSearchResultDefaultPackages=function(p0,p1,p2,callback){dwr.engine._execute(searchManager._path,'searchManager','getSearchResultDefaultPackages',p0,p1,p2,callback);}
if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(supportRequestFlow==null)var supportRequestFlow={};supportRequestFlow._path=''+JAWR.jawr_dwr_path+'';supportRequestFlow.startSupportRequestCall=function(p0,p1,p2,p3,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','startSupportRequestCall',p0,p1,p2,p3,callback);}
supportRequestFlow.cancelSupportRequest=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelSupportRequest',p0,callback);}
supportRequestFlow.inviteSupporterForConsult=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','inviteSupporterForConsult',p0,p1,callback);}
supportRequestFlow.handOffAfterConsult=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','handOffAfterConsult',p0,callback);}
supportRequestFlow.dispatchAfterConsult=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','dispatchAfterConsult',p0,callback);}
supportRequestFlow.stopConsult=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','stopConsult',p0,callback);}
supportRequestFlow.approveConsultantDispatch=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveConsultantDispatch',p0,p1,callback);}
supportRequestFlow.approveConsultantForward=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveConsultantForward',p0,p1,callback);}
supportRequestFlow.completeSupportSession=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','completeSupportSession',p0,p1,callback);}
supportRequestFlow.leaveSessionOpen=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','leaveSessionOpen',p0,callback);}
supportRequestFlow.resumeLeftOpenSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','resumeLeftOpenSession',p0,callback);}
supportRequestFlow.cancelResumeSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelResumeSession',p0,callback);}
supportRequestFlow.closeLeftOpenSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','closeLeftOpenSession',p0,callback);}
supportRequestFlow.cancelReport=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelReport',p0,callback);}
supportRequestFlow.terminateSupportSession=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateSupportSession',p0,callback);}
supportRequestFlow.terminateAfterStoppedWaiting=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateAfterStoppedWaiting',p0,callback);}
supportRequestFlow.createJobOffer=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','createJobOffer',p0,callback);}
supportRequestFlow.cancelJobOffer=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','cancelJobOffer',p0,callback);}
supportRequestFlow.terminateJobOffer=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateJobOffer',p0,callback);}
supportRequestFlow.terminateAfterSupporterDisconnect=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','terminateAfterSupporterDisconnect',p0,callback);}
supportRequestFlow.approveFix=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveFix',p0,p1,callback);}
supportRequestFlow.approveSupportSessionResolution=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','approveSupportSessionResolution',p0,p1,callback);}
supportRequestFlow.agreeJobOffer=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','agreeJobOffer',p0,p1,callback);}
supportRequestFlow.useOldCard=function(p0,p1,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','useOldCard',p0,p1,callback);}
supportRequestFlow.getActiveProcessCurrentState=function(p0,callback){dwr.engine._execute(supportRequestFlow._path,'supportRequestFlow','getActiveProcessCurrentState',p0,callback);}
if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(dwr==null)var dwr={};if(dwr.engine==null)dwr.engine={};if(DWREngine==null)var DWREngine=dwr.engine;if(supportManager==null)var supportManager={};supportManager._path=''+JAWR.jawr_dwr_path+'';supportManager.getSessionResumeBean=function(p0,callback){dwr.engine._execute(supportManager._path,'supportManager','getSessionResumeBean',p0,callback);}
supportManager.logRemoteControlApproval=function(p0,p1,callback){dwr.engine._execute(supportManager._path,'supportManager','logRemoteControlApproval',p0,p1,callback);}
supportManager.sendSoftwareActivationKeyToCustomer=function(p0,callback){dwr.engine._execute(supportManager._path,'supportManager','sendSoftwareActivationKeyToCustomer',p0,callback);}
supportManager.markCustomerConnectedToSession=function(p0,callback){dwr.engine._execute(supportManager._path,'supportManager','markCustomerConnectedToSession',p0,callback);}
supportManager.isCustomerConnectedToSession=function(p0,callback){dwr.engine._execute(supportManager._path,'supportManager','isCustomerConnectedToSession',p0,callback);}