/*
	Copyright (c) 2004-2012, 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
*/

//>>built
define("dojo/_base/Deferred",["./kernel","../Deferred","../promise/Promise","../errors/CancelError","../has","./lang","../when"],function(_1,_2,_3,_4,_5,_6,_7){var _8=function(){};var _9=Object.freeze||function(){};var _a=_1.Deferred=function(_b){var _c,_d,_e,_f,_10;var _11=(this.promise=new _3());function _12(_13){if(_d){throw new Error("This deferred has already been resolved");}_c=_13;_d=true;_14();};function _14(){var _15;while(!_15&&_10){var _16=_10;_10=_10.next;if((_15=(_16.progress==_8))){_d=false;}var _17=(_e?_16.error:_16.resolved);if(_5("config-useDeferredInstrumentation")){if(_e&&_2.instrumentRejected){_2.instrumentRejected(_c,!!_17);}}if(_17){try{var _18=_17(_c);if(_18&&typeof _18.then==="function"){_18.then(_6.hitch(_16.deferred,"resolve"),_6.hitch(_16.deferred,"reject"),_6.hitch(_16.deferred,"progress"));continue;}var _19=_15&&_18===undefined;if(_15&&!_19){_e=_18 instanceof Error;}_16.deferred[_19&&_e?"reject":"resolve"](_19?_c:_18);}catch(e){_16.deferred.reject(e);}}else{if(_e){_16.deferred.reject(_c);}else{_16.deferred.resolve(_c);}}}};this.resolve=this.callback=function(_1a){this.fired=0;this.results=[_1a,null];_12(_1a);};this.reject=this.errback=function(_1b){_e=true;this.fired=1;if(_5("config-useDeferredInstrumentation")){if(_2.instrumentRejected){_2.instrumentRejected(_1b,!!_10);}}_12(_1b);this.results=[null,_1b];};this.progress=function(_1c){var _1d=_10;while(_1d){var _1e=_1d.progress;_1e&&_1e(_1c);_1d=_1d.next;}};this.addCallbacks=function(_1f,_20){this.then(_1f,_20,_8);return this;};_11.then=this.then=function(_21,_22,_23){var _24=_23==_8?this:new _a(_11.cancel);var _25={resolved:_21,error:_22,progress:_23,deferred:_24};if(_10){_f=_f.next=_25;}else{_10=_f=_25;}if(_d){_14();}return _24.promise;};var _26=this;_11.cancel=this.cancel=function(){if(!_d){var _27=_b&&_b(_26);if(!_d){if(!(_27 instanceof Error)){_27=new _4(_27);}_27.log=false;_26.reject(_27);}}};_9(_11);};_6.extend(_a,{addCallback:function(_28){return this.addCallbacks(_6.hitch.apply(_1,arguments));},addErrback:function(_29){return this.addCallbacks(null,_6.hitch.apply(_1,arguments));},addBoth:function(_2a){var _2b=_6.hitch.apply(_1,arguments);return this.addCallbacks(_2b,_2b);},fired:-1});_a.when=_1.when=_7;return _a;});