﻿
var phoneNumber = '^[+]{0,1}[- 0-9\\)\\(]{6,50}$';
var mailRegex = '^([a-zA-Z0-9_\\.\\-\\+])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$';
var requiredFieldRegex = '^.{1,}$';
var postCodeRegex = '^[0-9]{4,8}$';
var numberRegex = '^[0-9]*$';
var dateRegex = '^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)[0-9]{2}$';
var timeRegex = '^([0-1][0-9]|2[0-4]):([0-5][0-9])(\\s(AM|am|PM|pm)){0,1}$';

function ValidateDate(source, value) {
    return FireValidatorWithHighlighting(source, value, dateRegex);
}

function ValidateTime(source, value) {
    return FireValidatorWithHighlighting(source, value, timeRegex);
}

function ValidateRequiredField(source, value) {
    return FireValidatorWithHighlighting(source, value, requiredFieldRegex);
}

function ValidateNumber(source, value) {
    return FireValidatorWithHighlighting(source, value, numberRegex);
}

function ValidateMailAddress(source, value) {
    return FireValidatorWithHighlighting(source, value, mailRegex);
}

function ValidatePhoneNumber(source, value) {
    return FireValidatorWithHighlighting(source, value, phoneNumber);
}

function ValidatePostalCode(source, value) {
    return FireValidatorWithHighlighting(source, value, postCodeRegex);
}

function ValidateSelectList(source, value) {
    var selectList = document.getElementById(source.controltovalidate);
    var succeed = selectList.selectedIndex > 0;
    UpdateErrorHighlighting(succeed, selectList);

    value.IsValid = succeed;
    return succeed;
}

function FireValidatorWithHighlighting(source, value, validationRegex) {
    var succeed = ValidateWithRegex(value, validationRegex);
    UpdateErrorHighlighting(succeed, document.getElementById(source.controltovalidate));
    return succeed;
}

function UpdateErrorHighlighting(succeed, sourceNode) {
    if (!succeed) {

        if (jQuery(sourceNode).parents('li').length) {
            jQuery(sourceNode).parents('li').addClass('error');
        }
        else {
            if (jQuery(sourceNode).parents('dd').length) {
                jQuery(sourceNode).parents('dd').addClass('error');
            }
            else if (jQuery(sourceNode).parents('td').length) {
                jQuery(sourceNode).parents('td').addClass('error');
            }
        }
        
    }
    else {
        if (jQuery(sourceNode).parents('li').length) {
            jQuery(sourceNode).parents('li').removeClass('error');
        }
        else {
            if (jQuery(sourceNode).parents('dd').length) {
                jQuery(sourceNode).parents('dd').removeClass('error');
            }
            else if (jQuery(sourceNode).parents('td').length) {
                jQuery(sourceNode).parents('td').removeClass('error');
            }
        }
        
    }
}

function ValidateWithRegex(value, regex) {
    var trimmed = Trim(value.Value);
    if (trimmed && trimmed.match(regex)) {
        value.IsValid = true;
        return true;
    }
    value.IsValid = false;
    return false;
}

function Trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}