Android Radio Konfigurator: Unterschied zwischen den Versionen
Aus Wiki rund um Android-Navis für BMW E38/E39/E46/E53
Andre (Diskussion | Beiträge) |
Andre (Diskussion | Beiträge) |
||
| Zeile 23: | Zeile 23: | ||
#nvk .nvk-note{border:1px solid rgba(128,128,128,.45);border-left:5px solid #fc3;border-radius:4px;padding:9px 12px;margin:8px 0} | #nvk .nvk-note{border:1px solid rgba(128,128,128,.45);border-left:5px solid #fc3;border-radius:4px;padding:9px 12px;margin:8px 0} | ||
#nvk .nvk-miss{opacity:.8;font-style:italic} | #nvk .nvk-miss{opacity:.8;font-style:italic} | ||
#nvk .nvk-img{max-width:150px;max-height:110px;height:auto;margin:4px 8px 0 0;border:1px solid rgba(128,128,128,.4);border-radius:3px;background:#fff} | |||
#nvk .nvk-card .nvk-img{max-width:230px;max-height:150px} | |||
#nvk input[type=text],#nvk input[type=email],#nvk textarea{width:100%;padding:9px 8px;font:inherit;color:#202122;background:#fff;border:1px solid #a2a9b1;border-radius:4px} | |||
#nvk #nvk-form{margin-top:22px} | |||
</style> | </style> | ||
<div class="nvk-grid" id="nvk-fields"></div> | <div class="nvk-grid" id="nvk-fields"></div> | ||
| Zeile 28: | Zeile 32: | ||
<button type="button" class="nvk-btn" id="nvk-reset">Auswahl zurücksetzen</button> | <button type="button" class="nvk-btn" id="nvk-reset">Auswahl zurücksetzen</button> | ||
<div id="nvk-out" aria-live="polite"></div> | <div id="nvk-out" aria-live="polite"></div> | ||
<fieldset id="nvk-form" style="display:none"><legend>Anfrage senden</legend> | |||
<p class="nvk-help">Deine Auswahl und die Liste oben werden automatisch mitgesendet. Alle Felder mit * sind Pflicht.</p> | |||
<div class="nvk-grid"> | |||
<div class="nvk-f"><label for="nvk-name">Name *</label><input id="nvk-name" type="text" autocomplete="name"></div> | |||
<div class="nvk-f"><label for="nvk-mail">E-Mail *</label><input id="nvk-mail" type="email" autocomplete="email"></div> | |||
<div class="nvk-f"><label for="nvk-vin">VIN (optional)</label><input id="nvk-vin" type="text" maxlength="17"></div> | |||
</div> | |||
<div class="nvk-f"><label for="nvk-msg">Kommentar *</label><textarea id="nvk-msg" rows="4"></textarea></div> | |||
<div class="nvk-f" style="max-width:300px"><label for="nvk-cap" id="nvk-capq">Sicherheitsfrage *</label><input id="nvk-cap" type="text" inputmode="numeric"></div> | |||
<input id="nvk-hp" type="text" tabindex="-1" autocomplete="off" aria-hidden="true" style="position:absolute;left:-9999px;width:1px"> | |||
<label class="nvk-o"><input type="checkbox" id="nvk-dsgvo"> Ich stimme zu, dass meine Angaben zur Bearbeitung der Anfrage per E-Mail verarbeitet werden. *</label> | |||
<button type="button" class="nvk-btn" id="nvk-send">Anfrage senden</button> | |||
<div id="nvk-status" class="nvk-note" style="display:none"></div> | |||
</fieldset> | |||
<noscript>Für den Konfigurator wird JavaScript benötigt.</noscript> | <noscript>Für den Konfigurator wird JavaScript benötigt.</noscript> | ||
<script> | <script> | ||
var SEND_URL = "https://xtrons.ibus-app.de/send-anfrage.php"; | |||
(function () { | (function () { | ||
"use strict"; | "use strict"; | ||
| Zeile 40: | Zeile 59: | ||
var SHOP = "https://shop.ibus-app.de/"; | var SHOP = "https://shop.ibus-app.de/"; | ||
var WIKI = "https://wiki.ibus-app.de/index.php?title="; | var WIKI = "https://wiki.ibus-app.de/index.php?title="; | ||
/* Bilder aus dem Wiki (Thumbnail-Adressen; Klick öffnet automatisch das Originalbild) */ | |||
var IM = "https://xtrons.ibus-app.de/images/thumb/"; | |||
var P = { | |||
schema: IM + "e/ea/BMW_E39_Verl%C3%A4ngerungen_EXL005%2BFAKRA_.png/135px-BMW_E39_Verl%C3%A4ngerungen_EXL005%2BFAKRA_.png", | |||
exl005: IM + "7/70/Exl005-1.webp/257px-Exl005-1.webp.png", | |||
fakra6m: IM + "d/d8/FM-extension_01_1.png/270px-FM-extension_01_1.png", | |||
isofakra: IM + "4/4e/ISO-FAKRA_1.png/270px-ISO-FAKRA_1.png", | |||
bm24: IM + "8/82/BM24.png/130px-BM24.png", | |||
iso: IM + "d/dd/Iso.jpg/69px-Iso.jpg", | |||
bm54: IM + "3/34/BM54.png/135px-BM54.png", | |||
fakra: IM + "b/b3/Fakra.jpg/100px-Fakra.jpg", | |||
pfeil: IM + "e/ee/Navi_E46.jpg/239px-Navi_E46.jpg", | |||
noquad: IM + "6/68/No_elongation.jpg/180px-No_elongation.jpg", | |||
noexl6: IM + "7/7b/No_EXL006.jpg/180px-No_EXL006.jpg", | |||
halter: IM + "3/3b/Halter_Alu.webp/92px-Halter_Alu.webp.png", | |||
funktr: IM + "7/7e/E46_Funktionstraeger.png/240px-E46_Funktionstraeger.png" | |||
}; | |||
/* Anfrage-Formular: MAIL_TO = Empfänger. SEND_URL leer = E-Mail-Programm des Kunden öffnen (mailto). | |||
SEND_URL = Adresse des Server-Skripts send-anfrage.php = Versand direkt vom Server (mit CC an den Kunden). */ | |||
var MAIL_TO = "info@ibus-app.de"; | |||
var MAIL_SUBJECT = "Anfrage aus Android Radio Konfigurator"; | |||
var SEND_URL = ""; | |||
/* ---- 1) Baureihen -------------------------------------------------------- | /* ---- 1) Baureihen -------------------------------------------------------- | ||
v = Shop-Kategorie (Link: SHOP + bmw-radios/ + v + /) | v = Shop-Kategorie (Link: SHOP + bmw-radios/ + v + /) | ||
| Zeile 72: | Zeile 113: | ||
{ v: "z4-e85e86", t: "Z4 E85/E86", gen: "b", body: "roadster,coupe" } | { v: "z4-e85e86", t: "Z4 E85/E86", gen: "b", body: "roadster,coupe" } | ||
]; | ]; | ||
var bodyValues = Object.keys(BODY).map(function (k) { | var bodyValues = Object.keys(BODY).map(function (k) { | ||
return { v: k, t: BODY[k], only: { vehicle: VEHICLES.filter(function (x) { return x.body.split(",").indexOf(k) !== -1; }).map(function (x) { return x.v; }) } }; | return { v: k, t: BODY[k], only: { vehicle: VEHICLES.filter(function (x) { return x.body.split(",").indexOf(k) !== -1; }).map(function (x) { return x.v; }) } }; | ||
| Zeile 84: | Zeile 122: | ||
{ id: "vehicle", label: "Fahrzeug", values: VEHICLES.map(function (x) { return { v: x.v, t: "BMW " + x.t }; }) }, | { id: "vehicle", label: "Fahrzeug", values: VEHICLES.map(function (x) { return { v: x.v, t: "BMW " + x.t }; }) }, | ||
{ id: "factory", label: "Verbaut ab Werk", values: [ | { id: "factory", label: "Verbaut ab Werk", values: [ | ||
{ v: "iris", t: "Radio mit IRIS", only: { | { v: "iris", t: "Radio mit IRIS", only: { vehicle: ["3er-e46", "5er-e39", "7er-e38", "x5-e53"] } }, | ||
{ v: "mid", t: "Radio mit MID", only: { gen: ["alt"] } }, | { v: "mid", t: "Radio mit MID", only: { gen: ["alt"] } }, | ||
{ v: "n43", t: "4:3 Navi", only: { vehicle: ["5er-e39", "7er-e38"] } }, | { v: "n43", t: "4:3 Navi", only: { vehicle: ["5er-e39", "7er-e38"] } }, | ||
| Zeile 94: | Zeile 132: | ||
{ v: "nbt", t: "NBT", only: { gen: ["c"] } }, | { v: "nbt", t: "NBT", only: { gen: ["c"] } }, | ||
{ v: "nbtevo", t: "NBT EVO", only: { gen: ["c"] } } ] }, | { v: "nbtevo", t: "NBT EVO", only: { gen: ["c"] } } ] }, | ||
{ id: "trunk", label: " | { id: "trunk", label: "Wo sitzt das Radiomodul des Pfeilnavis?", optional: true, show: { factory: ["pfeil"] }, | ||
{ v: "ja", t: " | help: "Bitte prüfen: Sitzt das Modul im Kofferraum, oder im Pfeilnavi selbst (Quadlock hinten neben dem Antennenstecker)?[br][img=" + P.pfeil + "]", | ||
{ v: "nein", t: " | values: [ | ||
{ v: "ja", t: "Im Kofferraum (Verlängerungen nötig)" }, | |||
{ v: "nein", t: "Im Pfeilnavi, Quadlock hinten (keine Verlängerung)" }, | |||
{ v: "unk", t: "Weiß ich nicht" } ] }, | { v: "unk", t: "Weiß ich nicht" } ] }, | ||
{ id: "aux", label: "AUX-IN verfügbar?", show: { gen: ["b", "c"] }, values: [ | { id: "aux", label: "AUX-IN verfügbar?", show: { gen: ["b", "c"] }, values: [ | ||
| Zeile 103: | Zeile 143: | ||
{ v: "stereo", t: "Stereo" }, | { v: "stereo", t: "Stereo" }, | ||
{ v: "hifi", t: "Hifi" }, | { v: "hifi", t: "Hifi" }, | ||
{ v: "dsp", t: "DSP", only: { vehicle: | { v: "dsp", t: "DSP", only: { vehicle: ["7er-e38", "5er-e39", "x5-e53", "x3-e83"] } }, | ||
{ v: "hk", t: "Harman Kardon", only: { vehicle: | { v: "hk", t: "Harman Kardon", only: { vehicle: ["3er-e46", "z4-e85e86"] } }, | ||
{ v: "logic7", t: "Logic7", only: { vehicle: ["3er-e9x", "5er-e6x", "6er-e6x", "7er-e65", "1er-e8x"] } }, | |||
{ v: "hksur", t: "Harman Kardon Surround", only: { vehicle: ["1er-f2x", "2er-f2x", "3er-f3x", "4er-f3x", "5er-f1x"] } } ] }, | |||
{ id: "current", label: "Aktuell verbaut", values: [ | { id: "current", label: "Aktuell verbaut", values: [ | ||
{ v: "werk", t: "Werksradio / Werksnavi" }, | { v: "werk", t: "Werksradio / Werksnavi" }, | ||
| Zeile 110: | Zeile 152: | ||
{ id: "body", label: "Karosserie", auto: true, values: bodyValues }, | { id: "body", label: "Karosserie", auto: true, values: bodyValues }, | ||
{ id: "ant", label: "Antennenstecker am Radio (optional)", optional: true, def: "unk", | { id: "ant", label: "Antennenstecker am Radio (optional)", optional: true, def: "unk", | ||
show: { vehicle: ["7er-e38", "5er-e39", "3er-e46", "x5-e53"] }, | |||
values: [ | values: [ | ||
{ v: "unk", t: "Weiß ich nicht" }, | { v: "unk", t: "Weiß ich nicht", info: "[b]BM24[/b] (Rundpin) = ISO-Antennenstecker:[br][img=" + P.bm24 + "][img=" + P.iso + "][br][b]BM54[/b] = FAKRA:[br][img=" + P.bm54 + "][img=" + P.fakra + "]" }, | ||
{ v: "iso", t: "ISO (BM24, Rundpin | { v: "iso", t: "ISO (BM24, Rundpin)", info: "[img=" + P.bm24 + "][img=" + P.iso + "]" }, | ||
{ v: "fakra", t: "FAKRA (BM54, | { v: "fakra", t: "FAKRA (BM54)", info: "[img=" + P.bm54 + "][img=" + P.fakra + "]" } ] } | ||
]; | ]; | ||
/* ---- 3) Zusatzoptionen (Mehrfachauswahl) --------------------------------- | /* ---- 3) Zusatzoptionen (Mehrfachauswahl) --------------------------------- | ||
| Zeile 139: | Zeile 181: | ||
skipIf = Artikel entfällt, wenn der genannte Artikel schon in der Liste steht */ | skipIf = Artikel entfällt, wenn der genannte Artikel schon in der Liste steht */ | ||
var ITEMS = { | var ITEMS = { | ||
exl005: { t: "Verlängerung EXL005", d: "Ersetzt das Radiomodul im Kofferraum.", u: SHOP + "detail/index/sArticle/212/" }, | exl005: { t: "Verlängerung EXL005", d: "Ersetzt das Radiomodul im Kofferraum.", u: SHOP + "detail/index/sArticle/212/", img: [P.exl005, P.schema] }, | ||
fakra6m: { t: "Verlängerung 6 m FAKRA(m) auf FAKRA(f), gewinkelt", d: "Antennenverlängerung vom Kofferraum nach vorn.", | fakra6m: { t: "Verlängerung 6 m FAKRA(m) auf FAKRA(f), gewinkelt", d: "Antennenverlängerung vom Kofferraum nach vorn.", img: [P.fakra6m], | ||
u: SHOP + "shop/zubehoer/adapterkabel/192/verlaengerung-6m-fakra-m-auf-fakra-f-kurz-gewinkelt" }, | u: SHOP + "shop/zubehoer/adapterkabel/192/verlaengerung-6m-fakra-m-auf-fakra-f-kurz-gewinkelt" }, | ||
isoada: { t: "Adapter ISO-Stecker auf FAKRA, gewinkelt (15 cm)", d: "Nötig bei ISO-Antennenstecker (BM24, Rundpin).", | isoada: { t: "Adapter ISO-Stecker auf FAKRA, gewinkelt (15 cm)", d: "Nötig bei ISO-Antennenstecker (BM24, Rundpin).", img: [P.isofakra], | ||
u: SHOP + "shop/zubehoer/adapterkabel/193/adapter-kabel-iso-f-auf-fakra-f-kurz-gewinkelt-15cm" }, | u: SHOP + "shop/zubehoer/adapterkabel/193/adapter-kabel-iso-f-auf-fakra-f-kurz-gewinkelt-15cm" }, | ||
bcdsp: { t: "I-BUS App - BC+DSP Lizenz", d: "Ohne DSP-Lizenz arbeitet das Werks-DSP nicht.", | bcdsp: { t: "I-BUS App - BC+DSP Lizenz", d: "Ohne DSP-Lizenz arbeitet das Werks-DSP nicht.", | ||
u: SHOP + "i-bus-app/lizenzen/171/i-bus-app-bc-dsp-lizenz" }, | u: SHOP + "i-bus-app/lizenzen/171/i-bus-app-bc-dsp-lizenz" }, | ||
halter: { t: "Alu-Halter zur Radio-Montage im BMW E39", d: "Empfohlen bei Radios, die nicht von AVIN stammen.", | halter: { t: "Alu-Halter zur Radio-Montage im BMW E39", d: "Empfohlen bei Radios, die nicht von AVIN stammen.", img: [P.halter], | ||
u: SHOP + "i-bus-app/zubehoer/radiohalter/185/alu-halter-zur-radio-montage-im-bmw-e39" }, | u: SHOP + "i-bus-app/zubehoer/radiohalter/185/alu-halter-zur-radio-montage-im-bmw-e39" }, | ||
ibus: { t: "I-BUS App", d: "Erhält die Bordcomputer-Funktionen und steuert z. B. den Original-CD-Wechsler.", | ibus: { t: "I-BUS App", d: "Erhält die Bordcomputer-Funktionen und steuert z. B. den Original-CD-Wechsler.", | ||
| Zeile 176: | Zeile 218: | ||
{ type: "need", when: { current: ["werk"], module: ["ja"] }, items: ["exl005", "fakra6m"] }, | { type: "need", when: { current: ["werk"], module: ["ja"] }, items: ["exl005", "fakra6m"] }, | ||
{ type: "hint", when: { current: ["nach"], module: ["ja"] }, | { type: "hint", when: { current: ["nach"], module: ["ja"] }, | ||
html: "[b]Verlängerungen prüfen:[/b] Bei einem bereits verbauten Nachrüst-Radio sollten EXL005 und FAKRA-Verlängerung schon vorhanden sein. [b]Ungeeignet[/b] sind die Standard-Quad-Lock-Verlängerung kombiniert mit Antennenverlängerung und die EXL006 (kein BUS-Signal)." }, | html: "[b]Verlängerungen prüfen:[/b] Bei einem bereits verbauten Nachrüst-Radio sollten EXL005 und FAKRA-Verlängerung schon vorhanden sein. [b]Ungeeignet[/b] sind die Standard-Quad-Lock-Verlängerung kombiniert mit Antennenverlängerung und die EXL006 (kein BUS-Signal).[br][img=" + P.noquad + "][img=" + P.noexl6 + "]" }, | ||
{ type: "hint", when: { module: ["ja"] }, | { type: "hint", when: { module: ["ja"] }, | ||
html: "[b]Kabelwege:[/b] Die Technik sitzt im Kofferraum. Mindestens Radioanschluss und FM-Antenne müssen nach vorn verlegt werden. Optional zusätzlich: GPS (OEM-Antenne), Verlängerung für DAB+, Anschluss OEM-CD-Wechsler, Cinch für Subwoofer." }, | html: "[b]Kabelwege:[/b] Die Technik sitzt im Kofferraum. Mindestens Radioanschluss und FM-Antenne müssen nach vorn verlegt werden. Optional zusätzlich: GPS (OEM-Antenne), Verlängerung für DAB+, Anschluss OEM-CD-Wechsler, Cinch für Subwoofer." }, | ||
| Zeile 182: | Zeile 224: | ||
html: "[b]Kabelwege:[/b] Alle Anschlüsse befinden sich direkt hinter dem Radio, es müssen [b]keine[/b] Kabel verlegt werden. Optional ggf. für: GPS (OEM-Antenne), DAB+, OEM-CD-Wechsler, Cinch für Subwoofer." }, | html: "[b]Kabelwege:[/b] Alle Anschlüsse befinden sich direkt hinter dem Radio, es müssen [b]keine[/b] Kabel verlegt werden. Optional ggf. für: GPS (OEM-Antenne), DAB+, OEM-CD-Wechsler, Cinch für Subwoofer." }, | ||
{ type: "hint", when: { module: ["unk"] }, | { type: "hint", when: { module: ["unk"] }, | ||
html: "[b]Bitte prüfen:[/b] Schau nach, ob im Kofferraum ein Radiomodul sitzt. | html: "[b]Bitte prüfen:[/b] Schau nach, ob im Kofferraum ein Radiomodul sitzt. Bei E46 mit Pfeilnavi gibt es zwei Varianten: Radiomodul im Kofferraum = EXL005 und FAKRA-Verlängerung nötig. Radiomodul im Pfeilnavi (Quadlock hinten neben dem Antennenstecker) = keine Verlängerung nötig." }, | ||
{ type: "need", when: { ant: ["iso"] }, items: ["isoada"] }, | { type: "need", when: { ant: ["iso"] }, items: ["isoada"] }, | ||
{ type: "hint", when: { ant: ["unk"] }, | { type: "hint", when: { ant: ["unk"] }, | ||
| Zeile 200: | Zeile 242: | ||
html: "[b]Montage E46 ohne großes Navi:[/b] Das Klimabedienteil muss nach unten versetzt werden. Dafür brauchst Du den passenden [b]Funktionsträger[/b] (neu ca. 100 €, ggf. beim Teileverwerter günstiger):[br]" + | html: "[b]Montage E46 ohne großes Navi:[/b] Das Klimabedienteil muss nach unten versetzt werden. Dafür brauchst Du den passenden [b]Funktionsträger[/b] (neu ca. 100 €, ggf. beim Teileverwerter günstiger):[br]" + | ||
"Einzelschalter (eher VFL): [a=https://www.leebmann24.de/trager-3er-51168202186.html]ohne Raucher 51168202186[/a] / [a=https://www.leebmann24.de/trager-3er-51168230902.html]mit Raucher 51168230902[/a][br]" + | "Einzelschalter (eher VFL): [a=https://www.leebmann24.de/trager-3er-51168202186.html]ohne Raucher 51168202186[/a] / [a=https://www.leebmann24.de/trager-3er-51168230902.html]mit Raucher 51168230902[/a][br]" + | ||
"Schaltzentrum (eher FL): [a=https://www.leebmann24.de/funktionstrager-schaltzentrum-3er-51167001408.html]ohne Raucher 51167001408[/a] / [a=https://www.leebmann24.de/funktionstrager-schaltzentrum-3er-51167001410.html]mit Raucher 51167001410[/a]" }, | "Schaltzentrum (eher FL): [a=https://www.leebmann24.de/funktionstrager-schaltzentrum-3er-51167001408.html]ohne Raucher 51167001408[/a] / [a=https://www.leebmann24.de/funktionstrager-schaltzentrum-3er-51167001410.html]mit Raucher 51167001410[/a][br][img=" + P.funktr + "]" }, | ||
{ type: "hint", when: { factory: ["cic", "nbt", "nbtevo"] }, | |||
html: "[b]Lichtleiter:[/b] Ggf. vorhandene Lichtleiter (MOST) müssen aus dem BMW-Stecker in den Xtrons-Adapter umgesteckt werden." }, | |||
{ type: "hint", when: { factory: ["mask", "ccc", "cic", "nbt", "nbtevo"] }, | |||
html: "[b]Originales Radiomodul bleibt erhalten:[/b] Bei M-ASK, CCC, CIC, NBT und NBT EVO bleibt das originale Radiomodul im Fahrzeug und muss funktionieren! Ersetzt wird nur der Bildschirm." }, | |||
{ type: "hint", opts: ["ibus"], when: {}, | { type: "hint", opts: ["ibus"], when: {}, | ||
html: "[b]I-BUS App:[/b] Siehe [a=https://wiki.ibus-app.de/index.php?title=Was_brauche_ich_um_die_I-BUS_App_nutzen_zu_k%C3%B6nnen%3F]Was brauche ich, um die I-BUS App nutzen zu können?[/a] und die [a=https://wiki.ibus-app.de/index.php?title=Hauptseite#Einbauanleitung_f.C3.BCr_Resler_Modul_und_Resler_Interface]Einbauanleitung für Resler Modul und Interface[/a]." }, | html: "[b]I-BUS App:[/b] Siehe [a=https://wiki.ibus-app.de/index.php?title=Was_brauche_ich_um_die_I-BUS_App_nutzen_zu_k%C3%B6nnen%3F]Was brauche ich, um die I-BUS App nutzen zu können?[/a] und die [a=https://wiki.ibus-app.de/index.php?title=Hauptseite#Einbauanleitung_f.C3.BCr_Resler_Modul_und_Resler_Interface]Einbauanleitung für Resler Modul und Interface[/a]." }, | ||
| Zeile 210: | Zeile 256: | ||
===================================================================== */ | ===================================================================== */ | ||
var $ = function (id) { return document.getElementById(id); }; | var $ = function (id) { return document.getElementById(id); }; | ||
var sel = {}, picked = {}; | var sel = {}, picked = {}, summary = "", capA = 0, capB = 0; | ||
var fieldsEl = $("nvk-fields"), optsEl = $("nvk-opts"), outEl = $("nvk-out"); | var fieldsEl = $("nvk-fields"), optsEl = $("nvk-opts"), outEl = $("nvk-out"); | ||
function full(u) { return u.indexOf("/thumb/") === -1 ? u : u.replace("/thumb/", "/").replace(/\/[^\/]+$/, ""); } | |||
function fmt(t) { | function fmt(t) { | ||
return t.replace(/\[b\]/g, "\u003Cb\u003E").replace(/\[\/b\]/g, "\u003C/b\u003E").replace(/\[br\]/g, "\u003Cbr\u003E") | return t.replace(/\[img=([^\x5D]+)\]/g, function (m, u) { | ||
return "\u003Ca href=\"" + full(u) + "\" target=\"_blank\" rel=\"noopener\"\u003E\u003Cimg class=\"nvk-img\" src=\"" + u + "\" alt=\"\"\u003E\u003C/a\u003E"; | |||
}).replace(/\[b\]/g, "\u003Cb\u003E").replace(/\[\/b\]/g, "\u003C/b\u003E").replace(/\[br\]/g, "\u003Cbr\u003E") | |||
.replace(/\[a=([^\x5D]+)\]/g, "\u003Ca href=\"$1\" target=\"_blank\" rel=\"noopener\"\u003E").replace(/\[\/a\]/g, "\u003C/a\u003E"); | .replace(/\[a=([^\x5D]+)\]/g, "\u003Ca href=\"$1\" target=\"_blank\" rel=\"noopener\"\u003E").replace(/\[\/a\]/g, "\u003C/a\u003E"); | ||
} | } | ||
| Zeile 258: | Zeile 307: | ||
s.addEventListener("change", function () { sel[f.id] = s.value; update(); }); | s.addEventListener("change", function () { sel[f.id] = s.value; update(); }); | ||
wrap.appendChild(lab); wrap.appendChild(s); | wrap.appendChild(lab); wrap.appendChild(s); | ||
if (f.help) { var h = document.createElement("div"); h.className = "nvk-help"; h. | if (f.help) { var h = document.createElement("div"); h.className = "nvk-help"; h.innerHTML = fmt(f.help); wrap.appendChild(h); } | ||
var inf = document.createElement("div"); inf.id = "nvk-i-" + f.id; wrap.appendChild(inf); | |||
fieldsEl.appendChild(wrap); | fieldsEl.appendChild(wrap); | ||
}); | }); | ||
| Zeile 278: | Zeile 328: | ||
}); | }); | ||
el.value = sel[f.id] || ""; | el.value = sel[f.id] || ""; | ||
var cur = allowed.filter(function (v) { return v.v === sel[f.id]; })[0]; | |||
$("nvk-i-" + f.id).innerHTML = cur ? (cur.info ? fmt(cur.info) : "") : ""; | |||
}); | }); | ||
} | } | ||
| Zeile 311: | Zeile 363: | ||
var b = document.createElement("b"); b.textContent = item.t; d.appendChild(b); | var b = document.createElement("b"); b.textContent = item.t; d.appendChild(b); | ||
if (item.d) { var p = document.createElement("span"); p.textContent = item.d; d.appendChild(p); } | if (item.d) { var p = document.createElement("span"); p.textContent = item.d; d.appendChild(p); } | ||
if (item.img) { | |||
var im = document.createElement("div"); | |||
item.img.forEach(function (u) { | |||
var a = document.createElement("a"); a.href = full(u); a.target = "_blank"; a.rel = "noopener"; | |||
var g = document.createElement("img"); g.className = "nvk-img"; g.src = u; g.alt = item.t; a.appendChild(g); im.appendChild(a); | |||
}); | |||
d.appendChild(im); | |||
} | |||
if (item.u || item.w) { | if (item.u || item.w) { | ||
var l = document.createElement("div"); l.className = "nvk-links"; | var l = document.createElement("div"); l.className = "nvk-links"; | ||
| Zeile 330: | Zeile 390: | ||
var m = document.createElement("p"); m.className = "nvk-miss"; | var m = document.createElement("p"); m.className = "nvk-miss"; | ||
m.textContent = "Bitte noch auswählen: " + missing.map(function (f) { return f.label; }).join(", "); | m.textContent = "Bitte noch auswählen: " + missing.map(function (f) { return f.label; }).join(", "); | ||
outEl.appendChild(m); return; | outEl.appendChild(m); $("nvk-form").style.display = "none"; return; | ||
} | } | ||
$("nvk-form").style.display = ""; | |||
var needs = [], hints = [], seen = {}; | var needs = [], hints = [], seen = {}; | ||
RULES.forEach(function (r) { | RULES.forEach(function (r) { | ||
| Zeile 362: | Zeile 423: | ||
outEl.appendChild(card({ t: "BMW Radios für " + veh.t, d: "Alle Radios, die für Deinen BMW " + veh.t + " im Shop erhältlich sind.", | outEl.appendChild(card({ t: "BMW Radios für " + veh.t, d: "Alle Radios, die für Deinen BMW " + veh.t + " im Shop erhältlich sind.", | ||
u: SHOP + "bmw-radios/" + veh.v + "/", ut: "Zu den passenden Radios →", w: SHOP + "bmw-radios/", wt: "Alle BMW Radios" }, "rad")); | u: SHOP + "bmw-radios/" + veh.v + "/", ut: "Zu den passenden Radios →", w: SHOP + "bmw-radios/", wt: "Alle BMW Radios" }, "rad")); | ||
var L = ["KONFIGURATION"]; | |||
FIELDS.forEach(function (f) { | |||
if (!sel[f.id]) return; | |||
var v = f.values.filter(function (x) { return x.v === sel[f.id]; })[0]; | |||
if (v) L.push("- " + f.label + ": " + v.t); | |||
}); | |||
L.push("", "BENÖTIGT"); | |||
needs.forEach(function (i) { L.push("- " + i.t + (i.u ? " " + i.u : "")); }); | |||
if (opt.length) { L.push("", "ZUSATZOPTIONEN"); opt.forEach(function (i) { L.push("- " + i.t + (i.u ? " " + i.u : "")); }); } | |||
L.push("", "Radios: " + SHOP + "bmw-radios/" + veh.v + "/"); | |||
summary = L.join("\n"); | |||
} | } | ||
function update() { renderFields(); renderOpts(); renderResult(); } | function update() { renderFields(); renderOpts(); renderResult(); } | ||
function newCaptcha() { | |||
capA = 1 + Math.floor(Math.random() * 9); capB = 1 + Math.floor(Math.random() * 9); | |||
$("nvk-capq").textContent = "Sicherheitsfrage: Was ist " + capA + " + " + capB + "? *"; $("nvk-cap").value = ""; | |||
} | |||
function status(msg, ok) { var e = $("nvk-status"); e.style.display = ""; e.textContent = msg; e.style.borderLeftColor = ok ? "#14866d" : "#d33"; } | |||
$("nvk-send").addEventListener("click", function () { | |||
var name = $("nvk-name").value.trim(), mail = $("nvk-mail").value.trim(), vin = $("nvk-vin").value.trim(), msg = $("nvk-msg").value.trim(); | |||
if (!name || !mail || !msg) return status("Bitte Name, E-Mail und Kommentar ausfüllen.", false); | |||
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mail)) return status("Bitte eine gültige E-Mail-Adresse eingeben.", false); | |||
if (vin) { if (!/^[A-HJ-NPR-Za-hj-npr-z0-9]{17}$/.test(vin)) return status("Die VIN muss 17 Zeichen haben (ohne I, O, Q) - oder das Feld leer lassen.", false); } | |||
if (parseInt($("nvk-cap").value, 10) !== capA + capB) return status("Die Sicherheitsfrage wurde nicht richtig beantwortet.", false); | |||
if (!$("nvk-dsgvo").checked) return status("Bitte der Verarbeitung Deiner Daten zustimmen.", false); | |||
if ($("nvk-hp").value) return; | |||
var text = "Name: " + name + "\nE-Mail: " + mail + "\nVIN: " + (vin || "-") + "\n\nKommentar:\n" + msg + "\n\n" + summary; | |||
if (SEND_URL) { | |||
var p = new URLSearchParams(); | |||
p.append("name", name); p.append("mail", mail); p.append("vin", vin); p.append("msg", msg); p.append("summary", summary); | |||
p.append("hp", $("nvk-hp").value); p.append("ca", capA); p.append("cb", capB); p.append("cv", $("nvk-cap").value); | |||
fetch(SEND_URL, { method: "POST", body: p }).then(function (r) { | |||
if (!r.ok) throw new Error("send"); | |||
status("Danke! Deine Anfrage wurde gesendet, eine Kopie geht an " + mail + ".", true); newCaptcha(); | |||
}).catch(function () { status("Das Senden hat nicht geklappt. Bitte versuche es später noch einmal oder schreibe direkt an " + MAIL_TO + ".", false); }); | |||
} else { | |||
var AMP = "\u0026"; | |||
window.location.href = "mailto:" + MAIL_TO + "?cc=" + encodeURIComponent(mail) + AMP + "subject=" + encodeURIComponent(MAIL_SUBJECT) + AMP + "body=" + encodeURIComponent(text); | |||
status("Dein E-Mail-Programm wurde mit der fertigen Anfrage geöffnet. Bitte dort noch auf Senden klicken.", true); | |||
} | |||
}); | |||
$("nvk-reset").addEventListener("click", function () { sel = {}; picked = {}; update(); }); | $("nvk-reset").addEventListener("click", function () { sel = {}; picked = {}; update(); }); | ||
newCaptcha(); | |||
update(); | update(); | ||
})(); | })(); | ||