/* Minification failed. Returning unminified contents.
(2296,6-9): run-time error JS1009: Expected '}': ...
(2296,6-9): run-time error JS1009: Expected '}': ...
(2296,6-9): run-time error JS1006: Expected ')': ...
(2285,44): run-time error JS1004: Expected ';'
(2297,5-6): run-time error JS1195: Expected expression: }
(2298,5): run-time error JS1004: Expected ';'
(2298,5-6): run-time error JS1195: Expected expression: )
(2299,4): run-time error JS1004: Expected ';'
(2299,5-9): run-time error JS1034: Unmatched 'else'; no 'if' defined: else
(2335,9-12): run-time error JS1009: Expected '}': ...
(2335,9-12): run-time error JS1009: Expected '}': ...
(2335,9-12): run-time error JS1006: Expected ')': ...
(2324,47): run-time error JS1004: Expected ';'
(2336,8-9): run-time error JS1195: Expected expression: }
(2337,8-9): run-time error JS1009: Expected '}': )
(2339,5-6): run-time error JS1002: Syntax error: }
(2340,4-5): run-time error JS1002: Syntax error: }
(2340,5-6): run-time error JS1195: Expected expression: )
(2341,3-4): run-time error JS1002: Syntax error: }
(2343,2-3): run-time error JS1002: Syntax error: }
(2836,1-2): run-time error JS1002: Syntax error: }
 */



function initPhoneValidator() {
	$.validator.addMethod("phone", function (value, element) {
		if (this.optional(element)) {
			return true;
		}
		var reverseValue = $.trim(value).split("").reverse().join("");
		var reverseRegEx = new RegExp("^(\\d+\\s?(x|\\.txe?)\\s?)?((\\)(\\d+[\\s\\-\\.]?)?\\d+\\(|\\d+)[\\s\\-\\.]?)*(\\)([\\s\\-\\.]?\\d+)?\\d+\\+?\\((?!\\+.*)|\\d+)(\\s?\\+)?$", "i");
		var match = reverseRegEx.exec(reverseValue);
		return (match && (match.index === 0) && (match[0].length === value.length));
	});
	$.validator.unobtrusive.adapters.addBool("phone");
}


initPhoneValidator();

;



function InitializeAccountMigration() {
	
	var btnDefaultAddress = document.querySelectorAll(".btnAccountMigration");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			$.validator.unobtrusive.parse("AccountMigrationForm");

			//console.log("This is a test");
			var isValid = $("#AccountMigrationForm").valid();
			//console.log("isValid: " + isValid);
			if (isValid) {


				$(".btnAccountMigration .save").addClass("hidden");
				$(".btnAccountMigration .saving").removeClass("hidden");
				$(".btnAccountMigration").attr("disabled", "disabled");

				var txtEmailAddress = document.getElementById("txtEmailAddress");
				var ServiceRequest = new Object();
				ServiceRequest.EmailAddress = txtEmailAddress.value;


				var fetchUrl = "/api/accounts/securityapi/beginaccountprovision";
				//console.log(fetchUrl);
				var apiPromise = fetch(fetchUrl,
					{
						method: "POST",
						headers: {
							'Content-Type': 'application/json'
						},
						body: JSON.stringify(ServiceRequest)
					});

				apiPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divErrorMessage");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");
						//$.modalNoConflict.close();

						$(".btnAccountMigration .save").removeClass("hidden");
						$(".btnAccountMigration .saving").addClass("hidden");
						$(".btnAccountMigration").removeAttr("disabled");

					}
					if (data.IsSuccess) {

						var redirectUrl = data.Result.ReturnUrl;
						//console.log(redirectUrl);
						if (redirectUrl === null || redirectUrl === undefined) {
							redirectUrl = $("#divBeginAccountProvision").attr("data-return-url");
						}
						if (redirectUrl !== null && redirectUrl !== undefined) {
							window.location.href = redirectUrl;
						}
						else {
							window.location.reload();
						}
					}

				});
			}

		};
	});
}


InitializeAccountMigration();


;

var newAddressContactDataServices = null;



