﻿// 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.innerHTML = textArea.tamExceededPlural.replace("{0}", -lengthDiff);
	else if (lengthDiff == -1)
		measurer.innerHTML = textArea.tamExceededSingular.replace("{0}", -lengthDiff);
	else if (lengthDiff == 1)
		measurer.innerHTML = textArea.tamRemainingSingular.replace("{0}", lengthDiff);
	else
		measurer.innerHTML = textArea.tamRemainingPlural.replace("{0}", lengthDiff);
	
	if (lengthDiff < 0)
		measurer.className = textArea.tamCssClassForMeasurerExceeded;
	else
		measurer.className = textArea.tamCssClassForMeasurerRemaining;
	
	// If the length of the text has changed, we may need to reposition the measurer
	positionMeasurer(textArea);
}

function hideMeasurer(textArea)
{
	textArea.nextSibling.style.display = 'none';
}

function showMeasurer(textArea)
{
	textArea.nextSibling.style.display = 'block';
	positionMeasurer(textArea);
}

function positionMeasurer(textArea)
{
	positionElement(textArea.nextSibling, textArea, textArea.tamAnchorToCorner, textArea.tamInsideX, textArea.tamInsideY, textArea.tamXOffset, textArea.tamYOffset, -99999, -99999);
}

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.tamAnchorToCorner = anchorToCorner;
	textArea.tamInsideX = insideX;
	textArea.tamInsideY = insideY;
	textArea.tamXOffset = xOffset;
	textArea.tamYOffset = yOffset;
	textArea.tamRemainingSingular = remainingSingular;
	textArea.tamRemainingPlural = remainingPlural;
	textArea.tamExceededSingular = exceededSingular;
	textArea.tamExceededPlural = exceededPlural;
	textArea.tamCssClassForMeasurerRemaining = cssClassForMeasurerRemaining;
	textArea.tamCssClassForMeasurerExceeded = cssClassForMeasurerExceeded;

	measureTextArea(textArea);
		
	var measurer = textArea.nextSibling;
	
	measurer.style.position = 'absolute';
	measurer.style.zIndex = '1';
	measurer.style.display = 'none';
	
	// As we now only show the measurer when we're in the textArea, and as we manually reposition it when the length changes,
	// we don't need to continual repositioning thing as well.
	//setTimeout("continuallyPositionElement('" + measurer.id + "', '" + textAreaId + "', " + anchorToCorner + ", " + insideX + ", " + insideY + ", " + xOffset + ", " + yOffset + ", -99999, -99999)", 10);
}
