// add listeners to each instance of degree picker widget const dpForms = document.querySelectorAll(".degreePicker"); const dpCip2Divs = document.querySelectorAll("#cip2div"); const dpCip6Divs = document.querySelectorAll("#cip6div"); function cip2Fill(val, j) { var slug1s = degreePickerMapping[val]; dpForms[j].cip2.innerHTML = "" // For each first level slug (cip2) var slug1_count = Object.keys(slug1s).length; for (var slug1 in slug1s) { var slug2s = slug1s[slug1]; // create optgroup for use later in case more than 1 first level slugs var optgroup = document.createElement("optgroup"); if(slug1=='other') { optgroup.label = "Other " + cipSlugNames[val]; } else { optgroup.label = cipSlugNames[slug1]; } // For each second level slug (cip4) for (var slug2 in slug2s) { var option = document.createElement("option"); option.value = slug2.replace("1", slug1); option.text = slug2s[slug2]; if (slug1_count > 1) { optgroup.appendChild(option); } else { dpForms[j].cip2.appendChild(option); } } if (slug1_count > 1) { dpForms[j].cip2.appendChild(optgroup); } } } function cip6Fill(val, j) { cip0 = dpForms[j].cip0.value; for (slug1 in dpLevel3) { let has_concentrations = false; for (slug2 in dpLevel3[slug1]) { if (slug2.replace("1", slug1) == val) { has_concentrations = true; for (slug3 in dpLevel3[slug1][slug2]) { var option = document.createElement("option"); option.value = slug3.replace("2", slug2).replace("1", slug1); option.text = dpLevel3[slug1][slug2][slug3]; dpForms[j].cip6.appendChild(option); } } } } // if no concentrations found if (dpForms[j].cip6.options.length == 1) { for (var k = 0; k < dpCip6Divs.length; k++) { dpCip6Divs[k].style.display = "none"; } dpForms[j].cip6.disabled = true; } else { // concentrations found for (var k = 0; k < dpCip6Divs.length; k++) { dpCip6Divs[k].style.display = "block"; } dpForms[j].cip6.disabled = false; } dpForms[j].dpBtn.disabled = false; dpOffersFetch(dpForms[j].cip2.value); } for (var i = 0; i < dpForms.length; i++) { dpForms[i].cip0.addEventListener("change", function() { for (var j = 0; j < dpForms.length; j++) { dpForms[j].cip0.value = this.value; // Reset lower elements of form till cip2 selected for (var k = 0; k < dpCip6Divs.length; k++) { dpCip6Divs[k].style.display = "none"; } document.getElementById("cip6").innerHTML = ""; document.getElementById("cip6").disabled = true; dpForms[j].dpBtn.disabled = true; if (this.value != '') { cip2Fill(this.value, j) dpLevel3Fetch(this.value); dpForms[j].cip2.disabled = false; for (var k = 0; k < dpCip2Divs.length; k++) { dpCip2Divs[k].style.display = "block"; } } else { dpForms[j].cip2.disabled = true; dpForms[j].cip2.value = ""; for (var k = 0; k < dpCip2Divs.length; k++) { dpCip2Divs[k].style.display = "none"; } } } }); dpForms[i].cip2.addEventListener("change", function() { for (var j = 0; j < dpForms.length; j++) { dpForms[j].cip2.value = this.value; dpForms[j].cip6.innerHTML = ""; if (this.value != '') { cip6Fill(this.value, j); dpOffersFetch(dpForms[j].cip2.value); } else { dpForms[j].cip6.disabled = true; dpForms[j].dpBtn.disabled = true; } } }); dpForms[i].cip6.addEventListener("change", function() { for (var j = 0; j < dpForms.length; j++) { dpForms[j].cip6.value = this.value; if (this.value != '') { dpOffersFetch(dpForms[j].cip6.value); } else { dpOffersFetch(dpForms[j].cip2.value); } } }); function dpSubmit(e) { if (e.preventDefault) e.preventDefault(); var formData = new FormData(e.target); var formValues = Object.fromEntries(formData.entries()); var major_slug = formValues.cip2; if (formValues.cip6 != "" && typeof formValues.cip6 !== 'undefined') { major_slug=formValues.cip6 } // if major_slug starts with 'popular-majors', redirect to popular offers page if (major_slug.startsWith("popular-majors/")) { redirectToPopularOffers(major_slug); return false; } var template = ""; if (formValues.template) { template = formValues.template; } else if (Object.keys(dpOffers).length > 0) { var offers = dpOffers["offers"].filter(item => item.relevance >= 0.7) if (offers.length >= 1) { template = "offers.html" } } location.href="https://www.collegefactual.com/majors/" + major_slug + "/" + template; return false; } if (dpForms[i].attachEvent) { dpForms[i].attachEvent("submit", dpSubmit); } else { dpForms[i].addEventListener("submit", dpSubmit); } } function redirectToPopularOffers(major_slug) { categoriesIds = major_slug.replace("popular-majors/", ""); var linkTemplate = "https://www.esyoh.com/find-schools/?widget_program_option=[category_ids]¤t_page_url=[current_page_url]&domain_id=collegefactual.com&src=custom_drop_down&placement=custom_drop_down"; var current_page_url = encodeURIComponent(window.location.href); var link = linkTemplate.replace("[category_ids]", categoriesIds).replace("[current_page_url]", current_page_url); window.location.href = link; } let dpLevel3 = {}; function dpLevel3Fetch(slug0) { if (slug0 != "general") { fetch('/assets/js/dp/'+slug0+'.json') .then(response => response.json()) .then(data => { dpLevel3Update(data); }) .catch(error => { dpLevel3Update({}); }); } else { dpLevel3Update({}); } function dpLevel3Update(response) { dpLevel3 = response; } } let dpOffers = {}; function dpOffersFetch(major_slug) { var url = '/majors/' + major_slug + '/offers.json' fetch(url) .then(response => response.json()) .then(data => { dpOfferUpdate(data); }) .catch(error => { dpOfferUpdate({}); }); function dpOfferUpdate(response) { dpOffers = response; } } // Preset degree picker dropdown. if (typeof metaValues !== 'undefined' && metaValues["mf_cip0_slug"]) { for (var i = 0; i < dpForms.length; i++) { if(metaValues["mf_cip0_slug"] != ""){ dpForms[i].cip0.value = metaValues["mf_cip0_slug"]; cip2Fill(dpForms[i].cip0.value, i); dpForms[i].cip2.disabled = false dpLevel3Fetch(dpForms[i].cip0.value); if(metaValues["mf_cip4_slug"] != ""){ dpForms[i].cip2.value = metaValues["mf_cip2_slug"] + "/" + metaValues["mf_cip4_slug"]; dpForms[i].dpBtn.disabled = false cip6Fill(dpForms[i].cip2.value, i); for (var k = 0; k < dpCip6Divs.length; k++) { dpCip6Divs[k].style.display = "block"; } dpForms[i].cip6.disabled = false if(metaValues["mf_cip6_slug"] != ""){ dpForms[i].cip6.value = metaValues["mf_major_slug"]; } } } } }