function InitializeEditAddressForm() {
	var btnSaveChanges = document.querySelectorAll(".btnEditAddressSaveChanges");
	Array.prototype.forEach.call(btnSaveChanges, function (el, i) {
		var aid = el.getAttribute("aid");
		var divAddressList = document.getElementById("divAddressList");
		var qasenabled = divAddressList.getAttribute("data-qas-enabled");
		var token = divAddressList.getAttribute("data-qas-token");


		el.onclick = function (evt) {
			evt.preventDefault();

			//console.log("aid: " + aid);

			var ddlCountriesJqObj = $("#ddlCountries_" + aid);
			var selectedCountryVal = ddlCountriesJqObj.val();
			//console.log(selectedCountryVal);
			var selectedCountryObj = ddlCountriesJqObj.find("option[value='" + selectedCountryVal + "']");
			//console.log(selectedCountryObj);
			var requirePostalCode = selectedCountryObj.data("require-postalcode");

			//console.log(requirePostalCode);
			if (requirePostalCode != "True") {
				$("#txtPostalCode_" + aid).rules("remove", "required");
			}


			//var ddlCountriesJqObjSelected =  ddlCountriesJqObj.data("val-required");
			//console.log(ddlCountriesJqObjSelected);

			$.validator.unobtrusive.parse("EditAddressForm_" + aid);
			var isValid = $("#EditAddressForm_" + aid).valid();

			if (isValid) {

				var divErrorClear = document.getElementById("divEditAddressErrorMessage_" + aid);
				//console.log(divErrorClear);
				divErrorClear.innerHTML = "";
				divErrorClear.classList.add("hidden");

				$(".btnEditAddressSaveChanges .save").addClass("hidden");
				$(".btnEditAddressSaveChanges .saving").removeClass("hidden");
				$(".btnEditAddressSaveChanges").attr("disabled", "disabled");

				var txtFirstName = document.getElementById("txtFirstName_" + aid);
				var txtLastName = document.getElementById("txtLastName_" + aid);
				var txtAddressLine1 = document.getElementById("txtAddressLine1_" + aid);
				var txtAddressLine2 = document.getElementById("txtAddressLine2_" + aid);
				var txtCity = document.getElementById("txtCity_" + aid);
				var txtState = document.getElementById("txtState_" + aid);
				var txtPostalCode = document.getElementById("txtPostalCode_" + aid);
				var ddlCountries = document.getElementById("ddlCountries_" + aid);


				var ServiceRequest = new Object();
				ServiceRequest.AddressId = aid;
				ServiceRequest.FirstName = txtFirstName.value;
				ServiceRequest.LastName = txtLastName.value;
				ServiceRequest.AddressLine1 = txtAddressLine1.value;
				ServiceRequest.AddressLine2 = txtAddressLine2.value;
				ServiceRequest.City = txtCity.value;
				ServiceRequest.State = txtState.value;
				ServiceRequest.PostalCode = txtPostalCode.value;
				ServiceRequest.Country = ddlCountries.options[ddlCountries.selectedIndex].text;
				ServiceRequest.CountryCode = ddlCountries.value;


				var fetchUrl = "/api/accounts/addressapi/saveaddress";
				//console.log(fetchUrl);
				var editAccountPromise = fetch(fetchUrl, {
					method: "POST",
					headers: {
						'Content-Type': 'application/json'
					},
					body: JSON.stringify(ServiceRequest)
				});

				editAccountPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					//console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divEditAddressErrorMessage_" + aid);
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");

						$(".btnEditAddressSaveChanges .save").removeClass("hidden");
						$(".btnEditAddressSaveChanges .saving").addClass("hidden");
						$(".btnEditAddressSaveChanges").removeAttr("disabled");
					}
					if (data.IsSuccess) {
						window.location.reload();
					}

				});
			}

		};
	});


	var btnEditOpenChanges = document.querySelectorAll(".btnEditOpen");
	Array.prototype.forEach.call(btnEditOpenChanges, function (el, i) {
		var aid = el.getAttribute("aid");
		var divAddressList = document.getElementById("divAddressList");
		var qasenabled = divAddressList.getAttribute("data-qas-enabled");
		var token = divAddressList.getAttribute("data-qas-token");

		el.onclick = function (evt) {
			evt.preventDefault();
			//console.log("This is test");

			var countryCode = $("select[id='ddlCountries_" + aid + "']").val();
			//InitializeQaSForEdit(token, qasenabled, aid);
			var statesCollection = new Array();
			var promise = GetStates(countryCode, aid).done(function (data) {

				console.log(data);
				var states = data.States;
				for (var key in states) {

					if (states.hasOwnProperty(key)) {
						//console.log(key);
						//console.log(states[key]);
						var StateRequest = new Object();
						StateRequest.StateCode = key;
						StateRequest.State = states[key];
						statesCollection.push(StateRequest);
					}
				}

				var selector = "#ddlStates_" + aid;
				var selectorText = "#txtState_" + aid;

				//console.log(states.length);

				if (statesCollection.length > 0) {
					PopluateStates(statesCollection, selector);
					$(selector).removeClass("hidden");
					$(selectorText).addClass("hidden");
					$(selector).val($(selectorText).val());
					//$(selectorText).val("");
					//InitializeQaSForEdit(token, qasenabled, aid);
					InitializeQaSForEdit(aid);

				} else {
					//console.log("Show 2" + selectorText);
					$(selectorText).removeClass("hidden");
					$(selector).addClass("hidden");
					$(selector).empty();

					InitializeQaSForEditState(aid);
				}
			});

		};
	});

	var btnNewAddress = document.querySelectorAll(".btnNewAddress");
	Array.prototype.forEach.call(btnNewAddress, function (el, i) {
		var divAddressList = document.getElementById("divAddressList");
		var qasenabled = divAddressList.getAttribute("data-qas-enabled");
		var token = divAddressList.getAttribute("data-qas-token");
		InitializeQaSForNew(token, qasenabled);

		el.onclick = function (evt) {
			evt.preventDefault();
			var divErrorClear = document.getElementById("divNewAddressErrorMessage");
			console.log(divErrorClear);
			divErrorClear.innerHTML = "";
			divErrorClear.classList.add("hidden");




			var txtFirstName = document.getElementById("txtFirstName");
			var txtLastName = document.getElementById("txtLastName");
			var txtAddressLine1 = document.getElementById("txtAddressLine1");
			var txtAddressLine2 = document.getElementById("txtAddressLine2");
			var txtCity = document.getElementById("txtCity");
			var txtState = document.getElementById("txtState");
			var txtPostalCode = document.getElementById("txtPostalCode");
			var ddlCountries = document.getElementById("ddlCountries");


			var ddlCountriesJqObj = $("#ddlCountries");
			var selectedCountryVal = ddlCountriesJqObj.val();
			var selectedCountryObj = ddlCountriesJqObj.find("option[value='" + selectedCountryVal + "']");
			var requirePostalCode = selectedCountryObj.data("require-postalcode");
			if (requirePostalCode != "True") {
				$("#txtPostalCode").rules("remove", "required");
			}


			$.validator.unobtrusive.parse("NewAddressForm");
			var isValid = $("#NewAddressForm").valid();

			if (isValid) {

				$(".btnNewAddress .save").addClass("hidden");
				$(".btnNewAddress .saving").removeClass("hidden");
				$(".btnNewAddress").attr("disabled", "disabled");

				var ServiceRequest = new Object();
				ServiceRequest.FirstName = txtFirstName.value;
				ServiceRequest.LastName = txtLastName.value;
				ServiceRequest.AddressLine1 = txtAddressLine1.value;
				ServiceRequest.AddressLine2 = txtAddressLine2.value;
				ServiceRequest.City = txtCity.value;
				ServiceRequest.State = txtState.value;
				ServiceRequest.PostalCode = txtPostalCode.value;
				ServiceRequest.Country = ddlCountries.options[ddlCountries.selectedIndex].text;
				ServiceRequest.CountryCode = ddlCountries.value;
				ServiceRequest.AddressType = "Mailing";

				var fetchUrl = "/api/accounts/addressapi/saveaddress";
				console.log(fetchUrl);
				var editAddressPromise = fetch(fetchUrl, {
					method: "POST",
					headers: {
						'Content-Type': 'application/json'
					},
					body: JSON.stringify(ServiceRequest)
				});

				editAddressPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divNewAddressErrorMessage");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");

						$(".btnNewAddress .save").removeClass("hidden");
						$(".btnNewAddress .saving").addClass("hidden");
						$(".btnNewAddress").removeAttr("disabled");
					}
					if (data.IsSuccess) {
						window.location.reload();
					}

				});
			}

		};
	});

	var btnNewOpenChanges = document.querySelectorAll(".btnNewOpen");
	Array.prototype.forEach.call(btnNewOpenChanges, function (el, i) {
		var divAddressList = document.getElementById("divAddressList");
		var qasenabled = divAddressList.getAttribute("data-qas-enabled");
		var token = divAddressList.getAttribute("data-qas-token");

		el.onclick = function (evt) {
			evt.preventDefault();


			var countryCode = $("#ddlCountries").val();
			//InitializeQaSForEdit(token, qasenabled, aid);
			var statesCollection = new Array();
			var promise = GetStates(countryCode, null).done(function (data) {

				console.log(data);
				var states = data.States;
				for (var key in states) {

					if (states.hasOwnProperty(key)) {
						//console.log(key);
						//console.log(states[key]);
						var StateRequest = new Object();
						StateRequest.StateCode = key;
						StateRequest.State = states[key];
						statesCollection.push(StateRequest);
					}
				}

				var selector = "#ddlStates";
				var selectorText = "#txtState";

				console.log(statesCollection.length);

				if (statesCollection.length > 0) {
					PopluateStates(statesCollection, selector);
					$(selector).removeClass("hidden");
					$(selectorText).addClass("hidden");
					$(selector).val($(selectorText).val());
					//$(selectorText).val("");
					//InitializeQaSForEdit(token, qasenabled, aid);
					//InitializeQaSForNew(token, qasenabled);

				} else {
					//console.log("Show 2" + selectorText);
					$(selectorText).removeClass("hidden");
					$(selector).addClass("hidden");
					$(selector).empty();

					//InitializeQaSForNewState(token, qasenabled);
				}
			});

		};
	});



	var btnRemoveAddress = document.querySelectorAll(".btnRemoveAddress");
	Array.prototype.forEach.call(btnRemoveAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			var aid = el.getAttribute("aid");
			console.log("aid: " + aid);
			var divErrorClear = document.getElementById("divRemoveAddressErrorMessage_" + aid);
			console.log(divErrorClear);
			divErrorClear.innerHTML = "";
			divErrorClear.classList.add("hidden");

			$(".btnRemoveAddress .save").addClass("hidden");
			$(".btnRemoveAddress .saving").removeClass("hidden");
			$(".btnRemoveAddress").attr("disabled", "disabled");

			var ServiceRequest = new Object();
			ServiceRequest.AddressId = aid;


			var fetchUrl = "/api/accounts/addressapi/removeaddress";
			console.log(fetchUrl);
			var editAccountPromise = fetch(fetchUrl, {
				method: "POST",
				headers: {
					'Content-Type': 'application/json'
				},
				body: JSON.stringify(ServiceRequest)
			});

			editAccountPromise.then(rep => {
				//				console.log(rep);
				return rep.json();
			}).then(data => {
				console.log(data);
				if (data.HasErrors) {
					var divError = document.getElementById("divRemoveAddressErrorMessage_" + aid);
					divError.innerHTML = data.Errors[0];
					divError.classList.remove("hidden");

					$(".btnRemoveAddress .save").removeClass("hidden");
					$(".btnRemoveAddress .saving").addClass("hidden");
					$(".btnRemoveAddress").removeAttr("disabled");
				}
				if (data.IsSuccess) {
					window.location.reload();
				}

			});

		};
	});

	var btnDefaultAddress = document.querySelectorAll(".btnDefaultAddress");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			var aid = el.getAttribute("aid");
			console.log("aid: " + aid);
			var divErrorClear = document.getElementById("divDefaultAddressErrorMessage_" + aid);
			console.log(divErrorClear);
			divErrorClear.innerHTML = "";
			divErrorClear.classList.add("hidden");

			$(".btnDefaultAddress .save").addClass("hidden");
			$(".btnDefaultAddress .saving").removeClass("hidden");
			$(".btnDefaultAddress").attr("disabled", "disabled");

			var ServiceRequest = new Object();
			ServiceRequest.AddressId = aid;


			var fetchUrl = "/api/accounts/addressapi/defaultaddress";
			console.log(fetchUrl);
			var editAccountPromise = fetch(fetchUrl, {
				method: "POST",
				headers: {
					'Content-Type': 'application/json'
				},
				body: JSON.stringify(ServiceRequest)
			});

			editAccountPromise.then(rep => {
				//				console.log(rep);
				return rep.json();
			}).then(data => {
				console.log(data);
				if (data.HasErrors) {
					var divError = document.getElementById("divDefaultAddressErrorMessage_" + aid);
					divError.innerHTML = data.Errors[0];
					divError.classList.remove("hidden");

					$(".btnDefaultAddress .save").removeClass("hidden");
					$(".btnDefaultAddress .saving").addClass("hidden");
					$(".btnDefaultAddress").removeAttr("disabled");
				}
				if (data.IsSuccess) {
					window.location.reload();
				}

			});

		};
	});

	$(".ddlCountries").each(function () {

		$(this).change(function () {
			//console.log("Test 2");
			var aid = $(this).attr("aid");
			var countryCode = $(this).val();
			var divAddressList = document.getElementById("divAddressList");
			var qasenabled = divAddressList.getAttribute("data-qas-enabled");
			var token = divAddressList.getAttribute("data-qas-token");
			//console.log("countryCode: " + countryCode);
			var statesCollection = new Array();
			var promise = GetStates(countryCode, aid).done(function (data) {

				//console.log("Results From Promise");
				//console.log(data);
				var states = data.States;
				for (var key in states) {
					if (states.hasOwnProperty(key)) {
						var StateRequest = new Object();
						StateRequest.StateCode = key;
						StateRequest.State = states[key];
						statesCollection.push(StateRequest);
					}
				}

				var selector = "#ddlStates_" + aid;
				var selectorText = "#txtState_" + aid;

				console.log(statesCollection.length);

				if (statesCollection.length > 0) {
					PopluateStates(statesCollection, selector);
					$(selector).removeClass("hidden");
					$(selectorText).addClass("hidden");
					//$(selectorText).val("");
					InitializeQaSForEdit(aid);
				} else {
					//console.log("Show 2" + selectorText);
					$(selectorText).removeClass("hidden");
					$(selector).addClass("hidden");
					$(selector).empty();
					InitializeQaSForEditState(aid);
				}
			});

		});

	});

	$("#ddlCountries").change(function () {

		var countryCode = $(this).val();
		var divAddressList = document.getElementById("divAddressList");
		var qasenabled = divAddressList.getAttribute("data-qas-enabled");
		var token = divAddressList.getAttribute("data-qas-token");
		//console.log("countryCode: " + countryCode);
		var statesCollection = new Array();
		var promise = GetStates(countryCode, null).done(function (data) {

			var states = data.States;
			for (var key in states) {
				if (states.hasOwnProperty(key)) {
					var StateRequest = new Object();
					StateRequest.StateCode = key;
					StateRequest.State = states[key];
					statesCollection.push(StateRequest);
				}
			}

			var selector = "#ddlStates";
			var selectorText = "#txtState";

			console.log(statesCollection.length);

			if (statesCollection.length > 0) {
				PopluateStates(statesCollection, selector);
				$(selector).removeClass("hidden");
				$(selectorText).addClass("hidden");
				//$(selectorText).val("");


				//newAddressContactDataServices.elements.province = document.querySelector("select[id='ddlStates']");
				//newAddressContactDataServices.reset();
				newAddressContactDataServices.unbind();
				InitializeQaSForNew(token, qasenabled);

			} else {
				//console.log("Show 2" + selectorText);
				$(selectorText).removeClass("hidden");
				$(selector).addClass("hidden");
				$(selector).empty();

				//console.log(newAddressContactDataServices.elements.province);
				//newAddressContactDataServices.elements.province = document.querySelector("input[id='txtState']");
				//console.log(newAddressContactDataServices.elements.province);
				//newAddressContactDataServices.reset();
				newAddressContactDataServices.unbind();
				InitializeQaSForNewState(token, qasenabled);
			}
		});

	});

	$(".ddlStates").change(function () {
		//console.log("Edit State Drop Down Changed");
		var aid = $(this).attr("aid");
		var stateVal = $(this).val();
		//console.log("State Changes");
		//console.log(stateVal);
		var selector = "#ddlStates_" + aid;
		var selectorText = "#txtState_" + aid;
		$(selectorText).val(stateVal);
	});

	$("#ddlStates").change(function () {
		var stateVal = $(this).val();
		//console.log(stateVal);
		var selector = "#ddlStates";
		var selectorText = "#txtState";
		$(selectorText).val(stateVal);
	});
}

