Files
2014-05-30 10:31:51 -07:00

629 lines
19 KiB
JavaScript

//Fade constants.//
var userContentFadeOut = 800;
var userContentFadeIn = 1400;
var mainFadeImageDelay = 0;
var mainFadeImagePeriod = 2000;
var mainFadeTitleDelay = 500;
var mainFadeTitlePeriod = 1500;
var mainFadeContentDelay = 1500;
var mainFadeContentPeriod = 1000;
//Variables used to show/hide the top content and make the buttons along the bottom function.//
var selectedTextId;
var selectedImageId;
var selectedBlackTextImage;
var visibleContentBlock;
//Variables used by the login dialog.//
var isDisplayingLogin = false;
//Login information.//
var isLoggedIn = false;
var canDownloadPresentationBrief = false;
var userName = 0;
//
// Initializes the main view.
//
function init() {
checkLogin(240000);
}
//
// Sends a ping to the server on a regular basis to prevent loss of the session and to check the logged in status of the user.
// Updates the logLink to display Log In or Log Out depending on the login state.
// interval: The time increment between pings to the server, in milliseconds.
//
function checkLogin(interval) {
var url = "/PingController.java";
var httpRequest = null;
if(window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
return;
}
if(httpRequest != null) {
httpRequest.onreadystatechange = function() {
if(httpRequest.readyState == 4) {
if((httpRequest.status == 200) || (httpRequest.status == 0)) {
if(httpRequest.responseText != "" && !isLoggedIn) {
document.getElementById("logLink").innerHTML = "Log Out";
isLoggedIn = true;
if(httpRequest.responseText != userName) {
userName = httpRequest.responseText;
document.getElementById("welcomeSpan").innerHTML = "Logged in as: " + userName;
}
}
else if(httpRequest.responseText == "" && isLoggedIn) {
document.getElementById("logLink").innerHTML = "Log In";
document.getElementById("welcomeSpan").innerHTML = "";
isLoggedIn = false;
}
if(interval > 0) {
setTimeout("checkLogin('" + interval + "')", interval);
}
}
}
}
httpRequest.open("POST",url,true);
httpRequest.send(null);
}
}
//
// Called by the login link at the top of the main page.
// Displays the login dialog.
//
function showLogin() {
var loginDiv = document.getElementById('loginDiv');
var changePasswordDiv = document.getElementById('changePasswordDiv');
var resetPasswordDiv = document.getElementById('resetPasswordDiv');
var resetPasswordSuccessDiv = document.getElementById('resetPasswordSuccessDiv');
var emailNotValidatedDiv = document.getElementById('emailNotValidatedDiv');
var validationEmailResentDiv = document.getElementById('validationEmailResentDiv');
var errorTextControl = document.getElementById("errorText");
loginDiv.style.display = 'block';
loginDiv.style.visibility = 'visible';
changePasswordDiv.style.display = 'none';
changePasswordDiv.style.visibility = 'hidden';
resetPasswordDiv.style.display = 'none';
resetPasswordDiv.style.visibility = 'hidden';
resetPasswordSuccessDiv.style.display = 'none';
resetPasswordSuccessDiv.style.visibility = 'hidden';
emailNotValidatedDiv.style.display = 'none';
emailNotValidatedDiv.style.visibility = 'hidden';
validationEmailResentDiv.style.display = 'none';
validationEmailResentDiv.style.visibility = 'hidden';
displayDialog("dialogBackground", "loginDialog");
var focusComponent = document.getElementById("userNameInput");
if(focusComponent != null) {
focusComponent.focus();
if(focusComponent.type != null && focusComponent.type == "text") {
focusComponent.select();
}
}
if(errorTextControl) {
errorTextControl.innerHTML = "";
errorTextControl.style.visibility = "hidden";
errorTextControl.style.display = "block";
}
}
//
// Switches between visible components.
// fromComponentId: The component ID that will become invisible.
// toComponentId: The component ID that will become visible.
// focusComponentId: The component ID that will gain focus.
// fade: Whether a fade should occur. This should be non-null if true.
function switchComponents(fromComponentId, toComponentId, focusComponentId, fade) {
var errorText = document.getElementById("errorText");
if(errorText) {
errorText.innerHTML = "";
errorText.style.visibility = "hidden";
}
replaceFade(fromComponentId, fade ? userContentFadeOut : 0, 5, toComponentId, fade ? userContentFadeIn : 0, 5, focusComponentId);
}
//
// Called by the mouse over and out functions of the images and text associated with the main menu items.
//
function mainMenuRollover(textImageId, imageUrl) {
if(selectedTextId != textImageId) {
document.getElementById(textImageId).src = imageUrl;
}//if//
}//mainMenuRollover()//
//
// Opens terms of use for the site.
//
function openTermsOfUse() {
var w = window.open('/legal/TermsOfUse.txt', 'Terms of Use', 'width=800,height=700,status,scrollbars,resizable');
w.focus();
}
//
// Opens privacy policy for the site.
//
function openPrivacyPolicy() {
var w = window.open('/legal/PrivacyPolicy.txt', 'Privacy Policy', 'width=800,height=700,status,scrollbars,resizable');
w.focus();
}
//
// Opens a window to send a message to the company.
//
function contactUsClicked() {
var w = window.open('/secure/ContactUsViewController.java', 'ContactUsEditor', 'width=800,height=700,status,scrollbars,resizable');
w.focus();
}
//
// Sets the error text element. The error text element is currently only used by the login view portion.
//
function setErrorText(errorText) {
var errorTextControl = document.getElementById("errorText");
if(errorTextControl) {
errorTextControl.innerHTML = errorText;
errorTextControl.style.visibility = "visible";
}
}
//
// Clears the error text element. The error text element is currently only used by the login view portion.
//
function clearErrorText() {
var errorTextControl = document.getElementById("errorText");
if(errorTextControl) {
errorTextControl.innerHTML = "";
errorTextControl.style.visibility = "hidden";
}
}
//
// Sends the login form data to the server.
//
function sendLoginForm(form, successPathName) {
var changePassword = form.changePasswordCheckbox && form.changePasswordCheckbox.checked;
var anonymous = form.anonymousLoginCheckbox && form.anonymousLoginCheckbox.checked;
if(!successPathName) {
successPathName = "/secure/authenticated/index.html";
}
if(anonymous || validateLoginForm(form)) {
var login = form.userNameInput.value;
var password = form.userPasswordInput.value;
sendLoginData(login, password, changePassword anonymous, successPathName);
}
}
//
// Sends the login data to the server.
//
function sendLoginData(login, password, changePassword, anonymous, successPathName) {
var url;
var request = null;
if(!successPathName) {
successPathName = "/secure/authenticated/index.html";
}
if(anonymous) {
url = "/secure/LoginController.java?login=" + encodeURIComponent("anonymous");
}
else {
url = "/secure/LoginController.java?login=" + encodeURIComponent(login) + "&password=" + encodeURIComponent(password) + "&changePassword=" + encodeURIComponent(changePassword ? "true" : "false");
}
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
return;
}
if(request != null) {
request.open("POST", url, false);
request.send(null);
if((request.status == 200) || (request.status == 0)) {
if(request.responseText.indexOf("success") == 0) {
//Load the logged in page.//
location.pathname = successPathName;
}
else if(request.responseText.indexOf("change-password") == 0) {
switchComponents('loginDiv', 'changePasswordDiv', 'newPasswordInput');
document.getElementById('oldPasswordHiddenInput').value = password;
document.getElementById('userLoginHiddenInput').value = login;
}
else if(request.responseText.indexOf("email-not-validated") == 0) {
switchComponents('loginDiv', 'emailNotValidatedDiv', 'userEmailAddressInput');
//The response text will be followed by the user id and then the user's email address separated by colons.//
document.getElementById("revalidateEmailForm").userIdInput.value = request.responseText.substring(request.responseText.indexOf(":") + 1, request.responseText.lastIndexOf(":"));
document.getElementById("revalidateEmailForm").userEmailAddressInput.value = request.responseText.substring(request.responseText.lastIndexOf(":") + 1, request.responseText.length);
clearErrorText();
}
else {
//Unexpected: For now just show a bad login.//
if(anonymous) {
setErrorText("Anonymous login failed for an unknown reason.");
}
else {
setErrorText("Invalid login name or password.");
}
}
}
else {
//Show the error text to the user: bad login.//
if(anonymous) {
setErrorText("Anonymous login failed for an unknown reason.");
}
else {
setErrorText("Invalid login name or password.");
}
}
}
}
//
// Validates the login form.
//
function validateLoginForm(form) {
var login = form.login.value;
var password = form.password.value;
var errorText = document.getElementById("errorText");
if(login == null) {
setErrorText("A login and password must first be provided.");
return false;
}
else if(login.toLowerCase() == "anonymous") {
setErrorText("Anonymous is not a valid login name.");
return false;
}
else {
return true;
}
}
//
// Sends the change password form data to the server.
//
function sendChangePasswordForm(form, successPathName) {
var login = form.userLoginHiddenInput.value;
var oldPassword = form.oldPasswordHiddenInput.value;
var newPassword = form.newPasswordInput.value;
var url = "/secure/LoginController.java?login=" + encodeURIComponent(login) + "&password=" + encodeURIComponent(oldPassword) + "&newPassword=" + encodeURIComponent(newPassword);
var request = null;
var isNewPasswordValid = newPassword != null && newPassword.length >= 4;
if(!successPathName) {
successPathName = "/secure/authenticated/index.html";
}
if(!isNewPasswordValid) {
setErrorText("The password must be a minimum of 4 characters long.");
}
else {
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
return;
}
if(request != null) {
request.open("POST", url, false);
request.send(null);
if((request.status == 200) || (request.status == 0)) {
if(request.responseText == "success") {
//Load the logged in page.//
location.href = successPathName;
}
else if(request.responseText == "bad-password") {
setErrorText("The password must be a minimum of 4 characters long.");
}
else if(request.responseText.indexOf("email-not-validated") == 0) {
switchComponents('loginDiv', 'emailNotValidatedDiv', 'userEmailAddressInput');
//The response text will be followed by the user id and then the user's email address separated by colons.//
document.getElementById("userIdInput").value=request.responseText.substring(request.responseText.indexOf(":") + 1, request.responseText.lastIndexOf(":"));
document.getElementById("userEmailAddressInput").value=request.responseText.substring(request.responseText.lastIndexOf(":") + 1, request.responseText.length);
clearErrorText();
}
else {
//Unexpected: For now just show a bad login.//
setErrorText("Invalid login name or password.");
}
}
else {
//Show the error text to the user: bad login.//
setErrorText("Invalid login name or password.");
}
}
}
}
//
// Sends the reset password form data to the server.
//
function sendResetPasswordForm(form) {
if(validateResetPasswordForm(form)) {
var login = form.resetPasswordUserNameInput.value;
var email = form.resetPasswordEmailInput.value;
var url = "/secure/ResetPasswordController.java?login=" + encodeURIComponent(login) + "&email=" + encodeURIComponent(email);
var request = null;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
return;
}
if(request != null) {
request.open("POST", url, false);
request.send(null);
if((request.status == 200) || (request.status == 0)) {
if(request.responseText == "success") {
switchComponents('resetPasswordDiv', 'resetPasswordSuccessDiv', null);
}
else if(request.responseText.indexOf("bad-email") == 0) {
setErrorText("Invalid email name.");
}
else if(request.responseText.indexOf("bad-login") == 0) {
setErrorText("Invalid login address.");
}
else {
//Unexpected: For now just show a bad data msg.//
setErrorText("Invalid login name or email address.");
}
}
else {
//Show the error text to the user: bad data.//
setErrorText("Invalid login name or email address.");
}
}
}
}
//
// Validates the reset password form.
//
function validateResetPasswordForm(form) {
return true;
}
//
// Requests a reminder email be sent to the address containing the user's login name.
//
function emailLoginName(emailAddress) {
var url = "/secure/EmailLoginNameController.java?email=" + emailAddress;
var request;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
if(request != null) {
request.open("POST", url, false);
request.send(null);
setErrorText("An email will be sent shorty containing your login name.");
}
}
//
// Sends the revalidate email request to the server.
//
function sendRevalidateEmailForm(form) {
var email = form.userEmailAddressInput.value;
var userId = form.userIdInput.value;
var url;
var request = null;
if(email != null && email.length > 0) {
var isEmailValid = validateNewUserEmail(email, false) == 0;
if(isEmailValid) {
clearErrorText();
url = "/secure/RevalidateEmailController.java?id=" + encodeURIComponent(userId) + "&email=" + encodeURIComponent(email);
}
else {
setErrorText("A valid email address is required to validate the account.");
}
}
else {
clearErrorText();
url = "/secure/RevalidateEmailController.java?id=" + encodeURIComponent(userId);
}
if(url != null) {
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
request = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
return;
}
if(request != null) {
request.onreadystatechange = function() {
if(request.readyState == 4) {
if((request.status == 200) || (request.status == 0)) {
if(request.responseText == "success") {
//Display the success message.//
switchComponents('emailNotValidatedDiv', 'validationEmailResentDiv', null);
clearErrorText();
}
else if(request.responseText == "failed") {
//Display a message indicating that the server is unable to send email at the moment.//
setErrorText("The server is having a problem sending email at the moment. We appologize for the inconvience, please try again later.");
}
else {
//Unexpected: For now just show a bad login.//
setErrorText("The server is having a problem processing your request at this time. We appologize for the inconvience, please try again later.");
}
}
else {
//Show the error text to the user: bad login.//
setErrorText("The server is having a problem processing your request at this time. We appologize for the inconvience, please try again later.");
}
}
}
request.open("POST", url, true);
request.send(null);
}
}
}
//
//
// BEGIN DIALOG CODE
//
//
var visibleDialog = null;
var visibleBackground = null;
var oldResizeHandler = null;
var dialogOffsetMetrics = null;
var dialogOffsetNumber = null;
//
// Displays the given dialog with the given background panel.
// backgroundId: The optional identifier for the background panel being used.
// dialogId: The non-optional identifier of the dialog being displayed.
// verticalOffset: The pixel offset from the top of the window to the top of the dialog. This may be a percent, in which case it is the percent of the window not taken by the dialog that occurs between the dialog top and the window top. Example: 10px, 10%.
//
function displayDialog(backgroundId, dialogId, verticalOffset) {
var offsetRegex = /(\d+)(px|%)?/i;
var regexResults = verticalOffset == null ? null : offsetRegex.exec(verticalOffset);
if(regexResults != null) {
dialogOffsetNumber = regexResults[1];
dialogOffsetMetrics = regexResults[2];
}
else {
dialogOffsetNumber = 33;
dialogOffsetMetrics = "%";
}
hideDialog();
visibleDialog = document.getElementById(dialogId);
if(backgroundId != null) {
visibleBackground = document.getElementById(backgroundId);
visibleBackground.style.display = "block";
visibleBackground.style.visibility = "visible";
}
else {
visibleBackground = null;
}
//Make the dialog visible.//
visibleDialog.style.display = "block";
visibleDialog.style.visibility = "visible";
//Size things.//
oldResizeHandler = window.onresize;
window.onresize = resizeWindow;
resizeWindow();
}
function hideDialog() {
if(visibleDialog) {
if(visibleBackground) {
visibleBackground.style.display = "none";
visibleBackground.style.visibility = "hidden";
visibleBackground = null;
}
visibleDialog.style.display = "none";
visibleDialog.style.visibility = "hidden";
visibleDialog = null;
window.onresize = oldResizeHandler;
oldResizeHandler = null;
}
}
function resizeWindow() {
if(visibleDialog) {
var windowHeight = 0;
var windowWidth = 0;
if(navigator.appName.indexOf("Microsoft") != -1) {
var htmlHeight = document.body.parentNode.clientHeight;
windowHeight = htmlHeight < window.screen.height ? htmlHeight : window.screen.height; //document.body.offsetHeight;
//alert("window height:" + windowHeight + "; html height:" + htmlHeight + "; offset height:" + document.body.offsetHeight);
windowWidth = document.body.offsetWidth;
}
else {
windowHeight = window.innerHeight;
windowWidth = window.innerWidth;
}
//alert(windowHeight + " " + windowWidth + " " + visibleDialog.clientHeight + " " + visibleDialog.clientWidth);
var boundingRect = visibleDialog.getBoundingClientRect();
if(visibleBackground) {
visibleBackground.style.top = 0;
visibleBackground.style.left = 0;
visibleBackground.style.bottom = windowHeight;
visibleBackground.style.right = windowWidth;
visibleBackground.style.height = windowHeight;
visibleBackground.style.width = windowWidth;
}
if(dialogOffsetMetrics == "%") {
visibleDialog.style.top = Math.round(((windowHeight - visibleDialog.clientHeight) / 100) * dialogOffsetNumber) + "px";
}
else {
visibleDialog.style.top = dialogOffsetNumber;
}
//Always center on the horizontal axis.//
visibleDialog.style.left = Math.round((windowWidth - visibleDialog.clientWidth) / 2) + "px";
}
if(oldResizeHandler) {
oldResizeHandler();
}
}
//
//
// END DIALOG CODE
//
//