/*
	Copyright (c) 2004-2016, The JS 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/Stateful",["./_base/declare","./_base/lang","./_base/array","./when"],function(_1,_2,_3,_4){
return _1("dojo.Stateful",null,{_attrPairNames:{},_getAttrNames:function(_5){
var _6=this._attrPairNames;
if(_6[_5]){
return _6[_5];
}
return (_6[_5]={s:"_"+_5+"Setter",g:"_"+_5+"Getter"});
},postscript:function(_7){
if(_7){
this.set(_7);
}
},_get:function(_8,_9){
return typeof this[_9.g]==="function"?this[_9.g]():this[_8];
},get:function(_a){
return this._get(_a,this._getAttrNames(_a));
},set:function(_b,_c){
if(typeof _b==="object"){
for(var x in _b){
if(_b.hasOwnProperty(x)&&x!="_watchCallbacks"){
this.set(x,_b[x]);
}
}
return this;
}
var _d=this._getAttrNames(_b),_e=this._get(_b,_d),_f=this[_d.s],_10;
if(typeof _f==="function"){
_10=_f.apply(this,Array.prototype.slice.call(arguments,1));
}else{
this[_b]=_c;
}
if(this._watchCallbacks){
var _11=this;
_4(_10,function(){
_11._watchCallbacks(_b,_e,_c);
});
}
return this;
},_changeAttrValue:function(_12,_13){
var _14=this.get(_12);
this[_12]=_13;
if(this._watchCallbacks){
this._watchCallbacks(_12,_14,_13);
}
return this;
},watch:function(_15,_16){
var _17=this._watchCallbacks;
if(!_17){
var _18=this;
_17=this._watchCallbacks=function(_19,_1a,_1b,_1c){
var _1d=function(_1e){
if(_1e){
_1e=_1e.slice();
for(var i=0,l=_1e.length;i<l;i++){
_1e[i].call(_18,_19,_1a,_1b);
}
}
};
_1d(_17["_"+_19]);
if(!_1c){
_1d(_17["*"]);
}
};
}
if(!_16&&typeof _15==="function"){
_16=_15;
_15="*";
}else{
_15="_"+_15;
}
var _1f=_17[_15];
if(typeof _1f!=="object"){
_1f=_17[_15]=[];
}
_1f.push(_16);
var _20={};
_20.unwatch=_20.remove=function(){
var _21=_3.indexOf(_1f,_16);
if(_21>-1){
_1f.splice(_21,1);
}
};
return _20;
}});
});
