// form validation function //
function validate(form) {
    var nome = form.nome.value;
    var morada = form.morada.value;
    var bi = form.bi.value;
    var ipin = form.ipin.value;
    var username = form.username.value;
    var password = form.password.value;
    var re_password = form.re_password.value;
    var mail = form.mail.value;
    var tlm = form.tlm.value;
    var telefone = form.telefone.value;
    var n_licenca = form.n_licenca.value;

    var nameRegex = /^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/;
    var onlytextRegex = /^[a-z' 'A-ZãÃáÁàÀêÊéÉèÈíÍìÌôÔõÕóÓòÒúÚùÙûÛçÇ.;:,ºª]+$/;
    var onlynumbersRegex = /^\d+$/
    var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
    var messageRegex = new RegExp(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/gim);
    var dataRegex = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
    var ipinRegex = /^[a-zA-Z]{3}\d{7}$/;

    if (nome == "") {
        inlineMsg('nome', 'Deve preencher este campo.', 2);
        return false;
    }
    if (!nome.match(onlytextRegex)) {
        inlineMsg('nome', 'O nome é inválido.', 2);
        return false;
    }

    if (morada == "") {
        inlineMsg('morada', 'Deve preencher este campo.', 2);
        return false;
    }

    if (bi == "") {
        inlineMsg('bi', 'Deve preencher este campo.', 2);
        return false;
    }

    if (!bi.match(onlynumbersRegex)) {
        inlineMsg('bi', 'Só pode introduzir números.', 5);
        return false;
    }

    if (!ipin == "") {
        if (!ipin.match(ipinRegex)) {
            inlineMsg('ipin', 'Ipin Inválido.', 5);
            return false;
        }
    }

    if (username == "") {
        inlineMsg('username', 'Deve preencher este campo.', 2);
        return false;
    }

    if (password == "") {
        inlineMsg('password', 'Deve preencher este campo.', 2);
        return false;
    }

    if (!password.match(re_password)) {
        inlineMsg('password', 'As passwords não coincidem.', 2);
        return false;
    }

    if (re_password == "") {
        inlineMsg('re_password', 'Deve preencher este campo.', 2);
        return false;
    }

    if (mail == "") {
        inlineMsg('mail', 'Deve preencher este campo.', 2);
        return false;
    }

    if (!mail.match(emailRegex)) {
        inlineMsg('mail', 'Verifique o endereço de email.', 5);
        return false;
    }

    if (!tlm == "") {
        if (!tlm.match(onlynumbersRegex)) {
            inlineMsg('tlm', 'Só pode introduzir números.', 5);
            return false;
        }
    }

    if (!telefone == "") {
        if (!telefone.match(onlynumbersRegex)) {
            inlineMsg('telefone', 'Só pode introduzir números.', 5);
            return false;
        }
    }

    if (!n_licenca == "") {
        if (!n_licenca.match(onlynumbersRegex)) {
            inlineMsg('n_licenca', 'Só pode introduzir números.', 5);
            return false;
        }
    }

    return true;
}


// START OF MESSAGE SCRIPT //

var MSGTIMER = 200;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

function inlineMsg(target, string, autohide) {
    var msg;
    var msgcontent;
    if (!$('#msg').length) {
        msg = $('<div>').attr('id', 'msg').appendTo("body");
        msgcontent = $('<div>').attr('id', 'msgcontent').appendTo($('#msg'));

    } else {
        msg = $('#msg');
        msgcontent = $('#msgcontent');

    }
    msgcontent.html(string);

    var msgheight = msg.height();
    var targetdiv = $('#' + target);
    var targetheight = targetdiv.height();
    var targetwidth = targetdiv.width();
    var topposition = targetdiv.offset().top - ((msgheight - targetheight) / 2);
    var leftposition = targetdiv.offset().left + targetwidth + MSGOFFSET;
    if (!autohide) {
        autohide = MSGHIDE;
    }
    targetdiv.focus();
    msg.css('top', topposition).css('left', leftposition).fadeIn(MSGTIMER).delay(autohide * 1000).fadeOut(MSGTIMER);
}
