import Math.*; class AppForm { private var __form_ary:Array; private var __msg:TextField; private var __action:String; private var __method:String; //fix data private var __ALP_STR = "ABCDEFGHJKLMNPQRSTUVXYWZIO"; private var __NUM_STR = "0123456789"; private var __SEX_STR = "12"; private var __MAX_COUNT = 999; //constructor function AppForm() { __form_ary = new Array(); } //public public function addFormItem(field:String, input, inputType:String, require:Boolean, hint:String):Void { if (field == undefined || field == "") { return; } if (input == undefined || input == "") { return; } if (inputType == undefined) { inputType = "text"; } if (require == undefined) { require = true; } if (hint == undefined) { hint = ""; } __form_ary.push({field:field, mc:input, inputType:inputType, require:require, hint:hint}); } public function initForm():Void { for (var i = 0; i<__form_ary.length; i++) { var txtMc = __form_ary[i].mc; txtMc.inputType = __form_ary[i].inputType; txtMc.hint = __form_ary[i].hint; txtMc.field = __form_ary[i].field; txtMc.require = __form_ary[i].require; //trace(txtMc._parent._currentframe+" "+txtMc +" "+ txtMc.require) txtMc.tabIndex = i; var targetType = txtMc.inputType if (targetType == "tel") { txtMc.restrict = "0-9\\-\\(\\)"; } if(targetType == "text" || targetType=="email" || targetType=="tel") { txtMc.onSetFocus = function(textfield_txt:TextField) { this._parent.Display() }; txtMc.onKillFocus = function(textfield_txt:TextField) { this._parent.Destroy() }; } } } //private private function alert(str:String):Void { __msg.text = str; } private function getFormData():Object { var dataObj:LoadVars = new LoadVars(); for (var i = 0; i<__form_ary.length; i++) { var txtMc = __form_ary[i].mc; switch (txtMc.inputType) { case "text" : case "tel" : case "email" : case "zip" : case "pid" : dataObj[txtMc.field] = txtMc.text; break; case "cb" : dataObj[txtMc.field] = txtMc.data break; case "checkbox": dataObj[txtMc.field] = txtMc.data.toString() break; case "sex" : dataObj[txtMc.field] = txtMc.selectedData; break; case "radio" : dataObj[txtMc.field] = txtMc.selectedData break; case "birthday": dataObj[txtMc.field] = txtMc.data break; } } return dataObj; } private function checkForm():Boolean { for (var i = 0; i<__form_ary.length; i++) { var txtMc = __form_ary[i].mc; if (txtMc.require == false) { continue; } switch (txtMc.inputType) { case "zip" : if (!checkBlank(txtMc.text)) { alert("請選擇"+txtMc.hint); Selection.setFocus(txtMc); return false; } break; case "text" : case "tel" : if (!checkBlank(txtMc.text)) { alert("請輸入"+txtMc.hint); Selection.setFocus(txtMc); return false; } break; case "pid" : if (!checkPID(txtMc.text)) { alert("請檢查"+txtMc.hint); Selection.setFocus(txtMc); return false; } break; case "email" : if (!checkEmail(txtMc.text)) { alert("請檢查"+txtMc.hint); Selection.setFocus(txtMc); return false; } break; case "cb" : if (!checkCB(txtMc)) { Selection.setFocus(txtMc); alert("請選擇"+txtMc.hint); return false; } break; case "sex" : if (!checkSex()) { Selection.setFocus(txtMc); alert("請選擇"+txtMc.hint); return false; } break; case "radio" : if (!checkRadio(txtMc)) { Selection.setFocus(txtMc); alert("請選擇"+txtMc.hint); return false; } break; case "birthday": if (!checkBlank(txtMc.data)) { alert("請選擇"+txtMc.hint); Selection.setFocus(txtMc); return false; } break; case "checkbox": if (!checkCheckBox(txtMc)) { alert("請選擇"+txtMc.hint); Selection.setFocus(txtMc); return false; } break; break; } } alert(""); return true; } public function submit():Object { if (checkForm(__form_ary)) { return getFormData(__form_ary); } } public function setMsg(func:Function) { alert = func; } public function reset():Void { for (var i = 0; i<__form_ary.length; i++) { var txtMc = __form_ary[i].mc; switch (txtMc.inputType) { case "text" : case "tel" : case "email" : case "pid" : txtMc.text = ""; break; case "cb" : txtMc.__cb.Reset(); break; case "radio" : for(var j in txtMc.group) { txtMc.group[j].gotoAndStop(1); } break; case "checkbox": txtMc.data = new Array(); for(var j in txtMc) { txtMc[j].gotoAndStop(1); } break; } } } private function checkBlank(txt:String):Boolean { txt = advancedReplace(txt, chr(13), ""); if (txt == "") { return false; } else { return true; } } private function checkCheckBox(checkBox):Boolean { if(checkBox.data.length==0) { return false; } return true; } private function checkCB(cb):Boolean { if (cb.value == 'null') { return false; } else { return true; } } private function checkRadio(radio):Boolean { if (radio.selectedData == undefined) { return false; } else { return true; } } private function checkSex(radio):Boolean { if (radio.selectedData == undefined) { return false; } else { return true; } } private function checkEmail(email:String):Boolean { if ((email.length<6) || (email.indexOf(",")>=0) || (email.indexOf(";")>=0) || (email.indexOf(":")>=0) || (email.indexOf("/")>=0) || (email.indexOf(" ")>=0) || (email.indexOf("@")<=0) || (email.indexOf("@") != email.lastIndexOf("@")) || (email.lastIndexOf(".")email.length)) { return false; } else { return true; } } //身份證 private function checkPID(sPID:String):Boolean { var sMsg:Boolean = true; if (sPID == '') { //sMsg = "請輸入身分證字號"; return false; } else if (sPID.length != 10) { //sMsg = "長度應為 10 !"; return false; } else { sPID = (sPID.toUpperCase()); if (!chkPID_CHAR(sPID)) { return false; } var iChkNum = getPID_SUM(sPID); if (iChkNum%10 != 0) { var iLastNum = sPID.substr(9, 1)*1; for (var i = 0; i<10; i++) { var xRightAlpNum = iChkNum-iLastNum+i; if ((xRightAlpNum%10) == 0) { //sMsg = "最後一個數應為:"+i; return false; } } } } return true; } private function chkPID_CHAR(sPID:String):Boolean { var sMsg:String = ""; sPID = trim(sPID.toUpperCase()); var iPIDLen:Number = String(sPID).length; var sChk:String = __ALP_STR+__NUM_STR; for (var i = 0; i-1) { counter++; } else { return simpleReplace(str, a, b); } } return !reverse ? simpleReplace(str.slice(0, index), a, b)+str.slice(index, str.length) : str.slice(0, index+1)+simpleReplace(str.slice(index+1, str.length), a, b); } else { return simpleReplace(str, a, b); } } }