/*
	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/query",["./_base/kernel","./has","./dom","./on","./_base/array","./_base/lang","./selector/_loader","./selector/_loader!default"],function(_1,_2,_3,on,_4,_5,_6,_7){
"use strict";
_2.add("array-extensible",function(){
return _5.delegate([],{length:1}).length==1&&!_2("bug-for-in-skips-shadowed");
});
var ap=Array.prototype,_8=ap.slice,_9=ap.concat,_a=_4.forEach;
var _b=function(a,_c,_d){
var _e=new (_d||this._NodeListCtor||nl)(a);
return _c?_e._stash(_c):_e;
};
var _f=function(f,a,o){
a=[0].concat(_8.call(a,0));
o=o||_1.global;
return function(_10){
a[0]=_10;
return f.apply(o,a);
};
};
var _11=function(f,o){
return function(){
this.forEach(_f(f,arguments,o));
return this;
};
};
var _12=function(f,o){
return function(){
return this.map(_f(f,arguments,o));
};
};
var _13=function(f,o){
return function(){
return this.filter(_f(f,arguments,o));
};
};
var _14=function(f,g,o){
return function(){
var a=arguments,_15=_f(f,a,o);
if(g.call(o||_1.global,a)){
return this.map(_15);
}
this.forEach(_15);
return this;
};
};
var _16=function(_17){
var _18=this instanceof nl&&_2("array-extensible");
if(typeof _17=="number"){
_17=Array(_17);
}
var _19=(_17&&"length" in _17)?_17:arguments;
if(_18||!_19.sort){
var _1a=_18?this:[],l=_1a.length=_19.length;
for(var i=0;i<l;i++){
_1a[i]=_19[i];
}
if(_18){
return _1a;
}
_19=_1a;
}
_5._mixin(_19,nlp);
_19._NodeListCtor=function(_1b){
return nl(_1b);
};
return _19;
};
var nl=_16,nlp=nl.prototype=_2("array-extensible")?[]:{};
nl._wrap=nlp._wrap=_b;
nl._adaptAsMap=_12;
nl._adaptAsForEach=_11;
nl._adaptAsFilter=_13;
nl._adaptWithCondition=_14;
_a(["slice","splice"],function(_1c){
var f=ap[_1c];
nlp[_1c]=function(){
return this._wrap(f.apply(this,arguments),_1c=="slice"?this:null);
};
});
_a(["indexOf","lastIndexOf","every","some"],function(_1d){
var f=_4[_1d];
nlp[_1d]=function(){
return f.apply(_1,[this].concat(_8.call(arguments,0)));
};
});
_5.extend(_16,{constructor:nl,_NodeListCtor:nl,toString:function(){
return this.join(",");
},_stash:function(_1e){
this._parent=_1e;
return this;
},on:function(_1f,_20){
var _21=this.map(function(_22){
return on(_22,_1f,_20);
});
_21.remove=function(){
for(var i=0;i<_21.length;i++){
_21[i].remove();
}
};
return _21;
},end:function(){
if(this._parent){
return this._parent;
}else{
return new this._NodeListCtor(0);
}
},concat:function(_23){
var t=_8.call(this,0),m=_4.map(arguments,function(a){
return _8.call(a,0);
});
return this._wrap(_9.apply(t,m),this);
},map:function(_24,obj){
return this._wrap(_4.map(this,_24,obj),this);
},forEach:function(_25,_26){
_a(this,_25,_26);
return this;
},filter:function(_27){
var a=arguments,_28=this,_29=0;
if(typeof _27=="string"){
_28=_2a._filterResult(this,a[0]);
if(a.length==1){
return _28._stash(this);
}
_29=1;
}
return this._wrap(_4.filter(_28,a[_29],a[_29+1]),this);
},instantiate:function(_2b,_2c){
var c=_5.isFunction(_2b)?_2b:_5.getObject(_2b);
_2c=_2c||{};
return this.forEach(function(_2d){
new c(_2c,_2d);
});
},at:function(){
var t=new this._NodeListCtor(0);
_a(arguments,function(i){
if(i<0){
i=this.length+i;
}
if(this[i]){
t.push(this[i]);
}
},this);
return t._stash(this);
}});
function _2e(_2f,_30){
var _31=function(_32,_33){
if(typeof _33=="string"){
_33=_3.byId(_33);
if(!_33){
return new _30([]);
}
}
var _34=typeof _32=="string"?_2f(_32,_33):_32?_32.orphan?_32:[_32]:[];
if(_34.orphan){
return _34;
}
return new _30(_34);
};
_31.matches=_2f.match||function(_35,_36,_37){
return _31.filter([_35],_36,_37).length>0;
};
_31.filter=_2f.filter||function(_38,_39,_3a){
return _31(_39,_3a).filter(function(_3b){
return _4.indexOf(_38,_3b)>-1;
});
};
if(typeof _2f!="function"){
var _3c=_2f.search;
_2f=function(_3d,_3e){
return _3c(_3e||document,_3d);
};
}
return _31;
};
var _2a=_2e(_7,_16);
_1.query=_2e(_7,function(_3f){
return _16(_3f);
});
_2a.load=function(id,_40,_41){
_6.load(id,_40,function(_42){
_41(_2e(_42,_16));
});
};
_1._filterQueryResult=_2a._filterResult=function(_43,_44,_45){
return new _16(_2a.filter(_43,_44,_45));
};
_1.NodeList=_2a.NodeList=_16;
return _2a;
});
