var wbmisc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function wbmiscout4(v, digit)
{

	var d = wbmisc.charAt((v >> 18) & 0x3f);
	d = d + wbmisc.charAt((v >> 12) & 0x3f);
	if(digit == 1) {
		d = d + "=";
		d = d + "=";
	} else {
		d = d + wbmisc.charAt((v >> 6) & 0x3f);
		if(digit == 2) 
			d = d + "=";
		else 
			d = d + wbmisc.charAt((v >> 0) & 0x3f);
    }
	return d;
}


function wbmiscfug(s) {
	var d = "";
	var len = s.length;
	var count = 0;
	var c;
	
	var v = 0;
	var i = 0;
	while(i < len){
		c = s.charCodeAt(i++);
		v = (v << 8) | (c & 0xff)
		if(++count > 2) {
			d = d +wbmiscout4(v, 3);
			v = 0;	
			count = 0;
		}
	}
	if (count != 0) {
		v <<= 8*(3 - count);
		d = d + wbmiscout4(v, count);
	}
	return d;
}


function wbmiscguf(s)
{
	var d = "";
	var c;
	var v = 0;
	var count = 0;
	var i;
	var j = 0;
	var len = s.length;
	while (j < len) {
		c = s.charAt(j++);
		if (c == '=')
			i = 0;
		else
			i = wbmisc.indexOf(c);
		if (i < 64) {
			v = (v << 6) | i;
			if (++count > 3) {
				if(((v >> 16) & 0xff) != 0)
					d = d + String.fromCharCode((v >> 16) & 0xff);
				if(((v >>  8) & 0xff) != 0)
					d = d + String.fromCharCode((v >>  8) & 0xff);
				if(((v >>  0) & 0xff) != 0)
					d = d + String.fromCharCode((v >>  0) & 0xff);
				v = count = 0;
			}
		}
	}
	if (count != 0) {
		v = v << ((4 - count)*6);

		if(((v >> 16) & 0xff) != 0)
			d = d + String.fromCharCode((v >> 16) & 0xff);
		if(((v >>  8) & 0xff) != 0)
			d = d + String.fromCharCode((v >>  8) & 0xff);
		if(((v >>  0) & 0xff) != 0)
			d = d + String.fromCharCode((v >>  0) & 0xff);
	}
	return d;
}
