Discover our Starter Plan | Annual
Selected Safety Scenarios
Select up to 3 targeted Safety Scenarios, accommodating up to 10 users, to streamline your site’s security measures.
Cloud-Based Convenience
Take advantage of cloud-based SaaS model, providing a flexible and scalable safety management system that easily adapts to your operational requirements.
Real-Time Processing
Benefit from real-time data processing and process data as events unfold, ensuring the swift identification of and reaction to any safety concerns.
Tailored AI Solutions
Our AI systems are fine-tuned to meet the exact requirements of your work environment, delivering customized solutions for your operational demand
Optimized Usage and Storage
Each camera comes with 300 hours of operational usage and 10GB of storage, balancing performance with data management for your peace of mind.
jQuery(document).ready(function($) {
function attachEmailValidation() {
var emailInput = document.querySelector('input[name="email-1"]');
if (emailInput) {
function validateEmail() {
var emailValue = emailInput.value;
var emailDomain = emailValue.split('@')[1] || ''; // Handle case with no '@'
// Check if the domain is gmail.com
if (emailDomain === 'gmail.com') {
var errorSpan = document.getElementById('email-error');
if (!errorSpan) {
// Create the error span
errorSpan = document.createElement('span');
errorSpan.id = 'email-error';
errorSpan.style.color = 'red';
errorSpan.style.display = 'inline';
errorSpan.textContent = 'Gmail addresses are not allowed.';
emailInput.parentNode.appendChild(errorSpan);
}
emailInput.setCustomValidity('Gmail addresses are not allowed.');
} else {
// Remove the error span if it exists
var errorSpan = document.getElementById('email-error');
if (errorSpan) {
errorSpan.remove();
}
emailInput.setCustomValidity('');
}
}
// Attach event listener for keyup events
emailInput.addEventListener('keyup', validateEmail);
} else {
console.error('Email input field not found');
}
}
function onElementorFrontendInit() {
// Add event listener to detect step changes when next button is clicked
var nextButtons = document.querySelectorAll('.forminator-button-next');
nextButtons.forEach(function(button) {
button.addEventListener('click', function() {
console.log('click');
setTimeout(attachEmailValidation, 500); // Delay to allow the DOM to update
});
});
// Initial call in case the email field is already present
attachEmailValidation();
}
// Use Elementor's frontend hook to ensure scripts run at the right time
$(window).on('elementor/frontend/init', onElementorFrontendInit);
});