YAHOO.namespace("Dialogs");
YAHOO.Dialogs.login    = null;
YAHOO.Dialogs.password = null;
YAHOO.Dialogs.logout   = null;
YAHOO.Dialogs.myinfo   = null;

var showLogin = function(e) {
  YAHOO.util.Event.preventDefault(e);

  if(YAHOO.util.Dom.inDocument("LoginFormDialog") == false && YAHOO.Dialogs.login == null) {
    // Create the dialog header
    var dlgHeader = Display.createElement("DIV", "hd");
    Display.appendContent(dlgHeader,
      Display.appendContent(Display.createElement("P", "medium text"), "Please Login"));
    // Create the dialog content
    var dlgBody   = Display.createElement("DIV", "bd");
    var loginForm = Display.createForm("post", url + "services/requests/doLogin", "medium formForm");
        loginForm.id = "LoginForm";
    Display.appendContent(loginForm.firstChild,
      [
       Display.createFormRow(
         [
          Display.createLabel("Email", "email", "formLabel"),
          Display.createInput("email", "text", "", 20)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Password", "password", "formLabel"),
          Display.createInput("password", "password", "", 20)
         ])
      ]);
    Display.appendContent(dlgBody,
      [
        Display.createElement("P", "small text errorText servResponse"),
        loginForm
      ]);
    var dlgFooter = Display.createElement("DIV", "ft medium");
    // Add the sections
    Display.appendContent(YAHOO.util.Dom.get("D"),
      Display.appendContent(Display.createElement("DIV", "AdminDialog", "LoginFormDialog"), [dlgHeader, dlgBody, dlgFooter]));
    // Create the dialog
    var buttons = [{text:"Login", handler:dialogSubmit, isDefault:true}, {text:"Cancel", handler:dialogCancel}];
    YAHOO.Dialogs.login = new YAHOO.widget.Dialog("LoginFormDialog");
    YAHOO.Dialogs.login.cfg.queueProperty("buttons", buttons);
    YAHOO.Dialogs.login.cfg.queueProperty("modal", true);
    YAHOO.Dialogs.login.cfg.queueProperty("fixedcenter", true);
    YAHOO.Dialogs.login.cfg.queueProperty("hideaftersubmit", false);
    YAHOO.Dialogs.login.callback.success = loginRequestSuccess;
    YAHOO.Dialogs.login.callback.failure = requestFailure;
    YAHOO.Dialogs.login.render();
  } else {
    YAHOO.util.Dom.get("email").value = "";
    YAHOO.util.Dom.get("password").value = "";
  }
  
  var serverResponseBoxes = YAHOO.util.Dom.getElementsByClassName("servResponse", "p", "LoginFormDialog");
  var serverResponseBox   = serverResponseBoxes[0];
    
  Display.removeAll(serverResponseBox);

  YAHOO.Dialogs.login.show();
}

var loginRequestSuccess = function(o) {
  var responseNode = o.responseXML;
  
  YAHOO.util.Dom.get("email").value = "";
  YAHOO.util.Dom.get("password").value = "";
  
  if(dialogHandleErrorResponse(o, "LoginFormDialog") == false) {
    // There were no errors, check for successes
    var responseItems = responseNode.getElementsByTagName("Item");
    
    if(responseItems && responseItems.length > 0) {
      var data = new Object();
      
      for(var i = 0; i < responseItems.length; ++i) {
        data[responseItems[i].getAttribute("ID")] = responseItems[i].getAttribute("value");
      }
      
      var infoLink     = Display.createElement("A", null, "accountInfoLink");
          infoLink.href     = "#";
      var passwordLink = Display.createElement("A", null, "changePasswordLink");
          passwordLink.href = "#";
      var logoutLink   = Display.createElement("A", null, "logoutLink");
          logoutLink.href   = "#";
      
      Display.removeAll(YAHOO.util.Dom.get("login"));
      Display.appendContent(YAHOO.util.Dom.get("login"),
        [
         "Logged in as Coach " + data['Name'] + " | ",
         Display.appendContent(infoLink, "My Info"),
         " | ",
         Display.appendContent(passwordLink, "Change Password"),
         " | ",
         Display.appendContent(logoutLink, "Logout")
        ]);
      
      YAHOO.util.Event.purgeElement("logoutLink");
      YAHOO.util.Event.purgeElement("changePasswordLink");
      YAHOO.util.Event.purgeElement("accountInfoLink");
      YAHOO.util.Event.addListener("logoutLink", "click", showLogout);
      YAHOO.util.Event.addListener("changePasswordLink", "click", showPassword);
      YAHOO.util.Event.addListener("accountInfoLink", "click", showInfo);

      checkLoginStatus();

      YAHOO.Dialogs.login.hide();
    } else {
      alert("Something went wrong during login. You should not be seeing this message");
    }
  }
}

