/*
	Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
	Available via Academic Free License >= 2.1 OR the modified BSD license.
	see: http://dojotoolkit.org/license for details
*/


if(!dojo._hasResource["dojox.xmpp.bosh"]){
dojo._hasResource["dojox.xmpp.bosh"]=true;
dojo.provide("dojox.xmpp.bosh");
dojo.require("dojo.io.script");
dojo.require("dojo.io.iframe");
dojo.require("dojox.xml.parser");
dojox.xmpp.bosh={transportIframes:[],initialize:function(_1){
this.transportIframes=[];
var _2=dojox._scopeName+".xmpp.bosh";
var c=dojo.connect(dojo.getObject(_2),"_iframeOnload",this,function(_3){
if(_3==0){
_1.load();
dojo.disconnect(c);
}
});
for(var i=0;i<_1.iframes;i++){
var _4="xmpp-transport-"+i;
var _5=dojo.byId("xmpp-transport-"+i);
if(_5){
if(window[_4]){
window[_4]=null;
}
if(window.frames[_4]){
window.frames[_4]=null;
}
dojo.destroy(_5);
}
_5=dojo.io.iframe.create("xmpp-transport-"+i,_2+"._iframeOnload("+i+");");
this.transportIframes.push(_5);
}
},_iframeOnload:function(_6){
var _7=dojo.io.iframe.doc(dojo.byId("xmpp-transport-"+_6));
_7.write("<script>var isLoaded=true; var rid=0; var transmiting=false; function _BOSH_(msg) { transmiting=false; parent.dojox.xmpp.bosh.handle(msg, rid); } </script>");
},findOpenIframe:function(){
for(var i=0;i<this.transportIframes.length;i++){
var _8=this.transportIframes[i];
var _9=_8.contentWindow;
if(_9.isLoaded&&!_9.transmiting){
return _8;
}
}
return false;
},handle:function(_a,_b){
var _c=this["rid"+_b];
var _d=dojox.xml.parser.parse(_a,"text/xml");
if(_d){
_c.ioArgs.xmppMessage=_d;
}else{
_c.errback(new Error("Recieved bad document from server: "+_a));
}
},get:function(_e){
var _f=this.findOpenIframe();
var _10=dojo.io.iframe.doc(_f);
_e.frameDoc=_10;
var dfd=this._makeScriptDeferred(_e);
var _11=dfd.ioArgs;
_f.contentWindow.rid=_11.rid;
_f.contentWindow.transmiting=true;
dojo._ioAddQueryToUrl(_11);
dojo._ioNotifyStart(dfd);
dojo.io.script.attach(_11.id,_11.url,_10);
dojo._ioWatch(dfd,this._validCheck,this._ioCheck,this._resHandle);
return dfd;
},remove:function(id,_12){
dojo.destroy(dojo.byId(id,_12));
if(this[id]){
delete this[id];
}
},_makeScriptDeferred:function(_13){
var dfd=dojo._ioSetArgs(_13,this._deferredCancel,this._deferredOk,this._deferredError);
var _14=dfd.ioArgs;
_14.id="rid"+_13.rid;
_14.rid=_13.rid;
_14.canDelete=true;
_14.frameDoc=_13.frameDoc;
this[_14.id]=dfd;
return dfd;
},_deferredCancel:function(dfd){
dfd.canceled=true;
if(dfd.ioArgs.canDelete){
dojox.xmpp.bosh._addDeadScript(dfd.ioArgs);
}
},_deferredOk:function(dfd){
var _15=dfd.ioArgs;
if(_15.canDelete){
dojox.xmpp.bosh._addDeadScript(_15);
}
return _15.xmppMessage||_15;
},_deferredError:function(_16,dfd){
if(dfd.ioArgs.canDelete){
if(_16.dojoType=="timeout"){
dojox.xmpp.bosh.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc);
}else{
dojox.xmpp.bosh._addDeadScript(dfd.ioArgs);
}
}
return _16;
},_deadScripts:[],_addDeadScript:function(_17){
dojox.xmpp.bosh._deadScripts.push({id:_17.id,frameDoc:_17.frameDoc});
_17.frameDoc=null;
},_validCheck:function(dfd){
var _18=dojox.xmpp.bosh;
var _19=_18._deadScripts;
if(_19&&_19.length>0){
for(var i=0;i<_19.length;i++){
_18.remove(_19[i].id,_19[i].frameDoc);
_19[i].frameDoc=null;
}
dojox.xmpp.bosh._deadScripts=[];
}
return true;
},_ioCheck:function(dfd){
var _1a=dfd.ioArgs;
if(_1a.xmppMessage){
return true;
}
return false;
},_resHandle:function(dfd){
if(dojox.xmpp.bosh._ioCheck(dfd)){
dfd.callback(dfd);
}else{
dfd.errback(new Error("inconceivable dojox.xmpp.bosh._resHandle error"));
}
}};
}
