/*
    descript:
        �o����D�n�O��m�@���`�Ϊ��\��A�p�Ʀr���ˬd�B�r��e��ťժ��h�������K
    update date:
        2006-05-19
    author:
        Camus Chou (�P���)
*/

//===================================================================================================================//
    /*
        description:
            �h���r��e��ťաC
            �ϥμW�[�� Javascript String ��k���覡�A���� Javascript String �ۨ��֦��h���e��ťժ��\��C
        brower version:
            IE�BNetscape
        example:
            var testString = "   this is a sample.  ";
            alert("'" + testString + "'");
            alert("'" + testString.trim() + "'");
            alert("'" + testString.ltrim() + "'");
            alert("'" + testString.rtrim() + "'");
            
    */

    String.prototype.trim=trim;  //�Ǧ^�h���e��ťժ���
    String.prototype.ltrim=ltrim;  //�Ǧ^�h������ťժ���
    String.prototype.rtrim=rtrim;  //�Ǧ^�h���k��ťժ���
    
    function trim() {
      return this.replace(/^\s+|\s+$/g, "");
    } 
    function ltrim() {
      return this.replace(/(^\s*)/g, "");
    }
    function rtrim() {
      return this.replace(/(\s*$)/g, "");
    }

//===================================================================================================================//
		/*
        description:
            �i�P���x�s label �P value ��ӭȪ�����C
        brower version:
            IE�BNetscape
        example:
            var testString = "   this is a sample.  ";
            alert("'" + testString + "'");
            alert("'" + testString.trim() + "'");
            alert("'" + testString.ltrim() + "'");
            alert("'" + testString.rtrim() + "'");
            
    */
		function LabelValueObj(label, value) {
			this.label    = label;
			this.value    = value;
			this.getLabel = LabelValueObj_getLabel;
			this.getValue = LabelValueObj_getValue;
		}
		function LabelValueObj_getLabel() {
			return this.label;
		}
		function LabelValueObj_getValue() {
			return this.value;
		}

//===================================================================================================================//


//===================================================================================================================//
	/*
	 * descript:
	 *     用來將原本用Get連結的方式改成用Post
	 * parameter:
	 * 	   url: Get方式的字串，如：url?key1=value1&key2=value2......
	 */	
	function sendPost(url) {
		var tmp = url.indexOf("?");
        if (tmp >= 0) {
            // ** 1. 將參數取出來 ** //
            var linkUrl = url.substring(0, tmp);   // 要連結的 url
            var params  = url.substring(tmp + 1);  // 要傳遞的參數串
            
            // ** 2. 將參數串切割出來 ** //
            /*
             * 概念說明：
             *   1. 以「=」符號來切割字串，得到一個陣列。
             *   2. 從陣列中的第1個元素(元素從0開始計算)開始，再以"&"開始切割，
             *      此時是從字串的後面開始往前找，找到的第一個&的即是分割的token。
             *   3. 將&前的字串為前一個元素的value，&後的字串則為下一個key。
             * 
             * p.s.
             *    因為考量到傳遞的參數值中可能會帶有「=」與「&」的字元，所以
             *    此處並不使用「&」字元來切割字串。
             */
            // 以「=」符號來切割字串，得到一個陣列。
            var keys   = new Array();    // 用來存放參數的key
            var values = new Array();    // 用來存被參數的value
            var result = params.split("="); // 將參數串以"="符號切割
            var index = 0;               // 參數個數的計數器，由0開始
            var addEqualFlag = false;    // 當此值為true時，則value前要加上"="符號，
                                         // 此值是用來避免 key=value1=value2 的情況，
                                         // 如沒加此參數判斷，會切成key = value1
                                         // 加上此參數後，會正確切成 key = value1=value2
            
            keys[index]   = result[0];
            values[index] = "";
            index ++;
            for (var i=1; i<result.length; i++)
            {
                tmp = result[i].lastIndexOf("&");
                if (tmp >= 0 && i < result.length - 1)
                {
                    if (addEqualFlag)
                      values[index-1] += "=" + result[i].substring(0,tmp);
                    else
                      values[index-1] = result[i].substring(0,tmp);
                    
                    
                    keys[index]   = result[i].substring(tmp + 1);
                    values[index] = "";
                    index ++;
                    addEqualFlag = false;
                }
                else
                {
                    if (addEqualFlag)
                      values[index-1] += "=" + result[i];
                    else
                      values[index-1] = result[i];
                    addEqualFlag = true;
                    
                }
            }
            // ** 3. 組成一個form ** //
            var formObj = document.createElement("FORM");
            formObj.name = "sendPostForm";
            formObj.method = "POST";
            formObj.action = linkUrl;
            
            var inputObj = null;
            for (var i=0; i<keys.length; i++) {
            	
                if (keys[i].length > 0) { // 如果key的值是零長度字串，就不傳
                	inputObj = document.createElement("INPUT");
	            	inputObj.type = "hidden";    
	            	inputObj.name = keys[i];
	            	inputObj.value = values[i];
	            	
	            	formObj.appendChild(inputObj);
                }
                  
            }
            
            document.body.appendChild(formObj);
            
            // ** 4. 送出 **//
            formObj.submit();
            
            
        } else {
            location.href = url;
        }
	}
