if(!dojo._hasResource["dojox.collections.SortedList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojox.collections.SortedList"] = true; dojo.provide("dojox.collections.SortedList"); dojo.require("dojox.collections._base"); dojox.collections.SortedList=function(/* object? */ dictionary){ // summary // creates a collection that acts like a dictionary but is also internally sorted. // Note that the act of adding any elements forces an internal resort, making this object potentially slow. var _this=this; var items={}; var q=[]; var sorter=function(a,b){ if (a.key > b.key) return 1; if (a.key < b.key) return -1; return 0; }; var build=function(){ q=[]; var e=_this.getIterator(); while (!e.atEnd()){ q.push(e.get()); } q.sort(sorter); }; var testObject={}; this.count=q.length; this.add=function(/* string */ k,/* object */v){ // summary // add the passed value to the dictionary at location k if (!items[k]) { items[k]=new dojox.collections.DictionaryEntry(k,v); this.count=q.push(items[k]); q.sort(sorter); } }; this.clear=function(){ // summary // clear the internal collections items={}; q=[]; this.count=q.length; }; this.clone=function(){ // summary // create a clone of this sorted list return new dojox.collections.SortedList(this); // dojox.collections.SortedList }; this.contains=this.containsKey=function(/* string */ k){ // summary // Check to see if the list has a location k if(testObject[k]){ return false; // bool } return (items[k]!=null); // bool }; this.containsValue=function(/* object */ o){ // summary // Check to see if this list contains the passed object var e=this.getIterator(); while (!e.atEnd()){ var item=e.get(); if(item.value==o){ return true; // bool } } return false; // bool }; this.copyTo=function(/* array */ arr, /* int */ i){ // summary // copy the contents of the list into array arr at index i var e=this.getIterator(); var idx=i; while(!e.atEnd()){ arr.splice(idx,0,e.get()); idx++; } }; this.entry=function(/* string */ k){ // summary // return the object at location k return items[k]; // dojox.collections.DictionaryEntry }; this.forEach=function(/* function */ fn, /* object? */ scope){ // summary // functional iterator, following the mozilla spec. dojo.forEach(q, fn, scope); }; this.getByIndex=function(/* int */ i){ // summary // return the item at index i return q[i].valueOf(); // object }; this.getIterator=function(){ // summary // get an iterator for this object return new dojox.collections.DictionaryIterator(items); // dojox.collections.DictionaryIterator }; this.getKey=function(/* int */ i){ // summary // return the key of the item at index i return q[i].key; }; this.getKeyList=function(){ // summary // return an array of the keys set in this list var arr=[]; var e=this.getIterator(); while (!e.atEnd()){ arr.push(e.get().key); } return arr; // array }; this.getValueList=function(){ // summary // return an array of values in this list var arr=[]; var e=this.getIterator(); while (!e.atEnd()){ arr.push(e.get().value); } return arr; // array }; this.indexOfKey=function(/* string */ k){ // summary // return the index of the passed key. for (var i=0; i