jQuery.fn.ieFixButtons = function () {
    return /MSIE [567]\./i.test(window.navigator.userAgent) ?
    this.find('button[type=submit]').click(function () {
        jQuery(this.form).bind('submit', { button: jQuery(this) }, function (event) {
            var $button = event.data.button;
            var m = $button.get(0).outerHTML.match(/value\s*=\s*['"]([^'"]*)['"]/);
            var val = (m ? m[1] : '');

            var $input = jQuery('<input type="hidden" ' +
                ($button.attr('name') ? 'name="' + $button.attr('name') + '" ' : '') +
                '" value="' + val + '" />');

            jQuery(this).append($input);

            jQuery.each(jQuery(this).find('button'), function () {
                jQuery(this).attr('name', '');
            });
        });
    })
    .end()
    : this;
};

jQuery.fn.maxLength = function(max){
	this.each(function(){
		//Get the type of the matched element
		var type = this.tagName.toLowerCase();
		//If the type property exists, save it in lower case
		var inputType = this.type? this.type.toLowerCase() : null;
		//Check if is a input type=text OR type=password
		if(type == "input" && inputType == "text" || inputType == "password"){
			//Apply the standard maxLength
			this.maxLength = max;
		}
		//Check if the element is a textarea
		else if(type == "textarea"){
			//Add the key press event
			this.onkeypress = function(e){
				//Get the event object (for IE)
				var ob = e || event;
				//Get the code of key pressed
				var keyCode = ob.keyCode;
				//Check if it has a selected text
				var hasSelection = document.selection? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd;
				//return false if can't write more
				return !(this.value.length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !ob.ctrlKey && !ob.altKey && !hasSelection);
			};
			//Add the key up event
			this.onkeyup = function(){
				//If the keypress fail and allow write more text that required, this event will remove it
				if(this.value.length > max){
					this.value = this.value.substring(0,max);
				}
			};
		}
	});
};

