var num = 1; //used on sso pages in which the user can select a security image, to keep track of pages.
var symbols = [ '`', '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '{', '}', '[', ']', '\\', '|', ';', ':', '\'', '"', ',', '<', '.', '>', '/', '?' ];
var errorClass = "error";
var selectErrorClass = "errorSelectTag";
var validDay = true;
var validMonth = true;
var loginButtonInnerHTML = "";

/************************************************************
* Rollover Initialization
* @author A15047
*************************************************************/
function dijitToolTip(title, content, image, divForTitle, divForContent) {
	new dijit.Tooltip( {
	    connectId : [ dojo.byId(image) ],
	    label :getToolTipValue(title, content, divForTitle, divForContent)
	});
}

/************************************************************
* Rollover Content
* @author A15047
*************************************************************/
function getToolTipValue(title, content, divForTitle, divForContent) {
	tooltipContents(title, content, divForTitle, divForContent);
	return dojo.byId(divForTitle).parentNode.innerHTML;
}

/************************************************************
* Connecting Rollover to div on page
* @author A15047
*************************************************************/
function tooltipContents(title, content, divForTitle, divForContent) {
	
	if (title != "") {
		dojo.byId(divForTitle).className = "popupTitle";
		dojo.byId(divForTitle).innerHTML = title;
	}
	
	dojo.byId(divForContent).className = "popupContent";
	dojo.byId(divForContent).innerHTML = content;
}

function getDocHeight() {
	var D = document;
	return Math.max(Math.max(D.body.scrollHeight, D.documentElement.scrollHeight), Math.max(D.body.offsetHeight, D.documentElement.offsetHeight), Math.max(D.body.clientHeight,
	        D.documentElement.clientHeight));
}

function getDocWidth() {
	var D = document;
	return Math.max(Math.max(D.body.scrollWidth, D.documentElement.scrollWidth), Math.max(D.body.offsetWidth, D.documentElement.offsetWidth), Math.max(D.body.clientWidth,
	        D.documentElement.clientWidth));
}

function cancelLightBox() {
	document.getElementById("dojolightBox").className = "";
	document.getElementById("greyOutPage").className = "";
	$('greyOutPage').style.height = getDocHeight() + "px";
	$('greyOutPage').style.width = getDocWidth() + "px";
}

function profileCancelLightBox() {
	document.getElementById("dojolightBoxProfile").className = "";
	document.getElementById("greyOutPageProfile").className = "";
	$('greyOutPageProfile').style.height = getDocHeight() + "px";
	$('greyOutPageProfile').style.width = getDocWidth() + "px";
}

function changeEvent(ev) {
	$('profileEventForChange').value = ev;
	if (ev != "changeSecurityQuestion") {
		$('profileEventForChangePage').value = ev + "Page";
	} else {
		$('profileEventForChangePage').value = "memberViewChangeSecurityQsPage";
	}
}

function closeDialog(id, greyId) {
	//dijit.byId(id).hide();  For an unknown reason, this method gives a runtime error saying Object #<Object> has no method 'byId'
	document.getElementById(id).className = "hide";
	document.getElementById(greyId).className = "hide";
}

//This function is used on the Select Method page of the Forgot password flow to decide which form to use
function setHref(id) {
	$('forgotPassMethodContinue').setAttribute('href', "javascript:validate(document.forgotPassword" + id + ", 'validateSelectMethod');");
	$('body').setAttribute('onkeypress', 'if (submitOnEnter(this.form,event)) { validate(document.forgotPassword' + id + ', \'validateSelectMethod\');}');
}

function decrement() {
	num = Math.max(1, --num);
	if (num == 1) {
		$("lastRSAPage").style.display = "none";
	} else {
		$("lastRSAPage").style.display = "inline";
		$("nextRSAPage").style.display = "inline";
	}
}
function increment() {
	num = Math.min(5, ++num);
	if (num == 5) {
		$("nextRSAPage").style.display = "none";
	} else {
		$("lastRSAPage").style.display = "inline";
		$("nextRSAPage").style.display = "inline";
	}
}

function getNextId() {
	window.location = "#pic_container" + num;
}

function setSelectBox(category) {
	for ( var i = 0; i < 6; i++) {
		if (document.regForm.category.options[i].value == category) {
			document.regForm.category.options[i].setAttribute("selected", "selected");
		}
	}
}

function setNewImage() {
	var rads = document.regForm.imageRadio;
	for ( var i = 0; i < rads.length; i++) {
		if (rads[i].checked) {
			document.imageForm.securityImage.value = rads[i].value;
		}
	}
}

