Originally Posted on The Coaching Tools Company as GROW Model Questions: 79+ Helpful Coaching Questions to use with the GROW Model
In this article we share 79+ grow model questions to help you coach and use the GROW model more effectively!
Take me straight to the GROW Model Questions >>
Why the GROW Model?
The GROW model is, at its simplest, a coaching session framework. It provides the key elements of an effective coaching session with a simple yet powerful structure.
The GROW Model is so popular because it’s results-oriented and it works! Using these GROW coaching questions, your clients will always have a productive coaching session. And you’ll feel supported because the GROW framework ensures that the key elements of a coaching session are covered.
Once you know this model off by heart, you’ll never lose your way in a coaching session again!
IMPORTANT: GROW or T-GROW is a coaching session model that helps you with the process of holding a coaching session, rather than an entire coaching model.
So, what are GROW Model Questions?
GROW model questions are simply coaching questions that follow the GROW model framework. They help your clients choose a goal for each coaching session, work through what’s getting in the way and brainstorm solutions before finally committing to action.
A Quick GROW Model Recap
You probably already use elements of the GROW model without realizing it:
- G: Goal (identify a goal or outcome for the coaching session)
- R: Reality (explore the topic/goal, why, what’s getting in the way etc.)
- O: Options (brainstorm ideas ie. what they could do to move forwards)
- W: Will Do (choose the actions they will do to move forwards)
I also like to add a TOPIC to the start of a coaching session which makes it a T-GROW model:
- T: Topic (select a topic or theme for the coaching session)
When we add “T for Topic” to the beginning, making it T-GROW, we’re identifying a Topic (general area to focus in on) to focus the client and make it easier to choose the session G – Goal.
For more information about the (T) GROW model, including what, how to use, why, its history and more (including a downloadable special report) go here: The GROW Model Explained for Coaches (plus .PDF)
Here are your GROW Model Questions
(T – Topic) GROW Model Questions
We’re starting our list of grow coaching questions with some ideas to help you establish a session T – TOPIC.
This is important for when your client is scattered or unclear what they want from their coaching session.
For example, if your client has no idea what they want to use their coaching session for, begin by identifying a broader session topic or area. And if they can’t focus on a goal, it can be good to take a step back and agree a topic area.
Use these (T – Topic) coaching questions to focus your client and make your coaching session manageable!
12 GROW Coaching Questions to Establish a Session T—Topic
- “So, tell me how you’ve been?” (Great open-ended question to drill down from)
- “What could we work on today that would help you the most over the next week?”
- “What ideas do you have to focus on that would be useful to you over the next month?”
- “What did you have in mind to talk about at this coaching session?”
- “What’s been working well for you since the last session?”
- “What hasn’t been working for you lately?”
- “What do you need most from me today?”
- “I’m curious how you think I can best help you today…”
- “What’s been niggling at you lately?”
- “What’s disturbing your peace of mind?”
- “What’s not going well for you at the moment?”
- “Which area of your life could most do with a tune-up?”
(G – Goal) GROW Model Questions
Why it’s important: Establishing a session Goal is arguably the most important stage of any coaching session where you co-create an agreement on what you’ll work on during your time together.
Creating a session goal helps your client get clear on what they want from coaching with you today. And it therefore helps you manage session timing, stay on track—and deliver results.
12 GROW Coaching Questions to Establish the Session G—Goal
- Super simple: “What is your goal for today’s session?”
- “What’s most important for you to focus in on today?”
- “Imagine it’s the end of your day. What would you be disappointed not to have worked on with me today?”
- “What could we achieve in this session that would make you jump for joy?”
- “What you would love to have happen by the end of this session?”
- “What specifically would you like to get out of the next 30/45/60 minutes?”
- “I’m wondering, what if we worked on it right now, would REALLY put a smile on your face?”
- “What outcome are you looking for from our session today?”
- “What would be the most helpful thing you could take away from this session?”
- “If you were to imagine today’s coaching session had just ended and you’re happy and excited. What did we just do together that made that possible?”
- “How will you know you’ve achieved what you wanted from today’s session?”
- “What would a super-successful coaching session look like today?”
TIP: For more general goal-setting questions, you may like our FREE Tool: 21 Questions to Extraordinary Goal-Setting
(R – Reality) GROW Model Questions
Why it’s important: Exploring a client’s Reality is the ‘meat’ of any coaching session. The purpose of exploring our client’s Reality is to raise their self-awareness about their situation and how they got there.
When a coaching session feels “dry” and functional (or lacks inspiration and insight) it’s usually because not enough time was spent exploring the client’s Reality.
It’s your client’s understanding of their Reality that gives them the motivation to make change. So in this section we use grow questions to review, challenge and reflect back to our client what they say: What have you done so far? What’s working for you and what isn’t? Look at feelings and explore beliefs, gut-feelings and intuition—these are often new areas for our clients.
We might also consider things like values, habits, priorities, limiting beliefs and actions taken/not taken so far to create a full picture of what is currently going on for them.
15+ GROW Coaching Questions for Exploring Your Clients’ R—Reality
- “Describe a day in your life—as it relates to this issue or goal.”
- “Where are you now in relation to your goal?”, then “What have you already done towards your goal?” and “What have you learned so far?”
- “How do you feel about your current situation?” and “How do you feel about yourself in this situation?”
- “What are you not looking at or hiding from?” and “What have you been avoiding?”
- “What is your intuition telling you?”
- “Where are you not being respected—or not respecting yourself—right now?”
- “What is your prevalent mood?” and, “What habits are getting in the way?”
- “What are you telling yourself, that’s getting in the way?”
- “Who will be the ‘winners’ and ‘losers’ if you achieve your goal?”
- “What do you like about this situation?” and, “How does it suit you to stay as you are?”
- “What has stopped you from doing more/moving towards your goal?”
- “In a nutshell, who or what’s got in the way?”
- “What would happen if you did nothing?”
- “What other considerations do you have that we haven’t looked at yet?”
- “Who are you now?” and, “Who will you need to become to complete your goal?”
TIP: Does your client know their values? If not, try the Identify Your Personal Values Workbook!
(O – Options) GROW Model Questions
Why it’s important: If our clients could have solved their problems alone, they would have. So, either your client hasn’t hit on the right option (action) yet, or they have the right option but haven’t taken action on it yet…
So in this section you’ll use your grow coaching questions to help them figure out their options—ideas to help them achieve their goal.
The Options grow model questions could include helping your client:
- Brainstorm lots of new ideas.
- Support them in brainstorming ways to take an action they’ve been putting off.
- Adapt an existing action that is too challenging, for example chunking it down to make it more achievable.
- Get inspired by coming up with huge exciting actions.
Great GROW questions will help clients discover lots of new ideas and alternative action possibilities.
Remember that in brainstorming—anything goes! Literally anything. This is where the client can come up with their wildest and wackiest ideas: Who knows what practical or doable idea might result?
TIP: In my experience, the most suitable actions often come out toward the end of the Options questions. So be sure to allow plenty of time to generate as many ideas as possible!
20 GROW Coaching Questions for Establishing O—Options
- “What could you STOP doing?”, “…Do LESS of?”, “…Do MORE of?”, “…CONTINUE doing?” and “…START doing?” (Make a list)
TIP: Like these? Check out our FREE Action Brainstorming Worksheet - “If you had a choice, what could you do?”
- “Let’s imagine it’s a year from now and you’ve accomplished your goal. What steps did you take to achieve it?”
- “Suppose, just for a moment, you live in a world where fear does not exist. What would you do now?”
- “What have you tried that hasn’t worked—yet?”
- “What if you had all the information you needed, what would be the next step/s?”
- “Let’s imagine you’re really excited about this. What could you do?”
- “If you were at your best, what would you do right now?”
- “What could you do if you knew you couldn’t fail?”
- “What could you do if you didn’t care what other people thought?”
- “Imagine you have all the time you need. What would you do?”
- “Suppose you could look through the eyes of someone you admire. What options do you have?”
- “What would you suggest if you were advising your best friend?” then “What would your best friend suggest if they were advising you?”
- “Imagine you’re fully confident in your abilities, what could you do?”
- “Imagine you’re an expert in this area. What ideas do you have now?”
- “Imagine having a chat with the wisest person you can think of (whether you know them or not). What would they suggest you do?”
- “What if money were not an issue? If you were rich beyond your wildest dreams how could you approach things differently?”
- “What could you do if you didn’t have to live with the consequences?”
- “If you (secretly) knew what you had to do, what would it be?”
- “What else could you do?” then, “Good. And what else?” (Keep repeating and remember to celebrate options as they arise to encourage the client to continue)
TIP: You may also like our FREE Tool: 37 Questions to Liberate Your Clients From Themselves. This offers some great Options (and Will do!) grow question ideas.
(W – Will Do) GROW Model Questions
Why it’s important: Coaching is about helping our clients create change. And this usually (but not always) means the client taking some kind of action. I always make sure every client leaves their session committed to at least ONE action.
Actions (or what the client Will Do) may not be something tangible. They might change the way they do something or choose to shift their focus. Examples could include paying attention to how they feel, stopping doing something or even consciously doing nothing!
And Remember that part of Will Do is using grow questions to ensure your clients fully commit to the actions they choose. We must ensure they have time to fit the actions into their busy lives. We can check that the action is exciting, yet not too challenging. And we can help them simplify their actions to maximise their chances of success.
20 GROW Coaching Questions for What Your Coaching Clients W—Will Do
Choosing Actions to Take
- “So, re-play your key options to me…”
- “What could you do as the very first step towards meeting your goal?”
- “What actions NEED to be taken?”
- “And what actions do you WANT to take?”
- “Which actions WILL you do?”
TIP: You can also use many questions from the Options section. Simply reword the questions slightly and ask clients what they will do, instead of what they could do.
Establishing Commitment
- “How do you FEEL about your actions?” and “What would it take to get excited about your actions?”
- “How might you commit to that?”
- “Tell me exactly how these actions move you towards your goal.” (connect actions with outcomes)
- “How will you stay committed to your goal when the going gets tough?”
- “On a scale of 1 to 10, how likely are you to complete that action?”
Then, “What stops that being a 10?”
And, “What could you do to raise the score?”
Identifying and Dealing with Obstacles to Action Completion
- “What could get in the way of you completing that action?”
- “If you were going to sabotage yourself, how would you do it?”
- “How might you unintentionally get yourself off track?”
- “What would make this more fun?”
- “What if something comes up this week, then what will you do?”
Accountability
- “What 3 things could you do to support yourself and make sure this gets done?”
- “How would you be able to show this action is completed?”
- “What are you ready to change to ensure you achieve your action?”
- “How will you be able to show me you have completed your action?”
- “How would you like to be held accountable for these actions?”
Want to learn more about the GROW Model?
Get your own .PDF to keep!
Get this FREE GROW Model Special Report with our weekly newsletter ————–>
window.cfields = [];
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_18_’);
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(/^dddd-dd-dd$/)) {
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_18_submit').disabled = true;
var serialized = _form_serialize(document.getElementById('_form_18_'));
var err = form_to_submit.querySelector('._form_error');
err ? err.parentNode.removeChild(err) : false;
_load_script('https://thecoachingtoolscompany.activehosted.com/proc.php?' + serialized + '&jsonp=true');
}
return false;
};
addEvent(form_to_submit, 'submit', form_submit);
})();
Wrap-up
So there you have lots of GROW Coaching Questions to help you use the GROW Model in your coaching sessions!
Do you have any GROW Model Questions you’d like to share? If so, we’d love for you to add them in the comments below.
IMPORTANT: Remember to “Dance in the Moment”
Above all, remember that the GROW or T-GROW model is not intended to be completed in a fixed order or rigidly followed.
Whilst there is a structure to the GROW Model, your GROW coaching questions will jump around the sections many times during a single session.
So instead use the GROW model and your questions as a framework to help you stay on track. And to make sure all the key elements of a coaching session are covered—while you dance in the moment!
If you liked this article with GROW Model Questions, you may also like:
Our Complete Guide to the GROW Model for Coaches!
And these articles:
Want even more Coaching Questions?
Get 549 powerful coaching questions as your gift with newsletter sign-up!
window.cfields = [];
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=/; Secure; SameSite=Lax;’;// cannot be HttpOnly
}
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_28_’);
var allInputs = form_to_submit.querySelectorAll(‘input, select, textarea’), tooltips = [], submitted = false;
var getUrlParam = function(name) {
var params = new URLSearchParams(window.location.search);
return params.get(name) || 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 || (elem.options[i].value.match(/n/g)))) {
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.id == 'field[]' || elem.id == 'ca[11][v]')) {
if (elem.className.includes('phone-input-error')) {
elem.className = elem.className + ' _has_error';
no_error = false;
}
}
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(/^dddd-dd-dd$/)) {
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
}
if((el.id == 'field[]' || el.id == 'ca[11][v]') && el.className.includes('phone-input-error')){
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 == 'tel') {
addEvent(input, 'blur', function() {
this.value = this.value.trim();
validate_field(this, true);
});
}
if (input.type == 'text' || input.type == 'number' || input.type == 'time') {
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 31 && (charCode 57) && charCode !== 8) {
e.preventDefault();
}
});
};
var showPhoneInputError = function(inputId) {
var errorMessage = document.getElementById(“error-msg-” + inputId);
var input = document.getElementById(inputId);
errorMessage.classList.add(“phone-error”);
errorMessage.classList.remove(“phone-error-hidden”);
input.classList.add(“phone-input-error”);
};
var _form_serialize = function(form){if(!form||form.nodeName!==”FORM”){return }var i,j,q=[];for(i=0;i<form.elements.length;i++){if(form.elements[i].name===""){continue}switch(form.elements[i].nodeName){case"INPUT":switch(form.elements[i].type){case"tel":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].previousSibling.querySelector('div.iti__selected-dial-code').innerText)+encodeURIComponent(" ")+encodeURIComponent(form.elements[i].value));break;case"text":case"number":case"date":case"time":case"hidden":case"password":case"button":case"reset":case"submit":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break;case"checkbox":case"radio":if(form.elements[i].checked){q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value))}break;case"file":break}break;case"TEXTAREA":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break;case"SELECT":switch(form.elements[i].type){case"select-one":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break;case"select-multiple":for(j=0;j<form.elements[i].options.length;j++){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case"BUTTON":switch(form.elements[i].type){case"reset":case"submit":case"button":q.push(form.elements[i].name+"="+encodeURIComponent(form.elements[i].value));break}break}}return q.join("&")};
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_28_submit').disabled = true;
var serialized = _form_serialize(document.getElementById('_form_28_')).replace(/%0A/g, 'n');
var err = form_to_submit.querySelector('._form_error');
err ? err.parentNode.removeChild(err) : false;
_load_script('//newsletter.thecoachingtoolscompany.com/proc.php?' + serialized + '&jsonp=true');
}
return false;
};
addEvent(form_to_submit, 'submit', form_submit);
})();
Join our popular weekly newsletter to get your gift plus 4 more monthly free coaching tools.