/**
 * @描述：风火在线 Js工具 基础类
 * @开发人员：moshco zhu
 * @开发日期：2010-9-8 上午11:20:36
 * @参数：
 * @返回值：any
 * @return
 */
function FHUtils() {}

/**
 * @描述:删除指定名称的Cookie
 * @开发人员:moshco zhu
 * @开发时间:2011-6-19 上午12:44:32
 * @param strName
 */
FHUtils.deleteCookie = function(strName) {
	var fnGetExpDate = function(iDay, iHours, iMinutes) {
		var expDate = new Date();
		if (typeof (days) == "number" && typeof (hours) == "number" && typeof (hours) == "number") {
			expDate.setDate(expDate.getDate() + parseInt(iDay));
			expDate.setHours(expDate.getHours() + parseInt(iHours));
			expDate.setMinutes(expDate.getMinutes() + parseInt(iMinutes));
		}
		return expDate.toGMTString();
	};
	document.cookie = strName + "=0;expires=" + fnGetExpDate(-1, 0, 0);
};

/**
 * @描述:设置Cookie
 * @开发人员:moshco zhu
 * @开发时间:2011-6-19 上午12:45:09
 * @param strName
 * @param strValue
 * @param iExpiredays
 */
FHUtils.setCookie = function(strName, strValue, iExpiredays) {
	var exDate = new Date();
	exDate.setDate(exDate.getDate() + iExpiredays);
	document.cookie = strName + "=" + escape(strValue) + ((iExpiredays == null) ? "" : ";expires=" + exDate.toGMTString());
	return;
};

/**
 * @描述:读取指定名称Cookie的值
 * @开发人员:moshco zhu
 * @开发时间:2011-6-13 上午01:55:59
 * @param strName
 */
FHUtils.getCookie = function(strName) {
	if (document.cookie.length > 0) {
		var iStartIndex = document.cookie.indexOf(strName + "=");
		if (iStartIndex != -1) {
			iStartIndex = iStartIndex + strName.length + 1;
			var iEndIndex = document.cookie.indexOf(";", iStartIndex);
			if (iEndIndex == -1) {
				iEndIndex = document.cookie.length;
			}
			return unescape(document.cookie.substring(iStartIndex, iEndIndex));
		}
	}
	return "";
};

/**
 * @描述:删除Cookie中指定项的值
 * @开发人员:moshco zhu
 * @开发时间:2011-6-15 上午12:39:20
 * @param strName
 * @returns
 */
FHUtils.removeCookie = function(strName) {
	var str = document.cookie;
	str = (str == null) ? "" : str;
	var stra = str.split(";");
	str = trim(stra[0]);
	stra = str.split(",");
	var strValue = null;
	if (stra != null && stra.length > 0) {
		str = "";
		$.each(stra, function(iIndex, strOption) {
			if (iIndex > 0) {
				str += ",";
			}
			if (strOption.indexOf(strName + "=") == 0) {
				var stra1 = strOption.split("=");
				if (stra1.length >= 2) {
					strValue = escape(stra[1]);
				}
			} else {
				str += strOption;
			}
			return true;
		});
	}
	document.cookie = str;
	return strValue;
};

/**
 * @描述:闪烁动画
 * @开发人员:moshco zhu
 * @开发时间:2011-6-1 下午08:29:41
 * @param oDiv
 * @param iHideTime
 * @param iShowTime
 */
FHUtils.flash = function(oDiv, strHtml, iHideTime, iShowTime) {
	if (iHideTime == null) {
		iHideTime = 200;
	}
	if (iShowTime == null) {
		iShowTime = 300;
	}
	if (oDiv != null && oDiv.length > 0) {
		oDiv.fadeOut(iHideTime, function() {
			$(this).html(strHtml).fadeIn(iShowTime);
		});
	}
	return false;
};

/**
 * @描述:是否包含字符
 * @开发人员:moshco zhu
 * @开发时间:2011-6-4 下午03:10:50
 */
FHUtils.isWholeNum = function(str) {
	if (str == null || str == "") {
		return false;
	}
	var bIsWholeNum = true;
	for ( var i = 0; i < str.length; i++) {
		var cTmp = str.charAt(i);
		if ((cTmp < '0' || cTmp > '9')) {
			bIsContain = false;
			break;
		}
	}
	return bIsWholeNum;
};

/**
 * @描述:是否包含字符
 * @开发人员:moshco zhu
 * @开发时间:2011-6-4 下午03:10:50
 */
FHUtils.containChar = function(str) {
	if (str == null || str == "") {
		return false;
	}
	var bIsContain = false;
	for ( var i = 0; i < str.length(); i++) {
		var cTmp = str.charAt(i);
		if ((cTmp >= 'a' && cTmp <= 'z') || (cTmp >= 'A' && cTmp <= 'Z')) {
			bIsContain = true;
			break;
		}
	}
	return bIsContain;
};

/**
 * @描述：删除左边字符串
 * @开发人员：moshco zhu
 * @开发日期：2010-10-22 下午11:39:41
 * @参数：str
 * @返回值：any
 * @param str
 * @return
 */
