﻿/// <reference name="MicrosoftAjax.js"/>
function AddTextAreaMaxLengthCheck(textArea, attrName) {
    if (typeof (attrName) == "undefined")
        attrName = "maxlength";

    var func = function(e) {
        var domEvent = new Sys.UI.DomEvent(e);
        // Hack to accomodate Firefox inconsistencies with the keyCode
        if (Sys.Browser.agent == Sys.Browser.Firefox && e.keyCode && (e.keyCode === 46)) {
            domEvent.keyCode = 127;
        } else {
            domEvent.keyCode = e.keyCode;
        }

        var textarea = domEvent.target;
        var charCode = domEvent.charCode;
        var textareaValue = textarea.value;
        // Hack to accomodate IE inconsistencies with whitespace
        textareaValue = textareaValue.replace(/\r\n/g, '\n');
        var actualLength = textareaValue.length;

        if (actualLength >= $(textarea).readAttribute(attrName)) {
            switch (domEvent.keyCode) {
                case Sys.UI.Key.backspace:
                case Sys.UI.Key.tab:
                case Sys.UI.Key.esc:
                case Sys.UI.Key.pageUp:
                case Sys.UI.Key.pageDown:
                case Sys.UI.Key.end:
                case Sys.UI.Key.home:
                case Sys.UI.Key.left:
                case Sys.UI.Key.up:
                case Sys.UI.Key.right:
                case Sys.UI.Key.down:
                case Sys.UI.Key.del:
                    return true;
                case Sys.UI.Key.enter:
                case Sys.UI.Key.space:
                    return false;
                default:
                    {
                        // Handle highlight/replace operations
                        if (document.selection) {
                            var range = document.selection.createRange();
                            var rangeElement = range.parentElement();
                            if (rangeElement == textarea) {
                                if (range.text.length > 0) {
                                    return true;
                                }
                            }
                        } else if (textarea.selectionStart < textarea.selectionEnd) {
                            return true;
                        }
                    }
            }
            // Hack to accomodate Safari inconsistencies with the keyCode
            if (domEvent.keyCode == 0 && domEvent.charCode == 0) {
                return true;
            }
            return false;
        }
        return true;
    };

    if (textArea == null || typeof (textArea) == "undefined") {
        // Apply to all text areas in the document
        $$("textarea").each(function(el) { return el.observe("keypress", func); });
    } else {
        $(textArea).observe("keypress", func);
    }
}



