﻿// We assume the TextArea is always immediately followed by the measurer div

function measureTextArea(textArea)
{
    var measurer = textArea.nextSibling;
    var lengthDiff = textArea.tamMaxLength - textArea.value.length;

    if (lengthDiff < -1)
        $(measurer).html(textArea.tamExceededPlural.replace("{0}", -lengthDiff));
    else if (lengthDiff == -1)
        $(measurer).html(textArea.tamExceededSingular.replace("{0}", -lengthDiff));
    else if (lengthDiff == 1)
        $(measurer).html(textArea.tamRemainingSingular.replace("{0}", lengthDiff));
    else
        $(measurer).html(textArea.tamRemainingPlural.replace("{0}", lengthDiff));

    if (lengthDiff < 0)
        $(measurer).attr('class', textArea.tamCssClassForMeasurerExceeded);
    else
        $(measurer).attr('class', textArea.tamCssClassForMeasurerRemaining);

    // If the length of the text has changed, we may need to reposition the measurer
    repositionElement(measurer);
}

function hideMeasurer(textArea)
{
    $(textArea.nextSibling).fadeOut('fast');
}

function showMeasurer(textArea)
{
    $(textArea.nextSibling).repositionAndFadeIn('fast');
}

function primeMeasurer(textAreaId, maxLength, anchorToCorner, insideX, insideY, xOffset, yOffset, remainingSingular, remainingPlural, exceededSingular, exceededPlural, cssClassForMeasurerRemaining, cssClassForMeasurerExceeded)
{
    var textArea = document.getElementById(textAreaId);

    // Maybe it's not been rendered
    if (textArea == null)
        return;

    textArea.tamMaxLength = maxLength;
    textArea.tamRemainingSingular = remainingSingular;
    textArea.tamRemainingPlural = remainingPlural;
    textArea.tamExceededSingular = exceededSingular;
    textArea.tamExceededPlural = exceededPlural;
    textArea.tamCssClassForMeasurerRemaining = cssClassForMeasurerRemaining;
    textArea.tamCssClassForMeasurerExceeded = cssClassForMeasurerExceeded;

    var measurer = textArea.nextSibling;

    continuallyPositionElement(measurer, textArea, anchorToCorner, insideX, insideY, xOffset, yOffset, -99999, -99999);

    measureTextArea(textArea);

    $(measurer).css(
    {
        position: 'absolute',
        zIndex: '1',
        display: 'none'
    });
}
