﻿var inputErrorCssClass = "input-validation-error";

$(document).ready(function() {
    $(":text").focus(onInputFocus);
    $("textarea").focus(onInputFocus);

    $(":text").blur(onInputBlur);
    $("textarea").blur(onInputBlur);
});

function onInputFocus() {
    $(this).parent("p").addClass("focusField");
}

function onInputBlur() {
    $(this).parent("p").removeClass("focusField");
}

function updateUI(ctrl, isValid, tooltip) {
    if (!isValid) {
        removeUI(ctrl);
        ctrl.parent("p").addClass("errorField");
        appendErrorMessage(ctrl, false, tooltip);
    }
    else {
        removeUI(ctrl);
        ctrl.parent("p").addClass("validField");
        ctrl.removeClass(inputErrorCssClass);
        appendImage(ctrl, true, "");
    }
}

function removeUI(field) {
    var ctrl = $(field);
    ctrl.parent("p").removeClass("validField");
    ctrl.parent("p").removeClass("errorField")
    ctrl.next("img").remove();
    ctrl.next("span").remove();
}

function requiredIsValid(value) {
    return (value != null && value != "");
}

function urlIsValid(value) {
    var regEx = new RegExp('(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])?');
    var match = regEx.exec(value);
    return (match != null);
}

function emailIsValid(value) {
    var regEx = new RegExp('\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}\\b');
    var match = regEx.exec(value);
    return (match != null);
}

function appendErrorMessage(ctrl, isValid, tooltip) {
    var html = "";

    ctrl.next("span").remove();
    html = getTextMessageHtml(tooltip);

    ctrl.after(html);
}

function appendImage(ctrl, isValid, tooltip) {
    var html = "";

    ctrl.next("img").remove();
    html = getImageHtml(isValid, tooltip);

    ctrl.after(html);
}

function getImageHtml(isValid, tooltip) {
    var filename = "";
    var alt = "";
    var cssClass = "";

    if (isValid) {
        filename = "accept.png";
        alt = "input accepted";
    }
    else {
        return "";
    }

    return "<img src=\"/Content/Images/" + filename + "\" border=\"0\" class=\"inputValidImage\" alt=\"" + alt + "\" title=\"" + tooltip + "\" />";
}

function getTextMessageHtml(text) {
    return "<span class=\"errorTextMessage\">" + text + "</span>";
}

function validateRequiredTextField(field, tooltip) {
    var ctrl = $(field);
    var isValid = requiredIsValid(ctrl.val());
    updateUI(ctrl, isValid, tooltip);
}

function validateRequiredUrlField(field, requiredTooltip, urlTooltip) {
    var ctrl = $(field);
    var value = ctrl.val();

    if (!requiredIsValid(value)) {
        validateRequiredTextField(field, requiredTooltip);
    }
    else {
        var isValid = urlIsValid(value);
        updateUI(ctrl, isValid, urlTooltip);
    }
}

function validateRequiredEmailField(field, requiredTooltip, emailTooltip) {
    var ctrl = $(field);
    var value = ctrl.val();

    if (!requiredIsValid(value)) {
        validateRequiredTextField(field, requiredTooltip);
    }
    else {
        var isValid = emailIsValid(value);
        updateUI(ctrl, isValid, emailTooltip);
    }
}

