function showCounters() {
	var eachCounters = document.forms[0].elements;
	for (var i=0; i<eachCounters.length; i++) {
		if (eachCounters[i].tagName=="INPUT" || eachCounters[i].tagName=="TEXTAREA") {
			if (eachCounters[i].name.isEmpty()<1) { continue; }
			
			var txtInput = document.getElementById(eachCounters[i].name);
			var counter  = document.getElementById(eachCounters[i].name+'Counter');
			if (counter!=null && txtInput!=null) {
				counter.value = txtInput.value.length;
			}
		}
	}
}

function restrictMaxLength(txtArea, limit, counter) {
	limitTextLength(txtArea, limit)
	updateCounter(txtArea, limit, counter);
}

function limitTextLength(txtArea, limit) {
	if (txtArea.value.length >= limit) {
		txtArea.value = txtArea.value.substring(0, limit);
	}
}

function updateCounter(txtArea, limit, counter) {
	var counterRef = document.getElementById(counter);
	
	if (txtArea.value.length < limit) {
		counterRef.value = txtArea.value.length;
	}
	else {
		counterRef.value = limit;
	}
}

function filterText(txt, allowStar) {
	var invalid = "[]{}()^$|&%+?:<>!=";
	if (!allowStar) {
		invalid += "*";
	}
	
	var filtered   = "";
	var startIndex = 0;
	var endIndex   = 0;
	var lastInvalidIndex = 0;
	var invalidCount = 0;

	// For each invalid character in txt.value	
	for (var i=0,iLen=invalid.length; i<iLen; i++) {
		if (i==0) { startIndex=0;		   }
		else      { startIndex=endIndex+1; }
		
		endIndex = txt.value.indexOf(invalid.charAt(i));
		
		if (endIndex>-1) {
			filtered = txt.value.substring(startIndex, endIndex);
			invalidCount++;
			lastInvalidIndex = endIndex;
		}
	}
	
	txtValueLenMinuxInvalidCount = txt.value.length-invalidCount;
	
	if (filtered.length>0 || invalidCount>0) {
		if (txtValueLenMinuxInvalidCount >= lastInvalidIndex) {
			filtered += txt.value.substring(lastInvalidIndex+1);
		}
		
		txt.value = filtered;
		alert("Please do not use any of the following characters in your profile name:\n"+invalid);
	}
}
