﻿var modalRegContent = null;
var modalLoginContent = null;
var modalChgPass = null;
var tryLoginActivated = false;
var tbEmail = null;
var tbLoginPassword = null;
var tbChgPassEmail = null;
var chbRememberme = null;
var msg = null;
var rngMsgs = null;
var tbRegEmail = null;
var tbRegPass = null;
var tbRegPass2 = null;
var activeModalDialog = null;
var passChgMsg = null;
var cOut = null;

function loginModalLoaded()
{
    modalRegContent = $get('Reg');
    modalLoginContent = $get('Lgn');
    modalChgPass = $get('ChgPass');
    tbEmail = $get('tbEmail');
    tbLoginPassword = $get('tbLoginPassword');
    chbRememberme = $get('chbRememberme');
    tbChgPassEmail = $get('tbChgPassEmail');
    msg = $get('lgnMsgs');
    tbRegEmail = $get('tbRegEmail');
    tbRegPass = $get('tbRegPass');
    tbRegPass2 = $get('tbRegPass2');
    rngMsgs = $get('rngMsgs');
    passChgMsg = $get('passChgMsg');
       
    if($get('userModal'))
        $addHandler($get('userModal'),'keydown',keyPressHandler);  
}

function loginModalUnLoaded()
{  
    if($get('userModal'))
        $clearHandlers($get('userModal'));  
}

function keyPressHandler(args)
{
    var k = args.keyCode ? args.keyCode : args.rawEvent.keyCode;
    if (k === Sys.UI.Key.enter)
    {
        if(submitFunction != null)
        {
            submitFunction();
            args.preventDefault();
        }
    }
    
    if (k === Sys.UI.Key.esc)
    {
        if(activeModalDialog != null)
        {
            $find(activeModalDialog).hide();
            args.preventDefault();
        }
    }
}


function setDialog(action, chkOut) {

    if (chkOut) 
        cOut = chkOut;
    
    switch(action)
    {
        case 'login':
        msg.innerHTML = '';
        tbEmail.value='';        
        tbLoginPassword.value='';
        chbRememberme.checked = false;        
        modalRegContent.style.display = 'none';
        modalLoginContent.style.display = 'block';
        modalChgPass.style.display = 'none';
        submitFunction = loginSubmit;
        break;
    
    case 'register':
        modalRegContent.style.display = 'block';
        modalLoginContent.style.display = 'none';
        modalChgPass.style.display = 'none';        
        rngMsgs.innerHTML = '';
        rngMsgs.style.display='none';
        tbRegEmail.value = '';
        tbRegPass.value = '';
        tbRegPass2.value = '';
        rngMsgs.innerHTML = '';
        submitFunction = registrationSubmit;      
        break;

    case 'forgottenPassword':
        submitFunction = passwordRetrieve;
        modalRegContent.style.display = 'none';
        modalLoginContent.style.display = 'none';
        modalChgPass.style.display = 'block';
        tbChgPassEmail.value = '';
        passChgMsg.innerHTML = '';
        break;
    }
}

function changeModalContent(action) {
    switch(action) {
        case 'login':
            tbRegEmail.value = '';
            tbRegPass.value = '';
            tbRegPass2.value = '';
            tbChgPassEmail.value = '';
            passChgMsg.innerHTML = '';
            rngMsgs.innerHTML = ''; 
            modalRegContent.style.display = 'none';
            modalLoginContent.style.display = 'block';
            modalChgPass.style.display = 'none';
            submitFunction = loginSubmit;                       
            break;
        case 'register':
            tbEmail.value = '';
            tbLoginPassword.value = '';
            chbRememberme.checked = false;
            msg.innerHTML = '';
            passChgMsg.innerHTML = '';
            tbChgPassEmail.value = ''; 
            modalRegContent.style.display = 'block';
            modalLoginContent.style.display = 'none';
            modalChgPass.style.display = 'none';
            submitFunction = registrationSubmit;                        
            break;
        case 'forgottenPassword':
            submitFunction = passwordRetrieve;
            modalRegContent.style.display = 'none';
            modalLoginContent.style.display = 'none';
            modalChgPass.style.display = 'block';
            tbEmail.value = '';
            tbLoginPassword.value = '';
            chbRememberme.checked = false;
            msg.innerHTML = '';
            tbRegEmail.value = '';
            tbRegPass.value = '';
            tbRegPass2.value = '';
            rngMsgs.innerHTML = '';
            break;
    }        
    setFocus(action);
}

