Our team is here to support you throughout the application process. Fill out the form below and we’ll reply within 2–3 business days.
Our team is here to support you throughout the application process. Use the form below to contact us with questions about eligibility, project fit, budgets, or how to apply.
Our team is here to support you throughout the application process.
Click below to contact us with questions about eligibility, project fit,
budgets, or how to apply. We’ll reply within 2–3 business days.
Eeyou EcoFund
Contact our team
Tell us a little about yourself and your question. We’ll reply within
2–3 business days.
Please correct the highlighted fields.
Thank you — message received
Our team will get back to you within 2–3 business days at the email address you provided.
(function () {
'use strict';
// ==== Elements ====
const overlay = document.getElementById('ef-modal-overlay');
const form = document.getElementById('ef-contact-form');
const openBtns = document.querySelectorAll('[data-ef-open]');
const closeBtns = document.querySelectorAll('[data-ef-close]');
const successPanel = document.getElementById('ef-success');
const modalHeader = document.querySelector('.ef-modal-header');
const modalFooter = document.querySelector('.ef-modal-footer');
const formErrorBanner = document.getElementById('ef-form-error');
const formErrorMsg = document.getElementById('ef-form-error-msg');
// Captcha
const captchaChallenge = document.getElementById('ef-captcha-challenge');
const captchaAnswer = document.getElementById('ef-captcha-answer');
const captchaRefresh = document.getElementById('ef-captcha-refresh');
let captchaExpected = null;
// Timing (bot-detection: form shouldn't be submitted near-instantly)
let formOpenedAt = 0;
const MIN_FORM_TIME_MS = 2500; // 2.5s is an easy floor for real humans
// ==== Captcha: generate a simple math challenge ====
function generateCaptcha() {
const operations = [
{ symbol: '+', fn: (a, b) => a + b },
{ symbol: '−', fn: (a, b) => a - b }, // en-dash minus to avoid odd rendering
{ symbol: '×', fn: (a, b) => a * b }
];
const op = operations[Math.floor(Math.random() * operations.length)];
let a, b;
if (op.symbol === '×') {
a = Math.floor(Math.random() * 6) + 2; // 2–7
b = Math.floor(Math.random() * 6) + 2;
} else if (op.symbol === '−') {
a = Math.floor(Math.random() * 10) + 6; // 6–15
b = Math.floor(Math.random() * 5) + 1; // 1–5 (keep positive)
} else {
a = Math.floor(Math.random() * 9) + 2; // 2–10
b = Math.floor(Math.random() * 9) + 2;
}
captchaExpected = op.fn(a, b);
// Use actual arithmetic symbol the operator selected
const asciiSymbol = op.symbol === '−' ? '−' : op.symbol;
captchaChallenge.textContent = `${a} ${asciiSymbol} ${b} = ?`;
captchaAnswer.value = '';
}
captchaRefresh.addEventListener('click', () => {
generateCaptcha();
captchaAnswer.focus();
});
// ==== Modal open/close ====
let lastFocusedEl = null;
function openModal() {
lastFocusedEl = document.activeElement;
overlay.classList.add('is-open');
document.body.classList.add('ef-no-scroll');
generateCaptcha();
formOpenedAt = Date.now();
// Reset success state, show form
successPanel.classList.remove('is-visible');
modalHeader.style.display = '';
form.style.display = '';
modalFooter.style.display = '';
// Focus first field
setTimeout(() => {
const firstField = document.getElementById('ef-first-name');
if (firstField) firstField.focus();
}, 80);
}
function closeModal() {
overlay.classList.remove('is-open');
document.body.classList.remove('ef-no-scroll');
form.reset();
clearAllErrors();
formErrorBanner.classList.remove('is-visible');
if (lastFocusedEl && lastFocusedEl.focus) lastFocusedEl.focus();
}
openBtns.forEach(btn => btn.addEventListener('click', openModal));
closeBtns.forEach(btn => btn.addEventListener('click', closeModal));
// Click outside
overlay.addEventListener('click', (e) => {
if (e.target === overlay) closeModal();
});
// Escape key
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && overlay.classList.contains('is-open')) closeModal();
});
// Focus trap
overlay.addEventListener('keydown', (e) => {
if (e.key !== 'Tab' || !overlay.classList.contains('is-open')) return;
const focusable = overlay.querySelectorAll(
'button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
);
const visible = Array.from(focusable).filter(el => {
return el.offsetParent !== null || el === document.activeElement;
});
if (visible.length === 0) return;
const first = visible[0];
const last = visible[visible.length - 1];
if (e.shiftKey && document.activeElement === first) {
e.preventDefault(); last.focus();
} else if (!e.shiftKey && document.activeElement === last) {
e.preventDefault(); first.focus();
}
});
// ==== Validation ====
function setError(fieldId, isError) {
const field = document.getElementById(fieldId).closest('.ef-field');
if (!field) return;
field.classList.toggle('has-error', isError);
}
function clearAllErrors() {
document.querySelectorAll('.ef-field.has-error').forEach(f => f.classList.remove('has-error'));
}
function isValidEmail(email) {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}
function validate() {
clearAllErrors();
let valid = true;
let firstErrorField = null;
const firstName = document.getElementById('ef-first-name').value.trim();
if (!firstName) { setError('ef-first-name', true); valid = false; firstErrorField ||= 'ef-first-name'; }
const lastName = document.getElementById('ef-last-name').value.trim();
if (!lastName) { setError('ef-last-name', true); valid = false; firstErrorField ||= 'ef-last-name'; }
const email = document.getElementById('ef-email').value.trim();
if (!email || !isValidEmail(email)) { setError('ef-email', true); valid = false; firstErrorField ||= 'ef-email'; }
const emailConfirm = document.getElementById('ef-email-confirm').value.trim();
if (!emailConfirm || emailConfirm.toLowerCase() !== email.toLowerCase()) {
setError('ef-email-confirm', true); valid = false; firstErrorField ||= 'ef-email-confirm';
}
const comments = document.getElementById('ef-comments').value.trim();
if (!comments || comments.length < 5) { setError('ef-comments', true); valid = false; firstErrorField ||= 'ef-comments'; }
// Captcha
const answerRaw = captchaAnswer.value.trim();
const answer = parseInt(answerRaw, 10);
if (isNaN(answer) || answer !== captchaExpected) {
setError('ef-captcha-answer', true); valid = false; firstErrorField ||= 'ef-captcha-answer';
}
return { valid, firstErrorField };
}
// ==== Submission ====
form.addEventListener('submit', function (e) {
e.preventDefault();
formErrorBanner.classList.remove('is-visible');
// Honeypot
const honeypot = document.getElementById('ef-website').value;
if (honeypot) {
// Silently "succeed" so bots don't retry, but don't actually send
console.warn('Honeypot triggered — submission blocked.');
showSuccess();
return;
}
// Time check
const elapsed = Date.now() - formOpenedAt;
if (elapsed r.json())
// .then(() => showSuccess())
// .catch(() => {
// formErrorMsg.textContent = 'Something went wrong. Please try again.';
// formErrorBanner.classList.add('is-visible');
// submitBtn.disabled = false;
// submitText.textContent = 'Send message';
// });
// ---------------------------------------------------------------
// Demo: fake a network delay, then show success
setTimeout(() => {
showSuccess();
submitBtn.disabled = false;
submitText.textContent = 'Send message';
}, 900);
});
function showSuccess() {
modalHeader.style.display = 'none';
form.style.display = 'none';
modalFooter.style.display = 'none';
successPanel.classList.add('is-visible');
}
// Clear individual errors as user types
['ef-first-name','ef-last-name','ef-email','ef-email-confirm','ef-comments','ef-captcha-answer']
.forEach(id => {
const el = document.getElementById(id);
if (el) {
el.addEventListener('input', () => {
el.closest('.ef-field')?.classList.remove('has-error');
});
}
});
})();
Frequently Asked Questions (FAQ)
Have questions about funding, the application process or other information related to the Eeyou EcoFund? We have provided answers to some frequently asked questions below.
The Eeyou EcoFund supports Cree-led projects across three streams: Nature, Water, and Climate. Eligible projects may include conservation, restoration, monitoring, planning, education, stewardship, climate adaptation, and water protection or management activities, depending on stream fit and program criteria.
The Eeyou EcoFund brings together funding across three streams: Nature / Biodiversity, Water, and Climate. Together, these streams represent more than $14 million in support for Cree-led environmental action in Eeyou Istchee.
Applications are accepted year-round and reviewed through periodic submission and evaluation cycles. For the next submission deadline, please refer to the banner on the home page. Early contact with the EcoFund team is encouraged so proponents can strengthen project ideas before submission.
Each stream of the Eeyou EcoFund is backed by a Québec initiative: Nature through Plan nature 2030, Water through the Plan national de l’eau / Fonds Bleu, and Climate through the Programme pour uneéconomie verte (PEV).