﻿//----Generic validation functions-----------------------------
ValidationSummaryOnSubmit = UpdateErrorSummary;

//Trigger client validation for a specific group, the parameter can be omitted
//for the default group
function UpdateErrorSummary(validationGroup) 
{
    var summaries = GetValidationSummariesByGroup(validationGroup);
    if (summaries.length > 0)
    {
        var validators = GetInvalidValidatorsByGroup(validationGroup);
        for (summaryIndex = 0; summaryIndex < summaries.length; summaryIndex++)
        {
            var summary = summaries[summaryIndex];
            UpdateValidationSummary(summary, validators);
        }
    }
}

//----Support functions----------------------------------------

function GetValidationSummariesByGroup(validationGroup)
{
    var result = new Array();
    for (summaryIndex = 0; summaryIndex < Page_ValidationSummaries.length; summaryIndex++)
    {
        var summary = Page_ValidationSummaries[summaryIndex];
        if (summary.validationGroup == validationGroup || (summary.validationGroup == null && validationGroup == ""))
        {
            result[result.length] = summary;
        }
    }
    return result;
}

function GetInvalidValidatorsByGroup(validationGroup)
{
    var result = new Array();
    for (validatorIndex = 0; validatorIndex < Page_Validators.length; validatorIndex++)
    {
        var validator = Page_Validators[validatorIndex];
        if ((validator.validationGroup == validationGroup || (validator.validationGroup == null && validationGroup == ""))
            && validator.isvalid != null && !validator.isvalid)
        {
            result[result.length] = validator;
        }
    }
    return result;
}

function UpdateValidationSummary(summary, validators)
{
    if (validators.length == 0)
    {
        ClearValidationSummary(summary);
    }
    else
    {
        var errors = new Array(validators.length);
        var severity = "low";

        for (validatorIndex = 0; validatorIndex < validators.length; validatorIndex++)
        {
            var validator = validators[validatorIndex];

            errors[validatorIndex] = validator.errormessage;

            var validatorSeverity = validator.severity;
            if (validatorSeverity == null)
            {
                validatorSeverity = validator.Severity;
            }
            if (validatorSeverity == null)
            {
                validatorSeverity = summary.severity;
            }
            if (GreaterSeverity(validatorSeverity, severity))
            {
                severity = validatorSeverity;
            }
        }

        UpdateValidationSummaryWithErrors(summary, errors, severity);
    }
}

function ClearValidationSummary(summary)
{
    summary.style.display = "none";
}

function UpdateValidationSummaryWithErrors(summary, errors, severity)
{
    summary.style.display = "block";

    var content = document.getElementById(summary.id + "_ErrorMessage");
    content.innerHTML = "";
    content.style.listStyleType = (errors.length == 1) ? "none" : "disc";

    for (errorIndex = 0; errorIndex < errors.length; errorIndex++)
    {
        content.innerHTML += "<li>" + errors[errorIndex] + "</li>";
    }

    UpdateValidationSummarySeverity(summary, severity);
}

function UpdateValidationSummarySeverity(summary, severity)
{
    var cssClass = "";
    var icon = "";
    switch (severity)
    {
        case "Low":
        case "low":
            cssClass = "ErrorLow";
            icon = "notif_icn_info_small.png";
            break;
        case "High":
        case "high":
            cssClass = "ErrorHigh";
            icon = "notif_icn_error_small.png";
            break;
        default:
            cssClass = "ErrorMed";
            icon = "notif_icn_warn_small.png";
            break;
    }

    document.getElementById(summary.id + "_Table").className = cssClass;
    document.getElementById(summary.id + "_Image").src = "/images/" + icon;
}

function GreaterSeverity(first, second)
{
    var result = false;
    if (first == "High" || first == "high" || second == "Low" || second == "low")
    {
        result = true;
    }
    return result;
}