/* eric64.js - 4/23/2001
 * base64 encoding method for JavaScript
 * coded by Eric Tribou <etribou@bridgew.edu>
 * * * * * * * * * * * * * * * * * * * * * */

var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

/* input: 	string to be encoded
   output:	string containing encoded material */
function b64encode(data)
{
	var isString = typeof data == "string" ? true : false;
	var out = "";
	var tmp,i,j,k,oc;

	for (i=0;i<data.length;)
	{
		oc = tmp = 0;
		for (j=0;j<3;j++)
		{
			tmp |= (i < data.length ? (isString ? data.charCodeAt(i++) : data[i++]) & 0x000000FF : 0x00 ) << ((2-j)*8);
			if (i >= data.length) oc++;
		}
		for (j=0;j<4;j++)
		{
			if (j > 4 - oc) { k = 64; oc--; }
			else { k = (tmp >>> ((3-j)*6)) & 0x0000003F; }
			out += b64.charAt(k);
		}
	}
	return out;
}


/* input: 	string to be decoded
   output:	string containing decoded material */
function b64decode(str)
{
	var out = "";
	var tmp,i,j,k;

	for (i=0;i<str.length;)
	{
		tmp = 0;
		for (j=0;j<4;j++)
		{
			k = -1;
			while(k < 0 && i < str.length)
				k = b64.indexOf(str.charAt(i++));
			if (k >= 0)
				tmp |= (k >= 64 ? 0x00 : k) << (3-j)*6;
		}
		for (j=0;j<3;j++)
			out += String.fromCharCode(tmp >>> ((2-j)*8) & 0x000000FF);
	}
	return out;
}