﻿var onceContactUs = function() {

    var inProgress;
    var name;
    var postCode;
    var email;
    var contactNumber;
    var yourMessage;

    var ShowErrorMessage = function(errorPanelId, errorMessage) {
        var isValid = errorMessage == "";

        var errorPanel = jQuery(errorPanelId).text(errorMessage);
        isValid ? errorPanel.hide("slow") : errorPanel.show("slow");

        return isValid;
    };

    var Validate = function() {
        var isValid = true;

        isValid = ValidateName() && isValid;
        isValid = ValidatePostCode() && isValid;
        isValid = ValidateEmail() && isValid;
        isValid = ValidateContactNumber() && isValid;
        isValid = ValidateYourMessage() && isValid;

        if (!isValid) {
            inProgress.hide();
        }

        return isValid;
    };

    var ValidateName = function() {
        var errorMessage = "";

        if (name.val() == "") {
            errorMessage = "Name is required";
        } else {
            name.val(Capitalise(name.val()));
        }

        return ShowErrorMessage(".nameError", errorMessage);
    };

    var ValidatePostCode = function() {
        var errorMessage = "";
        var value = postCode.val();

        if (value == "") {
            errorMessage = "Post code is required";
        } else if (value.length != 4) {
            errorMessage = "Post code must be in a valid format - e.g. 2000";
        }

        return ShowErrorMessage(".errorPostCode", errorMessage);
    };

    var ValidateEmail = function() {
        var emailRegex = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", "i");
        var errorMessage = "";
        var emailAddress = email.val();

        if (email == "") {
            errorMessage = "Email address is required";
        } else if (!emailRegex.test(emailAddress)) {
            errorMessage = "Email must be in a valid format - e.g. me@mydomain.com.au";
        }

        return ShowErrorMessage(".emailAddressError", errorMessage);
    };

    var ValidateContactNumber = function() {
        var errorMessage = "";

        var value = contactNumber.val().replace(/ |\(|\)/g, "");

        if (value != "") {
            if (value.length != 10 || !value.startsWith("0")) {
                errorMessage = "Contact number must be a landline (inc area code) or a mobile number";
            }
        }

        return ShowErrorMessage(".contactNumberError", errorMessage);
    };

    var ValidatePostCode = function() {
        var errorMessage = "";
        var value = postCode.val();

        if (value == "") {
            errorMessage = "Post code is required";
        } else if (value.length != 4) {
            errorMessage = "Post code must be in a valid format - e.g. 2000";
        }

        return ShowErrorMessage(".postCodeError", errorMessage);
    };

    var ValidateYourMessage = function() {
        var errorMessage = "";

        if (yourMessage.val() == "") {
            errorMessage = "Your message is required";
        }

        return ShowErrorMessage(".yourMessageError", errorMessage);
    };

    var FormatContactNumber = function() {
        var value = contactNumber.val();

        if (value.startsWith("04") && value.length == 10) {
            var mobilePart1 = value.substring(0, 4);
            var mobilePart2 = value.substring(4, 7);
            var mobilePart3 = value.substring(7, 10);
            value = mobilePart1 + " " + mobilePart2 + " " + mobilePart3;
        } else if (value.startsWith("0") && value.length > 1) {
            var postCode = value.substring(0, 2);
            var landlinePart1 = value.substring(2, 6);
            var landlinePart2 = value.substring(6, 10);
            value = "(" + postCode + ") " + landlinePart1 + " " + landlinePart2;
        }

        contactNumber.val(value);
    };

    var CleanContactNumber = function() {
        contactNumber.val(contactNumber.val().replace(/ |\(|\)/g, ""));
    };

    var Capitalise = function(inputString) {
        var outputString = "";
        var tmpStr, tmpChar, preString, postString, strlen;
        tmpStr = inputString.toLowerCase();
        stringLen = tmpStr.length;
        if (stringLen > 0) {
            for (i = 0; i < stringLen; i++) {
                if (i == 0) {
                    tmpChar = tmpStr.substring(0, 1).toUpperCase();
                    postString = tmpStr.substring(1, stringLen);
                    tmpStr = tmpChar + postString;
                }
                else {
                    tmpChar = tmpStr.substring(i, i + 1);
                    if (tmpChar == " " && i < (stringLen - 1)) {
                        tmpChar = tmpStr.substring(i + 1, i + 2).toUpperCase();
                        preString = tmpStr.substring(0, i + 1);
                        postString = tmpStr.substring(i + 2, stringLen);
                        tmpStr = preString + tmpChar + postString;
                    }
                }
            }
        }
        return tmpStr;
    };

    var NumberOrSpace = function(e) {

        var isValid = true;

        //if the letter is not digit then reject it
        if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
            isValid = false;
        }

        return isValid;
    };

    return {
        Init: function() {
            jQuery(".numeric").keypress(NumberOrSpace);
            inProgress = $(".inProgress");
            name = $(".name").change(ValidateName);
            postCode = $(".postCode").change(ValidatePostCode);
            email = $(".emailAddress").change(ValidateEmail);
            contactNumber = $(".contactNumber").change(ValidateContactNumber).focus(CleanContactNumber).blur(FormatContactNumber);
            yourMessage = $(".yourMessage").change(ValidateYourMessage);
        },
        OnSubmit: function() {
            inProgress.show();
            return Validate();
        },
        DisplaySuccess: function() {
            alert("Your message has been sent successfully.");
        }
    }

} ();

$(document).ready(function() {
    onceContactUs.Init();
});