function addEvent( obj, type, fn, tmp ) {
if( obj.attachEvent ) {
obj["e"+type+fn] = fn;
obj[type+fn] = function(){obj["e"+type+fn]( window.event );}
obj.attachEvent( "on"+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
}

function removeEvent( obj, type, fn ) {
if( obj.detachEvent ) {
obj.detachEvent( "on"+type, obj[type+fn] );
obj[type+fn] = null;
} else
obj.removeEventListener( type, fn, false );
}


// Declare the namespace
var fdTextareaController;

(function() {
function fdTextareaMaxlength(inp, maxlength) {
this._inp       = inp;
this._max       = Number(maxlength);
var self        = this;

self.maxlength = function() {
if(self._inp.disabled) return false;

if(self._inp.value.length > self._max) {
self._inp.value = self._inp.value.substring(0, self._max);
return false;
}

return true;
}

addEvent(self._inp, 'keypress', self.maxlength, false);
addEvent(self._inp, 'blur',     self.maxlength, false);
self.maxlength();
};

// Construct the previously declared namespace
fdTextareaController = {
textareas: [],

_construct: function( e ) {

var regExp_1 = /fd_max_([0-9]+){1}/ig;

var textareas = document.getElementsByTagName("textarea");

for(var i = 0, textarea; textarea = textareas[i]; i++) {
if(textarea.className && textarea.className.search(regExp_1) != -1) {
 max = parseInt(textarea.className.match(regExp_1)[0].replace(/fd_max_/ig, ''));
 if(max) fdTextareaController.textareas[fdTextareaController.textareas.length] = new fdTextareaMaxlength(textarea, max);
}
}

},

_deconstruct: function( e ) {

}
}
})();

addEvent(window, 'load', fdTextareaController._construct, false);
addEvent(window, 'unload', fdTextareaController._deconstruct, false);