text: /*
  	Copyright (c) 2004-2010, 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.encoding.base64"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  dojo._hasResource["dojox.encoding.base64"] = true;
  dojo.provide("dojox.encoding.base64");
  
  (function(){
  	var p="=";
  	var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  	var dxe=dojox.encoding;
  
  	dxe.base64.encode=function(/* byte[] */ba){
  		//	summary
  		//	Encode an array of bytes as a base64-encoded string
  		var s=[], l=ba.length;
  		var rm=l%3;
  		var x=l-rm;
  		for (var i=0; i<x;){
  			var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
  			s.push(tab.charAt((t>>>18)&0x3f)); 
  			s.push(tab.charAt((t>>>12)&0x3f));
  			s.push(tab.charAt((t>>>6)&0x3f));
  			s.push(tab.charAt(t&0x3f));
  		}
  		//	deal with trailers, based on patch from Peter Wood.
  		switch(rm){
  			case 2:{
  				var t=ba[i++]<<16|ba[i++]<<8;
  				s.push(tab.charAt((t>>>18)&0x3f));
  				s.push(tab.charAt((t>>>12)&0x3f));
  				s.push(tab.charAt((t>>>6)&0x3f));
  				s.push(p);
  				break;
  			}
  			case 1:{
  				var t=ba[i++]<<16;
  				s.push(tab.charAt((t>>>18)&0x3f));
  				s.push(tab.charAt((t>>>12)&0x3f));
  				s.push(p);
  				s.push(p);
  				break;
  			}
  		}
  		return s.join("");	//	string
  	};
  
  	dxe.base64.decode=function(/* string */str){
  		//	summary
  		//	Convert a base64-encoded string to an array of bytes
  		var s=str.split(""), out=[];
  		var l=s.length;
  		while(s[--l]==p){ }	//	strip off trailing padding
  		for (var i=0; i<l;){
  			var t=tab.indexOf(s[i++])<<18;
  			if(i<=l){ t|=tab.indexOf(s[i++])<<12 };
  			if(i<=l){ t|=tab.indexOf(s[i++])<<6 };
  			if(i<=l){ t|=tab.indexOf(s[i++]) };
  			out.push((t>>>16)&0xff);
  			out.push((t>>>8)&0xff);
  			out.push(t&0xff);
  		}
  		//	strip off any null bytes
  		while(out[out.length-1]==0){ out.pop(); }
  		return out;	//	byte[]
  	};
  })();
  
  }
  