function validate(form, method) {
	
	hideLoginButton();
	
	var inputArray = getRequiredFields();
	
	var validationResult = window[method](inputArray);
	
	if (validationResult == true) {
		$("errorMessage").innerHTML = "";
		$("errorMessageContainer").style.display = "none";
		form.submit();
	} else {
		showLoginButton();
		if ($('serverErrorDiv') != null) {
			$('serverErrorDiv').style.display = "none";
		}
		$("errorMessage").innerHTML = validationResult;
		$("errorMessageContainer").style.display = "inline";
		return;
	}
}

/**HELPER FUNCTIONS**/

function hideLoginButton() {
	if ($('processLoginDiv')) {
		loginButtonInnerHTML = $('processLoginDiv').innerHTML;
		$('processLoginDiv').innerHTML = "<span class='ssoProcessMsg'>Please wait...</span>";
	}
}

function showLoginButton() {
	if ($('processLoginDiv')) {
		$('processLoginDiv').innerHTML = loginButtonInnerHTML;
	}
}

function isDate(id) {
	if ((id == "month") || (id == "day") || (id == "year")) {
		return true;
	} else {
		return false;
	}
}

function validateDate(date) {
	
	var dayOrMonth = /\d\d/;
	var year = /\d\d\d\d/;
	
	if ((date == "month") || (date == "day")) {
		if (!dayOrMonth.test($(date).value) || !(isInValidDateRange(date))) {
			if (date == "day") {
				validDay = false;
			} else if (date == "month") {
				validMonth = false;
			}
		} else {
			if (date == "day") {
				validDay = true;
			} else if (date == "month") {
				validMonth = true;
			}
		}
	} else {
		if (validDay && validMonth) {
			return year.test($(date).value);
		} else {
			return false;
		}
	}
	
	return (validDay && validMonth);
}

function isInValidDateRange(date) {
	var dateNum = 0;
	
	if ($(date).value.indexOf("0") == 0) {
		dateNum = (parseInt($(date).value.substring(1, 2)));
	} else {
		dateNum = parseInt($(date).value);
	}
	
	if (date == "month") {
		return ((dateNum <= 12) && (dateNum > 0));
	} else if (date == "day") {
		return ((dateNum <= 31) && (dateNum > 0));
	}
}

function isValidPassword(id, username) {
	var numEx = /\d+/;
	var numOfDigits = 0;
	if (($(id).value.indexOf(" ") > 0) || ($(id).value.length < 7) || ($(id).value.search(numEx) < 0)) {
		return false;
	}
	
	for ( var i = 0; i < $(id).value.length; i++) {
		if (numEx.test($(id).value.charAt(i))) {
			numOfDigits++;
		}
	}
	if (numOfDigits == $(id).value.length) {
		return false;
	}
	
	return true
}

function validateRadios(id) {
	var radiosByName = document.getElementsByName($(id).value);
	
	for ( var i = 0; i < radiosByName.length; i++) {
		if (radiosByName[i].checked) {
			return true;
		}
	}
	return false;
}

function getRequiredFields() {
	
	var elementArray = document.getElementsByTagName("input");
	var selectArray = document.getElementsByTagName("select");
	var requiredInputs = new Array();
	var requiredCounter = 0;
	
	for ( var i = 0; i < elementArray.length; i++) {
		if (elementArray[i].getAttribute("REQUIRED") != null) {
			requiredInputs[requiredCounter] = elementArray[i];
			requiredCounter++;
		}
	}
	
	for ( var i = 0; i < selectArray.length; i++) {
		if (selectArray[i].getAttribute("REQUIRED") != null) {
			requiredInputs[requiredCounter] = selectArray[i];
			requiredCounter++;
		}
	}
	
	return requiredInputs;
}

function getLabel(id) {
	return "lbl" + id.substring(3);
}

function toggleValue() {
	if ($("rememberMeCheckbox").checked == true) {
		$("rememberMeCheckbox").value = "rememberMe";
		$("rememberMeCheckboxValue").value = "on";
	} else {
		$("rememberMeCheckbox").value = "doNotRememberMe";
		$("rememberMeCheckboxValue").value = "off";
	}
}

function setValueOfUN(id) {
	document.PrimaryloginForm.username.value = id.value;
}