FHUtils.ltrim = function(str) {
	return str.replace(/(^\s*)/g, "");
};

/**
 * @描述：删除右边字符串
 * @开发人员：moshco zhu
 * @开发日期：2010-10-22 下午11:39:56
 * @参数：str
 * @返回值：any
 * @param str
 * @return
 */
FHUtils.rtrim = function(str) {
	return str.replace(/(\s*$)/g, "");
};

/**
 * @描述：删除两端空格字符串
 * @开发人员：moshco zhu
 * @开发日期：2010-10-22 下午11:38:07
 * @参数：str
 * @返回值：any
 * @param str
 * @return
 */
FHUtils.trim = function(str) {
	return str.replace(/(^\s*)|(\s*$)/g, "");
};

/**
 * @描述：生成一个指定长度的随机数
 * @开发人员：moshco zhu
 * @开发日期：2010-10-22 下午01:11:07
 * @参数：iLength
 * @返回值：any
 * @param iLength
 * @return
 */
FHUtils.random = function(iLength) {
	// 最大数
	var iMaxNum = Math.pow(10, iLength);
	// 最小数
	var iMinNum = Math.pow(10, iLength - 1);
	// 生成随机数
	var iRandomNum = Math.floor(Math.random() * iMaxNum);
	iRandomNum = parseInt(iRandomNum);
	while ((iRandomNum >= iMaxNum) || (iRandomNum <= iMinNum)) {
		iRandomNum = Math.floor(Math.random() * iMaxNum);
		iRandomNum = parseInt(iRandomNum);
	}
	// 返回函数值
	return iRandomNum;
};

/**
 * @描述：生成一个指定长度的随机数
 * @开发人员：moshco zhu
 * @开发时间：2011-6-2 上午10:30:30
 */
FHUtils.randomNum = function(iLength) {
	// 最大数
	var iMaxNum = Math.pow(10, iLength);
	// 最小数
	var iMinNum = Math.pow(10, iLength - 1);
	// 生成随机数
	var iRandomNum = Math.floor(Math.random() * iMaxNum);
	iRandomNum = parseInt(iRandomNum);
	while ((iRandomNum >= iMaxNum) || (iRandomNum <= iMinNum)) {
		iRandomNum = Math.floor(Math.random() * iMaxNum);
		iRandomNum = parseInt(iRandomNum);
	}
	// 返回函数值
	return iRandomNum;
};

/**
 * @描述:复制一个数组到另外一个数组
 * @开发人员:moshco zhu
 * @开发时间:2011-6-2 上午10:18:00
 * @param oAryNew
 * @param oAryOld
 * @param fnVerify
 * @returns
 */
FHUtils.copyArray = function(oAryNew, oAryOld, fnVerify) {
	if (oAryNew == null || oAryOld == null) {
		return null;
	}
	var iLength = (oAryOld == null) ? 0 : oAryOld.length;
	for ( var i = iLength - 1; i >= 0; i--) {
		if (i < oAryOld.length) {
			var bVerifyResult = true;
			if (fnVerify != null) {
				bVerifyResult = fnVerify(oAryOld[i]);
				bVerifyResult = (bVerifyResult == null) ? true : bVerifyResult;
			}
			if (bVerifyResult) {
				oAryNew.push(oAryOld[i]);
			}
		}
	}
	return oAryNew;
};

/**
 * @描述：删除两端空格字符串
 * @开发人员：moshco zhu
 * @开发日期：2010-10-22 下午11:38:07
 * @参数：str
 * @返回值：any
 * @param str
 * @return
 */
FHUtils.trim = function(str) {
	return str.replace(/(^\s*)|(\s*$)/g, "");
};

/**
 * @描述:判断指定的字符串是否是一个Url
 * @开发人员:moshco zhu
 * @开发时间:2011-7-2 上午10:09:17
 * @param str
 */
FHUtils.isUrl = function(str) {
	// 不能为空
	if (str == null || trim(str) == "") {
		return false;
	}
	// 只能有一行代码
	if (str.indexOf('\n') >= 0 || str.indexOf('\r') >= 0) {
		return false;
	}
	// 字符串的头必须是http://或/
	if (!((str.charAt(0) == 'h' && str.length > 7 && str.substr(0, 7) == "http://") || (str.charAt(0) == '\/'))) {
		return false;
	}
	// 返回函数值
	return true;
};

/**
 * @描述:读取HTML代码
 * @开发人员:moshco zhu
 * @开发时间:2011-5-26 下午01:27:56
 * @param strUrl
 */
FHUtils.readHtml = function(strUrl) {
	// Html代码
	var strHtml = null;
	// 同步函数
	var fn = function(str) {
		// alert(str);
		strHtml = str;
	};
	// 发出请求
	doAction(strUrl, {}, fn, false);
	// 返回函数值
	return strHtml;
};

/**
 * @描述:获取文件名称(如c:\e\12\we.txt we.txt)
 * @开发人员:moshco zhu
 * @开发时间:2011-5-5 下午06:19:03
 * @param str
 */