var showLogout = function(e) {
  YAHOO.util.Event.preventDefault(e);

  var logoutURL = url + "services/requests/doLogout";

  YAHOO.util.Connect.asyncRequest('GET', logoutURL, { success:logoutRequestSuccess }, null); 
}

var logoutRequestSuccess = function(o) {
  forceLogout("You have been logged out.");
}

var showPassword = function(e) {
  YAHOO.util.Event.preventDefault(e);

  if(YAHOO.util.Dom.inDocument("ChangePasswordDialog") == false && YAHOO.Dialogs.password == null) {
    // Create the dialog header
    var dlgHeader = Display.createElement("DIV", "hd");
    Display.appendContent(dlgHeader,
      Display.appendContent(Display.createElement("P", "medium text"), "Change Your Password"));
    // Create the dialog content
    var dlgBody   = Display.createElement("DIV", "bd");
    var loginForm = Display.createForm("post", url + "services/requests/doChangePassword", "medium formForm");
        loginForm.id = "ChangePasswordForm";
    Display.appendContent(loginForm.firstChild,
      [
       Display.createFormRow(
         [
          Display.createLabel("Current Password", "cpassword", "formLabel"),
          Display.createInput("cpassword", "password", "", 20)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("New Password", "npassword", "formLabel"),
          Display.createInput("npassword", "password", "", 20)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("(Repeat)", "npasswordr", "formLabel"),
          Display.createInput("npasswordr", "password", "", 20)
         ])
      ]);
    Display.appendContent(dlgBody,
      [
        Display.createElement("P", "small text errorText servResponse"),
        loginForm
      ]);
    var dlgFooter = Display.createElement("DIV", "ft medium");
    // Add the sections
    Display.appendContent(YAHOO.util.Dom.get("D"),
      Display.appendContent(Display.createElement("DIV", "AdminDialog", "ChangePasswordDialog"), [dlgHeader, dlgBody, dlgFooter]));
    // Create the dialog
    var buttons = [{text:"Change", handler:dialogSubmit, isDefault:true}, {text:"Cancel", handler:dialogCancel}];
    YAHOO.Dialogs.password = new YAHOO.widget.Dialog("ChangePasswordDialog");
    YAHOO.Dialogs.password.cfg.queueProperty("buttons", buttons);
    YAHOO.Dialogs.password.cfg.queueProperty("modal", true);
    YAHOO.Dialogs.password.cfg.queueProperty("fixedcenter", true);
    YAHOO.Dialogs.password.cfg.queueProperty("hideaftersubmit", false);
    YAHOO.Dialogs.password.callback.success = changePasswordRequestSuccess;
    YAHOO.Dialogs.password.callback.failure = requestFailure;
    YAHOO.Dialogs.password.render();
  } else {
    YAHOO.util.Dom.get("cpassword").value = "";
    YAHOO.util.Dom.get("npassword").value = "";
    YAHOO.util.Dom.get("npasswordr").value = "";
  }
  
  var serverResponseBoxes = YAHOO.util.Dom.getElementsByClassName("servResponse", "p", "ChangePasswordDialog");
  var serverResponseBox   = serverResponseBoxes[0];
    
  Display.removeAll(serverResponseBox);

  YAHOO.Dialogs.password.show();
}

var changePasswordRequestSuccess = function(o) {
  var responseNode = o.responseXML;
  
  YAHOO.util.Dom.get("cpassword").value = "";
  YAHOO.util.Dom.get("npassword").value = "";
  YAHOO.util.Dom.get("npasswordr").value = "";
  
  if(dialogHandleForceLogoutResponse(o, YAHOO.Dialogs.password) == false) {
    if(dialogHandleErrorResponse(o, "ChangePasswordDialog") == false) {
      YAHOO.Dialogs.password.hide();
    }
  }
}

var showInfo = function(e) {
  YAHOO.util.Event.preventDefault(e);

  var getInfoURL = url + "services/requests/doGetUserInfo";
  
  YAHOO.util.Connect.asyncRequest('GET', getInfoURL, { success:getUserInfoRequestSuccess }, null);
}

