/**
 * YOU ARE FREE TO USE THIS CODE IF YOU HOLD THE REFERENCE TO THE AUTHOR
 * Plugin for jQuery that delimites the maximum of characteres in inputs and textareas
 * @author: Iván Guardado Castro
 * @email: dev.ivangc@gmail.com
 * @website: http://yensdesign.com/
 */
;(function($) {
    
    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);
                    }
                    $('#charleft_'+this.id).text(max - this.value.length);
                };
            }
        });
    };

})(jQuery);

