﻿// Event handlers for TextArea elements that implements a MaxLength attribute.

if (typeof(_fileVersions) == 'undefined')
	eval('var _fileVersions = new Array()');
_fileVersions.push('TextBoxInputControl 6.6.0.0');

function TextAreaOnkeypress(e)
{
    var evt = e || window.event;
    var srcElement = evt.target || evt.srcElement;

    if (evt.charCode && (evt.charCode == 8 || evt.charCode == 46))
    {
        return true;
    }
    
    if (srcElement.value.length >= srcElement.maxLength)
	{
	    e.preventDefault ? e.preventDefault() : e.returnValue = false; 
	}
}

function TextAreaOnBeforePaste(e)
{
    var evt = e || window.event;
    e.preventDefault ? e.preventDefault() : e.returnValue = false; 
}

function TextAreaOnPaste(e)
{
    var evt = e || window.event;
    var srcElement = evt.target || evt.srcElement;
	var textRange = document.selection.createRange();
	var insertLength = srcElement.maxLength - srcElement.value.length + textRange.text.length;
	var sData = clipboardData.getData("Text").substr(0,insertLength);
	textRange.text = sData;
	e.preventDefault ? e.preventDefault() : e.returnValue = false; 
}

function InitTextAreaMaxLengthHandler(clientID, maxLength)
{
	var textArea = document.getElementById(clientID);

	textArea.maxLength = maxLength;

	$addHandler(textArea, "keypress", TextAreaOnkeypress);
	$addHandler(textArea, "beforepaste", TextAreaOnBeforePaste);
	$addHandler(textArea, "paste", TextAreaOnPaste);
}

function UpdateTextAreaHeight(obj) {
    if (obj == null) 
    {
        return;
    }

    if (obj.scrollHeight == 0)
    {
        return;
    }

    obj.style.height = "0px";
    obj.style.height = obj.scrollHeight + 15 + 'px';
}

var capslock = {
    addEvent: function (obj, evt, fn)
    {
        if (document.addEventListener)
        {
            capslock.addEvent = function (obj, evt, fn)
            {
                obj.addEventListener(evt, fn, false);
            };
            capslock.addEvent(obj, evt, fn);
        } else if (document.attachEvent)
        {
            capslock.addEvent = function (obj, evt, fn)
            {
                obj.attachEvent('on' + evt, fn);
            };
            capslock.addEvent(obj, evt, fn);
        } else
        {
            // no support for addEventListener *or* attachEvent, so quietly exit
        }
    },
    keypress: function (e)
    {
        var ev = e ? e : window.event;
        if (!ev)
        {
            return;
        }
        var targ = ev.target ? ev.target : ev.srcElement;
        // get key pressed
        var which = -1;
        if (ev.which)
        {
            which = ev.which;
        } else if (ev.keyCode)
        {
            which = ev.keyCode;
        }
        // get shift status
        var shift_status = false;
        if (ev.shiftKey)
        {
            shift_status = ev.shiftKey;
        } else if (ev.modifiers)
        {
            shift_status = !!(ev.modifiers & 4);
        }
        if (((which >= 65 && which <= 90) && !shift_status) ||
        ((which >= 97 && which <= 122) && shift_status))
        {
            // uppercase, no shift key
            capslock.show_warning(targ);
        } else
        {
            capslock.hide_warning(targ);
        }
    },

    show_warning: function (targ)
    {
        if (!targ.warning)
        {
            targ.warning = document.createElement('div');
            targ.warning.className = 'CapsLockWarning';
            targ.warning.style.position = "absolute";
            targ.warning.style.top = (GetTop(targ) + targ.offsetHeight) + "px";
            targ.warning.style.left = GetLeft(targ) + "px";
            targ.warning.style.zIndex = "999";
            targ.warning.innerHTML = _capsLockWarningText;
            document.body.appendChild(targ.warning);
        }
    },
    hide_warning: function (targ)
    {
        if (targ.warning)
        {
            targ.warning.parentNode.removeChild(targ.warning);
            targ.warning = null;
        }
    }
};
