﻿function validateAsRequired(element) {
    if (element.type == "checkbox")
        return element.checked;

    if (!element.value)
        return false;

    return element.value.length > 0;
}

function validateAsEmail(element) {
    // we're considering a blank email as passing        
    if (!element.value)
        return true;

    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

    return emailPattern.test(element.value); ;
}

function addToSummary(summary, message) {
    if (!summary.messages)
        summary.messages = new Array();

    summary.messages.push(message);
}

function buildSummary(summary) {
    if (!summary)
        return;

    if (summary.messages) {
        var text = '<br /><ul>';

        $.each(summary.messages, function() {
            text += "<li>" + this + "</li>";
        });

        text += "</ul>";

        summary.innerHTML = text;
    }
    
    summary.messages = new Array();
}

function validate(controlId, summaryId) {
    var isValid = true;

    var summary = $('#' + summaryId)[0];
    var requiredElements = $('#' + controlId + ' .required');
    var emailElements = $('#' + controlId + ' .email');
    var customElements = $('#' + controlId + ' .custom');

    $.each(requiredElements, function() {
        var targetControl = $('#' + this.getAttribute('targetControl'))[0];

        if (validateAsRequired(targetControl)) {
            this.innerHTML = '';
            return;
        }

        isValid = false;
        this.innerHTML = this.getAttribute('text');
        addToSummary(summary, this.getAttribute('errorMessage'));
    });

    $.each(emailElements, function() {
        var targetControl = $('#' + this.getAttribute('targetControl'))[0];

        if (validateAsEmail(targetControl)) {
            this.innerHTML = '';
            return;
        }

        isValid = false;
        this.innerHTML = this.getAttribute('text');
        addToSummary(summary, this.getAttribute('errorMessage'));
    });

    $.each(customElements, function() {
        if (this.validation()) {
            this.innerText = '';
            return;
        }

        isValid = false;
        this.innerText = this.getAttribute('text');
        addToSummary(summary, this.getAttribute('errorMessage'));
    });

    buildSummary(summary);

    return isValid;
}