{"id":4408,"date":"2021-08-04T15:30:48","date_gmt":"2021-08-04T20:30:48","guid":{"rendered":"https:\/\/www.solinftec.com\/calculator\/"},"modified":"2025-03-12T13:54:20","modified_gmt":"2025-03-12T18:54:20","slug":"calculator","status":"publish","type":"page","link":"https:\/\/www.solinftec.com\/en-us\/calculator\/","title":{"rendered":"Calculator"},"content":{"rendered":"<p>[et_pb_section fb_built=\"1\" admin_label=\"Interior Hero\" module_class=\"oms-overlay-dark\" _builder_version=\"4.16\" background_color=\"rgba(51,51,51,0.6)\" background_image=\"https:\/\/www.solinftec.com\/wp-content\/uploads\/2021\/06\/tim-mossholder-4DLnYJQE6kw-unsplash.jpg\" background_position=\"top_center\" background_blend=\"overlay\" background_enable_video_mp4=\"off\" bottom_divider_style=\"asymmetric2\" bottom_divider_color=\"#FFFFFF\" bottom_divider_arrangement=\"above_content\" custom_css_main_element=\"?min-height: 80vh;\" locked=\"off\" collapsed=\"off\" global_colors_info=\"{}\"][et_pb_row custom_padding_last_edited=\"on|phone\" _builder_version=\"4.16\" custom_padding=\"||180px||false|false\" custom_padding_tablet=\"120px||160px||false|false\" custom_padding_phone=\"100px||140px||false|false\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.16\" custom_padding=\"|||\" global_colors_info=\"{}\" custom_padding__hover=\"|||\"][et_pb_text _builder_version=\"4.16\" text_font=\"||||||||\" text_orientation=\"center\" background_layout=\"dark\" width=\"90%\" max_width=\"1200px\" max_width_tablet=\"\" max_width_phone=\"\" max_width_last_edited=\"on|desktop\" module_alignment=\"center\" global_colors_info=\"{}\"]<\/p>\n<h1>Calculate Your Potential Savings<\/h1>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=\"1\" custom_padding_last_edited=\"on|desktop\" admin_label=\"section\" _builder_version=\"4.16\" background_color=\"rgba(255,255,255,0)\" custom_padding_tablet=\"50px|0|50px|0\" custom_padding_phone=\"\" transparent_background=\"on\" padding_mobile=\"off\" locked=\"off\" global_colors_info=\"{}\"][et_pb_row admin_label=\"row\" _builder_version=\"4.16\" background_size=\"initial\" background_position=\"top_left\" background_repeat=\"repeat\" custom_padding=\"80px||||false|false\" custom_width_px=\"806px\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.16\" custom_padding=\"|||\" global_colors_info=\"{}\" custom_padding__hover=\"|||\"][et_pb_text admin_label=\"Calculator\" _builder_version=\"4.16\" background_size=\"initial\" background_position=\"top_left\" background_repeat=\"repeat\" width=\"80%\" width_tablet=\"100%\" width_phone=\"\" width_last_edited=\"on|tablet\" max_width=\"850px\" module_alignment=\"center\" use_border_color=\"off\" border_color=\"#ffffff\" border_style=\"solid\" global_colors_info=\"{}\"]<\/p>\n\n    <div class=\"form form--calc js-calc-container\" data-form-calc=\"ajax\/form-calc-data.json\">\n        <form action=\"?\" method=\"post\" class=\"form-validate\">\n            <div class=\"form__body\">\n                <div class=\"form__grid grid\">\n                    <div class=\"form__col grid__col grid__col--1of3\">\n                        <aside class=\"form__aside\">\n                            <div class=\"form__row\">\n                                <div class=\"form__controls validate js-form-controls\">\n                                    <label for=\"form-calc-field-1#\" class=\"form__label form__label--size2\">Application\n                                        Speed <span>(acres per hour)<\/span><\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-application-speed\"\n                                           name=\"form-calc-field-1#\" id=\"form-calc-field-1#\" value=\"100\"\n                                           placeholder=\"100\">\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                            <div class=\"form__row\">\n                                <div class=\"form__controls form__controls--currency validate js-form-controls\">\n                                    <label for=\"form-calc-field-2#\" class=\"form__label\">Custom Application\n                                        Charge<\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-application-charge\"\n                                           name=\"form-calc-field-2#\" id=\"form-calc-field-2#\" value=\"7.50\"\n                                           placeholder=\"7.50\">\n\n                                    <em class=\"form__currency\">$<\/em>\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                            <div class=\"form__row\">\n                                <div class=\"form__controls form__controls--currency validate js-form-controls\">\n                                    <label for=\"form-calc-field-31#\" class=\"form__label\">Daily Working Hours<\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-working-hours\"\n                                           name=\"form-calc-field-31#\" id=\"form-calc-field-31#\" value=\"10\"\n                                           placeholder=\"10\">\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                            <div class=\"form__row\">\n                                <div class=\"form__controls validate js-form-controls\">\n                                    <label for=\"form-calc-field-3#\" class=\"form__label\">Number of Sprayers<\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-number-of-machines\"\n                                           name=\"form-calc-field-3#\" id=\"form-calc-field-3#\" value=\"4\" placeholder=\"4\">\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                        <\/aside>\n                    <\/div>\n                    <div class=\"form__col grid__col grid__col--2of3\">\n                        <div class=\"form__content\">\n                            <div class=\"form__results\">\n                                <div class=\"form__results-head hidden-xs\">\n                                    <ul>\n                                        <li>\n                                            <strong>Solinftec Solution<\/strong>\n                                        <\/li>\n\n                                        <li>\n                                            <strong>Savings<\/strong>\n                                        <\/li>\n                                    <\/ul>\n                                <\/div><!-- \/.form__results-head -->\n\n                                <div class=\"form__results-body\">\n                                    <ul>\n                                        <li>\n                                            <p>Route Optimization<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-route-opt-result\">4,275<\/span>\n                                            <\/h6>\n                                        <\/li>\n\n                                        <li>\n                                            <p> Speed Optimization<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-speed-opt-result\">12,563<\/span>\n                                            <\/h6>\n                                        <\/li>\n\n                                        <li>\n                                            <p>Tender Truck Optimization<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-tender-truck-opt-result\">6,000<\/span>\n                                            <\/h6>\n                                        <\/li>\n\n                                        <li>\n                                            <p>Savings per Sprayer<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-savings-per-item-result\">57,863<\/span>\n                                            <\/h6>\n                                        <\/li>\n                                    <\/ul>\n                                <\/div><!-- \/.form__results-body -->\n\n                                <div class=\"form__results-foot\">\n                                    <p><strong>Total Savings<\/strong><\/p>\n\n                                    <h4>\n                                        <em class=\"form__currency\">$<\/em>\n\n                                        <span class=\"js-calc-savings-total-result\">231,452<\/span>\n                                    <\/h4>\n                                <\/div><!-- \/.form__results-foot -->\n                            <\/div><!-- \/.form__results -->\n                        <\/div><!-- \/.form__content -->\n                    <\/div><!-- \/.form__col grid__col -->\n                <\/div><!-- \/.form__grid -->\n            <\/div><!-- \/.form__body -->\n\n            <div class=\"form__actions hidden\" style=\"display: none\">\n                <button type=\"submit\" value=\"Submit\" class=\"form__btn btn btn--reversed\">Send<\/button>\n            <\/div><!-- \/.form__actions -->\n        <\/form>\n    <\/div>\n\n\n        <script>\n            var Validator = function(settings) {\n                \/\/ Global variable for validator\n                var validator = this;\n\n\n                \/\/ Assign settings\n                validator.settings = extend({\n                    container       : document.querySelectorAll('.validate'),\n                    validClass      : 'valid',\n                    errorClass      : 'error',\n                    preventSubmit   : false,\n                    validateOnInit  : false,\n                    validateFieldsOn: 'input',\n                    animationTime   : false,\n                    submitButton    : false,\n                    disableButton   : false,\n                    radiosContainer : false,\n                    fieldContainer  : false,\n                    formValidClass  : 'form-valid',\n                    onSubmit        : function(e, element) {},\n                    regexes         : {\n                        presence: '.+',\n                        date    : '^\\[0-9]{4}-\\[0-9]{2}-\\[0-9]{2}$',\n                        number  : '^[0-9]*(\\d*\\.\\d*)[0-9]*$',\n                        phone   : '^[0-9 ()+_]+$',\n                        email   : '^[0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+([0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]*[-._+])*[0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+@[0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+([-.][0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+)*([0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]*[.])[a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]{2,6}$',\n                        zip     : '^[a-zA-Z0-9 _]+$'\n                    }\n                }, settings);\n\n                \/\/ Init validator\n                init();\n\n                function init() {\n                    \/\/ Get required fields\n                    validator.required = getRequired();\n\n                    \/\/ Timeout variable for lazy checking when form elements have transition before hiding them\n                    var lazyCheck;\n\n                    closest(validator.settings.container, 'form', true).addEventListener('submit', function(e) {\n                        for (var i = 0; i < validator.required.length; i++) {\n                            validate(validator.required[i]);\n                        }\n\n                        if (!checkFullValidation() && validator.settings.preventSubmit) {\n                            e.preventDefault();\n\n                            validator\n                                .settings\n                                .container\n                                .classList\n                                .remove(validator.settings.formValidClass);\n                        } else {\n                            validator\n                                .settings\n                                .container\n                                .classList\n                                .add(validator.settings.formValidClass);\n\n                            validator\n                                .settings\n                                .onSubmit(e, this);\n                        }\n                    });\n\n                    \/\/ Attach an event to check if field is shown and if it should be validated\n                    document.addEventListener('click', function() {\n                        checkFullValidation();\n\n                        if (validator.settings.animationTime) {\n                            clearTimeout(lazyCheck);\n\n                            setTimeout(function() {\n                                checkFullValidation();\n                            }, validator.settings.animationTime);\n                        }\n                    });\n\n                    \/\/ Disable button if specified\n                    if (validator.settings.disableButton && validator.settings.container.querySelectorAll(validator.settings.submitButton).length) {\n                        toggleButton(false);\n                    }\n\n                    \/\/ Attach events to required fields\n                    attachEvents();\n                }\n\n                \/\/ Merge default settings with new ones if specified\n                function extend(obj, src) {\n                    Object\n                        .keys(src)\n                        .forEach(function(key) {\n                            if (typeof src[key] == 'object' && !src[key].length) {\n                                Object\n                                    .keys(src[key])\n                                    .forEach(function(innerKey) {\n                                        obj[key][innerKey] = src[key][innerKey];\n                                    });\n                            } else {\n                                obj[key] = src[key];\n                            }\n                        });\n\n                    return obj;\n                }\n\n                function attachEvents() {\n                    for (var i = 0; i < validator.required.length; i++) {\n                        var element = validator.required[i];\n\n                        if (isField(element)) {\n                            \/\/ Attach field and password events\n                            element.addEventListener(validator.settings.validateFieldsOn, function(e) {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n\n                            if (validator.settings.validateFieldsOn == 'blur') {\n                                element.addEventListener('input', function() {\n                                    for (var i = 0; i < element.classList.length; i++) {\n                                        if (element.classList[i].indexOf(validator.settings.errorClass) !== -1) {\n                                            validate(this);\n\n                                            checkFullValidation();\n\n                                            break;\n                                        }\n                                    }\n                                });\n                            }\n                        } else if (isRadio(element)) {\n                            \/\/ Attach radio events\n                            element.addEventListener('click', function() {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n                        } else if (isCheckbox(element)) {\n                            \/\/ Attach checkbox events\n                            element.addEventListener('change', function() {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n                        } else if (isSelectbox(element)) {\n                            \/\/ Attach selectbox events\n                            element.addEventListener('change', function() {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n                        }\n\n                        if (element.getAttribute('data-validate') == 'confirm') {\n                            document\n                                .querySelector(element.getAttribute('data-confirm'))\n                                .addEventListener('input', function() {\n                                    validate(document.querySelector('[data-confirm=\"#' + this.getAttribute('id') + '\"]'));\n                                });\n                        }\n\n                        if (validator.settings.validateOnInit == true && element.value !== '') {\n                            validate(element);\n                        }\n                    }\n                }\n\n                \/\/ Get total number of required inputs in container\n                function getTotalInputs() {\n                    var total = 0;\n                    var groups = 0;\n                    var groupedElements = validator.settings.container.querySelectorAll('[data-group]');\n                    var inputs = validator.settings.container.querySelectorAll('select[data-validate], input[data-validate]:not([type=\"radio\"]):not([type=\"submit\"]), textarea[data-validate]');\n                    var radios = validator.settings.container.querySelectorAll(validator.settings.radiosContainer);\n\n                    for (var i = 0; i < groupedElements.length; i++) {\n                        var checkedInGroup = 0;\n                        var j              = 0;\n                        var group          = validator.settings.container.querySelectorAll('[data-group=\"' + groupedElements[i].getAttribute('data-group') + '\"]');\n\n                        for (j; j < group.length; j++) {\n                            if (group[j].checked) {\n                                checkedInGroup++;\n                            }\n                        }\n\n                        i     += (j + 1);\n                        total += (checkedInGroup == 0 ? 1 : checkedInGroup);\n                    }\n\n                    for (var i = 0; i < inputs.length; i++) {\n                        if (isVisible(inputs[i])) {\n                            total++;\n                        }\n                    }\n\n                    for (var i = 0; i < radios.length; i++) {\n                        if (isVisible(radios[i])) {\n                            total++;\n                        }\n                    }\n\n                    return total - (groupedElements.length - groups);\n                }\n\n                \/\/ Check if element is visible\n                function isVisible(element) {\n                    return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n                }\n\n                \/\/ Check if element is field\n                function isField(element) {\n                    return element.type == 'text' || element.type == 'textarea' || element.type == 'email' || element.type == 'password';\n                }\n\n                \/\/ Check if element is selectbox\n                function isSelectbox(element) {\n                    return element.type == 'select-one';\n                }\n\n                \/\/ Check if element is radio\n                function isRadio(element) {\n                    return element.type == 'radio';\n                }\n\n                \/\/ Check if element is checkbox\n                function isCheckbox(element) {\n                    return element.type == 'checkbox';\n                }\n\n                \/\/ Get all requred elements\n                function getRequired() {\n                    return validator.settings.container.querySelectorAll('[data-validate]');\n                }\n\n                \/\/ Check for full validation\n                function checkFullValidation() {\n                    var validInputs = 0;\n                    var inputs = validator.settings.container.querySelectorAll('.' + validator.settings.validClass);\n\n                    validator.totalInputs = getTotalInputs();\n\n                    for (var i = 0; i < inputs.length; i++) {\n                        if (isVisible(inputs[i])) {\n                            validInputs++;\n                        }\n                    }\n\n                    if (validator.settings.disableButton && validator.settings.container.querySelectorAll(validator.settings.submitButton).length) {\n                        toggleButton(validInputs >= validator.totalInputs);\n                    }\n\n                    if (validInputs == validator.totalInputs) {\n                        validator\n                            .settings\n                            .container\n                            .classList\n                            .add(validator.settings.formValidClass);\n                    } else {\n                        validator\n                            .settings\n                            .container\n                            .classList\n                            .remove(validator.settings.formValidClass);\n                    }\n\n                    return validInputs >= validator.totalInputs;\n                }\n\n                \/\/ Toggle button\n                function toggleButton(condition) {\n                    var buttons = validator.settings.container.querySelectorAll(validator.settings.submitButton);\n\n                    for (var i = 0; i < buttons.length; i++) {\n                        if (condition) {\n                            buttons[i].removeAttribute('disabled');\n                        } else {\n                            buttons[i].setAttribute('disabled', true);\n                        }\n                    }\n                }\n\n                \/\/ Validate elements\n                function validate(element) {\n                    if (isField(element)) {\n                        \/\/ Validate fields and textareas\n                        switchClasses(element, validateField(element, element.getAttribute('data-validate')));\n\n                        return;\n                    }\n\n                    if (isRadio(element)) {\n                        \/\/ Validate radios\n\n                        var radioGroup = document.querySelectorAll('[name=\"' + element.getAttribute('name') + '\"]');\n                        var hasChecked = false;\n\n                        for (var i = 0; i < radioGroup.length; i++) {\n                            var radio = radioGroup[i];\n\n                            switchClasses(radio, radio.checked);\n\n                            if (radio.checked) {\n                                hasChecked = true;\n                            }\n                        }\n\n                        if (hasChecked == true) {\n                            for (var i = 0; i < radioGroup.length; i++) {\n                                radioGroup[i]\n                                    .classList\n                                    .remove(validator.settings.errorClass);\n                            }\n                        }\n\n                        return;\n                    }\n\n                    if (isCheckbox(element)) {\n                        \/\/ Validate checkboxes\n                        switchClasses(element, element.checked);\n\n                        return;\n                    }\n\n                    if (isSelectbox(element)) {\n                        \/\/ Validate selectbox\n                        switchClasses(element, element[element.selectedIndex].getAttribute('value') !== '');\n                    }\n                }\n\n                \/\/ Switch error and valid class\n                function switchClasses(element, isValid) {\n                    toggleClasses(element, validator.settings.errorClass, validator.settings.validClass);\n\n                    if (validator.settings.fieldContainer) {\n                        toggleClasses(closest(element, validator.settings.fieldContainer), validator.settings.errorClass + '-container', validator.settings.validClass + '-container');\n                    }\n\n                    if (isValid) {\n                        toggleClasses(element, validator.settings.validClass, validator.settings.errorClass);\n\n                        if (validator.settings.fieldContainer) {\n                            toggleClasses(closest(element, validator.settings.fieldContainer), validator.settings.validClass + '-container', validator.settings.errorClass + '-container');\n                        }\n                    }\n                }\n\n                \/\/ Helper function to get closest element\n                function closest(element, className, byTag) {\n                    var parent = element;\n                    var found  = false;\n\n                    if (byTag) {\n                        while (parent !== document && parent.tagName.indexOf(className.toUpperCase()) == -1) {\n                            parent = parent.parentNode;\n                        }\n                    } else {\n                        while(!found) {\n                            for (var i = 0; i < parent.classList.length; i++) {\n                                if (parent.classList[i].indexOf(className) !== -1) {\n                                    found = true;\n\n                                    break;\n                                }\n                            }\n\n                            if (!found) {\n                                parent = parent.parentNode;\n                            }\n                        }\n                    }\n\n                    return parent;\n                }\n\n                \/\/ Toggle between classes (addClass is selector. being added to element and removeClass is being removed from element)\n                function toggleClasses(element, addClass, removeClass) {\n                    element\n                        .classList\n                        .remove(removeClass);\n\n                    element\n                        .classList\n                        .add(addClass);\n                }\n\n                \/\/ Field and textarea validation\n                function validateField(field, validationType) {\n                    return new RegExp(getRegex(field, validationType)).test(field.value);\n                }\n\n                \/\/ Get regexes for different type of fields\n                function getRegex(field, validationType) {\n                    switch (validationType) {\n                        case 'presence':\n                            return validator.settings.regexes.presence;\n\n                        case 'date':\n                            return validator.settings.regexes.date;\n\n                        case 'number':\n                            return validator.settings.regexes.number;\n\n                        case 'phone':\n                            return validator.settings.regexes.phone;\n\n                        case 'email':\n                            return validator.settings.regexes.email;\n\n                        case 'zip':\n                            return validator.settings.regexes.zip;\n\n                        case 'match':\n                            return '^' + field.getAttribute('data-match') + '$';\n\n                        case 'confirm':\n                            return '^' + document.querySelector(field.getAttribute('data-confirm')).value + '$';\n\n                        default:\n                            return 'Invalid field validation';\n                    }\n                }\n            }\n        <\/script>\n    \n    <script>\n   \n    (function ( $ ) {\n    \n        const loadAjax = ( filePath ) => {\n            return $.ajax( {\n                \"async\" : false,\n                \"global\" : false,\n                \"url\" : filePath\n            } ).responseJSON;\n        }\n        \n        const handleFormCalc = () => {\n            \n            if ( $( \".js-calc-container\" ).length == 0 ) {\n                return;\n            }\n        \n            const $formContainer = $( \".js-calc-container\" );\n        \n            \/\/ user editable input fields\n            const $inputApplicationSpeed = $formContainer.find( \".js-application-speed\" );\n            const $inputApplicationCharge = $formContainer.find( \".js-application-charge\" );\n            const $inputWorkingHours = $formContainer.find( \".js-working-hours\");\n            const $inputNumberOfMachines = $formContainer.find( \".js-number-of-machines\" );\n            \n        \n            \/\/ results fields\n            const $resultRouteOpt = $formContainer.find( \".js-calc-route-opt-result\" );\n            const $resultSpeedOpt = $formContainer.find( \".js-calc-speed-opt-result\" );\n            const $resultTenderTruckOpt = $formContainer.find( \".js-calc-tender-truck-opt-result\" );\n            const $resultSavingsPerItem = $formContainer.find( \".js-calc-savings-per-item-result\" );\n            const $resultSavingsTotal = $formContainer.find( \".js-calc-savings-total-result\" );\n            \n            \n            \/\/ Fixed Settings Values\n            let tenderTruckWaitingTime = 1.5;\n            let timeLost = 0.5;\n            let fixedApplicationSpeed = 11.5;\n            let daysInSeason = 45;\n            let percentageOfDays = 37;\n            let targetApplicationSpeed = 14;\n        \n        \n            \/\/ validate number fields\n            const $input = $formContainer.find( \".field\" );\n        \n            $( \".js-calc-container .form-validate\" ).each( function () {\n                const validator = new Validator( {\n                    container : this,\n                    fieldContainer : \"js-form-controls\",\n                    validateFieldsOn : \"input\",\n                    preventSubmit : true,\n                    submitButton : \".js-form-calc-btn\",\n                    onSubmit : function ( e, element ) {\n                        e.preventDefault();\n                    }\n                } );\n            } );\n        \n            \/\/ handle changes on input\n            $input.on( \"keyup touchend blur\", function ( e ) {\n                const $this = $( this );\n                let inputValue = this.value;\n        \n                \/\/ Gets user input field values\n                let applicationSpeed = parseInt( $inputApplicationSpeed.val() ) ? parseInt( $inputApplicationSpeed.val() ) : parseInt( $inputApplicationSpeed.attr( \"placeholder\" ) );\n                let applicationCharge = parseFloat( $inputApplicationCharge.val() ) ? parseFloat( $inputApplicationCharge.val() ) : parseFloat( $inputApplicationCharge.attr( \"placeholder\" ) );\n                let numberOfMachines = parseInt( $inputNumberOfMachines.val() ) ? parseInt( $inputNumberOfMachines.val() ) : parseInt( $inputNumberOfMachines.attr( \"placeholder\" ) );\n                let dailyWorkingHours = parseInt( $inputWorkingHours.val() ) ? parseInt( $inputWorkingHours.val() ) : parseInt( $inputWorkingHours.attr( \"placeholder\" ) );\n        \n                \/\/ Savings calculations\n                let $calcSprayerRouteOptimization = timeLost * applicationSpeed * applicationCharge * daysInSeason;\n                let $calcApplicationSpeedOptimization = Math.round( dailyWorkingHours * percentageOfDays * daysInSeason * ( targetApplicationSpeed \/ fixedApplicationSpeed - 1 ) * applicationCharge );\n                let $calcTenderTruckOptimization = Math.round(tenderTruckWaitingTime \/ 2  * daysInSeason * applicationSpeed * applicationCharge);\n                \n                const $calcSavingsPerItem = Math.round( $calcSprayerRouteOptimization + $calcApplicationSpeedOptimization + $calcTenderTruckOptimization  );\n                const $calcSavingsTotal = Math.round( numberOfMachines * $calcSavingsPerItem );\n        \n        \n                if ( $this.is( $( \".form--calc .form__aside .js-number-of-items\" ) ) ) {\n                    $( \".form--calc .form__row.is-cloned-mobile\" )\n                        .find( \".js-number-of-items\" )\n                        .val( inputValue );\n                }\n        \n                if ( $this.is( $( \".form--calc .form__row.is-cloned-mobile .js-number-of-items\" ) ) ) {\n                    $( \".form--calc .form__aside\" )\n                        .find( \".js-number-of-items\" )\n                        .val( inputValue );\n                }\n        \n        \n                \/\/ Set the text on the savings fields\n                $resultRouteOpt.text( $calcSprayerRouteOptimization.toLocaleString() );\n                $resultSpeedOpt.text( $calcApplicationSpeedOptimization.toLocaleString() );\n                $resultTenderTruckOpt.text( $calcTenderTruckOptimization.toLocaleString() );\n                $resultSavingsPerItem.text( $calcSavingsPerItem.toLocaleString() );\n                $resultSavingsTotal.text( $calcSavingsTotal.toLocaleString() );\n                        \n            });\n        }\n\n    \n        $( window ).on( \"load\", function () {\n            handleFormCalc();\n        } );\n    })( jQuery );\n    \n    \n    <\/script>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=\"1\" admin_label=\"Footer CTA\" _builder_version=\"4.16\" use_background_color_gradient=\"on\" background_color_gradient_stops=\"#ffffff 50%|#101010 50%\" background_color_gradient_start=\"#ffffff\" background_color_gradient_start_position=\"50%\" background_color_gradient_end=\"#101010\" background_color_gradient_end_position=\"0%\" background_enable_image=\"off\" locked=\"off\" global_colors_info=\"{}\"][et_pb_row _builder_version=\"4.16\" background_image=\"https:\/\/www.solinftec.com\/wp-content\/uploads\/2021\/07\/poly-background-purple-dark.jpg\" parallax=\"on\" border_radii=\"on|20px|20px|20px|20px\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.16\" custom_padding=\"|||\" global_colors_info=\"{}\" custom_padding__hover=\"|||\"][et_pb_text admin_label=\"Text (CTA)\" _builder_version=\"4.16\" text_orientation=\"center\" background_layout=\"dark\" width=\"90%\" width_tablet=\"90%\" width_phone=\"\" width_last_edited=\"on|tablet\" max_width=\"1200px\" max_width_last_edited=\"off|desktop\" module_alignment=\"center\" custom_padding=\"|||\" global_colors_info=\"{}\"]<\/p>\n<h2>Ready to translate these savings into reality?<\/h2>\n<p class=\"intro\">Use global agriculture software solutions to optimize operations.<\/p>\n<p><a class=\"cta-button-reverse\" href=\"https:\/\/www.solinftec.com\/get-a-demo\/\">Get a Demo<\/a><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Calculate Your Potential Savings\n    <div class=\"form form--calc js-calc-container\" data-form-calc=\"ajax\/form-calc-data.json\">\n        <form action=\"?\" method=\"post\" class=\"form-validate\">\n            <div class=\"form__body\">\n                <div class=\"form__grid grid\">\n                    <div class=\"form__col grid__col grid__col--1of3\">\n                        <aside class=\"form__aside\">\n                            <div class=\"form__row\">\n                                <div class=\"form__controls validate js-form-controls\">\n                                    <label for=\"form-calc-field-1#\" class=\"form__label form__label--size2\">Application\n                                        Speed <span>(acres per hour)<\/span><\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-application-speed\"\n                                           name=\"form-calc-field-1#\" id=\"form-calc-field-1#\" value=\"100\"\n                                           placeholder=\"100\">\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                            <div class=\"form__row\">\n                                <div class=\"form__controls form__controls--currency validate js-form-controls\">\n                                    <label for=\"form-calc-field-2#\" class=\"form__label\">Custom Application\n                                        Charge<\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-application-charge\"\n                                           name=\"form-calc-field-2#\" id=\"form-calc-field-2#\" value=\"7.50\"\n                                           placeholder=\"7.50\">\n\n                                    <em class=\"form__currency\">$<\/em>\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                            <div class=\"form__row\">\n                                <div class=\"form__controls form__controls--currency validate js-form-controls\">\n                                    <label for=\"form-calc-field-31#\" class=\"form__label\">Daily Working Hours<\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-working-hours\"\n                                           name=\"form-calc-field-31#\" id=\"form-calc-field-31#\" value=\"10\"\n                                           placeholder=\"10\">\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                            <div class=\"form__row\">\n                                <div class=\"form__controls validate js-form-controls\">\n                                    <label for=\"form-calc-field-3#\" class=\"form__label\">Number of Sprayers<\/label>\n\n                                    <input type=\"text\" data-validate=\"number\" class=\"field js-number-of-machines\"\n                                           name=\"form-calc-field-3#\" id=\"form-calc-field-3#\" value=\"4\" placeholder=\"4\">\n                                <\/div><!-- \/.form__controls -->\n                            <\/div><!-- \/.form__row -->\n\n                        <\/aside>\n                    <\/div>\n                    <div class=\"form__col grid__col grid__col--2of3\">\n                        <div class=\"form__content\">\n                            <div class=\"form__results\">\n                                <div class=\"form__results-head hidden-xs\">\n                                    <ul>\n                                        <li>\n                                            <strong>Solinftec Solution<\/strong>\n                                        <\/li>\n\n                                        <li>\n                                            <strong>Savings<\/strong>\n                                        <\/li>\n                                    <\/ul>\n                                <\/div><!-- \/.form__results-head -->\n\n                                <div class=\"form__results-body\">\n                                    <ul>\n                                        <li>\n                                            <p>Route Optimization<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-route-opt-result\">4,275<\/span>\n                                            <\/h6>\n                                        <\/li>\n\n                                        <li>\n                                            <p> Speed Optimization<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-speed-opt-result\">12,563<\/span>\n                                            <\/h6>\n                                        <\/li>\n\n                                        <li>\n                                            <p>Tender Truck Optimization<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-tender-truck-opt-result\">6,000<\/span>\n                                            <\/h6>\n                                        <\/li>\n\n                                        <li>\n                                            <p>Savings per Sprayer<\/p>\n\n                                            <h6>\n                                                <em class=\"form__currency\">$<\/em>\n\n                                                <span class=\"js-calc-savings-per-item-result\">57,863<\/span>\n                                            <\/h6>\n                                        <\/li>\n                                    <\/ul>\n                                <\/div><!-- \/.form__results-body -->\n\n                                <div class=\"form__results-foot\">\n                                    <p><strong>Total Savings<\/strong><\/p>\n\n                                    <h4>\n                                        <em class=\"form__currency\">$<\/em>\n\n                                        <span class=\"js-calc-savings-total-result\">231,452<\/span>\n                                    <\/h4>\n                                <\/div><!-- \/.form__results-foot -->\n                            <\/div><!-- \/.form__results -->\n                        <\/div><!-- \/.form__content -->\n                    <\/div><!-- \/.form__col grid__col -->\n                <\/div><!-- \/.form__grid -->\n            <\/div><!-- \/.form__body -->\n\n            <div class=\"form__actions hidden\" style=\"display: none\">\n                <button type=\"submit\" value=\"Submit\" class=\"form__btn btn btn--reversed\">Send<\/button>\n            <\/div><!-- \/.form__actions -->\n        <\/form>\n    <\/div>\n\n\n        <script>\n            var Validator = function(settings) {\n                \/\/ Global variable for validator\n                var validator = this;\n\n\n                \/\/ Assign settings\n                validator.settings = extend({\n                    container       : document.querySelectorAll('.validate'),\n                    validClass      : 'valid',\n                    errorClass      : 'error',\n                    preventSubmit   : false,\n                    validateOnInit  : false,\n                    validateFieldsOn: 'input',\n                    animationTime   : false,\n                    submitButton    : false,\n                    disableButton   : false,\n                    radiosContainer : false,\n                    fieldContainer  : false,\n                    formValidClass  : 'form-valid',\n                    onSubmit        : function(e, element) {},\n                    regexes         : {\n                        presence: '.+',\n                        date    : '^\\[0-9]{4}-\\[0-9]{2}-\\[0-9]{2}$',\n                        number  : '^[0-9]*(\\d*\\.\\d*)[0-9]*$',\n                        phone   : '^[0-9 ()+_]+$',\n                        email   : '^[0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+([0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]*[-._+])*[0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+@[0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+([-.][0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]+)*([0-9a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]*[.])[a-zA-Z\u00d0\u201c\u00c2\u00a4\u00d0\u201c\u00d2\u0090\u00d0\u201c\u00c2\u00b6]{2,6}$',\n                        zip     : '^[a-zA-Z0-9 _]+$'\n                    }\n                }, settings);\n\n                \/\/ Init validator\n                init();\n\n                function init() {\n                    \/\/ Get required fields\n                    validator.required = getRequired();\n\n                    \/\/ Timeout variable for lazy checking when form elements have transition before hiding them\n                    var lazyCheck;\n\n                    closest(validator.settings.container, 'form', true).addEventListener('submit', function(e) {\n                        for (var i = 0; i < validator.required.length; i++) {\n                            validate(validator.required[i]);\n                        }\n\n                        if (!checkFullValidation() && validator.settings.preventSubmit) {\n                            e.preventDefault();\n\n                            validator\n                                .settings\n                                .container\n                                .classList\n                                .remove(validator.settings.formValidClass);\n                        } else {\n                            validator\n                                .settings\n                                .container\n                                .classList\n                                .add(validator.settings.formValidClass);\n\n                            validator\n                                .settings\n                                .onSubmit(e, this);\n                        }\n                    });\n\n                    \/\/ Attach an event to check if field is shown and if it should be validated\n                    document.addEventListener('click', function() {\n                        checkFullValidation();\n\n                        if (validator.settings.animationTime) {\n                            clearTimeout(lazyCheck);\n\n                            setTimeout(function() {\n                                checkFullValidation();\n                            }, validator.settings.animationTime);\n                        }\n                    });\n\n                    \/\/ Disable button if specified\n                    if (validator.settings.disableButton && validator.settings.container.querySelectorAll(validator.settings.submitButton).length) {\n                        toggleButton(false);\n                    }\n\n                    \/\/ Attach events to required fields\n                    attachEvents();\n                }\n\n                \/\/ Merge default settings with new ones if specified\n                function extend(obj, src) {\n                    Object\n                        .keys(src)\n                        .forEach(function(key) {\n                            if (typeof src[key] == 'object' && !src[key].length) {\n                                Object\n                                    .keys(src[key])\n                                    .forEach(function(innerKey) {\n                                        obj[key][innerKey] = src[key][innerKey];\n                                    });\n                            } else {\n                                obj[key] = src[key];\n                            }\n                        });\n\n                    return obj;\n                }\n\n                function attachEvents() {\n                    for (var i = 0; i < validator.required.length; i++) {\n                        var element = validator.required[i];\n\n                        if (isField(element)) {\n                            \/\/ Attach field and password events\n                            element.addEventListener(validator.settings.validateFieldsOn, function(e) {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n\n                            if (validator.settings.validateFieldsOn == 'blur') {\n                                element.addEventListener('input', function() {\n                                    for (var i = 0; i < element.classList.length; i++) {\n                                        if (element.classList[i].indexOf(validator.settings.errorClass) !== -1) {\n                                            validate(this);\n\n                                            checkFullValidation();\n\n                                            break;\n                                        }\n                                    }\n                                });\n                            }\n                        } else if (isRadio(element)) {\n                            \/\/ Attach radio events\n                            element.addEventListener('click', function() {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n                        } else if (isCheckbox(element)) {\n                            \/\/ Attach checkbox events\n                            element.addEventListener('change', function() {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n                        } else if (isSelectbox(element)) {\n                            \/\/ Attach selectbox events\n                            element.addEventListener('change', function() {\n                                validate(this);\n\n                                checkFullValidation();\n                            });\n                        }\n\n                        if (element.getAttribute('data-validate') == 'confirm') {\n                            document\n                                .querySelector(element.getAttribute('data-confirm'))\n                                .addEventListener('input', function() {\n                                    validate(document.querySelector('[data-confirm=\"#' + this.getAttribute('id') + '\"]'));\n                                });\n                        }\n\n                        if (validator.settings.validateOnInit == true && element.value !== '') {\n                            validate(element);\n                        }\n                    }\n                }\n\n                \/\/ Get total number of required inputs in container\n                function getTotalInputs() {\n                    var total = 0;\n                    var groups = 0;\n                    var groupedElements = validator.settings.container.querySelectorAll('[data-group]');\n                    var inputs = validator.settings.container.querySelectorAll('select[data-validate], input[data-validate]:not([type=\"radio\"]):not([type=\"submit\"]), textarea[data-validate]');\n                    var radios = validator.settings.container.querySelectorAll(validator.settings.radiosContainer);\n\n                    for (var i = 0; i < groupedElements.length; i++) {\n                        var checkedInGroup = 0;\n                        var j              = 0;\n                        var group          = validator.settings.container.querySelectorAll('[data-group=\"' + groupedElements[i].getAttribute('data-group') + '\"]');\n\n                        for (j; j < group.length; j++) {\n                            if (group[j].checked) {\n                                checkedInGroup++;\n                            }\n                        }\n\n                        i     += (j + 1);\n                        total += (checkedInGroup == 0 ? 1 : checkedInGroup);\n                    }\n\n                    for (var i = 0; i < inputs.length; i++) {\n                        if (isVisible(inputs[i])) {\n                            total++;\n                        }\n                    }\n\n                    for (var i = 0; i < radios.length; i++) {\n                        if (isVisible(radios[i])) {\n                            total++;\n                        }\n                    }\n\n                    return total - (groupedElements.length - groups);\n                }\n\n                \/\/ Check if element is visible\n                function isVisible(element) {\n                    return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\n                }\n\n                \/\/ Check if element is field\n                function isField(element) {\n                    return element.type == 'text' || element.type == 'textarea' || element.type == 'email' || element.type == 'password';\n                }\n\n                \/\/ Check if element is selectbox\n                function isSelectbox(element) {\n                    return element.type == 'select-one';\n                }\n\n                \/\/ Check if element is radio\n                function isRadio(element) {\n                    return element.type == 'radio';\n                }\n\n                \/\/ Check if element is checkbox\n                function isCheckbox(element) {\n                    return element.type == 'checkbox';\n                }\n\n                \/\/ Get all requred elements\n                function getRequired() {\n                    return validator.settings.container.querySelectorAll('[data-validate]');\n                }\n\n                \/\/ Check for full validation\n                function checkFullValidation() {\n                    var validInputs = 0;\n                    var inputs = validator.settings.container.querySelectorAll('.' + validator.settings.validClass);\n\n                    validator.totalInputs = getTotalInputs();\n\n                    for (var i = 0; i < inputs.length; i++) {\n                        if (isVisible(inputs[i])) {\n                            validInputs++;\n                        }\n                    }\n\n                    if (validator.settings.disableButton && validator.settings.container.querySelectorAll(validator.settings.submitButton).length) {\n                        toggleButton(validInputs >= validator.totalInputs);\n                    }\n\n                    if (validInputs == validator.totalInputs) {\n                        validator\n                            .settings\n                            .container\n                            .classList\n                            .add(validator.settings.formValidClass);\n                    } else {\n                        validator\n                            .settings\n                            .container\n                            .classList\n                            .remove(validator.settings.formValidClass);\n                    }\n\n                    return validInputs >= validator.totalInputs;\n                }\n\n                \/\/ Toggle button\n                function toggleButton(condition) {\n                    var buttons = validator.settings.container.querySelectorAll(validator.settings.submitButton);\n\n                    for (var i = 0; i < buttons.length; i++) {\n                        if (condition) {\n                            buttons[i].removeAttribute('disabled');\n                        } else {\n                            buttons[i].setAttribute('disabled', true);\n                        }\n                    }\n                }\n\n                \/\/ Validate elements\n                function validate(element) {\n                    if (isField(element)) {\n                        \/\/ Validate fields and textareas\n                        switchClasses(element, validateField(element, element.getAttribute('data-validate')));\n\n                        return;\n                    }\n\n                    if (isRadio(element)) {\n                        \/\/ Validate radios\n\n                        var radioGroup = document.querySelectorAll('[name=\"' + element.getAttribute('name') + '\"]');\n                        var hasChecked = false;\n\n                        for (var i = 0; i < radioGroup.length; i++) {\n                            var radio = radioGroup[i];\n\n                            switchClasses(radio, radio.checked);\n\n                            if (radio.checked) {\n                                hasChecked = true;\n                            }\n                        }\n\n                        if (hasChecked == true) {\n                            for (var i = 0; i < radioGroup.length; i++) {\n                                radioGroup[i]\n                                    .classList\n                                    .remove(validator.settings.errorClass);\n                            }\n                        }\n\n                        return;\n                    }\n\n                    if (isCheckbox(element)) {\n                        \/\/ Validate checkboxes\n                        switchClasses(element, element.checked);\n\n                        return;\n                    }\n\n                    if (isSelectbox(element)) {\n                        \/\/ Validate selectbox\n                        switchClasses(element, element[element.selectedIndex].getAttribute('value') !== '');\n                    }\n                }\n\n                \/\/ Switch error and valid class\n                function switchClasses(element, isValid) {\n                    toggleClasses(element, validator.settings.errorClass, validator.settings.validClass);\n\n                    if (validator.settings.fieldContainer) {\n                        toggleClasses(closest(element, validator.settings.fieldContainer), validator.settings.errorClass + '-container', validator.settings.validClass + '-container');\n                    }\n\n                    if (isValid) {\n                        toggleClasses(element, validator.settings.validClass, validator.settings.errorClass);\n\n                        if (validator.settings.fieldContainer) {\n                            toggleClasses(closest(element, validator.settings.fieldContainer), validator.settings.validClass + '-container', validator.settings.errorClass + '-container');\n                        }\n                    }\n                }\n\n                \/\/ Helper function to get closest element\n                function closest(element, className, byTag) {\n                    var parent = element;\n                    var found  = false;\n\n                    if (byTag) {\n                        while (parent !== document && parent.tagName.indexOf(className.toUpperCase()) == -1) {\n                            parent = parent.parentNode;\n                        }\n                    } else {\n                        while(!found) {\n                            for (var i = 0; i < parent.classList.length; i++) {\n                                if (parent.classList[i].indexOf(className) !== -1) {\n                                    found = true;\n\n                                    break;\n                                }\n                            }\n\n                            if (!found) {\n                                parent = parent.parentNode;\n                            }\n                        }\n                    }\n\n                    return parent;\n                }\n\n                \/\/ Toggle between classes (addClass is selector. being added to element and removeClass is being removed from element)\n                function toggleClasses(element, addClass, removeClass) {\n                    element\n                        .classList\n                        .remove(removeClass);\n\n                    element\n                        .classList\n                        .add(addClass);\n                }\n\n                \/\/ Field and textarea validation\n                function validateField(field, validationType) {\n                    return new RegExp(getRegex(field, validationType)).test(field.value);\n                }\n\n                \/\/ Get regexes for different type of fields\n                function getRegex(field, validationType) {\n                    switch (validationType) {\n                        case 'presence':\n                            return validator.settings.regexes.presence;\n\n                        case 'date':\n                            return validator.settings.regexes.date;\n\n                        case 'number':\n                            return validator.settings.regexes.number;\n\n                        case 'phone':\n                            return validator.settings.regexes.phone;\n\n                        case 'email':\n                            return validator.settings.regexes.email;\n\n                        case 'zip':\n                            return validator.settings.regexes.zip;\n\n                        case 'match':\n                            return '^' + field.getAttribute('data-match') + '$';\n\n                        case 'confirm':\n                            return '^' + document.querySelector(field.getAttribute('data-confirm')).value + '$';\n\n                        default:\n                            return 'Invalid field validation';\n                    }\n                }\n            }\n        <\/script>\n    \n    <script>\n   \n    (function ( $ ) {\n    \n        const loadAjax = ( filePath ) => {\n            return $.ajax( {\n                \"async\" : false,\n                \"global\" : false,\n                \"url\" : filePath\n            } ).responseJSON;\n        }\n        \n        const handleFormCalc = () => {\n            \n            if ( $( \".js-calc-container\" ).length == 0 ) {\n                return;\n            }\n        \n            const $formContainer = $( \".js-calc-container\" );\n        \n            \/\/ user editable input fields\n            const $inputApplicationSpeed = $formContainer.find( \".js-application-speed\" );\n            const $inputApplicationCharge = $formContainer.find( \".js-application-charge\" );\n            const $inputWorkingHours = $formContainer.find( \".js-working-hours\");\n            const $inputNumberOfMachines = $formContainer.find( \".js-number-of-machines\" );\n            \n        \n            \/\/ results fields\n            const $resultRouteOpt = $formContainer.find( \".js-calc-route-opt-result\" );\n            const $resultSpeedOpt = $formContainer.find( \".js-calc-speed-opt-result\" );\n            const $resultTenderTruckOpt = $formContainer.find( \".js-calc-tender-truck-opt-result\" );\n            const $resultSavingsPerItem = $formContainer.find( \".js-calc-savings-per-item-result\" );\n            const $resultSavingsTotal = $formContainer.find( \".js-calc-savings-total-result\" );\n            \n            \n            \/\/ Fixed Settings Values\n            let tenderTruckWaitingTime = 1.5;\n            let timeLost = 0.5;\n            let fixedApplicationSpeed = 11.5;\n            let daysInSeason = 45;\n            let percentageOfDays = 37;\n            let targetApplicationSpeed = 14;\n        \n        \n            \/\/ validate number fields\n            const $input = $formContainer.find( \".field\" );\n        \n            $( \".js-calc-container .form-validate\" ).each( function () {\n                const validator = new Validator( {\n                    container : this,\n                    fieldContainer : \"js-form-controls\",\n                    validateFieldsOn : \"input\",\n                    preventSubmit : true,\n                    submitButton : \".js-form-calc-btn\",\n                    onSubmit : function ( e, element ) {\n                        e.preventDefault();\n                    }\n                } );\n            } );\n        \n            \/\/ handle changes on input\n            $input.on( \"keyup touchend blur\", function ( e ) {\n                const $this = $( this );\n                let inputValue = this.value;\n        \n                \/\/ Gets user input field values\n                let applicationSpeed = parseInt( $inputApplicationSpeed.val() ) ? parseInt( $inputApplicationSpeed.val() ) : parseInt( $inputApplicationSpeed.attr( \"placeholder\" ) );\n                let applicationCharge = parseFloat( $inputApplicationCharge.val() ) ? parseFloat( $inputApplicationCharge.val() ) : parseFloat( $inputApplicationCharge.attr( \"placeholder\" ) );\n                let numberOfMachines = parseInt( $inputNumberOfMachines.val() ) ? parseInt( $inputNumberOfMachines.val() ) : parseInt( $inputNumberOfMachines.attr( \"placeholder\" ) );\n                let dailyWorkingHours = parseInt( $inputWorkingHours.val() ) ? parseInt( $inputWorkingHours.val() ) : parseInt( $inputWorkingHours.attr( \"placeholder\" ) );\n        \n                \/\/ Savings calculations\n                let $calcSprayerRouteOptimization = timeLost * applicationSpeed * applicationCharge * daysInSeason;\n                let $calcApplicationSpeedOptimization = Math.round( dailyWorkingHours * percentageOfDays * daysInSeason * ( targetApplicationSpeed \/ fixedApplicationSpeed - 1 ) * applicationCharge );\n                let $calcTenderTruckOptimization = Math.round(tenderTruckWaitingTime \/ 2  * daysInSeason * applicationSpeed * applicationCharge);\n                \n                const $calcSavingsPerItem = Math.round( $calcSprayerRouteOptimization + $calcApplicationSpeedOptimization + $calcTenderTruckOptimization  );\n                const $calcSavingsTotal = Math.round( numberOfMachines * $calcSavingsPerItem );\n        \n        \n                if ( $this.is( $( \".form--calc .form__aside .js-number-of-items\" ) ) ) {\n                    $( \".form--calc .form__row.is-cloned-mobile\" )\n                        .find( \".js-number-of-items\" )\n                        .val( inputValue );\n                }\n        \n                if ( $this.is( $( \".form--calc .form__row.is-cloned-mobile .js-number-of-items\" ) ) ) {\n                    $( \".form--calc .form__aside\" )\n                        .find( \".js-number-of-items\" )\n                        .val( inputValue );\n                }\n        \n        \n                \/\/ Set the text on the savings fields\n                $resultRouteOpt.text( $calcSprayerRouteOptimization.toLocaleString() );\n                $resultSpeedOpt.text( $calcApplicationSpeedOptimization.toLocaleString() );\n                $resultTenderTruckOpt.text( $calcTenderTruckOptimization.toLocaleString() );\n                $resultSavingsPerItem.text( $calcSavingsPerItem.toLocaleString() );\n                $resultSavingsTotal.text( $calcSavingsTotal.toLocaleString() );\n                        \n            });\n        }\n\n    \n        $( window ).on( \"load\", function () {\n            handleFormCalc();\n        } );\n    })( jQuery );\n    \n    \n    <\/script>Ready to translate these savings into reality? Use global agriculture software solutions to optimize operations. Get a [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","footnotes":""},"class_list":["post-4408","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Calculator - Solinftec<\/title>\n<meta name=\"description\" content=\"Use our agricultural calculator to optimize productivity and improve efficiency in the field. Try it now and maximize your results!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.solinftec.com\/en-us\/calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculator - Solinftec\" \/>\n<meta property=\"og:description\" content=\"Use our agricultural calculator to optimize productivity and improve efficiency in the field. Try it now and maximize your results!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.solinftec.com\/en-us\/calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Solinftec\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-12T18:54:20+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.solinftec.com\/en-us\/calculator\/\",\"url\":\"https:\/\/www.solinftec.com\/en-us\/calculator\/\",\"name\":\"Calculator - Solinftec\",\"isPartOf\":{\"@id\":\"https:\/\/www.solinftec.com\/en-us\/#website\"},\"datePublished\":\"2021-08-04T20:30:48+00:00\",\"dateModified\":\"2025-03-12T18:54:20+00:00\",\"description\":\"Use our agricultural calculator to optimize productivity and improve efficiency in the field. Try it now and maximize your results!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.solinftec.com\/en-us\/calculator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.solinftec.com\/en-us\/calculator\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.solinftec.com\/en-us\/calculator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.solinftec.com\/en-us\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.solinftec.com\/en-us\/#website\",\"url\":\"https:\/\/www.solinftec.com\/en-us\/\",\"name\":\"Solinftec\",\"description\":\"Agtech company dedicated to going deep in solving real-world problems across the globe\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.solinftec.com\/en-us\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculator - Solinftec","description":"Use our agricultural calculator to optimize productivity and improve efficiency in the field. Try it now and maximize your results!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.solinftec.com\/en-us\/calculator\/","og_locale":"en_US","og_type":"article","og_title":"Calculator - Solinftec","og_description":"Use our agricultural calculator to optimize productivity and improve efficiency in the field. Try it now and maximize your results!","og_url":"https:\/\/www.solinftec.com\/en-us\/calculator\/","og_site_name":"Solinftec","article_modified_time":"2025-03-12T18:54:20+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.solinftec.com\/en-us\/calculator\/","url":"https:\/\/www.solinftec.com\/en-us\/calculator\/","name":"Calculator - Solinftec","isPartOf":{"@id":"https:\/\/www.solinftec.com\/en-us\/#website"},"datePublished":"2021-08-04T20:30:48+00:00","dateModified":"2025-03-12T18:54:20+00:00","description":"Use our agricultural calculator to optimize productivity and improve efficiency in the field. Try it now and maximize your results!","breadcrumb":{"@id":"https:\/\/www.solinftec.com\/en-us\/calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.solinftec.com\/en-us\/calculator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.solinftec.com\/en-us\/calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.solinftec.com\/en-us\/"},{"@type":"ListItem","position":2,"name":"Calculator"}]},{"@type":"WebSite","@id":"https:\/\/www.solinftec.com\/en-us\/#website","url":"https:\/\/www.solinftec.com\/en-us\/","name":"Solinftec","description":"Agtech company dedicated to going deep in solving real-world problems across the globe","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.solinftec.com\/en-us\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/pages\/4408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/comments?post=4408"}],"version-history":[{"count":0,"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/pages\/4408\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.solinftec.com\/en-us\/wp-json\/wp\/v2\/media?parent=4408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}