var IE=(navigator.appName.toLowerCase().indexOf("microsoft")!=-1)?true:false;
var NS=(navigator.appName.toLowerCase().indexOf("netscape")!=-1)?true:false;
var MAC=(navigator.appVersion.toLowerCase().indexOf("mac")!=-1)?true:false;
var realLength=0;
var textObj=null;
var maxLength=0;
var updateTimer=null;
var useCounter=false;
var lastLeftChars=0;
var alertBox=false;
function onError(){
	top.location="javascript:";
}
function init(obj,max,counter,msg){
	textObj=obj;
	realLength=obj.value.length;
	maxLength=max;
	useCounter=counter;
	alertBox=msg;
	obj.onblur=new Function("fixPaste();if(updateTimer) top.clearTimeout(updateTimer)");
	obj.onkeypress=watchMax;
}
function fixPaste(){
	realLength=textObj.value.length;
	writeToLayer();
	if(realLength>maxLength){
		alert("Warning! Your Text has more than "+maxLength+" characters and will be truncated!");
		textObj.value=textObj.value.substring(0,maxLength);
	}
}
function watchMax(e){
	var keyCode=(NS)?e.which:event.keyCode;
	if(realLength>=maxLength && keyCode!=8){
		if(alertBox) alert("Maximum number of characters ("+maxLength+") reached!");
		return false
	}
	else{
		if(!MAC) return true;
	}
}
function writeToLayer(){
	var leftChars=maxLength-realLength;
	if(leftChars<0) leftChars=0;
	if(leftChars>maxLength) leftChars=maxLength;
	if(lastLeftChars!=leftChars){
		lastLeftChars=leftChars;
		var strOutput="<SPAN CLASS='hdOne'>";
		strOutput+=leftChars;
		if(leftChars==1) strOutput+="</SPAN> <SPAN CLASS='grey'>char left</SPAN>";
		else strOutput+="</SPAN> <SPAN CLASS='grey'>chars left</SPAN>";
		if(NS){
			var NSLayer=eval("document.layers."+textObj.name+"Lyr");
			NSLayer.doc=eval("document.layers."+textObj.name+"Lyr.document");
			NSLayer.top=document.anchors[textObj.name+"Anch"].y;
			NSLayer.left=document.anchors[textObj.name+"Anch"].x;
			NSLayer.doc.open();
			NSLayer.doc.write(strOutput);
			NSLayer.doc.close();
		}
		else if(IE){
			var IELayer=eval("document.all."+textObj.name+"Lyr");
			IELayer.innerHTML=strOutput;
		}
	}
}
function setMax(obj,max,counter,msg){
	if(arguments.length>0) init(obj,max,counter,msg);
	else realLength=textObj.value.length;
	if(useCounter) writeToLayer();
	if(updateTimer) top.clearTimeout(updateTimer);
	updateTimer=top.setTimeout("setMax()",1);
}
