
function validateCharacterEntry(countMode, textboxId, maxLimit, charCountLabelId, maxLimitLabelId, allowNegativeCharacters, cssClass, negativeLimitCSS) {

    var targetTextbox = jQuery('#' + textboxId);
    var charCountLabel = jQuery('#' + charCountLabelId);
    var maxLimitLabel = jQuery('#' + maxLimitLabelId);
    
    var textLength = targetTextbox.val().length;
    var mode = countMode.toLowerCase();
    var charactersRemaining = parseInt(maxLimit - textLength)

    if (textLength > maxLimit) {

        if (allowNegativeCharacters.toLowerCase() == 'true') {
            charCountLabel.removeClass(cssClass).addClass(negativeLimitCSS);
            charCountLabel.html(charactersRemaining);
            return true;
        }
        else {

            targetTextbox.val(targetTextbox.val().substr(0, maxLimit));

            if (mode == "countdown") {
                charCountLabel.html("0");
            }
            else {
                charCountLabel.html(maxLimit);
            }
            return false;
        }
    }
    else {

        charCountLabel.removeClass(negativeLimitCSS).addClass(cssClass);

        if (mode == "countdown") {
            charCountLabel.html(charactersRemaining);
        } //+ ' characters remaining'
        else {

            if (textLength > 0) {
                charCountLabel.html(textLength);
            } //+ ' of ' + maxLimit + ' characters remaining'); 
            else {
                charCountLabel.html("0");
            }

            maxLimitLabel.html("/" + maxLimit);
        }

        return true;
    }
}

function intializeCharacterCount(countMode, textboxId, maxLimit, charCountLabelId, maxLimitLabelId, allowNegativeCharacters, cssClass, negativeLimitCSS) {

    var targetTextbox = jQuery('#' + textboxId);

    targetTextbox.keyup(function(event) {

        var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

        validateCharacterEntry(countMode, textboxId, maxLimit, charCountLabelId, maxLimitLabelId, allowNegativeCharacters, cssClass, negativeLimitCSS);

        if (keyCode == 13) return false;
    });

    targetTextbox.blur(function() {
        validateCharacterEntry(countMode, textboxId, maxLimit, charCountLabelId, maxLimitLabelId, allowNegativeCharacters, cssClass, negativeLimitCSS);
    });

    validateCharacterEntry(countMode, textboxId, maxLimit, charCountLabelId, maxLimitLabelId, allowNegativeCharacters, cssClass, negativeLimitCSS);
}

function validateCharacterCountMaxLength(source, args) {

    var sourceValidator = jQuery(source);
    var targetTextboxId = sourceValidator.attr("targetTextboxId");
    var maximumCharacterLimit = parseInt(sourceValidator.attr("maximumCharacterLimit"));

    if (jQuery.trim(targetTextboxId) != '') {

        var targetTextbox = jQuery('#' + targetTextboxId);

        args.IsValid = !(targetTextbox.val().length > maximumCharacterLimit);
    }
    else {
        args.IsValid = true;
    }
}

