DESIGN & TECHNICAL DEVELOPMENT

Web-to-Print Development Services

Work with a dedicated PrintNow Technical Consultant to achieve your goals using the PrintNow software.

What types of Development does PrintNow offer?

The PrintNow Dev Team offers a range of services that meet a variety of business needs ranging from a modified theme that matches your existing website and branding to projects that involve a new website design or migration from another platform. We can help you find the service that will get you up and running with the PrintNow platform.

UX Design

UX design is all about identifying and solving user problems. User experience design is a human-first way of designing products. UX design usually comes first in the product development process, followed by UI.

UI Design

UI design is all about creating intuitive, aesthetically-pleasing, interactive interfaces. The UX designer maps out the bare bones of the user journey; the UI designer then fills it in with visual and interactive elements.

Theme Integration

Do you need help getting started with a custom theme? We can integrate any HTML Bootstrap 4 theme. At that point, you can add your own content, and it will take on the theme styles without a lot of extra coding.

Product Development

Product development is everything related to your product catalog published on your Print Stores. It can be in form of category landing pages and/or product templates accessed with the Print Editor.

Store Setup & Administration

PrintNow’s team can tackle your technical project and ensure you have the absolute best implementation possible. Store development is managed using PrintNow’s unified Admin Tools.

Website Migration

The PrintNow Migrations Team recreates your existing website within the PrintNow platform, transferring content and the look and feel of your entire site while improving design & functionality.

3rd Party Integration

PrintNow’s expert team of developers can completely design and development your integration needs on time and on budget. Choose our team when your internal resources are limited to consume the PrintNow API.

PrintNow API Development

The PrintNow API is available for Enterprise clients to consume. Changes are requested occasionally that require the PrintNow core team to extend the API. This service is in place to help our customers with any automation need.

PrintNow Core Development

The PrintNow platform built with .NET, Angular, SQL Server, & HTML5 offers endless possibilities. Our team brings strong technical expertise, insights, and knowledge to help customize what comes out-of-box into something new.

Frequently asked questions, answered.

Hourly rates range from $125 to $250 per hour, depending on the experience level of the developer/consultant and if it’s standard front-end development or requires back-end development that affects the core PrintNow code base.

The short answer is we offer both, but generally, customers are more comfortable with a per-project flat rate. Overall, the pricing structure you choose depends greatly on many variables and comes down to what makes the most sense for you.

Charging per hour

Charging an hourly rate is a better option in some scenarios. If the scope of work isn’t clear from the outset, we may recommend this approach. Or we may offer a service to properly define project details to help it move to a per-project flat-rate option. Per-hour pricing also works well for maintenance updates or long-term ongoing projects.

Charging a per-project flat rate

Charging a flat rate makes the most sense when the client brief is clear and structured, and we can predict how much work the project will entail. Some clients are more hesitant to agree to a flat rate. Presenting one flat rate before any work is done can make some clients nervous or cause sticker shock, prompting them to go elsewhere.

Scroll down to the bottom of this page and submit the online form after clicking on the “Request more information” button. A technical consultant will contact you to schedule a meeting with a broad understanding of all development services to investigate further.

Get More Information About PrintNow Development Services

Want to learn more? We can help find the service that’s right for you.

w2p software company staff

Contact PrintNow

Let’s get this conversation started. Tell us a bit about yourself, and we’ll get in touch as soon as we can.

