var vloggedin, username, userform, usermsg, dzip, dstate;
function usr_load() {
    userform = document.getElementById('userform');
    usermsg = document.getElementById('usermsg');
    loggedin();
}
function loggedin() {
    var req = get('GET', '/usr/loggedin.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) return;
        var data = req.responseText;
        if (data == 'NO') { display(userform,1); display(usermsg,0); vloggedin = 0; if (pagem()) { display('track_list',0); display('splaces_top_box',0); } return; }
        vloggedin = 1;
        var dat = data.split(' ');
        username = dat[1];
        display(userform,0);
        display(usermsg,1);
        display('top_register_button',0);
        if (pagem()) { display('track_list',1,1); display('splaces_top_box',1); sp_list() }
        usermsg.innerHTML = 'Welcome, '+username+'. <a href="#" onclick="logout()">Logout?</a> - <a href="account.shtml">My Account</a>';
        if (gE('header_username')) gE('header_username').innerHTML = username;
        if (dat[3] && (pagem() || gE('defaults_state'))) {
            dzip = dat[2]; dstate = dat[3];

            if (pagem()) { gE('traffic_zip').value = dzip; gE('movies_zip').value = dzip; gE('banks_zip').value = dzip; gE('radio_zip').value = dzip; }
            if (gE('defaults_zip')) gE('defaults_zip').value = dzip;

            var wso = gE('weather_state') ? gE('weather_state').options : gE('defaults_state').options; var ind = -1;
            for (var i = 0; i < wso.length; i++) { if (wso[i].text == dstate) { ind = i; break; } }
            if (ind != -1) {
                if (wso[0].text == 'US') ind = ind - 1;
                if (pagem()) { gE('weather_state').selectedIndex = ind+1;  }
                if (gE('defaults_state')) gE('defaults_state').selectedIndex = ind;
            }
        }
    }
    req.send(null);
}
function login(r) {
    var user = document.getElementById('username');
    var pass = document.getElementById('password');
    var msg  = document.getElementById('loginmsg');
    msg.innerHTML = '&nbsp;';
    if (!user || !pass) { msg.innerHTML = 'Missing info.'; return; }
    var req = get('POST', '/usr/login.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) { return; } if (req.status != 200) { return; }
        var data = req.responseText;
        if (data == 'FAIL') { msg.innerHTML = 'Failed.'; return; }
        loggedin();
        msg.innerHTML = '&nbsp;';
        user.value = 'Username';
        pass.value = 'Password';
        if (r) window.location = 'http://moremap.com/index.html';
    }
    req.send('user='+user.value.uri()+'&pass='+pass.value.uri());
}
function logout() {
    var req = get('GET', '/usr/logout.pl'); req.send(null); 
    vloggedin = 0; username='';
    display('top_register_button',1,1); display(userform,1); display(usermsg,0);
    if (pagem()) { display('track_list',0); display('splaces_top_box',0); }
}

