salmon.namespace.addNamespace("boots.forms.validation.maxchars");

boots.forms.validation.maxchars = {
	maxcharsEntries:{},
	init:function(){
		this.getAllMaxEntryIds();
	},
	getAllMaxEntryIds:function(){
		$("label").each(function(){
			if($(this).hasClass("maxChars")){
				boots.forms.validation.maxchars.maxcharsEntries[$(this).attr("for")] = $("label[for='"+$(this).attr("for")+"'] .maxChars span").text();
			}
		});
		var howManyItems = 0;
		for(allItems in boots.forms.validation.maxchars.maxcharsEntries){
			howManyItems++;
		}
		if(howManyItems>0){
			this.assignClasses();
		}
	},
	assignClasses:function(){
		var temp = boots.forms.validation.maxchars.maxcharsEntries;
		for(allItems in temp){
			// first run through. check if there is text already in the field and adjust label accordingly
			if($("#"+allItems).attr("value") !== undefined){
				if($("#"+allItems).attr("value").length>boots.forms.validation.maxchars.maxcharsEntries[allItems]){
					var tempString = $("#"+allItems).attr("value");
					$("#"+allItems).attr("value",tempString.slice(0,boots.forms.validation.maxchars.maxcharsEntries[allItems]));
				}
				var charsRemaining = (boots.forms.validation.maxchars.maxcharsEntries[allItems]-$("#"+allItems).attr("value").length);
				if(charsRemaining == 0){
					$("label[for='"+allItems+"'] .maxChars").addClass("charsMax").html(charsRemaining+ " characters remaining");
				} else {
					$("label[for='"+allItems+"'] .maxChars").removeClass("charsMax").html(charsRemaining+ " characters remaining");
				}
			} else {
				$("label[for='"+allItems+"'] .maxChars").removeClass("charsMax").html(boots.forms.validation.maxchars.maxcharsEntries[allItems]+ " characters maximum");
			}
			// add events to the field and check field on key up
			$("#"+allItems).keyup(function(){
				thisId = $(this).attr("id");
				if($(this).attr("value") !== undefined){
					if($(this).attr("value").length>boots.forms.validation.maxchars.maxcharsEntries[thisId]){
						var tempString = $(this).attr("value");
						$(this).attr("value",tempString.slice(0,boots.forms.validation.maxchars.maxcharsEntries[thisId]));
					}
					var charsRemaining = (boots.forms.validation.maxchars.maxcharsEntries[thisId]-$(this).attr("value").length);
					if(charsRemaining == 0){
						$("label[for='"+thisId+"'] .maxChars").addClass("charsMax").html(charsRemaining+ " characters remaining");
					} else {
						$("label[for='"+thisId+"'] .maxChars").removeClass("charsMax").html(charsRemaining+ " characters remaining");
					}
				} else {
					$("label[for='"+thisId+"'] .maxChars").removeClass("charsMax").html(boots.forms.validation.maxchars.maxcharsEntries[thisId]+ " characters maximum");
				}
			});
		}
	}
}

$(document).ready(function(){ boots.forms.validation.maxchars.init() });
