Important Patient Notice: Please be advised of temporary changes to our office schedule. For assistance or appointment information, call (972) 514-3530.

4500 Hillcrest Rd, Ste 185, Frisco, TX 75035

5800 Communications Parkway, Plano, TX 75093


`);preview.document.close();}if (button) {button.disabled = true;button.textContent = 'Preparing PDF...';}try {const pdf = await createPdf( snapshot, { editable: true } );const pdfFileName = buildPdfFileName( snapshot );const blob = pdf.output( 'blob' );const namedPdfFile = new File( [blob], pdfFileName, { type: 'application/pdf', lastModified: Date.now() } );const blobUrl = URL.createObjectURL( namedPdfFile );if (preview) {const friendlyPath = '/' + encodeURIComponent( pdfFileName );try {preview.history.replaceState( {}, '', friendlyPath );} catch (exception) {}const safeFileName = escapeHtml( pdfFileName );preview.document.open();preview.document.write(`${safeFileName}
${safeFileName}
Download PDF
`);preview.document.close();let blobRevoked = false;const revokeBlobUrl = function () {if (blobRevoked) { return; }blobRevoked = true;URL.revokeObjectURL( blobUrl );};preview.addEventListener( 'beforeunload', revokeBlobUrl, { once: true } );setTimeout( revokeBlobUrl, 3600000 );}else {const downloadLink = document.createElement( 'a' );downloadLink.href = blobUrl;downloadLink.download = pdfFileName;downloadLink.style.display = 'none';document.body.appendChild( downloadLink );downloadLink.click();downloadLink.remove();setTimeout( function () {URL.revokeObjectURL( blobUrl );}, 60000 );}}catch (error) {if (preview) { preview.close(); }alert( 'The PDF could not be created. Please refresh the page and try again.' );console.error( 'TGA PDF error:', error );}finally {if (button) {button.disabled = false;button.textContent = originalText;}}}/* ===================================================== PDF BUTTON ===================================================== */function addPdfButton( form ) {const oldButton = form.querySelector( '.tga-print-current-button' );if (oldButton) { oldButton.remove(); }const field = form.querySelector( '.forminator-row-last .forminator-field' );if (!field) { return; }const button = document.createElement( 'button' );button.type = 'button';button.className = 'tga-print-current-button';button.textContent = 'Print / Save as PDF';field.appendChild( button );button.addEventListener( 'click', function () {const snapshot = submittedSnapshot || captureSnapshot( form );openPdf( snapshot, button );} );}/* ===================================================== SUCCESS ===================================================== */function removeSuccessBanner() {const old = widget.querySelector( '.tga-success-banner' );if (old) { old.remove(); }}function showSuccessBanner( form ) {removeSuccessBanner();const banner = document.createElement( 'div' );banner.className = 'tga-success-banner';banner.innerHTML = `
Request Submitted Successfully Your submitted copy is ready to print or save as a PDF.
`;widget.insertBefore( banner, form );const button = banner.querySelector( '.tga-success-print' );button.addEventListener( 'click', function () {if ( submittedSnapshot ) {openPdf( submittedSnapshot, button );}} );banner.scrollIntoView({ behavior: 'smooth', block: 'center' });}function handleSuccess( form ) {if ( submissionHandled ) { return; }submissionHandled = true;form.classList.remove( 'tga-is-submitting' );preparingSubmissionPdf = false;allowPreparedSubmit = false;if ( pendingSnapshot ) {submittedSnapshot = pendingSnapshot;}pendingSnapshot = null;showSuccessBanner( form );}/* ===================================================== SUBMIT / VALIDATION STATE ===================================================== */function formHasValidationErrors( form ) {if ( form.querySelector( '.forminator-has_error, [aria-invalid="true"]' ) ) { return true; }const errorMessages = form.querySelectorAll( '.forminator-error-message' );return Array.from( errorMessages ).some( function (message) {return !!String( message.textContent || '' ).trim();} );}function resetSubmitAfterValidation( form ) {preparingSubmissionPdf = false;allowPreparedSubmit = false;form.classList.remove( 'tga-is-submitting' );const submitButton = form.querySelector( '.forminator-button-submit' );if (submitButton) {submitButton.disabled = false;submitButton.removeAttribute( 'aria-disabled' );submitButton.textContent = submitButton.dataset.tgaOriginalText || 'Submit';}pendingSnapshot = null;}/* ===================================================== INITIALIZE ===================================================== */function initializeForm( form ) {if ( form.dataset.tgaV9 === '1' ) { return; }form.dataset.tgaV9 = '1';insertHeader();removePlaceholders( form );decorateForm( form );hideSubmissionPdfField( form );signatureApi = createSignaturePad( form );addPdfButton( form );const initialSubmitButton = form.querySelector( '.forminator-button-submit' );if ( initialSubmitButton && !initialSubmitButton.dataset.tgaOriginalText ) {initialSubmitButton.dataset.tgaOriginalText = initialSubmitButton.textContent.trim() || 'Submit';}/* If native browser validation blocks submission, immediately restore the button so the patient can correct the field and submit again. */form.addEventListener( 'invalid', function () {setTimeout( function () {resetSubmitAfterValidation( form );}, 0 );}, true );form.addEventListener( 'submit', function (event) {/* SECOND PASS: the PDF has already been generated and attached to upload-2, so Forminator can perform the real submit. */if ( allowPreparedSubmit ) {allowPreparedSubmit = false;return true;}if ( !signatureApi || !signatureApi.hasSignature() ) {event.preventDefault();event.stopImmediatePropagation();if ( signatureApi ) {signatureApi.showError( 'Please provide your signature before submitting the form.' );signatureApi.focus();}return false;}if ( !signatureApi.sync() ) {event.preventDefault();event.stopImmediatePropagation();signatureApi.focus();return false;}event.preventDefault();event.stopImmediatePropagation();if ( preparingSubmissionPdf ) {return false;}preparingSubmissionPdf = true;pendingSnapshot = captureSnapshot( form );pendingSnapshot.signature = signatureDataUrl;submittedSnapshot = null;submissionHandled = false;removeSuccessBanner();form.classList.add( 'tga-is-submitting' );const submitButton = form.querySelector( '.forminator-button-submit' );const originalSubmitText = submitButton ? submitButton.textContent : '';if (submitButton) {submitButton.textContent = 'Preparing PDF...';}createAndAttachSubmissionPdf( form, pendingSnapshot ) .then( function () {preparingSubmissionPdf = false;allowPreparedSubmit = true;if (submitButton) {submitButton.textContent = originalSubmitText || 'Submit';}if ( typeof form.requestSubmit === 'function' ) {if (submitButton) {form.requestSubmit( submitButton );}else {form.requestSubmit();}return;}if (submitButton) {submitButton.click();return;}allowPreparedSubmit = false;form.classList.remove( 'tga-is-submitting' );pendingSnapshot = null;throw new Error( 'Unable to continue the prepared form submission.' );} ) .catch( function (error) {preparingSubmissionPdf = false;allowPreparedSubmit = false;form.classList.remove( 'tga-is-submitting' );pendingSnapshot = null;if (submitButton) {submitButton.textContent = originalSubmitText || 'Submit';}alert( 'The PDF copy could not be attached to the submission. Please try again.' );console.error( 'TGA submission PDF error:', error );} );return false;}, true );function clearSubmittedSnapshot() {if ( form.classList.contains( 'tga-is-submitting' ) && !preparingSubmissionPdf && formHasValidationErrors( form ) ) {resetSubmitAfterValidation( form );}if ( submittedSnapshot && !form.classList.contains( 'tga-is-submitting' ) ) {submittedSnapshot = null;removeSuccessBanner();}}form.addEventListener( 'input', clearSubmittedSnapshot );form.addEventListener( 'change', clearSubmittedSnapshot );if ( window.jQuery ) {/* Forminator fires validation:highlight when its client-side validation finds an invalid field. This is the important unlock path for required Forminator fields. */window .jQuery(document) .on( 'validation:highlight.tgaRecordsV9',function () {setTimeout( function () {if ( form.classList.contains( 'tga-is-submitting' ) && formHasValidationErrors( form ) ) {resetSubmitAfterValidation( form );}}, 0 );} );window .jQuery(document) .on( 'forminator:form:submit:success.tgaRecordsV9',function (event) {const target = event.target;const isThisForm = target === form || ( target && target.closest && target.closest( '#' + form.id ) === form );if (!isThisForm) { return; }handleSuccess( form );} );window .jQuery(document) .on( 'forminator:form:submit:failed.tgaRecordsV9',function (event) {const target = event.target;const isThisForm = target === form || ( target && target.closest && target.closest( '#' + form.id ) === form );if (!isThisForm) { return; }resetSubmitAfterValidation( form );} );}const response = form.querySelector( '.forminator-response-message' );if ( response ) {const responseObserver = new MutationObserver( function () {const text = response.textContent .trim() .toLowerCase();const isError = response.classList.contains( 'forminator-error' );if ( isError && form.classList.contains( 'tga-is-submitting' ) ) {resetSubmitAfterValidation( form );}const successful = !isError && ( response.classList.contains( 'forminator-success' ) ||text.includes( 'success' ) ||text.includes( 'submitted' ) ||text.includes( 'thank' ) );if ( successful && pendingSnapshot ) {handleSuccess( form );}} );responseObserver.observe( response, { childList: true,subtree: true,attributes: true } );}}/* ===================================================== WAIT FOR FORMINATOR ===================================================== */function tryInitialize() {const form = widget.querySelector( FORM_SELECTOR );if (!form) { return false; }const style = window.getComputedStyle( form );const visible = style.display !== 'none' &&form .getBoundingClientRect() .width > 0;if (!visible) { return false; }if (!initialized) {initialized = true;initializeForm( form );}container.classList.add( 'tga-form-ready' );if ( observer ) {observer.disconnect();}return true;}/* ===================================================== START ===================================================== */createLoader();observer = new MutationObserver( function () {tryInitialize();} );observer.observe( widget, { childList: true,subtree: true,attributes: true,attributeFilter: [ 'style', 'class' ] } );if ( document.readyState === 'loading' ) {document.addEventListener( 'DOMContentLoaded', tryInitialize, { once: true } );}else {tryInitialize();}window.addEventListener( 'load', tryInitialize, { once: true } );let attempts = 0;const timer = setInterval( function () {attempts++;if ( tryInitialize() ) {clearInterval( timer );return;}if ( attempts >= 150 ) {clearInterval( timer );const text = container.querySelector( '.tga-loader-text' );if ( text ) {text.textContent = 'The form is taking longer than expected to load. Please refresh the page.';}}}, 100 );})();