var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=:";


function decode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or = or :
   input = input.replace(/[^A-Za-z0-9\+\/\=:]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

   return output;
}

function utf8_html_entities_to_ascii(utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

	var tokens = utftext.match(/&#[0-9]+;/g);

	if ( ! tokens )
		return;

	while (  i < tokens.length ) {
                c = tokens[i].replace(/^&#|;$/g,''); //utftext.charCodeAt(tokens[i]);
                string += String.fromCharCode(c);
                i++;
        }

        return string;
}

function readAdminInfo( cval ) {
	var parts = new Array(3);

	if ( typeof cval != 'undefined' && cval != null && cval.toString().length ) {
		var utfdecoded = utf8_html_entities_to_ascii( unescape(cval) );	
		var plaintext = decode64( utfdecoded ).toString();
		parts = plaintext.split(/::::/);
	}

	return {	'username':parts[0], 'admin_level':parts[1], 'sess_id':parts[2]	};
}