//===================================================================================================================//
	if (!document.all) {
		Node.prototype.swapNode = swapNode;
	}
	function swapNode(targetNode) {
		var targetNextNode   = targetNode.nextSibling;
		var targetParentNode = targetNode.parentNode;
		this.parentNode.replaceChild(targetNode, this);
		targetParentNode.insertBefore(this,targetNextNode);
	}
//==================================================================================================================//
	/*
	 * descript:
	 *      檢查是否為數字
	 * parameter:
	 * 	    value:要被檢查的字串
	 * return:
	 * 		true : 數字
	 * 		false: 非數字
	 * 
	 * since: 1.1
	 */	
	function isNumeric(value) {
		if (typeof(value) == 'number') {
			return true;
		} else {
			var data = value.match(/^-?\d+(\.?\d+)?/g);
			return (data == value);
		}
	}
	/*
	 * descript:
	 *      檢查是否為整數數字
	 * parameter:
	 * 	    value:要被檢查的字串
	 * return:
	 * 		true : 整數數字
	 * 		false: 非整數數字
	 * 
	 * since: 1.1
	 */	
	function isInteger(value) {
		if (typeof(value) == 'number') {
			if (("" + value).indexOf(".") < 0) {
				return true;
			} else {
				return false;
			}
		} else {
			var data = value.match(/^-?\d+/g);
			return (data == value);
		}
	}
	/*
	 * descript:
	 *      檢查是否為正整數數字
	 * parameter:
	 * 	    value:要被檢查的字串
	 * return:
	 * 		true : 正整數數字
	 * 		false: 非正整數數字
	 * 
	 * since: 1.1
	 */	
	function isPositiveInteger(value) {
		if (typeof(value) == 'number') {
			if (value > 0 && ("" + value).indexOf(".") < 0) {
				return true;
			} else {
				return false;
			}
		} else {
			var data = value.match(/\d+/g);
			return (data == value);
		}
	}
	/*
	 * descript:
	 *      檢查是否為正浮點數數字
	 * parameter:
	 * 	    value:要被檢查的字串
	 * return:
	 * 		true : 正浮點數數字
	 * 		false: 非正浮點數數字
	 * 
	 * since: 1.1
	 */	
	function isPositiveFloat(value) {
		if (typeof(value) == 'number') {
			if (value > 0) {
				return true;
			} else {
				return false;
			}
		} else {
			var data = value.match(/\d+(\.?\d+)?/g);
			return (data == value);
		}
	}
	/*
	 * descript:
	 *      检查是否都是数字
	 * parameter:
	 * 	    string: 字串
	 * return:
	 * 		true 为数字格式 false 不合法的格式
	 * 
	 * since: 1.1
	 */			
	function isNumber(obj)    
	{           
	    var s = obj.value;    
	    if (/^[0-9]+$/.test( s ) )    
	    {    
	       return true;    
	    }     
	    else     
	    {    
	        return false;    
	    }    
	}
