/** @Deprecated: utilizar charLimiterBinder en reemplazo */
function countlimit(maxlength,placeholder,idToCheck){
	var theform=document.getElementById(idToCheck);
	var lengthleft=maxlength-theform.value.length;
	var placeholderobj=document.getElementById(placeholder);
	if (lengthleft<0){ 
	  theform.value=theform.value.substring(0,maxlength);
	  lengthleft =0;
	 }
	placeholderobj.innerHTML=lengthleft + '';
}

/** @Deprecated: utilizar charLimiterBinder en reemplazo */
function displaylimit(idToCheck,limit, displayContainer){
	if (document.getElementById(idToCheck)){
		document.getElementById(idToCheck).onkeyup=function(){ countlimit(limit,displayContainer,idToCheck)}
		document.getElementById(idToCheck).onchange=function(){ countlimit(limit,displayContainer,idToCheck)}
	}
}

/** @Deprecated: utilizar charLimiterBinder en reemplazo 
	Como el textarea no soporta MAXLEN, hay que forzarlo via JS
**/
function imposeMaxLength(obj, maxLen, e){
	var retval=true;
  if (obj.value.length >= maxLen){
	var keynum = e.which;
	// Si está borrando o selecciondo por teclado, lo dejamos.
	// Si no, devolvemos un "false" para que no tenga efecto el caracter tipeado.
  	if ((keynum != 0)&&(keynum != 8)){ 
  		retval = false;
  	}
  }
  return retval;
}

/** @Deprecated: utilizar charLimiterBinder en reemplazo
	Esta función trunca el largo del TextArea que modificó el usuario 
	por si estuvo haciendo COPY+PASTE y no lo detuvo imposeMaxLength()
****/
function truncateAtLength(obj, maxLen){
	if (obj.value.length > maxLen){
		obj.value = obj.value.substring(0, maxLen);
	}
}

/** 
 * Esta función lo que hace es unificar todas las llamadas a truncateAtLength + imposeMaxLength + displayLimit.
 * Agrega la funcionalidad de actualizar el contador al cargar la página, pero tener en cuenta que si la carga
 * del valor del input se hace también por javascript, entonces esta funcion debe llamarse despues de la misma.
 * 
 * @param: 	recibe un objeto config
 * 			-config.limit: limite de caracteres
 * 			-config.containerIdSelector: id del tag que contiene al label y al input
 * 			-config.labelTypeSelector: selector del tag que muestra la cantidad de caracteres (puede ser cualquier tipo label, text, etc)
 * 			-config.inputTypeSelector: selector del tag donde se ingresa el texto (puede ser cualquier tipo input, textarea, etc)
 * @Note: 	se recomienda utilizar el siguiente markup (no es necesario que las clases o ids sean identicos pero si los atributos)
 * 		<div id="aTextAreaWithCounter">
 *			<label for="comment">Comentario&nbsp;(<span class="charcounter"><em>10</em> caracteres</span>)</label>
 *			<textarea id="comment" name="comment" class="comment" rows="20" cols="20" ></textarea>
 *		</div>
 * @example:
 * 		$j(document).ready(
 *			function(){
 *				charLimiterBinder({limit:10, containerIdSelector:"#aTextAreaWithCounter", inputTypeSelector:"textarea.comment", labelTypeSelector:"span.charcounter em"})
 *			}
 *		)
 **/
function charLimiterBinder(config){		
	$j(config.containerIdSelector +" "+ config.labelTypeSelector).html(config.limit - $j(config.containerIdSelector +" "+ config.inputTypeSelector).val().length);
	$j(config.containerIdSelector +" "+ config.inputTypeSelector).bind("keypress keyup change",
		function (event) {
			return charLimiter(event, $j(this), config.limit, config.containerIdSelector +" "+ config.labelTypeSelector);
		}
	);
}

function charLimiter(event, objTrigger, limit, labelLimitSelector){
	var retval = true;
	if (objTrigger.val().length >= limit){
		if ((event.which != 0)&&(event.which != 8)){ 
			retval = false;	
		}
		objTrigger.val(objTrigger.val().substring(0, limit));
	}
	$j(labelLimitSelector).html(limit - objTrigger.val().length);
	return retval;
}