function InitializeQaSForEdit(aid) {

	var elements = {
		input: document.querySelector("input[id='txtAddressLine1_" + aid + "']"),
		countryList: document.querySelector("select[id='ddlCountries_" + aid + "']"),
		addressLine1: document.querySelector("input[id='txtAddressLine1_" + aid + "']"),
		addressLine2: document.querySelector("input[id='txtAddressLine2_" + aid + "']"),
		addressLine3: document.querySelector("input[id='txtAddressLine3_" + aid + "']"),
		locality: document.querySelector("input[id='txtCity_" + aid + "']"),
		province: document.querySelector("select[id='ddlStates_" + aid + "']"),
		postalCode: document.querySelector("input[id='txtPostalCode_" + aid + "']")
	};
	var country = $("#ddlCountries_" + aid).val();
	var addressService = new QasServices.InitializeQAS(elements, country);
	if (addressService !== null &&
		addressService !== undefined &&
		addressService.events !== null &&
		addressService.events !== undefined) {

		addressService.events.on("post-picklist-selection", function (data) {

			setTimeout(function () {
				$("select[id='ddlStates_" + aid + "']").change();

			}, 400);

		});
	}

}

function InitializeQaSForEditState(aid) {

	//var qasEnabled = $(RegistrationForm.RootElement).data("qas-enabled");
	var elements = {
		input: document.querySelector("input[id='txtAddressLine1_" + aid + "']"),
		countryList: document.querySelector("select[id='ddlCountries_" + aid + "']"),
		addressLine1: document.querySelector("input[id='txtAddressLine1_" + aid + "']"),
		addressLine2: document.querySelector("input[id='txtAddressLine2_" + aid + "']"),
		addressLine3: document.querySelector("input[id='txtAddressLine3_" + aid + "']"),
		locality: document.querySelector("input[id='txtCity_" + aid + "']"),
		province: document.querySelector("select[id='txtState_" + aid + "']"),
		postalCode: document.querySelector("input[id='txtPostalCode_" + aid + "']")
	};

	var country = $("#ddlCountries_" + aid).val();
	var addressService = new QasServices.InitializeQAS(elements, country);
	if (addressService !== null &&
		addressService !== undefined &&
		addressService.events !== null &&
		addressService.events !== undefined) {
	}

}

function InitializeQaSForNew(token, qasEnabled) {
	var elements = {
		input: document.querySelector("input[id='txtAddressLine1']"),
		countryList: document.querySelector("select[id='ddlCountries']"),
		addressLine1: document.querySelector("input[id='txtAddressLine1']"),
		addressLine2: document.querySelector("input[id='txtAddressLine2']"),
		addressLine3: document.querySelector("input[id='txtAddressLine3']"),
		locality: document.querySelector("input[id='txtCity']"),
		province: document.querySelector("select[id='ddlStates']"),
		postalCode: document.querySelector("input[id='txtPostalCode']")
	};
	var country = $("#ddlCountries").val();
	var addressService = new QasServices.InitializeQAS(elements, country);
	if (addressService !== null && addressService !== undefined && addressService.events !== null && addressService.events !== undefined) {

		addressService.events.on("post-picklist-selection", function (data) {

		});
		addressService.events.on("post-formatting-search", function (data) {
			console.log("post-formatting-search");
			data.components.forEach(function (component) {

				if (component.provinceCode1 !== undefined) {
					document.querySelector("input[id='txtState']").value = component.provinceCode1;
				}

			});
		});
	}
	newAddressContactDataServices = addressService;

}

function InitializeQaSForNewState() {

	var elements = {
		input: document.querySelector("input[id='txtAddressLine1']"),
		countryList: document.querySelector("select[id='ddlCountries']"),
		addressLine1: document.querySelector("input[id='txtAddressLine1']"),
		addressLine2: document.querySelector("input[id='txtAddressLine2']"),
		addressLine3: document.querySelector("input[id='txtAddressLine3']"),
		locality: document.querySelector("input[id='txtCity']"),
		province: document.querySelector("select[id='txtState']"),
		postalCode: document.querySelector("input[id='txtPostalCode']")
	};

	var country = $("#ddlCountries").val();
	var addressService = new QasServices.InitializeQAS(elements, country);
	if (addressService !== null &&
		addressService !== undefined &&
		addressService.events !== null &&
		addressService.events !== undefined) {

	}
	newAddressContactDataServices = addressService;

}

function GetStates(countryCode, aid) {

	var ServiceRequest = new Object();
	ServiceRequest.countryCode = countryCode;

	var url = "/api/cxa/JmmSxaAccount/GetStates";
	var requestData = JSON.stringify(ServiceRequest);
	var ajaxRequest = $.ajax({
		type: 'POST',
		contentType: "application/json;charset=utf-8",
		url: url,
		data: requestData,
		success: function (data) {

		},
		error: function (x, y, z) {
			//alert(x + '\n' + y + '\n' + z);
		}
	});
	return ajaxRequest;
}

function PopluateStates(states, selector) {

	//console.log("ddl: ");
	//console.log(selector);
	//console.log(states);

	$(selector).empty();
	//console.log(states);
	for (var i = 0; i < states.length; i++) {
		//console.log(states[i]);
		//$(selector).hide();

		$(selector).append("<option value=" + states[i].StateCode + ">" + states[i].State + "</option>");
	}

}




function GetCountryMap() {

	var countryMap = {
		"AF": "AFG",
		"AX": "ALA",
		"AL": "ALB",
		"DZ": "DZA",
		"AS": "ASM",
		"AD": "AND",
		"AO": "AGO",
		"AI": "AIA",
		"AQ": "ATA",
		"AG": "ATG",
		"AR": "ARG",
		"AM": "ARM",
		"AW": "ABW",
		"AU": "AUS",
		"AT": "AUT",
		"AZ": "AZE",
		"BS": "BHS",
		"BH": "BHR",
		"BD": "BGD",
		"BB": "BRB",
		"BY": "BLR",
		"BE": "BEL",
		"BZ": "BLZ",
		"BJ": "BEN",
		"BM": "BMU",
		"BT": "BTN",
		"BO": "BOL",
		"BA": "BIH",
		"BW": "BWA",
		"BV": "BVT",
		"BR": "BRA",
		"VG": "VGB",
		"IO": "IOT",
		"BN": "BRN",
		"BG": "BGR",
		"BF": "BFA",
		"BI": "BDI",
		"KH": "KHM",
		"CM": "CMR",
		"CA": "CAN",
		"CV": "CPV",
		"KY": "CYM",
		"CF": "CAF",
		"TD": "TCD",
		"CL": "CHL",
		"CN": "CHN",
		"HK": "HKG",
		"MO": "MAC",
		"CX": "CXR",
		"CC": "CCK",
		"CO": "COL",
		"KM": "COM",
		"CG": "COG",
		"CD": "COD",
		"CK": "COK",
		"CR": "CRI",
		"CI": "CIV",
		"HR": "HRV",
		"CU": "CUB",
		"CY": "CYP",
		"CZ": "CZE",
		"DK": "DNK",
		"DJ": "DJI",
		"DM": "DMA",
		"DO": "DOM",
		"EC": "ECU",
		"EG": "EGY",
		"SV": "SLV",
		"GQ": "GNQ",
		"ER": "ERI",
		"EE": "EST",
		"ET": "ETH",
		"FK": "FLK",
		"FO": "FRO",
		"FJ": "FJI",
		"FI": "FIN",
		"FR": "FRA",
		"GF": "GUF",
		"PF": "PYF",
		"TF": "ATF",
		"GA": "GAB",
		"GM": "GMB",
		"GE": "GEO",
		"DE": "DEU",
		"GH": "GHA",
		"GI": "GIB",
		"GR": "GRC",
		"GL": "GRL",
		"GD": "GRD",
		"GP": "GLP",
		"GU": "GUM",
		"GT": "GTM",
		"GG": "GGY",
		"GN": "GIN",
		"GW": "GNB",
		"GY": "GUY",
		"HT": "HTI",
		"HM": "HMD",
		"VA": "VAT",
		"HN": "HND",
		"HU": "HUN",
		"IS": "ISL",
		"IN": "IND",
		"ID": "IDN",
		"IR": "IRN",
		"IQ": "IRQ",
		"IE": "IRL",
		"IM": "IMN",
		"IL": "ISR",
		"IT": "ITA",
		"JM": "JAM",
		"JP": "JPN",
		"JE": "JEY",
		"JO": "JOR",
		"KZ": "KAZ",
		"KE": "KEN",
		"KI": "KIR",
		"KP": "PRK",
		"KR": "KOR",
		"KW": "KWT",
		"KG": "KGZ",
		"LA": "LAO",
		"LV": "LVA",
		"LB": "LBN",
		"LS": "LSO",
		"LR": "LBR",
		"LY": "LBY",
		"LI": "LIE",
		"LT": "LTU",
		"LU": "LUX",
		"MK": "MKD",
		"MG": "MDG",
		"MW": "MWI",
		"MY": "MYS",
		"MV": "MDV",
		"ML": "MLI",
		"MT": "MLT",
		"MH": "MHL",
		"MQ": "MTQ",
		"MR": "MRT",
		"MU": "MUS",
		"YT": "MYT",
		"MX": "MEX",
		"FM": "FSM",
		"MD": "MDA",
		"MC": "MCO",
		"MN": "MNG",
		"ME": "MNE",
		"MS": "MSR",
		"MA": "MAR",
		"MZ": "MOZ",
		"MM": "MMR",
		"NA": "NAM",
		"NR": "NRU",
		"NP": "NPL",
		"NL": "NLD",
		"AN": "ANT",
		"NC": "NCL",
		"NZ": "NZL",
		"NI": "NIC",
		"NE": "NER",
		"NG": "NGA",
		"NU": "NIU",
		"NF": "NFK",
		"MP": "MNP",
		"NO": "NOR",
		"OM": "OMN",
		"PK": "PAK",
		"PW": "PLW",
		"PS": "PSE",
		"PA": "PAN",
		"PG": "PNG",
		"PY": "PRY",
		"PE": "PER",
		"PH": "PHL",
		"PN": "PCN",
		"PL": "POL",
		"PT": "PRT",
		"PR": "PRI",
		"QA": "QAT",
		"RE": "REU",
		"RO": "ROU",
		"RU": "RUS",
		"RW": "RWA",
		"BL": "BLM",
		"SH": "SHN",
		"KN": "KNA",
		"LC": "LCA",
		"MF": "MAF",
		"PM": "SPM",
		"VC": "VCT",
		"WS": "WSM",
		"SM": "SMR",
		"ST": "STP",
		"SA": "SAU",
		"SN": "SEN",
		"RS": "SRB",
		"SC": "SYC",
		"SL": "SLE",
		"SG": "SGP",
		"SK": "SVK",
		"SI": "SVN",
		"SB": "SLB",
		"SO": "SOM",
		"ZA": "ZAF",
		"GS": "SGS",
		"SS": "SSD",
		"ES": "ESP",
		"LK": "LKA",
		"SD": "SDN",
		"SR": "SUR",
		"SJ": "SJM",
		"SZ": "SWZ",
		"SE": "SWE",
		"CH": "CHE",
		"SY": "SYR",
		"TW": "TWN",
		"TJ": "TJK",
		"TZ": "TZA",
		"TH": "THA",
		"TL": "TLS",
		"TG": "TGO",
		"TK": "TKL",
		"TO": "TON",
		"TT": "TTO",
		"TN": "TUN",
		"TR": "TUR",
		"TM": "TKM",
		"TC": "TCA",
		"TV": "TUV",
		"UG": "UGA",
		"UA": "UKR",
		"AE": "ARE",
		"GB": "GBR",
		"US": "USA",
		"UM": "UMI",
		"UY": "URY",
		"UZ": "UZB",
		"VU": "VUT",
		"VE": "VEN",
		"VN": "VNM",
		"VI": "VIR",
		"WF": "WLF",
		"EH": "ESH",
		"YE": "YEM",
		"ZM": "ZMB",
		"ZW": "ZWE",
		"XK": "XKX"
	};

	return countryMap;

}


