var ChatRoster=Class.create();ChatRoster.prototype={initialize:function(a){this.daddy=a;this.friendContainer=this.daddy.win.$("friendContainer");this.friendHolder=this.daddy.win.$("friendHolder");this.friendsOnline=new Hash();this.idleFriends=new Hash();this.log=this.daddy.log},daddy:null,friends:null,lcFriends:null,friendsOnline:null,friendContainer:null,friendHolder:null,onlineFriendTemplate:null,log:null,idleFriends:null,isFriend:function(a){var c=false;var b=a.toLowerCase();this.lcFriends.each(function(d){if(d==b){c=true}}.bind(this));return c},isFriendOnline:function(a){if(a.indexOf("@")>-1){a=a.split("@")[0]}a=a.toLowerCase();return this.friendsOnline.get(a)==true},postLogin:function(){if(this.daddy.config.admin==true){this.friends.unshift("Broadcast")}this.lcFriends=new Array();this.friends.each(function(a){a=a.gsub(/ /,"___");
this.lcFriends.push(a.toLowerCase())}.bind(this));this.readFriendPresenceCookie()},validFriend:function(a){return this.lcFriends.indexOf(a.toLowerCase())>-1},removeRoster:function(a){a=a.split("/")[0];var d=new JSJaCIQ();d.setIQ(null,"set","roster_"+this.daddy.transN());var c=d.setQuery("jabber:iq:roster");var b=c.appendChild(d.getDoc().createElement("item"));b.setAttribute("jid",a);b.setAttribute("subscription","remove");this.daddy.con.send(d)},friendIdle:function(b){var c=b.toLowerCase();if(b!=""&&this.friendsOnline.get(c)==true&&this.idleFriends.get(c)!=true){var a=this.daddy.win.$("friend-"+this.daddy.namesafe(c));a.addClassName("idleFriend");this.idleFriends.set(c,true);if(this.daddy.hasBaby(b)){this.daddy.baby(b).setStatus("away",b)}}},showFriend:function(b){var c=b.toLowerCase();if(b!=""&&this.friendsOnline.get(c)!=true){var e=Element.extend(this.daddy.doc.createElement("div"));
e.addClassName("friendHolderFriend");e.id="friend-"+this.daddy.namesafe(c);e.innerHTML=this.onlineFriendTemplate.evaluate({user:b.gsub(/___/," ")});e.select("a")[0].observe("click",function(f,d){this.daddy.chatWith(d);this.daddy.chatContainer.show();this.friendContainer.hide()}.bindAsEventListener(this,b));this.friendHolder.insert(e);this.friendsOnline.set(c,true)}else{if(this.friendsOnline.get(c)==true&&this.idleFriends.get(c)==true){var a=this.daddy.win.$("friend-"+this.daddy.namesafe(c));a.removeClassName("idleFriend");this.idleFriends.unset(c)}}if(this.daddy.hasBaby(b)){this.daddy.baby(b).setStatus("available",b)}},removeFriend:function(b){var c=b.toLowerCase();if(this.friendsOnline.get(c)==true){var a=this.daddy.win.$("friend-"+this.daddy.namesafe(c));if(a!=undefined&&a!=null){a.remove()}this.friendsOnline.unset(c)
}if(this.daddy.hasBaby(b)){this.daddy.baby(b).setStatus("unavailable",b)}},writeFriendPresenceCookie:function(){var a=this.friendsOnline.keys().join(":");(new JSJaCCookie("frpres",a,-1)).write()},readFriendPresenceCookie:function(){if(this.daddy.config.admin==true){this.showFriend("Broadcast")}try{var a=JSJaCCookie.read("frpres");if(a!=null){var c=a.getValue();if(c!=null&&c!=undefined){c.split(":").each(function(d){this.showFriend(d)}.bind(this))}}}catch(b){}},requestRoster:function(){var a=new JSJaCIQ();a.setIQ(null,"get","roster_"+this.daddy.transN());a.setQuery("jabber:iq:roster");this.daddy.con.send(a,this.loadRoster.bind(this))},allowSubscription:function(a){var b=new JSJaCPresence();b.setTo(a);b.setType("subscribed");this.daddy.con.send(b);this.addToRoster(a.split("@")[0])},loadRoster:function(h){if(!h||h.getType()!="result"){return
}var e=new Array();var j=h.getQuery().childNodes;for(var g=0;g<j.length;g++){var f=j.item(g);if(typeof(f.getAttribute("jid"))=="undefined"){continue}var b=f.getAttribute("jid");var a=f.getAttribute("subscription");var d=f.getAttribute("ask");if(typeof(d)!=undefined&&d=="subscribe"&&a!=null&&(a=="from"||a=="none")){var c=b.split("@")[0].toLowerCase();if(this.lcFriends.indexOf(c)>-1){if(a=="none"){}else{this.addRosterFrom(b)}}}else{e.push(b.split("@")[0].toLowerCase())}}this.lcFriends.each(function(i){if(e.indexOf(i)==-1){this.addToRoster(i)}}.bind(this));this.daddy.runConnectionFinishedCallbacks()},addRosterFrom:function(a){},addToRoster:function(a){var e=new JSJaCIQ();e.setIQ(null,"set","roster_"+this.daddy.transN());var c=e.setQuery("jabber:iq:roster");var b=c.appendChild(e.getDoc().createElement("item"));
b.setAttribute("jid",a+"@"+this.daddy.config.server);this.daddy.con.send(e);var d=new JSJaCPresence();d.setType("subscribe");d.setTo(a+"@"+this.daddy.config.server);this.daddy.con.send(d)},handlePresence:function(d){var c=d.getFrom();if(c.split("@")[0].toLowerCase()==this.daddy.config.username_login){return}if(this.validFriend(c.split("@")[0])){var b='<div class="msg">';if(!d.getType()&&!d.getShow()){b+="<b>"+c+" has become available.</b>";this.showFriend(c.split("@")[0])}else{var a="";b+="<b>"+c+" has set his presence to ";if(d.getType()){a=d.getType();b+=d.getType()+". (type)</b>"}else{a=d.getShow();b+=d.getShow()+". (show)</b>"}if(a=="unavailable"){this.removeFriend(c.split("@")[0])}else{if(a=="subscribe"){this.allowSubscription(c)}else{if(a=="away"){this.friendIdle(c.split("@")[0])}}}if(d.getStatus()){b+=" ("+d.getStatus().htmlEnc()+")"
}}b+="</div>"}else{this.removeFriend(c.split("@")[0]);this.removeRoster(c)}this.writeFriendPresenceCookie()}};