FHUtils.getFileName = function(str) {
	if (str == null) {
		return null;
	}
	var stra = str.split(/\\|\//);
	if (stra.length > 0) {
		return stra[stra.length - 1];
	} else {
		return "";
	}
};

/**
 * @描述：验证文件名后缀
 * @开发人员：moshco zhu
 * @开发日期：2010-10-20 下午01:50:40
 * @参数：strFileName
 * @返回值：any
 * @param strFileName
 * @return
 */
FHUtils.isSuffix = function(strFileName, strSuffix) {
	var stra = strFileName.split(".");
	if (stra != null && stra.length > 0) {
		if (stra[stra.length - 1] == strSuffix) {
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
};

/**
 * @描述:验证文件名是否属于指定的后缀列表
 * @开发人员:moshco zhu
 * @开发时间:2011-5-31 上午10:15:34
 * @param strFileName
 * @param strSuffixs
 * @returns {Boolean}
 */
FHUtils.isOfSuffixs = function(strFileName, strSuffixs) {
	var straSuffix = strSuffixs.split(",");
	var stra = strFileName.split(".");
	if (stra != null && stra.length > 0) {
		var strFileSuffix = stra[stra.length - 1];
		var bResult = false;
		for ( var i = 0; i < straSuffix.length; i++) {
			if (strFileSuffix == straSuffix[i]) {
				bResult = true;
				break;
			}
		}
		return bResult;
	} else {
		return false;
	}
};

/**
 * @描述：判读一个字符串是否是日期类型
 * @开发人员：moshco zhu
 * @开发日期：2009-9-18 下午12:00:38
 * @参数：
 * @返回值：any
 */
FHUtils.isDate = function(str) {
	// 字符串不能为空
	if (strValue == null) {
		return false;
	}
	// 正则表达式
	var re = /([1-9]{4})(\\-)([1-12]{2}(\\-)([1-31]{2}))/;
	// 验证测试
	var b = re.test(str);
	// 返回函数值
	return b;
};

/**
 * @描述：处理Action请求
 * @开发人员：moshco zhu1
 * @开发日期：2010-8-26 下午02:10:58
 * @参数：strActionUrl, oData, fn, bIsAsync, strDataType
 * @返回值：any
 * @param strActionUrl
 * @param oData
 * @param fn
 * @param bIsAsync
 * @param strDataType
 * @returns
 */
FHUtils.doAction = function(strActionUrl, oData, fn, bIsAsync, strDataType) {
	// 是否异步处理
	if (bIsAsync == null) {
		bIsAsync = true;
	}
	// 数据类型
	if (strDataType == null) {
		strDataType = "text";
	}
	return doBaseAction(strActionUrl, oData, fn, bIsAsync, strDataType);
};

/**
 * @描述：处理Action请求
 * @开发人员：moshco zhu1
 * @开发日期：2010-7-8 上午09:15:54
 * @参数：strActionUrl, strData, fn, bIsAsync
 * @返回值：any
 * @param strActionUrl
 * @param strData
 * @param fn
 * @param bIsAsync
 * @return
 */
FHUtils.doBaseAction = function(strActionUrl, oData, fn, bIsAsync, strDataType) {
	try {
		// 成功以后运行的函数
		var fnSuccess = function(strValue, textStatus) {
			fn(strValue);
		};
		// 失败以后运行的函数
		var fnError = function(XMLHttpRequest, textStatus, errorThrown) {
			fn(null);
		};
		// 是否异步处理
		if (bIsAsync == null) {
			bIsAsync = true;
		}
		// 数据类型
		if (strDataType == null) {
			strDataType = "text";
		}
		// 参数对象
		var oParam = {
			type : "POST",
			url : strActionUrl,
			async : bIsAsync,
			data : oData,
			dataType : strDataType,
			timeout : 180000,
			success : fnSuccess,
			error : fnError,
			complete : function() {}
		};
		if (strDataType == "jsonp") {
			oParam = $.extend(oParam, {
				scriptCharset : "UTF-8"
			});
		}
		// 发出Ajax请求
		$.ajax(oParam);
	} catch (e) {
		fn({
			err : e
		});
	} finally {
	}
};

/**
 * @描述：处理Action请求 支持异步控制
 * @开发人员：moshco zhu
 * @开发日期：2009-9-30 下午05:03:45
 * @参数：
 * @返回值：any
 * @return
 */
FHUtils.doActionAsync = function(strActionUrl, strData, fn, isAsync) {
	try {
		// 成功以后运行的函数
		var fnSuccess = function(strValue) {
			fn(strValue);
		};
		// 失败以后运行的函数
		var fnError = function() {
			fn(null);
		};
		// 发出Ajax请求
		$.ajax({
			type : "POST",
			url : strActionUrl,
			async : (isAsync == null) ? true : isAsync,
			data : strData,
			dataType : "text",
			success : fnSuccess,
			error : fnError
		});
	} catch (e) {
		fn(null);
	} finally {
	}
};

/**
 * @描述：处理一个Action 结果XML循环处理每一行
 * @开发人员：moshco zhu
 * @开发日期：2009-9-30 下午03:57:49
 * @参数：strActionUrl-ActionURL strData-发送的数据参数 strRowName-结果XML中每一行的名称 aryAtts 行中所有需要取出值的属性名 fn每一行执行的函数
 * @返回值：any
 * @return
 */
FHUtils.doActionEachXMLRow = function(strActionUrl, strData, strRowName, aryAtts, fn) {
	// 成功以后运行的函数
	var fnSuccess = function(oDom) {
		// 读取每一行
		$(oDom).find(strRowName).each(function() {
			// 处理每一行
			// 行对象
			var oRow = $(this);
			// 读取属性的值
			var oAttValues = new Array();
			if (aryAtts != null && aryAtts.length) {
				// 每一个属性
				$.each(aryAtts, function(iIndex, strAttr) {
					oAttValues.push(oRow.attr(strAttr));
				});
			}
			// alert(oAttValues);
			// 执行行函数值
			fn(oAttValues);
		});
	};
	// 失败以后运行的函数
	var fnError = function() {
		fn(null);
	};
	try {
		// 发出Ajax请求
		$.ajax({
			type : "POST",
			url : strActionUrl,
			async : false,
			date : strData,
			dataType : "xml",
			success : fnSuccess,
			error : fnError
		});
	} catch (e) {
		fn(null);
	} finally {
	}
};

/**
 * @描述:读取FormBean字段的数组
 * @开发人员:moshco zhu
 * @开发时间:2011-6-6 上午11:48:13
 * @param strFields
 * @returns
 */
FHUtils.getFormBeanFields = function(strFields) {
	if (strFields == null || trim(strFields) == "") {
		return null;
	}
	var stra = strFields.split(":");
	var strFormBean = "";
	if (stra.length >= 2) {
		strFormBean = stra[0];
		strFields = stra[1];
	} else {
		strFields = stra[0];
	}
	stra = strFields.split(",");
	var straFieldName = new Array();
	for ( var i = 0; i < stra.length; i++) {
		var strField = (strFormBean != null && strFormBean != "") ? (strFormBean + ".") : "";
		strField += stra[i];
		straFieldName.push(strField);
	}
	return straFieldName;
};

/**
 * @描述:表单中只容许存在指定的字段
 * @开发人员:moshco zhu
 * @开发时间:2011-6-6 上午11:41:15
 * @param oFormData
 * @param strFields
 * @returns {___anonymous9064_9065}
 */
FHUtils.onlyContain = function(oFormData, strFields) {
	if (strFields == null || trim(strFields) == "") {
		return oFormData;
	}
	var straFieldName = getFormBeanFields(strFields);
	var fn = function(strField) {
		var b = false;
		for ( var i = 0; i < straFieldName.length; i++) {
			if (strField == straFieldName[i]) {
				b = true;
				break;
			}
		}
		return b;
	};
	var oFormNew = {};
	$.each(oFormData, function(strName, oFieldValue) {
		if (fn(strName)) {
			oFormNew[strName] = oFieldValue;
		}
		return true;
	});
	return oFormNew;
};

/**
 * @描述:删除表单中指定的多个字段
 * @开发人员:moshco zhu
 * @开发时间:2011-6-6 上午11:49:34
 * @param oFormData
 * @param strFields
 * @returns
 */
FHUtils.removeFields = function(oFormData, strFields) {
	if (strFields == null || trim(strFields) == "") {
		return oFormData;
	}
	var straFieldName = getFormBeanFields(strFields);
	var fn = function(strField) {
		var b = false;
		for ( var i = 0; i < straFieldName.length; i++) {
			if (strField == straFieldName[i]) {
				b = true;
				break;
			}
		}
		return b;
	};
	var oFormNew = {};
	$.each(oFormData, function(strName, oFieldValue) {
		if (!fn(strName)) {
			oFormNew[strName] = oFieldValue;
		}
		return true;
	});
	return oFormNew;
};

/**
 * @描述:删除表单中指定的字段
 * @开发人员:moshco zhu
 * @开发时间:2011-6-5 下午04:17:49
 * @param oFormData
 * @param fieldName
 */
FHUtils.removeField = function(oFormData, strFieldName) {
	var oFormNew = {};
	$.each(oFormData, function(strName, oFieldValue) {
		if (strName != strFieldName) {
			oFormNew[strName] = oFieldValue;
		}
		return true;
	});
	return oFormNew;
};

/**
 * @描述：读取表单对象的数据
 * @开发人员：moshco zhu
 * @开发时间：2011-5-23 下午07:34:12
 */
FHUtils.getFormObjectData = function(oFormDiv) {
	// 表单数据
	var oFormData = {};
	// Form Bean名称
	var strBeanName = oFormDiv.attr("form_bean");
	// 设置表单字段的值
	var setFormDataFieldValue = function(oFormData, strName, strValue) {
		// 字段名不能为空
		if (strName == null || trim(strName) == "") {
			return oFormData;
		}
		// 字段名称
		strName = (strBeanName != null && strBeanName != "") ? (strBeanName + "." + strName) : strName;
		// 读取指定字段的值
		var strOldValue = oFormData[strName];
		if (strOldValue != null) {
			// 数组值
			if (strOldValue instanceof Array) {
				// 已经是一个数组
				strOldValue.push(strValue);
			} else {
				// 还不是数组
				var oAry = new Array();
				oAry.push(strOldValue);
				oAry.push(strValue);
				strOldValue = oAry;
			}
			oFormData[strName] = strOldValue;
		} else {
			// 单项值
			oFormData[strName] = strValue;
		}
		// 返回函数值
		return oFormData;
	};
	// 读取表单内所有元素控件集合
	oFormDiv.find("input").each(function() {
		// 处理每一个组件
		// radio checkbox 必须选择才读取有效值
		var strType = $(this).attr("type");
		if (strType == "radio" || strType == "checkbox") {
			var strChecked = $(this).attr("checked");
			if (strChecked == null || strChecked == "") {
				return;
			}
		}
		// 读取name属性和 值
		var strName = $(this).attr("name");
		var strValue = $(this).val();
		// 如果是默认标题值 修复为空
		if ($(this).hasClass("default_title")) {
			var strDefaultValue = $(this).attr("def_value");
			if (strValue == strDefaultValue) {
				strValue = "";
			}
		}
		// 设置属性的值
		oFormData = setFormDataFieldValue(oFormData, strName, strValue);
	});
	oFormDiv.find("textarea").each(function() {
		// 处理每一个组件
		// 读取name属性和 值
		var strName = $(this).attr("name");
		var strValue = $(this).val();
		// 设置属性的值
		oFormData = setFormDataFieldValue(oFormData, strName, strValue);
	});
	oFormDiv.find("select").each(function() {
		// 处理每一个组件
		// 读取name属性和 值
		var strName = $(this).attr("name");
		var strValue = $(this).val();
		// 设置属性的值
		oFormData = setFormDataFieldValue(oFormData, strName, strValue);
	});
	// 返回函数值
	return oFormData;
};

/**
 * @描述：获取表单数据
 * @开发人员：moshco zhu1
 * @开发日期：2010-7-7 下午08:51:42
 * @参数：oFormDiv
 * @返回值：any
 */
FHUtils.getFormData = function() {
	// Form表单对象
	var oForm = null;
	if (arguments[0] instanceof String) {
		oForm = $("#" + arguments[0]);
	} else {
		oForm = arguments[0];
	}
	// 表单对象
	return getFormObjectData(oForm);
};

/**
 * @描述：设置默认标题
 * @开发人员：moshco zhu
 * @开发日期：2010-10-18 下午01:38:23
 * @参数：
 * @返回值：any
 * @return
 */
FHUtils.setDefaultTitle = function(oContainer) {
	var oComponents = $((oContainer == null) ? $(".default_title") : oContainer.find(".default_title"));
	oComponents.each(function() {
		var strDefaultValue = $(this).attr("def_value");
		if ($(this).val() == "") {
			$(this).val(strDefaultValue);
		}
		$(this).attr("title", strDefaultValue);
	}).click(function() {
		var strDefaultValue = $(this).attr("def_value");
		if ($(this).val() == strDefaultValue) {
			$(this).val("");
		}
	}).blur(function() {
		var strDefaultValue = $(this).attr("def_value");
		if ($(this).val() == "") {
			$(this).val(strDefaultValue);
		}
	});
};

/**
 * @描述：获取表单字段的值
 * @开发人员：moshco zhu
 * @开发日期：2010-10-19 下午01:58:32
 * @参数：oInput
 * @返回值：any
 * @param oInput
 * @return
 */
FHUtils.getInputValue = function(oInput) {
	// 读取值
	var strValue = oInput.val();
	// 如果是默认标题值 修复为空
	if (oInput.hasClass("default_title")) {
		var strDefaultValue = oInput.attr("def_value");
		if (strValue == strDefaultValue) {
			strValue = "";
		}
	}
	// 返回函数值
	return strValue;
};

/**
 * @描述：读取表单数据 XML格式
 * @开发人员：moshco zhu
 * @开发日期：2009-9-18 上午10:09:12
 * @返回值：any
 */
FHUtils.getFormXML = function(strFormId) {
	// 将所有元素连接成一个XML字符串
	var strXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
	strXML += "<form>\n";
	// 读取表单内所有元素控件集合
	$("#" + strFormId).find("input").each(function() {
		// 处理每一个组件
		// radio checkbox 必须选择才读取有效值
		var strType = $(this).attr("type");
		if (strType == "radio" || strType == "checkbox") {
			var strChecked = $(this).attr("checked");
			if (strChecked == null || strChecked == "") {
				return;
			}
		}

		// 读取name属性和 值
		var strName = $(this).attr("name");
		var strValue = $(this).val();
		strValue = encodeURI(strValue);
		strValue = strValue.replace("\&", "%26");
		// 组装字符串
		strXML += "\t<input id=\"" + strName + "\" value=\"" + strValue + "\" />\n";
	});
	$("#" + strFormId).find("textarea").each(function() {
		// 处理每一个组件
		// 读取name属性和 值
		var strName = $(this).attr("name");
		var strValue = $(this).val();
		strValue = encodeURI(strValue);
		strValue = strValue.replace("\&", "%26");
		// 组装字符串
		strXML += "\t<input id=\"" + strName + "\" value=\"" + strValue + "\" />\n";
	});
	$("#" + strFormId).find("select").each(function() {
		// 处理每一个组件
		// 读取name属性和 值
		var strName = $(this).attr("name");
		var strValue = $(this).val();
		strValue = encodeURI(strValue);
		strValue = strValue.replace("\&", "%26");
		// 组装字符串
		strXML += "\t<input id=\"" + strName + "\" value=\"" + strValue + "\" />\n";
	});
	strXML += "</form>";
	// 返回函数值
	return strXML;
};

/**
 * @描述：计算指定天数后的日期
 * @开发人员：moshco zhu
 * @开发时间：2011-8-17 下午01:06:11
 */
FHUtils.getDateAfterDays = function(dt, iAfterDay) {
	var iAfterMillisecond = iAfterDay * 24 * 60 * 60 * 1000;
	var lTime = dt.getTime() + iAfterMillisecond;
	dt1 = new Date(lTime);
	return dt1;
};

/**
 * @描述：获取在指定毫秒后的日期时间
 * @开发人员：moshco zhu
 * @开发日期：2009-10-20 下午04:48:02
 * @参数：strDt, iAfterMillisecond
 * @返回值：any
 * @param strDt
 * @param iAfterMillisecond
 * @return
 */
FHUtils.getDate = function(strDt, iAfterMillisecond) {
	// 读取时间
	var dt = this.getDate(strDt);
	// 计算
	var dt1 = null;
	if (iAfterMillisecond > 0) {
		var lTime = dt.getTime() + iAfterMillisecond;
		dt1 = new Date(lTime);
	} else {
		var lTime = dt.getTime() - Math.abs(iAfterMillisecond);
		dt1 = new Date(lTime);
	}
	// 转换为字符串
	var strDate = null;
	if (dt1 != null) {
		var iYear = dt1.getYear();
		var iMonth = dt1.getMonth() + 1;
		var iDate = dt1.getDate();
		var iHour = dt1.getHours();
		var iMinute = dt1.getMinutes();
		var iSecond = dt1.getSeconds();
		var iMillisecond = dt1.getMilliseconds();
		strDate = iYear + "-" + iMonth + "-" + iDate;
		strDate += " " + iHour + ":" + iMinute + ":" + iSecond + " " + iMillisecond;
	}
	// 返回函数值
	return strDate;
};

/**
 * @描述：获取日期时间对象
 * @开发人员：moshco zhu
 * @开发日期：2009-10-8 下午06:59:35
 * @参数：oContainer, oParam
 * @返回值：any
 */
FHUtils.getDate = function(strDt) {
	// 分隔日期和时间
	var stra = strDt.split(" ");
	// 日期 年月日
	var stra1 = stra[0].split("-");
	for ( var i = 0; i < stra1.length; i++) {
		if (stra1[i].length == 2 && stra1[i].indexOf("0") == 0) {
			stra1[i] = parseInt(stra1[i].charAt(1));
		} else {
			stra1[i] = parseInt(stra1[i]);
		}
	}
	// 时间 小时 分秒
	var stra2 = [
			0, 0, 0
	];
	if (stra.length > 1) {
		stra2 = stra[1].split(":");
		for ( var i = 0; i < stra2.length; i++) {
			if (stra2[i].length == 2 && stra2[i].indexOf("0") == 0) {
				stra2[i] = parseInt(stra2[i].charAt(1));
			} else {
				stra2[i] = parseInt(stra2[i]);
			}
		}
	}
	// 毫秒
	var iMs = 0;
	if (stra.length > 2) {
		iMs = parseInt(stra[2]);
	}
	// 创建日期对象
	var dt = new Date(stra1[0], stra1[1] - 1, stra1[2], stra2[0], stra2[1], stra2[2], iMs);
	// 返回函数值
	return dt;
};

/**
 * @描述：是否是同一天
 * @开发人员：moshco zhu
 * @开发日期：2010-1-7 下午03:57:06
 * @参数：dt1, dt2
 * @返回值：any
 * @param dt1
 * @param dt2
 * @return
 */
FHUtils.isSameDay = function(dt1, dt2) {
	// 两个日期都不能为空
	if (dt1 == null || dt2 == null) {
		return false;
	}
	// 比较年
	var iYear1 = dt1.getYear();
	var iYear2 = dt2.getYear();
	if (iYear1 != iYear2) {
		return false;
	}
	// 比较月
	var iMonth1 = dt1.getMonth();
	var iMonth2 = dt2.getMonth();
	if (iMonth1 != iMonth2) {
		return false;
	}
	// 比较日
	var iDay1 = dt1.getDate();
	var iDay2 = dt2.getDate();
	if (iDay1 != iDay2) {
		return false;
	}
	// 返回函数值
	return true;
};

/**
 * @描述：重新加载Url
 * @开发人员：moshco zhu
 * @开发日期：2009-10-15 下午01:43:11
 * @参数：
 * @返回值：any
 * @return
 */
FHUtils.reloadUrl = function(strUrl) {
	// 如果strUrl为空使用当前url
	if (strUrl == null || strUrl == "") {
		strUrl = window.location.href;
	}
	// 从新请求url
	window.location.href = strUrl;
};

/**
 * @描述：读取当前页面url的参数
 * @开发人员：moshco zhu
 * @开发日期：2009-10-17 上午11:31:38
 * @参数：strParam
 * @返回值：any
 * @param strParam
 * @return
 */
FHUtils.getParameter = function(strParam) {
	// 参数值
	var strParamValue = null;
	// 读取页面Url
	var strUrl = window.location.href;
	// 分隔
	var stra = strUrl.split("?");
	if (stra.length >= 2) {
		// 分隔各个参数
		stra = stra[1].split("&");
		// 找寻匹配的参数值
		var iLength = (stra == null) ? 0 : stra.length;
		for ( var i = 0; i < iLength; i++) {
			var stra1 = stra[i].split("=");
			if (stra1[0] == strParam) {
				// 读取值
				if (stra1.length >= 2) {
					strParamValue = stra1[1];
				}
				break;
			}
		}
	}
	// 返回函数值
	return strParamValue;
};

/**
 * @描述：获取有效的JSon串
 * @开发人员：moshco zhu
 * @开发日期：2009-11-11 下午07:28:07
 * @参数：strJSon
 * @返回值：any
 * @param strJSon
 * @return
 */
FHUtils.getValidJSon = function(strJSon) {
	// strJSon = strJSon.replace(/\r|\n/g, "");
	return strJSon;
};

/**
 * @描述：转向一个新的Url
 * @开发人员：moshco zhu
 * @开发日期：2009-10-26 下午02:47:06
 * @参数：
 * @返回值：any
 * @return
 */
FHUtils.goUrl = function(strUrl, bNewWin) {
	try {
		// 新建窗体 默认值
		if (bNewWin == null) {
			bNewWin = false;
		}
		// 确认Url
		if (strUrl == null || strUrl == "") {
			strUrl = "";
			bNewWin = true;
		}
		// 实现
		if (bNewWin != null && bNewWin) {
			// 在新窗体中打开
			window.open(strUrl);
		} else {
			// 页面跳转
			window.location.href = strUrl;
		}
	} catch (e) {
	} finally {
	}
};

/**
 * @描述：读取日期的简单表示
 * @开发人员：moshco zhu
 * @开发日期：2010-1-31 下午05:04:53
 * @参数：strDt
 * @返回值：any
 * @param strDt
 * @return
 */
FHUtils.getDateSimpleStr = function(strDt) {
	// 转换为日期对象
	var dt = this.getDate(strDt);
	// 转换为字符串
	var str = "";
	// 转换为字符串
	var iYear = dt.getYear();
	if (iYear < 1970) {
		iYear += 1900;
	}
	str += iYear + "-";
	var iMonth = dt.getMonth() + 1;
	str += ((iMonth <= 9) ? ("0" + iMonth) : iMonth) + "-";
	var iDate = dt.getDate();
	str += ((iDate <= 9) ? ("0" + iDate) : iDate) + " ";
	var iHour = dt.getHours();
	str += ((iHour <= 9) ? ("0" + iHour) : iHour) + ":";
	var iMinute = dt.getMinutes();
	str += ((iMinute <= 9) ? ("0" + iMinute) : iMinute);
	// 返回函数值
	return str;
};

/**
 * @描述：读取Radio的值
 * @开发人员：moshco zhu
 * @开发日期：2010-5-19 下午04:08:11
 * @参数：strName
 * @返回值：any
 * @param strName
 * @return
 */
FHUtils.getRadioValue = function(strFormName, strName) {
	// 找寻指定Name的Radio的值
	var strValue = null;
	$("form[name=" + strFormName + "]").find("input[type=radio]").each(function() {
		var strName1 = $(this).attr("name");
		if ((strName1 == strName) && $(this).attr("checked")) {
			strValue = $(this).val();
			return;
		}
	});
	// 返回函数值
	return strValue;
};

/**
 * @描述：读取Select当前选择的Option的Text的值
 * @开发人员：moshco zhu
 * @开发日期：2010-5-20 上午11:50:58
 * @参数：strFormName, strSelect
 * @返回值：any
 * @param strFormName
 * @param strSelectName
 * @return
 */
FHUtils.getSelectedOptionText = function(strFormName, strSelectName) {
	var strText = null;
	$("form[name=" + strFormName + "]").find("select[name=" + strSelectName + "]").each(function() {
		var oSelect = $(this);
		var strValue = oSelect.val();
		strText = oSelect.find("option[value=" + strValue + "]").attr("text");
		return false;
	});
	return strText;
};

/**
 * @描述：转换为整型值
 * @开发人员：moshco zhu
 * @开发日期：2010-3-8 下午01:57:03
 * @参数：strInt, iDefaultValue
 * @返回值：any
 * @param strInt
 * @param iDefaultValue
 * @return
 */
FHUtils.getInt = function(strInt, iDefaultValue) {
	// 使用默认值
	if (iDefaultValue == null) {
		iDefaultValue = 0;
	}
	var iInt = iDefaultValue;
	if (strInt != null && !isNaN(strInt)) {
		iInt = parseInt(strInt);
	}
	// 返回函数值
	return iInt;
};

/**
 * @描述：是否是一个有效的金额
 * @开发人员：moshco zhu
 * @开发日期：2010-6-18 下午01:39:03
 * @参数：strMoney
 * @返回值：any
 * @param strMoney
 * @return
 */
FHUtils.isMoney = function(strMoney) {
	// 不能为空
	if (strMoney == null || strMoney == "") {
		return false;
	}
	// 是否有效金额
	var bIsValidMoney = true;
	// 必须能转换为一个浮点数
	if (isNaN(parseFloat(strMoney)) || parseFloat(strMoney) < 0.01) {
		bIsValidMoney = false;
	}
	// 必须数字和.
	if (bIsValidMoney) {
		for ( var i = 0; i < strMoney.length; i++) {
			var cNum = strMoney.charCodeAt(i);
			// 48 = '0' 57 = '9' 46 = '.'
			if ((cNum < 48 || cNum > 57) && (cNum != 46)) {
				bIsValidMoney = false;
				break;
			}
		}
	}
	// 返回函数值
	return bIsValidMoney;
};

/**
 * @描述：格式化为金额字符串
 * @开发人员：moshco zhu
 * @开发日期：2010-12-13 下午04:03:46
 * @参数：strMoney, iDecimalLength
 * @返回值：any
 * @param strMoney
 * @param iDecimalLength
 * @return
 */
FHUtils.toMoneyStr = function(strMoney, iDecimalLength) {
	// 不能为空
	if (strMoney == null || strMoney == "" || iDecimalLength < 0) {
		return "";
	}
	if (!isNaN(parseFloat(strMoney))) {
		// 转换为浮点数
		var iMoney = parseFloat(strMoney) + 1;
		for ( var i = 0; i < iDecimalLength; i++) {
			iMoney = iMoney * 10;
		}
		strMoney = parseInt(iMoney) + "";
		// 整数部分
		var iIntLength = strMoney.length - iDecimalLength;
		var strInt = "";
		if (iIntLength > 0) {
			strInt = strMoney.substr(0, iIntLength);
			strInt = parseInt(strInt) - 1;
		} else {
			iIntLength = 0;
		}
		// 小数部分
		var strDecimal = "";
		if (iDecimalLength > 0) {
			strDecimal = strMoney.substr(iIntLength, iDecimalLength);
		}
		// 连接
		strMoney = strInt;
		if (strDecimal != null) {
			strMoney += "." + strDecimal;
		}
	}
	// 返回函数值
	return strMoney;
};

/**
 * @描述：格式化为金额字符串
 * @开发人员：moshco zhu
 * @开发日期：2010-6-18 下午01:58:45
 * @参数：strMoney, iDecimal
 * @返回值：any
 * @param strMoney
 * @param iDecimal
 * @return
 */
FHUtils.formatMoney = function(strMoney, iDecimalLength) {
	// 不能为空
	if (strMoney == null || strMoney == "" || iDecimalLength < 0) {
		return "";
	}
	if (!isNaN(parseFloat(strMoney))) {
		// 转换为浮点数
		var iMoney = parseFloat(strMoney) + 1;
		for ( var i = 0; i < iDecimalLength; i++) {
			iMoney = iMoney * 10;
		}
		strMoney = parseInt(iMoney) + "";
		// 整数部分
		var iIntLength = strMoney.length - iDecimalLength;
		var strInt = "";
		if (iIntLength > 0) {
			strInt = strMoney.substr(0, iIntLength);
			strInt = parseInt(strInt) - 1;
		} else {
			iIntLength = 0;
		}
		// 小数部分
		var strDecimal = "";
		if (iDecimalLength > 0) {
			strDecimal = strMoney.substr(iIntLength, iDecimalLength);
		}
		// 连接
		strMoney = strInt;
		if (strDecimal != null) {
			strMoney += "." + strDecimal;
		}
	}
	// 返回函数值
	return strMoney;
};

// 实例化基础库对象
var FHUTILS = new FHUtils();

// 实例化基础库对象
if (window.FHUTILS == null) {
	window.FHUTILS = FHUTILS;
}

// 将Web26311Utils0Base静态方法扩展到window对象
if (window.isExtendFHUtils == null || !window.isExtendFHUtils) {
	$.extend(window, FHUtils);
	$.extend(window, FHUTILS);
	window.isExtendFHUtils = true;
}