//==================================================================================================================//
	/*
	 * descript:
	 *      檢查是否為有效的西元日期
	 * parameter:
	 * 	    year : 西元年
	 * 	    month: 月
	 *      day  : 日
	 * return:
	 * 		true : 有效的西元日期
	 *		false: 無效的西元日期
	 * 
	 * since: 1.1
	 */	
	function isWestDate(year, month, day) {
		if (year == null)
			return false;

		month = month == null ? 1 : month;
		day   = day   == null ? 1 :day;

		if (isInteger(year) && isPositiveInteger(month) && isPositiveInteger(day)) {
			// 檢查年份是否合理
			if (year <= 0) {
				return false;
			}
			
			// 檢查月份是否合理
			if (month > 12 || month < 1) {
				return false;
			}
			
			// 檢查日期是否合理
			if (day < 1) {
				return false;
			}
			if (month == 1 || month == 3 || month == 5 || month == 7 || 
			    month == 8 || month == 10 || month == 12) {
				if (day > 31) {
					return false;
				}
			} else if (month != 2) {
				if (day > 30) {
					return false;
				}
			} else {
				var febDay = 28;
				// 判斷是否為閏年
				if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
					febDay = 29;
				}
				
				if (day > febDay) {
					return false;
				}
			}
			
			return true;
		} else {
			return false;
		}
	}
	
	/*
	 * descript:
	 *     檢查是否為民國日期
	 * parameter:
	 * 	   year : 民國年
	 * 	   month: 月
	 *     day  : 日
	 * return:
	 * 		true : 有效的民國日期
	 *		false: 無效的民國日期
	 * 
	 * since: 1.1
	 */	
	function isRocDate (year, month, day) {
		if (year != null && isInteger(year)) {
			year = parseInt(year) + 1911;
			return isWestDate(year, month, day);
		} else {
			return false;
		}
	}
//==================================================================================================================//	
	/*
	 * descript:
	 *      比對 date1 與 date2 那個西元日期比較大
	 * parameter:
	 * 	    date1: Array 物件，代表西元日期，陣列中依序放置 西元年、月、日
	 * 	    date2: Array 物件，代表西元日期，陣列中依序放置 西元年、月、日
	 * return:
	 * 		= 0; 兩個日期相等
	 * 		> 0; date1 > date2
	 * 		< 0; date2 > date1
	 * 
	 * since: 1.1
	 */	
	function compareWestDate(date1, date2) {

		if (typeof(date1) != "object" &&
		    date1[0] == 'undefined') {
			throw new Error(1000001, "input argument data1 is not a array");
		}
		if (typeof(date2) != "object" &&
		    date2[0] == 'undefined') {
			throw new Error(1000002, "input argument data2 is not a array");
		}

		var year1  = date1[0];
		var month1 = date1[1] == null ? 1 : date1[1];
		var day1   = date1[2] == null ? 1 : date1[2];
		
		var year2  = date2[0];
		var month2 = date2[1] == null ? 1 : date2[1];
		var day2   = date2[2] == null ? 1 : date2[2];

		if (!isWestDate(year1, month1, day1)) {
			throw new Error(1000003, "input argument data1 is not a valid date");
		}

		if (!isWestDate(year2, month2, day2)) {
			throw new Error(1000004, "input argument data2 is not a valid date");
		}

		var westDate1 = new Date();
		westDate1.setFullYear(year1);
		westDate1.setMonth(month1 - 1);
		westDate1.setDate(day1);
		
		var westDate2 = new Date();
		westDate2.setFullYear(year2);
		westDate2.setMonth(month2 - 1);
		westDate2.setDate(day2);
		
		return westDate1.getTime() - westDate2.getTime();
	}
	/*
	 * descript:
	 *      比對 date1 與 date2 那個民國日期比較大
	 * parameter:
	 * 	    date1: Array 物件，代表民國日期，陣列中依序放置 民國年、月、日
	 * 	    date2: Array 物件，代表民國日期，陣列中依序放置 民國年、月、日
	 * return:
	 * 		= 0; 兩個日期相等
	 * 		> 0; date1 > date2
	 * 		< 0; date2 > date1
	 */	
	function compareRocDate(date1, date2) {

		if (typeof(date1) != "object" &&
		    date1[0] == 'undefined') {
			throw new Error(1000001, "input argument data1 is not a array");
		}

		if (typeof(date2) != "object" &&
		    date2[0] == 'undefined') {
			throw new Error(1000002, "input argument data2 is not a array");
		}

		if (date1[0] == null || !isInteger(date1[0])) {

			throw new Error(1000005, "input argument date1's year is not a numeric");
		}

		if (date2[0] == null || !isInteger(date2[0])) {
			throw new Error(1000006, "input argument date2's year is not a numeric");
		}
		date1[0] = parseInt(date1[0]) + 1911;
		date2[0] = parseInt(date2[0]) + 1911;
		
		return compareWestDate(date1, date2);
	}	