function handlePersistentUserName() {
	var cookieValue = getCookieValue('persistentUserNameCookie');
	if (cookieValue.length > 0) {
		if (document.getElementById('txtusername') != null) {
			document.getElementById('txtusername').value = cookieValue.substring(0, 4) + "*****";
			document.PrimaryloginForm.username.value = cookieValue;
		}
		if (document.getElementById('rememberMeCheckbox') != null) {
			document.getElementById('rememberMeCheckbox').checked = true;
			document.getElementById('rememberMeCheckboxValue').value = "on";
		}
	}
}

function areThereErrors(args) {
	for ( var i = 0; i < args.length; i++) {
		if (isDate(args[i].id)) {
			if ($("lblDate").className == errorClass) {
				return true;
			}
		} else if (args[i].type != "hidden") {
			if ($(args[i].id).tagName == "SELECT") {
				if ($(getLabel(args[i].id)).className == selectErrorClass) {
					return true;
				}
			} else if ($(getLabel(args[i].id)).className == errorClass) {
				return true;
			}
		}
	}
	return false;
}

function toggleAttr(id) {
	if ($(id).getAttribute("REQUIRED") != null) {
		$(id).removeAttribute("REQUIRED");
	} else {
		$(id).setAttribute("REQUIRED", "");
	}
}

function unContainsAccount(id) {
	var unTestExp = /[A-Za-z]+/;
	
	if (($(id).value.indexOf("N") == 0) || ($(id).value.indexOf("n") == 0)) {
		return !unTestExp.test($(id).value.substring(1));
	}
	
	return false;
}

function containsSymbols(id) {
	for ( var i = 0; i < symbols.length; i++) {
		if ($(id).value.indexOf(symbols[i]) >= 0) {
			return true;
		}
	}
	return false;
}

function beginsWithNumber(value) {
	var numEx = /^\d/;
	
	return numEx.test(value);
}

/**VALIDATION FUNCTIONS**/

function validateAccountFields(required) {
	var errorMsg = "Some of your account informaton is missing or incorrect. Please complete or correct items in red.";
	
	for ( var i = 0; i < required.length; i++) {
		var label = getLabel(required[i].id);
		
		if (isDate(required[i].id)) {
			if (!validateDate(required[i].id)) {
				$("lblDate").className = errorClass;
			} else {
				$("lblDate").className = "";
			}
		} else if (dojo.trim(required[i].value) == "") {
			$(label).className = errorClass;
		} else if (required[i].id == "txtpolicynumber") {
			if (!validatePolicyNumber(required[i])) {
				$(label).className = errorClass;
			} else {
				$(label).className = "";
			}
		} else {
			$(label).className = "";
		}
		
		if ((i == (required.length - 1)) && (areThereErrors(required))) {
			return errorMsg;
		}
	}
	
	return true;
	
}

function validateSecurityQuestion(required) {
	var errorMsg1 = "Please answer the question(s) below.";
	var errorMsg2 = "Some of the required information is missing or incorrect. Please complete or correct items in red.";
	
	for ( var i = 0; i < required.length; i++) {
		var label = getLabel(required[i].id);
		
		if (required[i].id == "passMethodName") {
			//ignore
		} else if (dojo.trim(required[i].value) == "") {
			$(label).className = errorClass;
			if (required[i].id == "txttempPass") {
				return errorMsg2;
			}
		} else {
			$(label).className = "";
		}
		
		if ((i == (required.length - 1)) && (areThereErrors(required))) {
			return errorMsg1;
		}
	}
	
	return true;
}

function validateEnteredUsername(required) {
	var errorMsg = "Please enter your user name.";
	
	for ( var i = 0; i < required.length; i++) {
		var label = getLabel(required[i].id);
		
		if (dojo.trim(required[i].value) == "") {
			$(label).className = errorClass;
		} else {
			$(label).className = "";
		}
		
		if ((i == (required.length - 1)) && (areThereErrors(required))) {
			return errorMsg;
		}
	}
	
	return true;
}

function validateEnteredPassword(required) {
	var errorMsg = "Please enter your password.";
	
	for ( var i = 0; i < required.length; i++) {
		var label = getLabel(required[i].id);
		
		if (dojo.trim(required[i].value) == "") {
			$(label).className = errorClass;
		} else {
			$(label).className = "";
		}
		
		if ((i == (required.length - 1)) && (areThereErrors(required))) {
			return errorMsg;
		}
	}
	
	return true;
}

function validateSelectedImage(required) {
	var errorMsg = "Please select a security image to continue.";
	
	for ( var i = 0; i < required.length; i++) {
		
		if (!validateRadios(required[i].id)) {
			return errorMsg;
		}
	}
	
	return true;
}

