Revision 949 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed
<div class="adressdaten"><!-- PayPalCheckout Rückgabe Rechnungskauf BEGIN -->{if $smarty.session.SHOP.paypalCheckout.return.error===true && $smarty.get.ratepay_error==true}<div><div>Fehler beim Rechnungskauf. {$langstrings.PayPalCheckout.rechnungskauf_error_add}</div><div>{$smarty.session.SHOP.paypalCheckout.return.msg}</div></div>{/if}<!-- PayPalCheckout Rückgabe Rechnungskauf END -->{if $smarty.get.anfrage!=1 && $smarty.get.mode != "register"}<h4> {$langstrings.buy.billing_address}</h4>{/if}<p>Bitte tragen Sie Ihre Adressdaten ein. Mit einem * gekennzeichnete Felder sind Pflichtfelder.</p><div>{html_options name="Persdata[Anrede]" options=$anreden selected=$smarty.session.SHOP.buy.Persdata.Anrede}<span class="input_error_msg">Pflichtfeld</span></div><div class="addr_100"><div class="addr_50"><div class="placeholder">{$langstrings.buy.firstname} *</div><input type="text" name="Persdata[Vorname]" class="text" value="{$old.Persdata.Vorname|default:$smarty.session.SHOP.buy.Persdata.Vorname}" maxlength="255" autocomplete="given-name" required><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[Vorname]" value="persdata"></div><div class="addr_50"><div class="placeholder">{$langstrings.buy.name} *</div><input name="Persdata[Nachname]" type="text" class="persdata" value="{$old.Persdata.Nachname|default:$smarty.session.SHOP.buy.Persdata.Nachname}" maxlength="255" autocomplete="family-name" required><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[Nachname]" value="persdata"></div></div><div><div class="placeholder">{$langstrings.buy.company}</div><input type="text" name="Persdata[Firma]" class="text" value="{$old.Persdata.Firma|default:$smarty.session.SHOP.buy.Persdata.Firma}" maxlength="255"></div><div class="addr_100"><div class="addr_50"><div class="placeholder">{$langstrings.buy.street} *</div><input type="text" name="Persdata[Strasse]" class="text" value="{$old.Persdata.Strasse|default:$smarty.session.SHOP.buy.Persdata.Strasse}" maxlength="31" autocomplete="street-address" required><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[Strasse]" value="persdata"></div><div class="addr_50"><div class="placeholder">Hausnummer *</div><input type="text" name="Persdata[Hausnummer]" class="text" value="{$old.Persdata.Hausnummer|default:$smarty.session.SHOP.buy.Persdata.Hausnummer}" maxlength="255" required /><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[Hausnummer]" value="persdata"></div></div><div class="addr_100"><div class="addr_50"><div class="placeholder">{$langstrings.buy.postalcode} *</div><input type="text" name="Persdata[PLZ]" id="plz" class="text" value="{$old.Persdata.PLZ|default:$smarty.session.SHOP.buy.Persdata.PLZ}" maxlength="20" autocomplete="postal-code" required /><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[PLZ]" value="persdata"></div><div class="addr_50"><div class="placeholder">{$langstrings.buy.city} *</div><input type="text" name="Persdata[Ort]" id="ort" class="text" value="{$old.Persdata.Ort|default:$smarty.session.SHOP.buy.Persdata.Ort}" maxlength="255" autocomplete="address-level2" required /><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[Ort]" value="persdata"></div></div><div>{html_options options=$Laender id="Land" name="Persdata[Land]" selected=$old.Persdata.Land|default:$smarty.session.SHOP.buy.Persdata.Land|default:$defaultLandID}<span class="input_error_msg">Pflichtfeld</span></div><div><div class="placeholder">{$langstrings.buy.e_mail} *</div><input type="email" name="Persdata[email]" class="text" value="{$old.Persdata.email|default:$smarty.session.SHOP.buy.Persdata.email}" autocomplete="email" required><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[email]" value="mail"></div><div><div class="placeholder">{$langstrings.buy.phone} *</div><input type="text" name="Persdata[Telefon]" class="text" value="{$old.Persdata.Telefon|default:$smarty.session.SHOP.buy.Persdata.Telefon}" maxlength="31" autocomplete="tel" required><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="Persdata[ID]" value="{$smarty.session.SHOP.buy.Persdata.ID}"><input type="hidden" name="req[Telefon]" value="persdata"></div><div><div id="ustidnr_text">{$langstrings.buy.ustidnr_text|nl2br}</div><div id="ustidnr_input" style="display:none;"><div class="placeholder">{$langstrings.buy.ustidnr}</div><input type="text" name="Persdata[UStIdNr]" class="text" value="{$smarty.session.SHOP.buy.Persdata.UStIdNr}" maxlength="31"></div></div>{if $ini.finanzierung.aktiv==1}<div><div class="placeholder"> {$langstrings.buy.birthday}</div>{html_select_date field_array="Persdata[bday]" start_year=1900 end_year="-18" field_order="DMY" day_empty="Tag" month_empty="Monat" year_empty="Jahr" time=$smarty.session.SHOP.buy.Persdata.birthday day_value_format="%02d"}{if $versandInfo.versandart=="finanzierung"}<span class="input_error_msg">Pflichtfeld</span>{/if}{if $versandInfo.versandart=="finanzierung"}<input type="hidden" name="req[birthday]" value="date">{/if}{$langstrings.buy.birthday_explain}</div>{/if}<div id="AGBCheckboxWrapper" class="{if $old.AGB||$smarty.session.AGB=="gelesen"}checked{else}unchecked{/if}"><div class="checkbox"><input id="AGB" type="checkbox" class="checkbox" name="AGB" value="gelesen" {if $old.AGB||$smarty.session.AGB=="gelesen"}checked="checked"{/if} required="required"><span class="input_error_msg">Pflichtfeld</span><input type="hidden" name="req[AGB]" value="text"><label for="AGB"> Ich akzeptiere die <a style="font-weight:bold;" href="/cms/agb" target="_blank">AGB.</a></label></div></div></div><style>#AGBCheckboxWrapper {display: flex;flex-direction: row;gap: 0.5%;padding: 2%;width: fit-content;border-radius:5px;}#AGBCheckboxWrapper > .checkbox {display: flex;flex-direction: row;align-items: center;justify-content: flex-start;gap:8px;}#AGBCheckboxWrapper .checkbox span.input_error_msg {margin-top: 0;padding: 0;}#AGBCheckboxWrapper label {min-width: max-content;}.unchecked {transition:all 200ms ease;background:rgba(226,6,50,.3);}.checked {transition:all 200ms ease;background:rgba(33,143,61,.3);}</style><script>document.addEventListener('DOMContentLoaded', () => {// AGB toggleconst checkboxEl = document.querySelector('#AGB');const wrapperEl = document.querySelector('#AGBCheckboxWrapper');checkboxEl.addEventListener('change', () => {wrapperEl.className = (checkboxEl.checked) ? 'checked' : 'unchecked';});wrapperEl.addEventListener('click', (e) => {const tag = e.target.nodeName.toLowerCase();if(tag !== 'a' && tag !== 'input' && tag !== 'label') {checkboxEl.checked = !checkboxEl.checked;wrapperEl.className = (checkboxEl.checked) ? 'checked' : 'unchecked';}});// Requiredconst inputElements = document.querySelectorAll('input');for(const inputElement of inputElements) {const required = (inputElement.required);const errorMsg = inputElement.parentElement.querySelector('.input_error_msg');if(!errorMsg || inputElement.id === 'AGB' || inputElement.type === 'hidden') {continue;}if(inputElement.value.length > 0 || required === false) {errorMsg.style.opacity = '0';}if(required && (inputElement.value.length === 0 || inputElement.autocomplete === 'email')) {let valid = false;if(inputElement.autocomplete === 'email') {valid = validateEmail(inputElement.value);}// inputElement.style.outline = (valid) ? 'unset' : 'red dashed 1px';errorMsg.style.opacity = (valid) ? '0' : '1';}if(required) {inputElement.addEventListener('blur', (e) => {let valid = false;const inputElement = e.target;const errorMsg = e.target.parentElement.querySelector('.input_error_msg');switch (inputElement.autocomplete) {case 'email':valid = validateEmail(inputElement.value);break;default:valid = (inputElement.value.length > 0);break;}inputElement.style.outline = (valid) ? 'unset' : 'red dashed 1px';errorMsg.style.opacity = (valid) ? '0' : '1';});}}});function validateEmail(email) {{literal}const emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;{/literal}return email.match(emailRegex);}$( document ).ready(function() {{* // toggle checked status (CSS)$('#AGB').click( function() {var chk = $(this).parent().parent();let classname = chk.attr("class");if(classname=="checked") {chk.attr("class",'unchecked');}else {chk.attr("class",'checked');}}); *}let marginInputFields;$('#Land, #liefer_Land').change(function(){let land=$('#Land').val();if($('#Lieferadresse_f').prop("checked")==false){land=$('#liefer_Land').val();}let c_url="/update_versand?Land="+land+"&liefer=1";console.log(c_url);$.get(c_url,function(pppVersand){$('#Versand').val(pppVersand);});})$('#Land').change();$( "#ustidnr_input" ).hide();$( "#ustidnr_text" ).hide();$('#Land').change(function(){let selected_country = $( "#Land" ).val();if (selected_country == 47) {$( "#ustidnr_input" ).hide();$( "#ustidnr_text" ).hide();} else {$( "#ustidnr_text" ).show();$( "#ustidnr_input" ).show();}});// placeholder anim$('.placeholder').click(function() {$(this).next().focus();});$('.adressdaten input[type=text], .adressdaten input[type=email], .adressdaten textarea').each(function() {let inpt = $(this).val();if (inpt.length > 0 && textAnimationData2D($(this)[0])) {const { placeholder: { rawHeight } } = textAnimationData2D($(this)[0]);$(this).prev().css({"margin-left": "0px","margin-top": -rawHeight + "px","color": "#000",});}});$('.adressdaten input[type=text], .adressdaten input[type=email], .adressdaten textarea').focus(function(){let inpt = $(this).val();if(inpt.length == 0 && textAnimationData2D($(this)[0])) {const { placeholder: { rawHeight } } = textAnimationData2D($(this)[0]);$(this).prev().css({"margin-left": "0px","margin-top": -rawHeight + "px","color": "#000",});}});$('.adressdaten input[type=text], .adressdaten input[type=email]').blur(function(){let inpt = $(this).val();if(inpt.length == 0 && textAnimationData2D($(this)[0])) {const { input:{ height: heightInput }, placeholder:{ height: heightPlaceholder } } = textAnimationData2D($(this)[0]);const margin = (heightInput - heightPlaceholder) / 2;$(this).prev().css({"margin-left": margin / 2 + "px","margin-top": margin + "px","color":"#8E8E8E",});marginInputFields = margin;}});{*INFO: Es kommt zu einem Problem mit der Animationwenn vorher kein anderes Feld mit der Animation angesprochen wird da marginInputFields sonst leer ist.Die Rückkehr animation funktioniert dann schlich nicht .*}$('.adressdaten textarea').blur(function(){let inpt = $(this).val();if(inpt.length == 0 && textAnimationData2D($(this)[0])) {const { input:{ height: heightInput }, placeholder:{ height: heightPlaceholder } } = textAnimationData2D($(this)[0]);$(this).prev().css({"margin-left": marginInputFields / 2 + "px","margin-top": marginInputFields + "px","color":"#8E8E8E",});}});function textAnimationData2D(inputElement, textSelector = '.placeholder') {if(!inputElement || !isDOM(inputElement)) return;const placeholder = inputElement.parentElement.querySelector(textSelector);if(!placeholder || !isDOM(placeholder)) return;const { height: inputHeight } = getElement2DData(inputElement);const { height: placeholderHeight, rawHeight: placeholderRawHeight } = getElement2DData(placeholder);return {input: {height: inputHeight,},placeholder: {height: placeholderHeight,rawHeight: placeholderRawHeight,ref: placeholder,},}}function getElement2DData(element) {if(!isDOM(element)) return;const style = getComputedStyle(element);const paddingX = parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);const paddingY = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);const borderX = parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);const borderY = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);return {height: element.offsetHeight,width: element.offsetWidth,paddingX: paddingX,paddingY: paddingY,paddingLeft: parseFloat(style.paddingLeft),paddingRight: parseFloat(style.paddingRight),paddingTop: parseFloat(style.paddingTop),paddingBottom: parseFloat(style.paddingBottom),borderX: borderX,borderY: borderY,borderLeft: parseFloat(style.borderLeftWidth),borderRight: parseFloat(style.borderRightWidth),borderTop: parseFloat(style.borderTopWidth),borderBottom: parseFloat(style.borderBottomWidth),rawHeight: element.offsetHeight - paddingY - borderY,rawWidth: element.offsetWidth - paddingX - borderX,ref: {target: element,parent: element.parentElement}}}function isDOM(Obj) {return Obj instanceof Element;}});</script>