﻿/**************************JsForm Foundation***********************************/

function JsForm(formObj) {
    this._formObj = formObj;
    this._divMessageID = "";

    this.setDivMessageID = function(id) {
        this._divMessageID = id;
        ValidationMessageCleanTarget(this._divMessageID);
    }



    this.validate = function() {
        this._validationMessageClean();
        var valTargetID;
        for (var i = 0; i < this._formObj.elements.length; i++) {
            var element = this._formObj.elements[i];
            var tagName = element.tagName;

            var result = true;
            
            valTargetID = element.getAttribute("valTargetID");
            
            if(valTargetID != undefined && valTargetID != "")
                ValidationMessageCleanTarget(valTargetID);
                
            if (tagName == "INPUT" && element.type == 'text')
                result = this._validateForTextBox(element);
            if (tagName == "INPUT" && element.type == 'password')
                result = this._validateForTextBox(element);
            if (tagName == "INPUT" && element.type == 'checkbox')
                result = this._validateForCheckBox(element);
            if (tagName == "SELECT")
                result = this._validateForSelectBox(element);
            if (tagName == "TEXTAREA")
                result = this._validateForTextArea(element);
            
            
            
            if (result != true) {
            
                if(valTargetID == undefined || valTargetID == "")
                    this._validationMessage(result);
                else
                    ValidationMessageTarget(valTargetID, result);
                    
                try {
                    element.focus();
                    element.select();
                }
                catch (e) { }
                finally { return false }
            }
            
            if (tagName == "INPUT" && element.type == 'text'){
                if (element.getAttribute("title") != undefined && element.getAttribute("title") != "" && element.value != "" && element.getAttribute("NOT_NULL") != null && !CheckOnlyEnglishNumber(element.value)) {
                    if(valTargetID == undefined || valTargetID == "")
                        this._validationMessage("* " + element.getAttribute("title") + " can only enter charactors and numbers");
                    else
                        ValidationMessageTarget(valTargetID, "* " + element.getAttribute("title") + " can only enter charactors and numbers");

                    try {
                        element.focus();
                        element.select();
                    }
                    catch (e) { }
                    finally { return false }
                }
            }
        }
        return true;
    }

    this._validateForTextBox = function(element) {
        var frontStr = "";

        frontStr = "* Please enter a " + element.getAttribute("title");

        if (element.getAttribute("NOT_NULL") != null) {
            if (element.value.trim() == '')
                return frontStr;
        }
        if (element.getAttribute("NO_SPACE") != null) {
            if (!checkSpace(element.value))
                return "* " + element.getAttribute("title") + " must be letters and numbers without spaces.";
        }
        if (element.getAttribute("MIN") != null && element.getAttribute("Maxlength") != null) {
            if (element.value.length < element.getAttribute("MIN"))
                return element.getAttribute("title") + " does not appear to be valid. It must be between " + element.getAttribute("MIN") + " and " + element.getAttribute("Maxlength") + " characters."
        }
        if (element.getAttribute("FIX_LENGTH") != null) {
            if (element.value.length != element.getAttribute("FIX_LENGTH"))
                return element.getAttribute("title") + " does not appear to be valid. It is fixed to " + element.getAttribute("FIX_LENGTH") + " digits. ";
        }

        if (element.getAttribute("ONLY_NUMBER") != null) {
            if (!isNumber(element.value) && element.value != '')
                return "* can only enter numbers.";
            if (isNumber(element.value) && parseFloat(element.value) == 0)
                return "* can not enter 0(zero).";
        }

        if (element.getAttribute("MIN_NUMBER") != null && element.getAttribute("MAX_NUMBER") != null) {
            if (parseFloat(element.value) > parseFloat(element.getAttribute("MAX_NUMBER"))
                    || parseFloat(element.value) < parseFloat(element.getAttribute("MIN_NUMBER")))
                return element.getAttribute("title") + " does not appear to be valid. It must be between " + ConvertMoney(element.getAttribute("MIN_NUMBER")) + " and " + ConvertMoney(element.getAttribute("MAX_NUMBER"));
        }

        if (element.getAttribute("MIN_NUMBER") != null) {
            if (parseFloat(element.value) < parseFloat(element.getAttribute("MIN_NUMBER")))
                return "* " + element.getAttribute("title") + " starts from " + ConvertMoney(element.getAttribute("MIN_NUMBER"));
        }
        if (element.getAttribute("MAX_NUMBER") != null) {
            if (parseFloat(element.value) > parseFloat(element.getAttribute("MAX_NUMBER")))
                 return "* " + element.getAttribute("title") + " max can be " + ConvertMoney(element.getAttribute("MAX_NUMBER"));
        }



        if (element.getAttribute("POST_NUM") != null) {
            if (element.value == '')
                return frontStr;
        }
        if (element.getAttribute("EMAIL") != null) {
            frontStr = checkEmail(element.value);
            if (frontStr != true)
                return frontStr;
        }
        return true;

    }

    this._validateForCheckBox = function(element) {

        if (element.getAttribute("NOT_NULL") != null) {
            if (element.checked == false)
                return "Please check a " + element.getAttribute("title");
        }
        return true;
    }

    this._validateForSelectBox = function(element) {
        var frontStr = "";
        
        if (element.getAttribute("NOT_NULL") != null) {
            if (element.selectedIndex < 1 && element.options[element.selectedIndex].value == "") {
                frontStr = "* Please select a " + element.getAttribute("title");
                return frontStr;
            }
        }

        return true;
    }

    this._validateForTextArea = function(element) {
        var frontStr = "";

        if (element.getAttribute("NOT_NULL") != null) {
            if (element.getAttribute("frontStr") != '')
                frontStr = "* Please enter a " + element.getAttribute("title");
            if (element.value == '')
                return frontStr;
        }

        return true;
    }

    this._validationMessage = function(msg) {
        if (this._divMessageID == "")
            ValidationMessage(msg);
        else
            ValidationMessageTarget(this._divMessageID, msg);
    }
    
    this._validationMessageClean = function() {
        if (this._divMessageID == "")
            ValidationMessageClean();
        else
            ValidationMessageCleanTarget(this._divMessageID);
    }

}
/****************************************************************************/


