/*======================================================================= * * price_finder.js * * Assecutor Data Service GmbH * =======================================================================*/ // // ////https://www.webdew.com/blog/google-places-autocomplete-implementation // google.maps.event.addDomListener(window, 'load', initialize); // function initialize() { // var input = document.getElementById('autocomplete_search'); // var autocomplete = new google.maps.places.Autocomplete(input); // autocomplete.addListener('place_changed', function () { // var place = autocomplete.getPlace(); // // place variable will have all the information you are looking for. // $('#lat').val(place.geometry['location'].lat()); // $('#long').val(place.geometry['location'].lng()); // }); // } const contact_data = [ ["bremen@stadtbote.de", "0421 38 38 38"], ["hamburg@stadtbote.de", "040 54 54 54"], ["berlin@stadtbote.de", "030 30 30 30"], ["hannover@stadtbote.de", "0511 93 93 93"], ["frankfurt@stadtbote.de", "069 44 44 44"], ["dresden@stadtbote.de", "0351 31 31 31"], ["essen@stadtbote.de", "0201 38 38 30"], ["leipzig@stadtbote.de", "0341 86 86 86"], ["",""], ["",""], ["stuttgart@stadtbote.de","0711 34 16 900"] ]; let autocomplete_handlers = []; let autocomplete_full_address = []; let autocomplete_ajaxParms = []; let autocomplete_ajaxParms_all; let autocomplete_accuracy = []; let autocomplete_hq_id = 0; let max_autocomplete = 10; let cnt_add_stations = 0; function initAutocomplete1(i) { if (typeof google == 'undefined') { if (i < 10) self.setTimeout('initAutocomplete1(' + (i+1) + ')', 100); return; } autocomplete_handlers[1] = new google.maps.places.Autocomplete( document.getElementById('autocomplete1'), { types: ['address'], // componentRestrictions: {'country': ['DE']}, fields: ["geometry", "address_components", "types"] }); // autocomplete_handlers[1].setFields('address_components'); autocomplete_handlers[1].addListener('place_changed', function(){fillInAddress(1);}); autocomplete_full_address[1] = ""; autocomplete_ajaxParms[1] = ""; autocomplete_accuracy[1] = -1; initAutocomplete(max_autocomplete); } function initAutocomplete(i) { autocomplete_handlers[i] = new google.maps.places.Autocomplete( document.getElementById('autocomplete' + i), { types: ['address'], // componentRestrictions: {'country': ['DE']}, fields: ["geometry", "address_components", "types"] }); // autocomplete.setFields('address_components'); autocomplete_handlers[i].addListener('place_changed', function(){fillInAddress(i);}); autocomplete_full_address[i] = ""; autocomplete_ajaxParms[i] = ""; autocomplete_accuracy[i] = -1; } // JQuery.Request (GET) function ajaxRequestGet(url, data) { $.ajax({ type: "GET", url: url, data: data, async: false, cache: false, success: function(msg){eval(msg);} }); } function fillInAddress(i) { //console.log("fillInAddress(" + i + ")"); // Get the place details from the autocomplete object. let place = autocomplete_handlers[i].getPlace(); if (!place.geometry) { //console.log("no geometry, end here"); return; } //console.log(place.types); let accuracy = 0; const sufficient_types = ["intersection", "street_address", "premise", "subpremise"]; const sufficient_types_accuracy = [7, 8, 9, 9]; let type_index = -1; for (const type of place.types) { type_index = sufficient_types.indexOf(type); if (type_index > -1) { if (accuracy < sufficient_types_accuracy[type_index]) accuracy = sufficient_types_accuracy[type_index]; } } let route = ""; let street_number = ""; let country = ""; let postal_code = "" let locality = ""; let lat = 0; let lng = 0; if (type_index > -1) { lat = place.geometry.location.lat(); lng = place.geometry.location.lng(); } // Get each component of the address from the place details, // and then fill-in the corresponding field on the form. // place.address_components are google.maps.GeocoderAddressComponent objects // which are documented at http://goo.gle/3l5i5Mr for (const component of place.address_components) { // @ts-ignore remove once typings fixed const componentType = component.types[0]; switch (componentType) { case "route": { route = component.short_name; break; } case "street_number": { street_number = component.short_name; break; } case "country": { country = component.short_name; break; } case "postal_code": { postal_code = component.short_name; break; } case "locality": { locality = component.short_name; break; } } } //console.log(route + " " + street_number + ", " + postal_code + " " + locality); // After filling the form with address components from the Autocomplete // prediction, set cursor focus on the second address line to encourage // entry of subpremise information such as apartment, unit, or floor number. let full_address = route + " " + street_number + ", " + postal_code + " " + locality; let ajaxParms = myEncodeURI(route) + ";" + myEncodeURI(street_number) + ";" + myEncodeURI(postal_code) + ";" + myEncodeURI(locality) + ";" + myEncodeURI(country); document.getElementById('autocomplete' + i).value = full_address; autocomplete_full_address[i] = full_address; autocomplete_ajaxParms[i] = ajaxParms; autocomplete_accuracy[i] = accuracy; if (accuracy > 6) { document.getElementById('autocomplete' + i).className = "form-control"; ajaxRequestGet('../include/ajaxReqKmPrice.php', "mode=coords&a=" + route + ";" + street_number + ";" + postal_code + ";" + locality + ";" + country + ";" + lat + ";" + lng + ";" + accuracy); if (i == 1) autocomplete_hq_id = retValue; } else { document.getElementById('autocomplete' + i).className = "form-control alert alert-danger"; } check_sendtour(); } self.setTimeout('initAutocomplete1(0)', 100); function check_input(i, doit) { // if (typeof doit == "undefined") { // self.setTimeout('check_input(' + i + ', true)', 100); // return; // } //console.log("check_input(" +i+")"); //console.log(document.getElementById('autocomplete' + i).value); //console.log(autocomplete_full_address[i]); //console.log(autocomplete_ajaxParms[i]); //console.log(autocomplete_accuracy[i]); if (trim(document.getElementById("autocomplete" + i).value) == "") { autocomplete_full_address[i] = ""; autocomplete_ajaxParms[i] = ""; autocomplete_accuracy[i] = 0; if (i == 1) autocomplete_hq_id = 0; } else { if (trim(document.getElementById("autocomplete" + i).value) != autocomplete_full_address[i]) { ajaxRequestGet('../include/ajaxReqKmPrice.php', "mode=full_address&a=" + myEncodeURI(trim(document.getElementById("autocomplete" + i).value))); //console.log('../include/ajaxReqKmPrice.php'+"?"+"mode=full_address&a=" + myEncodeURI(trim(document.getElementById("autocomplete" + i).value))); if (retValue[0] > 6) { document.getElementById("autocomplete" + i).value = retValue[4] + " " + retValue[5] + ", " + retValue[2] + " " + retValue[3]; autocomplete_full_address[i] = retValue[4] + " " + retValue[5] + ", " + retValue[2] + " " + retValue[3]; autocomplete_ajaxParms[i] = myEncodeURI(retValue[4]) + ";" + myEncodeURI(retValue[5]) + ";" + myEncodeURI(retValue[2]) + ";" + myEncodeURI(retValue[3]) + ";" + myEncodeURI(retValue[1]); if (i == 1) autocomplete_hq_id = 0; //console.log(document.getElementById('autocomplete' + i).value); //console.log(autocomplete_full_address[i]); //console.log(autocomplete_ajaxParms[i]); //console.log(autocomplete_accuracy[i]); document.getElementById('autocomplete' + i).className = "form-control"; } else { document.getElementById('autocomplete' + i).className = "form-control alert alert-danger"; } autocomplete_accuracy[i] = retValue[0]; } } check_sendtour(); } function check_sendtour() { errors_found = true; let autocomplete_ajaxParms_intermediate = ""; if (autocomplete_hq_id > 0 && autocomplete_accuracy[1] > 6 && autocomplete_accuracy[max_autocomplete] > 6) { errors_found = false; for(i = 2; i < max_autocomplete; i++) { if (autocomplete_accuracy[1] >= 0 && autocomplete_accuracy[1] <= 6) { errors_found = true; break; } else { if (typeof autocomplete_ajaxParms[i] != "undefined") autocomplete_ajaxParms_intermediate += autocomplete_ajaxParms[i] + "|"; } } } if (!errors_found) { autocomplete_ajaxParms_all = autocomplete_ajaxParms[1] + "|" + autocomplete_ajaxParms_intermediate + autocomplete_ajaxParms[max_autocomplete]; document.getElementById("priceButton").style.display = "inline"; } else { autocomplete_ajaxParms_all = ""; document.getElementById("priceButton").style.display = "none"; } } function add_station(i) { document.getElementById("input-group" + (i + 1)).style.display = ""; document.getElementById("add_stationsButton" + i).style.display = "none"; if (typeof autocomplete_handlers[i + 1] == "undefined") initAutocomplete(i + 1); cnt_add_stations++; } function del_station(i) { //console.log(i); //console.log(cnt_add_stations); //console.log(1 + cnt_add_stations); for(j = i; j < 1 + cnt_add_stations; j++) { //console.log(j); document.getElementById("autocomplete" + j).value = document.getElementById("autocomplete" + (j + 1)).value; autocomplete_full_address[j] = autocomplete_full_address[j + 1]; autocomplete_ajaxParms[j] = autocomplete_ajaxParms[j + 1]; autocomplete_accuracy[j] = autocomplete_accuracy[j + 1]; document.getElementById('autocomplete' + j).className = document.getElementById("autocomplete" + (j + 1)).className; } document.getElementById("autocomplete" + j).value = ""; autocomplete_full_address[j] = autocomplete_full_address[j] = ""; autocomplete_ajaxParms[j] = autocomplete_ajaxParms[j] = ""; autocomplete_accuracy[j] = autocomplete_accuracy[j] = -1; document.getElementById('autocomplete' + j).className = "form-control"; document.getElementById("input-group" + j).style.display = "none"; document.getElementById("add_stationsButton" + (j - 1)).style.display = "inline"; cnt_add_stations--; } function openDistancepriceDoit() { // let i = 0; // while (checkTourComplete(i)) // { // if (ajaxParms != "") // ajaxParms += "|"; // ajaxParms += getJobList(i, jl_ad_street) + ";" + getJobList(i, jl_tr_hsno) + ";" + getJobList(i, jl_ad_zipcode) + ";" + getJobList(i, jl_ad_city) + ";" + getJobList(i, jl_ad_country); // if (i++ >= maxTour) // break; // } // let cntTour = i; ajaxParms = "hq_id=" + autocomplete_hq_id + '&cs_id=0' + "&vht_id=" + document.getElementById("vht_id").value + "&jb_markup=&jb_ordertime=&mode=zone&a=" + autocomplete_ajaxParms_all; ajaxRequestGet('../include/ajaxReqKmPrice.php', ajaxParms); //console.log(ajaxParms); //for (let i = 0; i < retValue[3].length; i++) { //console.log(retValue[3].charAt(i)); //console.log(retValue[3].charCodeAt(i)); //} if (retValue[0] != "ERROR") { let parts = trim(retValue[9]).split(":"); let hourStr = "Stunde"; let minStr = "Minute"; if (parts[0] > 1) hourStr += "n"; if (parts[1] > 1) minStr += "n"; let duration = "die Fahrt wird (ohne Berücksichtigung der aktuellen Verkehrslage) ca. " + (parts[0] != 0 ? parts[0] + " " + hourStr + " " : "") + parts[1] + " " + minStr + " dauern"; let net_price = parseFloat(retValue[0].replace(/,/,".").substr(0, retValue[0].length - 1)); let gross_price = Math.round(net_price * 119) / 100; // $km_price_paramsArrArr = array(); // if (!(strpos($km_price_params, "|") === FALSE)) { // $km_price_paramsArr = explode("|", $km_price_params); // if ($km_price_paramsArr[3] != "zone") { // $total_km = explode(" ", $km_price_paramsArr[0])[0]; // $price_per_km = explode(" ", $km_price_paramsArr[1])[0]; // $basic_price = explode(" ", trim(str_replace("+", "", $km_price_paramsArr[2])))[0]; // $km_price_params = str_replace(",", ".", $total_km . "|" . $price_per_km . "|" . $basic_price); // } else { // $km_price_paramsArr[1] = str_replace("[n]", "(n)", str_replace("(", "", str_replace(")", "", str_replace("(n)", "[n]", $km_price_paramsArr[1])))); // $km_price_paramsArrArr = explode("+", $km_price_paramsArr[1]); // $di_ids = explode(",", $km_price_paramsArr[4]); // $fixprice_min = $km_price_paramsArr[5]; // } // } // if ($cs_invmode == 0) { // if (!(strpos($costArr[$i][0], "*") === false)) { // $tmp_cost = explode("*", $costArr[$i][0]); // $pos = strpos($tmp_cost[0], "km"); // $km = (float) trim(str_replace(",", ".", substr($tmp_cost[0], 0, $pos))); // $tmp_cost[1] = str_replace(" ", "", $tmp_cost[1]); // $pos = strpos($tmp_cost[1], chr(128)); // $eur = (float) trim(str_replace(",", ".", substr($tmp_cost[1], 0, $pos))); // $costArr[$i][1] = round($km * $eur, 2); // } else { // if (!(strpos($costArr[$i][0], "pro") === false)) { // $tmp_cost = explode("pro", $costArr[$i][0]); // $pos = strpos($tmp_cost[0], chr(128)); // $eur = (float) trim(str_replace(",", ".", substr($tmp_cost[0], 0, $pos))); // $tmp_cost[1] = str_replace(" ", "", $tmp_cost[1]); // $pos = strpos($tmp_cost[1], "weitere"); // $cnt = (int) trim(str_replace(",", ".", substr($tmp_cost[1], 0, $pos))); // $costArr[$i][1] = $cnt * $eur; // } else { // if ($costArr[$i][0] != "Fixpreis " && substr($costArr[$i][0], 0, strlen("Fixpreis [M]")) != "Fixpreis [M]" && $costArr[$i][0] != "Servicepreis ") { // $pos = strpos($costArr[$i][0], chr(128)); // $eur = (float) trim(str_replace(",", ".", substr($costArr[$i][0], 0, $pos))); // $costArr[$i][1] = $eur; // } else { // if (substr($costArr[$i][0], 0, strlen("Fixpreis [M]")) == "Fixpreis [M]") { // $costArr[$i][0] = substr($costArr[$i][0], strlen("Fixpreis [M]" . " ")); // $costArr[$i][1] = $db->getOne("SELECT jb_fixprice FROM job WHERE jb_id = " . $jb_id); // $is_minimum = true; // } // } // } // } // $costArr[$i][0] = str_replace("Bus", "Transporter", str_replace("km", " km", str_replace(chr(128), " EUR", str_replace(" " . chr(128), " EUR", str_replace(" z", "", $costArr[$i][0]))))); // } // if (!($cs_invmode == 0 && ($costArr[$i][0] == "Fixpreis " || $costArr[$i][0] == "Servicepreis "))) { // if (!$is_minimum || substr($costArr[$i][0], 0, strlen("Mindestpreis")) == "Mindestpreis") { // $tmp_special_jb_invtext .= trim(str_replace(" ", " ", $costArr[$i][0])) . ": " . // padLeft(str_replace(".", ",", sprintf("%01.2f", trim($costArr[$i][1]))) . " EUR", getParameterValue("0", "INV_MAXCOLS", $hq_id) - strlen(trim(str_replace(" ", " ", $costArr[$i][0])). ": ")) . // "\n"; // } // } // document.getElementById("result_text").innerHTML = "

