/* Packed
 *
 * libs/mochikit/Async.js
 *
 */
if(typeof (dojo)!="undefined"){
dojo.provide("MochiKit.Async");
dojo.require("MochiKit.Base");
}
if(typeof (JSAN)!="undefined"){
JSAN.use("MochiKit.Base",[]);
}
try{
if(typeof (MochiKit.Base)=="undefined"){
throw "";
}
}
catch(e){
throw "MochiKit.Async depends on MochiKit.Base!";
}
if(typeof (MochiKit.Async)=="undefined"){
MochiKit.Async={};
}
MochiKit.Async.NAME="MochiKit.Async";
MochiKit.Async.VERSION="1.4";
MochiKit.Async.__repr__=function(){
return "["+this.NAME+" "+this.VERSION+"]";
};
MochiKit.Async.toString=function(){
return this.__repr__();
};
MochiKit.Async.Deferred=function(_1){
this.chain=[];
this.id=this._nextId();
this.fired=-1;
this.paused=0;
this.results=[null,null];
this.canceller=_1;
this.silentlyCancelled=false;
this.chained=false;
};
MochiKit.Async.Deferred.prototype={repr:function(){
var _2;
if(this.fired==-1){
_2="unfired";
}else{
if(this.fired===0){
_2="success";
}else{
_2="error";
}
}
return "Deferred("+this.id+", "+_2+")";
},toString:MochiKit.Base.forwardCall("repr"),_nextId:MochiKit.Base.counter(),cancel:function(){
var _3=MochiKit.Async;
if(this.fired==-1){
if(this.canceller){
this.canceller(this);
}else{
this.silentlyCancelled=true;
}
if(this.fired==-1){
this.errback(new _3.CancelledError(this));
}
}else{
if((this.fired===0)&&(this.results[0] instanceof _3.Deferred)){
this.results[0].cancel();
}
}
},_resback:function(_4){
this.fired=((_4 instanceof Error)?1:0);
this.results[this.fired]=_4;
this._fire();
},_check:function(){
if(this.fired!=-1){
if(!this.silentlyCancelled){
throw new MochiKit.Async.AlreadyCalledError(this);
}
this.silentlyCancelled=false;
return;
}
},callback:function(_5){
this._check();
if(_5 instanceof MochiKit.Async.Deferred){
throw new Error("Deferred instances can only be chained if they are the result of a callback");
}
this._resback(_5);
},errback:function(_6){
this._check();
var _7=MochiKit.Async;
if(_6 instanceof _7.Deferred){
throw new Error("Deferred instances can only be chained if they are the result of a callback");
}
if(!(_6 instanceof Error)){
_6=new _7.GenericError(_6);
}
this._resback(_6);
},addBoth:function(fn){
if(arguments.length>1){
fn=MochiKit.Base.partial.apply(null,arguments);
}
return this.addCallbacks(fn,fn);
},addCallback:function(fn){
if(arguments.length>1){
fn=MochiKit.Base.partial.apply(null,arguments);
}
return this.addCallbacks(fn,null);
},addErrback:function(fn){
if(arguments.length>1){
fn=MochiKit.Base.partial.apply(null,arguments);
}
return this.addCallbacks(null,fn);
},addCallbacks:function(cb,eb){
if(this.chained){
throw new Error("Chained Deferreds can not be re-used");
}
this.chain.push([cb,eb]);
if(this.fired>=0){
this._fire();
}
return this;
},_fire:function(){
var _d=this.chain;
var _e=this.fired;
var _f=this.results[_e];
var _10=this;
var cb=null;
while(_d.length>0&&this.paused===0){
var _12=_d.shift();
var f=_12[_e];
if(f===null){
continue;
}
try{
_f=f(_f);
_e=((_f instanceof Error)?1:0);
if(_f instanceof MochiKit.Async.Deferred){
cb=function(res){
_10._resback(res);
_10.paused--;
if((_10.paused===0)&&(_10.fired>=0)){
_10._fire();
}
};
this.paused++;
}
}
catch(err){
_e=1;
if(!(err instanceof Error)){
err=new MochiKit.Async.GenericError(err);
}
_f=err;
}
}
this.fired=_e;
this.results[_e]=_f;
if(cb&&this.paused){
_f.addBoth(cb);
_f.chained=true;
}
}};
MochiKit.Base.update(MochiKit.Async,{evalJSONRequest:function(){
return eval("("+arguments[0].responseText+")");
},succeed:function(_15){
var d=new MochiKit.Async.Deferred();
d.callback.apply(d,arguments);
return d;
},fail:function(_17){
var d=new MochiKit.Async.Deferred();
d.errback.apply(d,arguments);
return d;
},getXMLHttpRequest:function(){
var _19=arguments.callee;
if(!_19.XMLHttpRequest){
var _1a=[function(){
return new XMLHttpRequest();
},function(){
return new ActiveXObject("Msxml2.XMLHTTP");
},function(){
return new ActiveXObject("Microsoft.XMLHTTP");
},function(){
return new ActiveXObject("Msxml2.XMLHTTP.4.0");
},function(){
throw new MochiKit.Async.BrowserComplianceError("Browser does not support XMLHttpRequest");
}];
for(var i=0;i<_1a.length;i++){
var _1c=_1a[i];
try{
_19.XMLHttpRequest=_1c;
return _1c();
}
catch(e){
}
}
}
return _19.XMLHttpRequest();
},_xhr_onreadystatechange:function(d){
var m=MochiKit.Base;
if(this.readyState==4){
try{
this.onreadystatechange=null;
}
catch(e){
try{
this.onreadystatechange=m.noop;
}
catch(e){
}
}
var _1f=null;
try{
_1f=this.status;
if(!_1f&&m.isNotEmpty(this.responseText)){
_1f=304;
}
}
catch(e){
}
if(_1f==200||_1f==201||_1f==204||_1f==304||_1f==1223){
d.callback(this);
}else{
var err=new MochiKit.Async.XMLHttpRequestError(this,"Request failed");
if(err.number){
d.errback(err);
}else{
d.errback(err);
}
}
}
},_xhr_canceller:function(req){
try{
req.onreadystatechange=null;
}
catch(e){
try{
req.onreadystatechange=MochiKit.Base.noop;
}
catch(e){
}
}
req.abort();
},sendXMLHttpRequest:function(req,_23){
if(typeof (_23)=="undefined"||_23===null){
_23="";
}
var m=MochiKit.Base;
var _25=MochiKit.Async;
var d=new _25.Deferred(m.partial(_25._xhr_canceller,req));
try{
req.onreadystatechange=m.bind(_25._xhr_onreadystatechange,req,d);
req.send(_23);
}
catch(e){
try{
req.onreadystatechange=null;
}
catch(ignore){
}
d.errback(e);
}
return d;
},doXHR:function(url,_28){
var m=MochiKit.Base;
_28=m.update({method:"GET",sendContent:""},_28);
var _2a=MochiKit.Async;
var req=_2a.getXMLHttpRequest();
if(_28.queryString){
var qs=m.queryString(_28.queryString);
if(qs){
url+="?"+qs;
}
}
if("username" in _28){
req.open(_28.method,url,true,_28.username,_28.password);
}else{
req.open(_28.method,url,true);
}
if(req.overrideMimeType&&_28.mimeType){
req.overrideMimeType(_28.mimeType);
}
if(_28.headers){
var _2d=_28.headers;
if(!m.isArrayLike(_2d)){
_2d=m.items(_2d);
}
for(var i=0;i<_2d.length;i++){
var _2f=_2d[i];
var _30=_2f[0];
var _31=_2f[1];
req.setRequestHeader(_30,_31);
}
}
return _2a.sendXMLHttpRequest(req,_28.sendContent);
},_buildURL:function(url){
if(arguments.length>1){
var m=MochiKit.Base;
var qs=m.queryString.apply(null,m.extend(null,arguments,1));
if(qs){
return url+"?"+qs;
}
}
return url;
},doSimpleXMLHttpRequest:function(url){
var _36=MochiKit.Async;
url=_36._buildURL.apply(_36,arguments);
return _36.doXHR(url);
},loadJSONDoc:function(url){
var _38=MochiKit.Async;
url=_38._buildURL.apply(_38,arguments);
var d=_38.doXHR(url,{"mimeType":"text/plain","headers":[["Accept","application/json"]]});
d=d.addCallback(_38.evalJSONRequest);
return d;
},wait:function(_3a,_3b){
var d=new MochiKit.Async.Deferred();
var m=MochiKit.Base;
if(typeof (_3b)!="undefined"){
d.addCallback(function(){
return _3b;
});
}
var _3e=setTimeout(m.bind("callback",d),Math.floor(_3a*1000));
d.canceller=function(){
try{
clearTimeout(_3e);
}
catch(e){
}
};
return d;
},callLater:function(_3f,_40){
var m=MochiKit.Base;
var _42=m.partial.apply(m,m.extend(null,arguments,1));
return MochiKit.Async.wait(_3f).addCallback(function(res){
return _42();
});
}});
MochiKit.Async.DeferredLock=function(){
this.waiting=[];
this.locked=false;
this.id=this._nextId();
};
MochiKit.Async.DeferredLock.prototype={__class__:MochiKit.Async.DeferredLock,acquire:function(){
var d=new MochiKit.Async.Deferred();
if(this.locked){
this.waiting.push(d);
}else{
this.locked=true;
d.callback(this);
}
return d;
},release:function(){
if(!this.locked){
throw TypeError("Tried to release an unlocked DeferredLock");
}
this.locked=false;
if(this.waiting.length>0){
this.locked=true;
this.waiting.shift().callback(this);
}
},_nextId:MochiKit.Base.counter(),repr:function(){
var _45;
if(this.locked){
_45="locked, "+this.waiting.length+" waiting";
}else{
_45="unlocked";
}
return "DeferredLock("+this.id+", "+_45+")";
},toString:MochiKit.Base.forwardCall("repr")};
MochiKit.Async.DeferredList=function(_46,_47,_48,_49,_4a){
MochiKit.Async.Deferred.apply(this,[_4a]);
this.list=_46;
var _4b=[];
this.resultList=_4b;
this.finishedCount=0;
this.fireOnOneCallback=_47;
this.fireOnOneErrback=_48;
this.consumeErrors=_49;
var cb=MochiKit.Base.bind(this._cbDeferred,this);
for(var i=0;i<_46.length;i++){
var d=_46[i];
_4b.push(undefined);
d.addCallback(cb,i,true);
d.addErrback(cb,i,false);
}
if(_46.length===0&&!_47){
this.callback(this.resultList);
}
};
MochiKit.Async.DeferredList.prototype=new MochiKit.Async.Deferred();
MochiKit.Async.DeferredList.prototype._cbDeferred=function(_4f,_50,_51){
this.resultList[_4f]=[_50,_51];
this.finishedCount+=1;
if(this.fired==-1){
if(_50&&this.fireOnOneCallback){
this.callback([_4f,_51]);
}else{
if(!_50&&this.fireOnOneErrback){
this.errback(_51);
}else{
if(this.finishedCount==this.list.length){
this.callback(this.resultList);
}
}
}
}
if(!_50&&this.consumeErrors){
_51=null;
}
return _51;
};
MochiKit.Async.gatherResults=function(_52){
var d=new MochiKit.Async.DeferredList(_52,false,true,false);
d.addCallback(function(_54){
var ret=[];
for(var i=0;i<_54.length;i++){
ret.push(_54[i][1]);
}
return ret;
});
return d;
};
MochiKit.Async.maybeDeferred=function(_57){
var _58=MochiKit.Async;
var _59;
try{
var r=_57.apply(null,MochiKit.Base.extend([],arguments,1));
if(r instanceof _58.Deferred){
_59=r;
}else{
if(r instanceof Error){
_59=_58.fail(r);
}else{
_59=_58.succeed(r);
}
}
}
catch(e){
_59=_58.fail(e);
}
return _59;
};
MochiKit.Async.EXPORT=["AlreadyCalledError","CancelledError","BrowserComplianceError","GenericError","XMLHttpRequestError","Deferred","succeed","fail","getXMLHttpRequest","doSimpleXMLHttpRequest","loadJSONDoc","wait","callLater","sendXMLHttpRequest","DeferredLock","DeferredList","gatherResults","maybeDeferred","doXHR"];
MochiKit.Async.EXPORT_OK=["evalJSONRequest"];
MochiKit.Async.__new__=function(){
var m=MochiKit.Base;
var ne=m.partial(m._newNamedError,this);
ne("AlreadyCalledError",function(_5d){
this.deferred=_5d;
});
ne("CancelledError",function(_5e){
this.deferred=_5e;
});
ne("BrowserComplianceError",function(msg){
this.message=msg;
});
ne("GenericError",function(msg){
this.message=msg;
});
ne("XMLHttpRequestError",function(req,msg){
this.req=req;
this.message=msg;
try{
this.number=req.status;
}
catch(e){
}
});
this.EXPORT_TAGS={":common":this.EXPORT,":all":m.concat(this.EXPORT,this.EXPORT_OK)};
m.nameFunctions(this);
};
MochiKit.Async.__new__();
MochiKit.Base._exportSymbols(this,MochiKit.Async);