function showUserModal(action, chkOut)
{
    var dlg = $find('logDialog');
    
    if(dlg)
    {
        setDialog(action, chkOut);
        dlg.show();
        setFocus(action);
        activeModalDialog = 'logDialog';
    }
}

function setFocus(action) {
    switch (action) {
        case 'login':
            tbEmail.focus();
            break;
        case 'register':
            tbRegEmail.focus();
            break;
        case 'forgottenPassword':
            tbChgPassEmail.focus();
            break;
    }
}

function tryLoginCallback(response, args)
{
    tryLoginActivated = true;

    if (args) 
    {
        var url = document.location.href.replace('#', '');
        url += (url.indexOf('?') != -1) ? "&chkOut=1" : "?chkOut=1";
        location.href = url;
    }
    else
        location.href = document.location.href.replace('#', ''); 
}

function tryLoginFailure(response, args, userID)
{
     tryLoginActivated = false;
     onLogFailure(response);
}

// Submit functions
function loginSubmit()
{
    if(!tryLoginActivated)
    {
        msg.style.display='block';
        
        if(!validateEmail(tbEmail.value)) 
        {
           msg.innerHTML = "E-mail adresa je u krivom formatu.";
            return;
        }
        
        if(IsEmptyString(tbLoginPassword.value)) 
        {
           msg.innerHTML = "Morate unijeti lozinku.";
           return; 
        }
                
        login(tbEmail.value,tbLoginPassword.value,chbRememberme.checked)
        tryLoginActivated = true;
    }
}

function login(email, pass, rememberme) {
    $User.LogOn([email, pass, rememberme], tryLoginCallback, onLogFailure, cOut, null, 20000);
}

function passwordRetrieve()
{
    $User.RetrievePassword([new $EMail(tbChgPassEmail.value)], passRetCallback, passRetFailure, null, null, 20000);
}

function passRetCallback(response) {
    passChgMsg.innerHTML = 'Nova zaporka je poslana na Vašu e-mail adresu';
}

function passRetFailure(err) {
    passChgMsg.innerHTML = err.Message;
}

function registrationSubmit()
{
    rngMsgs.style.display='block';

    if(!validateEmail(tbRegEmail.value)) 
    {
        rngMsgs.innerHTML = "E-mail adresa je u krivom formatu.";
        return;
    }
    
    if(tbRegPass.value.replace(/^\s+|\s+$/g, '').length < 6) 
    {
       rngMsgs.innerHTML = "Lozinka mora sadržavati minimalno šest znakova.";
       return; 
    }
    
    if(IsEmptyString(tbRegPass2.value) || (tbRegPass.value != tbRegPass2.value))
    {
        rngMsgs.innerHTML = "Lozinka i ponovljena lozinka moraju biti identične.";
        return;
    }

    $User.Register([tbRegEmail.value, tbRegPass.value, new $EMail(tbRegEmail.value)], onRegistrationComplete, onRegFailure, [tbRegEmail.value, tbRegPass.value], null, 10000);
}

function onRegistrationComplete(response,args) {
   login(args[0],args[1],false);
}

function IsEmptyString(str)
{
    return str.replace(/^\s+|\s+$/g, '').length == 0;
}

function validateEmail(email) 
{
    var objRegExp = /(^([0-9a-zA-Z]+[-._+&amp;])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,4}$)/i;
    return objRegExp.test(email);    
}

function onRegFailure(e)
{
   rngMsgs.innerHTML = e.Message;
}

function onLogFailure(e) {

    tryLoginActivated = false;
    msg.innerHTML = e.Message;
}

Sys.Application.add_load(loginModalLoaded);
Sys.Application.add_unload(loginModalUnLoaded);


if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

