/*
	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(!window["OpenAjax"]){
OpenAjax=new function(){
var t=true;
var f=false;
var g=window;
var _1;
var _2="org.openajax.hub.";
var h={};
this.hub=h;
h.implementer="http://openajax.org";
h.implVersion="0.6";
h.specVersion="0.6";
h.implExtraData={};
var _1={};
h.libraries=_1;
h.registerLibrary=function(_3,_4,_5,_6){
_1[_3]={prefix:_3,namespaceURI:_4,version:_5,extraData:_6};
this.publish(_2+"registerLibrary",_1[_3]);
};
h.unregisterLibrary=function(_7){
this.publish(_2+"unregisterLibrary",_1[_7]);
delete _1[_7];
};
h._subscriptions={c:{},s:[]};
h._cleanup=[];
h._subIndex=0;
h._pubDepth=0;
h.subscribe=function(_8,_9,_a,_b,_c){
if(!_a){
_a=window;
}
var _d=_8+"."+this._subIndex;
var _e={scope:_a,cb:_9,fcb:_c,data:_b,sid:this._subIndex++,hdl:_d};
var _f=_8.split(".");
this._subscribe(this._subscriptions,_f,0,_e);
return _d;
};
h.publish=function(_10,_11){
var _12=_10.split(".");
this._pubDepth++;
this._publish(this._subscriptions,_12,0,_10,_11);
this._pubDepth--;
if((this._cleanup.length>0)&&(this._pubDepth==0)){
for(var i=0;i<this._cleanup.length;i++){
this.unsubscribe(this._cleanup[i].hdl);
}
delete (this._cleanup);
this._cleanup=[];
}
};
h.unsubscribe=function(sub){
var _13=sub.split(".");
var sid=_13.pop();
this._unsubscribe(this._subscriptions,_13,0,sid);
};
h._subscribe=function(_14,_15,_16,sub){
var _17=_15[_16];
if(_16==_15.length){
_14.s.push(sub);
}else{
if(typeof _14.c=="undefined"){
_14.c={};
}
if(typeof _14.c[_17]=="undefined"){
_14.c[_17]={c:{},s:[]};
this._subscribe(_14.c[_17],_15,_16+1,sub);
}else{
this._subscribe(_14.c[_17],_15,_16+1,sub);
}
}
};
h._publish=function(_18,_19,_1a,_1b,msg){
if(typeof _18!="undefined"){
var _1c;
if(_1a==_19.length){
_1c=_18;
}else{
this._publish(_18.c[_19[_1a]],_19,_1a+1,_1b,msg);
this._publish(_18.c["*"],_19,_1a+1,_1b,msg);
_1c=_18.c["**"];
}
if(typeof _1c!="undefined"){
var _1d=_1c.s;
var max=_1d.length;
for(var i=0;i<max;i++){
if(_1d[i].cb){
var sc=_1d[i].scope;
var cb=_1d[i].cb;
var fcb=_1d[i].fcb;
var d=_1d[i].data;
if(typeof cb=="string"){
cb=sc[cb];
}
if(typeof fcb=="string"){
fcb=sc[fcb];
}
if((!fcb)||(fcb.call(sc,_1b,msg,d))){
cb.call(sc,_1b,msg,d);
}
}
}
}
}
};
h._unsubscribe=function(_1e,_1f,_20,sid){
if(typeof _1e!="undefined"){
if(_20<_1f.length){
var _21=_1e.c[_1f[_20]];
this._unsubscribe(_21,_1f,_20+1,sid);
if(_21.s.length==0){
for(var x in _21.c){
return;
}
delete _1e.c[_1f[_20]];
}
return;
}else{
var _22=_1e.s;
var max=_22.length;
for(var i=0;i<max;i++){
if(sid==_22[i].sid){
if(this._pubDepth>0){
_22[i].cb=null;
this._cleanup.push(_22[i]);
}else{
_22.splice(i,1);
}
return;
}
}
}
}
};
h.reinit=function(){
for(var lib in OpenAjax.hub.libraries){
delete OpenAjax.hub.libraries[lib];
}
OpenAjax.hub.registerLibrary("OpenAjax","http://openajax.org/hub","0.6",{});
delete OpenAjax._subscriptions;
OpenAjax._subscriptions={c:{},s:[]};
delete OpenAjax._cleanup;
OpenAjax._cleanup=[];
OpenAjax._subIndex=0;
OpenAjax._pubDepth=0;
};
};
OpenAjax.hub.registerLibrary("OpenAjax","http://openajax.org/hub","0.6",{});
}
