var JSEncrypt = {decode:function(source, key){var reverseKey = key.split("").reverse().join("");var encLen = source.split("%").length;var minLen = Math.min(encLen, key.length);var loop = parseInt(encLen / minLen);var target = "";var subStr, subKey;for (var i=1,j=0; i<=loop; i++,j+=minLen){subStr = this.getSubstringByToken(source, "%", j, minLen*i);subKey = (i%2 == 0) ? key.substring(0,minLen) : reverseKey.substring(0,minLen);target += this.bb(subStr, subKey);}if (loop*minLen < encLen){subStr = this.getSubstringByToken(source, "%", loop*minLen, encLen);subKey = key.substring(0, subStr.split("%").length);target += this.bb(subStr, subKey);}return target;},getSubstringByToken:function(str, token, start, end){var elements = str.split(token);var target = "";for (var i=start+1; i<=end; i++){target = target.concat(token, elements[i]);}return target;},bb:function(src, key){key = this.toCharcodes(key);var array1 = src.split("%");var array2 = key.split("%");var target = "";var n1, n2, n3, mod;for (var i=1,len=array1.length; i<len; i++){n1 = parseInt(array1[i], 16);n2 = parseInt(array2[i], 16);mod = (i-1) % 4;if (mod == 0){n3 = n1 - n2;}else if (mod == 1){n3 = n1 + n2;}else if (mod == 2){n3 = n1 ^ n2;}else{n3 = ~ n1;}target += String.fromCharCode(n3);}return target;},toCharcodes:function(str){if (str == null) return "";var target = "";for (var i=0,len=str.length; i<len; i++){target = target.concat("%", str.charCodeAt(i).toString(16));}return target;}}