//==================================================================================================================//
	/*
	 * descript:
	 *      判斷傳進來的checkbox或radio陣列(或物件)是否有任何一個被勾選了。
	 * parameter:
	 * 	    obj: checkbox 陣列(或物件)
	 * return:
	 * 		true : 至少有一個checkbox或radio被勾選
	 * 		false: 完全沒有一個checkbox或radio被勾選
	 * 
	 * since: 1.1
	 */	
	function isAnyOneChecked(obj) {
		if (obj == null) {
			throw new Error(1000010, "input argument obj is null");
		}
		if (obj.length == null) { // 非陣列
			if (obj.tagName.toUpperCase() != 'INPUT' || (obj.type.toLowerCase() != "checkbox" && obj.type.toLowerCase() != "radio")) {
				throw new Error(1000011, "input argument obj is not a checkbox or radio obj");
			}
			return obj.checked;
			
		} else { // 陣列
			if (obj[0].tagName.toUpperCase() != 'INPUT' || (obj[0].type.toLowerCase() != "checkbox" && obj[0].type.toLowerCase() != "radio")) {
				throw new Error(1000011, "input argument obj is not a checkbox or radio obj");
			}
			for (var i=0; i<obj.length; i++) {
				if (obj[i].checked) {
					return true;
				}
			}
			return false;
		}
	}
//==================================================================================================================//
	/*
	 * descript:
	 *      判斷傳進來的字串是否符何Email格式
	 * parameter:
	 * 	    email: 字串
	 * return:
	 * 		true : 為Email格式字串
	 * 		false: 非Email格式字串
	 * 
	 * since: 1.1
	 	
	function isEmailFormat(email) {
		//var data = email.match(/^\S+@\S+\.\S+$/);

		var data = email.match(/^[a-zA-Z0-9]+([\._-][a-zA-Z0-9]+)*@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$/);
		if (!data || !email) {
			return false;
		} else {
			return true;
		}
	}
	*/
	function isEmailFormat(email){     
	 /** 
	    var myReg = /^([-_A-Za-z0-9\.]+)@([-_A-Za-z0-9]+\.)+[-_A-Za-z0-9]+$/;     
	    if(myReg.test( obj.value )) return true;     
	    return false;
	   */
		var data = email.match(/^[a-zA-Z0-9]+([\.\-_a-zA-Z0-9]+)*@([a-zA-Z0-9]+([_-][a-zA-Z0-9]+)*)(\.([a-zA-Z0-9]+([_-][a-zA-Z0-9]+)*))+$/);
		if (!data || !email) {
			return false;
		} else {
			return true;
		}
	         
	}   