function validateSelectedQuestions(required) {
	var errorMsg = "Some of the required information is missing. Please select and answer three security questions.";
	
	for ( var i = 0; i < required.length; i++) {
		var label = getLabel(required[i].id);
		
		if ((dojo.trim(required[i].value) == "") || ((required[i].type == "text") && (required[i].value.length < 2))) {
			if ($(required[i].id).tagName == "SELECT") {
				$(label).className = selectErrorClass;
			} else {
				$(label).className = errorClass;
			}
		} else {
			if ($(required[i].id).tagName == "SELECT") {
				$(label).className = "";
			} else {
				$(label).className = "";
			}
		}
		
		if ((i == (required.length - 1)) && (areThereErrors(required))) {
			return errorMsg;
		}
	}
	
	return true;
}

function validateSelectedEmail(required) {
	var errorMsg = "Please select or enter a primary email address in order to continue.";
	
	for ( var i = 0; i < required.length; i++) {
		
		if (dojo.trim(required[i].value) == "") {
			return errorMsg;
		} else if ((required[i].tagName == "SELECT") && !isValidEmailFormat(required[i].options[required[i].selectedIndex].text)) {
			return errorMsg;
		} else if ((required[i].tagName == "INPUT") && !isValidEmailFormat(required[i].value)) {
			return errorMsg;
		}
	}
	
	return true;
}

function validateNewLoginInformation(required) {
	var errorMsg1 = "Please select a user name that does not contain the following characters: <br/>' \" [ ] ; / \\ = , + < > ( ) * & ! { }";
	var errorMsg2 = "Please select a user name that does not contain your account or policy number.";
	var errorMsg3 = "Please select a user name that does not contain your account or policy number nor the following characters: ' \" [ ] ; / \\ = , + < > ( ) * & ! { }";
	var errorMsg4 = "Please select a password that contains at least seven characters and includes one number.";
	var errorMsg5 = "Please select a password that does not contain your first name, last name or user name.";
	var errorMsg6 = "Please select a password that contains at least seven characters and one number, and does not contain your first name, last name or user name.";
	var errorMsg7 = "The passwords you entered do not match. Please try again.";
	var errorMsg8 = "Some of the required information is missing or incorrect. Please complete or correct items in red.";
	var errorMsg9 = "Please select a user name that contains 6-16 characters.";
	var errorMsg10 = "Please select a user name that does not begin with a number."
	var errorToDisplay = "";
	
	var fname = " ";
	var lname = " ";
	var username = " ";
	var pNum = " ";
	
	if ($('txtusername') != null) {
		username = $('txtusername').value.toUpperCase();
	} else if ($('username') != null) {
		username = $('username').value.toUpperCase();
	}
	if ($('lastname') != null) {
		lname = $('lastname').value.toUpperCase();
	} else if ($('lname') != null) {
		lname = $('lname').value.toUpperCase();
	}
	if ($('firstname') != null) {
		fname = $('firstname').value.toUpperCase();
	} else if ($('fname') != null) {
		fname = $('fname').value.toUpperCase();
	}
	
	for ( var i = 0; i < required.length; i++) {
		var label = getLabel(required[i].id);
		
		if (dojo.trim(required[i].value) == "") {
			$(label).className = errorClass;
			errorToDisplay = errorMsg8;
		} else if ((required[i].id != "txtusername") && (($("txtnewPassword").value == "") || ($("txtconfirm").value == ""))) {
			if (((required[i].id == "txtnewPassword") && ($("txtconfirm").value == "")) || ((required[i].id == "txtconfirm") && ($("txtnewPassword").value == ""))) {
				$(label).className = "";
				errorToDisplay = errorMsg8;
			}
		} else if (required[i].id == "txtusername") {
			if ((($("txtnewPassword").value == "") || ($("txtconfirm").value == ""))) {
				$(label).className = "";
				errorToDisplay = errorMsg8;
			} else if (unContainsAccount(required[i].id) && containsSymbols(required[i].id)) {
				errorToDisplay = errorMsg3;
				$(label).className = errorClass;
			} else if (containsSymbols(required[i].id)) {
				errorToDisplay = errorMsg1;
				$(label).className = errorClass;
			} else if (unContainsAccount(required[i].id)) {
				errorToDisplay = errorMsg2;
				$(label).className = errorClass;
			} else if (required[i].value.length < 6) {
				errorToDisplay = errorMsg9;
				$(label).className = errorClass;
			} else if (beginsWithNumber(required[i].value)) {
				errorToDisplay = errorMsg10;
				$(label).className = errorClass;
			} else {
				$(label).className = "";
			}
		} else if ((required[i].type == "password")) {
			if ((username != "")
			        && ((required[i].value.toUpperCase().indexOf(username) >= 0) || (required[i].value.toUpperCase().indexOf(fname) >= 0) || (required[i].value.toUpperCase().indexOf(lname) >= 0))
			        && !isValidPassword(required[i].id)) {
				errorToDisplay = errorMsg6;
				$(label).className = errorClass;
			} else if ((username != "")
			        && ((required[i].value.toUpperCase().indexOf(username) >= 0) || (required[i].value.toUpperCase().indexOf(fname) >= 0) || (required[i].value.toUpperCase().indexOf(lname) >= 0))) {
				errorToDisplay = errorMsg5;
				$(label).className = errorClass;
			} else if (!isValidPassword(required[i].id)) {
				errorToDisplay = errorMsg4;
				$(label).className = errorClass;
			} else if ($("txtnewPassword").value != $("txtconfirm").value) {
				if (errorToDisplay != errorMsg8) {
					errorToDisplay = errorMsg7;
					$(label).className = errorClass;
				}
			} else {
				if (($("txtnewPassword").value != "") && ($("txtconfirm").value != "")) {
					$("txtnewPassword").className = "";
					$("txtconfirm").className = "";
				}
				$(label).className = "";
			}
		}
		
		if ((i == (required.length - 1)) && (areThereErrors(required))) {
			return errorToDisplay;
		}
	}
	
	return true;
}

