/*
	Copyright (c) 2004-2007, 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
*/


dojo._xdResourceLoaded({depends:[["provide","dojo.data.ItemFileReadStore"],["require","dojo.data.util.filter"],["require","dojo.data.util.simpleFetch"],["require","dojo.date.stamp"]],defineResource:function(_1){if(!_1._hasResource["dojo.data.ItemFileReadStore"]){_1._hasResource["dojo.data.ItemFileReadStore"]=true;_1.provide("dojo.data.ItemFileReadStore");_1.require("dojo.data.util.filter");_1.require("dojo.data.util.simpleFetch");_1.require("dojo.date.stamp");_1.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_2){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_2.url;this._jsonData=_2.data;this._datatypeMap=_2.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_3){return _1.date.stamp.fromISOString(_3);}};}this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};this._itemsByIdentity=null;this._storeRefPropName="_S";this._itemNumPropName="_0";this._rootItemPropName="_RI";this._loadInProgress=false;this._queuedFetches=[];},url:"",_assertIsItem:function(_4){if(!this.isItem(_4)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_5){if(typeof _5!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(_6,_7,_8){var _9=this.getValues(_6,_7);return (_9.length>0)?_9[0]:_8;},getValues:function(_a,_b){this._assertIsItem(_a);this._assertIsAttribute(_b);return _a[_b]||[];},getAttributes:function(_c){this._assertIsItem(_c);var _d=[];for(var _e in _c){if((_e!==this._storeRefPropName)&&(_e!==this._itemNumPropName)&&(_e!==this._rootItemPropName)){_d.push(_e);}}return _d;},hasAttribute:function(_f,_10){return this.getValues(_f,_10).length>0;},containsValue:function(_11,_12,_13){var _14=undefined;if(typeof _13==="string"){_14=_1.data.util.filter.patternToRegExp(_13,false);}return this._containsValue(_11,_12,_13,_14);},_containsValue:function(_15,_16,_17,_18){return _1.some(this.getValues(_15,_16),function(_19){if(_19!==null&&!_1.isObject(_19)&&_18){if(_19.toString().match(_18)){return true;}}else{if(_17===_19){return true;}}});},isItem:function(_1a){if(_1a&&_1a[this._storeRefPropName]===this){if(this._arrayOfAllItems[_1a[this._itemNumPropName]]===_1a){return true;}}return false;},isItemLoaded:function(_1b){return this.isItem(_1b);},loadItem:function(_1c){this._assertIsItem(_1c.item);},getFeatures:function(){return this._features;},getLabel:function(_1d){if(this._labelAttr&&this.isItem(_1d)){return this.getValue(_1d,this._labelAttr);}return undefined;},getLabelAttributes:function(_1e){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_1f,_20,_21){var _22=this;var _23=function(_24,_25){var _26=[];if(_24.query){var _27=_24.queryOptions?_24.queryOptions.ignoreCase:false;var _28={};for(var key in _24.query){var _2a=_24.query[key];if(typeof _2a==="string"){_28[key]=_1.data.util.filter.patternToRegExp(_2a,_27);}}for(var i=0;i<_25.length;++i){var _2c=true;var _2d=_25[i];if(_2d===null){_2c=false;}else{for(var key in _24.query){var _2a=_24.query[key];if(!_22._containsValue(_2d,key,_2a,_28[key])){_2c=false;}}}if(_2c){_26.push(_2d);}}_20(_26,_24);}else{for(var i=0;i<_25.length;++i){var _2e=_25[i];if(_2e!==null){_26.push(_2e);}}_20(_26,_24);}};if(this._loadFinished){_23(_1f,this._getItemsArray(_1f.queryOptions));}else{if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_1f,filter:_23});}else{this._loadInProgress=true;var _2f={url:_22._jsonFileUrl,handleAs:"json-comment-optional"};var _30=_1.xhrGet(_2f);_30.addCallback(function(_31){try{_22._getItemsFromLoadedData(_31);_22._loadFinished=true;_22._loadInProgress=false;_23(_1f,_22._getItemsArray(_1f.queryOptions));_22._handleQueuedFetches();}catch(e){_22._loadFinished=true;_22._loadInProgress=false;_21(e,_1f);}});_30.addErrback(function(_32){_22._loadInProgress=false;_21(_32,_1f);});}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_23(_1f,this._getItemsArray(_1f.queryOptions));}catch(e){_21(e,_1f);}}else{_21(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1f);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _34=this._queuedFetches[i];var _35=_34.args;var _36=_34.filter;if(_36){_36(_35,this._getItemsArray(_35.queryOptions));}else{this.fetchItemByIdentity(_35);}}this._queuedFetches=[];}},_getItemsArray:function(_37){if(_37&&_37.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_38){},_getItemsFromLoadedData:function(_39){function valueIsAnItem(_3a){var _3b=((_3a!=null)&&(typeof _3a=="object")&&(!_1.isArray(_3a))&&(!_1.isFunction(_3a))&&(_3a.constructor==Object)&&(typeof _3a._reference=="undefined")&&(typeof _3a._type=="undefined")&&(typeof _3a._value=="undefined"));return _3b;};var _3c=this;function addItemAndSubItemsToArrayOfAllItems(_3d){_3c._arrayOfAllItems.push(_3d);for(var _3e in _3d){var _3f=_3d[_3e];if(_3f){if(_1.isArray(_3f)){var _40=_3f;for(var k=0;k<_40.length;++k){var _42=_40[k];if(valueIsAnItem(_42)){addItemAndSubItemsToArrayOfAllItems(_42);}}}else{if(valueIsAnItem(_3f)){addItemAndSubItemsToArrayOfAllItems(_3f);}}}}};this._labelAttr=_39.label;var i;var _44;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_39.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){_44=this._arrayOfTopLevelItems[i];addItemAndSubItemsToArrayOfAllItems(_44);_44[this._rootItemPropName]=true;}var _45={};var key;for(i=0;i<this._arrayOfAllItems.length;++i){_44=this._arrayOfAllItems[i];for(key in _44){if(key!==this._rootItemPropName){var _47=_44[key];if(_47!==null){if(!_1.isArray(_47)){_44[key]=[_47];}}else{_44[key]=[null];}}_45[key]=key;}}while(_45[this._storeRefPropName]){this._storeRefPropName+="_";}while(_45[this._itemNumPropName]){this._itemNumPropName+="_";}var _48;var _49=_39.identifier;if(_49){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_49;for(i=0;i<this._arrayOfAllItems.length;++i){_44=this._arrayOfAllItems[i];_48=_44[_49];var _4a=_48[0];if(!this._itemsByIdentity[_4a]){this._itemsByIdentity[_4a]=_44;}else{if(this._jsonFileUrl){throw new Error("dojo.data.ItemFileReadStore:  The json data as specified by: ["+this._jsonFileUrl+"] is malformed.  Items within the list have identifier: ["+_49+"].  Value collided: ["+_4a+"]");}else{if(this._jsonData){throw new Error("dojo.data.ItemFileReadStore:  The json data provided by the creation arguments is malformed.  Items within the list have identifier: ["+_49+"].  Value collided: ["+_4a+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){_44=this._arrayOfAllItems[i];_44[this._storeRefPropName]=this;_44[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){_44=this._arrayOfAllItems[i];for(key in _44){_48=_44[key];for(var j=0;j<_48.length;++j){_47=_48[j];if(_47!==null&&typeof _47=="object"){if(_47._type&&_47._value){var _4c=_47._type;var _4d=this._datatypeMap[_4c];if(!_4d){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_4c+"'");}else{if(_1.isFunction(_4d)){_48[j]=new _4d(_47._value);}else{if(_1.isFunction(_4d.deserialize)){_48[j]=_4d.deserialize(_47._value);}else{throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");}}}}if(_47._reference){var _4e=_47._reference;if(_1.isString(_4e)){_48[j]=this._itemsByIdentity[_4e];}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _50=this._arrayOfAllItems[k];var _51=true;for(var _52 in _4e){if(_50[_52]!=_4e[_52]){_51=false;}}if(_51){_48[j]=_50;}}}}}}}}},getIdentity:function(_53){var _54=this._features["dojo.data.api.Identity"];if(_54===Number){return _53[this._itemNumPropName];}else{var _55=_53[_54];if(_55){return _55[0];}}return null;},fetchItemByIdentity:function(_56){if(!this._loadFinished){var _57=this;if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_56});}else{var _58={url:_57._jsonFileUrl,handleAs:"json-comment-optional"};var _59=_1.xhrGet(_58);_59.addCallback(function(_5a){var _5b=_56.scope?_56.scope:_1.global;try{_57._getItemsFromLoadedData(_5a);_57._loadFinished=true;_57._loadInProgress=false;var _5c=_57._getItemByIdentity(_56.identity);if(_56.onItem){_56.onItem.call(_5b,_5c);}_57._handleQueuedFetches();}catch(error){_57._loadInProgress=false;if(_56.onError){_56.onError.call(_5b,error);}}});_59.addErrback(function(_5d){_57._loadInProgress=false;if(_56.onError){var _5e=_56.scope?_56.scope:_1.global;_56.onError.call(_5e,_5d);}});}}else{if(this._jsonData){_57._getItemsFromLoadedData(_57._jsonData);_57._jsonData=null;_57._loadFinished=true;var _5f=_57._getItemByIdentity(_56.identity);if(_56.onItem){var _60=_56.scope?_56.scope:_1.global;_56.onItem.call(_60,_5f);}}}}else{var _5f=this._getItemByIdentity(_56.identity);if(_56.onItem){var _60=_56.scope?_56.scope:_1.global;_56.onItem.call(_60,_5f);}}},_getItemByIdentity:function(_61){var _62=null;if(this._itemsByIdentity){_62=this._itemsByIdentity[_61];}else{_62=this._arrayOfAllItems[_61];}if(_62===undefined){_62=null;}return _62;},getIdentityAttributes:function(_63){var _64=this._features["dojo.data.api.Identity"];if(_64===Number){return null;}else{return [_64];}},_forceLoad:function(){var _65=this;if(this._jsonFileUrl){var _66={url:_65._jsonFileUrl,handleAs:"json-comment-optional",sync:true};var _67=_1.xhrGet(_66);_67.addCallback(function(_68){try{if(_65._loadInProgress!==true&&!_65._loadFinished){_65._getItemsFromLoadedData(_68);_65._loadFinished=true;}}catch(e){console.log(e);throw e;}});_67.addErrback(function(_69){throw _69;});}else{if(this._jsonData){_65._getItemsFromLoadedData(_65._jsonData);_65._jsonData=null;_65._loadFinished=true;}}}});_1.extend(_1.data.ItemFileReadStore,_1.data.util.simpleFetch);}}});