//==================================================================================================================//
	/*
	 * descript:
	 *      判斷傳進來的字串是否大於指定的字數
	 * parameter:
	 * 	    string: 字串
	 * 		maxNum: 最大字數
	 * 		resolved2BytesWord: 是否要將中文字解析成兩個字數。true:要，false:不要 (預設為false)
	 * return:
	 * 		true : 傳進來的字串大於指定的字數
	 * 		false: 傳進來的字串小於、等於指定的字數
	 * 
	 * since: 1.1
	 */	
	/**
	function isAboveMaxNumOfWord(string, maxNum, analyzed2BytesWord) {
		analyzed2BytesWord = analyzed2BytesWord == null ? false : analyzed2BytesWord;
		if (!analyzed2BytesWord) {
			return string.length > maxNum;
		} else {
			var realNum = 0;
			for (var i=0; i<string.length; i++) {
				if (escape(string.charAt(i)).length >= 4) {
					realNum += 2;
				} else {
					realNum ++;
				}
			}

			return (realNum > maxNum)
		}
	}
	
	*/
//==================================================================================================================//
	/*
	 * descript:
	 *      判断传进来的字符串是否大于指定的字数
	 * parameter:
	 * 	    string: 字符串
	 * 		maxNum: 最大字数
	 * 		resolved2BytesWord: 是否要将中文字解析成两个字数。true:要，false:不要 (预设为false)
	 *      cnByteNum: 一个中文字算几个byte。(预设为2个)
	 * return:
	 * 		true : 传进来的字符串大于指定的字数
	 * 		false: 传进来的字符串小于、等于指定的字数
	 * 
	 * since: 1.1
	 */	
	function isAboveMaxNumOfWord(string, maxNum, analyzed2BytesWord, cnByteNum) {
		analyzed2BytesWord = analyzed2BytesWord == null ? false : analyzed2BytesWord;
		cnByteNum = cnByteNum == null ? 2 : cnByteNum;
		
		if (!analyzed2BytesWord) {
			return string.length > maxNum;
		} else {
			var realNum = 0;
			for (var i=0; i<string.length; i++) {
				if (escape(string.charAt(i)).length >= 4) {
					realNum += cnByteNum;
				} else {
					realNum ++;
				}
			}

			return (realNum > maxNum)
		}
	}
	
//==================================================================================================================//
	/*
	 * descript:
	 *      检查是否都是英文字与数字
	 * parameter:
	 * 	    string: 字串
	 * return:
	 * 		true 为英数字格式 false 不合法的格式
	 * 
	 * since: 1.1
	 */		
	function isEnglishNum(obj)    
	{           
	    if (/^[0-9A-Za-z]+$/.test( obj.value ))     
	    {    
	       return true;    
	    }     
	    return false;    
	}    
	/*
	 * descript:
	 *      判斷傳進來的字串中，是否存在1Byte的字(英文與符號)
	 * parameter:
	 * 	    string: 字串
	 * return:
	 * 		true : 傳進來的字串中存在1Byte的字(英文與符號)
	 * 		false: 傳進來的字串中並不存在1Byte的字(英文與符號)
	 * 
	 * since: 1.1
	 */	
	function existOneByteWord(string) {
		var len = string.length;
		for (var i=0; i<string.length; i++) {
			if (escape(string.charAt(i)).length < 4) {
				return true;
			}
		}
		return false;
	}
	/*
	 * descript:
	 *      判斷傳進來的字串中，是否存在2Byte的字(中文字或全形符號)
	 * parameter:
	 * 	    string: 字串
	 * return:
	 * 		true : 傳進來的字串中存在2Byte的字(中文字或全形符號)
	 * 		false: 傳進來的字串中並不存在2Byte的字(中文字或全形符號)
	 * 
	 * since: 1.1
	 */	
	function exist2BytesWord(string) {
		var len = string.length;
		for (var i=0; i<string.length; i++) {
			if (escape(string.charAt(i)).length >= 4) {
				return true;
			}
		}
		return false;
	}
