var notifBar = document.getElementById('NOTIFBAR'); notifBar.children[1].children[2].addEventListener('click', function(e){ remClass(notifBar, 'active'); }, false); var inPrenom = document.getElementById('crPrenom'); var inNom = document.getElementById('crNom'); var inAdr = document.getElementById('crAdr'); var inAdr2 = document.getElementById('crAdr2'); var inCP = document.getElementById('crCP'); var inVille = document.getElementById('crVille'); var inDN = document.getElementById('crDN'); var inLN = document.getElementById('crLN'); var inSecu = document.getElementById('crSecu'); var inMedecin = document.getElementById('crMedecin'); var inCivil = document.querySelectorAll('.crCiv'); var sbCreer = document.getElementById('sbCreer'); // SUBMIT var inCk = new inputChecker(); // format de la date var dateFormat = new formatChecker(null, 'Ji/Mi/Aiii', { 'J': '[0-3]', 'M': '[0-1]', 'A': '[1-2]' } ); // format du numéro de sécu var secuFormat = new formatChecker(null, 'S ii Mi ii iii iii ii', { 'S': '[0-1]', 'M': '[0-1]' } ); inCk.append( inCP, new formatChecker( null, 'iiiii'), '09000'); // on ajoute le CODE_POSTAL au vérificateur de champs inCk.append( inDN, dateFormat, '01/01/2015'); // on ajoute la DATE_NAISSANCE au vérificateur de champs inCk.append( inSecu, secuFormat, '1 99 19 99 999 999 99'); // on ajoute le NUM_SECU au vérificateur de champs // var completeAccentList = "àAAÀAAÁÂÒÓÔÕÖØòÒÓÔÕ-ÖØòó_ôõöøÈÉÊËèéêëÇçÒÓÔÕÖØòÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"; var accentList = 'àÀÈÉÊËèéêëçîïúû'; /* Met à jour l'état visuel d'un si sa valeur correspond aux initères * * @pInputElement l'élément en question * @pMinLength la taille minimum autorisée * @pMaxLength la taille maximum autorisée * @optAlpha [OPT] TRUE si uniquement alphanumérique */ function checkVARCHAR(pInputElement, pMinLength, pMaxLength, optAlpha){ var optAlpha = (arguments.length > 3) ? optAlpha : false; optAlpha = (typeof optAlpha == 'boolean') ? optAlpha : false; var varcharRegExp; if( optAlpha ) varcharRegExp = new RegExp('^(['+accentList+'a-z]{'+pMinLength+','+pMaxLength+'})$', 'i'); // only alpha characters else varcharRegExp = new RegExp('^(['+accentList+'\\w -]{'+ pMinLength+','+pMaxLength+'})$', 'i'); // any word character if( pInputElement.value.match(varcharRegExp) != null || pInputElement.value == '' ){ // si champ correct addClass(pInputElement, 'validated'); if( pInputElement.required ) remClass(pInputElement, 'invalid'); }else{ remClass(pInputElement, 'validated'); if( pInputElement.required ) addClass(pInputElement, 'invalid'); } } ////////////////////////////// // PRENOM & NOM (VARCHAR 45)// ////////////////////////////// inPrenom.addEventListener('keyup', function(e){ checkVARCHAR(e.target, 3, 45, true); }, false); inNom.addEventListener('keyup', function(e){ checkVARCHAR(e.target, 3, 45, true); }, false); ////////////////////////////////////// // ADRESSE & ADRESSE2 (VARCHAR 255) // ////////////////////////////////////// inAdr.addEventListener('keyup', function(e){ checkVARCHAR(e.target, 5, 255); }, false); inAdr2.addEventListener('keyup', function(e){ checkVARCHAR(e.target, 5, 255); }, false); //////////////////////////// // VILLE & LIEU_NAISSANCE // //////////////////////////// inVille.addEventListener('keyup', function(e){ checkVARCHAR(e.target, 3, 50); }, false); inLN.addEventListener('keyup', function(e){ checkVARCHAR(e.target, 3, 50); }, false); ///////////////// // CODE POSTAL // ///////////////// inCP.addEventListener('keyup', function(e){ if( inCk.check(inCP) ) addClass(inCP, 'validated'); // on active la classe si correct else{ // si incorrect remClass(inCP, 'validated'); // on désactive la classe inCk.correct(inCP, false); // on corrige partiellement if( inCk.check(inCP) ) addClass(inCP, 'validated'); // mise à jour de la classe après correction } }, false); /////////////////////// // DATE DE NAISSANCE // /////////////////////// inDN.addEventListener('keyup', function(e){ if( inCk.check(inDN) ) addClass(inDN, 'validated'); // on active la classe si correct else{ // si incorrect remClass(inDN, 'validated'); // on désactive la classe inCk.correct(inDN, false); // on corrige partiellement if( inCk.check(inDN) ) addClass(inDN, 'validated'); // mise à jour de la classe après correction } }, false); //////////////////// // NUMERO DE SECU // //////////////////// function checkSecuControlKey(pNumSecu){ var NIR = pNumSecu.slice(0,-2).replace(/ /g, ''); var key = pNumSecu.slice(-2); return 97-(NIR%97) == key; } inSecu.addEventListener('keyup', function(e){ if( inCk.check(inSecu) ){ if( checkSecuControlKey(inSecu.value) ){ // si la clé est correcte addClass(inSecu, 'validated'); // on dis que le champ est valide remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide }else{ remClass(inSecu, 'validated'); // on dis que le champ n'est pas valide addClass(inSecu, 'invalid'); // on dis qu'il est invalide } }else{ // si incorrect remClass(inSecu, 'validated'); // on désactive la classe remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide inCk.correct(inSecu, false); // on corrige partiellement if( inCk.check(inSecu) ){ if( checkSecuControlKey(inSecu.value) ){ // si la clé est correcte addClass(inSecu, 'validated'); // on dis que le champ est valide remClass(inSecu, 'invalid'); // on dis qu'il n'est pas invalide }else{ remClass(inSecu, 'validated'); // on dis que le champ n'est pas valide addClass(inSecu, 'invalid'); // on dis qu'il est invalide } } } }, false); sbCreer.addEventListener('click', function(e){ e.preventDefault(); // on annule le submit() var formElements = sbCreer.parentNode.children; var checker = true; // pour chaque du formulaire (fils direct uniquement) for( var i = 0 ; i < formElements.length ; i++ ){ if( formElements[i] instanceof HTMLInputElement && formElements[i].type == 'text' ){ // si le champ est requis (required) if( formElements[i].required ) checker = checker && formElements[i].className.indexOf('validated') > -1; // TRUE => validé (niveau interface) // si le champ n'est pas requis et pas vide, on le vide else if( formElements[i].value != '' && formElements[i].className.indexOf('validated') < 0 ) // si incorrect et pas vide formElements[i].value = ''; // on vide }} var inputCheckerValid = inCk.checkAll(); if( inputCheckerValid && checker ){ // si tout es ok uniquement, on submit() var request = { prenom: inPrenom.value, nom: inNom.value, civilite: (inCivil[0].checked) ? inCivil[0].value : inCivil[1].value, adresse: inAdr.value, adresse2: (inAdr2.value.length>0) ? inAdr2.value : null, code_postal: inCP.value, ville: inVille.value, date_naissance: inDN.value, lieu_naissance: inLN.value, num_secu: inSecu.value, medecin_traitant: (inMedecin.value!='.') ? inMedecin.value : null }; API.send('Patient:add', request, function(e){ notif(e.status, e.title, e.message); if( e.status == 'success' ) // on vide le formulaire si on a 'success' sbCreer.parentNode.reset(); }, false); }else{ // sinon on affiche l'erreur notif('error', 'Oups!', 'Certains champs sont requis ou incorrects.'); } }, false);