Changeset 4481 for branches/2.2


Ignore:
Timestamp:
05/20/11 19:07:42 (13 years ago)
Author:
alexandrecorreia
Message:

Ticket #1885 - Correção para o funcionamento dentro dos navegadores Chrome11 e Safari

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2/jabberit_messenger/jmessenger/js/strophe.mini.js

    r4475 r4481  
    1 DOMObjects={xmlParse:function(xmlString){var xmlObj=this.xmlRender(xmlString);if(xmlObj){try{if(this.processor==undefined){this.processor=new XSLTProcessor();this.processor.importStylesheet(this.xmlRender('<xsl:stylesheet version="1.0"\ 
    2                     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\ 
    3                     <xsl:output method="html" indent="yes"/><xsl:template\ 
    4                     match="@*|node()"><xsl:copy><xsl:copy-of\ 
    5                     select="@*|node()"/></xsl:copy></xsl:template>\ 
    6                     </xsl:stylesheet>'));} 
    7 var htmlObj=this.processor.transformToDocument(xmlObj).documentElement;if(htmlObj.tagName.toLowerCase()=='html'){htmlObj=htmlObj.firstChild.firstChild;} 
    8 return document.importNode(htmlObj,true);}catch(e){try{var htmlObj=document.importNode(xmlObj.documentElement,true);if(htmlObj.tagName.toLowerCase()=="div"){var div_wrapper=document.createElement('div');div_wrapper.appendChild(htmlObj);if(div_wrapper.innerHTML){div_wrapper.innerHTML=div_wrapper.innerHTML;} 
    9 htmlObj=div_wrapper.firstChild;} 
    10 return htmlObj;}catch(e){alert("TrophyIM Error: Cannot add html to page "+e.message);}}}},xmlRender:function(xmlString){try{var renderObj=new ActiveXObject("Microsoft.XMLDOM");renderObj.async="false";if(xmlString){renderObj.loadXML(xmlString);}}catch(e){try{if(this.parser==undefined){this.parser=new DOMParser();} 
    11 var renderObj=this.parser.parseFromString(xmlString,"application/xml");}catch(e){alert("TrophyIM Error: Cannot create new html for page");}} 
    12 return renderObj;},getHTML:function(page) 
    13 {return this.xmlParse(HTMLSnippets[page]);},getScript:function(script) 
    14 {var newscript=document.createElement('script');newscript.setAttribute('src',script);newscript.setAttribute('type','text/javascript');return newscript;}};TrophyIM={controll:{notificationNewUsers:0},autoConnection:{connect:true},activeChatRoom:{name:[]},chatHistory:{},constants:{stale_roster:false},posWindow:{left:400,top:100},statusConn:{connected:false},_timeOut:{renderRoster:null},removeResult:{idResult:[]},setCookie:function(name,value) 
    15 {var expire=new Date();expire.setDate(expire.getDate()+365);document.cookie=name+"="+value+"; expires="+expire.toGMTString();},delCookie:function(name) 
    16 {var expire=new Date();expire.setDate(expire.getDate()-365);document.cookie=name+"= ; expires="+expire.toGMTString();delete TrophyIM.cookies[name];},getCookies:function() 
    17 {var cObj={};var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++) 
    18 {while(cookies[i].charAt(0)==' ') 
    19 {cookies[i]=cookies[i].substring(1,cookies[i].length);} 
    20 if(cookies[i].substr(0,8)=="trophyim") 
    21 {var nvpair=cookies[i].split("=",2);cObj[nvpair[0]]=nvpair[1];TrophyIM.setCookie(nvpair[0],nvpair[1]);}} 
    22 return cObj;},load:function() 
    23 {if(loadscript.getUserCurrent()==null) 
    24 {loadscript.setUserCurrent();} 
    25 if(!TrophyIM.statusConn.connected) 
    26 {TrophyIM.cookies=TrophyIM.getCookies();setTimeout("TrophyIM.showLogin()",550);} 
    27 else 
    28 {loadscript.rosterDiv();}},storeData:function() 
    29 {if(TrophyIM.connection&&TrophyIM.connection.connected) 
    30 {TrophyIM.setCookie('trophyim_bosh_xid',TrophyIM.connection.jid+"|"+ 
    31 TrophyIM.connection.sid+"|"+TrophyIM.connection.rid);TrophyIM.rosterObj.save();}},showLogin:function() 
    32 {if(typeof(JSON)!=undefined&&typeof(Strophe)!=undefined) 
    33 {TrophyIM.JSONStore=new TrophyIMJSONStore();if(TrophyIM.JSONStore.store_working&&TrophyIM.cookies['trophyim_bosh_xid']) 
    34 {var xids=TrophyIM.cookies['trophyim_bosh_xid'].split("|");TrophyIM.delCookie('trophyim_bosh_xid');TrophyIM.constants.stale_roster=true;TrophyIM.connection=new Strophe.Connection(TROPHYIM_BOSH_SERVICE);TrophyIM.connection.rawInput=TrophyIM.rawInput;TrophyIM.connection.rawOutput=TrophyIM.rawOutput;Strophe.info('Attempting Strophe attach.');TrophyIM.connection.attach(xids[0],xids[1],xids[2],TrophyIM.onConnect);TrophyIM.onConnect(Strophe.Status.CONNECTED);} 
    35 else 
    36 {loadscript.rosterDiv();var _getUserCurrent=null;_getUserCurrent=loadscript.getUserCurrent();if(_getUserCurrent==null) 
    37 {setTimeout("TrophyIM.showLogin()",500);} 
    38 else 
    39 {TrophyIM.login(Base64.decode(_getUserCurrent.jid),Base64.decode(_getUserCurrent.password));}}} 
    40 else 
    41 {setTimeout("TrophyIM.showLogin()",500);}},log:function(level,msg) 
    42 {if(TrophyIM.logging_div&&level>=TROPHYIM_LOGLEVEL) 
    43 {while(TrophyIM.logging_div.childNodes.length>TROPHYIM_LOG_LINES) 
    44 {TrophyIM.logging_div.removeChild(TrophyIM.logging_div.firstChild);} 
    45 var msg_div=document.createElement('div');msg_div.className='trophyimlogitem';msg_div.appendChild(document.createTextNode(msg));TrophyIM.logging_div.appendChild(msg_div);TrophyIM.logging_div.scrollTop=TrophyIM.logging_div.scrollHeight;}},rawInput:function(data) 
    46 {Strophe.debug("RECV: "+data);},rawOutput:function(data) 
    47 {Strophe.debug("SEND: "+data);},login:function() 
    48 {if(TrophyIM.JSONStore.store_working) 
    49 {TrophyIM.JSONStore.delData(['groups','roster','active_chat','chat_history']);} 
    50 TrophyIM.connection=new Strophe.Connection(TROPHYIM_BOSH_SERVICE);TrophyIM.connection.rawInput=TrophyIM.rawInput;TrophyIM.connection.rawOutput=TrophyIM.rawOutput;if(arguments.length>0) 
    51 {var barejid=arguments[0];var password=arguments[1];TrophyIM.connection.connect(barejid+TROPHYIM_RESOURCE,password,TrophyIM.onConnect);} 
    52 else 
    53 {var barejid=document.getElementById('trophyimjid').value 
    54 var fulljid=barejid+TROPHYIM_RESOURCE;var password=document.getElementById('trophyimpass').value;var button=document.getElementById('trophyimconnect');loadscript.setUserCurrent(barejid,password);if(button.value=='connect') 
    55 {button.value='disconnect';TrophyIM.login(barejid,password);_winBuild('window_login_page','remove');}} 
    56 TrophyIM.setCookie('trophyimjid',barejid);},logout:function() 
    57 {TrophyIM.autoConnection.connect=false;TrophyIM.delCookie('trophyim_bosh_xid');delete TrophyIM['cookies']['trophyim_bosh_xid'];TrophyIM.connection.disconnect();},onConnect:function(status) 
    58 {var loading_gif=document.getElementById("JabberIMRosterLoadingGif");if(status==Strophe.Status.CONNECTING) 
    59 {loading_gif.style.display="block";Strophe.info('Strophe is connecting.');} 
    60 if(status==Strophe.Status.CONNFAIL) 
    61 {TrophyIM.delCookie('trophyim_bosh_xid');TrophyIM.statusConn.connected=false;loading_gif.style.display="block";} 
    62 if(status==Strophe.Status.DISCONNECTING) 
    63 {TrophyIM.statusConn.connected=false;} 
    64 if(status==Strophe.Status.DISCONNECTED) 
    65 {if(TrophyIM.autoConnection.connect) 
    66 {loading_gif.style.display="block";TrophyIM.delCookie('trophyim_bosh_xid');TrophyIM.statusConn.connected=false;setTimeout(function() 
    67 {TrophyIM.showLogin();},10000);loadscript.clrAllContacts();loadscript.setStatusJabber(i18n.STATUS_ANAVAILABLE,"unavailable");delete TrophyIM.rosterObj.roster;delete TrophyIM.rosterObj.groups;}} 
    68 if(status==Strophe.Status.CONNECTED) 
    69 {loadscript.setStatusJabber(i18n.STATUS_AVAILABLE,'available');TrophyIM.statusConn.connected=true;TrophyIM.showClient();}},showClient:function() 
    70 {TrophyIM.setCookie('trophyim_bosh_xid',TrophyIM.connection.jid+"|"+ 
    71 TrophyIM.connection.sid+"|"+TrophyIM.connection.rid);TrophyIM.rosterObj=new TrophyIMRoster();TrophyIM.connection.addHandler(TrophyIM.onVersion,Strophe.NS.VERSION,'iq',null,null,null);TrophyIM.connection.addHandler(TrophyIM.onRoster,Strophe.NS.ROSTER,'iq',null,null,null);TrophyIM.connection.addHandler(TrophyIM.onPresence,null,'presence',null,null,null);TrophyIM.connection.addHandler(TrophyIM.onMessage,null,'message',null,null,null);TrophyIM.connection.send($iq({type:'get',xmlns:Strophe.NS.CLIENT}).c('query',{xmlns:Strophe.NS.ROSTER}).tree());TrophyIM.connection.send($pres().tree());setTimeout(TrophyIM.renderRoster,1000);},clearClient:function() 
    72 {if(TrophyIM.logging_div) 
    73 {var logging_div=TrophyIM.client_div.removeChild(document.getElementById('trophyimlog'));} 
    74 else 
    75 {var logging_div=null;} 
    76 while(TrophyIM.client_div.childNodes.length>0) 
    77 {TrophyIM.client_div.removeChild(TrophyIM.client_div.firstChild);} 
    78 return logging_div;},onVersion:function(msg) 
    79 {Strophe.debug("Version handler");if(msg.getAttribute('type')=='get') 
    80 {var from=msg.getAttribute('from');var to=msg.getAttribute('to');var id=msg.getAttribute('id');var reply=$iq({type:'result',to:from,from:to,id:id}).c('query',{name:"TrophyIM",version:TROPHYIM_VERSION,os:"Javascript-capable browser"});TrophyIM.connection.send(reply.tree());} 
    81 return true;},onRoster:function(msg) 
    82 {var roster_items=msg.firstChild.getElementsByTagName('item');for(var i=0;i<roster_items.length;i++) 
    83 {with(roster_items[i]) 
    84 {var groups=getElementsByTagName('group');var group_array=[];for(var g=0;g<groups.length;g++) 
    85 {if(groups[g].hasChildNodes()) 
    86 group_array[group_array.length]=groups[g].firstChild.nodeValue;} 
    87 if(getAttribute('ask')&&getAttribute('ask').toString()==="subscribe") 
    88 {if(getAttribute('subscription').toString()==="none") 
    89 {TrophyIM.rosterObj.addContact(getAttribute('jid'),getAttribute('ask'),getAttribute('name'),group_array);} 
    90 if(getAttribute('subscription').toString()==="remove") 
    91 {TrophyIM.rosterObj.removeContact(getAttribute('jid').toString());}} 
    92 else 
    93 {if((getAttribute('ask')==null&&getAttribute('subscription').toString()==="remove")||getAttribute('subscription').toString()==="remove") 
    94 {TrophyIM.rosterObj.removeContact(getAttribute('jid').toString());} 
    95 else 
    96 {TrophyIM.rosterObj.addContact(getAttribute('jid'),getAttribute('subscription'),getAttribute('name'),group_array);}}}} 
    97 if(msg.getAttribute('type')=='set') 
    98 {var _iq=$iq({type:'reply',id:msg.getAttribute('id'),to:msg.getAttribute('from')});TrophyIM.connection.send(_iq.tree());} 
    99 return true;},onPresence:function(msg) 
    100 {TrophyIM.onPresenceChatRoom(msg);var type=msg.getAttribute('type')?msg.getAttribute('type'):'available';var show=msg.getElementsByTagName('show').length?Strophe.getText(msg.getElementsByTagName('show')[0]):type;var status=msg.getElementsByTagName('status').length?Strophe.getText(msg.getElementsByTagName('status')[0]):'';var priority=msg.getElementsByTagName('priority').length?parseInt(Strophe.getText(msg.getElementsByTagName('priority')[0])):0;if(msg.getAttribute('from').toString().indexOf(TROPHYIM_CHATROOM)<0) 
    101 {var _from=Strophe.getBareJidFromJid(msg.getAttribute('from'));var _flag=true;if(TrophyIM.removeResult.idResult.length>0) 
    102 {for(var i=0;i<TrophyIM.removeResult.idResult.length;i++) 
    103 {if(TrophyIM.removeResult.idResult[i]==_from) 
    104 {_flag=false;TrophyIM.removeResult.idResult.splice(i,1);i--;if(show.toLowerCase()==='subscribe') 
    105 _flag=true;}}} 
    106 if(_flag) 
    107 TrophyIM.rosterObj.setPresence(msg.getAttribute('from'),priority,show,status);} 
    108 return true;},onPresenceChatRoom:function(msg) 
    109 {var xquery=msg.getElementsByTagName("x");var _error=msg.getElementsByTagName("error");if(_error.length>0) 
    110 {for(var i=0;i<_error.length;i++) 
    111 {if(_error[i].getElementsByTagName("text")) 
    112 {var _errorMsg=Strophe.getText(_error[i].getElementsByTagName("text")[0]);if(_errorMsg=="Room creation is denied by service policy") 
    113 {alert(i18n.ROOM_CREATION_IS_DENIED_BY_SERVICE_POLICY);} 
    114 else 
    115 {alert(" Informe ao seu Administrador ERRO : \n"+_errorMsg);}}}} 
    116 else 
    117 {if(xquery.length>0) 
    118 {for(var i=0;i<xquery.length;i++) 
    119 {var xmlns=xquery[i].getAttribute("xmlns");if(xmlns.indexOf("http://jabber.org/protocol/muc#user")==0) 
    120 {var _from=xquery[i].parentNode.getAttribute('from');var _to=xquery[i].parentNode.getAttribute('to');var nameChatRoom=Strophe.getBareJidFromJid(_from);var nickName=Strophe.getResourceFromJid(_from);var type=(xquery[i].parentNode.getAttribute('type')!=null)?xquery[i].parentNode.getAttribute('type'):'available';var show=(xquery[i].parentNode.firstChild.nodeName=="show")?xquery[i].parentNode.firstChild.firstChild.nodeValue:type;var _idElement=nameChatRoom+"_UserChatRoom__"+nickName;var _UserChatRoom=document.createElement("div");_UserChatRoom.id=_idElement;_UserChatRoom.style.paddingLeft='18px';_UserChatRoom.style.margin='3px 0px 0px 2px';_UserChatRoom.style.background='url("'+path_jabberit+'templates/default/images/'+show+'.gif") no-repeat center left';_UserChatRoom.appendChild(document.createTextNode(nickName));var nodeUser=document.getElementById(_idElement);if(nodeUser==null) 
    121 {if(document.getElementById(nameChatRoom+'__roomChat__participants')!=null) 
    122 {nameChatRoom=document.getElementById(nameChatRoom+'__roomChat__participants');nameChatRoom.appendChild(_UserChatRoom);} 
    123 else 
    124 {if(type!='unavailable') 
    125 {TrophyIM.makeChatRoom(nameChatRoom,nameChatRoom.substring(0,nameChatRoom.indexOf('@')));nameChatRoom=document.getElementById(nameChatRoom+'__roomChat__participants');nameChatRoom.appendChild(_UserChatRoom);}}} 
    126 else 
    127 {if(type=='unavailable') 
    128 {nodeUser.parentNode.removeChild(nodeUser);} 
    129 else if(show) 
    130 {nodeUser.style.backgroundImage='url("'+path_jabberit+'templates/default/images/'+show+'.gif")';}}}}}}},onMessage:function(msg) 
    131 {var checkTime=function(i) 
    132 {if(i<10)i="0"+i;return i;};var messageDate=function(_date) 
    133 {var _dt=_date.substr(0,_date.indexOf('T')).split('-');var _hr=_date.substr(_date.indexOf('T')+1,_date.length-_date.indexOf('T')-2).split(':');(_date=new Date).setTime(Date.UTC(_dt[0],_dt[1]-1,_dt[2],_hr[0],_hr[1],_hr[2]));return(_date.toLocaleDateString().replace(/-/g,'/')+' '+_date.toLocaleTimeString());};var data=new Date();var dtNow=checkTime(data.getHours())+":"+checkTime(data.getMinutes())+":"+checkTime(data.getSeconds());var from=msg.getAttribute('from');var type=msg.getAttribute('type');var elems=msg.getElementsByTagName('body');var delay=(msg.getElementsByTagName('delay'))?msg.getElementsByTagName('delay'):null;var stamp=(delay[0]!=null)?"<font style='color:red;'>"+messageDate(delay[0].getAttribute('stamp'))+"</font>":dtNow;var barejid=Strophe.getBareJidFromJid(from);var jidChatRoom=Strophe.getResourceFromJid(from);var jid_lower=barejid.toLowerCase();var contact="";var state="";var chatBox=document.getElementById(jid_lower+"__chatState");var chatStateOnOff=null;var active=msg.getElementsByTagName('active');contact=barejid.toLowerCase();contact=contact.substring(0,contact.indexOf('@'));if(TrophyIM.rosterObj.roster[barejid]) 
    134 {if(TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']) 
    135 {contact=TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'];}} 
    136 if(elems.length>0) 
    137 {state="";chatStateOnOff=document.getElementById(jid_lower+"__chatStateOnOff");if(active.length>0&chatStateOnOff!=null) 
    138 {chatStateOnOff.value='on';} 
    139 var _message=document.createElement("div");var _text=Strophe.getText(elems[0]);_text=_text.replace(/onblur/gi,"EVENT_DENY");_text=_text.replace(/onchange/gi,"EVENT_DENY");_text=_text.replace(/onclick/gi,"EVENT_DENY");_text=_text.replace(/ondblclick/gi,"EVENT_DENY");_text=_text.replace(/onerror/gi,"EVENT_DENY");_text=_text.replace(/onfocus/gi,"EVENT_DENY");_text=_text.replace(/onkeydown/gi,"EVENT_DENY");_text=_text.replace(/onkeypress/gi,"EVENT_DENY");_text=_text.replace(/onkeyup/gi,"EVENT_DENY");_text=_text.replace(/onmousedown/gi,"EVENT_DENY");_text=_text.replace(/onmousemove/gi,"EVENT_DENY");_text=_text.replace(/onmouseout/gi,"EVENT_DENY");_text=_text.replace(/onmouseover/gi,"EVENT_DENY");_text=_text.replace(/onmouseup/gi,"EVENT_DENY");_text=_text.replace(/onresize/gi,"EVENT_DENY");_text=_text.replace(/onselect/gi,"EVENT_DENY");_text=_text.replace(/onunload/gi,"EVENT_DENY");_text=_text.replace(/style/gi,"EVENT_DENY");_text=_text.replace(/img /gi,"IMG_DENY ");_text=_text.replace(/script /gi,"SCRIPT_DENY ");_text=_text.replace(/div /gi,"DIV_DENY ");_text=_text.replace(/span /gi,"SPAN_DENY ");_text=_text.replace(/iframe /gi,"IFRAME_DENY ");_message.innerHTML=_text;var scripts=_message.getElementsByTagName('script_deny');for(var i=0;i<scripts.length;i++){_message.removeChild(scripts[i--]);} 
    140 var _imgSrc=_message.getElementsByTagName('img_deny');for(var i=0;i<_imgSrc.length;i++){_imgSrc[i].parentNode.removeChild(_imgSrc[i--]);} 
    141 var _Div=_message.getElementsByTagName('div_deny');for(var i=0;i<_Div.length;i++){_Div[i].parentNode.removeChild(_Div[i--]);} 
    142 var _Span=_message.getElementsByTagName('span_deny');for(var i=0;i<_Span.length;i++){_Span[i].parentNode.removeChild(_Span[i--]);} 
    143 var _Iframe=_message.getElementsByTagName('iframe_deny');for(var i=0;i<_Iframe.length;i++){_Iframe[i].parentNode.removeChild(_Iframe[i--]);} 
    144 var _aHref=_message.getElementsByTagName('a');for(var i=0;i<_aHref.length;i++){_aHref[i].parentNode.removeChild(_aHref[i--]);} 
    145 _message.innerHTML=_message.innerHTML.replace(/^\s+|\s+$|^\n|\n$/g,"");_message.innerHTML=loadscript.getSmiles(_message.innerHTML);if(type=='chat'||type=='normal') 
    146 {if(_message.hasChildNodes()) 
    147 {var message={contact:"["+stamp+"] <font style='font-weight:bold; color:black;'>"+contact+"</font>",msg:"</br>"+_message.innerHTML};TrophyIM.addMessage(TrophyIM.makeChat(from),jid_lower,message);}} 
    148 else if(type=='groupchat') 
    149 {if(_message.hasChildNodes()) 
    150 {var message={contact:"["+stamp+"] <font style='font-weight:bold; color:black;'>"+jidChatRoom+"</font>",msg:"</br>"+_message.innerHTML};TrophyIM.addMessage(TrophyIM.makeChatRoom(barejid),jid_lower,message);}}} 
    151 else 
    152 {if(chatBox!=null) 
    153 state=TrophyIM.getChatState(msg);} 
    154 var clearChatState=function() 
    155 {chatBox.innerHTML='';} 
    156 if(chatBox!=null) 
    157 {var clearChatStateTimer;chatBox.innerHTML="<font style='font-weight:bold; color:grey; float:right;'>"+state+"</font>";var _composing=msg.getElementsByTagName('composing');if(_composing.length==0) 
    158 clearChatStateTimer=setTimeout(clearChatState,2000);else 
    159 clearTimeout(clearChatStateTimer);} 
    160 return true;},getChatState:function(msg) 
    161 {var state=msg.getElementsByTagName('inactive');if(state.length>0) 
    162 {return i18n.INACTIVE;} 
    163 else 
    164 {state=msg.getElementsByTagName('gone');if(state.length>0) 
    165 {return i18n.GONE;} 
    166 else 
    167 {state=msg.getElementsByTagName('composing');if(state.length>0) 
    168 {return i18n.COMPOSING;} 
    169 else 
    170 {state=msg.getElementsByTagName('paused');if(state.length>0) 
    171 {return i18n.PAUSED;}}}} 
    172 return'';},makeChat:function(fulljid) 
    173 {var barejid=Strophe.getBareJidFromJid(fulljid);var titleWindow="";var paramsChatBox={'enabledPopUp':((loadscript.getBrowserCompatible())?"block":"none"),'idChatBox':barejid+"__chatBox",'jidTo':barejid,'path_jabberit':path_jabberit};titleWindow=barejid.toLowerCase();titleWindow=titleWindow.substring(0,titleWindow.indexOf('@'));if(TrophyIM.rosterObj.roster[barejid]) 
    174 {if(TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']) 
    175 {titleWindow=TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'];}} 
    176 TrophyIM.posWindow.top=TrophyIM.posWindow.top+10;if(TrophyIM.posWindow.top>200) 
    177 TrophyIM.posWindow.top=100;TrophyIM.posWindow.left=TrophyIM.posWindow.left+5;if(TrophyIM.posWindow.left>455) 
    178 TrophyIM.posWindow.left=400;var _content=document.createElement('div');_content.innerHTML=loadscript.parse("chat_box","chatBox.xsl",paramsChatBox);_content=_content.firstChild;var _messages=_content.firstChild.firstChild;var _textarea=_content.getElementsByTagName('textarea').item(0);var _send=_content.getElementsByTagName('input').item(0);var _chatStateOnOff=_content.getElementsByTagName('input').item(1);var _send_message=function() 
    179 {if(!TrophyIM.sendMessage(barejid,_textarea.value)) 
    180 return false;TrophyIM.addMessage(_messages,barejid,{contact:"<font style='font-weight:bold; color:red;'>"+i18n.ME+"</font>",msg:"<br/>"+_textarea.value});_textarea.value='';_textarea.focus();};var composingTimer_=0;var isComposing_=0;var timeCounter;var setComposing=function() 
    181 {var checkComposing=function() 
    182 {if(!isComposing_){composingTimer_=0;clearInterval(timeCounter);TrophyIM.sendContentMessage(barejid,'paused');}else{TrophyIM.sendContentMessage(barejid,'composing');} 
    183 isComposing_=0;} 
    184 if(!composingTimer_){composingTimer_=1;timeCounter=setInterval(checkComposing,4000);} 
    185 isComposing_=1;};loadscript.configEvents(_send,'onclick',_send_message);loadscript.configEvents(_textarea,'onkeyup',function(e) 
    186 {if(e.keyCode==13){_send_message();composingTimer_=0;clearInterval(timeCounter);}else{if(_chatStateOnOff.value=='on') 
    187 setComposing();}});var winChatBox={id_window:"window_chat_area_"+barejid,barejid:barejid,width:387,height:375,top:TrophyIM.posWindow.top,left:TrophyIM.posWindow.left,draggable:true,visible:"display",resizable:true,zindex:loadscript.getZIndex(),title:titleWindow,closeAction:"hidden",content:_content} 
    188 _win=_winBuild(winChatBox);loadscript.notification(barejid);loadscript.getPhotoUser(barejid);_textarea.focus();_messages=_win.content().firstChild;while(_messages&&_messages.nodeType!==1) 
    189 {_messages=_messages.nextSibling;} 
    190 return(_messages);},makeChatRoom:function() 
    191 {var jidChatRoom=arguments[0];var titleWindow="ChatRoom - "+unescape(arguments[1]);var paramsChatRoom={'idChatRoom':jidChatRoom+"__roomChat",'jidTo':jidChatRoom,'lang_Send':i18n.SEND,'lang_Leave_ChatRoom':i18n.LEAVE_CHATROOM,'path_jabberit':path_jabberit};TrophyIM.posWindow.top=TrophyIM.posWindow.top+10;if(TrophyIM.posWindow.top>200) 
    192 TrophyIM.posWindow.top=100;TrophyIM.posWindow.left=TrophyIM.posWindow.left+5;if(TrophyIM.posWindow.left>455) 
    193 TrophyIM.posWindow.left=400;var _content=document.createElement('div');_content.innerHTML=loadscript.parse("chat_room","chatRoom.xsl",paramsChatRoom);_content=_content.firstChild;var _messages=_content.firstChild.firstChild;var _textarea=_content.getElementsByTagName('textarea').item(0);var _send=_content.getElementsByTagName('input').item(0);var _leaveChatRoom=_content.getElementsByTagName('input').item(1);var _send_message=function() 
    194 {if(!TrophyIM.sendMessageChatRoom(jidChatRoom,_textarea.value)) 
    195 return false;_textarea.value='';_textarea.focus();};loadscript.configEvents(_send,'onclick',_send_message);loadscript.configEvents(_leaveChatRoom,'onclick',function() 
    196 {TrophyIM.leaveChatRoom(jidChatRoom);if(TrophyIM.activeChatRoom.name.length>0) 
    197 {for(var i=0;i<TrophyIM.activeChatRoom.name.length;i++) 
    198 {if(TrophyIM.activeChatRoom.name[i].indexOf(jidChatRoom)>=0) 
    199 {TrophyIM.activeChatRoom.name[i]="";}}} 
    200 setTimeout(function() 
    201 {_winBuild("window_chat_room_"+jidChatRoom,"remove");},650);});loadscript.configEvents(_textarea,'onkeyup',function(e) 
    202 {if(e.keyCode==13) 
    203 {_send_message();}});var winChatRoom={id_window:"window_chat_room_"+arguments[0],barejid:jidChatRoom,width:500,height:450,top:TrophyIM.posWindow.top,left:TrophyIM.posWindow.left,draggable:true,visible:"display",resizable:true,zindex:loadscript.getZIndex(),title:titleWindow,closeAction:"hidden",content:_content} 
    204 _win=_winBuild(winChatRoom);_messages=_win.content().firstChild;while(_messages&&_messages.nodeType!==1) 
    205 {_messages=_messages.nextSibling;} 
    206 return(_messages);},addContact:function(jidTo,name,group) 
    207 {var _flag=true;if(TrophyIM.removeResult.idResult.length>0) 
    208 {for(var i=0;i<TrophyIM.removeResult.idResult.length;i++) 
    209 {if(TrophyIM.removeResult.idResult[i]==jidTo) 
    210 {_flag=false;TrophyIM.removeResult.idResult.splice(i,1);i--;}}} 
    211 if(_flag) 
    212 {var _id=TrophyIM.connection.getUniqueId('add');var newContact=$iq({type:'set',id:_id});newContact=newContact.c('query').attrs({xmlns:'jabber:iq:roster'});newContact=newContact.c('item').attrs({jid:jidTo,name:name});newContact=newContact.c('group').t(group).tree();TrophyIM.connection.send(newContact);}},addMessage:function(chatBox,jid,msg) 
    213 {msg.msg=loadscript.getSmiles(msg.msg);var messageDiv=document.createElement("div");messageDiv.style.margin="3px 0px 1em 3px";messageDiv.innerHTML=msg.contact+" : "+msg.msg;chatBox.appendChild(messageDiv);chatBox.scrollTop=chatBox.scrollHeight;},renameContact:function(jid) 
    214 {var name=TrophyIM.rosterObj.roster[jid].contact.name;if((name=prompt(i18n.ASK_NEW_NAME_QUESTION+name+"!",name))) 
    215 if((name=name.replace(/^\s+|\s+$|^\n|\n$/g,""))=="") 
    216 name="";if(name==null||name=="") 
    217 name="";var jidTo=jid 
    218 var name=(name)?name:TrophyIM.rosterObj.roster[jid].contact.name;var group=TrophyIM.rosterObj.roster[jid].contact.groups[0];TrophyIM.addContact(jidTo,name,group);document.getElementById('itenContact_'+jid).innerHTML=name;},renameGroup:function(jid) 
    219 {var group=TrophyIM.rosterObj.roster[jid].contact.groups[0];var presence=TrophyIM.rosterObj.roster[jid].presence;if((group=prompt(i18n.ASK_NEW_GROUP_QUESTION,group))) 
    220 if((group=group.replace(/^\s+|\s+$|^\n|\n$/g,""))=="") 
    221 group="";if(group==null||group=="") 
    222 group="";var jidTo=TrophyIM.rosterObj.roster[jid].contact.jid;var name=TrophyIM.rosterObj.roster[jid].contact.name;var group=(group)?group:TrophyIM.rosterObj.roster[jid].contact.groups[0];TrophyIM.rosterObj.removeContact(jid);TrophyIM.addContact(jidTo,name,group);document.getElementById("JabberIMRoster").innerHTML="";TrophyIM.renderRoster();setTimeout(function() 
    223 {for(var i in presence) 
    224 {if(presence[i].constructor==Function) 
    225 continue;TrophyIM.rosterObj.setPresence(jid,presence[i].priority,presence[i].show,presence[i].status);}},500);},createChatRooms:function() 
    226 {var nickName=document.getElementById('nickName_chatRoom_jabberit').value;var nameChatRoom=document.getElementById('name_ChatRoom_jabberit').value;var _from=Base64.decode(loadscript.getUserCurrent().jid)+TROPHYIM_RESOURCE;var _to=escape(nameChatRoom)+"@"+TROPHYIM_CHATROOM+"/"+nickName;var new_room=$pres({from:_from,to:_to}).c("x",{xmlns:Strophe.NS.MUC});TrophyIM.activeChatRoom.name[TrophyIM.activeChatRoom.name.length]=_to;TrophyIM.connection.send(new_room.tree());},joinChatRoom:function(roomName) 
    227 {var presence=$pres({from:TrophyIM.connection.jid,to:roomName}).c("x",{xmlns:Strophe.NS.MUC});TrophyIM.connection.send(presence);},leaveChatRoom:function(roomName) 
    228 {var room_nick=roomName;var presenceid=TrophyIM.connection.getUniqueId();var presence=$pres({type:"unavailable",id:presenceid,from:TrophyIM.connection.jid,to:room_nick}).c("x",{xmlns:Strophe.NS.MUC});TrophyIM.connection.send(presence);},getListRooms:function() 
    229 {if(TrophyIM.statusConn.connected) 
    230 {var _error_return=function(element) 
    231 {alert("ERRO : Tente novamente !");};var iq=$iq({to:TROPHYIM_CHATROOM,type:"get"}).c("query",{xmlns:Strophe.NS.DISCO_ITEMS});TrophyIM.connection.sendIQ(iq,loadscript.listRooms,_error_return,500);} 
    232 else 
    233 {alert("ERRO : Sem conexão com o servidor "+TROPHYIM_CHATROOM);}},removeContact:function(jidTo) 
    234 {var divItenContact=null;if((divItenContact=document.getElementById('itenContact_'+jidTo))) 
    235 {var _id=TrophyIM.connection.getUniqueId();TrophyIM.removeResult.idResult[TrophyIM.removeResult.idResult.length]=jidTo;var delContact=$iq({type:'set',id:_id}) 
    236 delContact=delContact.c('query').attrs({xmlns:'jabber:iq:roster'});delContact=delContact.c('item').attrs({jid:jidTo,subscription:'remove'}).tree();TrophyIM.connection.send(delContact);loadscript.removeElement(document.getElementById('itenContactNotification_'+jidTo));var spanShow=document.getElementById('span_show_itenContact_'+jidTo) 
    237 spanShow.parentNode.removeChild(spanShow);loadscript.removeGroup(divItenContact.parentNode);divItenContact.parentNode.removeChild(divItenContact);}},renderRoster:function() 
    238 {var roster_div=document.getElementById('JabberIMRoster');if(roster_div) 
    239 {var users=new Array();var loading_gif=document.getElementById("JabberIMRosterLoadingGif");if(loading_gif.style.display=="block") 
    240 loading_gif.style.display="none";for(var user in TrophyIM.rosterObj.roster) 
    241 {if(TrophyIM.rosterObj.roster[user].constructor==Function) 
    242 continue;users[users.length]=TrophyIM.rosterObj.roster[user].contact.jid;} 
    243 users.sort();var groups=new Array();var flagGeral=false;for(var group in TrophyIM.rosterObj.groups) 
    244 {if(TrophyIM.rosterObj.groups[group].constructor==Function) 
    245 continue;if(group) 
    246 groups[groups.length]=group;if(group=="Geral") 
    247 flagGeral=true;} 
    248 if(!flagGeral&&users.length>0) 
    249 groups[groups.length]="Geral";groups.sort();for(var i=0;i<groups.length;i++) 
    250 {TrophyIM.renderGroups(groups[i],roster_div);} 
    251 TrophyIM.renderItensGroup(users,roster_div);} 
    252 TrophyIM._timeOut.renderRoster=setTimeout("TrophyIM.renderRoster()",1000);},renderGroups:function(nameGroup,element) 
    253 {var _addGroup=function() 
    254 {var _nameGroup=nameGroup;var _element=element;var paramsGroup={'nameGroup':_nameGroup,'path_jabberit':path_jabberit} 
    255 _element.innerHTML+=loadscript.parse("group","groups.xsl",paramsGroup);} 
    256 if(!element.hasChildNodes()) 
    257 {_addGroup();} 
    258 else 
    259 {var _NodeChild=element.firstChild;var flagAdd=false;while(_NodeChild) 
    260 {if(_NodeChild.childNodes[0].nodeName.toLowerCase()==="span") 
    261 {if(_NodeChild.childNodes[0].childNodes[0].nodeValue===nameGroup) 
    262 {flagAdd=true;}} 
    263 _NodeChild=_NodeChild.nextSibling;} 
    264 if(!flagAdd) 
    265 {_addGroup();}}},renderItensGroup:function(users,element) 
    266 {var addItem=function() 
    267 {if(arguments.length>0) 
    268 {var objContact=arguments[0];var group=arguments[1];var element=arguments[2];var showOffline=loadscript.getShowContactsOffline();var presence="unavailable";var status="";var statusColor="black";var statusDisplay="none";var _resource="";var _presence=function(objContact) 
    269 {if(objContact.presence) 
    270 {for(var resource in objContact.presence) 
    271 {if(objContact.presence[resource].constructor==Function) 
    272 continue;if(objContact.presence[resource].show!='invisible') 
    273 presence=objContact.presence[resource].show;if(objContact.contact.subscription!="both") 
    274 presence='subscription';if(objContact.presence[resource].status) 
    275 {status=" ( "+objContact.presence[resource].status+" ) ";statusDisplay="block";}}}};var _subscription=function(objContact) 
    276 {if(objContact.contact.subscription!="both") 
    277 {switch(objContact.contact.subscription) 
    278 {case"none":status=" (( "+i18n.ASK_FOR_AUTH+" )) ";statusColor="red";break;case"to":status=" (( "+i18n.CONTACT_ASK_FOR_AUTH+" )) ";statusColor="orange";break;case"from":status=" (( "+i18n.AUTHORIZED+" )) ";statusColor="green";break;case"subscribe":status=" (( "+i18n.AUTH_SENT+" )) ";statusColor="red";break;case"not-in-roster":status=" (( "+i18n.ASK_FOR_AUTH_QUESTION+" )) ";statusColor="orange";break;default:break;} 
    279 statusDisplay="block";}};if(objContact.contact.subscription!="remove") 
    280 {var itensJid=document.getElementById("itenContact_"+objContact.contact.jid);if(itensJid==null) 
    281 {var nameContact="";if(objContact.contact.name) 
    282 nameContact=objContact.contact.name;else 
    283 {nameContact=objContact.contact.jid;nameContact=nameContact.substring(0,nameContact.indexOf('@'));} 
    284 _presence(objContact);var paramsContact={divDisplay:"block",id:'itenContact_'+objContact.contact.jid,jid:objContact.contact.jid,nameContact:nameContact,path_jabberit:path_jabberit,presence:presence,spanDisplay:statusDisplay,status:status,statusColor:"black",subscription:objContact.contact.subscription,resource:_resource} 
    285 _subscription(objContact);if(group!="") 
    286 {var _NodeChild=element.firstChild;while(_NodeChild) 
    287 {if(_NodeChild.childNodes[0].nodeName.toLowerCase()==="span") 
    288 {if(_NodeChild.childNodes[0].childNodes[0].nodeValue===group) 
    289 {_NodeChild.innerHTML+=loadscript.parse("itens_group","itensGroup.xsl",paramsContact);}} 
    290 _NodeChild=_NodeChild.nextSibling;}}} 
    291 else 
    292 {_presence(objContact);var is_open=itensJid.parentNode.childNodes[0].style.backgroundImage;is_open=is_open.indexOf("arrow_down.gif");_subscription(objContact);itensJid.setAttribute('subscription',objContact.contact.subscription);with(document.getElementById('span_show_'+'itenContact_'+objContact.contact.jid)) 
    293 {if(presence=="unavailable"&&!showOffline) 
    294 {style.display="none";} 
    295 else 
    296 {if(is_open>0) 
    297 {style.display=statusDisplay;style.color=statusColor;innerHTML=status;}}} 
    298 if(presence=="unavailable"&&!showOffline) 
    299 {itensJid.style.display="none";} 
    300 else 
    301 {if(is_open>0) 
    302 {itensJid.style.display="block";}} 
    303 itensJid.style.background="url('"+path_jabberit+"templates/default/images/"+presence+".gif') no-repeat center left";} 
    304 if(!objContact.presence&&!showOffline) 
    305 {if(objContact.contact.subscription!="remove") 
    306 {with(document.getElementById('span_show_'+'itenContact_'+objContact.contact.jid)) 
    307 {style.display="none";} 
    308 with(document.getElementById('itenContact_'+objContact.contact.jid)) 
    309 {style.display="none";}}}}}};var flag=false;for(var i=0;i<users.length;i++) 
    310 {if(TrophyIM.rosterObj.roster[users[i]].contact.jid!=Base64.decode(loadscript.getUserCurrent().jid)) 
    311 {var _subscription=TrophyIM.rosterObj.roster[users[i]].contact.subscription;if(_subscription==="to") 
    312 {flag=true;} 
    313 if(_subscription==="not-in-roster") 
    314 {flag=true;} 
    315 if(TrophyIM.rosterObj.roster[users[i]].contact.groups) 
    316 {var groups=TrophyIM.rosterObj.roster[users[i]].contact.groups;if(groups.length>0) 
    317 {for(var j=0;j<groups.length;j++) 
    318 {addItem(TrophyIM.rosterObj.roster[users[i]],groups[j],element);}} 
    319 else 
    320 {addItem(TrophyIM.rosterObj.roster[users[i]],"Geral",element);}} 
    321 else 
    322 {addItem(TrophyIM.rosterObj.roster[users[i]],"Geral",element);}}} 
    323 if(flag) 
    324 {if(TrophyIM.controll.notificationNewUsers==0) 
    325 {loadscript.enabledNotificationNewUsers();TrophyIM.controll.notificationNewUsers++;}} 
    326 else 
    327 {loadscript.disabledNotificationNewUsers();TrophyIM.controll.notificationNewUsers=0;}},rosterClick:function(fulljid) 
    328 {TrophyIM.makeChat(fulljid);},setAutorization:function(jidTo,jidFrom,_typeSubscription) 
    329 {var _id=TrophyIM.connection.getUniqueId();TrophyIM.connection.send($pres().attrs({from:jidFrom,to:jidTo,type:_typeSubscription,id:_id}).tree());},setPresence:function(_type) 
    330 {var presence_chatRoom="";if(_type!='status') 
    331 {if(_type=="unavailable"&&TrophyIM.statusConn.connected) 
    332 {var loading_gif=document.getElementById("JabberIMRosterLoadingGif");if(TrophyIM._timeOut.renderRoster!=null) 
    333 clearTimeout(TrophyIM._timeOut.renderRoster);if(TrophyIM.statusConn.connected) 
    334 TrophyIM.connection.send($pres({type:_type}).tree());for(var i=0;i<TrophyIM.connection._requests.length;i++) 
    335 {if(TrophyIM.connection._requests[i]) 
    336 TrophyIM.connection._removeRequest(TrophyIM.connection._requests[i]);} 
    337 TrophyIM.logout();loadscript.clrAllContacts();delete TrophyIM.rosterObj.roster;delete TrophyIM.rosterObj.groups;setTimeout(function() 
    338 {if(loading_gif.style.display=="block") 
    339 loading_gif.style.display="none";},1000);} 
    340 else 
    341 {if(!TrophyIM.autoConnection.connect) 
    342 {TrophyIM.autoConnection.connect=true;TrophyIM.load();} 
    343 else 
    344 {if(TrophyIM.statusConn.connected) 
    345 {if(loadscript.getStatusMessage()!="") 
    346 {var _presence=$pres();_presence.node.appendChild(Strophe.xmlElement('show')).appendChild(Strophe.xmlTextNode(_type));_presence.node.appendChild(Strophe.xmlElement('status')).appendChild(Strophe.xmlTextNode(loadscript.getStatusMessage()));TrophyIM.connection.send(_presence.tree());presence_chatRoom=_type;} 
    347 else 
    348 {TrophyIM.connection.send($pres().c('show').t(_type).tree());presence_chatRoom=_type;}}}}} 
    349 else 
    350 {var _show="available";var _status="";if(arguments.length<2) 
    351 {if(loadscript.getStatusMessage()!="") 
    352 _status=prompt(i18n.TYPE_YOUR_MSG,loadscript.getStatusMessage());else 
    353 _status=prompt(i18n.TYPE_YOUR_MSG);var _divStatus=document.getElementById("JabberIMStatusMessage");if((_status=_status.replace(/^\s+|\s+$|^\n|\n$/g,""))!="") 
    354 _divStatus.firstChild.innerHTML="( "+_status+" )";} 
    355 else 
    356 {_status=arguments[1];} 
    357 for(var resource in TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence) 
    358 {if(TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence[resource].constructor==Function) 
    359 continue;if(TROPHYIM_RESOURCE===("/"+resource)) 
    360 _show=TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence[resource].show;} 
    361 if(TrophyIM.statusConn.connected) 
    362 {var _presence=$pres();_presence.node.appendChild(Strophe.xmlElement('show')).appendChild(Strophe.xmlTextNode(_show));_presence.node.appendChild(Strophe.xmlElement('status')).appendChild(Strophe.xmlTextNode(_status));TrophyIM.connection.send(_presence.tree());presence_chatRoom=_show;}} 
    363 if(TrophyIM.activeChatRoom.name.length>0) 
    364 {for(i=0;i<TrophyIM.activeChatRoom.name.length;i++) 
    365 {if(TrophyIM.activeChatRoom.name[i]!="") 
    366 TrophyIM.connection.send($pres({to:TrophyIM.activeChatRoom.name[i]}).c('show').t(presence_chatRoom));}}},sendMessage:function() 
    367 {if(arguments.length>0) 
    368 {var jidTo=arguments[0];var message_input=arguments[1];message_input=message_input.replace(/^\s+|\s+$|^\n|\n$/g,"");if(message_input!=""){var newMessage=$msg({to:jidTo,from:TrophyIM.connection.jid,type:'chat'});newMessage=newMessage.c('body').t(message_input);newMessage.up();newMessage=newMessage.c('active').attrs({xmlns:'http://jabber.org/protocol/chatstates'});TrophyIM.connection.send(newMessage.tree());return true;}} 
    369 return false;},sendMessageChatRoom:function() 
    370 {if(arguments.length>0) 
    371 {var room_nick=arguments[0];var message=arguments[1];var msgid=TrophyIM.connection.getUniqueId();var msg=$msg({to:room_nick,type:"groupchat",id:msgid}).c("body",{xmlns:Strophe.NS.CLIENT}).t(message);msg.up();TrophyIM.connection.send(msg);return true;}},sendContentMessage:function() 
    372 {if(arguments.length>0) 
    373 {var jidTo=arguments[0];var state=arguments[1];var newMessage=$msg({to:jidTo,from:TrophyIM.connection.jid,type:'chat'});newMessage=newMessage.c(state).attrs({xmlns:'http://jabber.org/protocol/chatstates'});TrophyIM.connection.send(newMessage.tree());}}};function TrophyIMRoster() 
    374 {if(TrophyIM.JSONStore.store_working) 
    375 {var data=TrophyIM.JSONStore.getData(['roster','groups']);this.roster=(data['roster']!=null)?data['roster']:{};this.groups=(data['groups']!=null)?data['groups']:{};} 
    376 else 
    377 {this.roster={};this.groups={};} 
    378 this.changes=new Array();if(TrophyIM.constants.stale_roster) 
    379 {for(var jid in this.roster) 
    380 {this.changes[this.changes.length]=jid;}} 
    381 this.addChange=function(jid) 
    382 {for(var c=0;c<this.changes.length;c++) 
    383 {if(this.changes[c]==jid) 
    384 {return;}} 
    385 this.changes[this.changes.length]=jid;this.changes.sort();} 
    386 this.addContact=function(jid,subscription,name,groups) 
    387 {if(subscription==="remove") 
    388 {this.removeContact(jid);} 
    389 else 
    390 {var contact={jid:jid,subscription:subscription,name:name,groups:groups} 
    391 var jid_lower=jid.toLowerCase();if(this.roster[jid_lower]) 
    392 {this.roster[jid_lower]['contact']=contact;} 
    393 else 
    394 {this.roster[jid_lower]={contact:contact};} 
    395 groups=groups?groups:[''];for(var g=0;g<groups.length;g++) 
    396 {if(!this.groups[groups[g]]) 
    397 {this.groups[groups[g]]={};} 
    398 this.groups[groups[g]][jid_lower]=jid_lower;}}} 
    399 this.getContact=function(jid) 
    400 {if(this.roster[jid.toLowerCase()]) 
    401 {return this.roster[jid.toLowerCase()]['contact'];}} 
    402 this.getPresence=function(fulljid) 
    403 {var jid=Strophe.getBareJidFromJid(fulljid);var current=null;if(this.roster[jid.toLowerCase()]&&this.roster[jid.toLowerCase()]['presence']) 
    404 {for(var resource in this.roster[jid.toLowerCase()]['presence']) 
    405 {if(this.roster[jid.toLowerCase()]['presence'][resource].constructor==Function) 
    406 continue;var presence=this.roster[jid.toLowerCase()]['presence'][resource];if(current==null) 
    407 {current=presence} 
    408 else 
    409 {if(presence['priority']>current['priority']&&((presence['show']=="chat" 
    410 ||presence['show']=="available")||(current['show']!="chat"||current['show']!="available"))) 
    411 {current=presence}}}} 
    412 return current;} 
    413 this.groupHasChanges=function(group) 
    414 {for(var c=0;c<this.changes.length;c++) 
    415 {if(this.groups[group][this.changes[c]]) 
    416 {return true;}} 
    417 return false;} 
    418 this.removeContact=function(jid) 
    419 {if(this.roster[jid]) 
    420 {var groups=this.roster[jid].contact.groups;if(groups) 
    421 {for(var i=0;i<groups.length;i++) 
    422 {delete this.groups[groups[i]][jid];} 
    423 for(var i=0;i<groups.length;i++) 
    424 {var contacts=0;for(var contact in this.groups[groups[i]]) 
    425 {if(this.groups[groups[i]][contact].constructor==Function) 
    426 continue;contacts++;} 
    427 if(!contacts) 
    428 delete this.groups[groups[i]];}} 
    429 if(this.roster[jid]) 
    430 delete this.roster[jid];}} 
    431 this.setPresence=function(fulljid,priority,show,status) 
    432 {var barejid=Strophe.getBareJidFromJid(fulljid);var resource=Strophe.getResourceFromJid(fulljid);var jid_lower=barejid.toLowerCase();if(show!=='unavailable'||show!=='error') 
    433 {if(!this.roster[jid_lower]) 
    434 {this.addContact(barejid,'not-in-roster');} 
    435 var presence={resource:resource,priority:priority,show:show,status:status} 
    436 if(!this.roster[jid_lower]['presence']) 
    437 {this.roster[jid_lower]['presence']={};} 
    438 this.roster[jid_lower]['presence'][resource]=presence;}} 
    439 this.save=function() 
    440 {if(TrophyIM.JSONStore.store_working) 
    441 {TrophyIM.JSONStore.setData({roster:this.roster,groups:this.groups,active_chat:TrophyIM.activeChats['current'],chat_history:TrophyIM.chatHistory});}}} 
    442 function TrophyIMJSONStore(){this.store_working=false;this._newXHR=function(handler){var xhr=null;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(xhr.overrideMimeType){xhr.overrideMimeType("text/xml");}}else if(window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHTTP");} 
    443 return xhr;} 
    444 this.getData=function(vars){if(typeof(TROPHYIM_JSON_STORE)!=undefined){Strophe.debug("Retrieving JSONStore data");var xhr=this._newXHR();var getdata="get="+vars.join(",");try{xhr.open("POST",TROPHYIM_JSON_STORE,false);}catch(e){Strophe.error("JSONStore open failed.");return false;} 
    445 xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');xhr.setRequestHeader('Content-length',getdata.length);xhr.send(getdata);if(xhr.readyState==4&&xhr.status==200){try{var dataObj=JSON.parse(xhr.responseText);return this.emptyFix(dataObj);}catch(e){Strophe.error("Could not parse JSONStore response"+ 
    446 xhr.responseText);return false;}}else{Strophe.error("JSONStore open failed. Status: "+xhr.status);return false;}}} 
    447 this.emptyFix=function(obj){if(typeof(obj)=="object"){for(var i in obj){if(obj[i].constructor==Function) 
    448 continue;if(i=='_empty_'){obj[""]=this.emptyFix(obj['_empty_']);delete obj['_empty_'];}else{obj[i]=this.emptyFix(obj[i]);}}} 
    449 return obj} 
    450 this.delData=function(vars){if(typeof(TROPHYIM_JSON_STORE)!=undefined){Strophe.debug("Retrieving JSONStore data");var xhr=this._newXHR();var deldata="del="+vars.join(",");try{xhr.open("POST",TROPHYIM_JSON_STORE,false);}catch(e){Strophe.error("JSONStore open failed.");return false;} 
    451 xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');xhr.setRequestHeader('Content-length',deldata.length);xhr.send(deldata);if(xhr.readyState==4&&xhr.status==200){try{var dataObj=JSON.parse(xhr.responseText);return dataObj;}catch(e){Strophe.error("Could not parse JSONStore response");return false;}}else{Strophe.error("JSONStore open failed. Status: "+xhr.status);return false;}}} 
    452 this.setData=function(vars) 
    453 {if(typeof(TROPHYIM_JSON_STORE)!=undefined) 
    454 {var senddata="set="+JSON.stringify(vars);var xhr=this._newXHR();try 
    455 {xhr.open("POST",TROPHYIM_JSON_STORE,false);} 
    456 catch(e) 
    457 {Strophe.error("JSONStore open failed.");return false;} 
    458 xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');xhr.setRequestHeader('Content-length',senddata.length);xhr.send(senddata);if(xhr.readyState==4&&xhr.status==200&&xhr.responseText=="OK"){return true;}else{Strophe.error("JSONStore open failed. Status: "+xhr.status);return false;}}} 
    459 var testData=true;if(this.setData({testData:testData})){var testResult=this.getData(['testData']);if(testResult&&testResult['testData']==true){this.store_working=true;}}} 
    460 if(document.ELEMENT_NODE==null){document.ELEMENT_NODE=1;document.ATTRIBUTE_NODE=2;document.TEXT_NODE=3;document.CDATA_SECTION_NODE=4;document.ENTITY_REFERENCE_NODE=5;document.ENTITY_NODE=6;document.PROCESSING_INSTRUCTION_NODE=7;document.COMMENT_NODE=8;document.DOCUMENT_NODE=9;document.DOCUMENT_TYPE_NODE=10;document.DOCUMENT_FRAGMENT_NODE=11;document.NOTATION_NODE=12;} 
    461 if(!document.importNode){document.importNode=function(node,allChildren){switch(node.nodeType){case document.ELEMENT_NODE:var newNode=document.createElement(node.nodeName);if(node.attributes&&node.attributes.length>0){for(var i=0;i<node.attributes.length;i++){newNode.setAttribute(node.attributes[i].nodeName,node.getAttribute(node.attributes[i].nodeName));}} 
    462 if(allChildren&&node.childNodes&&node.childNodes.length>0){for(var i=0;i<node.childNodes.length;i++){newNode.appendChild(document.importNode(node.childNodes[i],allChildren));}} 
    463 return newNode;break;case document.TEXT_NODE:case document.CDATA_SECTION_NODE:case document.COMMENT_NODE:return document.createTextNode(node.nodeValue);break;}};} 
    464 var oldonunload=window.onunload;window.onunload=function() 
    465 {if(oldonunload) 
    466 {oldonunload();} 
    467 TrophyIM.setPresence('unavailable');} 
     1 
     2var Base64=(function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var obj={encode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;} 
     3output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+ 
     4keyStr.charAt(enc3)+keyStr.charAt(enc4);}while(i<input.length);return output;},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2);} 
     5if(enc4!=64){output=output+String.fromCharCode(chr3);}}while(i<input.length);return output;}};return obj;})();var MD5=(function(){var hexcase=0;var b64pad="";var chrsz=8;var safe_add=function(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);};var bit_rol=function(num,cnt){return(num<<cnt)|(num>>>(32-cnt));};var str2binl=function(str){var bin=[];var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz) 
     6{bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);} 
     7return bin;};var binl2str=function(bin){var str="";var mask=(1<<chrsz)-1;for(var i=0;i<bin.length*32;i+=chrsz) 
     8{str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask);} 
     9return str;};var binl2hex=function(binarray){var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++) 
     10{str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&0xF)+ 
     11hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);} 
     12return str;};var binl2b64=function(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";var triplet,j;for(var i=0;i<binarray.length*4;i+=3) 
     13{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(j=0;j<4;j++) 
     14{if(i*8+j*6>binarray.length*32){str+=b64pad;} 
     15else{str+=tab.charAt((triplet>>6*(3-j))&0x3F);}}} 
     16return str;};var md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);};var md5_ff=function(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);};var md5_gg=function(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);};var md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t);};var md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t);};var core_md5=function(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;var olda,oldb,oldc,oldd;for(var i=0;i<x.length;i+=16) 
     17{olda=a;oldb=b;oldc=c;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);} 
     18return[a,b,c,d];};var core_hmac_md5=function(key,data){var bkey=str2binl(key);if(bkey.length>16){bkey=core_md5(bkey,key.length*chrsz);} 
     19var ipad=new Array(16),opad=new Array(16);for(var i=0;i<16;i++) 
     20{ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;} 
     21var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128);};var obj={hexdigest:function(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz));},b64digest:function(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz));},hash:function(s){return binl2str(core_md5(str2binl(s),s.length*chrsz));},hmac_hexdigest:function(key,data){return binl2hex(core_hmac_md5(key,data));},hmac_b64digest:function(key,data){return binl2b64(core_hmac_md5(key,data));},hmac_hash:function(key,data){return binl2str(core_hmac_md5(key,data));},test:function(){return MD5.hexdigest("abc")==="900150983cd24fb0d6963f7d28e17f72";}};return obj;})();if(!Function.prototype.bind){Function.prototype.bind=function(obj) 
     22{var func=this;return function(){return func.apply(obj,arguments);};};} 
     23if(!Function.prototype.prependArg){Function.prototype.prependArg=function(arg) 
     24{var func=this;return function(){var newargs=[arg];for(var i=0;i<arguments.length;i++){newargs.push(arguments[i]);} 
     25return func.apply(this,newargs);};};} 
     26(function(callback){var Strophe;function $build(name,attrs){return new Strophe.Builder(name,attrs);} 
     27function $msg(attrs){return new Strophe.Builder("message",attrs);} 
     28function $iq(attrs){return new Strophe.Builder("iq",attrs);} 
     29function $pres(attrs){return new Strophe.Builder("presence",attrs);} 
     30Strophe={VERSION:"1.0.1",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",MUC_USER:"http://jabber.org/protocol/muc#user",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas"},addNamespace:function(name,value) 
     31{Strophe.NS[name]=value;},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3},TIMEOUT:1.1,SECONDARY_TIMEOUT:0.1,forEachChild:function(elem,elemName,func) 
     32{var i,childNode;for(i=0;i<elem.childNodes.length;i++){childNode=elem.childNodes[i];if(childNode.nodeType==Strophe.ElementType.NORMAL&&(!elemName||this.isTagEqual(childNode,elemName))){func(childNode);}}},isTagEqual:function(el,name) 
     33{return el.tagName.toLowerCase()==name.toLowerCase();},_xmlGenerator:null,_makeGenerator:function(){var doc;if(window.ActiveXObject){doc=new ActiveXObject("Microsoft.XMLDOM");doc.appendChild(doc.createElement('strophe'));}else{doc=document.implementation.createDocument('jabber:client','strophe',null);} 
     34return doc;},xmlElement:function(name) 
     35{if(!name){return null;} 
     36var node=null;if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator();} 
     37node=Strophe._xmlGenerator.createElement(name);var a,i,k;for(a=1;a<arguments.length;a++){if(!arguments[a]){continue;} 
     38if(typeof(arguments[a])=="string"||typeof(arguments[a])=="number"){node.appendChild(Strophe.xmlTextNode(arguments[a]));}else if(typeof(arguments[a])=="object"&&typeof(arguments[a].sort)=="function"){for(i=0;i<arguments[a].length;i++){if(typeof(arguments[a][i])=="object"&&typeof(arguments[a][i].sort)=="function"){node.setAttribute(arguments[a][i][0],arguments[a][i][1]);}}}else if(typeof(arguments[a])=="object"){for(k in arguments[a]){if(arguments[a].hasOwnProperty(k)){node.setAttribute(k,arguments[a][k]);}}}} 
     39return node;},xmlescape:function(text) 
     40{text=text.replace(/\&/g,"&amp;");text=text.replace(/</g,"&lt;");text=text.replace(/>/g,"&gt;");return text;},xmlTextNode:function(text) 
     41{text=Strophe.xmlescape(text);if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator();} 
     42return Strophe._xmlGenerator.createTextNode(text);},getText:function(elem) 
     43{if(!elem){return null;} 
     44var str="";if(elem.childNodes.length===0&&elem.nodeType==Strophe.ElementType.TEXT){str+=elem.nodeValue;} 
     45for(var i=0;i<elem.childNodes.length;i++){if(elem.childNodes[i].nodeType==Strophe.ElementType.TEXT){str+=elem.childNodes[i].nodeValue;}} 
     46return str;},copyElement:function(elem) 
     47{var i,el;if(elem.nodeType==Strophe.ElementType.NORMAL){el=Strophe.xmlElement(elem.tagName);for(i=0;i<elem.attributes.length;i++){el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),elem.attributes[i].value);} 
     48for(i=0;i<elem.childNodes.length;i++){el.appendChild(Strophe.copyElement(elem.childNodes[i]));}}else if(elem.nodeType==Strophe.ElementType.TEXT){el=Strophe.xmlTextNode(elem.nodeValue);} 
     49return el;},escapeNode:function(node) 
     50{return node.replace(/^\s+|\s+$/g,'').replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40");},unescapeNode:function(node) 
     51{return node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\");},getNodeFromJid:function(jid) 
     52{if(jid.indexOf("@")<0){return null;} 
     53return jid.split("@")[0];},getDomainFromJid:function(jid) 
     54{var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0){return bare;}else{var parts=bare.split("@");parts.splice(0,1);return parts.join('@');}},getResourceFromJid:function(jid) 
     55{var s=jid.split("/");if(s.length<2){return null;} 
     56s.splice(0,1);return s.join('/');},getBareJidFromJid:function(jid) 
     57{return jid.split("/")[0];},log:function(level,msg) 
     58{return;},debug:function(msg) 
     59{this.log(this.LogLevel.DEBUG,msg);},info:function(msg) 
     60{this.log(this.LogLevel.INFO,msg);},warn:function(msg) 
     61{this.log(this.LogLevel.WARN,msg);},error:function(msg) 
     62{this.log(this.LogLevel.ERROR,msg);},fatal:function(msg) 
     63{this.log(this.LogLevel.FATAL,msg);},serialize:function(elem) 
     64{var result;if(!elem){return null;} 
     65if(typeof(elem.tree)==="function"){elem=elem.tree();} 
     66var nodeName=elem.nodeName;var i,child;if(elem.getAttribute("_realname")){nodeName=elem.getAttribute("_realname");} 
     67result="<"+nodeName;for(i=0;i<elem.attributes.length;i++){if(elem.attributes[i].nodeName!="_realname"){result+=" "+elem.attributes[i].nodeName.toLowerCase()+"='"+elem.attributes[i].value.replace("&","&amp;").replace("'","&apos;").replace("<","&lt;")+"'";}} 
     68if(elem.childNodes.length>0){result+=">";for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeType==Strophe.ElementType.NORMAL){result+=Strophe.serialize(child);}else if(child.nodeType==Strophe.ElementType.TEXT){result+=child.nodeValue;}} 
     69result+="</"+nodeName+">";}else{result+="/>";} 
     70return result;},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype) 
     71{Strophe._connectionPlugins[name]=ptype;}};Strophe.Builder=function(name,attrs) 
     72{if(name=="presence"||name=="message"||name=="iq"){if(attrs&&!attrs.xmlns){attrs.xmlns=Strophe.NS.CLIENT;}else if(!attrs){attrs={xmlns:Strophe.NS.CLIENT};}} 
     73this.nodeTree=Strophe.xmlElement(name,attrs);this.node=this.nodeTree;};Strophe.Builder.prototype={tree:function() 
     74{return this.nodeTree;},toString:function() 
     75{return Strophe.serialize(this.nodeTree);},up:function() 
     76{this.node=this.node.parentNode;return this;},attrs:function(moreattrs) 
     77{for(var k in moreattrs){if(moreattrs.hasOwnProperty(k)){this.node.setAttribute(k,moreattrs[k]);}} 
     78return this;},c:function(name,attrs) 
     79{var child=Strophe.xmlElement(name,attrs);this.node.appendChild(child);this.node=child;return this;},cnode:function(elem) 
     80{this.node.appendChild(elem);this.node=elem;return this;},t:function(text) 
     81{var child=Strophe.xmlTextNode(text);this.node.appendChild(child);return this;}};Strophe.Handler=function(handler,ns,name,type,id,from,options) 
     82{this.handler=handler;this.ns=ns;this.name=name;this.type=type;this.id=id;this.options=options||{matchbare:false};if(!this.options.matchBare){this.options.matchBare=false;} 
     83if(this.options.matchBare){this.from=Strophe.getBareJidFromJid(from);}else{this.from=from;} 
     84this.user=true;};Strophe.Handler.prototype={isMatch:function(elem) 
     85{var nsMatch;var from=null;if(this.options.matchBare){from=Strophe.getBareJidFromJid(elem.getAttribute('from'));}else{from=elem.getAttribute('from');} 
     86nsMatch=false;if(!this.ns){nsMatch=true;}else{var self=this;Strophe.forEachChild(elem,null,function(elem){if(elem.getAttribute("xmlns")==self.ns){nsMatch=true;}});nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns;} 
     87if(nsMatch&&(!this.name||Strophe.isTagEqual(elem,this.name))&&(!this.type||elem.getAttribute("type")===this.type)&&(!this.id||elem.getAttribute("id")===this.id)&&(!this.from||from===this.from)){return true;} 
     88return false;},run:function(elem) 
     89{var result=null;try{result=this.handler(elem);}catch(e){if(e.sourceURL){Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+ 
     90e.line+" - "+e.name+": "+e.message);}else if(e.fileName){if(typeof(console)!="undefined"){console.trace();console.error(this.handler," - error - ",e,e.message);} 
     91Strophe.fatal("error: "+this.handler+" "+ 
     92e.fileName+":"+e.lineNumber+" - "+ 
     93e.name+": "+e.message);}else{Strophe.fatal("error: "+this.handler);} 
     94throw e;} 
     95return result;},toString:function() 
     96{return"{Handler: "+this.handler+"("+this.name+","+ 
     97this.id+","+this.ns+")}";}};Strophe.TimedHandler=function(period,handler) 
     98{this.period=period;this.handler=handler;this.lastCalled=new Date().getTime();this.user=true;};Strophe.TimedHandler.prototype={run:function() 
     99{this.lastCalled=new Date().getTime();return this.handler();},reset:function() 
     100{this.lastCalled=new Date().getTime();},toString:function() 
     101{return"{TimedHandler: "+this.handler+"("+this.period+")}";}};Strophe.Request=function(elem,func,rid,sends) 
     102{this.id=++Strophe._requestId;this.xmlData=elem;this.data=Strophe.serialize(elem);this.origFunc=func;this.func=func;this.rid=rid;this.date=NaN;this.sends=sends||0;this.abort=false;this.dead=null;this.age=function(){if(!this.date){return 0;} 
     103var now=new Date();return(now-this.date)/1000;};this.timeDead=function(){if(!this.dead){return 0;} 
     104var now=new Date();return(now-this.dead)/1000;};this.xhr=this._newXHR();};Strophe.Request.prototype={getResponse:function() 
     105{var node=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){node=this.xhr.responseXML.documentElement;if(node.tagName=="parsererror"){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+ 
     106Strophe.serialize(this.xhr.responseXML));throw"parsererror";}}else if(this.xhr.responseText){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+ 
     107Strophe.serialize(this.xhr.responseXML));} 
     108return node;},_newXHR:function() 
     109{var xhr=null;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(xhr.overrideMimeType){xhr.overrideMimeType("text/xml");}}else if(window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHTTP");} 
     110xhr.onreadystatechange=this.func.prependArg(this);return xhr;}};Strophe.Connection=function(service) 
     111{this.service=service;this.jid="";this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this._idleTimeout=null;this._disconnectTimeout=null;this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this.paused=false;this.hold=1;this.wait=60;this.window=5;this._data=[];this._requests=[];this._uniqueId=Math.round(Math.random()*10000);this._sasl_success_handler=null;this._sasl_failure_handler=null;this._sasl_challenge_handler=null;this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k];var F=function(){};F.prototype=ptype;this[k]=new F();this[k].init(this);}}};Strophe.Connection.prototype={reset:function() 
     112{this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this._requests=[];this._uniqueId=Math.round(Math.random()*10000);},pause:function() 
     113{this.paused=true;},resume:function() 
     114{this.paused=false;},getUniqueId:function(suffix) 
     115{if(typeof(suffix)=="string"||typeof(suffix)=="number"){return++this._uniqueId+":"+suffix;}else{return++this._uniqueId+"";}},connect:function(jid,pass,callback,wait,hold) 
     116{this.jid=jid;this.pass=pass;this.connect_callback=callback;this.disconnecting=false;this.connected=false;this.authenticated=false;this.errors=0;this.wait=wait||this.wait;this.hold=hold||this.hold;this.domain=Strophe.getDomainFromJid(this.jid);var body=this._buildBody().attrs({to:this.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":Strophe.NS.BOSH});this._changeConnectStatus(Strophe.Status.CONNECTING,null);this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler();},attach:function(jid,sid,rid,callback,wait,hold,wind) 
     117{this.jid=jid;this.sid=sid;this.rid=rid;this.connect_callback=callback;this.domain=Strophe.getDomainFromJid(this.jid);this.authenticated=true;this.connected=true;this.wait=wait||this.wait;this.hold=hold||this.hold;this.window=wind||this.window;this._changeConnectStatus(Strophe.Status.ATTACHED,null);},xmlInput:function(elem) 
     118{return;},xmlOutput:function(elem) 
     119{return;},rawInput:function(data) 
     120{return;},rawOutput:function(data) 
     121{return;},send:function(elem) 
     122{if(elem===null){return;} 
     123if(typeof(elem.sort)==="function"){for(var i=0;i<elem.length;i++){this._queueData(elem[i]);}}else if(typeof(elem.tree)==="function"){this._queueData(elem.tree());}else{this._queueData(elem);} 
     124this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100);},flush:function() 
     125{clearTimeout(this._idleTimeout);this._onIdle();},sendIQ:function(elem,callback,errback,timeout){var timeoutHandler=null;var that=this;if(typeof(elem.tree)==="function"){elem=elem.tree();} 
     126var id=elem.getAttribute('id');if(!id){id=this.getUniqueId("sendIQ");elem.setAttribute("id",id);} 
     127var handler=this.addHandler(function(stanza){if(timeoutHandler){that.deleteTimedHandler(timeoutHandler);} 
     128var iqtype=stanza.getAttribute('type');if(iqtype==='result'){if(callback){callback(stanza);}}else if(iqtype==='error'){if(errback){errback(stanza);}}else{throw{name:"StropheError",message:"Got bad IQ type of "+iqtype};}},null,'iq',null,id);if(timeout){timeoutHandler=this.addTimedHandler(timeout,function(){that.deleteHandler(handler);if(errback){errback(null);} 
     129return false;});} 
     130this.send(elem);return id;},_queueData:function(element){if(element===null||!element.tagName||!element.childNodes){throw{name:"StropheError",message:"Cannot queue non-DOMElement."};} 
     131this._data.push(element);},_sendRestart:function() 
     132{this._data.push("restart");this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100);},addTimedHandler:function(period,handler) 
     133{var thand=new Strophe.TimedHandler(period,handler);this.addTimeds.push(thand);return thand;},deleteTimedHandler:function(handRef) 
     134{this.removeTimeds.push(handRef);},addHandler:function(handler,ns,name,type,id,from,options) 
     135{var hand=new Strophe.Handler(handler,ns,name,type,id,from,options);this.addHandlers.push(hand);return hand;},deleteHandler:function(handRef) 
     136{this.removeHandlers.push(handRef);},disconnect:function(reason) 
     137{this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason);Strophe.info("Disconnect was called because: "+reason);if(this.connected){this._disconnectTimeout=this._addSysTimedHandler(3000,this._onDisconnectTimeout.bind(this));this._sendTerminate();}},_changeConnectStatus:function(status,condition) 
     138{for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged){try{plugin.statusChanged(status,condition);}catch(err){Strophe.error(""+k+" plugin caused an exception "+"changing status: "+err);}}}} 
     139if(this.connect_callback){try{this.connect_callback(status,condition);}catch(e){Strophe.error("User connection callback caused an "+"exception: "+e);}}},_buildBody:function() 
     140{var bodyWrap=$build('body',{rid:this.rid++,xmlns:Strophe.NS.HTTPBIND});if(this.sid!==null){bodyWrap.attrs({sid:this.sid});} 
     141return bodyWrap;},_removeRequest:function(req) 
     142{Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--){if(req==this._requests[i]){this._requests.splice(i,1);}} 
     143req.xhr.onreadystatechange=function(){};this._throttledRequestHandler();},_restartRequest:function(i) 
     144{var req=this._requests[i];if(req.dead===null){req.dead=new Date();} 
     145this._processRequest(i);},_processRequest:function(i) 
     146{var req=this._requests[i];var reqStatus=-1;try{if(req.xhr.readyState==4){reqStatus=req.xhr.status;}}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus);} 
     147if(typeof(reqStatus)=="undefined"){reqStatus=-1;} 
     148var time_elapsed=req.age();var primaryTimeout=(!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait));var secondaryTimeout=(req.dead!==null&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait));var requestCompletedWithServerError=(req.xhr.readyState==4&&(reqStatus<1||reqStatus>=500));if(primaryTimeout||secondaryTimeout||requestCompletedWithServerError){if(secondaryTimeout){Strophe.error("Request "+ 
     149this._requests[i].id+" timed out (secondary), restarting");} 
     150req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){};this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends);req=this._requests[i];} 
     151if(req.xhr.readyState===0){Strophe.debug("request id "+req.id+"."+req.sends+" posting");req.date=new Date();try{req.xhr.open("POST",this.service,true);}catch(e2){Strophe.error("XHR open failed.");if(!this.connected){this._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service");} 
     152this.disconnect();return;} 
     153var sendFunc=function(){req.xhr.send(req.data);};if(req.sends>1){var backoff=Math.pow(req.sends,3)*1000;setTimeout(sendFunc,backoff);}else{sendFunc();} 
     154req.sends++;this.xmlOutput(req.xmlData);this.rawOutput(req.data);}else{Strophe.debug("_processRequest: "+ 
     155(i===0?"first":"second")+" request has readyState of "+ 
     156req.xhr.readyState);}},_throttledRequestHandler:function() 
     157{if(!this._requests){Strophe.debug("_throttledRequestHandler called with "+"undefined requests");}else{Strophe.debug("_throttledRequestHandler called with "+ 
     158this._requests.length+" requests");} 
     159if(!this._requests||this._requests.length===0){return;} 
     160if(this._requests.length>0){this._processRequest(0);} 
     161if(this._requests.length>1&&Math.abs(this._requests[0].rid- 
     162this._requests[1].rid)<this.window-1){this._processRequest(1);}},_onRequestStateChange:function(func,req) 
     163{Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+ 
     164req.xhr.readyState);if(req.abort){req.abort=false;return;} 
     165var reqStatus;if(req.xhr.readyState==4){reqStatus=0;try{reqStatus=req.xhr.status;}catch(e){} 
     166if(typeof(reqStatus)=="undefined"){reqStatus=0;} 
     167if(this.disconnecting){if(reqStatus>=400){this._hitError(reqStatus);return;}} 
     168var reqIs0=(this._requests[0]==req);var reqIs1=(this._requests[1]==req);if((reqStatus>0&&reqStatus<500)||req.sends>5){this._removeRequest(req);Strophe.debug("request id "+ 
     169req.id+" should now be removed");} 
     170if(reqStatus==200){if(reqIs1||(reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))){this._restartRequest(0);} 
     171Strophe.debug("request id "+ 
     172req.id+"."+ 
     173req.sends+" got 200");func(req);this.errors=0;}else{Strophe.error("request id "+ 
     174req.id+"."+ 
     175req.sends+" error "+reqStatus+" happened");if(reqStatus===0||(reqStatus>=400&&reqStatus<600)||reqStatus>=12000){this._hitError(reqStatus);if(reqStatus>=400&&reqStatus<500){this._changeConnectStatus(Strophe.Status.DISCONNECTING,null);this._doDisconnect();}}} 
     176if(!((reqStatus>0&&reqStatus<10000)||req.sends>5)){this._throttledRequestHandler();}}},_hitError:function(reqStatus) 
     177{this.errors++;Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors);if(this.errors>4){this._onDisconnectTimeout();}},_doDisconnect:function() 
     178{Strophe.info("_doDisconnect was called");this.authenticated=false;this.disconnecting=false;this.sid=null;this.streamId=null;this.rid=Math.floor(Math.random()*4294967295);if(this.connected){this._changeConnectStatus(Strophe.Status.DISCONNECTED,null);this.connected=false;} 
     179this.handlers=[];this.timedHandlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];},_dataRecv:function(req) 
     180{var arrayIndexOf=function(pArray,pInd) 
     181{var len=pArray.length;for(var i=0;i<len;i++) 
     182{if(pArray[i]==pInd) 
     183return i;} 
     184return-1;};try{var elem=req.getResponse();}catch(e){if(e!="parsererror"){throw e;} 
     185this.disconnect("strophe-parsererror");} 
     186if(elem===null){return;} 
     187this.xmlInput(elem);this.rawInput(Strophe.serialize(elem));var i,hand;while(this.removeHandlers.length>0) 
     188{hand=this.removeHandlers.pop();i=arrayIndexOf(this.handlers,hand);if(i>=0) 
     189{this.handlers.splice(i,1);}} 
     190while(this.addHandlers.length>0){this.handlers.push(this.addHandlers.pop());} 
     191if(this.disconnecting&&this._requests.length===0){this.deleteTimedHandler(this._disconnectTimeout);this._disconnectTimeout=null;this._doDisconnect();return;} 
     192var typ=elem.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=elem.getAttribute("condition");conflict=elem.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict";} 
     193this._changeConnectStatus(Strophe.Status.CONNFAIL,cond);}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown");} 
     194this.disconnect();return;} 
     195var self=this;Strophe.forEachChild(elem,null,function(child){var i,newList;newList=self.handlers;self.handlers=[];for(i=0;i<newList.length;i++){var hand=newList[i];if(hand.isMatch(child)&&(self.authenticated||!hand.user)){if(hand.run(child)){self.handlers.push(hand);}}else{self.handlers.push(hand);}}});},_sendTerminate:function() 
     196{Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});if(this.authenticated){body.c('presence',{xmlns:Strophe.NS.CLIENT,type:'unavailable'});} 
     197this.disconnecting=true;var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid"));this._requests.push(req);this._throttledRequestHandler();},_connect_cb:function(req) 
     198{Strophe.info("_connect_cb was called");this.connected=true;var bodyWrap=req.getResponse();if(!bodyWrap){return;} 
     199this.xmlInput(bodyWrap);this.rawInput(Strophe.serialize(bodyWrap));var typ=bodyWrap.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=bodyWrap.getAttribute("condition");conflict=bodyWrap.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict";} 
     200this._changeConnectStatus(Strophe.Status.CONNFAIL,cond);}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown");} 
     201return;} 
     202if(!this.sid){this.sid=bodyWrap.getAttribute("sid");} 
     203if(!this.stream_id){this.stream_id=bodyWrap.getAttribute("authid");} 
     204var wind=bodyWrap.getAttribute('requests');if(wind){this.window=parseInt(wind,10);} 
     205var hold=bodyWrap.getAttribute('hold');if(hold){this.hold=parseInt(hold,10);} 
     206var wait=bodyWrap.getAttribute('wait');if(wait){this.wait=parseInt(wait,10);} 
     207var do_sasl_plain=false;var do_sasl_digest_md5=false;var do_sasl_anonymous=false;var mechanisms=bodyWrap.getElementsByTagName("mechanism");var i,mech,auth_str,hashed_auth_str;if(mechanisms.length>0){for(i=0;i<mechanisms.length;i++){mech=Strophe.getText(mechanisms[i]);if(mech=='DIGEST-MD5'){do_sasl_digest_md5=true;}else if(mech=='PLAIN'){do_sasl_plain=true;}else if(mech=='ANONYMOUS'){do_sasl_anonymous=true;}}}else{var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler();return;} 
     208if(Strophe.getNodeFromJid(this.jid)===null&&do_sasl_anonymous){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"ANONYMOUS"}).tree());}else if(Strophe.getNodeFromJid(this.jid)===null){this._changeConnectStatus(Strophe.Status.CONNFAIL,'x-strophe-bad-non-anon-jid');this.disconnect();}else if(do_sasl_digest_md5){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge1_cb.bind(this),null,"challenge",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"DIGEST-MD5"}).tree());}else if(do_sasl_plain){auth_str=Strophe.getBareJidFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+Strophe.getNodeFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+this.pass;this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);hashed_auth_str=Base64.encode(auth_str);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"PLAIN"}).t(hashed_auth_str).tree());}else{this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._addSysHandler(this._auth1_cb.bind(this),null,null,null,"_auth_1");this.send($iq({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).tree());}},_sasl_challenge1_cb:function(elem) 
     209{var attribMatch=/([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/;var challenge=Base64.decode(Strophe.getText(elem));var cnonce=MD5.hexdigest(Math.random()*1234567890);var realm="";var host=null;var nonce="";var qop="";var matches;this.deleteHandler(this._sasl_failure_handler);while(challenge.match(attribMatch)){matches=challenge.match(attribMatch);challenge=challenge.replace(matches[0],"");matches[2]=matches[2].replace(/^"(.+)"$/,"$1");switch(matches[1]){case"realm":realm=matches[2];break;case"nonce":nonce=matches[2];break;case"qop":qop=matches[2];break;case"host":host=matches[2];break;}} 
     210var digest_uri="xmpp/"+this.domain;if(host!==null){digest_uri=digest_uri+"/"+host;} 
     211var A1=MD5.hash(Strophe.getNodeFromJid(this.jid)+":"+realm+":"+this.pass)+":"+nonce+":"+cnonce;var A2='AUTHENTICATE:'+digest_uri;var responseText="";responseText+='username='+ 
     212this._quote(Strophe.getNodeFromJid(this.jid))+',';responseText+='realm='+this._quote(realm)+',';responseText+='nonce='+this._quote(nonce)+',';responseText+='cnonce='+this._quote(cnonce)+',';responseText+='nc="00000001",';responseText+='qop="auth",';responseText+='digest-uri='+this._quote(digest_uri)+',';responseText+='response='+this._quote(MD5.hexdigest(MD5.hexdigest(A1)+":"+ 
     213nonce+":00000001:"+ 
     214cnonce+":auth:"+ 
     215MD5.hexdigest(A2)))+',';responseText+='charset="utf-8"';this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge2_cb.bind(this),null,"challenge",null,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build('response',{xmlns:Strophe.NS.SASL}).t(Base64.encode(responseText)).tree());return false;},_quote:function(str) 
     216{return'"'+str.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"';},_sasl_challenge2_cb:function(elem) 
     217{this.deleteHandler(this._sasl_success_handler);this.deleteHandler(this._sasl_failure_handler);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build('response',{xmlns:Strophe.NS.SASL}).tree());return false;},_auth1_cb:function(elem) 
     218{var iq=$iq({type:"set",id:"_auth_2"}).c('query',{xmlns:Strophe.NS.AUTH}).c('username',{}).t(Strophe.getNodeFromJid(this.jid)).up().c('password').t(this.pass);if(!Strophe.getResourceFromJid(this.jid)){this.jid=Strophe.getBareJidFromJid(this.jid)+'/strophe';} 
     219iq.up().c('resource',{}).t(Strophe.getResourceFromJid(this.jid));this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2");this.send(iq.tree());return false;},_sasl_success_cb:function(elem) 
     220{Strophe.info("SASL authentication succeeded.");this.deleteHandler(this._sasl_failure_handler);this._sasl_failure_handler=null;if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null;} 
     221this._addSysHandler(this._sasl_auth1_cb.bind(this),null,"stream:features",null,null);this._sendRestart();return false;},_sasl_auth1_cb:function(elem) 
     222{var i,child;for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeName=='bind'){this.do_bind=true;} 
     223if(child.nodeName=='session'){this.do_session=true;}} 
     224if(!this.do_bind){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false;}else{this._addSysHandler(this._sasl_bind_cb.bind(this),null,null,null,"_bind_auth_2");var resource=Strophe.getResourceFromJid(this.jid);if(resource){this.send($iq({type:"set",id:"_bind_auth_2"}).c('bind',{xmlns:Strophe.NS.BIND}).c('resource',{}).t(resource).tree());}else{this.send($iq({type:"set",id:"_bind_auth_2"}).c('bind',{xmlns:Strophe.NS.BIND}).tree());}} 
     225return false;},_sasl_bind_cb:function(elem) 
     226{if(elem.getAttribute("type")=="error"){Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false;} 
     227var bind=elem.getElementsByTagName("bind");var jidNode;if(bind.length>0){jidNode=bind[0].getElementsByTagName("jid");if(jidNode.length>0){this.jid=Strophe.getText(jidNode[0]);if(this.do_session){this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2");this.send($iq({type:"set",id:"_session_auth_2"}).c('session',{xmlns:Strophe.NS.SESSION}).tree());}else{this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null);}}}else{Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false;}},_sasl_session_cb:function(elem) 
     228{if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null);}else if(elem.getAttribute("type")=="error"){Strophe.info("Session creation failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false;} 
     229return false;},_sasl_failure_cb:function(elem) 
     230{if(this._sasl_success_handler){this.deleteHandler(this._sasl_success_handler);this._sasl_success_handler=null;} 
     231if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null;} 
     232this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false;},_auth2_cb:function(elem) 
     233{if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null);}else if(elem.getAttribute("type")=="error"){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);this.disconnect();} 
     234return false;},_addSysTimedHandler:function(period,handler) 
     235{var thand=new Strophe.TimedHandler(period,handler);thand.user=false;this.addTimeds.push(thand);return thand;},_addSysHandler:function(handler,ns,name,type,id) 
     236{var hand=new Strophe.Handler(handler,ns,name,type,id);hand.user=false;this.addHandlers.push(hand);return hand;},_onDisconnectTimeout:function() 
     237{Strophe.info("_onDisconnectTimeout was called");var req;while(this._requests.length>0){req=this._requests.pop();req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){};} 
     238this._doDisconnect();return false;},_onIdle:function() 
     239{var arrayIndexOf=function(pArray,pInd) 
     240{var len=pArray.length;for(var i=0;i<len;i++) 
     241{if(pArray[i]==pInd) 
     242return i;} 
     243return-1;};var i,thand,since,newList;while(this.removeTimeds.length>0) 
     244{thand=this.removeTimeds.pop();i=arrayIndexOf(this.timedHandlers,thand);if(i>=0) 
     245{this.timedHandlers.splice(i,1);}} 
     246while(this.addTimeds.length>0){this.timedHandlers.push(this.addTimeds.pop());} 
     247var now=new Date().getTime();newList=[];for(i=0;i<this.timedHandlers.length;i++){thand=this.timedHandlers[i];if(this.authenticated||!thand.user){since=thand.lastCalled+thand.period;if(since-now<=0){if(thand.run()){newList.push(thand);}}else{newList.push(thand);}}} 
     248this.timedHandlers=newList;var body,time_elapsed;if(this.authenticated&&this._requests.length===0&&this._data.length===0&&!this.disconnecting){Strophe.info("no requests during idle cycle, sending "+"blank request");this._data.push(null);} 
     249if(this._requests.length<2&&this._data.length>0&&!this.paused){body=this._buildBody();for(i=0;i<this._data.length;i++){if(this._data[i]!==null){if(this._data[i]==="restart"){body.attrs({to:this.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":Strophe.NS.BOSH});}else{body.cnode(this._data[i]).up();}}} 
     250delete this._data;this._data=[];this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid")));this._processRequest(this._requests.length-1);} 
     251if(this._requests.length>0){time_elapsed=this._requests[0].age();if(this._requests[0].dead!==null){if(this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)){this._throttledRequestHandler();}} 
     252if(time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)){Strophe.warn("Request "+ 
     253this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity");this._throttledRequestHandler();}} 
     254clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100);}};if(callback){callback(Strophe,$build,$msg,$iq,$pres);}})(function(){window.Strophe=arguments[0];window.$build=arguments[1];window.$msg=arguments[2];window.$iq=arguments[3];window.$pres=arguments[4];}); 
Note: See TracChangeset for help on using the changeset viewer.