//==================================================================================================================//	
	/*
	 * descript:
	 *      判斷傳進來的字串是否為中華民國身分證號。
	 * parameter:
	 * 	    rocId: 字串
	 * return:
	 * 		true : 是中華民國身分證號
	 * 		false: 不是中華民國身分證號
	 * 
	 * since: 1.1
	 */	
	function isRocId(rocId) {
		if (typeof(rocId).toLowerCase() != "string") {
			return false;
		}
		if (rocId.length != 10) {
			return false;
		}
		rocId = rocId.toUpperCase();
		var headChar = rocId.charAt(0);
		var bodyNum  = rocId.substring(1);
		
		if (headChar > 'Z' || headChar < 'A') {
			return false;
		}
		
		if (!isPositiveInteger(bodyNum)) {
			return false;
		}
		
		if (bodyNum.charAt(0) != '1' && bodyNum.charAt(0) != '2') {
			return false;
		}
		
		// 開始進入規則檢查
		var codes = new Array("10", "11", "12", "13", "14", "15", "16", "17", "34", "18", "19", "20", "21", "22", "35", "23", "24", "25", "26", "27", "28", "29", "32", "30", "31", "33");
		var headCode = codes[headChar.charCodeAt(0) - "A".charCodeAt(0)];

		var chkSum = 0;
		chkSum += parseInt(headCode.charAt(0)) * 1;
		chkSum += parseInt(headCode.charAt(1)) * 9;
		for (var i=8; i>=1; i--) {
			chkSum += parseInt(bodyNum.charAt(8-i)) * i;
		}
		var chkCode = Math.floor(chkSum % 10);
		chkCode = chkCode != 0 ? 10 - chkCode : chkCode;
		return parseInt(bodyNum.charAt(8)) == chkCode;
	}
//==================================================================================================================//	
	/*
	 * descript:
	 *      執行勾選/取消勾選所傳入的checkbox陣列(或物件)
	 * parameter:
	 * 	    obj: 要被勾選/取消勾選的checkbox陣列(或物件)
	 * 		checkedFlag : 要執行勾選(true)或取消勾選(false)的動作
	 * 
	 * since: 1.1
	 */	
	function checkOperation(obj, checkedFlag) {
		if (obj == null) {
			throw new Error(1000010, "input argument obj is null");
		}
		if (obj.length == null) { // 非陣列
			if (obj.tagName.toUpperCase() != 'INPUT' || obj.type.toLowerCase() != "checkbox") {
				//throw new Error(1000020, "input argument obj is not a checkbox obj");
				return;
			}
			obj.checked = checkedFlag;
			
		} else { // 陣列
			//if (obj[0].tagName.toUpperCase() != 'INPUT' || obj[0].type.toLowerCase() != "checkbox" ) {
			//	throw new Error(1000020, "input argument obj is not a checkbox obj");
			//}

			for (var i=0; i<obj.length; i++) {
				if (obj[i].tagName.toUpperCase() != 'INPUT' || obj[i].type.toLowerCase() != "checkbox" ) {
					continue;
				}
				obj[i].checked = checkedFlag;
			}
		}
	}
	/*
	 * descript:
	 *      執行勾選所傳入的checkbox陣列(或物件)
	 * parameter:
	 * 	    obj: 要被勾選的checkbox陣列(或物件)
	 * 
	 * since: 1.1
	 */	
	function checkAll(obj) {
		checkOperation (obj, true);
	}
	/*
	 * descript:
	 *      執行取消勾選所傳入的checkbox陣列(或物件)
	 * parameter:
	 * 	    obj: 要被取消勾選的checkbox陣列(或物件)
	 * 
	 * since: 1.1
	 */	
	function uncheckAll(obj) {
		checkOperation (obj, false);
	}
	
	/*
	 * descript:
	 *      執行反向勾選所傳入的checkbox陣列(或物件)。
	 * 		反向勾選即為將還本勾選的變成取消勾選，原本沒勾選的變成勾選。
	 * parameter:
	 * 	    obj: 要被反向勾選的checkbox陣列(或物件)
	 * 
	 * since: 1.1
	 */	
	function reverseCheck(obj) {
		if (obj == null) {
			throw new Error(1000010, "input argument obj is null");
		}
		if (obj.length == null) { // 非陣列
			if (obj.tagName.toUpperCase() != 'INPUT' || obj.type.toLowerCase() != "checkbox") {
				//throw new Error(1000020, "input argument obj is not a checkbox obj");
			}
			if (obj.checked) {
				obj.checked = false;
			} else {
				obj.checked = true;
			}
			
		} else { // 陣列
			//if (obj[0].tagName.toUpperCase() != 'INPUT' || obj[0].type.toLowerCase() != "checkbox" ) {
			//	throw new Error(1000020, "input argument obj is not a checkbox obj");
			//}
			for (var i=0; i<obj.length; i++) {
				if (obj[i].tagName.toUpperCase() != 'INPUT' || obj[i].type.toLowerCase() != "checkbox" ) {
					continue;
				}
				if (obj[i].checked) {
					obj[i].checked = false;
				} else {
					obj[i].checked = true;
				}
				
			}
		}
	}
