| 1 |
window.cfields = []; |
| 2 |
window._show_thank_you = function(id, message, trackcmp_url, email) { |
| 3 |
console.log('_show_thank_you'); |
| 4 |
var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you'); |
| 5 |
form.querySelector('._form-content').style.display = 'none'; |
| 6 |
thank_you.innerHTML = message; |
| 7 |
thank_you.style.display = 'block'; |
| 8 |
const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias; |
| 9 |
var visitorObject = window[vgoAlias]; |
| 10 |
if (email && typeof visitorObject !== 'undefined') { |
| 11 |
visitorObject('setEmail', email); |
| 12 |
visitorObject('update'); |
| 13 |
} else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) { |
| 14 |
// Site tracking URL to use after inline form submission. |
| 15 |
_load_script(trackcmp_url); |
| 16 |
} |
| 17 |
if (typeof window._form_callback !== 'undefined') window._form_callback(id); |
| 18 |
}; |
| 19 |
window._show_error = function(id, message, html) { |
| 20 |
var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error'); |
| 21 |
if (old_error) old_error.parentNode.removeChild(old_error); |
| 22 |
err.innerHTML = message; |
| 23 |
err.className = '_error-inner _form_error _no_arrow'; |
| 24 |
var wrapper = document.createElement('div'); |
| 25 |
wrapper.className = '_form-inner'; |
| 26 |
wrapper.appendChild(err); |
| 27 |
button.parentNode.insertBefore(wrapper, button); |
| 28 |
document.querySelector('[id^="_form"][id$="_submit"]').disabled = false; |
| 29 |
if (html) { |
| 30 |
var div = document.createElement('div'); |
| 31 |
div.className = '_error-html'; |
| 32 |
div.innerHTML = html; |
| 33 |
err.appendChild(div); |
| 34 |
} |
| 35 |
}; |
| 36 |
window._load_script = function(url, callback) { |
| 37 |
var head = document.querySelector('head'), script = document.createElement('script'), r = false; |
| 38 |
script.type = 'text/javascript'; |
| 39 |
script.charset = 'utf-8'; |
| 40 |
script.src = url; |
| 41 |
if (callback) { |
| 42 |
script.onload = script.onreadystatechange = function() { |
| 43 |
if (!r && (!this.readyState || this.readyState == 'complete')) {r = true;callback();} |
| 44 |
}; |
| 45 |
} |
| 46 |
head.appendChild(script); |
| 47 |
}; |
| 48 |
(function() { |
| 49 |
if (window.location.search.search("excludeform") !== -1) return false; |
| 50 |
var getCookie = function(name) { |
| 51 |
var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)')); |
| 52 |
return match ? match[2] : null; |
| 53 |
} |
| 54 |
var setCookie = function(name, value) { |
| 55 |
var now = new Date(); |
| 56 |
var time = now.getTime(); |
| 57 |
var expireTime = time + 1000 * 60 * 60 * 24 * 365; |
| 58 |
now.setTime(expireTime); |
| 59 |
document.cookie = name + '=' + value + '; expires=' + now + ';path=/'; |
| 60 |
} |
| 61 |
var addEvent = function(element, event, func) { |
| 62 |
if (element.addEventListener) { |
| 63 |
element.addEventListener(event, func); |
| 64 |
} else { |
| 65 |
var oldFunc = element['on' + event]; |
| 66 |
element['on' + event] = function() {oldFunc.apply(this, arguments);func.apply(this, arguments);}; |
| 67 |
} |
| 68 |
} |
| 69 |
var _removed = false; |
| 70 |
var form_to_submit = document.getElementById('_form_3_'); |
| 71 |
var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false; |
| 72 |
|
| 73 |
var getUrlParam = function(name) { |
| 74 |
var regexStr = '[\?&]' + name + '=([^&#]*)'; |
| 75 |
var results = new RegExp(regexStr, 'i').exec(window.location.href); |
| 76 |
return results != undefined ? decodeURIComponent(results[1]) : false; |
| 77 |
}; |
| 78 |
|
| 79 |
for (var i = 0; i < allInputs.length; i++) { |
| 80 |
var regexStr = "field\\[(\\d+)\\]"; |
| 81 |
var results = new RegExp(regexStr).exec(allInputs[i].name); |
| 82 |
if (results != undefined) { |
| 83 |
allInputs[i].dataset.name = window.cfields[results[1]]; |
| 84 |
} else { |
| 85 |
allInputs[i].dataset.name = allInputs[i].name; |
| 86 |
} |
| 87 |
var fieldVal = getUrlParam(allInputs[i].dataset.name); |
| 88 |
if (fieldVal) { |
| 89 |
if (allInputs[i].dataset.autofill === "false") {continue;} |
| 90 |
if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") { |
| 91 |
if (allInputs[i].value == fieldVal) { |
| 92 |
allInputs[i].checked = true; |
| 93 |
} |
| 94 |
} else { |
| 95 |
allInputs[i].value = fieldVal; |
| 96 |
} |
| 97 |
} |
| 98 |
} |
| 99 |
var remove_tooltips = function() { |
| 100 |
for (var i = 0; i < tooltips.length; i++) {tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);} |
| 101 |
tooltips = []; |
| 102 |
}; |
| 103 |
var remove_tooltip = function(elem) { |
| 104 |
for (var i = 0; i < tooltips.length; i++) { |
| 105 |
if (tooltips[i].elem === elem) {tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);tooltips.splice(i, 1);return;} |
| 106 |
} |
| 107 |
}; |
| 108 |
var create_tooltip = function(elem, text) { |
| 109 |
var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {}; |
| 110 |
if (elem.type != 'radio' && elem.type != 'checkbox') { |
| 111 |
tooltip.className = '_error'; |
| 112 |
arrow.className = '_error-arrow'; |
| 113 |
inner.className = '_error-inner'; |
| 114 |
inner.innerHTML = text; |
| 115 |
tooltip.appendChild(arrow); |
| 116 |
tooltip.appendChild(inner); |
| 117 |
elem.parentNode.appendChild(tooltip); |
| 118 |
} else { |
| 119 |
tooltip.className = '_error-inner _no_arrow'; |
| 120 |
tooltip.innerHTML = text; |
| 121 |
elem.parentNode.insertBefore(tooltip, elem); |
| 122 |
new_tooltip.no_arrow = true; |
| 123 |
} |
| 124 |
new_tooltip.tip = tooltip; |
| 125 |
new_tooltip.elem = elem; |
| 126 |
tooltips.push(new_tooltip); |
| 127 |
return new_tooltip; |
| 128 |
}; |
| 129 |
var resize_tooltip = function(tooltip) { |
| 130 |
var rect = tooltip.elem.getBoundingClientRect(); |
| 131 |
var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)); |
| 132 |
if (scrollPosition < 40) { |
| 133 |
tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below'; |
| 134 |
} else { |
| 135 |
tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above'; |
| 136 |
} |
| 137 |
}; |
| 138 |
var resize_tooltips = function() { |
| 139 |
if (_removed) return; |
| 140 |
for (var i = 0; i < tooltips.length; i++) {if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);} |
| 141 |
}; |
| 142 |
var validate_field = function(elem, remove) { |
| 143 |
var tooltip = null, value = elem.value, no_error = true; |
| 144 |
remove ? remove_tooltip(elem) : false; |
| 145 |
elem.className = elem.className.replace(/ ?_has_error ?/g, ''); |
| 146 |
if (elem.getAttribute('required') !== null) { |
| 147 |
if (value === undefined || value === null || value === '') { |
| 148 |
elem.className = elem.className + ' _has_error'; |
| 149 |
no_error = false; |
| 150 |
tooltip = create_tooltip(elem, "This field is required."); |
| 151 |
} |
| 152 |
} |
| 153 |
if (no_error && elem.name == 'email') { |
| 154 |
if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) { |
| 155 |
elem.className = elem.className + ' _has_error'; |
| 156 |
no_error = false; |
| 157 |
tooltip = create_tooltip(elem, "Enter a valid email address."); |
| 158 |
} |
| 159 |
} |
| 160 |
tooltip ? resize_tooltip(tooltip) : false; |
| 161 |
return no_error; |
| 162 |
}; |
| 163 |
var needs_validate = function(el) { |
| 164 |
if(el.getAttribute('required') !== null){ |
| 165 |
return true |
| 166 |
} |
| 167 |
if(el.name === 'email' && el.value !== ""){ |
| 168 |
return true |
| 169 |
} |
| 170 |
return false |
| 171 |
}; |
| 172 |
var validate_form = function(e) { |
| 173 |
var err = form_to_submit.querySelector('._form_error'), no_error = true; |
| 174 |
if (!submitted) { |
| 175 |
submitted = true; |
| 176 |
for (var i = 0, len = allInputs.length; i < len; i++) { |
| 177 |
var input = allInputs[i]; |
| 178 |
if (needs_validate(input)) { |
| 179 |
if (input.type == 'text') { |
| 180 |
addEvent(input, 'blur', function() {this.value = this.value.trim();validate_field(this, true);}); |
| 181 |
addEvent(input, 'input', function() {validate_field(this, true);}); |
| 182 |
} |
| 183 |
} |
| 184 |
} |
| 185 |
} |
| 186 |
remove_tooltips(); |
| 187 |
for (var i = 0, len = allInputs.length; i < len; i++) { |
| 188 |
var elem = allInputs[i]; |
| 189 |
if (needs_validate(elem)) { |
| 190 |
if (elem.tagName.toLowerCase() !== "select") { |
| 191 |
elem.value = elem.value.trim(); |
| 192 |
} |
| 193 |
validate_field(elem) ? true : no_error = false; |
| 194 |
} |
| 195 |
} |
| 196 |
if (!no_error && e) {e.preventDefault();} |
| 197 |
resize_tooltips(); |
| 198 |
return no_error; |
| 199 |
}; |
| 200 |
addEvent(window, 'resize', resize_tooltips); |
| 201 |
addEvent(window, 'scroll', resize_tooltips); |
| 202 |
window._old_serialize = null; |
| 203 |
if (typeof serialize !== 'undefined') window._old_serialize = window.serialize; |
| 204 |
_load_script("//d3rxaij56vjege.cloudfront.net/form-serialize/0.3/serialize.min.js", function() { |
| 205 |
window._form_serialize = window.serialize; |
| 206 |
if (window._old_serialize) window.serialize = window._old_serialize; |
| 207 |
}); |
| 208 |
var form_submit = function(e) { |
| 209 |
e.preventDefault(); |
| 210 |
if (validate_form()) { |
| 211 |
// use this trick to get the submit button & disable it using plain javascript |
| 212 |
document.querySelector('#_form_3_submit').disabled = true; |
| 213 |
var serialized = _form_serialize(document.getElementById('_form_3_')); |
| 214 |
var err = form_to_submit.querySelector('._form_error'); |
| 215 |
err ? err.parentNode.removeChild(err) : false; |
| 216 |
_load_script('https://strategy1137274.activehosted.com/proc.php?' + serialized + '&jsonp=true'); |
| 217 |
} |
| 218 |
return false; |
| 219 |
}; |
| 220 |
addEvent(form_to_submit, 'submit', form_submit); |
| 221 |
})(); |
| 222 |
|