	function isEmailFormat(s) {
		var emailPattern  = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
		if(!emailPattern.test(s)) {
			return false;
		} else {
			return true;
		}
	}

	function isEmpty(strString) {
		var intEmptyNo = 0;
		for (var intCount=0 ; intCount<strString.length ; intCount++) {
			if (strString.substr(intCount,1) == " ") {
				intEmptyNo = intEmptyNo + 1;
			}
		}
		if (parseInt(strString.length) == parseInt(intEmptyNo)) {
			return true;
		} else {
			return false;
		}
	}

	// 必須為英文或數字，長度為 3~8且開頭不得為底線
	function isAccountFormat(s) {
		var pattern = /^([a-zA-Z0-9]{1})([a-zA-Z0-9]{2,7})$/;
		if(!pattern.test(s)) {
			return false;
		} else {
			return true;
		}
	}

	// 必須為英文或數字，長度為 4~12
	function isPwdFormat(s) {
		var pattern = /[a-zA-Z0-9]{4,10}$/;
		if(!pattern.test(s)) {
			return false;
		} else {
			return true;
		}
	}
	
	function isTwIdFormat(idStr){
	  idStr = idStr.toUpperCase();
	  var letters = new Array('A', 'B', 'C', 'D',
	      'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M',
	      'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
	      'X', 'Y', 'W', 'Z', 'I', 'O');
	  var multiply = new Array(1, 9, 8, 7, 6, 5,
	                           4, 3, 2, 1);
	  var nums = new Array(2);
	  var firstChar;
	  var firstNum;
	  var lastNum;
	  var total = 0;
	  var regExpID=/^[a-z](1|2)\d{8}$/i;
	  if (idStr.search(regExpID)==-1) {
		return false;
	  } else {
		firstChar = idStr.charAt(0).toUpperCase();
		lastNum = idStr.charAt(9);
	  }
	  for (var i=0; i<26; i++) {
		if (firstChar == letters[i]) {
		  firstNum = i + 10;
		  nums[0] = Math.floor(firstNum / 10);
		  nums[1] = firstNum - (nums[0] * 10);
		  break;
		}
	  }

	  for(var i=0; i<multiply.length; i++){
	    if (i<2) {
	      total += nums[i] * multiply[i];
	    } else {
	      total += parseInt(idStr.charAt(i-1)) * multiply[i];
	    }
	  }
	  if ((parseInt(total) + parseInt(lastNum)) % 10 == 0) {
	   return true;
	  } else {
		return false;
	  }
	}
	// 檢查日期輸入
	function isDateTime(y, m , d) {
		if (isNumeric(y) && isNumeric(m) && isNumeric(d)) {
			var daysmax = 31;
			if (m == 2) {
				if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0) ) {
					daysmax = 29;
				} else {
					daysmax = 28;
				}
			}
			if (m==4 || m==6 || m==9 || m==11) {
				daysmax = 30;
			}
			
			if (m > 0 && m <=12 && d > 0 && d <= daysmax) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}
	
	function isNumeric(s) {
		var chars = "0123456789.-";
		var isNumber=true;
		var achar;
		for (i = 0; i < s.length && isNumber == true; i++)  { 
			achar = s.charAt(i); 
			if (chars.indexOf(achar) == -1)  {
				isNumber = false;
			}
		}
		return isNumber;
   }
   
  	function initBirthdayInput(id) {
		var rngYear = 70;
		var d = new Date();
		var y = d.getFullYear();
		var tY = document.getElementById(id + '_y');
		var tM = document.getElementById(id + '_m');
		var tD = document.getElementById(id + '_d');
		for(var i=0;i<rngYear;i++) {
			tY.options[i]= new Option(y - rngYear + i,y - rngYear + i);
			if (i==35) {
				tY.options[i].selected = true;
			}
		}

		function bindDays() {
			for(var i=0;i<=tD.options.length;i++) {
				tD.options[i] = null;
			}
			if (tY.options[tY.selectedIndex].value != 0 && tM.options[tM.selectedIndex].value != 0) {
				var ds = countDays(tY.options[tY.selectedIndex].value, tM.options[tM.selectedIndex].value);

				tD.options[0]= new Option('請選擇',0);
				for(var i=1;i<=ds;i++) {
					tD.options[i]= new Option(i,i);
				}
			}
			if (tM.options[tM.selectedIndex].value != 0) {
				tD.disabled = false;
			} else {
				tD.disabled = true;
				tD.options[0].selected = true;
			}
		};
		
		tM.options[0]= new Option('請選擇',0);
		for(var i=1;i<=12;i++) {
			tM.options[i]= new Option(i,i);
		}
		tM.onchange = bindDays;
		
		tD.options[0]= new Option('請選擇',0);
		tD.disabled = true;
	}
	
	function setBirthdayInput(id, y, m, d) {
		var tY = document.getElementById(id + '_y');
		var tM = document.getElementById(id + '_m');
		var tD = document.getElementById(id + '_d');
		var imax;
		imax = tY.options.length;
		if (y != 0) {
			for(var i=0;i<imax;i++) {
				if (tY.options[i].value == y) {
					tY.options[i].selected = true;
					break;
				}
			}
		}
		
		imax = tM.options.length;
		if (m != 0) {
			for(var i=0;i<imax;i++) {
				if (tM.options[i].value == m) {
					tM.options[i].selected = true;
					break;
				}
			}
		}
		
		
		if (d != 0 && m != 0 && y != 0) {
			var ds = countDays(y, m);

			tD.options[0]= new Option('請選擇',0);
			for(var i=1;i<=ds;i++) {
				tD.options[i]= new Option(i,i);
			}
			imax = tD.options.length;
			for(var i=0;i<imax;i++) {
				if (tD.options[i].value == d) {
					tD.options[i].selected = true;
					tD.disabled = false;
					break;
				}
			}
		}
	}
	
	function countDays(y, m) {
		var ds = 31;
		if (m == 2) {
			if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0) ) {
				ds = 29;
			} else {
				ds = 28;
			}
		}
		if (m==4 || m==6 || m==9 || m==11) {
			ds = 30;
		}
		return ds;
	}
	
	function encode64(input) {
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	   var output = "";
	   var chr1, chr2, chr3;
	   var enc1, enc2, enc3, enc4;
	   var i = 0;

	   do {
	      chr1 = input.charCodeAt(i++);
	      chr2 = input.charCodeAt(i++);
	      chr3 = input.charCodeAt(i++);

	      enc1 = chr1 >> 2;
	      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
	      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
	      enc4 = chr3 & 63;

	      if (isNaN(chr2)) {
	         enc3 = enc4 = 64;
	      } else if (isNaN(chr3)) {
	         enc4 = 64;
	      }

	      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
	         keyStr.charAt(enc3) + keyStr.charAt(enc4);
	   } while (i < input.length);
	   
	   return output;
	}

	function decode64(input) {
		var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	   var output = "";
	   var chr1, chr2, chr3;
	   var enc1, enc2, enc3, enc4;
	   var i = 0;

	   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
	   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

	   do {
	      enc1 = keyStr.indexOf(input.charAt(i++));
	      enc2 = keyStr.indexOf(input.charAt(i++));
	      enc3 = keyStr.indexOf(input.charAt(i++));
	      enc4 = keyStr.indexOf(input.charAt(i++));

	      chr1 = (enc1 << 2) | (enc2 >> 4);
	      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
	      chr3 = ((enc3 & 3) << 6) | enc4;

	      output = output + String.fromCharCode(chr1);

	      if (enc3 != 64) {
	         output = output + String.fromCharCode(chr2);
	      }
	      if (enc4 != 64) {
	         output = output + String.fromCharCode(chr3);
	      }
	   } while (i < input.length);

	   return output;
	}