﻿function Login(event, control)
{
    var cont = true;
    
    if(event.type == 'keypress')
    {
        var keyCode = event.keyCode ? event.keyCode : event.which;  
        
        cont = (keyCode == Event.KEY_RETURN);
        
        control = $(ClientIDs.LoginButton);
    }
    
    if(cont)
    {        
        control.disabled = true;
    
        $(ClientIDs.MessageArea).update(new Element('img', { 'src': '../Images/ajax_indicator.gif', 'alt': 'Signing in...' }));
        $(ClientIDs.MessageArea).insert('Signing in...');
             
        var result = false;
        
        var id = $(ClientIDs.ChallengeID).value;
        var challenge = $(ClientIDs.Challenge).value;
        var vector = $(ClientIDs.Vector).value;
        var userName = $(ClientIDs.userName).select('input')[0];
        var password = $(ClientIDs.userPassword).select('input')[0];
        var messageArea = $(ClientIDs.MessageArea);
        var rememberMe = $(ClientIDs.RememberMe).checked;
        var message = null;
        
        if(userName.value.length > 0 && password.value.length > 0)
        {
            var encryptedPassword = stringToHex(des(challenge, password.value, 1, 1, vector, 1));
            
            new Ajax.Request(UtilitiesHandler, {
                    method: 'post',
                    parameters: { method: 'Login', keyPosition: id,  userName: userName.value, password: encryptedPassword, rememberMe: rememberMe},
                    onSuccess:  function(transport) {
                        var opResult = eval('(' + transport.responseText + ')');
                        
                        if(opResult.OperationResult)
                        {
                            result = true;
                            
                            var redirectURL = GetQueryStringValue('ReturnUrl');
                            
                            if(redirectURL != null)
                            {
                                window.location = unescape(redirectURL);
                            }
                            else
                            {
                                var split = opResult.Data.split(',');
                                
                                $(ClientIDs.ChallengeID).value = split[0];
                                $(ClientIDs.Challenge).value = split[1];
                                
                                $(ClientIDs.MessageArea).innerHTML = 'You are now logged in.<br /><br />You can continue to use Gatherer by using one of the links above, or by starting your search.';
                                    
                                control.disabled = false;
                            }
                        }
                        else if(opResult.Data != null)
                        {
                            var split = opResult.Data.split(',');
                                
                            $(ClientIDs.ChallengeID).value = split[0];
                            $(ClientIDs.Challenge).value = split[1];
                                
                            $(ClientIDs.MessageArea).innerHTML = opResult.Message;
                                
                            control.disabled = false;
                        }
                        else
                        {
                            $(ClientIDs.MessageArea).innerHTML = 'There was an error logging in; probably related to network difficulties. Please try again in a few minutes.';
                                
                            control.disabled = false;
                        }
                    },
                    onFailure: function(transport) {
                        var opResult = eval('(' + transport.responseText + ')');
                        
                        $(ClientIDs.MessageArea).innerHTML = 'There was an unexpected error logging in; probably related to network difficulties. Please try again in a few minutes.';
                              
                        control.disabled = false;
                    }      
                });    
        }
        else
        {
            messageArea.innerHTML = 'You must supply a user name and password.';
            
            control.disabled = false;
        }
        
        return result;
    }
}

function GetQueryStringValue(variable) 
{
    var result = null;
    var query = window.location.search.substring(1);
    var vars = query.split('&');
    
    for (var i=0;i<vars.length;i++) 
    {
        var pair = vars[i].split('=');
    
        if (pair[0].toLowerCase() == variable.toLowerCase()) 
        {
            result = pair[1];
        }
    }
    
    return result;
}