InitializeEditAddressForm();
;



function InitializeChangePassword() {

	var btnDefaultAddress = document.querySelectorAll(".btnChangePassword");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			$.validator.unobtrusive.parse("ChangePasswordForm");

			
			var isValid = $("#ChangePasswordForm").valid();
			//console.log("isValid: " + isValid);
			if (isValid) {


				$(".btnChangePassword .save").addClass("hidden");
				$(".btnChangePassword .saving").removeClass("hidden");
				$(".btnChangePassword").attr("disabled", "disabled");

				var txtEmailAddress = document.getElementById("txtPassword");
				var txtConfirmPassword = document.getElementById("txtConfirmPassword");

				var ServiceRequest = new Object();
				ServiceRequest.NewPassword = txtEmailAddress.value;
				ServiceRequest.ConfirmNewPassword = txtConfirmPassword.value;

				var fetchUrl = "/api/accounts/accountsapi/ChangePassword";
				//console.log(fetchUrl);
				var apiPromise = fetch(fetchUrl,
					{
						method: "POST",
						headers: {
							'Content-Type': 'application/json'
						},
						body: JSON.stringify(ServiceRequest)
					});

				apiPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					//console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divChangePasswordErrorMessage");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");
						$.modalNoConflict.close();


						$(".btnChangePassword .save").removeClass("hidden");
						$(".btnChangePassword .saving").addClass("hidden");
						$(".btnChangePassword").removeAttr("disabled");
					}
					if (data.IsSuccess) {

						var redirectUrl = data.Result.ReturnUrl;
						//console.log(redirectUrl);
						if (redirectUrl === null || redirectUrl === undefined) {
							//redirectUrl = $("#divPasswordRecovery").attr("data-return-url");

						}
						if (redirectUrl !== null && redirectUrl !== undefined) {
							window.location.href = redirectUrl;
						}
						else {
							window.location.reload();
						}
					}

				});
			}

		};
	});
}


InitializeChangePassword();
;



function InitializeEditAccountForm() {
	var btnSaveChanges = document.querySelectorAll(".btnEditProfileSaveChanges");
	Array.prototype.forEach.call(btnSaveChanges, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			$.validator.unobtrusive.parse("PersonalInfoForm");
			var isValid = $("#PersonalInfoForm").valid();
			var isorganizationStr = $("#profileEditModal").attr("data-is-organization");
			var isorganization = isorganizationStr == "True" ? true : false;
			//console.log("isValid: " + isValid);
			//console.log("isorganization: " + isorganization);

			if (isValid) {


				var divErrorClear = document.getElementById("divEditAccountErrorMessage");
				divErrorClear.innerHTML = "";
				divErrorClear.classList.add("hidden");

				$(".btnEditProfileSaveChanges .save").addClass("hidden");
				$(".btnEditProfileSaveChanges .saving").removeClass("hidden");
				$(".btnEditProfileSaveChanges").attr("disabled", "disabled");


				var txtFirstName = document.getElementById("txtFirstName");
				var txtLastName = document.getElementById("txtLastName");
				var txtEmailAddress = document.getElementById("txtEmailAddress");
				var txtPhone = document.getElementById("txtPhone");
				var txtMobilePhone = document.getElementById("txtMobilePhone");
				var txtBirthDate = document.getElementById("txtBirthDate");
				var ddlWhereIWatchJoyce = document.getElementById("ddlWhereIWatchJoyce");
				var ddlGiftAid = document.getElementById("ddlGiftAid");

				var txtOrganization = document.getElementById("txtOrganization");
				var txtContactFirstName = document.getElementById("txtContactFirstName");
				var txtContactLastName = document.getElementById("txtContactLastName");
				var ddlOrganizationType = document.getElementById("ddlOrganizationType");

				var ServiceRequest = new Object();
				if (!isorganization) {
					ServiceRequest.FirstName = txtFirstName.value;
					ServiceRequest.LastName = txtLastName.value;
				}
				else {

					ServiceRequest.Organization = txtOrganization.value;
					ServiceRequest.ContactFirstName = txtContactFirstName.value;
					ServiceRequest.ContactLastName = txtContactLastName.value;
					ServiceRequest.OrganizationType = ddlOrganizationType.value;


					ServiceRequest.FirstName = txtContactFirstName.value;
					ServiceRequest.LastName = txtContactLastName.value;
				}

				ServiceRequest.EmailAddress = txtEmailAddress.value;
				ServiceRequest.Phone = txtPhone.value;
				//ServiceRequest.MobilePhone = txtMobilePhone.value;
				if (txtBirthDate != null)
					ServiceRequest.BirthDate = txtBirthDate.value;
				if (ddlWhereIWatchJoyce !== null) {
					ServiceRequest.WhereIWatchJoyce = ddlWhereIWatchJoyce.value;
				}

				if (ddlGiftAid !== null)
					ServiceRequest.GivingAid = ddlGiftAid.value;
				else
					ServiceRequest.GivingAid = "none";

				var fetchUrl = "/api/accounts/accountsapi/updateaccount";
				console.log(fetchUrl);
				const editAccountPromise = fetch(fetchUrl,
					{
						method: "POST",
						headers: {
							'Content-Type': 'application/json'
						},
						body: JSON.stringify(ServiceRequest)
					});

				editAccountPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divEditAccountErrorMessage");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");

						$(".btnEditProfileSaveChanges .save").removeClass("hidden");
						$(".btnEditProfileSaveChanges .saving").addClass("hidden");
						$(".btnEditProfileSaveChanges").removeAttr("disabled");
					}
					if (data.IsSuccess) {
						window.location.reload();
					}

				});
			}

		};
	});
}


InitializeEditAccountForm();
;



function InitializeForgotPassword() {

	var btnDefaultAddress = document.querySelectorAll(".btnForgotPassword");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			$.validator.unobtrusive.parse("ForgotPasswordForm");

			//console.log("This is a test");
			var isValid = $("#ForgotPasswordForm").valid();
			//console.log("isValid: " + isValid);
			if (isValid) {

				$(".btnForgotPassword .save").addClass("hidden");
				$(".btnForgotPassword .saving").removeClass("hidden");
				$(".btnForgotPassword").attr("disabled", "disabled");


				var txtEmailAddress = document.getElementById("txtEmailAddress");
				var ServiceRequest = new Object();
				ServiceRequest.EmailAddress = txtEmailAddress.value;


				var fetchUrl = "/api/accounts/securityapi/forgotpassword";
				//console.log(fetchUrl);
				var apiPromise = fetch(fetchUrl,
					{
						method: "POST",
						headers: {
							'Content-Type': 'application/json'
						},
						body: JSON.stringify(ServiceRequest)
					});

				apiPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					//console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divErrorMessage");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");
						//$.modalNoConflict.close();


						$(".btnForgotPassword .save").removeClass("hidden");
						$(".btnForgotPassword .saving").addClass("hidden");
						$(".btnForgotPassword").removeAttr("disabled");

					}
					if (data.IsSuccess) {

						var redirectUrl = data.Result.ReturnUrl;
						//console.log(redirectUrl);
						if (redirectUrl === null || redirectUrl === undefined) {
							redirectUrl = $("#divForgotPassword").attr("data-return-url");
						}
						if (redirectUrl !== null && redirectUrl !== undefined) {
							window.location.href = redirectUrl;
						}
						else {
							window.location.reload();
						}
					}

				});
			}

		};
	});
}


InitializeForgotPassword();
;



function InitializeGivingSummary() {

	console.log("InitializeGivingSummary");

	var ddlGivingSummary = document.getElementById("ddlGivingSummary");

	if (ddlGivingSummary === null)
		return;

	ddlGivingSummary.addEventListener("change",
		function() {

			var hrefGivingSummaryView = document.getElementById("hrefGivingSummaryView");
			var year = ddlGivingSummary.value;
			var givingSummaryUrl = hrefGivingSummaryView.getAttribute("data-url");
			givingSummaryUrl = givingSummaryUrl + year;
			console.log(givingSummaryUrl);
			hrefGivingSummaryView.setAttribute("href", givingSummaryUrl);

		});


	

}


InitializeGivingSummary();
;
function InitializeQaSForLoginAddresss() {
	var elements = {
		input: document.querySelector("input[id='txtAddressLine12']"),
		countryList: document.querySelector("select[id='ddlCountries2']"),
		addressLine1: document.querySelector("input[id='txtAddressLine12']"),
		addressLine2: document.querySelector("input[id='txtAddressLine22']"),
		addressLine3: document.querySelector("input[id='txtAddressLine32']"),
		locality: document.querySelector("input[id='txtCity2']"),
		province: document.querySelector("select[id='ddlStates2']"),
		postalCode: document.querySelector("input[id='txtPostalCode2']")
	};
	var country = $("#ddlCountries2").val();
	var addressService = new QasServices.InitializeQAS(elements, country);
	if (addressService !== null && addressService !== undefined && addressService.events !== null && addressService.events !== undefined) {

		addressService.events.on("post-picklist-selection", function (data) {

		});
		addressService.events.on("post-formatting-search", function (data) {
			console.log("post-formatting-search");
			data.components.forEach(function (component) {

				if (component.provinceCode1 !== undefined) {
					document.querySelector("input[id='txtState2']").value = component.provinceCode1;
				}

			});
		});
	}
	newAddressContactDataServices = addressService;

}


