/*
	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["dojo.data.ItemFileReadStore"]){dojo._hasResource["dojo.data.ItemFileReadStore"]=true;dojo.provide("dojo.data.ItemFileReadStore");dojo.require("dojo.data.util.filter");dojo.require("dojo.data.util.simpleFetch");dojo.require("dojo.date.stamp");dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_1){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_1.url;this._ccUrl=_1.url;this.url=_1.url;this._jsonData=_1.data;this.data=null;this._datatypeMap=_1.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_2){return dojo.date.stamp.fromISOString(_2);}};}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._reverseRefMap="_RRM";this._loadInProgress=false;this._queuedFetches=[];if(_1.urlPreventCache!==undefined){this.urlPreventCache=_1.urlPreventCache?true:false;}if(_1.hierarchical!==undefined){this.hierarchical=_1.hierarchical?true:false;}if(_1.clearOnClose){this.clearOnClose=true;}if("failOk" in _1){this.failOk=_1.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(_3){if(!this.isItem(_3)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_4){if(typeof _4!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(_5,_6,_7){var _8=this.getValues(_5,_6);return (_8.length>0)?_8[0]:_7;},getValues:function(_9,_a){this._assertIsItem(_9);this._assertIsAttribute(_a);return _9[_a]||[];},getAttributes:function(_b){this._assertIsItem(_b);var _c=[];for(var _d in _b){if((_d!==this._storeRefPropName)&&(_d!==this._itemNumPropName)&&(_d!==this._rootItemPropName)&&(_d!==this._reverseRefMap)){_c.push(_d);}}return _c;},hasAttribute:function(_e,_f){this._assertIsItem(_e);this._assertIsAttribute(_f);return (_f in _e);},containsValue:function(_10,_11,_12){var _13=undefined;if(typeof _12==="string"){_13=dojo.data.util.filter.patternToRegExp(_12,false);}return this._containsValue(_10,_11,_12,_13);},_containsValue:function(_14,_15,_16,_17){return dojo.some(this.getValues(_14,_15),function(_18){if(_18!==null&&!dojo.isObject(_18)&&_17){if(_18.toString().match(_17)){return true;}}else{if(_16===_18){return true;}}});},isItem:function(_19){if(_19&&_19[this._storeRefPropName]===this){if(this._arrayOfAllItems[_19[this._itemNumPropName]]===_19){return true;}}return false;},isItemLoaded:function(_1a){return this.isItem(_1a);},loadItem:function(_1b){this._assertIsItem(_1b.item);},getFeatures:function(){return this._features;},getLabel:function(_1c){if(this._labelAttr&&this.isItem(_1c)){return this.getValue(_1c,this._labelAttr);}return undefined;},getLabelAttributes:function(_1d){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_1e,_1f,_20){var _21=this;var _22=function(_23,_24){var _25=[];var i,key;if(_23.query){var _26;var _27=_23.queryOptions?_23.queryOptions.ignoreCase:false;var _28={};for(key in _23.query){_26=_23.query[key];if(typeof _26==="string"){_28[key]=dojo.data.util.filter.patternToRegExp(_26,_27);}else{if(_26 instanceof RegExp){_28[key]=_26;}}}for(i=0;i<_24.length;++i){var _29=true;var _2a=_24[i];if(_2a===null){_29=false;}else{for(key in _23.query){_26=_23.query[key];if(!_21._containsValue(_2a,key,_26,_28[key])){_29=false;}}}if(_29){_25.push(_2a);}}_1f(_25,_23);}else{for(i=0;i<_24.length;++i){var _2b=_24[i];if(_2b!==null){_25.push(_2b);}}_1f(_25,_23);}};if(this._loadFinished){_22(_1e,this._getItemsArray(_1e.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_1e,filter:_22});}else{this._loadInProgress=true;var _2c={url:_21._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _2d=dojo.xhrGet(_2c);_2d.addCallback(function(_2e){try{_21._getItemsFromLoadedData(_2e);_21._loadFinished=true;_21._loadInProgress=false;_22(_1e,_21._getItemsArray(_1e.queryOptions));_21._handleQueuedFetches();}catch(e){_21._loadFinished=true;_21._loadInProgress=false;_20(e,_1e);}});_2d.addErrback(function(_2f){_21._loadInProgress=false;_20(_2f,_1e);});var _30=null;if(_1e.abort){_30=_1e.abort;}_1e.abort=function(){var df=_2d;if(df&&df.fired===-1){df.cancel();df=null;}if(_30){_30.call(_1e);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_22(_1e,this._getItemsArray(_1e.queryOptions));}catch(e){_20(e,_1e);}}else{_20(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1e);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _31=this._queuedFetches[i];var _32=_31.args;var _33=_31.filter;if(_33){_33(_32,this._getItemsArray(_32.queryOptions));}else{this.fetchItemByIdentity(_32);}}this._queuedFetches=[];}},_getItemsArray:function(_34){if(_34&&_34.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_35){if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){}this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._itemsByIdentity=null;this._loadInProgress=false;this._queuedFetches=[];}},_getItemsFromLoadedData:function(_36){var _37=false;var _38=this;function _39(_3a){var _3b=((_3a!==null)&&(typeof _3a==="object")&&(!dojo.isArray(_3a)||_37)&&(!dojo.isFunction(_3a))&&(_3a.constructor==Object||dojo.isArray(_3a))&&(typeof _3a._reference==="undefined")&&(typeof _3a._type==="undefined")&&(typeof _3a._value==="undefined")&&_38.hierarchical);return _3b;};function _3c(_3d){_38._arrayOfAllItems.push(_3d);for(var _3e in _3d){var _3f=_3d[_3e];if(_3f){if(dojo.isArray(_3f)){var _40=_3f;for(var k=0;k<_40.length;++k){var _41=_40[k];if(_39(_41)){_3c(_41);}}}else{if(_39(_3f)){_3c(_3f);}}}}};this._labelAttr=_36.label;var i;var _42;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_36.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){_42=this._arrayOfTopLevelItems[i];if(dojo.isArray(_42)){_37=true;}_3c(_42);_42[this._rootItemPropName]=true;}var _43={};var key;for(i=0;i<this._arrayOfAllItems.length;++i){_42=this._arrayOfAllItems[i];for(key in _42){if(key!==this._rootItemPropName){var _44=_42[key];if(_44!==null){if(!dojo.isArray(_44)){_42[key]=[_44];}}else{_42[key]=[null];}}_43[key]=key;}}while(_43[this._storeRefPropName]){this._storeRefPropName+="_";}while(_43[this._itemNumPropName]){this._itemNumPropName+="_";}while(_43[this._reverseRefMap]){this._reverseRefMap+="_";}var _45;var _46=_36.identifier;if(_46){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_46;for(i=0;i<this._arrayOfAllItems.length;++i){_42=this._arrayOfAllItems[i];_45=_42[_46];var _47=_45[0];if(!this._itemsByIdentity[_47]){this._itemsByIdentity[_47]=_42;}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: ["+_46+"].  Value collided: ["+_47+"]");}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: ["+_46+"].  Value collided: ["+_47+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){_42=this._arrayOfAllItems[i];_42[this._storeRefPropName]=this;_42[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){_42=this._arrayOfAllItems[i];for(key in _42){_45=_42[key];for(var j=0;j<_45.length;++j){_44=_45[j];if(_44!==null&&typeof _44=="object"){if(("_type" in _44)&&("_value" in _44)){var _48=_44._type;var _49=this._datatypeMap[_48];if(!_49){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_48+"'");}else{if(dojo.isFunction(_49)){_45[j]=new _49(_44._value);}else{if(dojo.isFunction(_49.deserialize)){_45[j]=_49.deserialize(_44._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(_44._reference){var _4a=_44._reference;if(!dojo.isObject(_4a)){_45[j]=this._itemsByIdentity[_4a];}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _4b=this._arrayOfAllItems[k];var _4c=true;for(var _4d in _4a){if(_4b[_4d]!=_4a[_4d]){_4c=false;}}if(_4c){_45[j]=_4b;}}}if(this.referenceIntegrity){var _4e=_45[j];if(this.isItem(_4e)){this._addReferenceToMap(_4e,_42,key);}}}else{if(this.isItem(_44)){if(this.referenceIntegrity){this._addReferenceToMap(_44,_42,key);}}}}}}}},_addReferenceToMap:function(_4f,_50,_51){},getIdentity:function(_52){var _53=this._features["dojo.data.api.Identity"];if(_53===Number){return _52[this._itemNumPropName];}else{var _54=_52[_53];if(_54){return _54[0];}}return null;},fetchItemByIdentity:function(_55){var _56;var _57;if(!this._loadFinished){var _58=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_55});}else{this._loadInProgress=true;var _59={url:_58._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _5a=dojo.xhrGet(_59);_5a.addCallback(function(_5b){var _5c=_55.scope?_55.scope:dojo.global;try{_58._getItemsFromLoadedData(_5b);_58._loadFinished=true;_58._loadInProgress=false;_56=_58._getItemByIdentity(_55.identity);if(_55.onItem){_55.onItem.call(_5c,_56);}_58._handleQueuedFetches();}catch(error){_58._loadInProgress=false;if(_55.onError){_55.onError.call(_5c,error);}}});_5a.addErrback(function(_5d){_58._loadInProgress=false;if(_55.onError){var _5e=_55.scope?_55.scope:dojo.global;_55.onError.call(_5e,_5d);}});}}else{if(this._jsonData){_58._getItemsFromLoadedData(_58._jsonData);_58._jsonData=null;_58._loadFinished=true;_56=_58._getItemByIdentity(_55.identity);if(_55.onItem){_57=_55.scope?_55.scope:dojo.global;_55.onItem.call(_57,_56);}}}}else{_56=this._getItemByIdentity(_55.identity);if(_55.onItem){_57=_55.scope?_55.scope:dojo.global;_55.onItem.call(_57,_56);}}},_getItemByIdentity:function(_5f){var _60=null;if(this._itemsByIdentity){_60=this._itemsByIdentity[_5f];}else{_60=this._arrayOfAllItems[_5f];}if(_60===undefined){_60=null;}return _60;},getIdentityAttributes:function(_61){var _62=this._features["dojo.data.api.Identity"];if(_62===Number){return null;}else{return [_62];}},_forceLoad:function(){var _63=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl.  _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){var _64={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _65=dojo.xhrGet(_64);_65.addCallback(function(_66){try{if(_63._loadInProgress!==true&&!_63._loadFinished){_63._getItemsFromLoadedData(_66);_63._loadFinished=true;}else{if(_63._loadInProgress){throw new Error("dojo.data.ItemFileReadStore:  Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){throw e;}});_65.addErrback(function(_67){throw _67;});}else{if(this._jsonData){_63._getItemsFromLoadedData(_63._jsonData);_63._jsonData=null;_63._loadFinished=true;}}}});dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);}