/*
* Base 64 implementation in JavaScript
* Copyright (c) 2009 Nicholas C. Zakas. All rights reserved.
* Base64-encodes a string of text.
* @param {String} text The text to encode.
* @return {String} The base64-encoded string.
*/
function base64Encode(text){if(/([^\u0000-\u00ff])/.test(text)){throw new Error("Can't base64 encode non-ASCII characters.");}var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,cur,prev,byteNum,result=[];while(i<text.length){cur=text.charCodeAt(i);byteNum=i%3;switch(byteNum){case 0:result.push(digits.charAt(cur>>2));break;case 1:result.push(digits.charAt((prev&3)<<4|(cur>>4)));break;case 2:result.push(digits.charAt((prev&15)<<2|(cur>>6)));result.push(digits.charAt(cur&63));break;}prev=cur;i++;}if(byteNum==0){result.push(digits.charAt((prev&3)<<4));result.push("==");}else{if(byteNum==1){result.push(digits.charAt((prev&15)<<2));result.push("=");}}return result.join("");}function base64Decode(text){text=text.replace(/\s/g,"");if(!(/^[a-z0-9\+\/\s]+\={0,2}$/i.test(text))||text.length%4>0){throw new Error("Not a base64-encoded string.");}var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",cur,prev,digitNum,i=0,result=[];text=text.replace(/=/g,"");while(i<text.length){cur=digits.indexOf(text.charAt(i));digitNum=i%4;switch(digitNum){case 1:result.push(String.fromCharCode(prev<<2|cur>>4));break;case 2:result.push(String.fromCharCode((prev&15)<<4|cur>>2));break;case 3:result.push(String.fromCharCode((prev&3)<<6|cur));break;}prev=cur;i++;}return result.join("");}