From 55974d21a824378b287e563bce4c32597060cfca Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sun, 17 Jan 2010 12:06:15 -0500 Subject: Initial import --- docroot/classes/decoder.module.js | 205 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100755 docroot/classes/decoder.module.js (limited to 'docroot/classes/decoder.module.js') diff --git a/docroot/classes/decoder.module.js b/docroot/classes/decoder.module.js new file mode 100755 index 0000000..ae33059 --- /dev/null +++ b/docroot/classes/decoder.module.js @@ -0,0 +1,205 @@ +/* + * Material Experience - Encoder/Decoder Module + * + * EYEMG - Interactive Media Group + * Updated by Mike Crute (mcrute@eyemg.com) on 9/26/07 + * + * Encoder/Decoder module for common encoding schemes like URL and + * base64. Code from: http://ostermiller.org/calc/encode.html + */ +var END_OF_INPUT = -1; + +var base64Chars = new Array( + 'A','B','C','D','E','F','G','H', + 'I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X', + 'Y','Z','a','b','c','d','e','f', + 'g','h','i','j','k','l','m','n', + 'o','p','q','r','s','t','u','v', + 'w','x','y','z','0','1','2','3', + '4','5','6','7','8','9','+','/' +); + +var reverseBase64Chars = new Array(); +var base64Str; +var base64Count; + +for (var i=0; i < base64Chars.length; i++) +{ + reverseBase64Chars[base64Chars[i]] = i; +} + +// -------------------------------------------------------------------------- \\ + +function urlDecode(str) +{ + return unescape(str.replace(new RegExp('\\+','g'),' ')); +} + +function urlEncode(str) +{ + str = escape(str); + str = str.replace(new RegExp('\\+','g'),'%2B'); + + return str.replace(new RegExp('%20','g'),'+'); +} + +// -------------------------------------------------------------------------- \\ + +function setBase64Str(str) +{ + base64Str = str; + base64Count = 0; +} + +function readBase64() +{ + if (!base64Str) + { + return END_OF_INPUT; + } + + if (base64Count >= base64Str.length) + { + return END_OF_INPUT; + } + + var c = base64Str.charCodeAt(base64Count) & 0xff; + + base64Count++; + + return c; +} + +function encodeBase64(str) +{ + setBase64Str(str); + + var result = ''; + var inBuffer = new Array(3); + var lineCount = 0; + var done = false; + + while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT) + { + inBuffer[1] = readBase64(); + inBuffer[2] = readBase64(); + result += (base64Chars[ inBuffer[0] >> 2 ]); + + if (inBuffer[1] != END_OF_INPUT) + { + result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]); + + if (inBuffer[2] != END_OF_INPUT) + { + result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]); + result += (base64Chars [inBuffer[2] & 0x3F]); + } + else + { + result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]); + result += ('='); + done = true; + } + } + else + { + result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]); + result += ('='); + result += ('='); + done = true; + } + + lineCount += 4; + + if (lineCount >= 76) + { + result += ('\n'); + lineCount = 0; + } + } + + return result; +} + +function readReverseBase64() +{ + if (!base64Str) + { + return END_OF_INPUT; + } + + while (true) + { + if (base64Count >= base64Str.length) + { + return END_OF_INPUT; + } + + var nextCharacter = base64Str.charAt(base64Count); + base64Count++; + + if (reverseBase64Chars[nextCharacter]) + { + return reverseBase64Chars[nextCharacter]; + } + + if (nextCharacter == 'A') + { + return 0; + } + } + + return END_OF_INPUT; +} + +function ntos(n) +{ + n = n.toString(16); + + if (n.length == 1) + { + n = "0" + n; + } + + n = "%" + n; + + return unescape(n); +} + +function decodeBase64(str) +{ + setBase64Str(str); + + var result = ""; + var inBuffer = new Array(4); + var done = false; + + while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT + && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT) + { + inBuffer[2] = readReverseBase64(); + inBuffer[3] = readReverseBase64(); + result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4)); + + if (inBuffer[2] != END_OF_INPUT) + { + result += ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2)); + + if (inBuffer[3] != END_OF_INPUT) + { + result += ntos((((inBuffer[2] << 6) & 0xff) | inBuffer[3])); + } + else + { + done = true; + } + } + else + { + done = true; + } + } + + return result; +} \ No newline at end of file -- cgit v1.2.3