<!--
/**
 * URLCoder.js
 * @fileoverview 字符串url编码/解码功能实现（包括UTF-8/GB2312两种编码格式）
 * @author Lynk Li
 */

/**
 * @class URLCoder
 * 字符串url编码/解码功能实现（包括UTF-8/GB2312两种编码格式）
 * @constructor
 * @author Lynk Li
 */
function URLCoder() {
	this.encodeGB2312 = URLCoder_encodeGB2312;
	this.decodeGB2312 = URLCoder_decodeGB2312;
	this.encode = URLCoder_encode;
	this.decode = URLCoder_decode;
}

/**
 * 对字符串str按照GB2312字符集进行URLEncode
 * @param String str 编码前的字符串
 * @return 编码后的字符串
 */
function URLCoder_encodeGB2312(str) {
	var ret = "";
	var strSpecial = "!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
	for (var i = 0; i < str.length; i++) {
		var chr = str.charAt(i);
		var c = str2asc(chr);
		if (parseInt("0x"+c) > 0x7f) {
			ret += "%" + c.slice(0, 2) + "%" + c.slice(-2);
		} else {
			if (chr == " ") {
				ret += "+";
			} else if (strSpecial.indexOf(chr) != -1) {
				ret += "%" + c.toString(16);
			} else {
				ret += chr;
			}
		}
	}
	return ret;
}

/**
 * 对字符串str按照GB2312字符集进行URLDecode
 * @param String str 解码前的字符串
 * @return 解码后的字符串
 */
function URLCoder_decodeGB2312(str) {
	var ret = "";
	for(var i = 0; i < str.length; i++){
		var chr = str.charAt(i);
		if (chr == "+") {
			ret += " ";
		} else if (chr == "%") {
			var asc = str.substring(i + 1, i + 3);
			if (parseInt("0x" + asc) > 0x7f) {
				ret += asc2str(parseInt("0x" + asc + str.substring(i + 4, i + 6)));
				i += 5;
			} else {
			ret += asc2str(parseInt("0x" + asc));
				i += 2;
			}
		} else {
			ret += chr;
		}
	}
	return ret;
}

/**
 * 对字符串进行URLEncode
 * @param String str 编码前的字符串
 * @param String enc 字符串的编码格式"UTF-8" OR "GB2312"
 * @return 编码后的字符串
 */
function URLCoder_encode(str, enc) {
	try {
		if (enc == "UTF-8") {
			return encodeURIComponent(str);
		} else if (enc == "GB2312") {
			return this.encodeGB2312(str);
		}
	} catch (exc) {
		return "";		
	}
}


/**
 * 对字符串进行URLDecode
 * @param String str 解码前的字符串
 * @param String enc 字符串的解码格式"UTF-8" OR "GB2312"
 * @return 解码后的字符串
 */
function URLCoder_decode(str, enc) {
	try {
		if (enc == "UTF-8") {
			return decodeURIComponent(str);
		} else if (enc == "GB2312") {
			return this.decodeGB2312(str);
		}
	} catch (exc) {
		return str;		
	}
}

var _urlCoder = new URLCoder();
//-->