Preis inkl. MwSt.: " + gross_price.toFixed(2).replace(".",",") + " " + String.fromCodePoint(0x404) + "

" + "So setzt sich der Preis zusammen:
" + retValue[3].replace("(","").replace(")","").replace("Großer Bus", "Transporter XL").replace("Bus", "Transporter").replaceAll("km"," Km").replaceAll(" " + String.fromCharCode(8364), String.fromCharCode(8364)).replaceAll(String.fromCharCode(8364), " " + String.fromCharCode(8364)).replace(/\+/g, "
+") + retValue[4].replace("Tz.", "Treibstoffzuschlag").replace("%", " %").replace(/=/g, "
=") + " + 19% MwSt.
" + "

" + "Die Streckenlänge beträgt " + retValue[2] + ", " + duration + ".

"; } else { document.getElementById("result_text").innerHTML = retValue[1]; } document.getElementById("mail_link").innerHTML = "" + contact_data[autocomplete_hq_id - 1][0] + ""; document.getElementById("tel_link").innerHTML = "" + contact_data[autocomplete_hq_id - 1][1] + ""; for(i = 1; i <= max_autocomplete; i++) { if (autocomplete_accuracy[i] > -1) document.getElementById("autocomplete" + i).disabled = true; else document.getElementById("input-group" + i).style.display = "none"; if (i < max_autocomplete - 1) document.getElementById("add_stationsButton" + i).style.display = "none"; if (i > 1 && i < max_autocomplete) document.getElementById("del_stationsButton" + i).style.display = "none"; } document.getElementById("vht_id").disabled = true; document.getElementById("priceButton").style.display = "none"; document.getElementById("result").style.display = "inline"; document.getElementById("contact").style.display = "inline"; document.getElementById("refreshButton").style.display = "inline"; } function trim(zeichenkette) { if (typeof zeichenkette == "undefined") return ""; return zeichenkette.replace (/^\s+/, '').replace (/\s+$/, ''); } function myEncodeURI(aString) { let aStringNew = ""; for (i = 0; i < aString.length; i++) { aStringNew = aStringNew + '%' + aString.charCodeAt(i).toString(16); } return aStringNew; };