events = { };

events.add = function(o, e, f) {
    if (o.addEventListener) { o.addEventListener(e, f, true); }
    if (o.attachEvent)      { o.attachEvent('on' + e, f);     }
};

events.format = function(e) {
    if (typeof(e) == 'undefined') { var e = window.event; }
    s = e.target ? e.target : e.srcElement;
    if (s.nodeType == 3) { s = s.parentNode; }
    return s;
};

browser = { };

browser.modeCompilance = function() {
    return (navigator.appName.indexOf('Microsoft Internet Explorer') > -1) ? false : true;
};

keys = { };

keys.getKeyCode = function(e) {
    return (browser.modeCompilance()) ? e.which : event.keyCode;
};

keys.getCharFromKeyCode = function(e) {
	var c = keys.getKeyCode(e);
    var k = String.fromCharCode();
    switch (c) {
        case 37: k = 'ok'; break;
        case 38: k = 'ok'; break;
        case 39: k = 'ok'; break;
        case 40: k = 'ok'; break;
        case  8: k = 'ok'; break;
        case 13: k = 'ok'; break;
        case 16: k = 'ok'; break;
        case 18: k = 'ok'; break;
        case 45: k = 'ok'; break;
        case 46: k = 'ok'; break;
        case 36: k = 'ok'; break;
        case 35: k = 'ok'; break;
        case 33: k = 'ok'; break;
        case 34: k = 'ok'; break;
        case 20: k = 'ok'; break;
        default: k = 'no';
    }
    return k;
};

function verifyLength(e) {
	var f = events.format(e);
	var n = document.getElementById('nchar');
	if (f.value.length >= 250 && keys.getCharFromKeyCode(e) != 'ok') {
		if (window.event) {
			event.returnValue = false;
		} else {
			e.preventDefault();
		}
	}
	f.value = f.value.substring(0,250);
}

function modifyLength(e) {
	var f = events.format(e);
	var n = document.getElementById('nchar');
	n.innerHTML = (250 - parseInt(f.value.length));
}

function resetLength() {
	with (document) {
		getElementById('nome').value      = '';
		getElementById('mensagem').value  = '';
		getElementById('nchar').innerHTML = 250;
	}
}

function verifyForm(e) {
	var n = document.getElementById('nome').value;
	var m = document.getElementById('mensagem').value;
	if (!n.length || !m.length) {
		alert('Para enviar um recado, você deve preencher seu nome e a mensagem que deseja enviar!');
		if (window.event) {
			event.returnValue = false;
		} else {
			e.preventDefault();
		}
	}
}

function main() {
	var msg = document.getElementById('mensagem');
	var clr = document.getElementById('reset');
	var frm = document.getElementsByTagName('form')[0];
	events.add(frm, 'submit', verifyForm);
	events.add(msg, 'keyup', modifyLength);
	events.add(msg, 'keydown', verifyLength);
	events.add(clr, 'click', resetLength);
}

if (window) {
    window.onload = main;
}