function LoginForm()
{
    this.ValidateLogin = function validateLogin(username, password)
    {
        try
        { 
            Insurint.Login.Web.AgentLogin.ValidadeLogin(username, password, validateLoginCallback);
        }
        catch(e)
        {
            alert("The following error occurred in validateLogin: " + e.name + " - " + e.message);
        }         
    }
    function validateLoginCallback(res)
    {
        try
        {
            if(typeof(res.value) == 'object')
            {
                if(res.error == null)
                {   
                    switch(res.value.StatusCode)
                    {
                        case 0:
                            StartLogin(res.value.user)                     
                            break;
                        case 1:
                            InvalidUserDetails();
                            break;
                        case 2:
                            AccountDisabled();
                            break;
                        case 3:
                            LogonExpired();
                            break;
                        case 4:
                            UnknownLoginError();
                            break;                                                                                    
                    }
                }     
                else
                {
                    alert("The following error occurred in validateLoginCallback AJAX call: " + res.error.Type + "\n" + res.error.Message);
                }
            }
        }
        catch(e)
        {
            alert("The following error occurred in validateLoginCallback: " + e.name + " - " + e.message); 
        }            
    }
    
    // start user login process
    function StartLogin(user)
    {
        try
        {     
            if (user.LoggedInOnAnotherWorkstation)
            {
                dispayForm();
                var errors = new ErrorCollection();
	            errors.AddWarning(Messages.MULTIPLE_WORKSTATION_LOGIN_WARNING);
	            errors.DisplayAllWithClose(Login, user, null, null, true, true);
            } 
            else
            {
                Login(user);
            }    
        }
        catch(e)
        {
            alert("The following error occurred in StartLogin: " + e.name + " - " + e.message);
        }         
    }
    
    // Calls insurint Login function
    function Login(user)
    {
        try
        { 
            if (user.TrialAccount)
            {
                dispayForm();
	            var page = null;
	            var errors = new ErrorCollection();
	            errors.AddInformation(Messages.TRIAL_USER_LOGONS_LEFT.format(user.NumberOfLogonsLeft));
	            errors.DisplayAll(JustLogin, user, true, false);
            }
            else
            {
                Insurint.Login.Web.AgentLogin.Login(user, loginCallback);
            }
        }
        catch(e)
        {
            alert("The following error occurred in Login: " + e.name + " - " + e.message);
        } 
    }
    
    function JustLogin(user)
    {
        try
        { 
            Insurint.Login.Web.AgentLogin.Login(user, loginCallback);
        }
        catch(e)
        {
            alert("The following error occurred in JustLogin: " + e.name + " - " + e.message);
        } 
    }
       
    // insurint login function callback
    function loginCallback(res)
    {
        try
        {
            if(typeof(res.value) == 'object')
            {
                if(res.error == null)
                {  
                    switch(res.value.StatusCode)
                    {
                        case 0:
                            OpenNewInsurintWindow(res.value.Uri)                     
                            break;
                        case 1:
                            InvalidUserDetails();
                            break;
                        case 2:
                            AccountDisabled();
                            break;
                        case 3:
                            LogonExpired();
                            break;
                        case 4:
                            UnknownLoginError();
                            break;                                                                                    
                    }
                }     
                else
                {
                    alert("The following error occurred in loginCallback AJAX call: " + res.error.Type + "\n" + res.error.Message);
                }
            }
        }
        catch(e)
        {
            alert("The following error occurred in loginCallback: " + e.name + " - " + e.message); 
        }                    
    }
}

// opens new insurint window
function OpenNewInsurintWindow(uri)
{
    try
    {    
        window.open(uri, "_self");         
        self.moveTo(0,0);   
        window.resizeTo(screen.availWidth, screen.availHeight);
    }
    catch(e)
    {
        //alert("The following error occurred in OpenNewInsurintWindow: " + e.name + " - " + e.message); 
    }        
}