﻿var userElm = null;
var passElm = null;
var formElm = null;

var uglyHack = null;

loginInit = function()
{
  userElm = document.getElementById('username');
  passElm = document.getElementById('password');
  formElm = document.getElementById('login');
  
  formElm.onsubmit = loginValidate;
  
  userElm.serverValue = userElm.value;
  passElm.serverValue = passElm.value;

  if (passElm.type != 'password')
  {
    userElm.onfocus = loginGotFocus(false);
    passElm.onfocus = loginGotFocus(true);
  }
  else
  {
    userElm.onkeyup = loginUserChange;
    passElm.onblur = loginPassLostFocus;
  }
}

loginSwapMode = function()
{
  if (passElm.type == 'text' || (userElm.value.length == 0 && passElm.value.length == 0))
  {
    var newElm = document.createElement('input');

    if (passElm.type == 'password')
    {
      newElm.type = 'text';
      newElm.value = passElm.serverValue;
      userElm.value = userElm.serverValue;
      userElm.onblur = null;
      passElm.onblur = null;
    }
    else
    {
      newElm.type = 'password';
      newElm.value = '';
      userElm.value = '';
      userElm.onblur = loginLostFocus;
      passElm.onblur = loginLostFocus;
    }

    newElm.name = passElm.name;
    newElm.serverValue = passElm.serverValue;

    var oldBlur = passElm.onblur;
    passElm.onblur = null;
    
    newElm.id = passElm.id;
    passElm.parentNode.replaceChild(newElm, passElm);
    
    newElm.onblur = oldBlur;
    newElm.onfocus = passElm.onfocus;
    
    passElm = newElm;
  }
}

loginGotFocus = function(passNeedsFocus) { return function()
{
  if (uglyHack != null)
  {
    clearTimeout(uglyHack);
    uglyHack = null;
    
    return;
  }
    
  loginSwapMode();
  
  if (passNeedsFocus)
    uglyHack = setTimeout(function() { passElm.focus(); }, 1);
}}

loginLostFocus = function()
{
  uglyHack = setTimeout(function() { loginSwapMode(); uglyHack = null; }, 1);
}

loginUserChange = function()
{
  var curUserName = userElm.value.toLowerCase();
  if (curUserName != userElm.serverValue && passElm.value == passElm.serverValue)
  {
    passElm.value = '';
  }
  else if (curUserName == userElm.serverValue && passElm.value.length == 0)
  {
    passElm.value = passElm.serverValue;
  }
}

loginPassLostFocus = function()
{
  if (userElm.value.toLowerCase() == userElm.serverValue && passElm.value.length == 0)
  {
    passElm.value = passElm.serverValue;
  }
}

loginValidate = function()
{
  var trim = new RegExp('^[\\t\\s]+|[\\t\\s]+$');
  if (passElm.type == 'text' || passElm.value.replace(trim, '').length == 0 || userElm.value.replace(trim, '').length == 0)
  {
    var msg = 'You should fill out your user name and\n' +
              'password before clicking OK. If you\'re\n' +
              'not a member yet and would like to\n' +
              'become one, please ask for an account\n' +
              'in the channel.';
              
    alert(msg);
    return false;
  }
  
  return true;
}

fastLoadAdd(loginInit);
