﻿Validation = {

    init: function() {

    },

    // Value must be exactly N characters
    isLengthEqualTo: function(selector, selectorLength, errorMessage, summary) {
        var result;

        result = ($(selector).val().length == selectorLength);

        if (!result)
            Validation.addToSummary(errorMessage, summary);
        return result;
    },

    // The input must not be null or empty
    isNotNullOrEmpty: function(selector, errorMessage, summary) {
        var result;

        element = jQuery.trim($(selector).val());
        result = ((element != null) && (element.length > 0));

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;
    },

    // The input must be a date in the future, in the format dd/MM/yyyy.
    isAFutureDate: function(selector, errorMessage, summary) {
        var now = new Date();
        var dateToCompare = $(selector).val();
        var newDate = dateToCompare.split('/');
        var result;

        // Convert to dd/mm/yyyy, and substract one day to the date
        var toCompare = new Date(newDate[2], newDate[1] * 1 - 1, newDate[0]);
        result = (toCompare > now);

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;
    },

    //Start Date must be greater than end date
    dateGreaterThan: function(selectorStart, selectorEnd, errorMessage, summary) {
        var dateStart = $(selectorStart).val();
        var dateEnd = $(selectorEnd).val();
        var newStartDate = dateStart.split('/');
        var newEndDate = dateEnd.split('/');
        var result;

        var toCompareStart = new Date(newStartDate[2], newStartDate[1] * 1 - 1, newStartDate[0]);
        var toCompareEnd = new Date(newEndDate[2], newEndDate[1] * 1 - 1, newEndDate[0]);

        result = (toCompareStart < toCompareEnd);

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;
    },

    AreDigitsValidating: function(selector) {
        var regularExpression = /^[\d]+$/;
        return regularExpression.test($(selector).val());

    },

    isNumeric: function(selector, errorMessage, summary) {
        var regularExpression = /^[\d]+$/;
        var result;

        result = regularExpression.test($(selector).val());

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;

    },

    NotAlphabeticValidating: function(selector, errorMessage, summary) {
        var regularExpression = /[^\-a-zA-ZáàâäæçéèêëíîïóôœúùûüÀÂÄÆÇÉÈÊËÎÏÔŒÙÛÜ\'\ ]+$/;
        var result;

        result = !regularExpression.test($(selector).val());

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;
    },

    EmptyListValidating: function(selector, errorMessage, summary) {
        var result;

        result = ($(selector)[0].selectedIndex >= 0);

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;
    },

    IsValidEmailAddress: function(selector, errorMessage, summary) {
    var regularExpression = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
        
        var result;

        result = regularExpression.test($(selector).val());

        if (!result)
            Validation.addToSummary(errorMessage, summary);

        return result;
    },

    addToSummary: function(errorMessage, summary) {
        if (summary.Length = 1) {
            summary.val(summary.val() + "<p>" + errorMessage + "</p>");
        }
    }
}