//==================================================================================================================//
	/*
	 * descript:
	 *      將傳入的select物件中的所有選項都選取起來
	 * parameter:
	 * 	    selectObj: select物件
	 * 
	 * since: 1.1
	 */	
	function selectAllOptions(selectObj) {
		if (selectObj.tagName.toUpperCase() != 'SELECT') {
			throw new Error(1000030, "input argument obj is not a select obj");
		}
		
		for (var i=0; i<selectObj.options.length; i++) {
			selectObj.options[i].selected = true;
		}
	}
	
	/*
	 * descript:
	 *      為傳入的Select物件設定初值
	 * parameter:
	 * 	    selectObj: select物件
	 * 		defaultCode: 要設定的初值
	 * 
	 * since: 1.1
	 */	
	function setSelectDefault (selectObj, defaultCode) {
		if (selectObj.tagName.toUpperCase() != 'SELECT') {
			throw new Error(1000030, "input argument obj is not a select obj");
		}
		for (var i=0; i<selectObj.options.length; i++) {
			if (selectObj.options[i].value == defaultCode) {
				selectObj.options[i].selected = true;
				break;
			}
		}
		
	}
	
	/*
	 * descript:
	 *      將傳入的Select物件中的所有選項清除
	 * parameter:
	 * 	    selectObj: select物件
	 * 
	 * since: 1.1.1
	 */	
	function deleteAllSelectOptions (selectObj) {
		if (selectObj.tagName.toUpperCase() != 'SELECT') {
			throw new Error(1000030, "input argument obj is not a select obj");
		}
		for (var i=0; i<selectObj.options.length;) {
			selectObj.options[0] = null;
		}
		
	}	
//==================================================================================================================//
	/*
	 * descript:
	 *      亂數產生一組字串
	 * parameter:
	 * 	    len: 要產生的字串長度
	 * 
	 * since: 1.1.1
	 */	
	function generateRandomString(len) {
		var randomString = "";
		var randomNum;
		for (var i=0; i<len; i++) {
			randomNum = Math.floor(Math.random() * 62);
			if (randomNum <= 25) {
				randomString += String.fromCharCode(65 + randomNum);
			} else if (randomNum >= 52) {
				randomString += String.fromCharCode(48 + (randomNum - 52));
			} else {
				randomString += String.fromCharCode(97 + (randomNum - 26));
			}
		}
		return randomString;
	}	
//==================================================================================================================//
	/*
	 * descript:
	 *      判斷傳進來的字串是否大於指定的字數
	 * parameter:
	 * 	    string: 字串
	 * 		maxNum: 最大字數
	 *      count: 超過ascii表127的字視為多長的字,若輸入1則視同不判斷2bytes以上的字
	 * return:
	 * 		true : 傳進來的字串大於指定的字數
	 * 		false: 傳進來的字串小於、等於指定的字數
	 * 
	 * since: 1.1
	 */	
	function isOverMaxNumOfWord(string, maxNum, count) {
		var realNum = 0;
		for (var i=0; i<string.length; i++) {
			    var codes=string.charCodeAt(i);
				if (codes<=127) {
					realNum ++;
				} else {
					realNum += count;
				}
		}
			return (realNum > maxNum)
	}

		

