/*
	Copyright (c) 2004-2008, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing
*/


if(!dojo._hasResource["dijit._base.manager"]){
dojo._hasResource["dijit._base.manager"]=true;
dojo.provide("dijit._base.manager");
dojo.declare("dijit.WidgetSet",null,{constructor:function(){
this._hash={};
},add:function(_1){
if(this._hash[_1.id]){
throw new Error("Tried to register widget with id=="+_1.id+" but that id is already registered");
}
this._hash[_1.id]=_1;
},remove:function(id){
delete this._hash[id];
},forEach:function(_3){
for(var id in this._hash){
_3(this._hash[id]);
}
},filter:function(_5){
var _6=new dijit.WidgetSet();
this.forEach(function(_7){
if(_5(_7)){
_6.add(_7);
}
});
return _6;
},byId:function(id){
return this._hash[id];
},byClass:function(_9){
return this.filter(function(_a){
return _a.declaredClass==_9;
});
}});
dijit.registry=new dijit.WidgetSet();
dijit._widgetTypeCtr={};
dijit.getUniqueId=function(_b){
var id;
do{
id=_b+"_"+(_b in dijit._widgetTypeCtr?++dijit._widgetTypeCtr[_b]:dijit._widgetTypeCtr[_b]=0);
}while(dijit.byId(id));
return id;
};
if(dojo.isIE){
dojo.addOnUnload(function(){
dijit.registry.forEach(function(_d){
_d.destroy();
});
});
}
dijit.byId=function(id){
return (dojo.isString(id))?dijit.registry.byId(id):id;
};
dijit.byNode=function(_f){
return dijit.registry.byId(_f.getAttribute("widgetId"));
};
dijit.getEnclosingWidget=function(_10){
while(_10){
if(_10.getAttribute&&_10.getAttribute("widgetId")){
return dijit.registry.byId(_10.getAttribute("widgetId"));
}
_10=_10.parentNode;
}
return null;
};
dijit._tabElements={area:true,button:true,input:true,object:true,select:true,textarea:true};
dijit._isElementShown=function(_11){
var _12=dojo.style(_11);
return (_12.visibility!="hidden")&&(_12.visibility!="collapsed")&&(_12.display!="none");
};
dijit.isTabNavigable=function(_13){
if(dojo.hasAttr(_13,"disabled")){
return false;
}
var _14=dojo.hasAttr(_13,"tabindex");
var _15=dojo.attr(_13,"tabindex");
if(_14&&_15>=0){
return true;
}
var _16=_13.nodeName.toLowerCase();
if(((_16=="a"&&dojo.hasAttr(_13,"href"))||dijit._tabElements[_16])&&(!_14||_15>=0)){
return true;
}
return false;
};
dijit._getTabNavigable=function(_17){
var _18,_19,_1a,_1b,_1c,_1d;
var _1e=function(_1f){
dojo.query("> *",_1f).forEach(function(_20){
var _21=dijit._isElementShown(_20);
if(_21&&dijit.isTabNavigable(_20)){
var _22=dojo.attr(_20,"tabindex");
if(!dojo.hasAttr(_20,"tabindex")||_22==0){
if(!_18){
_18=_20;
}
_19=_20;
}else{
if(_22>0){
if(!_1a||_22<_1b){
_1b=_22;
_1a=_20;
}
if(!_1c||_22>=_1d){
_1d=_22;
_1c=_20;
}
}
}
}
if(_21){
_1e(_20);
}
});
};
if(dijit._isElementShown(_17)){
_1e(_17);
}
return {first:_18,last:_19,lowest:_1a,highest:_1c};
};
dijit.getFirstInTabbingOrder=function(_23){
var _24=dijit._getTabNavigable(dojo.byId(_23));
return _24.lowest?_24.lowest:_24.first;
};
dijit.getLastInTabbingOrder=function(_25){
var _26=dijit._getTabNavigable(dojo.byId(_25));
return _26.last?_26.last:_26.highest;
};
}