function validateSelectMethod(required) {
	var errorMsg = "Please select how you would like to reset your password.";
	
	for ( var i = 0; i < required.length; i++) {
		
		if (required[i].id == "passMethodName") {
			if (!(validateRadios(required[i].id))) {
				return errorMsg;
			}
		} else if (validateSecurityQuestion(required) != true) {
			return validateSecurityQuestion(required);
		}
		
	}
	
	return true;
}

function validateKBA(required) {
	var errorMsg = "Please answer the question(s) below.";
	
	for ( var i = 0; i < required.length; i++) {
		
		if (required[i].type == "hidden") {
			if (!(validateRadios(required[i].id))) {
				return errorMsg;
			}
		}
		
	}
	
	return true;
}

/* Profile Cancel Methods */

function cancelPassword() {
	/*on cancel, change the event and page to call the mutualCancelPasswordUpdate event
	 * so that the user attempts can be cleared out and a message displayed to to the user.*/
	document.userProfile.event.value = "memberCancelPasswordUpdate";
	document.userProfile.pagename.value = "memberCancelPasswordUpdatePage";
	document.userProfile.submit();
}

function cancelUpdateImage() {
	/*on cancel, change the event and page to call the mutualCancelPasswordUpdate event
	 * so that the user attempts can be cleared out and a message displayed to to the user.*/
	document.userProfile.event.value = "memberCancelSecurityImageUpdate";
	document.userProfile.pagename.value = "memberCancelSecurityImageUpdatePage";
	document.userProfile.submit();
}

function cancelUpdateQuestions() {
	/*on cancel, change the event and page to call the mutualCancelPasswordUpdate event
	 * so that the user attempts can be cleared out and a message displayed to to the user.*/
	document.userProfile.event.value = "memberCancelSecurityQuestionUpdate";
	document.userProfile.pagename.value = "memberCancelSecurityQuestionUpdatePage";
	document.userProfile.submit();
}

/*FSO Script for generating the Flash Shared Object for RSA*/

function fsoScript(ip) {
	var flashVars = "field_name=RSADeviceFso&" + "ip_address=" + ip;
	var flashMovie = "/sso/rsa/rsa_fso"; //the name and location of the swf
	
	if (DetectFlashVer(6, 0, 0)) //if flash minimum version is version 6.0.0
	{ //run the movie
		AC_FL_RunContent('id', 'flash_id', 'width', '1', 'height', '1', 'movie', flashMovie, 'quality', 'high', 'bgcolor', '#FFFFFF', 'flashVars', flashVars); //end AC code
	}
}

/* IP Code for the homepage - default.html - Creates FSO */
function getClientIP() {
	dojo.xhrGet( {
	    url :"/Amica/RsaIPServlet",
	    handleAs :"text",
	    timeout :5000,
	    load : function(data) {
		    fsoScript(data);
	    }
	/*error: function() {
	        alert("Unable to access server at this time. Please try again later.");
	        }*/
	});
}
