document.body.className = ((document.body.className) ? document.body.className + ' js-enabled' : 'js-enabled'); function onFormSubmit() { event.preventDefault(); } function searchCertificate() { try{ const getElement = (id) => document.getElementById(id); const addErrorClass = (element) => element.classList.add('govuk-input--error'); const removeErrorClass = (element) => element.classList.remove('govuk-input--error'); const documentId = getElement("documentId"); const birthDay = getElement("dob-day"); const birthMonth = getElement("dob-month"); const birthYear = getElement("dob-year"); const docIdDiv = getElement("div-docid"); const dobDiv = getElement("div-dob"); const ulClass = document.getElementsByClassName("govuk-error-summary__list")[0]; docIdDiv.classList.remove('govuk-form-group--error'); dobDiv.classList.remove('govuk-form-group--error'); removeErrorClass(documentId); removeErrorClass(birthDay); removeErrorClass(birthMonth); removeErrorClass(birthYear); ulClass.innerHTML = ''; let showErrorDiv = false; let isChildErrorLogCreated = false; let listInnerHTML = ''; const createErrorEntry = (element, message) => { showErrorDiv = true; const entry = document.createElement('li'); entry.innerHTML = `${message}`; ulClass.appendChild(entry); }; const createErrorChildElement = (message) => { isChildErrorLogCreated = true; const pTag = getElement("dob-error") || document.createElement('p'); pTag.className = "govuk-error-message"; pTag.id = 'dob-error'; pTag.innerHTML = `Error: ${message}`; dobDiv.classList.add('govuk-form-group--error'); dobDiv.children[0].firstElementChild.before(pTag); return true; }; const validateEmptyField = (element, message) => { if (element.value === "") { createErrorEntry(element, `Enter ${message}`); addErrorClass(element); if (!isChildErrorLogCreated) { isChildErrorLogCreated = createErrorChildElement(`Enter ${message}`); } } else { const errorElement = getElement(`${element.id}-error`); if (errorElement !== null) { errorElement.parentNode.removeChild(errorElement); } } }; if(documentId.value == ""){ createErrorEntry(documentId,'Enter the document ID'); let pDocumentTag = document.getElementById("documentId-error"); if(pDocumentTag == null){ pDocumentTag = document.createElement('p'); pDocumentTag.className = "govuk-error-message"; pDocumentTag.id = 'documentId-error'; pDocumentTag.innerHTML = 'Error: Enter the document ID'; docIdDiv.insertBefore(pDocumentTag,docIdDiv.children[1]); } docIdDiv.classList.add('govuk-form-group--error'); documentId.classList.add('govuk-input--error'); } else{ if(document.getElementById("documentId-error") != null){ document.getElementById("documentId-error").parentNode.removeChild(document.getElementById("documentId-error")); } } validateEmptyField(birthDay, 'a day'); validateEmptyField(birthMonth, 'a month'); validateEmptyField(birthYear, 'a year'); if (birthDay.value != "" && birthMonth.value != "" && birthYear.value != "") { const birthDate = `${birthYear.value}-${birthMonth.value}-${birthDay.value}`; if (!isValidDate(birthYear.value, birthMonth.value, birthDay.value)) { createErrorEntry(dobDiv, 'Please enter a valid date of birth'); if (!isChildErrorLogCreated) { isChildErrorLogCreated = createErrorChildElement('Please enter a valid date of birth'); } } else{ const dob = new Date(parseInt(birthYear.value), parseInt(birthMonth.value) - 1, parseInt(birthDay.value)); const currentDate = new Date(); if (dob > currentDate) { createErrorEntry(dobDiv, 'Please enter a date of birth from the past'); if (!isChildErrorLogCreated) { isChildErrorLogCreated = createErrorChildElement('Please enter a date of birth from the past'); } } else{ if(document.getElementById("dob-error") != null){ document.getElementById("dob-error").parentNode.removeChild(document.getElementById("dob-error")); } } if(!showErrorDiv){ let url = /Certificate-Search-Results/ +'?documentId=' +encodeURIComponent(documentId.value) +'&date=' + encodeURIComponent(birthDate); window.open(url, '_self'); } } } else { createErrorEntry(dobDiv, 'Please enter a valid date of birth'); if (!isChildErrorLogCreated) { isChildErrorLogCreated = createErrorChildElement('Please enter a valid date of birth'); } } getElement("errorDiv").style.display = showErrorDiv ? "block" : "none"; } catch(err){ console.log(err.message); } } function isValidDate(year,month,day) { try{ const date = `${year}-${month}-${day}`; const datePattern = /^([12]\d{3}-(0?[1-9]|1[0-2])-(0?[1-9]|[12]\d|3[01]))/; const matchArray = date.match(datePattern); if (matchArray === null) { return false; } const dateString = date.replace(/\D/g, ''); const parsedYear = parseInt(year); const parsedMonth = parseInt(month); const parsedDay = parseInt(day); const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (parsedYear % 400 === 0 || (parsedYear % 100 !== 0 && parsedYear % 4 === 0)) { daysInMonth[1] = 29; } if (parsedMonth < 1 || parsedMonth > 12 || parsedDay < 1 || parsedDay > daysInMonth[parsedMonth - 1]) { return false; } return true; } catch(err){ console.log(err.message); return false; } }