function InitializeLoginForm() {
	var btnDefaultAddress = document.querySelectorAll(".btnLogin");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			ProcessAccountLogin();

		};
	});

	var btnNewAddress = document.querySelectorAll(".btnNewAddress2");
	Array.prototype.forEach.call(btnNewAddress, function (el, i) {
		//var divAddressList = document.getElementById("divAddressList2");
		//var qasenabled = divAddressList.getAttribute("data-qas-enabled");
		//var token = divAddressList.getAttribute("data-qas-token");
		InitializeQaSForLoginAddresss();

		el.onclick = function (evt) {
			evt.preventDefault();
			var divErrorClear = document.getElementById("divNewAddressErrorMessage2");
			console.log(divErrorClear);
			divErrorClear.innerHTML = "";
			divErrorClear.classList.add("hidden");




			var txtFirstName = document.getElementById("txtFirstName2");
			var txtLastName = document.getElementById("txtLastName2");
			var txtAddressLine1 = document.getElementById("txtAddressLine12");
			var txtAddressLine2 = document.getElementById("txtAddressLine22");
			var txtCity = document.getElementById("txtCity2");
			var txtState = document.getElementById("txtState2");
			var txtPostalCode = document.getElementById("txtPostalCode2");
			var ddlCountries = document.getElementById("ddlCountries2");


			var ddlCountriesJqObj = $("#ddlCountries2");
			var selectedCountryVal = ddlCountriesJqObj.val();
			var selectedCountryObj = ddlCountriesJqObj.find("option[value='" + selectedCountryVal + "']");
			var requirePostalCode = selectedCountryObj.data("require-postalcode");
			if (requirePostalCode != "True") {
				$("#txtPostalCode").rules("remove", "required");
			}


			$.validator.unobtrusive.parse("NewAddressForm2");
			var isValid = $("#NewAddressForm2").valid();

			if (isValid) {

				$(".btnNewAddress2 .save").addClass("hidden");
				$(".btnNewAddress2 .saving").removeClass("hidden");
				$(".btnNewAddress2").attr("disabled", "disabled");

				var ServiceRequest = new Object();
				ServiceRequest.FirstName = txtFirstName.value;
				ServiceRequest.LastName = txtLastName.value;
				ServiceRequest.AddressLine1 = txtAddressLine1.value;
				ServiceRequest.AddressLine2 = txtAddressLine2.value;
				ServiceRequest.City = txtCity.value;
				ServiceRequest.State = txtState.value;
				ServiceRequest.PostalCode = txtPostalCode.value;
				ServiceRequest.Country = ddlCountries.options[ddlCountries.selectedIndex].text;
				ServiceRequest.CountryCode = ddlCountries.value;
				ServiceRequest.AddressType = "Mailing";

				var fetchUrl = "/api/accounts/addressapi/saveaddress";
				console.log(fetchUrl);
				var editAddressPromise = fetch(fetchUrl, {
					method: "POST",
					headers: {
						'Content-Type': 'application/json'
					},
					body: JSON.stringify(ServiceRequest)
				});

				editAddressPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divNewAddressErrorMessage2");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");

						$(".btnNewAddress2 .save").removeClass("hidden");
						$(".btnNewAddress2 .saving").addClass("hidden");
						$(".btnNewAddress2").removeAttr("disabled");
					}
					if (data.IsSuccess) {
						window.location.reload();
					}

				});
			}

		};
	});



	$("#ddlStates2").change(function () {
		var stateVal = $(this).val();
		//console.log(stateVal);
		var selector = "#ddlStates2";
		var selectorText = "#txtState2";
		$(selectorText).val(stateVal);
	});

}

function InitializeSpcLoginForm() {
	var btnDefaultAddress = document.querySelectorAll(".btnSpcLogin");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			ProcessSpcAccountLogin();

		};
	});
}


function AccountLogin_OnInit(data) {

	//console.log("Account Login Init");
}


function AccountLogin_OnBegin(data) {

	//console.log("Account Login Begin");
}


function ProcessAccountLogin() {

	var isValid = $("#LoginForm").valid();
	if (isValid) {
		$('#loadingModal').modalNoConflict({
			closeExisting: false,
			escapeClose: false,
			clickClose: false,
			showClose: false
		});


		var txtUserName = document.getElementById("userNameLoginCommerce");
		var txtPassword = document.getElementById("passwordLoginCommerce");

		var ServiceRequest = new Object();
		ServiceRequest.Username = txtUserName.value;
		ServiceRequest.Password = txtPassword.value;


		var fetchUrl = "/api/accounts/securityapi/login";
		console.log(fetchUrl);
		var loginformPromise = fetch(fetchUrl,
			{
				method: "POST",
				headers: {
					'Content-Type': 'application/json'
				},
				body: JSON.stringify(ServiceRequest)
			});

		loginformPromise.then(rep => {
			//				console.log(rep);
			return rep.json();
		}).then(data => {
			console.log(data);
			if (data.HasErrors) {
				var divError = document.getElementById("divLoginErrorMessage");
				divError.innerHTML = data.Errors[0];


				if (data.Result !== null) {
					if (data.Result.MustProvision) {
						var redirectUrl2 = data.Result.ReturnUrl;
						if (redirectUrl2 !== null && redirectUrl2 !== undefined) {
							window.location.href = redirectUrl2;
						}
					} else {
						divError.classList.remove("hidden");
						$.modalNoConflict.close();
					}
				}
				else {
					divError.classList.remove("hidden");
					$.modalNoConflict.close();
				}
			}
			if (data.IsSuccess) {
				sessionStorage.setItem("justLoggedIn", true);
				$.modalNoConflict.close();


				var hasAddress = data.Result.HasAddress;
				if (hasAddress || data.Result.MustProvision) {

					var redirectUrl = data.Result.ReturnUrl;
					console.log(redirectUrl);
					if (redirectUrl === null || redirectUrl === undefined) {
						redirectUrl = $("#loginCommerce").attr("data-return-url");
					}
					if (redirectUrl !== null && redirectUrl !== undefined) {
						window.location.href = redirectUrl;
					}
					else {
						window.location.reload();
					}

				}
				else {


					var countryCode = $("#ddlCountries2").val();
					//InitializeQaSForEdit(token, qasenabled, aid);
					var statesCollection = new Array();
					var promise = GetStates(countryCode, null).done(function (data) {

						console.log(data);
						var states = data.States;
						for (var key in states) {

							if (states.hasOwnProperty(key)) {
								//console.log(key);
								//console.log(states[key]);
								var StateRequest = new Object();
								StateRequest.StateCode = key;
								StateRequest.State = states[key];
								statesCollection.push(StateRequest);
							}
						}

						var selector = "#ddlStates2";
						var selectorText = "#txtState2";

						console.log(statesCollection.length);

						if (statesCollection.length > 0) {
							PopluateStates(statesCollection, selector);
							$(selector).removeClass("hidden");
							$(selectorText).addClass("hidden");
							$(selector).val($(selectorText).val());
							//$(selectorText).val("");
							//InitializeQaSForEdit(token, qasenabled, aid);
							//InitializeQaSForNew(token, qasenabled);

						} else {
							//console.log("Show 2" + selectorText);
							$(selectorText).removeClass("hidden");
							$(selector).addClass("hidden");
							$(selector).empty();

							//InitializeQaSForNewState(token, qasenabled);
						}
					});

					if ($("#wrapper").length > 0) {

						$('#crmProfileConfirmModal').attr("style", "position: absolute;left:50%;top:15%;transform: translate(-50%, -50%);;background: none;z-index: 9999");
					}



					$('#crmProfileConfirmModal').modal('show');



				}

			}

		});
	}
}

function ProcessSpcAccountLogin() {

	var isValid = $("#SpcLoginForm").valid();
	if (isValid) {
		$('#loadingModal').modalNoConflict({
			closeExisting: false,
			escapeClose: false,
			clickClose: false,
			showClose: false
		});


		var txtUserName = document.getElementById("userNameSpcLoginCommerce");
		var txtPassword = document.getElementById("passwordSpcLoginCommerce");

		var ServiceRequest = new Object();
		ServiceRequest.Username = txtUserName.value;
		ServiceRequest.Password = txtPassword.value;


		var fetchUrl = "/api/accounts/securityapi/login";
		console.log(fetchUrl);
		var loginformPromise = fetch(fetchUrl,
			{
				method: "POST",
				headers: {
					'Content-Type': 'application/json'
				},
				body: JSON.stringify(ServiceRequest)
			});

		loginformPromise.then(rep => {
			//				console.log(rep);
			return rep.json();
		}).then(data => {
			console.log(data);
			if (data.HasErrors) {
				var divError = document.getElementById("divSpcLoginErrorMessage");
				divError.innerHTML = data.Errors[0];


				if (data.Result !== null) {
					if (data.Result.MustProvision) {
						var redirectUrl2 = data.Result.ReturnUrl;
						if (redirectUrl2 !== null && redirectUrl2 !== undefined) {
							window.location.href = redirectUrl2;
						}
					} else {
						divError.classList.remove("hidden");
						$.modalNoConflict.close();
					}
				}
				else {
					divError.classList.remove("hidden");
					$.modalNoConflict.close();
				}
			}
			if (data.IsSuccess) {
				sessionStorage.setItem("justLoggedIn", true);
				document.cookie = "JustLoggedIn=true;expires=" + setTimeForCookies(120) + ";path=/";
				var redirectUrl = data.Result.ReturnUrl;
				console.log(redirectUrl);
				if (redirectUrl === null || redirectUrl === undefined) {
					redirectUrl = $("#loginCommerce").attr("data-return-url");
				}
				if (redirectUrl !== null && redirectUrl !== undefined) {
					window.location.href = redirectUrl;
				}
				else {
					window.location.reload();
				}
				//$.modalNoConflict.close();
			}

		});
	}
}
function InitializeLoginFormActiveEvents() {

	$('#passwordLoginCommerce').keydown(function (e) {
		if (e.which == 13) {
			e.preventDefault();
			ProcessAccountLogin();
		}
	});


	$(".btnUpdateImprofileProfile").click(function (evt) {
		$('#crmProfileConfirmModal').modal('hide');


		if ($("#wrapper").length > 0) {

			$('#newAddressModal2').attr("style", "position: absolute;left:50%;top:15%;transform: translate(-50%, -50%);;background: none;z-index: 9999");
			$('body').css("overflow-y", "scroll");
		}

		$('#newAddressModal2').modal('show');
	});

}

function InitializeSpcLoginFormActiveEvents() {

	$('#passwordSpcLoginCommerce').keydown(function (e) {
		if (e.which == 13) {
			e.preventDefault();
			ProcessSpcAccountLogin();
		}
	});
}

InitializeLoginForm();
InitializeLoginFormActiveEvents();
InitializeSpcLoginForm();
InitializeSpcLoginFormActiveEvents();
;
var OrderHistoryViewModelController;

