1jQuery(document).ready(function($){'use strict';function validateStep1(){var isValid=!0;var $step1=$('.step-1');$step1.find('.error').removeClass('error');$step1.find('input[type="text"]').each(function(){var $input=$(this);var value=$input.val().trim();if(!value){$input.addClass('error');isValid=!1}});$step1.find('select').each(function(){var $select=$(this);var value=$select.val();if(!value||value==='0'||value===''){$select.addClass('error');$select.siblings('.select2').addClass('error');isValid=!1}});var radioGroups={};$step1.find('input[type="radio"]').each(function(){var $radio=$(this);var name=$radio.attr('name');if(name&&!radioGroups.hasOwnProperty(name)){radioGroups[name]=!1} 2if(name&&$radio.is(':checked')){radioGroups[name]=!0}});for(var radioName in radioGroups){if(!radioGroups[radioName]){$step1.find('input[type="radio"][name="'+radioName+'"]').closest('.radio-wrapper').addClass('error');isValid=!1}} 3var checkboxGroups={};$step1.find('input[type="checkbox"]').each(function(){var $checkbox=$(this);var name=$checkbox.attr('name');if(name&&!checkboxGroups.hasOwnProperty(name)){checkboxGroups[name]=!1} 4if(name&&$checkbox.is(':checked')){checkboxGroups[name]=!0}});for(var checkboxName in checkboxGroups){if(!checkboxGroups[checkboxName]){$step1.find('input[type="checkbox"][name="'+checkboxName+'"]').closest('.radio-wrapper').addClass('error');isValid=!1}} 5return isValid} 6$(document).on('click','.goto-step-1, .goto-step-2, .goto-step-3, .goto-step-4, .goto-step-5, .goto-step-6',function(e){var $clickedElement=$(this);var isLabel=$clickedElement.is('label');if(isLabel){var $radio=$clickedElement.find('input[type="radio"]');if($radio.length){$radio.prop('checked',!0)}} 7e.preventDefault();var targetStep=null;if($clickedElement.hasClass('goto-step-1')){targetStep=1}else if($clickedElement.hasClass('goto-step-2')){if(!validateStep1()){var $firstError=$('.step-1 .error').first();if($firstError.length){$('html, body').animate({scrollTop:$firstError.offset().top-100},300)} 8return!1} 9targetStep=2}else if($clickedElement.hasClass('goto-step-3')){targetStep=3}else if($clickedElement.hasClass('goto-step-4')){targetStep=4}else if($clickedElement.hasClass('goto-step-5')){targetStep=5}else if($clickedElement.hasClass('goto-step-6')){targetStep=6} 10if(targetStep){var $targetStep=$('.lawn-quiz-wrapper .step-'+targetStep);$('.lawn-quiz-wrapper .step').removeClass('active');$targetStep.addClass('active');$targetStep.find('.step-line').removeClass('active');for(var i=1;i<=targetStep;i++){$targetStep.find('.step-line:nth-child('+i+')').addClass('active')} 11var $scrollAnchor=$('.lawn-quiz-wrapper');if(window.innerWidth<1000){var $mobileAnchor=$('.step.active .step-quick-form').first();if($mobileAnchor.length){$scrollAnchor=$mobileAnchor}} 12if($scrollAnchor.length){$('html, body').animate({scrollTop:$scrollAnchor.offset().top-100},300)}}});$(document).on('input change','.step-1 input[type="text"], .step-1 select',function(){var $field=$(this);if($field.val().trim()!==''){$field.removeClass('error');if($field.is('select')){$field.siblings('.select2').removeClass('error')}}});$(document).on('change','.step-1 input[type="radio"], .step-1 input[type="checkbox"]',function(){var $field=$(this);var fieldName=$field.attr('name');if(!fieldName)return;var selector='input[name="'+fieldName+'"]';$step1=$('.step-1');$step1.find(selector).closest('.radio-wrapper').removeClass('error')});$(document).on('change','input[type="radio"]',function(){var $radio=$(this);var $step=$radio.closest('.step');var $nextButton=$step.find('.step-next-button');if(!$nextButton.length)return;var $groupRadios=$step.find('input[type="radio"][name="'+$radio.attr('name')+'"]');var hasDataNextStep=$groupRadios.filter('[data-next-step]').length>0;if(!hasDataNextStep)return;$nextButton.removeClass(function(index,className){return(className.match(/\bgoto-step-\d+\b/g)||[]).join(' ')});var stepMatch=$step.attr('class').match(/step-(\d+)/);var defaultStep=stepMatch?parseInt(stepMatch[1],10)+1:2;var nextStepClass=$radio.is(':checked')&&$radio.attr('data-next-step')?$radio.attr('data-next-step'):'goto-step-'+defaultStep;$nextButton.addClass(nextStepClass)});$(document).on('click','.radio-button-wrapper',function(e){var $clickedWrapper=$(this);var $radio=$clickedWrapper.find('input[type="radio"]');if($radio.length){var radioName=$radio.attr('name');$('.radio-button-wrapper').each(function(){var $wrapper=$(this);var $wrapperRadio=$wrapper.find('input[type="radio"][name="'+radioName+'"]');
12if($wrapperRadio.length){$wrapper.removeClass('active')}});$clickedWrapper.addClass('active')}});$(document).on('click','.resolution-download-button',function(e){e.preventDefault();var $form=$('.lawn-quiz-wrapper');var formData=$form.serialize();formData+='&action=submit_lawn_quiz&submit_type=download';submitLawnQuiz(formData)});$(document).on('click','.resolution-form-button',function(e){e.preventDefault();var $form=$('.lawn-quiz-wrapper');var formData=$form.serialize();formData+='&action=submit_lawn_quiz&submit_type=newsletter';submitLawnQuiz(formData)});function submitLawnQuiz(formData){var $resultContainer=$('.resolution-form-result');$resultContainer.show();$resultContainer.html('<p>Please wait while we generate your Lawn Care Programme...</p>');$.ajax({url:ajaxurl,type:'POST',data:formData,dataType:'json',success:function(response){if(response.status==='error'){$resultContainer.html('<p class="error">'+(response.message||'An error occurred.')+'</p>');return} 13$resultContainer.html('<p>'+(response.message||'Done.')+'</p>');if(response.pdf_url&&formData.indexOf('submit_type=download')!==-1){var a=document.createElement('a');a.href=response.pdf_url;a.download=response.pdf_url.split('/').pop()||'PureGreen-Lawn-Programme.pdf';document.body.appendChild(a);a.click();document.body.removeChild(a)}},error:function(xhr,status,error){$resultContainer.html('<p class="error">An error occurred. Please try again.</p>');console.error('AJAX Error:',error)}})}})
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.