// -------------------
// xstextareamaxlength
// -------------------
(function($) 
{
	$.fn.xstextareamaxlength = function(options)
	{
		var settings = jQuery.extend(
		{
			events: [],
			maxLength: 30,
			textAreaErrorClass: '',

			messageDIV: false,
			messageDIVClass: '',
			messageOKFormat: '',
			messageOKClass: '',
			messageErrorFormat: '',
			messageErrorClass: ''

		}, options );
		
		// Add the default event
		$.merge(settings.events, ['keyup']);

		return this.each(function() 
		{
			var item = $(this);
			var currentLength = $(this).val().length;
			var valid = true;

			function checkState() {
				if (currentLength > settings.maxLength) {
					item.addClass(settings.textAreaErrorClass);
					item.val(item.val().substr(0,settings.maxLength));
					currentLength = settings.maxLength;
					valid = false;
				}
				else {
					if(item.hasClass(settings.textAreaErrorClass)) 
						item.removeClass(settings.textAreaErrorClass);
					valid = true;

				}
				updateMessage();
			}

			function updateMessage() {
				if (!settings.messageDIV)
					return;
					
			    var messageargs = [currentLength, settings.maxLength, settings.maxLength - currentLength];
	
				
				var content = '';
				var divclass = '';
				if (valid && settings.messageOKFormat) {
					content = messageFormat(settings.messageOKFormat, messageargs);
					divclass = settings.messageOKClass;
				}
				else if (!valid && settings.messageErrorFormat) {
					content = messageFormat(settings.messageErrorFormat, messageargs);
					divclass = settings.messageErrorClass;
				}
				item.next("div").html(content);
				item.next("div").removeClass().addClass(divclass);
			}

      		
      		function messageFormat(string, replacements) {
    			return string.replace(/\{(\d+)\}/g, function() {
        			return replacements[arguments[1]];
    			});
			}

			function validateElement() 
			{
				var ret = false;
				
				if(item.is('textarea')) {
					ret = true;
				} else if(item.filter("input[type=text]")) {
					ret = true;
				} else if(item.filter("input[type=password]")) {
					ret = true;
				}

				return ret;
			}


			if(!validateElement()) 
			{
				return false;
			}

			$.each(settings.events, function (i, n) {
				item.bind(n, function(e) {
					currentLength = item.val().length;
					checkState();
				});
			});


			if(settings.messageDIV) 
			{
				item.after($('<div class="ShoppingBasketDetailInformationBoxMaxLengthDIV"/>').html(''));
			}
			

		});
	};
})(jQuery);