var OrderHistoryViewModel = function () {
	var self = this;
	self.ErrorMessage = ko.observable("");
	//self.Orders = ko.observableArray([]);
	self.Orders = ko.observable("");
	self.LoadingOrders = ko.observable(true);

	self.InitializeViewModel = function () {
		//console.log("init");
		self.LoadOrdersPageLoad();
	};

	self.LoadOrdersPageLoad = function () {
		var ServiceRequest = new Object();
		//ServiceRequest.CurrentItemId = $("#divMiniCart").attr("data-attr-cid");
		self.ShowLoadingOrders();
		var promise = GetOrders(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				self.ErrorMessage(data.Error);
				self.HideLoadingOrders();
			} else {
				//console.log("success");
				self.Orders(data.Result);
				self.HideLoadingOrders();
				//self.ConfigureCartUIModels();


				//

				//self.UpdateListrakSCA();
				//self.UpdateListrakRecommender();

				//initializeCarousels(document, true);
			}
		});
		return promise;
	};


	self.ShowLoadingOrders = function () {
		self.LoadingOrders(true);
	};
	self.HideLoadingOrders = function () {
		self.LoadingOrders(false);
	};

	self.SearchByProductType = function (productType, event) {

		var ServiceRequest = new Object();
		ServiceRequest.ProductType = productType;
		self.ShowLoadingOrders();
		var promise = GetOrders(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				self.ErrorMessage(data.Error);
				self.HideLoadingOrders();
			} else {
				//console.log("success");
				self.Orders(data.Result);
				self.HideLoadingOrders();
			}
		});

	};

	self.SearchByLast6Months = function (event) {

		var ServiceRequest = new Object();
		ServiceRequest.NumberOfMonths = 6;
		self.ShowLoadingOrders();
		var promise = GetOrders(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				self.ErrorMessage(data.Error);
				self.HideLoadingOrders();
			} else {
				//console.log("success");
				self.Orders(data.Result);
				self.HideLoadingOrders();
			}
		});

	};

	self.SearchByLast12Months = function (event) {

		var ServiceRequest = new Object();
		ServiceRequest.NumberOfMonths = 12;
		self.ShowLoadingOrders();
		var promise = GetOrders(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				self.ErrorMessage(data.Error);
				self.HideLoadingOrders();
			} else {
				//console.log("success");
				self.Orders(data.Result);
				self.HideLoadingOrders();
			}
		});

	};

	self.Search = function (event) {

		self.LoadOrdersPageLoad();

	};

};


function GetOrders(ServiceRequest) {


	//ServiceRequest.countryCode = countryCode;

	var url = "/api/accounts/orderhistoryapi/Search";
	var requestData = JSON.stringify(ServiceRequest);
	var ajaxRequest = $.ajax({
		type: 'POST',
		contentType: "application/json;charset=utf-8",
		url: url,
		data: requestData,
		success: function (data) {

		},
		error: function (x, y, z) {
			//alert(x + '\n' + y + '\n' + z);
		}
	});
	return ajaxRequest;
}


function InitializeOrderHistory() {

	var initializeViewModel = false;
	OrderHistoryViewModelController = new OrderHistoryViewModel();
	if ($("#divOrderHistoryContainer").length > 0) {
		ko.applyBindings(OrderHistoryViewModelController, document.getElementById("divOrderHistoryContainer"));
		ko.applyBindings(OrderHistoryViewModelController, document.getElementById("divOrderHistoryControls"));
		initializeViewModel = true;
	}

	if (initializeViewModel) {
		OrderHistoryViewModelController.InitializeViewModel();
	}


	//var ordersPromise = GetOrders();
	//ordersPromise.done(function (data) {

	//	console.log(data);

	//});
}




$(document).ready(function () {
	InitializeOrderHistory();
});

;



function InitializePasswordRecovery() {

	var btnDefaultAddress = document.querySelectorAll(".btnPasswordRecovery");
	Array.prototype.forEach.call(btnDefaultAddress, function (el, i) {

		el.onclick = function (evt) {
			evt.preventDefault();

			$.validator.unobtrusive.parse("PasswordRecoveryForm");

			
			var isValid = $("#PasswordRecoveryForm").valid();
			//console.log("isValid: " + isValid);
			if (isValid) {


				$(".btnPasswordRecovery .save").addClass("hidden");
				$(".btnPasswordRecovery .saving").removeClass("hidden");
				$(".btnPasswordRecovery").attr("disabled", "disabled");


				var txtEmailAddress = document.getElementById("txtPassword");
				var txtConfirmPassword = document.getElementById("txtConfirmPassword");
				var hfToken = document.getElementById("hfToken");

				var ServiceRequest = new Object();
				ServiceRequest.Password = txtEmailAddress.value;
				ServiceRequest.ConfirmPassword = txtConfirmPassword.value;
				ServiceRequest.Token = hfToken.value;


				var fetchUrl = "/api/accounts/securityapi/PasswordRecovery";
				//console.log(fetchUrl);
				var apiPromise = fetch(fetchUrl,
					{
						method: "POST",
						headers: {
							'Content-Type': 'application/json'
						},
						body: JSON.stringify(ServiceRequest)
					});

				apiPromise.then(rep => {
					//				console.log(rep);
					return rep.json();
				}).then(data => {
					//console.log(data);
					if (data.HasErrors) {
						var divError = document.getElementById("divErrorMessage");
						divError.innerHTML = data.Errors[0];
						divError.classList.remove("hidden");
						$.modalNoConflict.close();

						$(".btnPasswordRecovery .save").removeClass("hidden");
						$(".btnPasswordRecovery .saving").addClass("hidden");
						$(".btnPasswordRecovery").removeAttr("disabled");

					}
					if (data.IsSuccess) {

						var redirectUrl = data.Result.ReturnUrl;
						//console.log(redirectUrl);
						if (redirectUrl === null || redirectUrl === undefined) {
							redirectUrl = $("#divPasswordRecovery").attr("data-return-url");
						}
						if (redirectUrl !== null && redirectUrl !== undefined) {
							window.location.href = redirectUrl;
						}
						else {
							window.location.reload();
						}
					}

				});
			}

		};
	});
}


InitializePasswordRecovery();
;



function SavePartnership(ServiceRequest) {
	//ServiceRequest.countryCode = countryCode;

	var url = "/api/accounts/scheduledpaymentapi/ChangePreferences";
	var requestData = JSON.stringify(ServiceRequest);
	var ajaxRequest = $.ajax({
		type: 'POST',
		contentType: "application/json;charset=utf-8",
		url: url,
		data: requestData,
		success: function (data) {

		},
		error: function (x, y, z) {
			//alert(x + '\n' + y + '\n' + z);
		}
	});
	return ajaxRequest;
}
function CancelPartnership(ServiceRequest) {
	var url = "/api/accounts/scheduledpaymentapi/ChangeStatus";
	var requestData = JSON.stringify(ServiceRequest);
	var ajaxRequest = $.ajax({
		type: 'POST',
		contentType: "application/json;charset=utf-8",
		url: url,
		data: requestData,
		success: function (data) {

		},
		error: function (x, y, z) {
			//alert(x + '\n' + y + '\n' + z);
		}
	});
	return ajaxRequest;
}
function SavePartnershipExpDate(ServiceRequest) {
	//ServiceRequest.countryCode = countryCode;

	var url = "/api/accounts/scheduledpaymentapi/ChangeExpDate";
	var requestData = JSON.stringify(ServiceRequest);
	var ajaxRequest = $.ajax({
		type: 'POST',
		contentType: "application/json;charset=utf-8",
		url: url,
		data: requestData,
		success: function (data) {

		},
		error: function (x, y, z) {
			//alert(x + '\n' + y + '\n' + z);
		}
	});
	return ajaxRequest;
}


// Current date
const monthDay = new Intl.DateTimeFormat('en-us', {
	month: 'numeric',
	day: 'numeric',
});

const [currentMonth, slash, currentDay] = monthDay.formatToParts(new Date());

const showHideUpdateInfo = () => {
	let $partnershipUpdateMessage = $("#partnership-update-message");
	let newAmountInputValue = document.getElementById("new-partnership-amount-input").value;
	let newDayInputValue = document.getElementById("partnership-date").value;

	if (newAmountInputValue <= 0 && newDayInputValue <= 0) {
		$partnershipUpdateMessage.fadeOut("slow");
	} else {
		$partnershipUpdateMessage.fadeIn("slow");
	}
}

const showHideUpdateExpInfo = () => {
	let $partnershipUpdateExpMessage = $("#partnership-update-exp-message");

	let newExpMonthInputValue = document.getElementById("partnership-exp-month").value;
	let newExpYearInputValue = document.getElementById("partnership-exp-year").value;

	if (newExpMonthInputValue <= 0 && newExpYearInputValue <= 0) {
		$partnershipUpdateExpMessage.fadeOut("slow");
	} else {
		$partnershipUpdateExpMessage.fadeIn("slow");
	}
}

const findMonth = (monthNumber) => {

	switch (monthNumber) {
		case 1: return "Jan";
		case 2: return "Feb";
		case 3: return "Mar";
		case 4: return "Apr";
		case 5: return "May";
		case 6: return "Jun";
		case 7: return "Jul";
		case 8: return "Aug";
		case 9: return "Sep";
		case 10: return "Oct";
		case 11: return "Nov";
		case 12: return "Dec";
		default: break;
	};
};

const updateNewAmount = (input) => {
	let newAmount = input.value;
	let newAmountSpan = document.getElementById("updated-partnership-amount");

	if (newAmount <= 0) {
		newAmountSpan.innerText = "Your current partnership amount"
	} else {
		newAmountSpan.innerText = `$${newAmount}`;
	}
	showHideUpdateInfo();
};


const updateNewChargeDate = (input) => {
	let chosenDay = input.value;
	let newPartnershipDateSpan = document.getElementById("new-partnership-date");
	let currentMonthNumber = Number(currentMonth.value);

	if (chosenDay <= 0) {
		newPartnershipDateSpan.innerText = `On the same day on the month it is currently deducted`;
	} else if (chosenDay - currentDay.value < 2) {
		let nextMonth = currentMonthNumber + 1;
		let monthShort = findMonth(nextMonth);
		newPartnershipDateSpan.innerText = `Starting ${monthShort} ${chosenDay}`;
	} else if (chosenDay - currentDay.value >= 2) {
		let monthShort = findMonth(currentMonthNumber);
		newPartnershipDateSpan.innerText = `Starting ${monthShort} ${chosenDay}`;
	};
	showHideUpdateInfo();
};

const UpdateExpMonth = (input) => {
	let chosenMonth = input.value;
	let newExpMonthSpan = document.getElementById("new-partnership-exp-month");
	let currentMonthNumber = Number(currentMonth.value);

	if (chosenMonth <= 0) {
		newExpMonthSpan.innerText = `Your expiration month has not changed`;
	};

	newExpMonthSpan.innerText = `${chosenMonth}`;

	showHideUpdateExpInfo();
};

const UpdateExpYear = (input) => {
	let chosenYear = input.value;
	let newExpYearSpan = document.getElementById("new-partnership-exp-year");
	let currentMonthNumber = Number(currentMonth.value);

	if (chosenYear <= 0) {
		newExpMonthSpan.innerText = `Your expiration year has not changed`;
	}

	newExpYearSpan.innerText = `${chosenYear}`;

	showHideUpdateExpInfo();
};

