﻿

/* ===================================================== */
// jTakTrack.Form
/* ===================================================== */
jTakTrack.Form = {
    GetCheckedValues: function (sFieldName) {
        var sRet = "";
        $("input:checked[name=" + sFieldName + "]").each(function (i) {
            if (sRet != "") sRet += ",";
            sRet += this.value;
        });
        return sRet;
    }

    , CheckChecked: function (sFieldName) {
        var f_checked = true;
        if (this.GetCheckedValues(sFieldName) == "") {
            f_checked = false;
            alert("Please select at least one item.");
        }
        return f_checked;
    }


    , isLeapYear: function (y) {
        if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) return true;
        return false;
    }

    // MM/DD/YYYY
    , isDate: function (s, bBlankOK) {
        var bRet = false;
        if (s == "") {
            if (arguments.length > 1 && bBlankOK) bRet = true;
        }
        else {
            try {
                var aDT = s.split("/");
                if (aDT.length == 3) {
                    if (this.isInt(aDT[0]) && this.isInt(aDT[1]) && this.isInt(aDT[2])) {
                        var iM = parseInt(aDT[0], 10);
                        var iD = parseInt(aDT[1], 10);
                        var iY = parseInt(aDT[2], 10);
                        if (iY >= 9999) {
                            bRet = false;
                        }
                        else if (iM >= 1 && iM <= 12) {
                            if (iM == 2) {
                                if (this.isLeapYear(iY)) {
                                    if (iD >= 1 && iD <= 29) bRet = true;
                                }
                                else {
                                    if (iD >= 1 && iD <= 28) bRet = true;
                                }
                            }
                            else if (iM == 4 || iM == 6 || iM == 9 || iM == 11) {
                                if (iD >= 1 && iD <= 30) {
                                    bRet = true;
                                }
                            }
                            else {
                                if (iD >= 1 && iD <= 31) {
                                    bRet = true;
                                }
                            }
                        }
                    }
                }
            }
            catch (e) {
            }
        }
        return bRet;
    }

    // HH:MM[:SS]
    , isTime: function (s, bBlankOK) {
        var bRet = false;
        if (s == "") {
            if (arguments.length > 1 && bBlankOK) bRet = true;
        }
        else {
            try {
                var aTM = s.split(":");
                if (aTM.length == 2 || aTM.length == 3) {
                    if (this.isInt(aTM[0]) && this.isInt(aTM[1])) {
                        var iH = parseInt(aTM[0], 10);
                        var iM = parseInt(aTM[1], 10);
                        var iS = 0;
                        if (aTM.length == 3) {
                            if (this.isInt(aTM[2])) {
                                iS = parseInt(aTM[2], 10);
                            }
                            else {
                                iS = -1;
                            }
                        }
                        if (iH >= 0 && iH <= 23 && iM >= 0 && iM <= 59 && iS >= 0 && iS <= 59) {
                            bRet = true;
                        }
                    }
                }
            }
            catch (e) {
            }
        }
        return bRet;
    }

    // MM/DD/YYYY HH:MM[:SS]
    , isDateTime: function (s, bBlankOK) {
        var bRet = false;
        if (s == "") {
            if (arguments.length > 1 && bBlankOK) bRet = true;
        }
        else {
            try {
                var aDTTM = s.split(" ");
                if (aDTTM.length == 1) {
                    if (this.isDate(aDTTM[0])) {
                        bRet = true;
                    }
                }
                else if (aDTTM.length == 2) {
                    if (this.isDate(aDTTM[0]) && this.isTime(aDTTM[1])) {
                        bRet = true;
                    }
                }
                else if (aDTTM.length == 3) {
                    var sAMPM = jQuery.trim(String(aDTTM[2]).toUpperCase());
                    if (this.isDate(aDTTM[0]) && this.isTime(aDTTM[1]) && (sAMPM == "AM" || sAMPM == "PM")) {
                        bRet = true;
                    }
                }
            }
            catch (e) {
            }
        }
        return bRet;
    }

    , isNumeric: function (s) {
        var f_rc = false;
        try {
            if (!isNaN(s)) {
                f_rc = true;
            }
        }
        catch (e) {
        }
        return f_rc;
    }

    , isInt: function (s) {
        var f_rc = false;
        try {
            var i = parseInt(s, 10);
            f_rc = true;
        }
        catch (e) {
        }
        return f_rc;
    }


    , WriteFieldMsg: function (sFieldName, sMsg) {
        var e_msg = $("#" + sFieldName + "_MSG");
        if (sMsg != "") {
            sMsg = "<br /><span class='MARK_VALIDATION_ERR'>" + sMsg + "</span>";
        }
        e_msg.html(sMsg);
    }
    , ClearFieldMsg: function (sFieldName) {
        this.WriteFieldMsg(sFieldName, "");
    }


    , CheckField: function (sItemName, sFieldName, oOption) {
        var iRet = 0;
        var sMsg = "";

        if (typeof (oOption.sDataType) == "undefined") oOption.sDataType = "S";
        if (typeof (oOption.bReq) == "undefined") oOption.bReq = false;

        if (sItemName == "" || sItemName == sFieldName) {
            this.ClearFieldMsg(sFieldName);
            //
            var e = $("#" + sFieldName);
            if (true) {
                var val = jQuery.trim(e.val());

                if (val == "") {
                    if (oOption.bReq == true) {
                        sMsg = TakTrackRes.FormCheck_Required;
                        iRet++;
                    }
                }
                else if (oOption.sDataType == "DT" && !this.isDate(val)) {
                    sMsg = TakTrackRes.FormCheck_DT;
                    iRet++;
                }
                else if (oOption.sDataType == "DTTM" && !this.isDateTime(val)) {
                    sMsg = TakTrackRes.FormCheck_DTTM;
                    iRet++;
                }
                else if (oOption.sDataType == "N" && !this.isNumeric(val)) {
                    sMsg = TakTrackRes.FormCheck_N;
                    iRet++;
                }
                else if (oOption.sDataType == "I" && !this.isInt(val)) {
                    sMsg = TakTrackRes.FormCheck_I;
                    iRet++;
                }
                else if (oOption.sDataType == "S") {
                    //var ss=new String(e.value);
                }
                else if (oOption.sDataType == "SAN") { // String(Alpha-Numeric)
                    var ss = new String(val);
                    if (!ss.match(/^[0-9a-zA-Z\-_]+$/)) {
                        sMsg = TakTrackRes.FormCheck_SAN;
                        iRet++;
                    }
                }
                else if (oOption.sDataType == "TID") { // Numeric, -
                    var ss = new String(val);
                    if (!ss.match(/^[0-9\-,]+$/)) {
                        sMsg = TakTrackRes.FormCheck_TID;
                        iRet++;
                    }
                }
            }
            else {
                //alert("Field not found: "+sFieldName);
            }

            if (iRet > 0) {
                this.WriteFieldMsg(sFieldName, sMsg);
            }
        }
        return iRet;
    }


    , DayOfWeek: function (day) {
        var s = "";
        switch (day) {
            case 0: s = "Sunday"; break;
            case 1: s = "Monday"; break;
            case 2: s = "Tuesday"; break;
            case 3: s = "Wednesday"; break;
            case 4: s = "Thursday"; break;
            case 5: s = "Friday"; break;
            case 6: s = "Saturday"; break;
        }
        return s;
    }
    , OnDateChange: function (sFieldName) {
        var dt = new Date();
        dt.setFullYear($("#" + sFieldName + '_Year').text());
        dt.setMonth($("#" + sFieldName + '_Month').text() - 1);
        dt.setDate($("#" + sFieldName + '_Day').text());
        $("#" + sFieldName + '_DayOfWeek').text(this.DayOfWeek(dt.getDay()));
    }

    , TagSelected: function (_e, sVal, sFieldName) {
        var e = $(_e);
        var eField = $("#" + sFieldName);
        if (true) {
            if (e.hasClass('SELECTED')) {
                e.removeClass('SELECTED');
                e.addClass('NORMAL');
                if (eField.val() == "") {
                }
                else {
                    eField.val(eField.val().replace("," + sVal + ",", ""));
                }
            }
            else {
                e.removeClass('NORMAL');
                e.addClass('SELECTED');
                if (eField.val() == "") {
                    eField.val("," + sVal + ",");
                }
                else {
                    eField.val(eField.val() + "," + sVal + ",");
                }
            }
        }
    }


    // sSubmitType: "SAVE", ""/"LOAD"
    , FormSubmit_bSubmit: false

    , FormSubmit: function (sSubmitType, eForm) {
        var mainform;
        if (typeof (eForm) != "undefined") {
            mainform = eForm;
        }
        else {
            mainform = document.mainform;
        }

        var bXML = false;
        var bRC = false;

        var sMsg = "";
        var strURL;
        strURL = mainform.action;

        if (sSubmitType == "SAVE") sMsg = "Saving ...";
        else if (sSubmitType == "SEARCH") sMsg = "Searching ...";
        else sMsg = "Loading ...";
        eProgressMsg = $("#PROGRESSMSG");
        eProgressMsg.css("display", "inline").html(sMsg);

        bRC = false;
        try {
            if (!bXML) {
                mainform.submit();
                bRC = true;
            }
            else {
                var docRoot = jTakTrack.Form2Xml(mainform);

                var xmlhttp = GetXmlHTTP();
                xmlhttp.open("post", strURL, false);
                xmlhttp.send(jTakTrack.XML2Str(docRoot));
                if (xmlhttp.status != "200") {
                    var s = "Failed to retrieve the information: " + xmlhttp.status;
                    s += xmlhttp.responseText;
                    alert(s);
                }
                else {
                    var sResult = xmlhttp.responseText;
                    var p = sResult.indexOf("<result");
                    if (p >= 0) {
                        sResult = sResult.substr(p);
                    }
                    var xmldoc = jTakTrack.CreateDocument();
                    xmldoc.loadXML(sResult);
                    var ed = null;
                    var sStatus = "";
                    var sRetURL = "";
                    ed = xmldoc.getElementsByTagName("status");
                    if (ed != null && ed.length > 0) {
                        sStatus = ed[0].getAttribute("value");
                    }
                    ed = xmldoc.getElementsByTagName("url");
                    if (ed != null && ed.length > 0) {
                        sRetURL = ed[0].getAttribute("value");
                    }
                    if (sStatus == "0") {
                        window.location.href = sRetURL;
                        bRC = true;
                    }
                    else {
                        alert(xmlhttp.responseText);
                    }
                }
            }
        }
        catch (e) {
            sMsg = e.message;
            alert("Form.FormSubmit: " + sMsg + " " + typeof (mainform));
        }

        if (!bRC) {
            this.FormSubmit_bSubmit = false;
            eProgressMsg.html(sMsg);
        }
    }

}




