text: /*
  	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.json.ref"]){
  dojo._hasResource["dojox.json.ref"]=true;
  dojo.provide("dojox.json.ref");
  dojo.require("dojo.date.stamp");
  dojox.json.ref={resolveJson:function(_1,_2){
  _2=_2||{};
  var _3=_2.idAttribute||"id";
  var _4=this.refAttribute;
  var _5=_2.idAsRef;
  var _6=_2.idPrefix||"";
  var _7=_2.assignAbsoluteIds;
  var _8=_2.index||{};
  var _9=_2.timeStamps;
  var _a,_b=[];
  var _c=/^(.*\/)?(\w+:\/\/)|[^\/\.]+\/\.\.\/|^.*\/(\/)/;
  var _d=this._addProp;
  var F=function(){
  };
  function _e(it,_f,_10,_11,_12,_13){
  var i,_14,val,id=_3 in it?it[_3]:_10;
  if(_3 in it||((id!==undefined)&&_11)){
  id=(_6+id).replace(_c,"$2$3");
  }
  var _15=_13||it;
  if(id!==undefined){
  if(_7){
  it.__id=id;
  }
  if(_2.schemas&&(!(it instanceof Array))&&(val=id.match(/^(.+\/)[^\.\[]*$/))){
  _12=_2.schemas[val[1]];
  }
  if(_8[id]&&((it instanceof Array)==(_8[id] instanceof Array))){
  _15=_8[id];
  delete _15.$ref;
  delete _15._loadObject;
  _14=true;
  }else{
  var _16=_12&&_12.prototype;
  if(_16){
  F.prototype=_16;
  _15=new F();
  }
  }
  _8[id]=_15;
  if(_9){
  _9[id]=_2.time;
  }
  }
  while(_12){
  var _17=_12.properties;
  if(_17){
  for(i in it){
  var _18=_17[i];
  if(_18&&_18.format=="date-time"&&typeof it[i]=="string"){
  it[i]=dojo.date.stamp.fromISOString(it[i]);
  }
  }
  }
  _12=_12["extends"];
  }
  var _19=it.length;
  for(i in it){
  if(i==_19){
  break;
  }
  if(it.hasOwnProperty(i)){
  val=it[i];
  if((typeof val=="object")&&val&&!(val instanceof Date)&&i!="__parent"){
  _a=val[_4]||(_5&&val[_3]);
  if(!_a||!val.__parent){
  val.__parent=it;
  }
  if(_a){
  delete it[i];
  var _1a=_a.toString().replace(/(#)([^\.\[])/,"$1.$2").match(/(^([^\[]*\/)?[^#\.\[]*)#?([\.\[].*)?/);
  if((_a=(_1a[1]=="$"||_1a[1]=="this"||_1a[1]=="")?_1:_8[(_6+_1a[1]).replace(_c,"$2$3")])){
  if(_1a[3]){
  _1a[3].replace(/(\[([^\]]+)\])|(\.?([^\.\[]+))/g,function(t,a,b,c,d){
  _a=_a&&_a[b?b.replace(/[\"\'\\]/,""):d];
  });
  }
  }
  if(_a){
  val=_a;
  }else{
  if(!_f){
  var _1b;
  if(!_1b){
  _b.push(_15);
  }
  _1b=true;
  val=_e(val,false,val[_4],true,_18);
  val._loadObject=_2.loader;
  }
  }
  }else{
  if(!_f){
  val=_e(val,_b==it,id===undefined?undefined:_d(id,i),false,_18,_15!=it&&typeof _15[i]=="object"&&_15[i]);
  }
  }
  }
  it[i]=val;
  if(_15!=it&&!_15.__isDirty){
  var old=_15[i];
  _15[i]=val;
  if(_14&&val!==old&&!_15._loadObject&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&i!="$ref"&&!(val instanceof Date&&old instanceof Date&&val.getTime()==old.getTime())&&!(typeof val=="function"&&typeof old=="function"&&val.toString()==old.toString())&&_8.onUpdate){
  _8.onUpdate(_15,i,old,val);
  }
  }
  }
  }
  if(_14&&(_3 in it)){
  for(i in _15){
  if(!_15.__isDirty&&_15.hasOwnProperty(i)&&!it.hasOwnProperty(i)&&!(i.charAt(0)=="_"&&i.charAt(1)=="_")&&!(_15 instanceof Array&&isNaN(i))){
  if(_8.onUpdate&&i!="_loadObject"&&i!="_idAttr"){
  _8.onUpdate(_15,i,_15[i],undefined);
  }
  delete _15[i];
  while(_15 instanceof Array&&_15.length&&_15[_15.length-1]===undefined){
  _15.length--;
  }
  }
  }
  }else{
  if(_8.onLoad){
  _8.onLoad(_15);
  }
  }
  return _15;
  };
  if(_1&&typeof _1=="object"){
  _1=_e(_1,false,_2.defaultId,true);
  _e(_b,false);
  }
  return _1;
  },fromJson:function(str,_1c){
  function ref(_1d){
  var _1e={};
  _1e[this.refAttribute]=_1d;
  return _1e;
  };
  try{
  var _1f=eval("("+str+")");
  }
  catch(e){
  throw new SyntaxError("Invalid JSON string: "+e.message+" parsing: "+str);
  }
  if(_1f){
  return this.resolveJson(_1f,_1c);
  }
  return _1f;
  },toJson:function(it,_20,_21,_22){
  var _23=this._useRefs;
  var _24=this._addProp;
  var _25=this.refAttribute;
  _21=_21||"";
  var _26={};
  var _27={};
  function _28(it,_29,_2a){
  if(typeof it=="object"&&it){
  var _2b;
  if(it instanceof Date){
  return "\""+dojo.date.stamp.toISOString(it,{zulu:true})+"\"";
  }
  var id=it.__id;
  if(id){
  if(_29!="#"&&((_23&&!id.match(/#/))||_26[id])){
  var ref=id;
  if(id.charAt(0)!="#"){
  if(it.__clientId==id){
  ref="cid:"+id;
  }else{
  if(id.substring(0,_21.length)==_21){
  ref=id.substring(_21.length);
  }else{
  ref=id;
  }
  }
  }
  var _2c={};
  _2c[_25]=ref;
  return _28(_2c,"#");
  }
  _29=id;
  }else{
  it.__id=_29;
  _27[_29]=it;
  }
  _26[_29]=it;
  _2a=_2a||"";
  var _2d=_20?_2a+dojo.toJsonIndentStr:"";
  var _2e=_20?"\n":"";
  var sep=_20?" ":"";
  if(it instanceof Array){
  var res=dojo.map(it,function(obj,i){
  var val=_28(obj,_24(_29,i),_2d);
  if(typeof val!="string"){
  val="undefined";
  }
  return _2e+_2d+val;
  });
  return "["+res.join(","+sep)+_2e+_2a+"]";
  }
  var _2f=[];
  for(var i in it){
  if(it.hasOwnProperty(i)){
  var _30;
  if(typeof i=="number"){
  _30="\""+i+"\"";
  }else{
  if(typeof i=="string"&&(i.charAt(0)!="_"||i.charAt(1)!="_")){
  _30=dojo._escapeString(i);
  }else{
  continue;
  }
  }
  var val=_28(it[i],_24(_29,i),_2d);
  if(typeof val!="string"){
  continue;
  }
  _2f.push(_2e+_2d+_30+":"+sep+val);
  }
  }
  return "{"+_2f.join(","+sep)+_2e+_2a+"}";
  }else{
  if(typeof it=="function"&&dojox.json.ref.serializeFunctions){
  return it.toString();
  }
  }
  return dojo.toJson(it);
  };
  var _31=_28(it,"#","");
  if(!_22){
  for(var i in _27){
  delete _27[i].__id;
  }
  }
  return _31;
  },_addProp:function(id,_32){
  return id+(id.match(/#/)?id.length==1?"":".":"#")+_32;
  },refAttribute:"$ref",_useRefs:false,serializeFunctions:false};
  }
  