var getUserInfoRequestSuccess = function(o) {
  if(YAHOO.util.Dom.inDocument("UpdateInfoDialog") == false && YAHOO.Dialogs.updateInfo == null) {
    // Create the dialog header
    var dlgHeader = Display.createElement("DIV", "hd");
    Display.appendContent(dlgHeader,
      Display.appendContent(Display.createElement("P", "medium text"), "Update your Personal Info"));
    // Create the dialog content
    var dlgBody   = Display.createElement("DIV", "bd");
    var loginForm = Display.createForm("post", url + "services/requests/doUpdateInfo", "medium formForm");
        loginForm.id = "UpdateInfoForm";
    Display.appendContent(loginForm.firstChild,
      [
       Display.createFormRow(
         [
          Display.createLabel("Name", "infoName", "formLabel"),
          Display.createInput("infoName", "text", "", 30)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Duty", "infoDuty", "formLabel"),
          Display.createInput("infoDuty", "text", "", 30)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Nickname", "infoNickname", "formLabel"),
          Display.createInput("infoNickname", "text", "", 30)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Experience", "infoExperience", "formLabel"),
          Display.createInput("infoExperience", "text", "", 30)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Quote", "infoQuote", "formLabel"),
          Display.createInput("infoQuote", "text", "", 30)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Phone", "infoPhone", "formLabel"),
          Display.createInput("infoPhone", "text", "", 30, 10, Core.forceNumeric)
         ]),
       Display.createFormRow(
         [
          Display.createLabel("Email", "infoEmail", "formLabel"),
          Display.createInput("infoEmail", "text", "", 30)
         ])
      ]);
    Display.appendContent(dlgBody,
      [
        Display.createElement("P", "small text errorText servResponse"),
        loginForm
      ]);
    var dlgFooter = Display.createElement("DIV", "ft medium");
    // Add the sections
    Display.appendContent(YAHOO.util.Dom.get("D"),
      Display.appendContent(Display.createElement("DIV", "AdminDialog", "UpdateInfoDialog"), [dlgHeader, dlgBody, dlgFooter]));
    // Create the dialog
    var buttons = [{text:"Update", handler:dialogSubmit, isDefault:true}, {text:"Cancel", handler:dialogCancel}];
    YAHOO.Dialogs.updateInfo = new YAHOO.widget.Dialog("UpdateInfoDialog");
    YAHOO.Dialogs.updateInfo.cfg.queueProperty("buttons", buttons);
    YAHOO.Dialogs.updateInfo.cfg.queueProperty("modal", true);
    YAHOO.Dialogs.updateInfo.cfg.queueProperty("fixedcenter", true);
    YAHOO.Dialogs.updateInfo.cfg.queueProperty("hideaftersubmit", false);
    YAHOO.Dialogs.updateInfo.callback.success = updateInfoRequestSuccess;
    YAHOO.Dialogs.updateInfo.callback.failure = requestFailure;
    YAHOO.Dialogs.updateInfo.render();
  }
  
  var responseNode  = o.responseXML;
  var returnedItems = responseNode.getElementsByTagName("Item");
  
  for(var i = 0; i < returnedItems.length; ++i) {
    var id = "info" + returnedItems[i].getAttribute("ID");
    
    if(YAHOO.util.Dom.get(id)) {
      YAHOO.util.Dom.get(id).value = returnedItems[i].getAttribute("value");
    }
  }
  
  var serverResponseBoxes = YAHOO.util.Dom.getElementsByClassName("servResponse", "p", "UpdateInfoDialog");
  var serverResponseBox   = serverResponseBoxes[0];
    
  Display.removeAll(serverResponseBox);

  YAHOO.Dialogs.updateInfo.show();
}

var updateInfoRequestSuccess = function(o) {
  var responseNode = o.responseXML;
  
  if(dialogHandleForceLogoutResponse(o, YAHOO.Dialogs.updateInfo) == false) {
    if(dialogHandleErrorResponse(o, "UpdateInfoDialog") == false) {
      window.location.reload();
      
      var items = responseNode.getElementsByTagName("Item");

      //removeNewsItem(YAHOO.util.Dom.get("news-" + items[0].getAttribute("value")));

      YAHOO.Dialogs.updateInfo.hide();
    }
  }
}