function ValidationMessage(msg) {
    ValidationMessageTarget('divValidationMessage', msg);
}


function ValidationMessageClean() {
    ValidationMessageCleanTarget('divValidationMessage');
}


function ValidationMessageTarget(target, msg) {
    
    if(msg != '' && msg != "OK" && msg.indexOf('*') < 0)
        msg = "* " + msg;
        
    $('#' + target).html(msg);
    $('#' + target).css('color', 'red');
    
    if(msg == "OK")
        $('#' + target).css('color', '#0384c5');

    $('#' + target).show();
}

function ValidationMessageTargetOK(target, msg) {
    
    $('#' + target).html(msg);
    $('#' + target).css('color', '#0384c5');
    $('#' + target).show();
}



function ValidationMessageCleanTarget(target) {
    
    $('#' + target).empty();
    $('#' + target).hide();
}


function checkSpace(str) {
    if (str.search(/\s/) != -1)
        return false;

    return true;
}

function isNumber(s) {
    var isNum = /^[\d]+$/;

    if (s.search(isNum))
        return false;

    return true;
}



function checkEmail(str) {
    
    if (str.trim() == "") {
        return "* Email Address is required. ";
    }

    if (!checkSpace(str)) {
        return "* Email Address does not appear to be valid.(no spaces)"

    }

    /* checkFormat */
    //var isEmail = /[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+(\.[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+)*@[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+(\.[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+)*/;
    var isEmail = /^[.\w]+@\w+(\.\w+){1,3}$/;

    if (!isEmail.test(str)) {
        return "* Not vaild email address.  ";
    }
    if (str.length > 64 || str.length < 10) {
        return "* Not vaild email address. It must be between 10 and 64 characters.";
    }
    
    return true;
}

function CheckOnlyEnglish(str) {
    var isENG = /^[a-zA-Z]+$/;
    return isENG.test(str);
}

function CheckOnlyEnglishNumber(str) {
    var isENGNum = /^[a-zA-Z0-9!@#$%&'-_/. )(+=\|]+$/;
    return isENGNum.test(str);
}  

String.prototype.trim = function() {
    return this.replace(/\s/g, "");
}


function validationOutFocusAutoElement(element) {
   
    
    var result = validationAutoElement(element);
    
     alert(result);
    var valTargetID = element.getAttribute('valTargetID')
    if(result == true)
    {
        ValidationMessageTarget(valTargetID, 'OK');
    }
    else 
    {
        ValidationMessageTarget(valTargetID, result);
    }
}


function validationAutoElement(element) {
    var frontStr = "";

    frontStr = "* Please enter a " + element.getAttribute("title");

    if (element.getAttribute("NOT_NULL") != null) {
        if (element.value.trim() == '')
            return frontStr;
    }
    if (element.getAttribute("NO_SPACE") != null) {
        if (!checkSpace(element.value))
            return "* " + element.getAttribute("title") + " must be letters and numbers without spaces.";
    }
    if (element.getAttribute("MIN") != null && element.getAttribute("Maxlength") != null) {
        if (element.value.length < element.getAttribute("MIN"))
            return element.getAttribute("title") + " does not appear to be valid. It must be between " + element.getAttribute("MIN") + " and " + element.getAttribute("Maxlength") + " characters."
    }
    if (element.getAttribute("FIX_LENGTH") != null) {
        if (element.value.length != element.getAttribute("FIX_LENGTH"))
            return element.getAttribute("title") + " does not appear to be valid. It is fixed to " + element.getAttribute("FIX_LENGTH") + " digits. ";
    }

    if (element.getAttribute("ONLY_NUMBER") != null) {
        if (!isNumber(element.value) && element.value != '')
            return "* " + element.getAttribute("title") + " can only enter numbers.";
        if (isNumber(element.value) && parseFloat(element.value) == 0)
            return "* " + element.getAttribute("title") + " can not enter 0(zero).";
    }

    if (element.getAttribute("MIN_NUMBER") != null && element.getAttribute("MAX_NUMBER") != null) {
        if (parseFloat(element.value) > parseFloat(element.getAttribute("MAX_NUMBER"))
                || parseFloat(element.value) < parseFloat(element.getAttribute("MIN_NUMBER")))
            return element.getAttribute("title") + " does not appear to be valid. It must be between " + ConvertMoney(element.getAttribute("MIN_NUMBER")) + " and " + ConvertMoney(element.getAttribute("MAX_NUMBER"));
    }

    if (element.getAttribute("MIN_NUMBER") != null) {
        if (parseFloat(element.value) < parseFloat(element.getAttribute("MIN_NUMBER")))
            return "* " + element.getAttribute("title") + " starts from " + ConvertMoney(element.getAttribute("MIN_NUMBER"));
    }
    if (element.getAttribute("MAX_NUMBER") != null) {
        if (parseFloat(element.value) > parseFloat(element.getAttribute("MAX_NUMBER")))
             return "* " + element.getAttribute("title") + " max can be " + ConvertMoney(element.getAttribute("MAX_NUMBER"));
    }



    if (element.getAttribute("POST_NUM") != null) {
        if (element.value == '')
            return frontStr;
    }
    if (element.getAttribute("EMAIL") != null) {
        frontStr = checkEmail(element.value);
        if (frontStr != true)
            return frontStr;
    }
    return true;

}