const togglePartnershipDialog = (showThis) => {
	let $partnershipEditDialog = $("#partnership-edit-dialog");
	let $partnershipCancelDialog = $("#partnership-cancel-dialog");

	if (showThis === "edit") {
		$partnershipCancelDialog.fadeOut(100, () => {
			$partnershipEditDialog.fadeIn(100)
		});
	} else if (showThis === "cancel") {
		$partnershipEditDialog.fadeOut(100, () => {
			$partnershipCancelDialog.fadeIn(100)
		});
	}
}

const bluefinStyleOptions = {
	layout: "2",
	inputFontFamily: "11",
	inputStyle: "2",
	labelFontSize: "13",
	labelFontColor: "#000000",
	labelFontFamily: "11",
	width: "300px",
	height: "120px",
}

var ScheduledPaymentViewModelController;

var ScheduledPaymentViewModel = function () {
	var self = this;
	self.ErrorMessage = ko.observable("");
	//self.Orders = ko.observableArray([]);
	self.Orders = ko.observable("");
	self.LoadingOrders = ko.observable(false);
	self.bluefinEnabled = false;
	self.bluefinAccountId = '';
	self.bluefinApiAccessKey = '';
	self.bluefinErrorList = {};
	self.bluefinAuthorizeUrl = '';
	self.bluefinProcessUrl = '';
	self.paymentiFrame = null;

	self.InitializeViewModel = function () {
		if (sessionStorage.getItem('bluefin.enabled') &&
			typeof sessionStorage.getItem('bluefin.enabled') !== 'undefined') {

			self.bluefinEnabled = sessionStorage.getItem('bluefin.enabled');
			self.bluefinAccountId = sessionStorage.getItem('bluefin.accountid');
			self.bluefinApiAccessKey = sessionStorage.getItem('bluefin.apiaccesskey');
			self.bluefinErrorList = sessionStorage.getItem('bluefin.errorlist');
			self.bluefinAuthorizeUrl = sessionStorage.getItem('bluefin.authorizeurl');
			self.bluefinProcessUrl = sessionStorage.getItem('bluefin.processurl');

			self.paymentiFrame = new PaymentiFrame({
				create: true,
				iframeId: "payment_iframe",
				settings: {
					account: self.bluefinAccountId,
					parentId: "iframe_container",
					lang: "en",
					cvv: "required",
					expy: "double_dropdown",
					showFrame: false,
					devServer: self.bluefinAuthorizeUrl,
					...bluefinStyleOptions,
				}
			});
		} else {
			$.ajax({
				url: "/api/cxa/JmmContent/GetBluefinSettings",
				type: "POST",
				data: {},
				async: false,
				contentType: "application/json",
				dataType: "json",
				crossDomain: false,
				success: function (data) {
					if (data) {
						self.bluefinEnabled = data.BluefinEnabled;
						self.bluefinAccountId = data.BluefinAccountId;
						self.bluefinApiAccessKey = data.BluefinApiAccessKey;
						self.bluefinErrorList = data.ErrorList;
						self.bluefinAuthorizeUrl = data.AuthorizeUrl;
						self.bluefinProcessUrl = data.ProcessUrl;

						sessionStorage.setItem('bluefin.enabled', self.bluefinEnabled);
						sessionStorage.setItem('bluefin.accountid', self.bluefinAccountId);
						sessionStorage.setItem('bluefin.apiaccesskey', self.bluefinApiAccessKey);
						sessionStorage.setItem('bluefin.errorlist', self.bluefinErrorList);
						sessionStorage.setItem('bluefin.authorizeurl', self.bluefinAuthorizeUrl);
						sessionStorage.setItem('bluefin.processurl', self.bluefinProcessUrl);

						self.paymentiFrame = new PaymentiFrame({
							create: true,
							iframeId: "payment_iframe",
							settings: {
								account: self.bluefinAccountId,
								parentId: "iframe_container",
								lang: "en",
								cvv: "required",
								expy: "double_dropdown",
								showFrame: false,
								devServer: self.bluefinAuthorizeUrl,
								...bluefinStyleOptions,
							}
						});
					}
				}
			});
		};

	}
	self.SaveChanges = function (data, event) {
		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = target.getAttribute("data-schedule-id");
		//console.log(scheduleID);

		var ServiceRequest = new Object();
		ServiceRequest.ScheduledPaymentId = scheduleID;
		ServiceRequest.Amount = $("#new-partnership-amount-input_" + scheduleID).val();
		ServiceRequest.DayOfMonth = $("#partnership-date_" + scheduleID).val();

		$("#divAlertSuccess_" + scheduleID).addClass("hidden");
		$("#divAlertDanger_" + scheduleID).addClass("hidden");


		$("#btnSaveChangesLoading_" + scheduleID).removeClass("hidden");
		$("#btnSaveChanges_" + scheduleID).addClass("hidden");


		var promise = SavePartnership(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				//self.ErrorMessage(data.Error);
				//self.HideLoadingOrders();
				$("#divAlertSuccess_" + scheduleID).removeClass("hidden");

			} else {
				if (data.Result) {
					$("#divAlertSuccess_" + scheduleID).removeClass("hidden");
					var partnershipMOdelID = "#partnershipEditModal" + scheduleID;
					console.log(partnershipMOdelID);
					$(partnershipMOdelID).on("hide.bs.modal",
						function () {
							//console.log("This is a test");
							window.location.reload();
						});

				} else {
					$("#divAlertDanger_" + scheduleID).removeClass("hidden");
				}
			}

			$("#btnSaveChangesLoading_" + scheduleID).addClass("hidden");
			$("#btnSaveChanges_" + scheduleID).removeClass("hidden");

		});
		return promise;


	};

	self.SaveChangesExpDate = function (data, event) {
		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = target.getAttribute("data-schedule-id");
		//console.log(scheduleID);

		var ServiceRequest = new Object();
		ServiceRequest.ScheduledPaymentId = scheduleID;
		ServiceRequest.ExpMonth = $("#partnership-exp-month_" + scheduleID).val();
		ServiceRequest.ExpYear = $("#partnership-exp-year_" + scheduleID).val();

		$("#divAlertExpSuccess_" + scheduleID).addClass("hidden");
		$("#divAlertExpDanger_" + scheduleID).addClass("hidden");


		$("#btnSaveChangesExpLoading_" + scheduleID).removeClass("hidden");
		$("#btnSaveChangesExp_" + scheduleID).addClass("hidden");


		var promise = SavePartnershipExpDate(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				//self.ErrorMessage(data.Error);
				//self.HideLoadingOrders();
				$("#divAlertExpSuccess_" + scheduleID).removeClass("hidden");

			} else {
				if (data.Result) {
					$("#divAlertExpSuccess_" + scheduleID).removeClass("hidden");
					var paymentEditModalID = "#paymentEditModal" + scheduleID;
					console.log(paymentEditModalID);
					$(paymentEditModalID).on("hide.bs.modal",
						function () {
							//console.log("This is a test");
							window.location.reload();
						});

				} else {
					$("#divAlertExpDanger_" + scheduleID).removeClass("hidden");
				}
			}

			$("#btnSaveChangesExpLoading_" + scheduleID).addClass("hidden");
			$("#btnSaveChangesExp_" + scheduleID).removeClass("hidden");

		});
		return promise;
	};

	self.CancelPartnershipDialog = function (data, event) {
		//console.log("CancelPartnershipDialog");
		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = target.getAttribute("data-schedule-id");
		//console.log(scheduleID);
		let $partnershipEditDialog = $("#partnership-edit-dialog_" + scheduleID);
		let $partnershipCancelDialog = $("#partnership-cancel-dialog_" + scheduleID);

		//console.log($partnershipEditDialog);
		//console.log($partnershipCancelDialog);

		$("#divAlertSuccess_" + scheduleID).addClass("hidden");
		$("#divAlertDanger_" + scheduleID).addClass("hidden");

		$partnershipEditDialog.fadeOut(100, () => { $partnershipCancelDialog.fadeIn(100); });

	};

	self.EditPartnershipDialog = function (data, event) {
		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = target.getAttribute("data-schedule-id");
		let $partnershipEditDialog = $("#partnership-edit-dialog_" + scheduleID);
		let $partnershipCancelDialog = $("#partnership-cancel-dialog_" + scheduleID);

		$("#divCancelAlertSuccess_" + scheduleID).addClass("hidden");
		$("#divCancelAlertDanger_" + scheduleID).addClass("hidden");

		$partnershipCancelDialog.fadeOut(100, () => { $partnershipEditDialog.fadeIn(100); });


	};
	self.CancelPartnership = function (data, event) {
		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = target.getAttribute("data-schedule-id");
		console.log(scheduleID);
		var ServiceRequest = new Object();
		ServiceRequest.ScheduledPaymentId = scheduleID;
		ServiceRequest.Status = "CANCELLED";
		$("#divCancelAlertSuccess_" + scheduleID).addClass("hidden");
		$("#divCancelAlertDanger_" + scheduleID).addClass("hidden");
		var promise = CancelPartnership(ServiceRequest).done(function (data) {
			//console.log(data);
			if (data.Errors !== null & data.Errors !== "undefined") {
				//self.ErrorMessage(data.Error);
				//self.HideLoadingOrders();
				$("#divCancelAlertSuccess_" + scheduleID).removeClass("hidden");

			} else {
				if (data.Result) {
					$("#divCancelAlertSuccess_" + scheduleID).removeClass("hidden");
				} else {
					$("#divCancelAlertDanger_" + scheduleID).removeClass("hidden");
				}
			}
		});
		return promise;


	};
	self.UpdateNewChargeDate = function (data, event) {

		//console.log("UpdateNewChargeDate");
		var cTarget = event.currentTarget;
		//console.log(event);
		//console.log(cTarget);
		var ddlID = cTarget.id;
		//console.log(selectedVal);
		var selectedVal = $("#" + ddlID).val();
		//console.log(selectedVal);

		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = $("#" + ddlID).attr("data-schedule-id");

		//console.log(scheduleID);

		let chosenDay = selectedVal;
		let newPartnershipDateSpan = document.getElementById("new-partnership-date_" + scheduleID);
		let currentMonthNumber = Number(currentMonth.value);

		if (chosenDay <= 0) {
			newPartnershipDateSpan.innerText = `On the same day on the month it is currently deducted`;
		} else if (chosenDay - currentDay.value < 2) {
			let nextMonth = currentMonthNumber + 1;
			let monthShort = findMonth(nextMonth);
			newPartnershipDateSpan.innerText = `Starting ${monthShort} ${chosenDay}`;
		} else if (chosenDay - currentDay.value >= 2) {
			let monthShort = findMonth(currentMonthNumber);
			newPartnershipDateSpan.innerText = `Starting ${monthShort} ${chosenDay}`;
		};
		self.ShowHideUpdateInfo(scheduleID);
	};

	self.ShowHideUpdateInfo = function (scheduleID) {
		let $partnershipUpdateMessage = $("#partnership-update-message_" + scheduleID);
		let newAmountInputValue = document.getElementById("new-partnership-amount-input_" + scheduleID).value;
		let newDayInputValue = document.getElementById("partnership-date_" + scheduleID).value;

		if (newAmountInputValue <= 0 && newDayInputValue <= 0) {
			$partnershipUpdateMessage.fadeOut("slow");
		} else {
			$partnershipUpdateMessage.fadeIn("slow");
		}
	}
	self.ShowHideExpUpdateInfo = function (scheduleID) {
		let $partnershipUpdateExpMessage = $("#partnership-update-exp-message_" + scheduleID);

		let newExpMonthInputValue = document.getElementById("partnership-exp-month_" + scheduleID).value;
		let newExpYearInputValue = document.getElementById("partnership-exp-year_" + scheduleID).value;

		if (newExpMonthInputValue <= 0 && newExpYearInputValue <= 0) {
			$partnershipUpdateExpMessage.fadeOut("slow");
		} else {
			$partnershipUpdateExpMessage.fadeIn("slow");
		}
	}
	self.UpdateNewAmount = function (data, event) {
		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;

		var inputVal = $("#" + target.id).val();
		var scheduleID = target.getAttribute("data-schedule-id");
		//console.log(scheduleID);
		let newAmount = inputVal;
		let newAmountSpan = document.getElementById("updated-partnership-amount_" + scheduleID);

		if (newAmount <= 0) {
			newAmountSpan.innerText = "Your current partnership amount"
		} else {
			newAmountSpan.innerText = `$${newAmount}`;
		}
		self.ShowHideUpdateInfo(scheduleID);
	};


	self.ReplaceCard = function (data, event) {
		var target;
		if (event.target) {
			target = event.target;
		} else if (event.srcElement) {
			target = event.srcElement;
		}
		var scheduleID = target.getAttribute("data-schedule-id");
		var errorDiv = $("#error_div_" + scheduleID);
		var errorList = $("#error_list_" + scheduleID);
		var modalDiv = $("#payment-replace-dialog_" + scheduleID);
		var confirmationDiv = $("#confirmation_div_" + scheduleID);

		$("#btnReplaceCardLoading_" + scheduleID).removeClass("hidden");
		$("#btnReplaceCard_" + scheduleID).addClass("hidden");

		self.paymentiFrame.encrypt({
			failure: function (err) {
				var message = err.message;
				if (self.bluefinErrorList[err.id] !== undefined) {
					message = self.bluefinErrorList[err.id];
				}
				errorList.empty();
				errorList.append("<p><strong>Please fix these card issues:</strong></p>");
				var list = errorList.append("<ul class=\"list list-unstyled text-danger\"></ul>").find('ul');
				list.append("<li>" + err.id + " - " + message + "</li>");
				modalDiv.addClass("hidden");
				errorList.removeClass("hidden");
				$("#btnReplaceCardLoading_" + scheduleID).addClass("hidden");
				$("#btnReplaceCard_" + scheduleID).removeClass("hidden");
			},
			invalidInput: function (data) {
				errorList.empty();
				errorList.append("<p><strong>Please fix these card issues:</strong></p>");
				var list = errorList.append("<ul class=\"list list-unstyled text-danger\"></ul>").find('ul');
				for (var i = 0; i < data.invalidInputs.length; i++) {
					var code = data.invalidInputs[i].code;
					var message = data.invalidInputs[i].message;
					if (self.bluefinErrorList[code] !== undefined) {
						message = self.bluefinErrorList[code];
					}
					list.append("<li><span>" +
						code +
						" - " +
						message.replace("{0}", data.invalidInputs[i].field) +
						"</span></li>");
				}
				modalDiv.addClass("hidden");
				errorDiv.removeClass("hidden");
				$("#btnReplaceCardLoading_" + scheduleID).addClass("hidden");
				$("#btnReplaceCard_" + scheduleID).removeClass("hidden");
			},
			success: function (res) {
				var paymentid = res.id;
				var paymenttoken = res.eToken;
				var expiration = res.masked.expy;
				var cartAmount = 0;

				var paymentRequestData = {
					response_format: "JSON",
					account_id: self.bluefinAccountId,
					api_accesskey: self.bluefinApiAccessKey,
					tender_type: "CARD",
					transaction_type: "AUTHORIZATION",
					transaction_amount: cartAmount,
					etoken: paymenttoken,
					custom_id: paymentid,
					card_expiration: expiration
				};


				var paymentRequest = $.ajax({
					url: self.bluefinProcessUrl,
					method: "POST",
					data: paymentRequestData,
					dataType: "html"
				});

				paymentRequest.fail(function (jqXHR, textStatus) {
					console.log("Payment Request failed: " + textStatus);
				});

				paymentRequest.done(function (msg, textStatus, jqXHR) {
					if (textStatus === "error") {
						console.log(msg);
						var message = msg;
						if (self.bluefinErrorList[msg] !== undefined) {
							message = self.bluefinErrorList[msg];
						}
						errorList.empty();
						var list = errorList.append("<ul class=\"list list-unstyled text-danger\"></ul>")
							.find('ul');
						list.append("<li>Payment Error: " + message + "</li>");
						modalDiv.addClass("hidden");
						errorDiv.removeClass("hidden");
						$("#btnReplaceCardLoading_" + scheduleID).addClass("hidden");
						$("#btnReplaceCard_" + scheduleID).removeClass("hidden");
					} else {
						var url = "/api/accounts/scheduledpaymentapi/ReplaceScheduledPaymentCard";
						var cardData = JSON.parse(msg);
						var ServiceRequest = new Object();
						ServiceRequest.PaymentType = 'Payconnex';
						ServiceRequest.Token = cardData.transaction_id;
						ServiceRequest.ExpiryMonth = cardData.card_expiration.substring(0, 2);
						ServiceRequest.ExpiryYear = cardData.card_expiration.substring(2, 4);
						ServiceRequest.CardType = cardData.card_brand;
						ServiceRequest.Last4 = cardData.last4;
						ServiceRequest.IsPrimary = true;
						ServiceRequest.ScheduledPaymentId = scheduleID;

						var requestData = JSON.stringify(ServiceRequest);
						$.ajax({
							type: 'POST',
							contentType: "application/json;charset=utf-8",
							url: url,
							data: requestData,
							success: function (data) {
								if (data.HasErrors) {
									var message = data.Errors[0];
									errorList.empty();
									var list = errorList
										.append("<ul class=\"list list-unstyled text-danger\"></ul>").find('ul');
									list.append("<li>Payment Error: " + message + "</li>");
									modalDiv.addClass("hidden");
									errorDiv.removeClass("hidden");
								}
								if (data.IsSuccess) {
									modalDiv.addClass("hidden");
									confirmationDiv.removeClass("hidden");
								}
							},
							error: function (xhr, status, message) {
								errorList.empty();
								var list = errorList.append("<ul class=\"list list-unstyled text-danger\"></ul>")
									.find('ul');
								list.append("<li>Payment Error: " + message + "</li>");
								modalDiv.addClass("hidden");
								errorDiv.removeClass("hidden");
							},
							complete: function () {
								$("#btnReplaceCardLoading_" + scheduleID).addClass("hidden");
								$("#btnReplaceCard_" + scheduleID).removeClass("hidden");
							}
						});
					}
				});
			}
		});
	}

	self.RetryReplaceCard = function (data, event) {
		var target;
		if (event.target) {
			target = event.target;
		} else if (event.srcElement) {
			target = event.srcElement;
		}
		var scheduleID = target.getAttribute("data-schedule-id");
		var errorDiv = $("#error_div_" + scheduleID);
		var modalDiv = $("#payment-replace-dialog_" + scheduleID);

		errorDiv.addClass("hidden");
		modalDiv.removeClass("hidden");
	}

	self.UpdateExpMonth = function (data, event) {

		//console.log("UpdateNewExpYear");
		var cTarget = event.currentTarget;
		//console.log(event);
		//console.log(cTarget);
		var ddlID = cTarget.id;
		//console.log(selectedVal);
		var selectedVal = $("#" + ddlID).val();
		//console.log(selectedVal);

		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = $("#" + ddlID).attr("data-schedule-id");

		//console.log(scheduleID);

		let chosenMonth = selectedVal;
		let newExpMonthSpan = document.getElementById("new-partnership-exp-month_" + scheduleID);

		newExpMonthSpan.innerText = `${chosenMonth}`;

		self.ShowHideExpUpdateInfo(scheduleID);
	};

	self.UpdateExpYear = function (data, event) {

		//console.log("UpdateNewExpYear");
		var cTarget = event.currentTarget;
		//console.log(event);
		//console.log(cTarget);
		var ddlID = cTarget.id;
		//console.log(selectedVal);
		var selectedVal = $("#" + ddlID).val();
		//console.log(selectedVal);

		var target;
		if (event.target) target = event.target;
		else if (event.srcElement) target = event.srcElement;
		if (target.nodeType == 3) // defeat Safari bug
			target = target.parentNode;
		var scheduleID = $("#" + ddlID).attr("data-schedule-id");

		//console.log(scheduleID);

		let chosenYear = selectedVal;
		let currentYear = Date.now().currentYear;
		let newExpYearSpan = document.getElementById("new-partnership-exp-year_" + scheduleID);
		let currentMonthNumber = Number(currentMonth.value);

		newExpYearSpan.innerText = `${chosenYear}`;

		//if (chosenYear <= currentYear) {
		//	newPartnershipExpYear.innerText = `Year must be greater than or equal to current year`;
		//};

		self.ShowHideExpUpdateInfo(scheduleID);
	};




	self.RefreshPage = function () {
		window.location.reload();
	}
}


function InitiialScheduledPaymentServices() {

	var initializeViewModel = false;
	ScheduledPaymentViewModelController = new ScheduledPaymentViewModel();
	if ($("#divScheduledPaymentContainer").length > 0) {
		ko.applyBindings(ScheduledPaymentViewModelController,
			document.getElementById("divScheduledPaymentContainer"));
		initializeViewModel = true;
	}

	if (initializeViewModel) {
		ScheduledPaymentViewModelController.InitializeViewModel();
	}

}


$(document).ready(function () {
	InitiialScheduledPaymentServices();
});

function PerformDonationValiation(evt) {
	console.log(evt.charCode);
	if (evt.charCode == 46) {
		$("#divAlertDangerPeriodError").removeClass("hide");
		//$("#divAlertDangerPeriodError").fadeIn("slow");
	} else {
		//$("#divAlertDangerPeriodError").addClass("hidden");
	}
	return evt.charCode >= 48 && evt.charCode <= 57;
}


;
