var b64 = [];
var f64 = []

b64arrays();

function b64arrays() {
	var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	b64 = [];
	f64 =[];
	for (var i=0; i<b64s.length ;i++) {
		b64[i] = b64s.charAt(i);
		f64[b64s.charAt(i)] = i;
	}
}

function encode_base64(d) {
	var r=[];
	var i=0;
	var dl=d.length;
	
	// Padding vorbereiten
	if ((dl%3) == 1) {
		d[d.length] = 0;
		d[d.length] = 0;
	}
	if ((dl%3) == 2) {
		d[d.length] = 0;
	}
	
	// Konvertieren
	while (i<d.length) {
		r[r.length] = b64[d[i]>>2];
		r[r.length] = b64[((d[i]&3)<<4) | (d[i+1]>>4)];
		r[r.length] = b64[((d[i+1]&15)<<2) | (d[i+2]>>6)];
		r[r.length] = b64[d[i+2]&63];
		if ((i%57)==54) {
			r[r.length] = "\n";
		}
		i+=3;
	}
	
	// padding abschließen
	if ((dl%3) == 1) {
		r[r.length-1] = r[r.length-2] = "=";
	}
	if ((dl%3) == 2) {
		r[r.length-1] = "=";
	}

	// Array in text zusammenführen
	var t=r.join("");

	return t;
}


function decode_base64(t) {
	var d=[];
	var i=0;

	// zur decodierung die Umbrueche killen
	t=t.replace(/\n|\r/g,"");
	t=t.replace(/=/g,"");
	while (i<t.length) {
		d[d.length] = (f64[t.charAt(i)]<<2) | (f64[t.charAt(i+1)]>>4);
		d[d.length] = (((f64[t.charAt(i+1)]&15)<<4) | (f64[t.charAt(i+2)]>>2));
		d[d.length] = (((f64[t.charAt(i+2)]&3)<<6) | (f64[t.charAt(i+3)]));
		i+=4;
	}
	if (t.length%4 == 2) {
		d = d.slice(0, d.length-2);
	}
	if (t.length%4 == 3) {
		d = d.slice(0, d.length-1);
	}

	var erg = "";
	i = 0;
	while (i<d.length) {
		erg += String.fromCharCode(d[i++]);
	}
	return erg;
}


