function $(obj) {
  	if (typeof obj == 'object')
  	return obj;
	if (document.getElementById)
		return (document.getElementById(obj));
	else if (document.all) 
		return document.all(obj);

    return null;
}

String.prototype.str_replace = function(srch, rpl)
{
	var ar = this.split(srch);
	return ar.join(rpl);
}


function getParent(el) {

	return ((el.parentElement) ? el.parentElement : ((el.parentNode) ? el.parentNode : null));

}



function getElementPosition(elem)
{
	
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
	
    var l = 0;
    var t = 0;
	
    while (elem)
    {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }

    return {"left":l, "top":t, "width": w, "height":h};
}



function createTextAreaWidget(el, min, max)
{
	var el = $(el);
	var counter = $('counter' + el.id);
	if (!counter)
	{
		var parent = getParent(el);
		var counter = document.createElement('div');
		counter.setAttribute('id', 'counter' + el.id);
		counter.className = 'counter';
		parent.appendChild(counter);
		parent.style.position = 'relative';
		counter.style.position = 'absolute';

		counter.style.left = getElementPosition(el).width + 2 +  'px';
		counter.style.top = 0;
		counter.style.height = getElementPosition(el).height + 'px';
	}

	// перенос строки js принимает за два знака. Исправляем.
	len = el.value.str_replace(String.fromCharCode(13), '').length;
	if (len >= max) {
		el.value = el.value.substr(0, max);
		len = max;
	}

	el.onkeyup = function () {createTextAreaWidget(el, min, max);}
	el.onchange = function () {createTextAreaWidget(el, min, max);}
	createStat(counter, min, max, len);	

}

function createStat(el, min, max, current)
{
	el.innerHTML = '<span class=min>' + min + ' &gt; <\/span><br>';
	var className = (current <= min) ? 'gray' : ((current >= max) ? 'red' : 'normal');
	var cur = (current >= max) ? current + ' !!!' : current;
	el.innerHTML += '<span class=' + className + '>' + cur + ' = <\/span><br>';
	el.innerHTML += '<span class=max>' + max + ' &lt; <\/span>';
}
