BlechProfis

Divikom, s.r.o. is committed to keeping this website up to date and accurate. Should you nevertheless encounter anything that is incorrect or out of date, we would appreciate it if you could let us know. Please indicate where on the website you read the information. We will then look at this as soon as possible. Please send your response by email to: info@ex.comblechprofis.eu.

We are not liable for loss as a result of inaccuracies or incompleteness, nor for loss resulting from problems caused by or inherent to the dissemination of information through the internet, such as disruptions or interruptions. When using web forms, we strive to limit the number of required fields to a minimum. For any loss suffered as a result of the use of data, advice or ideas provided by or on behalf of Divikom, s.r.o. via this website, Divikom, s.r.o. accepts no liability.

Responses and privacy inquiries submitted by email or using a web form will be treated in the same way as letters. This means that you can expect a response from us within a period of 1 month at the latest. In the case of complex requests, we will let you know within 1 month if we need a maximum of 3 months.

Any personal data you provide us with in the context of your response or request for information will only be used in accordance with our privacy statement.

Divikom, s.r.o. shall make every reasonable effort to protect its systems against any form of unlawful use. Divikom, s.r.o. shall implement appropriate technical and organisational measures to this end, taking into account, among other things, the state of the art. However, it shall not be liable for any loss whatsoever, direct and/or indirect, suffered by a user of the website, which arises as a result of the unlawful use of its systems by a third party.

Divikom, s.r.o. accepts no responsibility for the content of websites to which or from which a hyperlink or other reference is made. Products or services offered by third parties shall be subject to the applicable terms and conditions of those third parties.

All intellectual property rights to content on this website are vested in Divikom, s.r.o. or in third parties who have placed the content themselves or from whom Divikom, s.r.o. has obtained a user licence.

Copying, disseminating and any other use of these materials is not permitted without the written permission of Divikom, s.r.o., except and only insofar as otherwise stipulated in regulations of mandatory law (such as the right to quote), unless specific content dictates otherwise.

If you have any questions or problems with the accessibility of the website, please do not hesitate to contact us.

