Most popular destinations for Spanish courses in in Cuba
#1 Havana Spanish schools
Price comparison: 1 week Spanish course
Sort by: Best rated (overall)|Most popular|City|Best rated teaching quality|Best rated social activities|Lowest price
All 106 Spanish courses in Cuba
Q&A - Questions and answers about Cuba
I am interested in booking a Spanish course in Holguin. Do you have any options?
");const alterTooltipf = function() {if (jQuery(".mobileCloseTooltip").length == 0) {jQuery('.tooltip-inner').prepend(newInsert);}}if (aDataToggleTooltip.length !== 0 ) {let i;for (i = aDataToggleTooltip.length - 1; i >= 0; i--) {const el = jQuery(aDataToggleTooltip[i]);el.on('inserted.bs.tooltip', alterTooltipf)}}}// touch screen device detectionif ( ("ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch) === true ) {// put close button in tooltips when touchscreen is detected setTimeout(function() { itsTouchScreen(); }, 2500);}function destroyFlagToolEtc() {// destroy language flags tooltip when mobile// Mobile search box micro-plugin variables// const searchQuery = jQuery("#search_query");// destroy the flags info tooltip in mobileif (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}langListPop.off('hide.bs.popover');// turn off the event to re-init the tooltip after flags selector popover hideslangListPop.on('show.bs.popover', function() {langListPop.off('hide.bs.popover');});/** Mobile search box micro-plugin **/// start with transparent in order to don't hide magnifying glass icon// searchQuery.css('background-color', 'transparent');// bind focus event// searchQuery.on('focus', function() {// const that = jQuery(this);// to calculate search box deployment final width// const totalSearchFieldWidth = jQuery("#cBoxTabWrap").outerWidth() - jQuery("#searchForm_small").outerWidth() - 87;// background-color play to always show icon and have white background in search field// that.css('background-color', '#fff');// Show 'searchPlaceholderVar' variable is defined in the 'page_header.tpl' then animate the search field// that.attr('placeholder', searchPlaceholderVar).animate({// width: totalSearchFieldWidth,// }, 400, "swing", function() { // jQuery("#magniFyingGlass").hide(); // jQuery("#closeSearchBar").show(); // });// });//bind blur event// searchQuery.on('blur', function() {// const that = jQuery(this);// const glyphiconSearch = jQuery("#searchForm_small").find(".fa-search");// //contactBoxPhonesMobText.css('color', '');// // z-index play// glyphiconSearch.css('z-index', '4');// that.animate({// // animate back to zero width to close the field// width: 0,// }, 400, function() { // // jQuery("#magniFyingGlass").show(); // // jQuery("#closeSearchBar").hide();// // // background and z-index play// // that.css('background-color', 'transparent');// // glyphiconSearch.css('z-index', '');// });// });/** END OF => Mobile search box micro-plugin **/}// La siguiente función "slidingMenu();" sirve para mostrar y ocultar el sliding facetted menú lateral en el responsive modefunction slidingMenu() {// toggle side menuconst leftMenuBtns = jQuery("#filterMobBut, #cbp-spmenu-s2, #showLeft, #closeButtonSlideMenuTop, #closeButtonSlideMenuBot");// elements for toggling classes overconst bodyContent = jQuery("#body_content");const menuLeft = jQuery("#cbp-spmenu-s2");const closeButTopEl = jQuery('#closeButtonSlideMenuTop')[0];const closeButBotEl = jQuery('#closeButtonSlideMenuBot')[0];leftMenuBtns.on('click', function(event) {const transitionEvent = whichTransitionEvent();// No need of using event.stopPropagation() anymore writing the condition below!// to check if click is originated from outside the side menu itself// https://css-tricks.com/dangers-stopping-event-propagation/#article-header-id-2if (!jQuery(event.target).closest('#wrapSlideMenu').length || (event.target == closeButTopEl && event.currentTarget.id != "cbp-spmenu-s2") || (event.target == closeButBotEl && event.currentTarget.id != "cbp-spmenu-s2") ) {menuLeft.toggleClass('cbp-spmenu-open');// triggered only when closing the sidebar, so detect the transition end before changing z-indexif (bodyContent.hasClass('cbp-spmenu-opened')) {// .one() => because if the event handler is not removed after its called, the class will be removed from the second triggering and so on (the handler continue running if not cancelled)menuLeft.one(transitionEvent, function() {bodyContent.removeClass('cbp-spmenu-opened');});} else {// triggered only when opening the sidebar: no need of changing z-indexbodyContent.addClass('cbp-spmenu-opened');}}});}// END of slidingMenu() logicif (currentSize.width <= 1024) {slidingMenu();}// trigger reflows on resize width from desktop to mobilejQuery(window).on('widthOnlyResizedMobile', function() {var leftMenuBtns = jQuery("#filterMobBut, #cbp-spmenu-s2, #showLeft, #closeButtonSlideMenuTop, #closeButtonSlideMenuBot");leftMenuBtns.off('click');slidingMenu();}); /***********************************//** Main school_overview reflows **//*********************************/// school_overview repositions when resizing from desktop to mobilefunction mobileResp() {const contentPanel = jQuery("#content_panel");const schoolContainer = contentPanel.find(".schoolContainer");let starting_date = jQuery("#calendar_date").val();const schoolDetailsDropWrap = contentPanel.find(".schoolDetailsDropWrap");const resultsDetails2 = jQuery(".resultsDetails2"); // const reflowBlocks = jQuery(".reflowBlocks");const ratingWrap = jQuery(".ratingBlockWrap").find(".ratingWrap");// var textInsideCalc = jQuery('.textInsideCalc');// var calcModal = jQuery("#calcModal");// calcModal.appendTo(textInsideCalc);// modal changes on resizejQuery(".modal-backdrop").css('display', '');// calcModal.addClass('modal fade').removeClass('modalDisplay');jQuery("#decorator_xx10").addClass('modal-dialog');// jQuery("#modalContent").addClass('modal-content');// school_overview FACETS onlycontentPanel.find(".wrappableDivFacets").addClass('collapse').css('height', '');/*reflowBlocks.each(function() { const that = jQuery(this); const closest = that.closest(".middleAndResults"); closest.find(".resultsDetails2").insertAfter(that); that.insertAfter(closest.find(".mainRatingWrap")); });*/ resultsDetails2.each(function() { const that = jQuery(this); that.insertAfter(that.closest(".middleAndResults").find(".reflowBlocks")); });schoolDetailsDropWrap.each(function(){const that = jQuery(this);that.closest(".middleAndResults").find('.buttonToSchoolWrap').appendTo(that.closest('.schoolRightContentWrap'));// that.parent().find('.resultsLogos').after(that.find('.school_overview_p_inside_box_results'));if (that.hasClass('secondarySchoolBlock')) {that.appendTo(that.closest('.middleTop').find('.contentSideImg'));}});ratingWrap.each(function() {const that = jQuery(this);that.after(that.prev());});schoolContainer.each(function() {const that = jQuery(this);that.find(".resultsBand").prependTo(that.find(".middleTop"));// schoolDetailsDropWrap.css('width', '');that.find(".newBadge").insertAfter(that.find(".schoolPictWrap"));that.find(".schoolStrenghtsWrap").appendTo(that.find(".resultsDetails2")); that.find(".schoolDetailsDropWrap").insertAfter(that.find(".mainRatingWrap"));});// school_overview calculator partjQuery("#mob_duration_sel").html(jQuery("#duration_sel").html());if (starting_date == "") {starting_date = jQuery("#calendar_date_intro").html();jQuery("#calendarIndicator").html("+").addClass("calNumEmpty").removeClass("calNumFilled");} else if (typeof(starting_date) !== 'undefined') {jQuery("#calendarIndicator").html( starting_date.substr(0, starting_date.indexOf(' ')) ).addClass("calNumFilled").removeClass("calNumEmpty");}// jQuery("#mob_calendar_date").html(starting_date);jQuery("#mob_course_category_sel").html(jQuery("#course_category_sel").html());jQuery("#mob_accommodation_type_sel").html(jQuery("#accommodation_type_sel").html());jQuery(".modal-backdrop").css('display', '');// calcModal.addClass('modal fade').removeClass('modalDisplay');jQuery("#decorator_xx10").addClass('modal-dialog');// jQuery("#modalContent").addClass('modal-content');jQuery("span.city_video_big").addClass("city_video").removeClass("city_video_big");// school_overview secondary schools collapsibles// jQuery('[id^=schoolAltRatings], [id^=dataSchool]').collapse('show');// jQuery('[id^=S_Name]').removeClass("DDColl").addClass("DDExp");}// Main school_overview desktop repositionsfunction schoolOverviewReposition() {const contentPanel = jQuery("#content_panel");const schoolContainer = contentPanel.find(".schoolContainer");const schoolRightContentWrap = jQuery(".schoolRightContentWrap");const resultsDetails2_1 = jQuery(".resultsDetails2_1");const ratingWrap = jQuery(".ratingBlockWrap").find(".ratingWrap");const middleWrap = jQuery('.middleWrap');// var boxedBottWrap = jQuery('#boxedBottWrap');// var calcModal = jQuery("#calcModal");// calcModal.appendTo(boxedBottWrap);schoolContainer.each(function() {const that = jQuery(this);that.find(".resultsBand").insertBefore(that.find(schoolRightContentWrap));that.find(".newBadge").prependTo(that.find(".buttonToSchoolWrap"));that.find(".schoolStrenghtsWrap").insertAfter(that.find(".middleBot")); that.find(".schoolDetailsDropWrap ").appendTo(that.find(".middleTop"))// To avoid elements repositioning flashes during page load// that.find(".contentSideImg, .schoolDetailsDropWrap, .buttonToSchoolWrap").show();});schoolRightContentWrap.each(function() {const that = jQuery(this);// https://es.stackoverflow.com/questions/61505/c%C3%B3mo-hacer-para-aplicar-important-de-css-con-jquery-javascriptif (that.find(".schoolDetailsDropWrap")[0]) {// that.find(".schoolDetailsDropWrap")[0].style.setProperty('width', '88%', 'important');that.find(".buttonToSchoolWrap").appendTo(that.find(resultsDetails2_1));}});// resultsDetails2_1.each(function() {// const that = jQuery(this);// that.closest(".middleAndResults").find(".reflowBlocks").insertAfter(that.closest(".middleAndResults").find(".head_yellow_7"));// });middleWrap.each(function(){const that = jQuery(this);that.after(that.find(".resultsDetails2"));// that.find(".school_overview_p_inside_box_results").prependTo(that.find(".schoolDetailsDropWrap"));});ratingWrap.each(function() {const that = jQuery(this);that.next().after(that);});contentPanel.find(".schoolDetailsDropWrap").find(".wrappableDiv").unwrap();// calcModal.removeClass('modal fade').addClass('modalDisplay');jQuery("#decorator_xx10").removeClass('modal-dialog');// jQuery("#modalContent").removeClass('modal-content');jQuery("span.city_video").addClass("city_video_big").removeClass("city_video");// school_overview FACETS onlycontentPanel.find(".wrappableDivFacets").removeClass('collapse').css('height', 'auto');// school_overview secondary schools collapsibles// jQuery('[id^=schoolPicture]').collapse('hide').height('0px');// jQuery('[id^=S_Name]').removeClass("DDExp").addClass("DDColl");} function trimSchoolDescriptions(textLength, removeLink = false) { function trimToWords(text, wordCount) { // Remove line breaks and extra spaces text = text.replace(/\s+/g, ' ').trim(); const words = text.split(' '); if (words.length <= wordCount) { return text; } let trimmed = words.slice(0, wordCount).join(' '); // Remove any non-alphanumeric characters from the end of the trimmed text trimmed = trimmed.replace(/[^a-zA-Z0-9]+$/, ''); return trimmed + ' ...'; } const elements = document.querySelectorAll('.school_overview_p_inside_box_results_inside'); for (let i = 0; i < elements.length; i++) { const originalText = elements[i].textContent || elements[i].innerText; elements[i].textContent = trimToWords(originalText, textLength); } }if (currentSize.width >= 1025) {schoolOverviewReposition(); trimSchoolDescriptions(22);// const bar_flags_new = jQuery("#bar_flags_new").detach();// bar_flags_new.appendTo("#searchFormSmallWrap");} else { trimSchoolDescriptions(12, true); } jQuery('[id^=schoolPicture]').collapse('hide').height('0px');// trigger reflows to be done in mobile mode when resizing from desktop to mobilejQuery(window).on('widthOnlyResizedMobile', mobileResp);// ... and viceversajQuery(window).on('widthOnlyResizedDesktop', function() {// const mainRatingWrap = jQuery(".mainRatingWrap");schoolOverviewReposition();// jQuery(".resultsDetails2_1").each(function() {// const that = jQuery(this);// that.closest(".middleAndResults").find(mainRatingWrap).prependTo(that);// });});/**************************//** Main school reflows **//************************/function allPagesDesktopReflows() {// const bar_flags_new = jQuery("#bar_flags_new").detach();// ALL pages => flags widget// bar_flags_new.appendTo("#searchFormSmallWrap");// ALL pages => "wechat" "whatsapp" "kakao" & "skype"jQuery("#contactBoxSkype").insertAfter("#contactBoxPhones"); // ALL pages => cBox jQuery("#contactBoxChat").insertBefore("#contactBoxTextareaDiv");// ALL PAGES (footer)// ALL pages where we use bootstrap modalsjQuery('.modal-backdrop.fade.in').css('display', 'none');// All pages but UG (header)jQuery("#searchFormSmallWrap").prependTo("#headSearchBar");} // remove placeholder on focus event jQuery("#searchBarMob .search_query, .searchQueryWrap .search_query").on('focus', function() { jQuery(this).removeAttr('placeholder'); });flagsTooltipInit = function() {if (typeof jQuery().tooltip === 'function') {// destroy lang flags tooltip if flags popover is shownlangListPop.on('show.bs.popover', function() {flagsTooltip.tooltip('destroy');});if (currentSize.width <= 1024) {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}} else {if (!windowMatchObj.mqoh.matches) {// re-init lang flags tooltip when flags popover is hiddenlangListPop.on('hide.bs.popover', function() {jQuery('[data-toggle="tooltipTop"]').tooltip({trigger : 'hover',placement: 'top'});});}if (windowMatchObj.mqoh.matches) {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');langListPop.off('hide.bs.popover');}}}}}// avoid hiding flags selector if the cBox is overlapping itfunction avoidHidingFlags() {if (windowMatchObj.mqoh.matches) { const contactBoxWrapper = jQuery('#contactBoxWrapper');langListPop.on('show.bs.popover', function () {contactBoxWrapper.css('z-index', '10');});langListPop.one('hide.bs.popover', function () {contactBoxWrapper.css('z-index', '');if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}});flagsTooltip.on('show.bs.tooltip', function () {if (typeof(flagsTooltip.tooltip) === 'function') {flagsTooltip.tooltip('destroy');}});} else {langListPop.off('show.bs.popover hidden.bs.popover');flagsTooltipInit();}}avoidHidingFlags();windowMatchObj.mqoh.addListener(avoidHidingFlags);jQuery(window).on('widthOnlyResized', function() {// restart bind and width in case of window resize in order to don't hide magnifying glass icon// jQuery("#search_query").off('focus blur').css('width', '');});if (currentSize.width <= 1024) {destroyFlagToolEtc();}if (currentSize.width >= 1025) {allPagesDesktopReflows(); } // remove heading middle line if 2 lines if (!(jQuery('#school_overview').length && currentSize.width <= 1024)) { const h2Elements = jQuery('h2'); for (let i = 0; i < h2Elements.length; i++) { const el = jQuery(h2Elements[i]); if (el.find('.titleSep').height() > 40) { el.addClass('removeBorderBottom'); } }; }// execute destroy language flags tooltip + mobile searchbar (triggered only on mobile and only on resize from desktop mode)jQuery(window).on('widthOnlyResizedMobile', function() {// const bar_flags_new = jQuery("#bar_flags_new").detach();destroyFlagToolEtc();// bar_flags_new.appendTo(jQuery("#cBoxTabWrap"));jQuery("#contactBoxChat").insertAfter("#contactBoxTextareaDiv");jQuery("#searchFormSmallWrap").insertAfter("#contactBoxChat");if (typeof getLangSuggestion === "function") {getLangSuggestion(0);}reInitPopover('#changeLanguageFlags'); jQuery("#contactBoxSkype").insertBefore("#sendBlockWrap");});// Triggered only on desktop and only on resize from mobile modejQuery(window).on('widthOnlyResizedDesktop', function() {// ALL PAGES => re-init the tooltip if previously destroyed on mobileallPagesDesktopReflows();if (typeof(flagsTooltip.tooltip) === 'function') {// IMPORTANT: .tooltip('destroy') is asynchronous, and immediate creation of another popover fails, while the previous one is being destroyed [same that happens with .popover('destroy') method].// https://stackoverflow.com/questions/27238938/bootstrap-popover-destroy-recreate-works-only-every-second-time#answer-27345242setTimeout(function() {flagsTooltip.tooltip({trigger : 'hover',placement: 'top'});}, 200);}// ALL PAGES => re-init event handler if previously turned off on mobilelangListPop.on('show.bs.popover', function() {// re-init lang flags tooltip when flags popover is hiddenlangListPop.on('hide.bs.popover', function() {setTimeout(function() {flagsTooltip.tooltip({trigger : 'hover',placement: 'top'});}, 200);});});reInitPopover('body');});}); /* CLOSING BIG WINDOW ONLOAD FUNCTION */“At the time of writing, we have partner schools in Havana and Santiago de Cuba. In case you are flexible with the location, just let us know and we cand send you more information.”
Ana Carolina Dos Santos, LanguageCourse.Net - Feb 12, 2023
My daughter is not 18 years old yet, can we book a Spanish programme for her in Havana?
";if (pc_result['prices']['discount_tuition'] > 0) {tpl += "“The minimum required age to book a Spanish programme in Havana is 18 years old.”
Ana Carolina Dos Santos, LanguageCourse.Net - Nov 15, 2022
When courses start on Sundays, does that mean lessons are on a Sunday? Normally, in most other schools, lessons start on Monday.
I will arrive in Havana on a Sunday. Would that still work?“The lessons take place on weekdays, from Monday to Friday, and accommodation is typically booked from the Sunday before your course begins until the Saturday after your last day of class.”
Ana Carolina Dos Santos, LanguageCourse.Net - Oct 24, 2022
Are there schools that offer a homestay that is good for a high school student?
“For students from 18 years old and above, our partner schools in Santiago de Cuba and in Havana can offer a Spanish programme including homestay accommodation.”
Ana Carolina, LanguageCourse.net - Jun 16, 2022
FAQ about courses in Cuba
What is the best language school for adults in Cuba?
`; } } jQuery("#activeFilters, #activeFiltersBot").html(htmlFilters);var results_ids = "#filterResult";if (intersec.length > 2) {results_ids += ", #filterResultBot";} else {jQuery("#filterResultBot").css('display', 'none');}if (jQuery("#juniorIntro, #topCityWrap").length > 0) { if (htmlFilters) { jQuery("#juniorIntro, #topCityWrap").fadeOut(400, function() { jQuery(results_ids).css('display', 'inline-block'); scroll_if_anchor('#filterResult'); }); }} else {jQuery(results_ids).css('display', 'inline-block');scroll_if_anchor('#filterResult');} if (!htmlFilters) { jQuery("#filterResult, #filterResultBot").css('display', 'none'); }jQuery("#filterNum, #filterNumBot").text(replacedString); // check if there's no checkbox filter checked before hiding the whole filterResult} else if (!jQuery(".filterIndicator").hasClass("isACheckBox") && !jQuery(".filterIndicator").hasClass("isADropDown")) { jQuery("#filterResult, #filterResultBot").css('display', 'none'); jQuery("#juniorIntro, #topCityWrap").fadeIn();} else { // if there are checkbox filter checked but no other filter running, update the message accordingly and remove all non-checkboxes pills (.filterIndicator) var str; if (intersec.length > 0) { str = "Corazón Cuba has received the best overall rating in Havana.
Which Spanish school in Cuba has the best location?
Corazón Cuba, located in Lamparilla 311, entre Aguacate y Compostella, Habana Vieja, Havana has been voted as the school with the best location in Cuba.
What is the recommended course duration?
You can take courses for just 1 week. For significant progress opt for longer durations.
Will my phone/laptop's power adaptor work in Cuba?
In Cuba electricity is 110 Volt and 60 Hz. Plug type A, B, C.
What type of business Spanish courses are offered in Cuba?
In Cuba the following courses are offered specifically for business Spanish: Business Spanish Private.
course destinations
Spanish schools in Cuba
- Havana (33 courses)
Spanish schools in the rest of the world
- Argentina (204 courses)
- Australia (5 courses)
- Austria (9 courses)
- Belgium (4 courses)
- Bolivia (20 courses)
- Brazil (15 courses)
- Canada (15 courses)
- Chile (55 courses)
- Colombia (107 courses)
- Costa Rica (177 courses)
- Czech Republic (37 courses)
- Dominican Republic (32 courses)
- Ecuador (131 courses)
- England UK (64 courses)
- France (37 courses)
- Germany (104 courses)
- Guatemala (24 courses)
- Hong Kong (3 courses)
- Hungary (10 courses)
- India (1 course)
- Ireland (10 courses)
- Italy (59 courses)
- Japan (5 courses)
- Latvia (2 courses)
- Mexico (210 courses)
- Netherlands (23 courses)
- Northern Ireland (1 course)
- Norway (1 course)
- Panama (129 courses)
- Peru (116 courses)
- Poland (23 courses)
- Portugal (10 courses)
- Russia (2 courses)
- Scotland (1 course)
- Singapore (6 courses)
- Spain (2276 courses)
- Switzerland (25 courses)
- Tunisia (8 courses)
- Turkey (2 courses)
- Ukraine (1 course)
- Uruguay (38 courses)
- USA (77 courses)
- Venezuela (8 courses)
Spanish courses match the following filters: "; } else { str = "No results found that match the following filters:"; } var replacedString = str.replace(" ", intersec.length ); jQuery("#juniorIntro").hide(400); jQuery(".topCityWrap").slideUp(); jQuery("#filterNum, #filterNumBot").text(replacedString); jQuery('.filterIndicator:not(.isACheckBox):not(.isADropDown)').remove(); } }function filter_accommo(enable_acco_list) {filter_results['accommo'] = [];if (enable_acco_list.length > 0) {for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['accommo_types'].length > 0) {var inters = enable_acco_list.filter(function(value) {return -1 !== schools[id]['accommo_types'].indexOf(value)});if (inters.length > 0) {filter_results['accommo'].push(id);}}}} else {// No filterfilter_results['accommo'] = filter_results['all'];}apply_all_filters();}function filter_subcats(enable_cat_list) {filter_results['subcats'] = [];if (enable_cat_list.length > 0) {for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (enable_cat_list.includes(parseInt(schools[id]['subcategory'])))filter_results['subcats'].push(id);}}apply_all_filters();}function filter_lessons(min, max) {filter_results['lessons'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['lessons_per_week'].length > 0) {if (parseInt(schools[id]['lessons_per_week']) >= min && parseInt(schools[id]['lessons_per_week']) <= max) {filter_results['lessons'].push(id);}}}apply_all_filters();}function filter_students(min, max) {filter_results['students'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['max_students'].length > 0) {if (parseInt(schools[id]['max_students']) >= min && parseInt(schools[id]['max_students']) <= max) {filter_results['students'].push(id);}}}apply_all_filters();}function filter_rating(min) {if (min > 0) {filter_results['rating'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['rating'].length > 0) {if (parseFloat(schools[id]['rating']) >= min) {filter_results['rating'].push(id);}}}} else {// No filterfilter_results['rating'] = filter_results['all'];}apply_all_filters();} function filter_checkbox(checkboxValue, isChecked, filterType) { const checkboxValueToNum = +checkboxValue; const checkedCheckboxes = jQuery(`#${filterType} input:checked`); const type = filterType.replace("checkBox_", ""); const checksLength = checkedCheckboxes.length; // Reset array if previously zero checks (isChecked && checksLength === 1) && (filter_results[type] = []); for (let i = filter_results['all'].length - 1; i >= 0; i--) { const id = filter_results['all'][i]; // Normalize course value as an array always to simplify further calculations const courseVal = Array.isArray(schools[id][type]) ? schools[id][type].map(Number) : [+schools[id][type]]; const filterArr = filter_results[type]; // Determine if checkboxValue is an array and handle accordingly const matchCondition = courseVal.includes(checkboxValueToNum); if (matchCondition) { // Include the course id in the filter array if the checked checkbox value is in the looping course value and not already present in the filter array if (isChecked) { !filterArr.includes(id) && filterArr.push(id); // Remove the course id from the filter array if the unchecked checkbox value is in the looping course value and doesn't match to other checked values in the case there are currently other checked checkboxes } else if (!isChecked) { // Before removing the current looping course, ensure no other checked checkboxes match any of its course values const allCheckedValues = checkedCheckboxes.map(function() { return +jQuery(this).val(); }).get(); const isPresentInOtherChecks = courseVal.some(val => allCheckedValues.includes(+val)); if (!isPresentInOtherChecks) { const index = filterArr.indexOf(id); if (index > -1) filterArr.splice(index, 1); } } } } // Reset array if currently zero checks if (checksLength === 0) { filter_results[type] = filter_results['all'].slice(); // slice with empty parameter to create a shallow copy of the array } apply_all_filters(false, true, type, checksLength === 0); } function filter_dropdown(dropDownValue, filterType) { const type = filterType.replace("_filter", ""); // Reset array if val is "0" if (dropDownValue === 0) { filter_results[type] = filter_results['all'].slice(); } else { for (let i = filter_results['all'].length - 1; i >= 0; i--) { const id = filter_results['all'][i]; const courseVal = schools[id][type]; const filterArr = filter_results[type]; let matchCondition = false; if (type === "course_duration") { matchCondition = courseVal.map(Number).includes(dropDownValue); } if (type === "student_age") { const [minAge, maxAge] = courseVal; matchCondition = (+minAge === 0 || +minAge <= dropDownValue) && (+maxAge === 0 || +maxAge >= dropDownValue); } if (matchCondition) { !filterArr.includes(id) && filterArr.push(id); } else { const index = filterArr.indexOf(id); if (index > -1) filterArr.splice(index, 1); } } } apply_all_filters(false, false, type, false, true); }function filter_prices(min, max) {filter_results['prices'] = [];for (var i = filter_results['all'].length - 1; i >= 0; i--) {var id = filter_results['all'][i];if (schools[id]['course_price'].length > 0) {if (parseInt(schools[id]['course_price']) >= min && parseInt(schools[id]['course_price']) <= max)filter_results['prices'].push(id);}}apply_all_filters();} function filter_price_per_lesson(min, max) { filter_results['price_per_lesson'] = []; for (var i = filter_results['all'].length - 1; i >= 0; i--) { var id = filter_results['all'][i]; if (schools[id]['price_per_lesson'].length > 0) { if (parseInt(schools[id]['price_per_lesson']) >= min && parseInt(schools[id]['price_per_lesson']) <= max) filter_results['price_per_lesson'].push(id); } } apply_all_filters(); }function onChangeSubcatFilter() {var cat_list = [];var subcatNavSpan = document.querySelectorAll("#subcatNav ul li span");for (var i = 0, len = subcatNavSpan.length; i < len; i++) {if (subcatNavSpan[i].getElementsByTagName("input")[0].checked) {cat_list.push( parseInt( subcatNavSpan[i].attributes['cat_type'].value ) );}}filter_subcats(cat_list);}function reset_subcats() {filter_results['subcats'] = filter_results['all'];var subcatNavSpan = document.querySelectorAll("#subcatNav ul li span");for (var i = 0, len = subcatNavSpan.length; i < len; i++) {subcatNavSpan[i].getElementsByTagName("input")[0].checked = true;}apply_all_filters();}function onChangeAccoFilter() {var acco_list = [];var accommoNavSpan = document.querySelectorAll("#accommoNav ul li span");for (var i = 0, len = accommoNavSpan.length; i < len; i++) {if (accommoNavSpan[i].getElementsByTagName("input")[0].checked) {acco_list.push( parseInt( accommoNavSpan[i].attributes['acco_type'].value ) );}};filter_accommo(acco_list);}function reset_accommo() {filter_results['accommo'] = filter_results['all'];var accommoNavSpan = document.querySelectorAll("#accommoNav ul li span");for (var i = 0, len = accommoNavSpan.length; i < len; i++) {accommoNavSpan[i].getElementsByTagName("input")[0].checked = false;};apply_all_filters();}function reset_prices() {filter_results['prices'] = filter_results['all'];jQuery("#coursePrice_left").text(rangesSliders["course_price"][0]);jQuery("#coursePrice_right").text(rangesSliders["course_price"][1]);jQuery('#sliderRange_coursePrice').slider("option", "values", [rangesSliders["course_price"][0], rangesSliders["course_price"][1]]);apply_all_filters();} function reset_price_per_lesson() { filter_results['price_per_lesson'] = filter_results['all']; jQuery("#pricePerLesson_left").text(rangesSliders["price_per_lesson"][0]); jQuery("#pricePerLesson_right").text(rangesSliders["price_per_lesson"][1]); jQuery('#sliderRange_pricePerLesson').slider("option", "values", [rangesSliders["price_per_lesson"][0], rangesSliders["price_per_lesson"][1]]); apply_all_filters(); }function reset_lessons() {filter_results['lessons'] = filter_results['all'];jQuery("#numOfLessons_left").text(rangesSliders["lessons_per_week"][0]);jQuery("#numOfLessons_right").text(rangesSliders["lessons_per_week"][1]);jQuery('#sliderRange_numOfLessons').slider("option", "values", [rangesSliders["lessons_per_week"][0], rangesSliders["lessons_per_week"][1]]);apply_all_filters();}function reset_students() {filter_results['students'] = filter_results['all'];jQuery("#numOfStudents_left").text(rangesSliders["max_students"][0]);jQuery("#numOfStudents_right").text(rangesSliders["max_students"][1]);jQuery('#sliderRange_numOfStudents').slider("option", "values", [rangesSliders["max_students"][0], rangesSliders["max_students"][1]]);apply_all_filters();}function reset_rating() { localStorage.removeItem('selectedFilters'); localStorage.removeItem('filterValues');filter_rating(0);jQuery('#ratingStarsLeftBar use').removeClass('starFiltselected');} function reset_checkbox(type) { jQuery(`#checkBox_${type} input:checked`).click(); } function reset_student_age() { jQuery('#student_age_filter ul li:first-child a').click(); } function reset_course_duration() { jQuery('#course_duration_filter ul li:first-child a').click(); }function filter_details(filter, value) {var detail = "";var starEl = jQuery('#ratingStarsLeftBar .starFiltselected');var ratingValue = parseInt(starEl.last().data('value'), 10) || value;switch(filter) {case "lessons": detail = ": [" + jQuery('#sliderRange_numOfLessons').slider("option", "values")[0] + " - " + jQuery('#sliderRange_numOfLessons').slider("option", "values")[1] + "]"; break;case "students": detail = ": [" + jQuery('#sliderRange_numOfStudents').slider("option", "values")[0] + " - " + jQuery('#sliderRange_numOfStudents').slider("option", "values")[1] + "]"; break;case "prices": detail = ": [" + jQuery('#sliderRange_coursePrice').slider("option", "values")[0] + "US$ - " + jQuery('#sliderRange_coursePrice').slider("option", "values")[1] + "US$]"; break; case "price_per_lesson": detail = ": [" + jQuery('#sliderRange_pricePerLesson').slider("option", "values")[0] + "US$ - " + jQuery('#sliderRange_pricePerLesson').slider("option", "values")[1] + "US$]"; break;case "rating": detail = ": [" + ratingValue +" stars or better]"; break;case "accommo": detail += ": " + jQuery("#checkBox_accommo input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "school": detail += ": " + jQuery("#checkBox_school input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "cities": detail += ": " + jQuery("#checkBox_cities input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "room_occupancy": detail += ": " + jQuery("#checkBox_room_occupancy input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "language_level": detail += ": " + jQuery("#checkBox_language_level input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "accommodation_type": detail += ": " + jQuery("#checkBox_accommodation_type input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "meal_plans": detail += ": " + jQuery("#checkBox_meal_plans input:checked").map(function() { return jQuery(this).parent().text().trim(); }).get().join(', '); break; case "course_duration": const cDurVal = jQuery("#course_duration_dd_filter .sel_filter").text(); detail += ": " + cDurVal + " " + (+cDurVal === 1 ? "week" : "weeks"); break; case "student_age": detail += ": " + jQuery("#student_age_dd_filter .sel_filter").text() + " years old"; break;default:;}return detail;} function saveFiltersInLocalStorage() { const selectedFilters = { prices: filter_results['prices'], lessons: filter_results['lessons'], students: filter_results['students'], rating: filter_results['rating'], path: window.location.pathname }; const filterValues = { rating_val: filter_results['rating_val'] }; localStorage.setItem('selectedFilters', JSON.stringify(selectedFilters)); localStorage.setItem('filterValues', JSON.stringify(filterValues)); }
Warning!
Please choose a Monday as a course starting date.
" + pc_result['prices']['tuition_before_so'] + currency + " ";} else {tpl += " ";if (pc_result['prices']['accommodation_accom'] > 0 && pc_result['prices']['includes_accommodation'] != 1) {tpl += "";}tpl += Math.ceil(pc_result['prices']['tuition_before_so'] - pc_result['prices']['discount_tuition']) + currency + " " + pc_result['prices']['course_name'] + " ";}if (pc_result['prices']['inscription']>0) {tpl += "" + pc_result['prices']['accommodation_accom'] + currency + " " + pc_result['prices']['accommodation_name'] + " ";}if (pc_result['prices']['includes_accommodation'] != 1 && pc_result['prices']['accommodation_fee']>0) {tpl += "" + pc_result['prices']['inscription'] + currency + " School's administrative fee ";}if (pc_result['prices']['hs_course'] > 0 && selected_date!=0) {tpl += "" + pc_result['prices']['accommodation_fee'] + currency + " One time accommodation fee charged by school ";}if (pc_result['prices']['hs_accommodation'] > 0 && selected_date!=0) {tpl += "" + pc_result['prices']['hs_course'] + currency + " High season supplement (Course) ";}if (pc_result['prices']['hasCourseOffer'] == true && pc_result['prices']['offerCourseDiscount'] > 0) {tpl += "" + pc_result['prices']['hs_accommodation'] + currency + " High season supplement (Accommodation) ";}if (pc_result['prices']['hasAccommodationOffer'] == true && pc_result['prices']['offerAccommodationDiscount'] > 0) {tpl += "" + "-" + pc_result['prices']['offerCourseDiscount'] + currency + " " + pc_result['prices']['textSpecialOfferCourse'] + " ";}tpl += "" + "-" + pc_result['prices']['offerAccommodationDiscount'] + currency + " " + pc_result['prices']['textSpecialOfferAccommodation'] + " ";var total = pc_result['prices']['total'];var total_nodiscount = pc_result['prices']['subtotal'] + pc_result['prices']['offerCourseDiscount'] + pc_result['prices']['offerAccommodationDiscount'];if (selected_date==0) {var hs_course = parseInt(pc_result['prices']['hs_course']);if (isNaN(hs_course)) {hs_course=0;}var hs_accommo = parseInt(pc_result['prices']['hs_accommodation']);if (isNaN(hs_accommo)) {hs_accommo=0;}total -= ( hs_course + hs_accommo);total_nodiscount -= ( hs_course + hs_accommo);}if (total_nodiscount > total) {tpl += "" + Math.ceil(total_nodiscount) + currency + " ";} else {tpl += " ";}tpl += Math.ceil(total) + currency + "
";if (selected_date!=0) {tpl += "Total final price including seasonal supplements, school registration fees and applicable sales tax.";} else {tpl += "Total final price including school registration fees and applicable sales tax.";}//tpl += jQuery("#courseSelected_" + school_id).attr("extra-info");tpl += jQuery("#infotooltip_" + school_index).attr("extra-info");jQuery("#infotooltip_" + school_index).attr("data-original-title", tpl);}
';// right template when container distance to right is more than 300px in desktop mode or the cBox is closed} else if ( distanceToRight > 300 || !contactBoxStatuses.locked ) {return '
';}// always bottom template when mobile mode} else if ( windowWidth <= 1024 ) {return '
';}};if (typeof jQuery().tooltip === 'function') {// init price calculator or price breakdown tooltipstooltipPC.tooltip({trigger : 'hover',placement: function (tooltip, button) { if (button?.hasClass('carouselTooltipBtn')) { return 'bottom'; }const distanceToRight = distanceOfPCToRight();const windowWidth = window.innerWidth;if (windowWidth >= 1025) {// left show when container distance to right is less than 300px in desktop mode or the cBox is openedif ( distanceToRight <= 300 || contactBoxStatuses.locked ) {return 'left';// right show when container distance to right is more than 300px in desktop mode or the cBox is closed} else if ( distanceToRight > 300 || !contactBoxStatuses.locked ) {return 'right';}// always bottom show when mobile mode} else if ( windowWidth <= 1024 ) {return 'bottom';}},html: true,// get templatetemplate: templateTooltipPC()});};// conditionals to right/left/bottom open tooltips -- first select each tooltipfor (i = tooltipPC.length - 1; i >= 0; i--) {// when tooltip is completely visible, alter its HTML inserting or removing classes:jQuery(tooltipPC[i]).on('inserted.bs.tooltip', function() {const windowWidth = window.innerWidth;if (windowWidth >= 1025) {// left show when container distance to right is less than 300px in desktop mode and the cBox is openedif ( distanceOfPCToRight() <= 300 || contactBoxStatuses.locked ) {jQuery('.tooltip').removeClass("tri-left tri-up").addClass("tri-right tri-down");// right show when container distance to right is more than 300px in desktop mode and the cBox is closed} else if ( distanceOfPCToRight() > 300 || !contactBoxStatuses.locked ) {jQuery('.tooltip').removeClass("tri-right tri-up").addClass("tri-left tri-down");}// always bottom show when mobile mode} else if ( windowWidth <= 1024 ) {jQuery('.tooltip').removeClass("tri-down tri-right tri-left").addClass("tri-up");}});}};jQuery(window).on('load', function() {setTimeout(function() {// execute tooltip function above on window loadinitTooltipPC();}, 2000);});jQuery(window).on('load', function() {// university detailsif (jQuery('.ranking-table.variant').length > 0) {jQuery('.ranking-table.variant .provider').tooltip({html: true,template: '
',title: 'loading...',placement: function (tooltip, button) {const windowWidth = window.innerWidth;if( windowWidth <= 1024 ) { placement = 'bottom';} else { placement = 'right';}return placement;},trigger: 'hover click'}).on('show.bs.tooltip', function() {const that = jQuery(this);const title = that.find('.primary_indicators').html();// 'data-original-title' => https://stackoverflow.com/questions/9501921/change-twitter-bootstrap-tooltip-content-on-clickthat.attr('data-original-title', title).tooltip('fixTitle');});} if (window.innerWidth >= 1025) { !jQuery("#radios_lists").length && showAgentImg(); cBoxDesktopReflows(); jQuery("#searchBarMob input").prop('disabled', true); jQuery("#searchBarDesk input").prop('disabled', false); } else { jQuery("#buttonToChat, #contactBoxTextareaDiv, #proActiveBubbleWrapMob").on('click', showAgentImg); jQuery("#proActiveBubbleWrapMob .closeContactBox").on('click', function(e) { e.stopPropagation(); jQuery("#proActiveBubbleWrapMob").fadeOut(300); }); jQuery("#searchBarDesk input").prop('disabled', true); jQuery("#searchBarMob input").prop('disabled', false); } function cBoxDesktopReflows() { jQuery("#contactBoxAgent").insertAfter(jQuery("#closingTab")); } function showAgentImg() { const cBoxAgent = jQuery("#contactBoxAgent"); if (document.getElementById('contactBoxSkype')?.innerHTML !== '') { const cBoxImg = document.getElementById("cBoxImg"); cBoxImg && cBoxImg.setAttribute("src", cBoxImg.getAttribute('data-image')); cBoxAgent.show(); const theSkypeImg = document.getElementById("theSkypeImg"); theSkypeImg && theSkypeImg.setAttribute("src", theSkypeImg.getAttribute('data-image')); const theKakaoImg = document.getElementById("theKakaoImg"); theKakaoImg && theKakaoImg.setAttribute("src", theKakaoImg.getAttribute('data-image')); const theWechatImg = document.getElementById("theWechatImg"); theWechatImg && theWechatImg.setAttribute("src", theWechatImg.getAttribute('data-image')); const weChatQRImg = document.getElementById("weChatQRImg"); weChatQRImg && weChatQRImg.setAttribute("src", weChatQRImg.getAttribute('data-image')); const theWhatsAppImg = document.getElementById("theWhatsAppImg"); theWhatsAppImg && theWhatsAppImg.setAttribute("src", theWhatsAppImg.getAttribute('data-image')); } else { cBoxAgent.hide(); setTimeout(showAgentImg, 100); } } jQuery(window).on('widthOnlyResizedMobile', function() { jQuery("#contactBoxAgent").insertAfter(jQuery("#closingFunctions")); jQuery("#searchBarDesk input").prop('disabled', true); jQuery("#searchBarMob input").prop('disabled', false); }); jQuery(window).on('widthOnlyResizedDesktop', function() { cBoxDesktopReflows(); jQuery("#searchBarMob input").prop('disabled', true); jQuery("#searchBarDesk input").prop('disabled', false); }); });