function jq_form_validate(f) 
{
    var valid = true;	
    jQuery('#publication').find(".required").each(function(el){	
        if (isEmpty($(this).val()) ) {
            valid= false;
            $(this).addClass("notvalid");
        }
    });
    if ( !valid ) {
        alert("Formulaire incomplet !");
    }
    return valid;
}

function isEmpty(value) 
{
    if (value) {
        for (var i= 0; i < value.length; i++) {
            var c = value.charAt(i);
            if ((c != ' ') && (c != '\n') && (c != '\t')) {
                return false;
            }
        }
        return true;
    } else {
        return true;
    }
}

jQuery(function() {
    $(".required").focus(function() {
        $(this).removeClass("notvalid");
    });
    
    $('#publication').submit(function() {
        if( jq_form_validate('#publication') ) {
            return true;
        } else {
            return false;
        }
    });
    
});