//==================================================================================================================//
	
	
//==================================================================================================================//
	/*
	 * descript:
	 *      检查字串是否填写、是否过长
	 * parameter:
	 * 	    string: 字串,长度,错误栏位
	 * return:
	 * 		true 为合法格式 false 不合法的格式
	 * 
	 * since: 1.1
	 */		
	function check104String(obj,num,show)    
	{   if(obj.value == '') {
	    	alert('请填写'+show);
	    	obj.focus();
	    	return false;
	    }  
	    if(obj.value.getByteLength() > parseInt(num)) {
	    	alert(show+'字串长度过长');
	    	obj.focus();
	    	return false;
	    }
	    return true;	
	} 
	
//==================================================================================================================//
	/*
	 * descript:
	 *      检查数字是否正碉、是否过长
	 * parameter:
	 * 	    string: 字串,长度,错误栏位
	 * return:
	 * 		true 为合法格式 false 不合法的格式
	 * 
	 * since: 1.1
	 */		
	function check104Num(obj,num,show)    
	{           
	    if(obj.value == '') {
	    	alert('请填写'+show);
	    	obj.focus();
	    	return false;
	    }  
	    if(obj.value.getByteLength() > parseInt(num)) {
	    	alert(show+'数字长度过长');
	    	obj.focus();
	    	return false;
	    }
		if(!isNumber(obj)) {
			alert(show+'非数字格式'); 
			obj.focus();
	    	return false;
		}	
	    return true;	
	} 	   	
	    
//==================================================================================================================//
	/*
	 * descript:
	 *      检查Email是否正碉、是否过长
	 * parameter:
	 * 	    string: 字串,长度,错误栏位
	 * return:
	 * 		true 为合法格式 false 不合法的格式
	 * 
	 * since: 1.1
	 */		
	function check104Email(obj,num,show)    
	{           
	    if(obj.value == '') {
	    	alert('请填写'+show);
	    	obj.focus();
	    	return false;
	    }  
	    if(obj.value.getByteLength() > parseInt(num)) {
	    	alert(show+'资料长度过长');
	    	obj.focus();
	    	return false;
	    }
		if(!isEmailFormat(obj)) {
			alert(show+'非合法Email格式'); 
			obj.focus();
	    	return false;
		}	
	    return true;	
	} 	 

//==================================================================================================================//
	/*
	 * descript:
	 *      检查网址是否正碉、是否过长
	 * parameter:
	 * 	    string: 字串,长度,错误栏位
	 * return:
	 * 		true 为合法格式 false 不合法的格式
	 * 
	 * since: 1.1
	 */		
	function check104Http(obj,num,show)    
	{           
	    if(obj.value == '') {
	    	alert('请填写'+show);
	    	obj.focus();
	    	return false;
	    }  
	    if(obj.value.getByteLength() > parseInt(num)) {
	    	alert(show+'资料长度过长');
	    	obj.focus();
	    	return false;
	    }
		if(!(new RegExp("^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$")).test(obj)) {
			alert(show+'非正式网址格式'); 
			obj.focus();
	    	return false;
		}	
	    return true;	
	} 
	
    function isSpecifyHtmlTag(tagName, obj) {
	 	tagName = tagName.toUpperCase();
	 	if (new String(typeof(obj)).toLowerCase() != 'object' ||
	 		obj.tagName == null) {
	 		return false;
	 	} else {
	 		var objTagName = obj.tagName.toUpperCase();
	 		objTagName = objTagName == "INPUT" ? obj.type.toUpperCase() : objTagName;
 			if (objTagName == tagName) {
 				return true;
 			} else {
 				return false;
 			}
	 	}
	 }