﻿/* 
    Scripts used for logging in or registering a "P4 Lytter".
    NOTE: This script depends on the Prototype library to be installed.
*/

var submitButton = null;

if (Login == null || typeof(Login) != "object") { var Login = new Object(); }

function isEmailValid(field) {
    var emailMask = /\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i;
    if (emailMask.test(field)) {
        return true
    } else {
        alert('Du må oppgi en gyldig e-post adresse.');
        return false;
    }
}

function isMobileValid(field) {
    var phoneMask = /^\d{8,8}$/i;
    if (phoneMask.test(stripSpace(field))) {
        return true;
    } else {
        alert('Du må oppgi et gyldig telefonnummer. (8-tegn)');
        return false;
    }
}

function stripSpace(str) {
    var ex = new RegExp(/\s/g);
    return str.replace(ex, '');
}

function fieldValidator(fieldName, fieldLabel) {
    if ($(fieldName).value == '') {
        alert('Feltet \'' + fieldLabel + '\' må være utfylt.');
        return false;
    } else {
        return true;
    }
}

function S4() {
   return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
   return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

// Displays a new window with the terms the user
// has to agree to in order to register.
Login.DisplayTerms = function() {
    window.open('/forum/vilkar.htm','termsAndConditions','left=20,top=20,width=500,height=500,toolbar=0,resizable=0');
}

// Displays the register form.
Login.DisplayRegisterForm = function() {
    Login.InvokeLoginHandler('register');
}

// Displays the login form.
Login.DisplayLoginForm = function() {
    Login.InvokeLoginHandler('login');
}

// Displays the forgot password form.
Login.ForgotPassword = function() {
    Login.InvokeLoginHandler('forgotPwd');
}

// Displays the edit/change password form.
Login.ViewChangePwdForm = function(arg) {
    Login.InvokeLoginHandler('editPwd', arg);
}

// Displays the profile form.
Login.ViewProfile = function(arg) {
    Login.InvokeLoginHandler('profile',arg);
}

// Triggers password change.
Login.ChangePwd = function() {
    var oldPwd = $F('oldPwd');
    var newPwd = $F('newPwd');
    var confirmPwd = $F('confirmPwd');
        
    var err = false;
    if (confirmPwd == newPwd) {
        if (newPwd.length < 7) {
            alert('Passordet ditt må være minst 7 tegn.');
            err = true;
        }    
    } else {
        alert('Passordene er ikke like.');
        err = true;
    }
    
    if (!err)
    {
        var params = { 'pwd': newPwd, 'oldPwd': oldPwd, 'action': 'saveEditedPwd' }
        new Ajax.Request('/forum/user.ashx', {
            method: 'post',
            parameters: params,
            onSuccess: function(transport) {
                alert('Passordet ditt har blitt endret!');
                Login.ViewProfile();
            },
            onFailure: function(transport) {
                if (transport.responseJSON != null) {
                    if (transport.responseJSON.Error == 'MembershipPasswordException')
                        alert(transport.responseJSON.Message);
                }
            }
        });
    }
}

// Triggers the login handler.
Login.InvokeLoginHandler = function(mode, arg) {
    var url = '/forum/login.ashx?m=' + mode + '&dMode=' + arg + '&' + guid();
    var target = 'userLogin';
    new Ajax.Updater({ success: target }, url, {
        metod: 'get',
        onFailure: function(transport) {
            alert('Det har oppstått en feil.');
        },
        onSuccess: function(transport) {
            if (mode == 'login')
                $('commentForm').hide();

            if (mode == 'profile')
                $('userLogin').show();
        }
    });
}


// Sends a new password to the user.
Login.SendPwd = function() {

    if ($F('username') != '') {
        var params = { 'username': $F('username'), 'action': 'sendPwd' };
        new Ajax.Request('/forum/user.ashx', {
            method: 'post',
            parameters: params,
            onSuccess: function(transport) {
                if (transport.statusText == 'OK') {
                    alert('Nytt passord er sendt deg pr. e-post.');
                    Login.DisplayLoginForm();
                } else {
                    alert('Det oppstod en feil under genereringen av nytt passord.\nHar du skrevet inn riktig brukernavn?');
                }
            },
            onFailure: function(transport) {
                if ((transport.responseJSON.Error == 'MembershipPasswordException') && 
                    (transport.responseJSON.Message == 'The user account has been locked out.')) {
                    var msg = 'Brukerkontoen din er sperret. \n\n';
                        msg += 'En vanlig årsak til dette kan være at man har forsøkt å logge seg på flere ganger,\n';
                        msg += 'men benyttet feil passord.\n\n';
                        msg += 'Ta kontakt for å få låst opp igjen kontoen din.';
                    alert(msg);
                } 
                else 
                {
                alert('Det har oppstått en feil.');
                }
            }
        });
    } else {
        alert('Du må oppgi et brukernavn.');
    }
}

// Verifies the user, if the credentials are correct,
// the user is logged in.
Login.VerifyUser = function() {
    submitButton.disabled = true;

    var rememberMe = $('rememberMe').checked;
    var params = {
        'username': $F('username'),
        'pwd': $F('pwd'),
        'rememberMe': rememberMe,
        'action': 'login'
    }

    new Ajax.Request('/forum/user.ashx', {
        method: 'post',
        parameters: params,
        onSuccess: function(transport) {
            var response = transport.responseJSON;
            if (response.Error && response.Error.length > 0) {
                alert('Det oppstod en feil: ' + response.Message);
            } else {
                if (response.IsLoggedIn) {
                    Login.WriteLogonInfo(response.Username, response.IsAnonymous);
                    submitButton.disabled = false;
                    window.location.reload();
                } else if (response.NotActivated) {
                    Login.InvokeActivationForm(response.UserID);
                } else {
                    alert('Brukernavn eller passord er feil.');
                }
            }
        },
        onFailure: function(transport) { alert('Feil under innlogging, prøv igjen senere.'); }
    });
}

// Terminates the user session and
// logs off the user.
Login.Logout = function() {
    var params = { 'action': 'logout' }
    new Ajax.Request('/forum/user.ashx', {
        method: 'post',
        parameters: params,
        onSuccess: function(transport) {
            submitButton.disabled = true;
            Login.DisplayLoginForm();
        },
        onFailure: function(transport) { alert('Det har oppstått en feil.'); }
    });
}

Login.LogoutToolbar = function() {
    var params = { 'action': 'logout' };
    new Ajax.Request('/forum/user.ashx', {
        method: 'post',
        parameters: params,
        onSuccess: function(transport) {
            window.location.reload(true);
        },
        onFailure: function(transport) { alert('Det har oppstått en feil.');  }
    });
}

// Fetches information about the user.
Login.GetUserInfo = function(submitButtonID) {
    
    submitButton = $(submitButtonID);
    submitButton.disabled = true;
    $('commentForm').hide();
    
    var params = { 'action' : 'userinfo' }
    new Ajax.Request('/forum/user.ashx', {
        method: 'post',
        parameters: params,
        onSuccess: function (transport) {
            var response = transport.responseJSON;
            if (response.IsLoggedIn) {
                submitButton.disabled = false;
                Login.WriteLogonInfo(response.Username, response.IsAnonymous); 
            }  
        },
        onFailure: function (transport) { alert('Det har oppstått en feil.'); }
    });
}

// Displays information about the logged on user.
Login.WriteLogonInfo = function(username, anonymous) {
    var msg = '<fieldset><legend>P4 Lytter</legend>' +
        '<table width="100%"><tr><td>Du er logget på som: <b>' + username + '</b>' +
        '</td><td><div class="forumButton" onclick="Login.Logout();" style="margin-bottom: 3px;">Logg ut</div>' + 
        '<div class="forumButton" onClick="Login.ViewProfile(false);">Se brukerprofil</div>' + 
        '</td></tr></table></fieldset>';

    $('userLogin').innerHTML = msg;
    $('commentForm').show();
}

// Sends the activation code to the user.
Login.SendCode = function() {

    var firstname = $F('firstname');
    var lastname = $F('lastname');
    var email = $F('email');
    var pwd = $F('pwd');
    var mobile = $F('mobilePhone');
    var nickname = $F('nickname');

    if (pwd.length < 7) {
        alert('Passordet ditt må bestå av minst 7 tegn.');
        return false;
    }

    if ((fieldValidator('firstname', 'Fornavn') == true) &&
        (fieldValidator('lastname', 'Etternavn') == true) &&
        (fieldValidator('email', 'E-post') == true) &&
        (fieldValidator('pwd', 'Passord') == true) &&
        (fieldValidator('mobilePhone', 'Mobilnummer') == true) &&
        (fieldValidator('nickname', 'Kallenavn') == true)) {

        var validEmail = isEmailValid(email);
        var validMobile = isMobileValid(mobile);
        var conditionsAccepted = $('acceptsConditions').checked;

        if (!conditionsAccepted) {
            alert('Du må akseptere vilkårene.');
        } else if (validEmail && validMobile && conditionsAccepted) {
            $('btnRegister').disabled = true;

            receiveEmail = $('receiveEmail').checked;
            var anonymous = $F('isanonymous');

            Login.InvokeUserHandler('register', {
                'firstname': firstname,
                'lastname': lastname,
                'email': email,
                'mobile': mobile,
                'pwd': pwd,
                'nickname': nickname,
                'isAnonymous': anonymous,
                'receiveEmail': receiveEmail
            },
                function(transport) {
                    if (transport.statusText == 'OK')
                        Login.InvokeActivationForm(transport.responseText);
                },
                function(transport) {
                    if (transport.responseJSON) {
                        var response = transport.responseJSON;

                        if (response.Error == 'MembershipCreateUserException') {
                            if (response.Message == 'The username is already in use.')
                                response.Message = 'Brukernavnet er allerede i bruk.';
                        }

                        alert(response.Message);
                        $('btnRegister').disabled = false;
                    }
                }
                );
        }
    }
}

// Activates the user.
Login.ActivateUser = function() {
    var target = $('userLogin');

    var userid = $F('userid');
    var activationCode = $F('activationCode');
    
    Login.InvokeUserHandler('activate', { 'userid': userid,'activationCode': activationCode },
        function(transport) {
            if (transport.statusText == 'OK') {
                var JSON = transport.responseJSON;
                Login.WriteLogonInfo(JSON.Username, JSON.IsAnonymous, submitButton) 
            }
        }, 
        function(transport) {
           alert(response.Error + ' - ' + response.Message);
        });
}

// Deletes the user.
Login.DeleteUser = function() {
    var target = $('userLogin');
    
    if (confirm('Er du sikker på at du ønsker å slette brukeren din?')) {
        Login.InvokeUserHandler('delete', 
            function(transport) {
                if (transport.statusText == 'OK') {
                    Login.Logout();
                }
            },
            function(transport) {
                alert(response.Error + ' - ' + response.Message);
            });
    }
}

// Updates the user's profile.
Login.UpdateProfile = function() {

    var nickname = '';

    if ($('nickname') != null) {
        nickname = $('nickname').value;
    }
    
    if  (($('nickname') != null) && (nickname == '')) {
        alert('Du må oppgi et kallenavn.');
    } else {
        var isAnonymous = $F('isanonymous');
        var canBeContacted = $('canBeContacted').checked;

        var params = {
            'nickname': nickname,
            'canBeContacted': canBeContacted,
            'isanonymous': isAnonymous
        };

        Login.InvokeUserHandler('updateprofile', params,
            function(transport) {
                if (transport.statusText == 'OK') {
                    Login.WriteLogonInfo(transport.responseJSON.Username, transport.responseJSON.IsAnonymous);
                }
            },
        function(transport) {
            alert(response.Error + ' - ' + response.Message);
        });
    } 
}

// Triggers the user handler.
Login.InvokeUserHandler = function(action, params, callbackSuccess, callbackFailure) {
    if (params == null) params = {};
    if (callbackSuccess == null) callbackSuccess = {};
    if (callbackFailure == null) callbackFailure = {};
    
	params.action = action;
	new Ajax.Request("/forum/user.ashx", { 
		method: "post", 
		parameters: params, 
		onSuccess: callbackSuccess, 
		onFailure: callbackFailure });
}

// Triggers the activation form.
Login.InvokeActivationForm = function(userID) {
    var target = 'userLogin';
    var url = './login.ashx?m=activate&userid=' + userID;
            
    new Ajax.Updater( {success: target}, url, { 
        metod: 'get',
        onFailure: function(request) {
            alert('An exception occured:\n' + request.statusText + ' (' + request.status + ')');
        }
    });
}

Login.UnsubscribeThread = function(threadID) {
    var params = { 'action' : 'unsubscribe', 'threadID': threadID };
    new Ajax.Request('/forum/user.ashx', {
        method: 'post',
        parameters: params,
        onFailure: function(transport) {
            alert('Det har oppstått en feil.');
        }
    });
}

