/*! Atlas Language School - source capture v1.1 * Records where an enquiry came from (paid / organic / direct ...) and writes it into * hidden fields on the Freshworks enquiry forms. Also tags WhatsApp links with a source code. * No dependencies. Never throws into the page. */ (function (w, d) { 'use strict'; if (w.AtlasSource) return; var CFG = { version: '1.1', key: 'atlas_src_v1', ownDomain: 'atlaslanguageschool.com', persistDays: 30, // longer-term storage ONLY if marketing consent is given maxLen: 200, waEnabled: true, waPhone: '353832001037', waText: 'Hello Atlas, I would like some information about your courses.' }; var CHANNEL_CODE = { 'Paid search': 'PS', 'Paid social': 'PSO', 'Organic search': 'OSE', 'Organic social': 'OSO', 'Direct': 'DIR', 'Referral': 'REF', 'Email': 'EML' }; var SEARCH_HOSTS = ['google', 'bing', 'duckduckgo', 'yahoo', 'ecosia', 'baidu', 'yandex', 'brave', 'qwant', 'startpage', 'naver', 'seznam']; var SOCIAL_HOSTS = ['facebook.com', 'fb.com', 'fb.me', 'instagram.com', 'linkedin.com', 'lnkd.in', 'tiktok.com', 't.co', 'x.com', 'twitter.com', 'youtube.com', 'youtu.be', 'pinterest.com', 'reddit.com', 'snapchat.com', 'threads.net', 'whatsapp.com']; var MAIL_HOSTS = ['mail.google.com', 'outlook.live.com', 'outlook.office.com', 'outlook.office365.com', 'mail.yahoo.com']; var SOCIAL_SRC = ['facebook', 'fb', 'instagram', 'ig', 'meta', 'linkedin', 'tiktok', 'twitter', 'x', 'youtube', 'pinterest', 'reddit', 'snapchat', 'threads']; function cut(v) { v = (v == null ? '' : String(v)); return v.length > CFG.maxLen ? v.slice(0, CFG.maxLen) : v; } function qp(search) { var o = {}; if (!search) return o; String(search).replace(/^\?/, '').split('&').forEach(function (kv) { if (!kv) return; var i = kv.indexOf('='), k = i < 0 ? kv : kv.slice(0, i), v = i < 0 ? '' : kv.slice(i + 1); try { k = decodeURIComponent(k.replace(/\+/g, ' ')); v = decodeURIComponent(v.replace(/\+/g, ' ')); } catch (e) {} k = k.toLowerCase(); if (!(k in o)) o[k] = v; }); return o; } function hostOf(url) { try { return new URL(url).hostname.replace(/^www\./, '').toLowerCase(); } catch (e) { return ''; } } function suffixIn(h, list) { for (var i = 0; i < list.length; i++) { var s = list[i]; if (h === s || h.slice(-(s.length + 1)) === '.' + s) return true; } return false; } function isOwn(h) { return !!h && (h === CFG.ownDomain || h.slice(-(CFG.ownDomain.length + 1)) === '.' + CFG.ownDomain); } function isSearchHost(h) { var parts = h.split('.'); for (var i = 0; i < SEARCH_HOSTS.length; i++) { if (parts.indexOf(SEARCH_HOSTS[i]) > -1) return true; } return false; } /* Channel from campaign parameters first, then from the referrer. Returns '' if the visit is internal. */ function classify(p, refHost) { p = p || {}; var med = String(p.utm_medium || '').toLowerCase().trim(); var src = String(p.utm_source || '').toLowerCase().trim(); var paidMed = /^(cpc|ppc|paid|paidsearch|paid[-_ ]search|sem|cpm|cpv|paid[-_ ]?social|social[-_ ]?paid|display|banner|retargeting|remarketing)$/; if (p.gclid || p.gbraid || p.wbraid || p.msclkid) return 'Paid search'; if (paidMed.test(med)) return (/social/.test(med) || SOCIAL_SRC.indexOf(src) > -1) ? 'Paid social' : 'Paid search'; if (/^(email|e-mail|newsletter|mail)$/.test(med)) return 'Email'; if (med === 'organic') return 'Organic search'; if (/^(social|social-network|social-media|sm)$/.test(med) || SOCIAL_SRC.indexOf(src) > -1) return 'Organic social'; if (p.fbclid) return 'Organic social'; // fbclid is added to ALL outbound Facebook clicks; paid Meta ads need utm_medium=paid_social if (src || med) return 'Referral'; if (!refHost) return 'Direct'; if (isOwn(refHost)) return ''; if (suffixIn(refHost, MAIL_HOSTS)) return 'Email'; if (isSearchHost(refHost)) return 'Organic search'; if (suffixIn(refHost, SOCIAL_HOSTS)) return 'Organic social'; return 'Referral'; } /* ---------- storage: sessionStorage + session cookie; longer cookie only with marketing consent ---------- */ function cget(n) { var m = d.cookie.match(new RegExp('(?:^|; )' + n + '=([^;]*)')); return m ? decodeURIComponent(m[1]) : null; } function cset(n, v, days) { var s = n + '=' + encodeURIComponent(v) + '; path=/; SameSite=Lax' + (w.location.protocol === 'https:' ? '; Secure' : ''); if (days) s += '; max-age=' + (days * 86400); d.cookie = s; } function hasMarketingConsent() { var m = d.cookie.match(/(?:^|; )_iub_cs-[^=]*=([^;]*)/); if (!m) return false; try { var c = JSON.parse(decodeURIComponent(m[1])); return !!(c && c.purposes && c.purposes['5']); } catch (e) { return false; } } function load() { var raw = null; try { raw = w.sessionStorage.getItem(CFG.key); } catch (e) {} if (!raw) raw = cget(CFG.key); if (!raw) return null; try { var r = JSON.parse(raw); if (r && r.exp && r.exp < Date.now()) return null; return r; } catch (e) { return null; } } function save(r) { var consent = hasMarketingConsent(); r.exp = consent ? Date.now() + CFG.persistDays * 86400000 : 0; var raw = JSON.stringify(r); try { w.sessionStorage.setItem(CFG.key, raw); } catch (e) {} try { cset(CFG.key, raw, consent ? CFG.persistDays : 0); } catch (e) {} } function build(p, refHost, channel) { var ref = ''; if (refHost && !isOwn(refHost)) { try { var u = new URL(d.referrer); ref = u.hostname + u.pathname; } catch (e) { ref = refHost; } // never keep the query string } return { g: cut(p.gclid || (p.gbraid ? 'gbraid:' + p.gbraid : '') || (p.wbraid ? 'wbraid:' + p.wbraid : '')), f: cut(p.fbclid), s: cut(p.utm_source), m: cut(p.utm_medium), c: cut(p.utm_campaign), t: cut(p.utm_term), lp: cut(w.location.origin + w.location.pathname), rf: cut(ref), ch: channel, ts: Date.now(), exp: 0 }; } function capture() { var p = qp(w.location.search); var refHost = hostOf(d.referrer); var hasCampaign = !!(p.gclid || p.gbraid || p.wbraid || p.msclkid || p.fbclid || p.utm_source || p.utm_medium || p.utm_campaign); var stored = load(); var external = refHost && !isOwn(refHost); if (hasCampaign || external) { save(build(p, refHost, classify(p, refHost) || 'Direct')); // a new campaign or external visit replaces the old touch } else if (!stored) { save(build(p, '', 'Direct')); } return load(); } /* ---------- hidden fields on the Freshworks forms ---------- */ function fieldMap(r) { return { cf_gclid: r.g, cf_fbclid: r.f, cf_utm_source: r.s, cf_utm_medium: r.m, cf_utm_campaign: r.c, cf_utm_term: r.t, cf_landing_page: r.lp, cf_referrer: r.rf, cf_traffic_channel: r.ch }; } function setValue(el, v) { if (el.tagName === 'SELECT') { for (var i = 0; i < el.options.length; i++) { if (el.options[i].text === v || el.options[i].value === v) { el.selectedIndex = i; break; } } } else { el.value = v; } try { el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); } catch (e) {} } function fillForm(form) { var r = load() || capture(); if (!r) return; var map = fieldMap(r); Object.keys(map).forEach(function (k) { var name = 'contact[custom_field][' + k + ']'; var el = form.querySelector('[name="' + name + '"]'); if (!el) { // fallback when the form builder did not add the field el = d.createElement('input'); el.type = 'hidden'; el.name = name; el.setAttribute('data-atlas', '1'); form.appendChild(el); } setValue(el, map[k] || 'none'); // Freshworks hidden fields are always required, so never send an empty value }); } function isEnquiryForm(f) { var a = String(f.getAttribute('action') || ''); return /myfreshworks\.com|smart_form|freshsales/i.test(a) || !!f.querySelector('[name^="contact["]'); } function scan() { var forms = d.forms; for (var i = 0; i < forms.length; i++) { if (isEnquiryForm(forms[i])) { try { fillForm(forms[i]); } catch (e) {} } } } /* ---------- WhatsApp links: add a source code to the prefilled message ---------- */ function waCode(r) { var ch = CHANNEL_CODE[(r || {}).ch] || 'UNK'; var seg = (w.location.pathname.replace(/^\/+|\/+$/g, '').split('/')[0] || 'home').toUpperCase().replace(/[^A-Z0-9-]/g, '').slice(0, 16); return ch + '-' + seg; } function isWaLink(a) { var h = a && a.getAttribute && a.getAttribute('href'); return !!h && h.indexOf(CFG.waPhone) > -1 && /whatsapp\.com\/send|api\.whatsapp\.com|wa\.me\//i.test(h); } function patchWa(a) { if (!CFG.waEnabled || !isWaLink(a)) return; var r = load() || capture(); var existing = ''; try { existing = new URL(a.href).searchParams.get('text') || ''; } catch (e) {} existing = existing.replace(/\s*\[ref:[A-Z0-9-]+\]\s*$/, ''); var text = (existing || CFG.waText) + ' [ref:' + waCode(r) + ']'; a.href = 'https://wa.me/' + CFG.waPhone + '?text=' + encodeURIComponent(text); } function init() { try { capture(); } catch (e) {} try { scan(); } catch (e) {} try { new MutationObserver(function () { scan(); }).observe(d.documentElement, { childList: true, subtree: true }); } catch (e) {} // refill just before any submit, in case the form was rebuilt d.addEventListener('submit', function (ev) { try { if (ev.target && ev.target.tagName === 'FORM' && isEnquiryForm(ev.target)) fillForm(ev.target); } catch (e) {} }, true); // patch WhatsApp links at click time (covers links added later by plugins) d.addEventListener('click', function (ev) { try { var a = ev.target && ev.target.closest ? ev.target.closest('a[href]') : null; if (a) patchWa(a); } catch (e) {} }, true); if (d.readyState === 'loading') d.addEventListener('DOMContentLoaded', function () { try { scan(); } catch (e) {} }); } w.AtlasSource = { version: CFG.version, get: function () { return load(); }, _classify: classify, _qp: qp, _waCode: waCode }; init(); })(window, document);

Erasmus Summer 2024 Review

July and August have seen hundreds of students pass through the Atlas doors in Dublin and Malta. There have been dynamic lessons, exciting excursions and a buzz of excitement around the school as people from all over Europe and beyond have had a full-on learning and social experience, making long-lasting friendships along the way!Β Thanks to all of our participants for being such a pleasure to teach and for helping us learn more about education systems and staff from around Europe!

Hear directly from some of our participants about what they enjoyed most about their time with Atlas!

We’re still not finished with Erasmus+ Courses in 2024!

Although we have indeed come to the end of what we traditionally call the Erasmus summer, more Erasmus+ courses are just around the corner!

Sign up for our Language, Methodology and Culture (LMC), Digital Transitions, or Sustainability in Education, in the weeks beginning October 21st and 28th in Dublin. You can do the courses for 1 or 2 weeks, and even do a week of one course and then another week of another course.

In Malta, we’ve opened a special version of ourΒ General English Training course in the week beginning October 28th: GE26+ Admin. This will include 20 morning lessons of General English, with 6 afternoon lessons related to specific modules for administrative staff spread across 2 afternoons.

Remember that General English Training runs all year round in both Dublin and Malta, starting on any Monday.

Graduation Students Erasmus

Graduation Students Erasmus

What’s on the agenda for September?

Atlas will be on the road in September to visit schools around Europe. First stop is aΒ teacher training day in ZΕ  ÚstΓ­ nad Labem MΓ­rovΓ‘, in the north of Czechia. Participants will take part in the following workshops: β€˜The Task-Teach-Task Lesson Shape’, β€˜An Example Geography CLIL lesson’ and β€˜How to Use Mentimeter’.

Shortly after, we’re excited to announceΒ Atlas’ first ever venture into Bulgaria. We’ll be heading toΒ VUSI Higher School of Security and Economics in Plovdiv, one of the oldest cities in Europe, where we’ll be running sessions for professors on the topics of β€˜β€‹β€‹AI in Higher Education – Artificial Intelligence vs Academic Integrity’ and β€˜Providing Effective Feedback on Student Work’.

If you’d like Atlas to deliver free teacher training at your school or university in Europe, please get in touch with Paul atΒ paul.f@atlaslanguageschool.com.

Erasmus Summer Courses and Students

Erasmus Summer Courses and Students

Webinars

In August we held a methodology webinar: β€˜Making your Classroom more Inclusive for Students with Special Educational Needs (SENs)’. Attendees learned about how they can make their classrooms a more inclusive environment for students with SENs such as dyslexia, autism or visual impairment.Β Contact us if you’d like access to a recording of this session, or any of our previous methodological or cultural webinars.

Erasmus Summer Courses and Students

Erasmus Summer Courses and Students

OnΒ Wednesday September 18thΒ at 1700 Irish time (1800 CET), we’ll be holding a methodology webinar on the topic ofΒ β€˜Inverting your Lesson Plan: Using the Task-Teach-Task Method to Help Students Learn Vocabulary Better’.Β This webinar will last between 75 and 90 minutes and participants will learn how changing the shape of their lesson from the traditional PPP (Presentation, Practice, Production) to TTT (Task-Teach-Task) may result in students learning vocabulary more effectively.Β πŸ‘‰Β Sign up for methodology webinar usingΒ this link.

Then, onΒ Thursday September 19thΒ at 1400 Irish time (1500 CET) and 1700 Irish time (1800 CET) we’ll be holding furtherΒ info-webinars about our Erasmus+ coursesΒ for the remainder of 2024 and 2025. These webinars will last for between 30 and 45 minutes and will provide information about our courses, teaching methodology, activity and excursion programme, accommodation options and how to apply for Erasmus+ funding.Β πŸ‘‰Β Sign up for info-webinar usingΒ this link.

Erasmus Summer Courses and Students

Erasmus Summer Courses and Students

Update about K2 Projects

Atlas Language School continues to be a partner in the CLIMIC project (https://cli-mic.eu/), which explores innovative ways to use comics as a tool for teaching students about sustainability and climate change. A teacher training course on the topic of using comics in the classroom has been held, and we’re now busy planning an Erasmus+ event, which will occur towards the end of the year.

About 2025 Courses

Stay tuned for the dates and price list for our Erasmus+ courses in 2025, which will be available in early September. We also haveΒ a new courseΒ that you won’t want to miss! Be sure to check our website for updates, and we’ll also send you an email with all the details.

If you don’t want to receive further editions of our newsletter,Β please unsubscribe here.

Share This Story, Choose Your Platform!

Check out our other recent blog posts!

Your Ultimate Packing Guide for Studying English with Atlas: Ireland, UK & Malta

By |July 24th, 2025|Categories: Things to do in Dublin, Blog|Tags: |

Your Ultimate Pack guide for studying English with Atlas: [...]

Comments Off on Your Ultimate Packing Guide for Studying English with Atlas: Ireland, UK & Malta

Ghost Walking Tour: Discover Dublin through it’s Haunted History

By |June 11th, 2025|Categories: Walking Tours, Things to do in Dublin, Social Programme, Blog|Tags: |

Dublin Ghost Tour Explore Dublin Through it's Haunted History [...]

Comments Off on Ghost Walking Tour: Discover Dublin through it’s Haunted History
2024-09-16T14:06:05+01:00