var mpw, error;

function updateMPW() {
    mpw = null;
    startWork();
    mpw = new MPW( $('#userName')[0].value, $('#masterPassword')[0].value, $('#version')[0].value );
    mpw.key.then(
        function() {
            doneWork();
        },
        function(reason) {
            error = reason;
            mpw = null;
            doneWork();
        }
    );
}
function startWork() {
    update(true);
}
function doneWork() {
    update(false);
}
function update(working) {
    var screen = mpw? 'site': 'identity';

    // Screen Name
    if (screen == 'identity') {
        $('#identity').addClass('active');

        if (!working)
            $('#userName').focus();
    }
    else {
        $('#identity').removeClass('active');
        $('#userName')[0].value = $('#masterPassword')[0].value = '';
    }

    if (screen == 'site') {
        $('#site').addClass('active');

        if (!working)
            $('#siteName').focus();
    }
    else {
        $('#site').removeClass('active');
        $('#siteName')[0].value = $('#sitePassword')[0].value = '';
    }

    // Working
    if (working && screen == 'identity')
        $('#identity').addClass('working').find('input, select').attr('disabled', 'disabled');
    else
        $('#identity').removeClass('working').find('input, select').removeAttr('disabled');

    if (working && screen == 'site')
        $('#site').addClass('working');
    else
        $('#site').removeClass('working');

    // Error
    $('#error').text(error);
}
function updateSite() {
    if (!mpw) {
        doneWork();
        return
    }

    startWork();
    mpw.generatePassword( $('#siteName')[0].value, $('#siteCounter')[0].valueAsNumber, $('#siteType')[0].value )
       .then( function (sitePassword) {
           $('#sitePassword').text(sitePassword);
           doneWork();
       }, function (reason) {
           error = reason;
           doneWork();
       });
}
function selectText(element) {
    var doc = document, range, selection;    

    if (doc.body.createTextRange) { //ms
        range = doc.body.createTextRange();
        range.moveToElementText(element);
        range.select();
    } else if (window.getSelection) { //all others
        selection = window.getSelection();        
        range = doc.createRange();
        range.selectNodeContents(element);
        selection.removeAllRanges();
        selection.addRange(range);
    }
}


$(function() {
    $('#identity form').on('submit', function() {
        updateMPW();
        return false;
    });
    $('#site input, #site select').on('change input keyup', function() {
        updateSite();
    });
    $('#logout').on('click', function() {
        mpw = null;
        doneWork();
    });
    $('#sitePassword').on('click', function() {
        selectText(this);
    });

    doneWork();
});