text: /*=====
  dojo.isBrowser = {
  	//	example:
  	//	|	if(dojo.isBrowser){ ... }
  };
  
  dojo.isFF = {
  	//	example:
  	//	|	if(dojo.isFF > 1){ ... }
  };
  
  dojo.isIE = {
  	// example:
  	//	|	if(dojo.isIE > 6){
  	//	|		// we are IE7
  	// 	|	}
  };
  
  dojo.isSafari = {
  	//	example:
  	//	|	if(dojo.isSafari){ ... }
  	//	example: 
  	//		Detect iPhone:
  	//	|	if(dojo.isSafari && (navigator.userAgent.indexOf("iPhone") < 0)){ 
  	//	|		// we are iPhone. iPod touch reports "iPod" above
  	//	|	}
  };
  
  dojo = {
  	// isBrowser: Boolean
  	//		True if the client is a web-browser
  	isBrowser: true,
  	//	isFF: Number
  	//		Greater than zero if client is FireFox. 0 otherwise. Corresponds to
  	//		major detected FireFox version (1.5, 2, 3, etc.)
  	isFF: 2,
  	//	isIE: Number
  	//		Greater than zero if client is MSIE(PC). 0 otherwise. Corresponds to
  	//		major detected IE version (6, 7, 8, etc.)
  	isIE: 6,
  	//	isKhtml: Number
  	//		Greater than zero if client is a KTHML-derived browser (Konqueror,
  	//		Safari, etc.). 0 otherwise. Corresponds to major detected version.
  	isKhtml: 0,
  	//	isMozilla: Number
  	//		Greater than zero if client is a Mozilla-based browser (Firefox,
  	//		SeaMonkey). 0 otherwise. Corresponds to major detected version.
  	isMozilla: 0,
  	//	isOpera: Number
  	//		Greater than zero if client is Opera. 0 otherwise. Corresponds to
  	//		major detected version.
  	isOpera: 0,
  	//	isSafari: Number
  	//		Greater than zero if client is Safari or iPhone. 0 otherwise.
  	isSafari: 0
  }
  =====*/
  
  if(typeof window != 'undefined'){
  	dojo.isBrowser = true;
  	dojo._name = "browser";
  
  
  	// attempt to figure out the path to dojo if it isn't set in the config
  	(function(){
  		var d = dojo;
  		// this is a scope protection closure. We set browser versions and grab
  		// the URL we were loaded from here.
  
  		// grab the node we were loaded from
  		if(document && document.getElementsByTagName){
  			var scripts = document.getElementsByTagName("script");
  			var rePkg = /dojo(\.xd)?\.js(\W|$)/i;
  			for(var i = 0; i < scripts.length; i++){
  				var src = scripts[i].getAttribute("src");
  				if(!src){ continue; }
  				var m = src.match(rePkg);
  				if(m){
  					// find out where we came from
  					if(!d.config.baseUrl){
  						d.config.baseUrl = src.substring(0, m.index);
  					}
  					// and find out if we need to modify our behavior
  					var cfg = scripts[i].getAttribute("djConfig");
  					if(cfg){
  						var cfgo = eval("({ "+cfg+" })");
  						for(var x in cfgo){
  							dojo.config[x] = cfgo[x];
  						}
  					}
  					break; // "first Dojo wins"
  				}
  			}
  		}
  		d.baseUrl = d.config.baseUrl;
  
  		// fill in the rendering support information in dojo.render.*
  		var n = navigator;
  		var dua = n.userAgent;
  		var dav = n.appVersion;
  		var tv = parseFloat(dav);
  
  		d.isOpera = (dua.indexOf("Opera") >= 0) ? tv : 0;
  		// safari detection derived from:
  		//		http://developer.apple.com/internet/safari/faq.html#anchor2
  		//		http://developer.apple.com/internet/safari/uamatrix.html
  		var idx = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);
  		if(idx){
  			// try to grab the explicit Safari version first. If we don't get
  			// one, look for 419.3+ as the indication that we're on something
  			// "Safari 3-ish". Lastly, default to "Safari 2" handling.
  			d.isSafari = parseFloat(dav.split("Version/")[1]) || ( ( parseFloat(dav.substr(idx+7)) >= 419.3 ) ? 3 : 2 ) || 2;
  		}
  		d.isAIR = (dua.indexOf("AdobeAIR") >= 0) ? 1 : 0;
  		d.isKhtml = (dav.indexOf("Konqueror") >= 0 || d.isSafari) ? tv : 0;
  		d.isMozilla = d.isMoz = (dua.indexOf("Gecko") >= 0 && !d.isKhtml) ? tv : 0;
  		d.isFF = d.isIE = 0;
  		if(d.isMoz){
  			d.isFF = parseFloat(dua.split("Firefox/")[1]) || 0;
  		}
  		if(document.all && !d.isOpera){
  			d.isIE = parseFloat(dav.split("MSIE ")[1]) || 0;
  		}
  
  		//Workaround to get local file loads of dojo to work on IE 7
  		//by forcing to not use native xhr.
  		if(dojo.isIE && window.location.protocol === "file:"){
  			dojo.config.ieForceActiveXXhr=true;
  		}
  
  		var cm = document.compatMode;
  		d.isQuirks = cm == "BackCompat" || cm == "QuirksMode" || d.isIE < 6;
  
  		// TODO: is the HTML LANG attribute relevant?
  		d.locale = dojo.config.locale || (d.isIE ? n.userLanguage : n.language).toLowerCase();
  
  		// These are in order of decreasing likelihood; this will change in time.
  		d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
  
  		d._xhrObj = function(){
  			// summary: 
  			//		does the work of portably generating a new XMLHTTPRequest
  			//		object.
  			var http = null;
  			var last_e = null;
  			if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){
  				try{ http = new XMLHttpRequest(); }catch(e){}
  			}
  			if(!http){
  				for(var i=0; i<3; ++i){
  					var progid = d._XMLHTTP_PROGIDS[i];
  					try{
  						http = new ActiveXObject(progid);
  					}catch(e){
  						last_e = e;
  					}
  
  					if(http){
  						d._XMLHTTP_PROGIDS = [progid];  // so faster next time
  						break;
  					}
  				}
  			}
  
  			if(!http){
  				throw new Error("XMLHTTP not available: "+last_e);
  			}
  
  			return http; // XMLHTTPRequest instance
  		}
  
  		d._isDocumentOk = function(http){
  			var stat = http.status || 0;
  			return (stat >= 200 && stat < 300) || 	// Boolean
  				stat == 304 || 						// allow any 2XX response code
  				stat == 1223 || 						// get it out of the cache
  				(!stat && (location.protocol=="file:" || location.protocol=="chrome:") ); // Internet Explorer mangled the status code
  		}
  
  		//See if base tag is in use.
  		//This is to fix http://trac.dojotoolkit.org/ticket/3973,
  		//but really, we need to find out how to get rid of the dojo._Url reference
  		//below and still have DOH work with the dojo.i18n test following some other
  		//test that uses the test frame to load a document (trac #2757).
  		//Opera still has problems, but perhaps a larger issue of base tag support
  		//with XHR requests (hasBase is true, but the request is still made to document
  		//path, not base path).
  		var owloc = window.location+"";
  		var base = document.getElementsByTagName("base");
  		var hasBase = (base && base.length > 0);
  
  		d._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
  			// summary: Read the contents of the specified uri and return those contents.
  			// uri:
  			//		A relative or absolute uri. If absolute, it still must be in
  			//		the same "domain" as we are.
  			// fail_ok:
  			//		Default false. If fail_ok and loading fails, return null
  			//		instead of throwing.
  			// returns: The response text. null is returned when there is a
  			//		failure and failure is okay (an exception otherwise)
  
  			// alert("_getText: " + uri);
  
  			// NOTE: must be declared before scope switches ie. this._xhrObj()
  			var http = this._xhrObj();
  
  			if(!hasBase && dojo._Url){
  				uri = (new dojo._Url(owloc, uri)).toString();
  			}
  			/*
  			console.debug("_getText:", uri);
  			console.debug(window.location+"");
  			alert(uri);
  			*/
  
  			if(d.config.cacheBust){
  				uri += (uri.indexOf("?") == -1 ? "?" : "&") + String(d.config.cacheBust).replace(/\W+/g,"");
  			}
  
  			http.open('GET', uri, false);
  			try{
  				http.send(null);
  				// alert(http);
  				if(!d._isDocumentOk(http)){
  					var err = Error("Unable to load "+uri+" status:"+ http.status);
  					err.status = http.status;
  					err.responseText = http.responseText;
  					throw err;
  				}
  			}catch(e){
  				if(fail_ok){ return null; } // null
  				// rethrow the exception
  				throw e;
  			}
  			return http.responseText; // String
  		}
  	})();
  
  	dojo._initFired = false;
  	//	BEGIN DOMContentLoaded, from Dean Edwards (http://dean.edwards.name/weblog/2006/06/again/)
  	dojo._loadInit = function(e){
  		dojo._initFired = true;
  		// allow multiple calls, only first one will take effect
  		// A bug in khtml calls events callbacks for document for event which isnt supported
  		// for example a created contextmenu event calls DOMContentLoaded, workaround
  		var type = (e && e.type) ? e.type.toLowerCase() : "load";
  		if(arguments.callee.initialized || (type != "domcontentloaded" && type != "load")){ return; }
  		arguments.callee.initialized = true;
  		if("_khtmlTimer" in dojo){
  			clearInterval(dojo._khtmlTimer);
  			delete dojo._khtmlTimer;
  		}
  
  		if(dojo._inFlightCount == 0){
  			dojo._modulesLoaded();
  		}
  	}
  
  	dojo._fakeLoadInit = function(){
  		dojo._loadInit({type: "load"});
  	}
  
  	if(!dojo.config.afterOnLoad){
  		//	START DOMContentLoaded
  		// Mozilla and Opera 9 expose the event we could use
  		if(document.addEventListener){
  			// NOTE: 
  			//		due to a threading issue in Firefox 2.0, we can't enable
  			//		DOMContentLoaded on that platform. For more information, see:
  			//		http://trac.dojotoolkit.org/ticket/1704
  			if(dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo.config.enableMozDomContentLoaded === true)){
  				document.addEventListener("DOMContentLoaded", dojo._loadInit, null);
  			}
  	
  			//	mainly for Opera 8.5, won't be fired if DOMContentLoaded fired already.
  			//  also used for Mozilla because of trac #1640
  			window.addEventListener("load", dojo._loadInit, null);
  		}
  	
  		if(dojo.isAIR){
  			window.addEventListener("load", dojo._loadInit, null);
  		}else if(/(WebKit|khtml)/i.test(navigator.userAgent)){ // sniff
  			dojo._khtmlTimer = setInterval(function(){
  				if(/loaded|complete/.test(document.readyState)){
  					dojo._loadInit(); // call the onload handler
  				}
  			}, 10);
  		}
  		//	END DOMContentLoaded
  	}
  
  	(function(){
  		var _w = window;
  		var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){
  			// summary:
  			//		non-destructively adds the specified function to the node's
  			//		evtName handler.
  			// evtName: should be in the form "onclick" for "onclick" handlers.
  			// Make sure you pass in the "on" part.
  			var oldHandler = _w[evtName] || function(){};
  			_w[evtName] = function(){
  				fp.apply(_w, arguments);
  				oldHandler.apply(_w, arguments);
  			};
  		};
  
  		if(dojo.isIE){
  			// 	for Internet Explorer. readyState will not be achieved on init
  			// 	call, but dojo doesn't need it however, we'll include it
  			// 	because we don't know if there are other functions added that
  			// 	might.  Note that this has changed because the build process
  			// 	strips all comments -- including conditional ones.
  			if(!dojo.config.afterOnLoad){
  				document.write('<scr'+'ipt defer src="//:" '
  					+ 'onreadystatechange="if(this.readyState==\'complete\'){' + dojo._scopeName + '._loadInit();}">'
  					+ '</scr'+'ipt>'
  				);
  			}
  
  			// IE WebControl hosted in an application can fire "beforeunload" and "unload"
  			// events when control visibility changes, causing Dojo to unload too soon. The
  			// following code fixes the problem
  			// Reference: http://support.microsoft.com/default.aspx?scid=kb;en-us;199155
  			var _unloading = true;
  			_handleNodeEvent("onbeforeunload", function(){
  				_w.setTimeout(function(){ _unloading = false; }, 0);
  			});
  			_handleNodeEvent("onunload", function(){
  				if(_unloading){ dojo.unloaded(); }
  			});
  
  			try{
  				document.namespaces.add("v","urn:schemas-microsoft-com:vml");
  				document.createStyleSheet().addRule("v\\:*", "behavior:url(#default#VML)");
  			}catch(e){}
  		}else{
  			// FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper.
  			_handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); });
  		}
  
  	})();
  
  	/*
  	OpenAjax.subscribe("OpenAjax", "onload", function(){
  		if(dojo._inFlightCount == 0){
  			dojo._modulesLoaded();
  		}
  	});
  
  	OpenAjax.subscribe("OpenAjax", "onunload", function(){
  		dojo.unloaded();
  	});
  	*/
  } //if (typeof window != 'undefined')
  
  //Register any module paths set up in djConfig. Need to do this
  //in the hostenvs since hostenv_browser can read djConfig from a
  //script tag's attribute.
  (function(){
  	var mp = dojo.config["modulePaths"];
  	if(mp){
  		for(var param in mp){
  			dojo.registerModulePath(param, mp[param]);
  		}
  	}
  })();
  
  //Load debug code if necessary.
  if(dojo.config.isDebug){
  	dojo.require("dojo._firebug.firebug");
  }
  
  if(dojo.config.debugAtAllCosts){
  	dojo.config.useXDomain = true;
  	dojo.require("dojo._base._loader.loader_xd");
  	dojo.require("dojo._base._loader.loader_debug");
  	dojo.require("dojo.i18n");
  }
  