let currentFocus = -1;
let fetchTrigger = 0;
document.getElementById('btnResetCollegeSearch').addEventListener('click', function(event) {
init(event);
});
document.getElementById('btnResetCollegeSearch').addEventListener('keyup', function(event) {
if (event.key === 'Enter') {
init(event);
}
});
function httpRequest(url, callback) {
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
callback(JSON.parse(xhr.responseText));
}
};
xhr.open('GET', url, true);
xhr.send();
}
function init(e) {
e.preventDefault();
document.getElementById('rueInputLoader').style.display = 'none';
document.getElementById("rueInput").focus();
document.getElementById('rueInput').value = "";
document.getElementById('inputAddress').value = "";
afficheResultat(false);
let datalist = document.getElementById('rueOptions');
datalist.innerHTML = '';
document.getElementById('lien_reinitialisation').style.display = "none";
document.getElementById('btn_reinitialisation').style.display = "none";
document.getElementById('rueInput').disabled = false;
document.getElementById('rueInput').focus();
document.getElementById('libelle_multiple').style.display = "none";
document.getElementById('results').innerHTML = '';
}
function afficheResultat(bool) {
document.getElementById('leCollege').style.display = "none";
document.getElementById('lesImages').style.display = "none";
if (bool) {
document.getElementById('leCollege').style.display = "";
document.getElementById('lesImages').style.display = "";
document.getElementById('lien_reinitialisation').style.display = "";
document.getElementById('btn_reinitialisation').style.display = "";
document.getElementById('rueInput').disabled = true;
}
}
function filterByNord(results) {
return results.filter(function (result) {
return result.properties.postcode && result.properties.postcode.startsWith('59');
});
}
function getInfoCollege(numetab) {
let url = "/ajax/get_info_colleges?id=" + numetab;
httpRequest(url, function (response) {
if (response.features.length > 0) {
let attributes = response.features[0].attributes;
document.getElementById('college_rne').innerHTML = "";
document.getElementById('college_nb_eleve').innerHTML = "";
document.getElementById('college_image').innerHTML = "";
document.getElementById('college_nom').innerHTML = attributes["type_"] + " " + attributes["Denomination"];
document.getElementById('college_adresse').innerHTML = attributes["adresse1"] + " " + attributes["adresse2"] + " " + attributes["codepostal"] + " " + attributes["Ville"];
document.getElementById('college_telephone').innerHTML = attributes["Tél"].replaceAll(".", " ").replace("03", "+33 3");
document.getElementById('college_telephone_lien').href = attributes["Tél"].replace("03", "tel:+333").replaceAll(".", "");
const googleMapsStaticApiKey = 'AIzaSyCmvIOcgfl_y9l40sGBnqOo-6KypVacBP8';
const address = attributes["adresse1"] + " " + attributes["adresse2"] + " " + attributes["codepostal"] + " " + attributes["Ville"];
const staticMapUrl = `https://maps.googleapis.com/maps/api/staticmap?center=${encodeURIComponent(address)}&zoom=16&size=600x400&maptype=roadmap&key=${googleMapsStaticApiKey}`;
const googleMapsLink = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`;
document.getElementById('college_map').innerHTML = `<a target="_blank" href="${googleMapsLink}" title="Itinéraire vers ${attributes["type_"] + " " + attributes["Denomination"]}" style="position:relative;">
<img src="${staticMapUrl}" alt="Itinéraire vers ${attributes["type_"] + " " + attributes["Denomination"]}" style="width:100%;height:100%;position:absolute;left:0;top:0;object-fit:cover;border:0">
</a>`;
document.getElementById('college_site_ent').href = attributes["URL_ENT"];
document.getElementById('college_site_ent').title = "Site internet du collège " + attributes["Denomination"] + " " + attributes["Ville"];
document.getElementById('college_menu_link').href = "https://nord.webgerest.fr/?RNE=" + attributes["NUMETAB"];
document.getElementById('college_mail').innerHTML = "ce." + attributes["NUMETAB"].toLowerCase() + "@ac-lille.fr";
document.getElementById('college_mail_href').href = "mailto:ce." + attributes["NUMETAB"].toLowerCase() + "@ac-lille.fr";
if (attributes["NUMETAB"]) {
document.getElementById('college_rne').innerHTML = "<span class='font-weight-bold'>Code UAI, RNE :</span> " + attributes["NUMETAB"] + "<br />";
}
if (attributes["nb_eleve"]) {
document.getElementById('college_nb_eleve').innerHTML = "<b>Nombre d'élèves :</b> " + attributes["nb_eleve"] + "<br />";
}
if (attributes["Lien_Photo"]) {
document.querySelector('#lesImages .flex-item-right').classList.remove("no-first-image");
document.getElementById('college_image').classList.add("flex-item-left");
let college_image = document.createElement("img");
college_image.setAttribute("src", attributes["Lien_Photo"]);
college_image.setAttribute("alt", "");
document.getElementById("college_image").appendChild(college_image);
} else {
let flexItemRight = document.querySelector('#lesImages .flex-item-right');
flexItemRight.classList.add('no-first-image');
document.getElementById('college_image').classList.remove("flex-item-left");
}
if (attributes["mail_college"]) {
document.getElementById('college_mail').innerHTML = attributes["mail_college"];
document.getElementById('bloc_mail').style.display = "";
}
afficheResultat(true);
document.getElementById('btn_reinitialisation').focus();
document.getElementById('rueInputLoader').style.display = 'none';
let leCollegeElement = document.getElementById('leCollege');
let lesImagesElement = document.getElementById('lesImages');
let leCollegeCopy = leCollegeElement.cloneNode(true);
leCollegeCopy.setAttribute('id', 'leCollege' + numetab);
leCollegeElement.style.display = 'none';
let lesImagesCopy = lesImagesElement.cloneNode(true);
lesImagesCopy.setAttribute('id', 'lesImages' + numetab);
lesImagesElement.style.display = 'none';
let resultsContainer = document.getElementById('results');
resultsContainer.appendChild(leCollegeCopy);
resultsContainer.appendChild(lesImagesCopy);
} else {
afficheResultat(false);
}
});
}
function getCollegeProximite(geometry) {
document.getElementById('results').innerHTML = '';
let url = '/ajax/get_college_proximite?lat=' + geometry.coordinates[0] + '&lng=' + geometry.coordinates[1];
httpRequest(url, function (response) {
if (response.features.length > 0) {
if (response.features.length > 1) {
document.getElementById('libelle_multiple').style.display = "";
} else {
document.getElementById('libelle_multiple').style.display = "none";
}
let responses = response.features;
responses.forEach(function (item) {
const attributes = item.attributes;
getInfoCollege(attributes["numetab"]);
});
} else {
afficheResultat(false);
}
});
}
function getInfoRue(rue) {
if (rue.length > 2) {
let url = 'https://api-adresse.data.gouv.fr/search/?q=' + encodeURIComponent(rue); // + "&limit=150";
httpRequest(url, function (response) {
if (response.features.length > 0) {
let geometry = response.features[0].geometry;
getCollegeProximite(geometry);
} else {
afficheResultat(false);
document.getElementById('rueInputLoader').style.display = 'none';
}
});
}
}
function onRueSelection(inputValue) {
if (inputValue.length > 2) {
document.getElementById('rueInputLoader').style.display = 'block';
setTimeout(getInfoRue(inputValue), 200);
}
}
function setActive() {
let nbVal = $("div.address-feedback a").length;
if (!nbVal)
return false;
$('div.address-feedback a').removeClass("active");
currentFocus = ((currentFocus + nbVal - 1) % nbVal) + 1;
$('div.address-feedback a:nth-child(' + currentFocus + ')').addClass("active");
}
function handlerOnKeyUp(ev) {
event.preventDefault();
event.stopPropagation();
if (event.keyCode === 38) {
currentFocus--;
setActive();
return false;
} else if (event.keyCode === 40) {
currentFocus++;
setActive();
return false;
} else if (event.keyCode === 13) {
if (currentFocus > 0) {
if ($("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-name")) {
$("#rueInput").val($("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-name") + ' ' + $("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-postcode") + ' ' + $("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-city"));
} else {
$("#rueInput").val('');
}
$('.address-feedback').empty();
onRueSelection($("#rueInput").val());
}
return false;
}
$('div.address-feedback a').removeClass("active");
currentFocus = 0;
clearTimeout(fetchTrigger);
let rue = $("#rueInput").val();
if (rue.length === 0) {
$('.address-feedback').empty();
ev.target.setAttribute('aria-expanded', 'false');
return false;
}
document.getElementById('libelle_multiple').style.display = "none";
if (rue.length > 2) {
document.getElementById('rueInputLoader').style.display = 'block';
fetchTrigger = setTimeout(function () {
$.get('https://api-adresse.data.gouv.fr/search/', {
q: rue,
limit: 4,
autocomplete: 1
}, function (data, status, xhr) {
let liste = "";
let suggestions = filterByNord(data.features);
if (suggestions.length > 0) {
ev.target.setAttribute('aria-expanded', 'true');
}
$.each(suggestions, function (i, obj) {
let cooladdress = obj.properties.name + " " + obj.properties.postcode + " <strong>" + obj.properties.city + "</strong>";
liste += '<li><a class="list-group-item list-group-item-action py-1" href="javascript:void(0)" name="' + obj.properties.label + '" data-name="' + obj.properties.name + '" data-postcode="' + obj.properties.postcode + '" data-city="' + obj.properties.city + '">' + cooladdress + '</a></li>';
});
$('.address-feedback').html(liste);
const elems = document.querySelectorAll('.list-group-item');
for (let i = 0; i < elems.length; i++) {
elems[i].addEventListener('mousedown', function (event) {
handlerOnMouseDown(event, i, elems[i]);
});
}
document.getElementById('rueInputLoader').style.display = 'none';
}, 'json');
}, 500);
}
}
function handlerOnKeyDown(e) {
if ($("div.address-feedback a").length > 0 && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
e.preventDefault();
}
}
function handlerOnFocusOut(ev) {
$('.address-feedback').empty();
ev.target.setAttribute('aria-expanded', 'false');
}
function handlerOnMouseDown(event, index, element) {
event.preventDefault();
event.stopPropagation();
$("#rueInput").val($(element).attr("data-name") + ' ' + $(element).attr("data-postcode") + ' ' + $(element).attr("data-city"));
$('.address-feedback').empty();
onRueSelection($("#rueInput").val());
}