/* Copyright (c) 2004-2009, 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 */ if(!dojo._hasResource["dojox.data.KeyValueStore"]){dojo._hasResource["dojox.data.KeyValueStore"]=true;dojo.provide("dojox.data.KeyValueStore");dojo.require("dojo.data.util.filter");dojo.require("dojo.data.util.simpleFetch");dojo.declare("dojox.data.KeyValueStore",null,{constructor:function(_1){if(_1.url){this.url=_1.url;}this._keyValueString=_1.data;this._keyValueVar=_1.dataVar;this._keyAttribute="key";this._valueAttribute="value";this._storeProp="_keyValueStore";this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};this._loadInProgress=false;this._queuedFetches=[];if(_1&&"urlPreventCache" in _1){this.urlPreventCache=_1.urlPreventCache?true:false;}},url:"",data:"",urlPreventCache:false,_assertIsItem:function(_2){if(!this.isItem(_2)){throw new Error("dojox.data.KeyValueStore: a function was passed an item argument that was not an item");}},_assertIsAttribute:function(_3,_4){if(!dojo.isString(_4)){throw new Error("dojox.data.KeyValueStore: a function was passed an attribute argument that was not an attribute object nor an attribute name string");}},getValue:function(_5,_6,_7){this._assertIsItem(_5);this._assertIsAttribute(_5,_6);var _8;if(_6==this._keyAttribute){_8=_5[this._keyAttribute];}else{_8=_5[this._valueAttribute];}if(_8===undefined){_8=_7;}return _8;},getValues:function(_9,_a){var _b=this.getValue(_9,_a);return (_b?[_b]:[]);},getAttributes:function(_c){return [this._keyAttribute,this._valueAttribute,_c[this._keyAttribute]];},hasAttribute:function(_d,_e){this._assertIsItem(_d);this._assertIsAttribute(_d,_e);return (_e==this._keyAttribute||_e==this._valueAttribute||_e==_d[this._keyAttribute]);},containsValue:function(_f,_10,_11){var _12=undefined;if(typeof _11==="string"){_12=dojo.data.util.filter.patternToRegExp(_11,false);}return this._containsValue(_f,_10,_11,_12);},_containsValue:function(_13,_14,_15,_16){var _17=this.getValues(_13,_14);for(var i=0;i<_17.length;++i){var _18=_17[i];if(typeof _18==="string"&&_16){return (_18.match(_16)!==null);}else{if(_15===_18){return true;}}}return false;},isItem:function(_19){if(_19&&_19[this._storeProp]===this){return true;}return false;},isItemLoaded:function(_1a){return this.isItem(_1a);},loadItem:function(_1b){},getFeatures:function(){return this._features;},close:function(_1c){},getLabel:function(_1d){return _1d[this._keyAttribute];},getLabelAttributes:function(_1e){return [this._keyAttribute];},_fetchItems:function(_1f,_20,_21){var _22=this;var _23=function(_24,_25){var _26=null;if(_24.query){_26=[];var _27=_24.queryOptions?_24.queryOptions.ignoreCase:false;var _28={};for(var key in _24.query){var _29=_24.query[key];if(typeof _29==="string"){_28[key]=dojo.data.util.filter.patternToRegExp(_29,_27);}}for(var i=0;i<_25.length;++i){var _2a=true;var _2b=_25[i];for(var key in _24.query){var _29=_24.query[key];if(!_22._containsValue(_2b,key,_29,_28[key])){_2a=false;}}if(_2a){_26.push(_2b);}}}else{if(_24.identity){_26=[];var _2c;for(var key in _25){_2c=_25[key];if(_2c[_22._keyAttribute]==_24.identity){_26.push(_2c);break;}}}else{if(_25.length>0){_26=_25.slice(0,_25.length);}}}_20(_26,_24);};if(this._loadFinished){_23(_1f,this._arrayOfAllItems);}else{if(this.url!==""){if(this._loadInProgress){this._queuedFetches.push({args:_1f,filter:_23});}else{this._loadInProgress=true;var _2d={url:_22.url,handleAs:"json-comment-filtered",preventCache:this.urlPreventCache};var _2e=dojo.xhrGet(_2d);_2e.addCallback(function(_2f){_22._processData(_2f);_23(_1f,_22._arrayOfAllItems);_22._handleQueuedFetches();});_2e.addErrback(function(_30){_22._loadInProgress=false;throw _30;});}}else{if(this._keyValueString){this._processData(eval(this._keyValueString));this._keyValueString=null;_23(_1f,this._arrayOfAllItems);}else{if(this._keyValueVar){this._processData(this._keyValueVar);this._keyValueVar=null;_23(_1f,this._arrayOfAllItems);}else{throw new Error("dojox.data.KeyValueStore: No source data was provided as either URL, String, or Javascript variable data input.");}}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i