// JavaScript Document
function setIFormValidate(xForm) {
    xForm.saveIFormValidateSubmit = xForm.onsubmit;
    xForm.onsubmit = function () {
        var ctrlCount = xForm.all.length;
        for (var idx = 0; idx < ctrlCount; idx++) {
            var xCtrl = xForm.all[idx];
            if ((xCtrl.tagName == "INPUT") || (xCtrl.tagName == "SELECT") || (xCtrl.tagName == "TEXTAREA")) {
                if (xCtrl.validator) {
                    var isValid = xCtrl.validator(xCtrl);
                    if (!isValid) {
                        return false;
                    }
                } else {
                    if (xCtrl.Require) {
                        if (xCtrl.value == "") {
                            var errMsg = "";
                            if (xCtrl.exmsg) {
                                errMsg = "โปรดตรวจสอบ " + xCtrl.exmsg;
                            } else {
                                errMsg = "โปรดตรวจสอบ " + xCtrl.name;
                            } // if (xCtrl.exmsg)
                            iAlert(errMsg, xCtrl);
                            return false;
                        } //if (xCtrl.value != "")
                    }// if (xCtrl.Require)
                } // if (xCtrl.validator)
            }// if (xCtrl.tagName == "INPUT")
        } // for

        if (xForm.saveIFormValidateSubmit) {
            var returnVal = xForm.saveIFormValidateSubmit();
            return returnVal;
        } else {
            return true;
        }
    }
}

function findControl(xForm, elementId) {
    if (xForm == undefined)  return undefined;
    if (elementId == undefined) return undefined;

    var ctrlCount = xForm.all.length;
    for (var idx = 0; idx < ctrlCount; idx++) {
        var xElement = xForm.all[idx];
        if (xElement.id.toUpperCase() == elementId.toUpperCase()) {
            return xElement;
        }
    }
    return null;
}

//===================================================================================
// Hacking submit method of xForm
//===================================================================================

function hackSubmit(form) {
    form.oldSubmit = form.submit;
    form.submit = function () {
        if (form.onsubmit()) {
            form.oldSubmit();
        }
    }
}

function initIForm(xForm) {
    if (xForm == null) return;
    if (xForm.isIForm) return;
    xForm.isIForm = true;
    setIFormValidate(xForm);
    hackSubmit(xForm);
    var ctrlCount = xForm.all.length;
    for (var idx = 0; idx < ctrlCount; idx++) {
        var xCtrl = xForm.all[idx];
        if ((xCtrl.tagName == "INPUT") || (xCtrl.tagName == "SELECT") || (xCtrl.tagName == "TEXTAREA")) {
            
            if (xCtrl.tagName == "TEXTAREA") {
                xCtrl.isTextArea = true;
            }

            if (xCtrl.exinfo) {
                xCtrl.exinfo = xCtrl.exinfo.replace(/ /g, "");
                var exinfo = xCtrl.exinfo.split(";");
                for (var i = 0; i < exinfo.length; i++) {
                    var exAttr = exinfo[i].split(":");
                    if (exAttr.length == 1) {
                        if (exAttr[0].toUpperCase() == "REQUIRE") {
                            xCtrl.Require = true;
                        }
                        if (exAttr[0].toUpperCase() == "READONLY") {
                            xCtrl.readOnly = true;
                        }
                        if (exAttr[0].toUpperCase() == "DISABLE") {
                            xCtrl.disabled = true;
                        }
                        if (exAttr[0].toUpperCase() == "BLANKZERO") {
                            xCtrl.blankZero = true;
                        }
                    } else {
                        eval("xCtrl." + exAttr[0] + "=\"" + exAttr[1] + "\";");
                    }
                }
            }

            if ((xCtrl.tagName == "INPUT")||(xCtrl.tagName == "TEXTAREA")) {
                if (xCtrl.extype) {

                    if ((xCtrl.tagName == "INPUT")) {
                        if (xCtrl.extype.toUpperCase() == "NUMBER") {
                            var decPoint = 0;
                            if (xCtrl.decimal != undefined) decPoint = xCtrl.decimal;
                            setNumberEdit(xCtrl, decPoint);
                        }

                        //extype = "DATE";  btnObject=btSTART_DATE; validate=_disable_before

                        if (xCtrl.extype.toUpperCase() == "DATE") {
                            // extype = "DATE";  exinfo=btnObject:btSTART_DATE;errMsg:"วันที่ไม่ถูกต้องนะจ๊ะ";validate:disable_before
                            var btnObject = findControl(xForm, xCtrl.btnObject);
                            var validate = xCtrl.validate;
                            var errMessage = xCtrl.errMsg;
                            var dateEdit1 = findControl(xForm, xCtrl.editDate1);
                            var dateEdit2 = findControl(xForm, xCtrl.editDate2);
                            try {
                                setCalendar(btnObject, xCtrl, validate, errMessage, dateEdit1, dateEdit2);
                            } catch (ex) {
                                xCtrl.alt = ex.description;
                                xCtrl.style.backgroundColor = "#FFF2F3";
                            }
                        }
                    }

                    if (xCtrl.extype.toUpperCase() == "TEXT") {
                        setTextEdit(xCtrl);
                    }
                }
            }

            if (xCtrl.validator) {
                eval("xCtrl.validator=" + xCtrl.validator + ";");
            }

            if (xCtrl.disabled) {
                xCtrl.style.background = "Silver";
                xCtrl.readOnly = true;
                xCtrl.disabled = false;
            }
        }
    }
}