var forceLogout = function(message) {
  var loginLink = Display.createElement("A", null, "loginLink");
      loginLink.href = "#";

  Display.removeAll(YAHOO.util.Dom.get("login"));
  Display.appendContent(YAHOO.util.Dom.get("login"),
    [
     "You are not logged in | ",
     Display.appendContent(loginLink, "Login")
    ]);
  
  YAHOO.util.Event.purgeElement("loginLink");
  YAHOO.util.Event.addListener("loginLink", "click", showLogin);
  
  removeAdminItems();
  
  if(YAHOO.util.Dom.inDocument("LogoutDialog") == false && YAHOO.Dialogs.logout == null) {
    // Create the dialog header
    var dlgHeader = Display.createElement("DIV", "hd");
    Display.appendContent(dlgHeader,
      Display.appendContent(Display.createElement("P", "medium text"), "Logged Out"));
    // Create the dialog content
    var dlgBody   = Display.createElement("DIV", "bd");
    Display.appendContent(dlgBody,
        Display.appendContent(Display.createElement("P", "medium text", "logoutMessage"), message));
    var dlgFooter = Display.createElement("DIV", "ft medium");
    // Add the sections
    Display.appendContent(YAHOO.util.Dom.get("D"),
      Display.appendContent(Display.createElement("DIV", "AdminDialog", "LogoutDialog"), [dlgHeader, dlgBody, dlgFooter]));
    // Create the dialog
    var buttons = [{text:"OK", handler:dialogCancel, isDefault:true}];
    YAHOO.Dialogs.logout = new YAHOO.widget.Dialog("LogoutDialog");
    YAHOO.Dialogs.logout.cfg.queueProperty("buttons", buttons);
    YAHOO.Dialogs.logout.cfg.queueProperty("modal", true);
    YAHOO.Dialogs.logout.cfg.queueProperty("fixedcenter", true);
    YAHOO.Dialogs.logout.render();
  } else {
    Display.removeAll(YAHOO.util.Dom.get("logoutMessage"));
    Display.appendContent(YAHOO.util.Dom.get("logoutMessage"), message);
  }
  
  YAHOO.Dialogs.logout.show();
}

var dialogHandleForceLogoutResponse = function(o, dialog) {
  var responseNode = o.responseXML;
  var actionNodes  = responseNode.getElementsByTagName("Action");

  if(actionNodes && actionNodes.length > 0) {
    for(var i = 0; i < actionNodes.length; ++i) {
      if(actionNodes[i].getAttribute('ID') == 'ForceLogout') {
        if(dialog != null) {
          dialog.hide();
        }
        forceLogout("Your session has expired. Please login again.");
        return true;
      }
    }
  }

  return false;
}

var dialogHandleErrorResponse = function(o, id) {
  var responseNode = o.responseXML;
  var errorNodes   = responseNode.getElementsByTagName("Error");
  
  if(errorNodes && errorNodes.length > 0) {
    var serverResponseBoxes = YAHOO.util.Dom.getElementsByClassName("servResponse", "p", id);
    var serverResponseBox   = serverResponseBoxes[0];
    
    Display.removeAll(serverResponseBox);
    
    for(var i = 0; i < errorNodes.length; ++i) {
      for(var j = 0; j < errorNodes[i].childNodes.length; ++j) {
        Display.appendContent(serverResponseBox, errorNodes[i].childNodes[j]);
      }
    }
    
    return true;
  }
  
  return false;
}

var dialogSubmit = function() {
  this.submit();
}

var dialogCancel = function() {
  this.hide();
  
  if(this.form) {
    var inputs = this.form.getElementsByTagName("INPUT");
    
    if(inputs) {
      for(var i = 0; i < inputs.length; ++i) {
        inputs[i].value = "";
      }
    }
    
    var texts = this.form.getElementsByTagName("TEXTAREA");
    
    if(texts) {
      for(var i = 0; i < texts.length; ++i) {
        texts[i].value = "";
      }
    }
  }
}

var requestFailure = function(o) {
  alert("Request failed, status: " + o.status + "\nThis is an error, please contact your system administrator.");
}

YAHOO.util.Event.addListener("loginLink", "click", showLogin);
YAHOO.util.Event.addListener("logoutLink", "click", showLogout);
YAHOO.util.Event.addListener("changePasswordLink", "click", showPassword);
YAHOO.util.Event.addListener("accountInfoLink", "click", showInfo);

var variables = new Object();
var loadPageAdminContent = null;
variables['LoggedIn']    = false;

var checkLoginStatus = function() {
  var checkURL = url + "services/requests/doCheckLogin";
  
  YAHOO.util.Connect.asyncRequest('GET', checkURL, { success:checkLoginRequestSuccess }, null); 
}

var checkLoginRequestSuccess = function(o) {
  var responseNode  = o.responseXML;
  var loginStatuses = responseNode.getElementsByTagName('Item');
  
  if(loginStatuses && loginStatuses.length > 0 && loginStatuses[0].getAttribute('value') == 'Y') {
    variables['LoggedIn'] = true;
  } else {
    variables['LoggedIn'] = false;
  }
  
  if(loadPageAdminContent != null && typeof(loadPageAdminContent) == 'function' && variables['LoggedIn']) {
    YAHOO.util.Event.onContentReady("data", loadPageAdminContent);
  }
}

var removeAdminItems = function() {
  var adminItems = YAHOO.util.Dom.getElementsByClassName("adminFeature");
  
  for(var i = adminItems.length - 1; i >= 0; --i) {
    Display.remove(adminItems[i]);
  }
}

checkLoginStatus();