Source: http://bertrand.marne.me/polys/IMFL_web_2014/TME_JS_Formulaires.pdf