#_form_11_ { font-size:14px; line-height:1.6; font-family:arial, helvetica, sans-serif; margin:0; } #_form_11_ * { outline:0; } ._form_hide { display:none; visibility:hidden; } ._form_show { display:block; visibility:visible; } #_form_11_._form-top { top:0; } #_form_11_._form-bottom { bottom:0; } #_form_11_._form-left { left:0; } #_form_11_._form-right { right:0; } #_form_11_ input[type="text"],#_form_11_ input[type="date"],#_form_11_ textarea { padding:6px; height:auto; border:#979797 1px solid; border-radius:4px; color:#000 !important; font-size:14px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; } #_form_11_ textarea { resize:none; } #_form_11_ ._submit { -webkit-appearance:none; cursor:pointer; font-family:arial, sans-serif; font-size:14px; text-align:center; background:#ff5745 !important; border:0 !important; color:#fff !important; padding:10px !important; } #_form_11_ ._close-icon { cursor:pointer; background-image:url('https://d226aj4ao1t61q.cloudfront.net/esfkyjh1u_forms-close-dark.png'); background-repeat:no-repeat; background-size:14.2px 14.2px; position:absolute; display:block; top:11px; right:9px; overflow:hidden; width:16.2px; height:16.2px; } #_form_11_ ._close-icon:before { position:relative; } #_form_11_ ._form-body { margin-bottom:30px; } #_form_11_ ._form-image-left { width:150px; float:left; } #_form_11_ ._form-content-right { margin-left:164px; } #_form_11_ ._form-branding { color:#fff; font-size:10px; clear:both; text-align:left; margin-top:30px; font-weight:100; } #_form_11_ ._form-branding ._logo { display:block; width:130px; height:14px; margin-top:6px; background-image:url('https://d226aj4ao1t61q.cloudfront.net/hh9ujqgv5_aclogo_li.png'); background-size:130px auto; background-repeat:no-repeat; } #_form_11_ .form-sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0, 0, 0, 0); border:0; } #_form_11_ ._form-label,#_form_11_ ._form_element ._form-label { font-weight:bold; margin-bottom:5px; display:block; } #_form_11_._dark ._form-branding { color:#333; } #_form_11_._dark ._form-branding ._logo { background-image:url('https://d226aj4ao1t61q.cloudfront.net/jftq2c8s_aclogo_dk.png'); } #_form_11_ ._form_element { position:relative; margin-bottom:10px; font-size:0; max-width:100%; } #_form_11_ ._form_element * { font-size:14px; } #_form_11_ ._form_element._clear { clear:both; width:100%; float:none; } #_form_11_ ._form_element._clear:after { clear:left; } #_form_11_ ._form_element input[type="text"],#_form_11_ ._form_element input[type="date"],#_form_11_ ._form_element select,#_form_11_ ._form_element textarea:not(.g-recaptcha-response) { display:block; width:100%; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; font-family:inherit; } #_form_11_ ._field-wrapper { position:relative; } #_form_11_ ._inline-style { float:left; } #_form_11_ ._inline-style input[type="text"] { width:150px; } #_form_11_ ._inline-style:not(._clear) + ._inline-style:not(._clear) { margin-left:20px; } #_form_11_ ._form_element img._form-image { max-width:100%; } #_form_11_ ._form_element ._form-fieldset { border:0; padding:0.01em 0 0 0; margin:0; min-width:0; } #_form_11_ ._clear-element { clear:left; } #_form_11_ ._full_width { width:100%; } #_form_11_ ._form_full_field { display:block; width:100%; margin-bottom:10px; } #_form_11_ input[type="text"]._has_error,#_form_11_ textarea._has_error { border:#f37c7b 1px solid; } #_form_11_ input[type="checkbox"]._has_error { outline:#f37c7b 1px solid; } #_form_11_ ._error { display:block; position:absolute; font-size:14px; z-index:10000001; } #_form_11_ ._error._above { padding-bottom:4px; bottom:39px; right:0; } #_form_11_ ._error._below { padding-top:4px; top:100%; right:0; } #_form_11_ ._error._above ._error-arrow { bottom:0; right:15px; border-left:5px solid transparent; border-right:5px solid transparent; border-top:5px solid #f37c7b; } #_form_11_ ._error._below ._error-arrow { top:0; right:15px; border-left:5px solid transparent; border-right:5px solid transparent; border-bottom:5px solid #f37c7b; } #_form_11_ ._error-inner { font-size: 14px; font-family: arial, sans-serif; color: #ff5745; text-align: center; text-decoration: none; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } } #_form_11_ ._error-inner._form_error { margin-bottom:5px; text-align:left; } #_form_11_ ._button-wrapper ._error-inner._form_error { position:static; } #_form_11_ ._error-inner._no_arrow { margin-bottom:10px; } #_form_11_ ._error-arrow { position:absolute; width:0; height:0; } #_form_11_ ._error-html { margin-bottom:10px; } .pika-single { z-index:10000001 !important; } #_form_11_ input[type="text"].datetime_date { width:69%; display:inline; } #_form_11_ select.datetime_time { width:29%; display:inline; height:32px; } @media all and (min-width:320px) and (max-width:667px) { ::-webkit-scrollbar { display:none; } #_form_11_ { margin:0; width:100%; min-width:100%; max-width:100%; box-sizing:border-box; } #_form_11_ * { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; font-size:1em; } #_form_11_ ._form-content { margin:0; width:100%; } #_form_11_ ._form-inner { display:block; min-width:100%; } #_form_11_ ._form-title,#_form_11_ ._inline-style { margin-top:0; margin-right:0; margin-left:0; } #_form_11_ ._form-title { font-size:1.2em; } #_form_11_ ._form_element { margin:0 0 20px; padding:0; width:100%; } #_form_11_ ._form-element,#_form_11_ ._inline-style,#_form_11_ input[type="text"],#_form_11_ label,#_form_11_ p,#_form_11_ textarea:not(.g-recaptcha-response) { float:none; display:block; width:100%; } #_form_11_ ._row._checkbox-radio label { display:inline; } #_form_11_ ._row,#_form_11_ p,#_form_11_ label { margin-bottom:0.7em; width:100%; } #_form_11_ ._row input[type="checkbox"],#_form_11_ ._row input[type="radio"] { margin:0 !important; vertical-align:middle !important; } #_form_11_ ._row input[type="checkbox"] + span label { display:inline; } #_form_11_ ._row span label { margin:0 !important; width:initial !important; vertical-align:middle !important; } #_form_11_ ._form-image { max-width:100%; height:auto !important; } #_form_11_ input[type="text"] { padding-left:10px; padding-right:10px; font-size:16px; line-height:1.3em; -webkit-appearance:none; } #_form_11_ input[type="radio"],#_form_11_ input[type="checkbox"] { display:inline-block; width:1.3em; height:1.3em; font-size:1em; margin:0 0.3em 0 0; vertical-align:baseline; } #_form_11_ button[type="submit"] { padding:20px; font-size:1.5em; } #_form_11_ ._inline-style { margin:20px 0 0 !important; } } #_form_11_ { position: relative; text-align: left; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; *zoom: 1; background: transparent !important; border: 0px solid #b0b0b0 !important; width: 100%; -moz-border-radius: 0px !important; -webkit-border-radius: 0px !important; border-radius: 0px !important; color: #3a3a3a !important; } #_form_11_._inline-form,#_form_11_._inline-form ._form-content,#_form_11_._inline-form input,#_form_11_._inline-form ._submit { font-family:"IBM Plex Sans", Helvetica, sans-serif, 'IBM Plex Sans', arial, sans-serif; } #_form_11_ ._form-title { font-size:22px; line-height:22px; font-weight:600; margin-bottom:0; } #_form_11_:before,#_form_11_:after { content:" "; display:table; } #_form_11_:after { clear:both; } #_form_11_._inline-style { width:auto; display:inline-block; } #_form_11_._inline-style input[type="text"],#_form_11_._inline-style input[type="date"] { padding:10px 12px; } #_form_11_._inline-style button._inline-style { position:relative; top:27px; } #_form_11_._inline-style p { margin:0; } #_form_11_._inline-style ._button-wrapper { position:relative; margin:27px 12.5px 0 20px; } #_form_11_ ._form-thank-you { position:relative; left:0; right:0; text-align:center; font-size:18px; } @media all and (min-width:320px) and (max-width:667px) { #_form_11_._inline-form._inline-style ._inline-style._button-wrapper { margin-top:20px !important; margin-left:0 !important; } } #_form_11_ ._submit { display:block; width:100px; margin:auto; } #_form_11_ #_form_11_ { position:relative; text-align:left; margin:0px auto 0; padding:0px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; *zoom:1; background:transparent !important; border:0px solid #b0b0b0 !important; width:100%; -moz-border-radius:0px !important; -webkit-border-radius:0px !important; border-radius:0px !important; color:#3a3a3a !important; } #_form_11_ form#_form_61A191352AD2D_ { margin:0px !important; padding:0px !important; }
1 2-5 6-10 11-25 26-50 51-100 101-200 201-500 501 or more
Afghanistan Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Armenia Aruba Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory Brunei Darussalam Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands Central African Republic Chad Chile China Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Congo, the Democratic Republic of the Cook Islands Costa Rica Cote D'Ivoire Croatia Cuba Cyprus Czech Republic Denmark Djibouti Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Falkland Islands (Malvinas) Faroe Islands Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Gambia Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guinea Guinea-Bissau Guyana Haiti Heard Island and Mcdonald Islands Holy See (Vatican City State) Honduras Hong Kong Hungary Iceland India Indonesia Iran, Islamic Republic of Iraq Ireland Israel Italy Jamaica Japan Jordan Kazakhstan Kenya Kiribati Korea, Democratic People's Republic of Korea, Republic of Kuwait Kyrgyzstan Lao People's Democratic Republic Latvia Lebanon Lesotho Liberia Libyan Arab Jamahiriya Liechtenstein Lithuania Luxembourg Macao Macedonia, the Former Yugoslav Republic of Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Micronesia, Federated States of Moldova, Republic of Monaco Mongolia Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Netherlands Antilles New Caledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island Northern Mariana Islands Norway Oman Pakistan Palau Palestinian Territory, Occupied Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russian Federation Rwanda Saint Helena Saint Kitts and Nevis Saint Lucia Saint Pierre and Miquelon Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe Saudi Arabia Senegal Serbia and Montenegro Seychelles Sierra Leone Singapore Slovakia Slovenia Solomon Islands Somalia South Africa South Georgia and the South Sandwich Islands Spain Sri Lanka Sudan Suriname Svalbard and Jan Mayen Swaziland Sweden Switzerland Syrian Arab Republic Taiwan, Province of China Tajikistan Tanzania, United Republic of Thailand Timor-Leste Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu Uganda Ukraine United Arab Emirates United Kingdom United States United States Minor Outlying Islands Uruguay Uzbekistan Vanuatu Venezuela Viet Nam Virgin Islands, British Virgin Islands, U.s. Wallis and Futuna Western Sahara Yemen Zambia Zimbabwe
window.cfields = {"7":"employees","6":"website","4":"country","8":"message"}; window._show_thank_you = function(id, message, trackcmp_url, email) { var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you'); form.querySelector('._form-content').style.display = 'none'; thank_you.innerHTML = message; thank_you.style.display = 'block'; const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias; var visitorObject = window[vgoAlias]; if (email && typeof visitorObject !== 'undefined') { visitorObject('setEmail', email); visitorObject('update'); } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) { // Site tracking URL to use after inline form submission. _load_script(trackcmp_url); } if (typeof window._form_callback !== 'undefined') window._form_callback(id); }; window._show_error = function(id, message, html) { var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error'); if (old_error) old_error.parentNode.removeChild(old_error); err.innerHTML = message; err.className = '_error-inner _form_error _no_arrow'; var wrapper = document.createElement('div'); wrapper.className = '_form-inner'; wrapper.appendChild(err); button.parentNode.insertBefore(wrapper, button); document.querySelector('[id^="_form"][id$="_submit"]').disabled = false; if (html) { var div = document.createElement('div'); div.className = '_error-html'; div.innerHTML = html; err.appendChild(div); } }; window._load_script = function(url, callback) { var head = document.querySelector('head'), script = document.createElement('script'), r = false; script.type = 'text/javascript'; script.charset = 'utf-8'; script.src = url; if (callback) { script.onload = script.onreadystatechange = function() { if (!r && (!this.readyState || this.readyState == 'complete')) { r = true; callback(); } }; } head.appendChild(script); }; (function() { if (window.location.search.search("excludeform") !== -1) return false; var getCookie = function(name) { var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)')); return match ? match[2] : null; } var setCookie = function(name, value) { var now = new Date(); var time = now.getTime(); var expireTime = time + 1000 * 60 * 60 * 24 * 365; now.setTime(expireTime); document.cookie = name + '=' + value + '; expires=' + now + ';path=/'; } var addEvent = function(element, event, func) { if (element.addEventListener) { element.addEventListener(event, func); } else { var oldFunc = element['on' + event]; element['on' + event] = function() { oldFunc.apply(this, arguments); func.apply(this, arguments); }; } } var _removed = false; var form_to_submit = document.getElementById('_form_11_'); var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false; var getUrlParam = function(name) { var regexStr = '[\?&]' + name + '=([^&#]*)'; var results = new RegExp(regexStr, 'i').exec(window.location.href); return results != undefined ? decodeURIComponent(results[1]) : false; }; for (var i = 0; i < allInputs.length; i++) { var regexStr = "field\\[(\\d+)\\]"; var results = new RegExp(regexStr).exec(allInputs[i].name); if (results != undefined) { allInputs[i].dataset.name = window.cfields[results[1]]; } else { allInputs[i].dataset.name = allInputs[i].name; } var fieldVal = getUrlParam(allInputs[i].dataset.name); if (fieldVal) { if (allInputs[i].dataset.autofill === "false") { continue; } if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") { if (allInputs[i].value == fieldVal) { allInputs[i].checked = true; } } else { allInputs[i].value = fieldVal; } } } var remove_tooltips = function() { for (var i = 0; i < tooltips.length; i++) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); } tooltips = []; }; var remove_tooltip = function(elem) { for (var i = 0; i < tooltips.length; i++) { if (tooltips[i].elem === elem) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); tooltips.splice(i, 1); return; } } }; var create_tooltip = function(elem, text) { var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {}; if (elem.type != 'radio' && elem.type != 'checkbox') { tooltip.className = '_error'; arrow.className = '_error-arrow'; inner.className = '_error-inner'; inner.innerHTML = text; tooltip.appendChild(arrow); tooltip.appendChild(inner); elem.parentNode.appendChild(tooltip); } else { tooltip.className = '_error-inner _no_arrow'; tooltip.innerHTML = text; elem.parentNode.insertBefore(tooltip, elem); new_tooltip.no_arrow = true; } new_tooltip.tip = tooltip; new_tooltip.elem = elem; tooltips.push(new_tooltip); return new_tooltip; }; var resize_tooltip = function(tooltip) { var rect = tooltip.elem.getBoundingClientRect(); var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)); if (scrollPosition < 40) { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below'; } else { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above'; } }; var resize_tooltips = function() { if (_removed) return; for (var i = 0; i < tooltips.length; i++) { if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]); } }; var validate_field = function(elem, remove) { var tooltip = null, value = elem.value, no_error = true; remove ? remove_tooltip(elem) : false; if (elem.type != 'checkbox') elem.className = elem.className.replace(/ ?_has_error ?/g, ''); if (elem.getAttribute('required') !== null) { if (elem.type == 'radio' || (elem.type == 'checkbox' && /any/.test(elem.className))) { var elems = form_to_submit.elements[elem.name]; if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) { no_error = elem.checked; } else { no_error = false; for (var i = 0; i < elems.length; i++) { if (elems[i].checked) no_error = true; } } if (!no_error) { tooltip = create_tooltip(elem, "Please select an option."); } } else if (elem.type =='checkbox') { var elems = form_to_submit.elements[elem.name], found = false, err = []; no_error = true; for (var i = 0; i < elems.length; i++) { if (elems[i].getAttribute('required') === null) continue; if (!found && elems[i] !== elem) return true; found = true; elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, ''); if (!elems[i].checked) { no_error = false; elems[i].className = elems[i].className + ' _has_error'; err.push("Checking %s is required".replace("%s", elems[i].value)); } } if (!no_error) { tooltip = create_tooltip(elem, err.join('
')); } } else if (elem.tagName == 'SELECT') { var selected = true; if (elem.multiple) { selected = false; for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected) { selected = true; break; } } } else { for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected && !elem.options[i].value) { selected = false; } } } if (!selected) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Please select an option."); } } else if (value === undefined || value === null || value === '') { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "This field is required."); } } if (no_error && elem.name == 'email') { if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid email address."); } } if (no_error && /date_field/.test(elem.className)) { if (!value.match(/^\d\d\d\d-\d\d-\d\d$/)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid date."); } } tooltip ? resize_tooltip(tooltip) : false; return no_error; }; var needs_validate = function(el) { if(el.getAttribute('required') !== null){ return true } if(el.name === 'email' && el.value !== ""){ return true } return false }; var validate_form = function(e) { var err = form_to_submit.querySelector('._form_error'), no_error = true; if (!submitted) { submitted = true; for (var i = 0, len = allInputs.length; i < len; i++) { var input = allInputs[i]; if (needs_validate(input)) { if (input.type == 'text') { addEvent(input, 'blur', function() { this.value = this.value.trim(); validate_field(this, true); }); addEvent(input, 'input', function() { validate_field(this, true); }); } else if (input.type == 'radio' || input.type == 'checkbox') { (function(el) { var radios = form_to_submit.elements[el.name]; for (var i = 0; i < radios.length; i++) { addEvent(radios[i], 'click', function() { validate_field(el, true); }); } })(input); } else if (input.tagName == 'SELECT') { addEvent(input, 'change', function() { validate_field(this, true); }); } else if (input.type == 'textarea'){ addEvent(input, 'input', function() { validate_field(this, true); }); } } } } remove_tooltips(); for (var i = 0, len = allInputs.length; i < len; i++) { var elem = allInputs[i]; if (needs_validate(elem)) { if (elem.tagName.toLowerCase() !== "select") { elem.value = elem.value.trim(); } validate_field(elem) ? true : no_error = false; } } if (!no_error && e) { e.preventDefault(); } resize_tooltips(); return no_error; }; addEvent(window, 'resize', resize_tooltips); addEvent(window, 'scroll', resize_tooltips); window._old_serialize = null; if (typeof serialize !== 'undefined') window._old_serialize = window.serialize; _load_script("//d3rxaij56vjege.cloudfront.net/form-serialize/0.3/serialize.min.js", function() { window._form_serialize = window.serialize; if (window._old_serialize) window.serialize = window._old_serialize; }); var form_submit = function(e) { e.preventDefault(); if (validate_form()) { // use this trick to get the submit button & disable it using plain javascript document.querySelector('#_form_11_submit').disabled = true; var serialized = _form_serialize(document.getElementById('_form_11_')).replace(/%0A/g, '\\n'); var err = form_to_submit.querySelector('._form_error'); err ? err.parentNode.removeChild(err) : false; _load_script('https://printnow.activehosted.com/proc.php?' + serialized + '&jsonp=true'); } return false; }; addEvent(form_to_submit, 'submit', form_submit); })();