// Être compatible avec MSIE...
if ('undefined' == typeof Node)
    Node = { ELEMENT_NODE: 1, TEXT_NODE: 3 };

function addListener(element, baseName, handler) {
    if (element.addEventListener)
        element.addEventListener(baseName, handler, false);
    else if (element.attachEvent)
        element.attachEvent('on' + baseName, handler);
} // addListener

function decorateLabels() {
    document.getElementById("pseudo_Req").focus()
    var labels = document.getElementsByTagName('label');
    for (var index = 0; index < labels.length; ++index) {
        var label = labels[index];
        if (label.accessKey) {
            var ak = label.accessKey.toUpperCase();
            decorateNodeForAccessKey(label, ak);
        }
        if (label.htmlFor) {
            var elt = document.getElementById(label.htmlFor);
            if (!elt)
                continue;
            if (elt.id.match(/_Req/))
                label.className += ' required';
        }
    }
} // decorateLabels

function decorateNodeForAccessKey(elt, key) {
    if (Node.ELEMENT_NODE == elt.nodeType) {
        var node = elt.firstChild;
        while (node && !decorateNodeForAccessKey(node, key))
            node = node.nextSibling;
        // Si node n'est pas null, on a trouvé l'AK dans un descendant
        // et on a décoré : on renvoie non-null, donc équivalent true
        return node;
    }
    if (Node.TEXT_NODE != elt.nodeType)
        return false;
    var pos = elt.nodeValue.toUpperCase().indexOf(key);
    if (-1 == pos)
        return false;
    var suffix = elt.nodeValue.substring(pos + 1);
    var akSpan = document.createElement('span');
    akSpan.className = 'accessKey';
    akSpan.appendChild(document.createTextNode(elt.nodeValue.charAt(pos)));
    // On évite node.splitText et node.deleteData sur MSIE...  On manipule
    // nodeValue et on crée le deuxième noeud Texte manuellement.
    elt.nodeValue = elt.nodeValue.substring(0, pos);
    elt.parentNode.appendChild(akSpan);
    elt.parentNode.appendChild(document.createTextNode(suffix));
    // Très important pour éviter une récursion infinie !
    return true;
} // decorateNodeForAccessKey

function addFormChecks() {
    var forms = document.forms;
    for (var index = 0; index < forms.length; ++index) {
        var form = forms.item(index);
        addListener(form, 'submit', verifMsg);
    }
} // addFormChecks

function verifEmail(adresse) {
    var place = adresse.indexOf("@",1);
    var point = adresse.indexOf(".",place+1);
    return ((place > -1) && (adresse.length >2) && (point > 1));
} // verifEmail

function verifMsg(e) {
    var pseudo = document.ajout.pseudo.value;
    var email= document.ajout.email.value;
    var message = document.ajout.message.value;
    var code = document.ajout.code.value;
    var errors = '';
    var faulty = null;
    if (!pseudo) {
        errors += 'Vous avez oublié votre Nom ! \n';
        faulty = faulty || document.getElementById('pseudo_Req');
    }
    if (!verifEmail(email) && email) {
        errors += 'Votre email ne semble pas bon ! \n';
        faulty = faulty || document.getElementById('email');
    }
    if (!message) {
        errors += 'Votre message est vide ! \n';
        faulty = faulty || document.getElementById('message_Req');
    }
    if (!code) {
        errors += 'Votre code de validation est vide ! \n';
        faulty = faulty || document.getElementById('message_Req');
    }
    if (!faulty)
        return;
    stopEvent(e);
    alert(errors);
    faulty.focus();
} // verifMsg

function stopEvent(e) {
    if (e.stopPropagation) {
        e.stopPropagation();
        e.preventDefault();
    } else {
        e.cancelBubble = true;
        e.returnValue = false;
    }
} // stopEvent

function messageConfirmSup() {
        var ok=confirm("ATTENTION : LA SUPPRESSION EST IRREVERSIBLE !!!\n\nEtes-vous sûr de vouloir supprimer ce message ?\n\n");
        return (ok);
} // messageConfirmsup

addListener(window, 'load', decorateLabels);
addListener(window, 'load', addFormChecks);