function register() {//FAILPASS SHRTPASS LONGUSER LONGMAIL BADMAIL BADUSER DUPEUSER DUPEMAIL WELCOME!
    if (!reg_check_values()) return;
    var user = gE('reg_user').value;
    var mail = gE('reg_mail').value;
    var pass = gE('reg_pass').value;
    var passc = gE('reg_passc').value;
    var zip = gE('reg_zip').value;
    var state = gE('reg_state').value;
    var regmsg = gE('reg_msg');

    if (pass != passc) { regmsg.innerHTML = 'Passwords do not match.'; return; }
    if (pass.length < 6) { regmsg.innerHTML = 'Password too short.'; return; }
    if (user.length > 20) { regmsg.innerHTML = 'Username too long.'; return; }
    if (!state.match(/^[A-Z]{2},-?\d+\.\d+,-?\d+\.\d+$/)) { regmsg.innerHTML = 'Oddly, your state isnt valid.'; return; }
    if (zip && !zip.match(/^\d{5}$/)) { regmsg.innerHTML = 'Enter a valid zip, or no zip.';  return; }

    state = state.split(','); state = state[0];

    var req = get('POST', '/usr/register.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) return;
        var data = req.responseText;
        if (data == 'FAILPASS') { regmsg.innerHTML = 'Passwords do not match.'; }
        else if (data == 'SHRTPASS') { regmsg.innerHTML = 'Password too short.'; }
        else if (data == 'LONGUSER') { regmsg.innerHTML = 'Username too long.'; }
        else if (data == 'LONGMAIL') { regmsg.innerHTML = 'Mail too long.'; }
        else if (data == 'BADMAIL') { regmsg.innerHTML = 'Bad characters in mail.'; }
        else if (data == 'BADUSER') { regmsg.innerHTML = 'Bad characters in username.'; }
        else if (data == 'DUPEUSER') { regmsg.innerHTML = 'Username already exists.'; }
        else if (data == 'DUPEMAIL') { regmsg.innerHTML = 'Mail already exists.'; }
        else if (data == 'WELCOME!') {
            regmsg.innerHTML = 'You are now registered.';
            gE('username').value = user; gE('password').value = pass;
            login(1);
        }
        else { regmsg.innerHTML = 'Unknown status/error.'; }
    }
    req.send('user='+user.uri()+'&mail='+mail.uri()+'&pass='+pass.uri()+'&passc='+passc.uri()+'&state='+state.uri()+'&zip='+zip.uri());
}
function reg_check_values() {
    var allow = [0,0,0,0]; var reg_submit = gE('reg_submit');
    var user = gE('reg_user').value; var user_lbl = gE('reg_user_lbl');
    var mail = gE('reg_mail').value; var mail_lbl = gE('reg_mail_lbl');
    var pass = gE('reg_pass').value; var pass_lbl = gE('reg_pass_lbl');
    var zip = gE('reg_zip').value; var zip_lbl = gE('reg_zip_lbl');
    var passc = gE('reg_passc').value;

    if (user.length == 0) { user_lbl.style.color = '#000'; allow[0] = 0 }
    else if (user.length < 6 || user.length > 20 || !user.match(/^[a-z0-9_-]+$/i)) { user_lbl.style.color = '#FF0000'; allow[0] = 0 }
    else { user_lbl.style.color = '#00FF00'; allow[0] = 1 }

    if (mail.length == 0) { mail_lbl.style.color = '#000'; allow[1] = 0 }
    else if (mail.length < 8 || mail.length > 80 || !mail.match(/^[\.a-z0-9_-]+@[\.a-z0-9_-]+\.[a-z]{2,4}$/i)) { mail_lbl.style.color = '#FF0000'; allow[1] = 0 }
    else { mail_lbl.style.color = '#00FF00'; allow[1] = 1 }

    if (pass.length == 0 && passc.length == 0) { pass_lbl.style.color = '#000'; allow[2] = 0 }
    else if (pass.length < 6 || pass != passc) { pass_lbl.style.color = '#FF0000'; allow[2] = 0 }
    else { pass_lbl.style.color = '#00FF00'; allow[2] = 1 }

    if (zip.length != 0 && !zip.match(/^\d{5}$/)) { zip_lbl.style.color = '#FF0000'; allow[3] = 0 }
    else { zip_lbl.style.color = '#00FF00'; allow[3] = 1 }

    if (allow[0] == 1 && allow[1] == 1 && allow[2] == 1 && allow[3] == 1) { reg_submit.disabled = 0; return 1 }
    else { reg_submit.disabled = 1; return 0 }
}
function set_defaults() {
    var zip = gE('defaults_zip').value; var state = gE('defaults_state').value; var msg = gE('defaults_msg');

    if (!state.match(/^[A-Z]{2},-?\d+\.\d+,-?\d+\.\d+$/)) { msg.innerHTML = 'Oddly, your state isnt valid.'; return; }
    if (zip && !zip.match(/^\d{5}$/)) { msg.innerHTML = 'Enter a valid zip, or no zip.';  return; }

    state = state.split(','); state = state[0];

    var req = get('POST', '/usr/settings.pl');
    req.onreadystatechange = function() {
        if (req.readyState != 4) return; if (req.status != 200) return;
        var data = req.responseText;
        if (data == 'FAIL') msg.innerHTML = 'Failed.';
        else { msg.innerHTML = 'Done'; loggedin(); }
    }
    req.send('state='+state.uri()+'&zip='+zip.uri());
}

