document.addEventListener('DOMContentLoaded', function() { // ---------- LOGIN ---------- let loginBtn = document.getElementById('button_login'); if ( loginBtn ){ loginBtn.addEventListener('click', function(e){ e.preventDefault(); let email = ( document.getElementById('input_login-email').value || '' ).trim(); let password = ( document.getElementById('input_login-password').value || '' ).trim(); if (!email || !password) { showMessage("Skriv inn e-post og passord.", "warning"); return; } ajaxCall(root_url + '/api/v1/auth/login', 'POST', JSON.stringify({email:email, password:password}), function(data){ if (data.status && data.status.code === 200) { window.location.href = '/overview'; } else { showMessage("Feil e-post eller passord.", "alert"); } }); }); } let loginForm = document.getElementById('form_login'); if ( loginForm ){ loginForm.addEventListener('keypress', function(e){ if ( e.which === 13 || e.key === 'Enter' ){ if ( loginBtn ) loginBtn.click(); } }); } // ---------- REGISTER ---------- let registerBtn = document.getElementById('button_register'); if ( registerBtn ){ registerBtn.addEventListener('click', function(e){ e.preventDefault(); let firstName = ( document.getElementById('input_register-firstname').value || '' ).trim(); let lastName = ( document.getElementById('input_register-lastname').value || '' ).trim(); let email = ( document.getElementById('input_register-email').value || '' ).trim(); let password = document.getElementById('input_register-password').value || ''; if (!email || password.length < 8) { showMessage("Skriv inn e-post og passord (minst 8 tegn).", "warning"); return; } let payload = JSON.stringify({email:email, password:password, firstName:firstName, lastName:lastName}); ajaxCall(root_url + '/api/v1/auth/register', 'POST', payload, function(data, status){ if (data.status && data.status.code === 200) { showMessage("Konto opprettet.", "info"); setTimeout(function(){ window.location.href = '/overview'; }, 500); } else { showMessage((data.status && data.status.message) || "Kunne ikke opprette konto.", "alert"); } }); }); } let registerForm = document.getElementById('form_register'); if ( registerForm ){ registerForm.addEventListener('keypress', function(e){ if ( e.which === 13 || e.key === 'Enter' ){ if ( registerBtn ) registerBtn.click(); } }); } // ---------- SUGGEST A STRONG PASSWORD ---------- function generateStrongPassword( len ){ len = len || 16; // Ambiguous characters (O/0, l/1/I) left out for readability. var chars = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789!@#$%*?-'; var out = ''; var crypto = window.crypto || window.msCrypto; if ( crypto && crypto.getRandomValues ){ var arr = new Uint32Array( len ); crypto.getRandomValues( arr ); for ( var i = 0; i < len; i++ ) out += chars.charAt( arr[i] % chars.length ); } else { for ( var j = 0; j < len; j++ ) out += chars.charAt( Math.floor( Math.random() * chars.length ) ); } return out; } // Eye toggle + generated-password reveal. Default hidden; the eye shows/hides; // generating reveals for 5 seconds and then auto-hides. var pwInput = document.getElementById('input_register-password'); var pwToggle = document.getElementById('toggle_password'); var pwHideTimer = null; function setPwVisible( show ){ if ( !pwInput ) return; pwInput.type = show ? 'text' : 'password'; if ( pwToggle ){ var icon = pwToggle.querySelector('i'); if ( icon ) icon.className = show ? 'fa fa-eye-slash' : 'fa fa-eye'; } } if ( pwToggle && pwInput ){ function togglePw(){ clearTimeout( pwHideTimer ); setPwVisible( pwInput.type === 'password' ); } pwToggle.addEventListener('click', togglePw); pwToggle.addEventListener('keydown', function(e){ if ( e.key === 'Enter' || e.key === ' ' ){ e.preventDefault(); togglePw(); } }); } let genBtn = document.getElementById('gen_password'); if ( genBtn && pwInput ){ function suggestPassword(){ pwInput.value = generateStrongPassword( 16 ); setPwVisible( true ); // reveal so the user can note it down clearTimeout( pwHideTimer ); pwHideTimer = setTimeout( function(){ setPwVisible( false ); }, 5000 ); // auto-hide after 5s showMessage( "Sterkt passord satt inn. Vises i 5 sekunder. Kopier og lagre det et trygt sted.", "info" ); } genBtn.addEventListener('click', suggestPassword); genBtn.addEventListener('keydown', function(e){ if ( e.key === 'Enter' || e.key === ' ' ){ e.preventDefault(); suggestPassword(); } }); } });