// Blechprofis.eu - JavaScript(function() { 'use strict';// Navigation const hamburger = document.getElementById('hamburger'); const navMenu = document.getElementById('navMenu'); if (hamburger && navMenu) { hamburger.addEventListener('click', function() { hamburger.classList.toggle('active'); navMenu.classList.toggle('active'); }); const navLinks = navMenu.querySelectorAll('a'); navLinks.forEach(link => { link.addEventListener('click', function() { hamburger.classList.remove('active'); navMenu.classList.remove('active'); }); }); } // Smooth Scroll document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { e.preventDefault(); const targetId = this.getAttribute('href'); if (targetId === '#') return; const targetElement = document.querySelector(targetId); if (targetElement) { const navbarHeight = 70; const targetPosition = targetElement.offsetTop - navbarHeight; window.scrollTo({ top: targetPosition, behavior: 'smooth' }); } }); }); // Scroll Animations const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver(function(entries) { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); } }); }, observerOptions); const animatedElements = document.querySelectorAll('.fade-in-up'); animatedElements.forEach(el => observer.observe(el)); // Product Card Effects const productCards = document.querySelectorAll('.product-card, .feature-card'); productCards.forEach(card => { card.addEventListener('mousemove', function(e) { const rect = card.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const centerX = rect.width / 2; const centerY = rect.height / 2; const rotateX = (y - centerY) / 10; const rotateY = (centerX - x) / 10; card.style.transform = `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateY(-5px)`; }); card.addEventListener('mouseleave', function() { card.style.transform = 'perspective(1000px) rotateX(0) rotateY(0) translateY(0)'; }); }); // Back to Top Button const backToTopBtn = document.createElement('button'); backToTopBtn.innerHTML = ''; backToTopBtn.className = 'back-to-top'; backToTopBtn.setAttribute('aria-label', 'Up'); document.body.appendChild(backToTopBtn); const backToTopStyle = document.createElement('style'); backToTopStyle.textContent = ` .back-to-top { position: fixed; bottom: 30px; right: 30px; width: 50px; height: 50px; background: linear-gradient(135deg, #FF8C42, #D97941); colour: white; border: none; border-radius: 50%; font-size: 1.2rem; cursor: pointer; opacity: 0; visibility: hidden; transition: all 0.3s ease; box-shadow: 0 4px 12px rgba(255, 140, 66, 0.3); z-index: 999; } .back-to-top.show { opacity: 1; visibility: visible; } .back-to-top:hover { transform: translateY(-5px); box-shadow: 0 6px 16px rgba(255, 140, 66, 0.4); } `; document.head.appendChild(backToTopStyle); window.addEventListener('scroll', function() { if (window.pageYOffset > 500) { backToTopBtn.classList.add('show'); } else { backToTopBtn.classList.remove('show'); } }); backToTopBtn.addEventListener('click', function() { window.scrollTo({ top: 0, behaviour: 'smooth' }); }); // Contactní formulář - validace a odeslání const contactForm = document.getElementById('contact-form'); const formMessage = document.getElementById('form-message'); // File Upload function const fileInput = document.getElementById('attachment'); const fileList = document.getElementById('file-list'); let uploadedFiles = []; const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB const ALLOWED_TYPES = [ 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'image/jpeg', 'image/jpg', 'image/png', 'application/zip', 'application/x-zip-compressed' ]; if (fileInput) { fileInput.addEventListener('change', function(e) { handleFiles(e.target.files); }); // Drag & Drop const fileUploadDisplay = document.querySelector('.file-upload-display'); ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { fileUploadDisplay.addEventListener(eventName, preventDefaults, false); }); function preventDefaults(e) { e.preventDefault(); e.stopPropagation(); } ['dragenter', 'dragover'].forEach(eventName => { fileUploadDisplay.addEventListener(eventName, function() { fileUploadDisplay.style.borderColor = 'var(--accent-color)'; fileUploadDisplay.style.background = 'white'; }); }); ['dragleave', 'drop'].forEach(eventName => { fileUploadDisplay.addEventListener(eventName, function() { fileUploadDisplay.style.borderColor = '#e2e8f0'; fileUploadDisplay.style.background = '#f8f9fa'; }); }); fileUploadDisplay.addEventListener('drop', function(e) { const dt = e.dataTransfer; const files = dt.files; handleFiles(files); }); } function handleFiles(files) { const fileArray = Array.from(files); fileArray.forEach(file => { // Validace typu souboru if (!ALLOWED_TYPES.includes(file.type)) { showFileError(`Nepodporovaný typ souboru: ${file.name}`); return; } // Validace velikosti if (file.size > MAX_FILE_SIZE) { showFileError(`Soubor ${file.name} je příliš velký (max. 10 MB)`); return; } // Přidání souboru uploadedFiles.push(file); displayFile(file); }); } function displayFile(file) { const fileItem = document.createElement('div'); fileItem.className = 'file-item'; const fileIcon = getFileIcon(file.type); const fileSize = formatFileSize(file.size); fileItem.innerHTML = `
${file.name} ${fileSize}
`; fileList.appendChild(fileItem); // Remove handler fileItem.querySelector('.file-remove').addEventListener('click', function() { removeFile(file.name); fileItem.remove(); }); } function removeFile(filename) { uploadedFiles = uploadedFiles.filter(f => f.name !== filename); } function getFileIcon(type) { if (type.includes('pdf')) return 'fa-file-pdf'; if (type.includes('word') || type.includes('document')) return 'fa-file-word'; if (type.includes('image')) return 'fa-file-image'; if (type.includes('zip')) return 'fa-file-archive'; return 'fa-file'; } function formatFileSize(bytes) { if (bytes === 0) return '0 Bytes'; const k = 1024; const sizes = ['Bytes', 'KB', 'MB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]; } function showFileError(message) { const errorDiv = document.createElement('div'); errorDiv.className = 'file-error'; errorDiv.innerHTML = ` ${message}`; fileList.appendChild(errorDiv); setTimeout(function() { errorDiv.remove(); }, 5000); } if (contactForm) { contactForm.addEventListener('submit', function(e) { e.preventDefault(); // Získání dat z formuláře const formData = new FormData(contactForm); // Přidání nahraných souborů uploadedFiles.forEach(file => { formData.append('files[]', file); }); // Zobrazení loading stavu const submitBtn = contactForm.querySelector('.form-submit'); const originalText = submitBtn.innerHTML; submitBtn.innerHTML = ' Will be sent...'; submitBtn.disabled = true; // Simulace odeslání (v produkci nahradit AJAX požadavkem) setTimeout(function() { // Úspěch formMessage.className = 'form-message success'; const filesCount = uploadedFiles.length; const filesText = filesCount > 0 ? ` (${filesCount} file${filesCount > 1 ? 'en' : ''} appended)` : ''; formMessage.textContent = `Thank you for your enquiry${filesText}! We will contact you as soon as possible; contactForm.reset(); // Vyčištění seznamu souborů uploadedFiles = []; fileList.innerHTML = ''; // Reset tlačítka submitBtn.innerHTML = originalText; submitBtn.disabled = false; // Scroll k potvrzení formMessage.scrollIntoView({ behaviour: 'smooth', block: 'centre' }); // Skrytí zprávy po 8 sekundách setTimeout(function() { formMessage.className = 'form-message'; formMessage.textContent = ''; }, 8000); }, 1500); /* // PRO PRODUKCI - AJAX odeslání do WordPressu: fetch('/wp-admin/admin-ajax.php', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { formMessage.className = 'form-message success'; formMessage.textContent = data.message || 'Thank you for your enquiry! contactForm.reset(); uploadedFiles = []; fileList.innerHTML = ''; } else { formMessage.className = 'form-message error'; formMessage.textContent = data.message || 'An error has occurred. Please try again.'; } submitBtn.innerHTML = originalText; submitBtn.disabled = false; formMessage.scrollIntoView({ behaviour: 'smooth', block: 'centre' }); }) .catch(error => { console.error('Chyba při odeslání formuláře:', error); formMessage.className = 'form-message error'; formMessage.textContent = 'An error has occurred. Please try again'; submitBtn.innerHTML = originalText; submitBtn.disabled = false; }); */ }); // Real-time validace polí const requiredFields = contactForm.querySelectorAll('[required]'); requiredFields.forEach(field => { field.addEventListener('blur', function() { if (!field.value.trim()) { field.style.borderColor = '#dc3545'; } else { field.style.borderColor = '#48bb78'; } }); field.addEventListener('input', function() { if (field.value.trim()) { field.style.borderColor = '#48bb78'; } }); }); } console.log('%c⚙️ Blechprofis.eu', 'font-size: 20px; font-weight: bold; colour: #1a5490;'); console.log('ortenstahl für Profis', 'font-size: 14px; colour: #D97941;'); })();