var membershipApp = angular.module('membershipApp', ['ngSanitize', 'ngCookies', 'pascalprecht.translate', 'angularUtils.directives.dirPagination', 'app'])

membershipApp.config(['$httpProvider', '$translateProvider', function ($httpProvider, $translateProvider) {
	  $httpProvider.defaults.timeout = 5000;

	 
	  //$translateProvider.translations('en', dictEN)
	  //                .translations('bg', dictBG);

	  // $translateProvider.preferredLanguage('bg');

	$translateProvider.fallbackLanguage('bg');
	$translateProvider.registerAvailableLanguageKeys(['bg', 'en', 'es', 'esc', 'pt'], {
		'bg_*': 'bg',
		'en_*': 'en',
		'es_*': 'es',
		'esc_*': 'esc',
		'pt_*': 'pt'
	});

	var ob_bg;
	var ob_en;
	var ob_es;
	var ob_esc;
	var ob_pt;

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/bg.json",
		success: function (json) {
			ob_bg = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/en.json",
		success: function (json) {
			ob_en = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/es.json",
		success: function (json) {
			ob_es = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/esc.json",
		success: function (json) {
			ob_esc = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/pt.json",
		success: function (json) {
			ob_pt = json;
		}
	});

	$translateProvider.translations('en', ob_en);
	$translateProvider.translations('bg', ob_bg);
	$translateProvider.translations('es', ob_es);
	$translateProvider.translations('esc', ob_esc);
	$translateProvider.translations('pt', ob_pt);

	$translateProvider.preferredLanguage('bg');
	$translateProvider.preferredLanguage('en');
	$translateProvider.useLocalStorage();
}]);
"use strict";

membershipApp.controller('MembershipController', ['$scope', '$http', '$timeout', '$translate', '$filter', function ($scope, $http, $timeout, $translate, $filter) {
	if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
		$('.logout').on('click', function () {
			$('.logout').toggleClass('active');
		});

		$('body').addClass('mobile')
	}

	var $translateThis = $filter('translate');
	$scope.order = { orderZone: $scope.cardZone, orderCard: $scope.cardType };
	var today = new Date();
	var dd = today.getDate();
	var mm = today.getMonth() + 1;
	var yyyy = today.getFullYear();
	var lastYear = today.getFullYear() - 1;
	var nextYear = today.getFullYear() +	 1;
	var last100Year = today.getFullYear() - 100;
	$scope.newRegistration = false;
	$scope.dashLogin = true;
	$scope.visitsItemsSize = 10;
	$scope.productsItemsSize = 10;
	$scope.choosenMembership = false;
	$scope.Discount = 0;

	var startYear = new Date().getFullYear().toString().substr(-2);
    var currentYear = new Number(startYear);
    currentYear += 20;
    $scope.years = [];

    while (startYear <= currentYear) {
        $scope.years.push(startYear++);
    }

	// Finding TimeZone Offset
	if(timeZone){	
		const timeZones = ["Europe/Andorra","Asia/Dubai","Asia/Kabul","Europe/Tirane","Asia/Yerevan","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","America/Argentina/Buenos_Aires","America/Argentina/Cordoba","America/Argentina/Salta","America/Argentina/Jujuy","America/Argentina/Tucuman","America/Argentina/Catamarca","America/Argentina/La_Rioja","America/Argentina/San_Juan","America/Argentina/Mendoza","America/Argentina/San_Luis","America/Argentina/Rio_Gallegos","America/Argentina/Ushuaia","Pacific/Pago_Pago","Europe/Vienna","Australia/Lord_Howe","Antarctica/Macquarie","Australia/Hobart","Australia/Melbourne","Australia/Sydney","Australia/Broken_Hill","Australia/Brisbane","Australia/Lindeman","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Asia/Baku","America/Barbados","Asia/Dhaka","Europe/Brussels","Europe/Sofia","Atlantic/Bermuda","Asia/Brunei","America/La_Paz","America/Noronha","America/Belem","America/Fortaleza","America/Recife","America/Araguaina","America/Maceio","America/Bahia","America/Sao_Paulo","America/Campo_Grande","America/Cuiaba","America/Santarem","America/Porto_Velho","America/Boa_Vista","America/Manaus","America/Eirunepe","America/Rio_Branco","America/Nassau","Asia/Thimphu","Europe/Minsk","America/Belize","America/St_Johns","America/Halifax","America/Glace_Bay","America/Moncton","America/Goose_Bay","America/Blanc-Sablon","America/Toronto","America/Nipigon","America/Thunder_Bay","America/Iqaluit","America/Pangnirtung","America/Atikokan","America/Winnipeg","America/Rainy_River","America/Resolute","America/Rankin_Inlet","America/Regina","America/Swift_Current","America/Edmonton","America/Cambridge_Bay","America/Yellowknife","America/Inuvik","America/Creston","America/Dawson_Creek","America/Fort_Nelson","America/Whitehorse","America/Dawson","America/Vancouver","Indian/Cocos","Europe/Zurich","Africa/Abidjan","Pacific/Rarotonga","America/Santiago","America/Punta_Arenas","Pacific/Easter","Asia/Shanghai","Asia/Urumqi","America/Bogota","America/Costa_Rica","America/Havana","Atlantic/Cape_Verde","America/Curacao","Indian/Christmas","Asia/Nicosia","Asia/Famagusta","Europe/Prague","Europe/Berlin","Europe/Copenhagen","America/Santo_Domingo","Africa/Algiers","America/Guayaquil","Pacific/Galapagos","Europe/Tallinn","Africa/Cairo","Africa/El_Aaiun","Europe/Madrid","Africa/Ceuta","Atlantic/Canary","Europe/Helsinki","Pacific/Fiji","Atlantic/Stanley","Pacific/Chuuk","Pacific/Pohnpei","Pacific/Kosrae","Atlantic/Faroe","Europe/Paris","Europe/London","Asia/Tbilisi","America/Cayenne","Africa/Accra","Europe/Gibraltar","America/Nuuk","America/Danmarkshavn","America/Scoresbysund","America/Thule","Europe/Athens","Atlantic/South_Georgia","America/Guatemala","Pacific/Guam","Africa/Bissau","America/Guyana","Asia/Hong_Kong","America/Tegucigalpa","America/Port-au-Prince","Europe/Budapest","Asia/Jakarta","Asia/Pontianak","Asia/Makassar","Asia/Jayapura","Europe/Dublin","Asia/Jerusalem","Asia/Kolkata","Indian/Chagos","Asia/Baghdad","Asia/Tehran","Atlantic/Reykjavik","Europe/Rome","America/Jamaica","Asia/Amman","Asia/Tokyo","Africa/Nairobi","Asia/Bishkek","Pacific/Tarawa","Pacific/Enderbury","Pacific/Kiritimati","Asia/Pyongyang","Asia/Seoul","Asia/Almaty","Asia/Qyzylorda","Asia/Qostanay","Asia/Aqtobe","Asia/Aqtau","Asia/Atyrau","Asia/Oral","Asia/Beirut","Asia/Colombo","Africa/Monrovia","Europe/Vilnius","Europe/Luxembourg","Europe/Riga","Africa/Tripoli","Africa/Casablanca","Europe/Monaco","Europe/Chisinau","Pacific/Majuro","Pacific/Kwajalein","Asia/Yangon","Asia/Ulaanbaatar","Asia/Hovd","Asia/Choibalsan","Asia/Macau","America/Martinique","Europe/Malta","Indian/Mauritius","Indian/Maldives","America/Mexico_City","America/Cancun","America/Merida","America/Monterrey","America/Matamoros","America/Mazatlan","America/Chihuahua","America/Ojinaga","America/Hermosillo","America/Tijuana","America/Bahia_Banderas","Asia/Kuala_Lumpur","Asia/Kuching","Africa/Maputo","Africa/Windhoek","Pacific/Noumea","Pacific/Norfolk","Africa/Lagos","America/Managua","Europe/Amsterdam","Europe/Oslo","Asia/Kathmandu","Pacific/Nauru","Pacific/Niue","Pacific/Auckland","Pacific/Chatham","America/Panama","America/Lima","Pacific/Tahiti","Pacific/Marquesas","Pacific/Gambier","Pacific/Port_Moresby","Pacific/Bougainville","Asia/Manila","Asia/Karachi","Europe/Warsaw","America/Miquelon","Pacific/Pitcairn","America/Puerto_Rico","Asia/Gaza","Asia/Hebron","Europe/Lisbon","Atlantic/Madeira","Atlantic/Azores","Pacific/Palau","America/Asuncion","Asia/Qatar","Indian/Reunion","Europe/Bucharest","Europe/Belgrade","Europe/Kaliningrad","Europe/Moscow","Europe/Simferopol","Europe/Kirov","Europe/Volgograd","Europe/Astrakhan","Europe/Saratov","Europe/Ulyanovsk","Europe/Samara","Asia/Yekaterinburg","Asia/Omsk","Asia/Novosibirsk","Asia/Barnaul","Asia/Tomsk","Asia/Novokuznetsk","Asia/Krasnoyarsk","Asia/Irkutsk","Asia/Chita","Asia/Yakutsk","Asia/Khandyga","Asia/Vladivostok","Asia/Ust-Nera","Asia/Magadan","Asia/Sakhalin","Asia/Srednekolymsk","Asia/Kamchatka","Asia/Anadyr","Asia/Riyadh","Pacific/Guadalcanal","Indian/Mahe","Africa/Khartoum","Europe/Stockholm","Asia/Singapore","America/Paramaribo","Africa/Juba","Africa/Sao_Tome","America/El_Salvador","Asia/Damascus","America/Grand_Turk","Africa/Ndjamena","Indian/Kerguelen","Asia/Bangkok","Asia/Dushanbe","Pacific/Fakaofo","Asia/Dili","Asia/Ashgabat","Africa/Tunis","Pacific/Tongatapu","Europe/Istanbul","America/Port_of_Spain","Pacific/Funafuti","Asia/Taipei","Europe/Kiev","Europe/Uzhgorod","Europe/Zaporozhye","Pacific/Wake","America/New_York","America/Detroit","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Indiana/Indianapolis","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Vevay","America/Chicago","America/Indiana/Tell_City","America/Indiana/Knox","America/Menominee","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/North_Dakota/Beulah","America/Denver","America/Boise","America/Phoenix","America/Los_Angeles","America/Anchorage","America/Juneau","America/Sitka","America/Metlakatla","America/Yakutat","America/Nome","America/Adak","Pacific/Honolulu","America/Montevideo","Asia/Samarkand","Asia/Tashkent","America/Caracas","Asia/Ho_Chi_Minh","Pacific/Efate","Pacific/Wallis","Pacific/Apia","Africa/Johannesburg","America/Antigua","America/Anguilla","Africa/Luanda","Antarctica/McMurdo","America/Aruba","Europe/Mariehamn","Europe/Sarajevo","Africa/Ouagadougou","Asia/Bahrain","Africa/Bujumbura","Africa/Porto-Novo","America/St_Barthelemy","America/Kralendijk","Africa/Gaborone","Africa/Kinshasa","Africa/Lubumbashi","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Europe/Busingen","Africa/Djibouti","America/Dominica","Africa/Asmara","Africa/Addis_Ababa","Africa/Libreville","America/Grenada","Europe/Guernsey","Africa/Banjul","Africa/Conakry","America/Guadeloupe","Africa/Malabo","Europe/Zagreb","Europe/Isle_of_Man","Europe/Jersey","Asia/Phnom_Penh","Indian/Comoro","America/St_Kitts","Asia/Kuwait","America/Cayman","Asia/Vientiane","America/St_Lucia","Europe/Vaduz","Africa/Maseru","Europe/Podgorica","America/Marigot","Indian/Antananarivo","Europe/Skopje","Africa/Bamako","Pacific/Saipan","Africa/Nouakchott","America/Montserrat","Africa/Blantyre","Africa/Niamey","Asia/Muscat","Africa/Kigali","Atlantic/St_Helena","Europe/Ljubljana","Arctic/Longyearbyen","Europe/Bratislava","Africa/Freetown","Europe/San_Marino","Africa/Dakar","Africa/Mogadishu","America/Lower_Princes","Africa/Mbabane","Africa/Lome","Africa/Dar_es_Salaam","Africa/Kampala","Pacific/Midway","Europe/Vatican","America/St_Vincent","America/Tortola","America/St_Thomas","Asia/Aden","Indian/Mayotte","Africa/Lusaka","Africa/Harare" ]

		let timezoneP = timeZone.split(') ');
		let timezonePi = timezoneP[1].split(',');
		let timeZoneC = timezonePi[0];
		let timeZoneF = timeZones.find(el => el.includes(timeZoneC)); 

		let timeZoneOffsetSplit = timezoneP[0].split('UTC');
		$scope.timeZoneOffset = timeZoneOffsetSplit[1];

		// moment.tz.setDefault(timeZoneF);
	}

	$(window).on('resize load', function(){
		if ( $(window).width() < 768 ){
			$scope.visitsItemsSize = 3;
			$scope.productsItemsSize = 3;			
		}else{
			$scope.visitsItemsSize = 10;
			$scope.productsItemsSize = 10;
		}
		$scope.$apply();
	})

	if (isMobile)
		$scope.mobileApp = isMobile;

	if(hideDate)
		$scope.hideDate = hideDate;

	$scope.text = 'me@example.com';
	$scope.emailFormat = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
	$scope.phoneFormat = gym[0].Culture.includes('GB') ? /^[0-9\s]{5,11}$/ : /^[0-9]{5,15}$/;

	if (dd < 10) {
		dd = '0' + dd
	}

	if (mm < 10) {
		mm = '0' + mm
	}

	today = mm + '/' + dd + '/' + yyyy;
	todayOneYearAgo = mm + '/' + dd + '/' + lastYear;
	todayPlusOneYear = mm + '/' + dd + '/' + nextYear;
	todayOneHundredYearAgo = mm + '/' + dd + '/' + last100Year;

	if( $scope.mobileApp ){
		$scope.filterStartDate = new Date(todayOneYearAgo);
		$scope.filterEndDate = new Date(today);
	}

	// $scope.showLogin = function () {
	// 	$scope.dashLogin = true;
	// }
	// $scope.showLogin();

	// $scope.hideLogin = function () {
	// 	$scope.dashLogin = false;
	// }

	if (newRegistration) {
		$scope.newRegistration = true;
	}

	var paysafeinit = false;
	var Model = window.Model;

	if (clientModel) {
		$scope.Model = clientModel;
		$scope.Client = $scope.Model.Client;

		if ($scope.Model.Register) {
			$scope.FormRegister = $scope.Model.Register;
		}
	}

	if (gymdivision) {
		$scope.Division = gymdivision.GymName;
		$scope.DivisionID = gymdivision.GymID;
		var $translateThis = $filter('translate');
		var title = $translateThis('title');
		document.title = $scope.Division + ' ' + title;
	}


	$scope.dateFeaturedFormat = 'dd/MM/yyyy';
	$scope.dateFeaturedFormatDatepicker = 'dd/mm/yy';
	if (gym) {
		$scope.gym = gym;
		$($scope.gym[0].BODYPart).prependTo('.body-scripts');
		$($scope.gym[0].HEADPart).appendTo(document.head);

		$scope.gymName = $scope.gym.GymName;
		$scope.AdditionInfo;

		if ($scope.AdditionInfo) {
			var prtext = $scope.AdditionInfo.replace(/\n/g, '<br />')
			$(window).on('load', function () {
				$('.section-addtext').html(prtext);
			});
		}

		if ( gym[0].Culture == 'en-US' ) {
			$scope.dateFeaturedFormat = 'MM/dd/yyyy';
			$scope.dateFeaturedFormatDatepicker = 'mm/dd/yy';
		}
		
		
	}


	// Cancel Membership
	$scope.cancelMembership = function(ServiceID, CardID, ClientID){
		var translated = $translateThis('Are you sure you want to cancel this Membership?');

		let dataObject = {
			ServiceID: ServiceID,
			CardID: CardID,
			ClientID: ClientID,
			Email: $scope.Client.Email,
			GymID: gymid,
			Namespace: namespace
		}

		Swal.fire({
			type: 'warning',
			title: translated,
			showCancelButton: true,
		}).then(function(result) {
			if (result.value) {
				$http({
					method: 'POST',
					url:'/membership/CancelRecurring',
					data: dataObject
				}).success(function (data) {
					console.log(data);

					if(data == 'true' || data == true || data == 'True'){
						var translated = $translateThis('Membership Cancled.');
						Swal.fire({
							type: 'success',
							title: translated,
							onAfterClose: (function () {
								window.location.reload(true);
							})
						})
					}else{
						var translated = $translateThis('Cannot cancel recurring!');
						Swal.fire({
							type: 'warning',
							title: translated
						})
					}

				}).error(function () {
		
				});
			}
		});
	}

	if (learnedFrom) {
		$scope.learnedFrom = learnedFrom
	}

	$scope.getClientServices = function () {
		var dataObject = {
			Namespace: namespace,
			Email: $scope.Client.Email,
			datestart: today,
			dateend: todayPlusOneYear
		}
		$http({
			method: 'POST',
			url:'/ScheduleV2/GetClientSchedule',
			data: dataObject
		}).success(function (data) {
			if ( data.length == 0 ) {
				$scope.noEvents = true;
			}
			else{
				$scope.noEvents = false;	
			}
		}).error(function () {

		});
	}

	// Cients Portal Filter 
	var from = $("#from");
	var to = $("#to");

	$scope.getItemsFromThePast = function (item) {
		var today = new Date();
		return item.date < today;
	}

	$scope.currentLang = $translate.proposedLanguage() || $translate.use();

	from.datepicker({
		changeMonth: true,
		numberOfMonths: 1,
		dateFormat: $scope.dateFeaturedFormatDatepicker,
		onSelect: function (dateText, inst) {
			var origin_date = $(this).val();

			if ($scope.gym[0].Culture != 'en-US') {
				var res = origin_date.split("/");
				var date = res[1] + '/' + res[0] + '/' + res[2];
			}

			$scope.filterStartDate = date;
			to.datepicker("option", "minDate", origin_date);
		}
	});

	to.datepicker({
		changeMonth: true,
		numberOfMonths: 1,
		dateFormat: $scope.dateFeaturedFormatDatepicker,
		// dateFormat: 'mm.dd.yy',
		onSelect: function (dateText, inst) {
			var origin_date = $(this).val();

			if ($scope.gym[0].Culture != 'en-US') {
				var res = origin_date.split("/");
				var date = res[1] + '/' + res[0] + '/' + res[2];
			}

			$scope.filterEndDate = date;
			from.datepicker("option", "maxDate", origin_date);
		}
	});

	$('.ui-datepicker').addClass('notranslate');

	// Tabs
	$('#mytabs .nav-tabs a').click(function (e) {
		e.preventDefault()
		$(this).tab('show')
	});

	// Rate function
	$scope.rate = function (rate, comment) {
		var dataObject = {
			Rating: rate,
			ClientID: $scope.Client.ClientID,
			Comment: comment,
			Namespace: namespace,
			GymId: $scope.gymId,
			VisitID: $scope.visitId,
		}
		$http({
			method: 'POST',
			url: '/rating/RateVisit',
			data: dataObject
		}).success(function (data) {
			$('.popup-wrapper').removeClass('show');
		}).error(function () {
		});
	}

	$scope.dateFilter = function (from, to) {
		var fromT = new Date(from);
		var toT = new Date(to);
		toT.setHours(23, 59, 0, 0);

		var dataObject = {
			ClientID: $scope.Client.ClientID,
			CardID: $scope.Client.CardID,
			Email: $scope.Client.Email,
			DateStart: fromT,
			DateEnd: toT,
			Namespace: namespace,
			GymId: gymid,
		}

		$scope.paging = [];
		$scope.products_paging = [];

		$http({
			method: 'POST',
			url: '/account/GetReport',
			data: dataObject
		}).success(function (data) {
			$scope.visits = data.Visits;
			$scope.memberships = data.PastServices;
			$scope.products = data.Products;
			let dataServices  = data.Services;
			$scope.Services  = data.Services;
			$scope.Deposit = data.Deposit;

			if (dataServices.length > 0) {
				$scope.activeServices = false;

				for (let index = 0; index < dataServices.length; index++) {
					const element = dataServices[index];
					let now = moment();
					let elDateStart = moment(element.DateStart);
					if(elDateStart <= now){
						element.State = 'current';
					}else{
						element.State = 'future';
					}
				}

				$timeout(function() {
					$scope.membershipFilter = {State: 'current'};
					$scope.Services = dataServices;
				})
			} else {
				$scope.activeServices = true;
			}
		}).error(function () {
		});
	}

	$(window).on('load', function () {
		if ($('.dashboard').length) {

			$(".membership-wrapper").addClass('show-forgetme');

			setTimeout(function () {
				$scope.dateFilter(todayOneYearAgo, today);
			}, 1500);
		}
		// if ( $scope.Client ) {
		// 	$scope.getClientServices();
		// }
		
		let phoneLang = getLanguage($scope.gym[0].Culture);
		var input = document.querySelector("#Telephone");
		if(input){

			if($scope.gym[0].Culture.includes('GB')){
				$('#Telephone')
				.on('keydown', function (e) {
					if(e.keyCode == 32){
						return false;
					}
				})
				.on('keyup', function (e) {
					if(e.target.value.length == 4){
						e.target.value = e.target.value += ' ';
					}
				});
			}

			$scope.inputPhone = window.intlTelInput(input, {
				autoHideDialCode: false,
				preferredCountries: [phoneLang],
				separateDialCode: true
			});

			input.addEventListener("countrychange", function() {
                let countryinfo = $scope.inputPhone.getSelectedCountryData()
                if(countryinfo.dialCode == '44'){
                    input.value = input.value.split(' ').join('');
                    if(input.value.length > 4){
                        input.value = input.value.substring(0, 4) + " " + input.value.substring(4, 10);
                    }
					
                    $scope.phoneFormat = /^[0-9\s]{5,11}$/;
                    $('#Telephone')
                    .on('keydown', function (e) {
						$('#Telephone').addClass('ng-touched');
                        if(e.keyCode == 32){
                            return false;
                        }
                    })
                    .on('keyup', function (e) {
                        if(e.target.value.length == 4){
                            e.target.value = e.target.value += ' ';
                        }
                    });
                }else{
                    input.value = input.value.split(' ').join('');
                    $scope.phoneFormat = /^[0-9]{5,15}$/;
                    $scope.waiverForm.Telephone.$validate()
                    $('#Telephone')
                    .on('keydown', function (e) {
                        if(e.keyCode == 32){
                            return false;
                        }
                    })
                    .on('keyup', function (e) {
                        if(e.target.value.length == 4){
                            // e.target.value = e.target.value += ' ';
                        }
                    });
                }
            });
		}
	})

	// Get Language from backend settings
	function getLanguage(culture){
		let lang = culture.split('-');
		lang = lang[1].toLowerCase();
		return lang;
	}

	// Popup
	$('.popup-wrapper .close').on('click', function (e) {
		e.preventDefault();
		$('.popup-wrapper').removeClass('show');
	})

	$scope.popupOpen = function (visitId, gymId) {
		$('.popup-wrapper[data-id="rateVisit"]').addClass('show');
		$scope.visitId = visitId;
		$scope.gymId = gymId;
	}

	$('.calendar-filter .field i').on('click', function (e) {
		$(this).parent().find('input').datepicker('show');
	});

	// Get Settings

	if (namespace) {
		$scope.namespace = namespace;
		$scope.getSettings = function () {
			var dataObject = {
			    Namespace: namespace,
			    GymID: $scope.DivisionID
			}
			$http({
				method: 'POST',
				url: '/Membership/GetSettings',
				data: dataObject
			}).success(function (data) {
				$scope.membershipSettings = data;
				$scope.countriesSettings = data.Countries;

				if ($scope.membershipSettings.Culture == 'bg-BG') {
					$scope.currency = 'лв.';
				}else if($scope.membershipSettings.Culture.includes('-ES') || $scope.membershipSettings.Culture.includes('pt')){
					$scope.currency = 'eur';
				}else if($scope.membershipSettings.Culture.includes('-GB')){
					$scope.currency = '£';
				}else {
					$scope.currency = '$';
				}

				if (customCurrency) {
					$scope.currency = customCurrency;
				}

				checActivePaymentMethods($scope.membershipSettings);
			}).error(function () {
				// console.log('error');
			});
		}

		$scope.getSettings();
	}

	// Index forms

	// ForgotPassword
	$scope.accForgotPassword = function () {
		$scope.loading = true;
		var gymid = $('#accGymID').val();
		var namespace = $('#accNamespace').val();
		var email = $('#Email').val();
        email = email.replace(/ /g,'');

		var dataObject = {
			Email: email,
			Namespace: namespace,
			GymID: gymid
		}

		$http({
			method: 'POST',
			url: '/account/forgotpassword/',
			data: dataObject
		}).success(function (data) {
			var data = data;

			if (data == 'Success') {
				var translated = $translateThis('SuccessPass');
				$('.validation-errors').html('<div class="section-valid success"><p>' + translated + '</p></div>');
			} else {
				var translated = $translateThis(data);
				$('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
			}

			$scope.loading = false;
		}).error(function () {
			// console.log('error');
		});
	}

	if ($('.section-authorize').is('.resetPassword')) {
		$scope.matchingPassword = false;
		$('#Password, #ConfirmPassword').on('keyup', function () {
			if ($('#Password').val() == $('#ConfirmPassword').val()) {
				$('.validation-errors').html('');
				$scope.matchingPassword = true;
			} else {
				var translated = $translateThis('notMaching');
				$('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
				$scope.matchingPassword = false;
			}
		});
	}


	if (code) {
		$scope.code = code;
	}

	$scope.resetSuccess = false;
	$scope.resetPasswordRelocate = function(){
		var currentHref = window.location;
		var href = currentHref.origin + '/Account/index?nameSpace=' + namespace + '&gymId=' + $scope.DivisionID;
		if ( isMobile == true ) {
			href += '&isMobile=true';
		}

		window.location.replace(href);
	}

	// ResetPassword
	$scope.resetPassword = function () {
		if ($scope.matchingPassword == true) {
			$scope.loading = true;

			var namespace = $('#accNamespace').val();
			var email = $('#Email').val();
        	email = email.replace(/ /g,'');
			var password = $('#Password').val();
			var confirmPassword = $('#ConfirmPassword').val();

			var dataObject = {
				Email: email,
				Namespace: namespace,
				ConfirmPassword: confirmPassword,
				Password: password,
				Code: $scope.code
			}

			$http({
				method: 'POST',
				url: '/account/resetpassword/',
				data: dataObject
			}).success(function (data) {
				var data = data;

				if (data == 'Success') {
					$scope.resetSuccess = true;
					// window.location.replace(href);
				} else {
					var translated = $translateThis(data);
					$('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
				}
				$scope.loading = false;
			}).error(function () {
				// console.log('error');
			});
		}
	}

	$scope.changePassword = function(){
		if ($scope.matchingPassword == true) {
			$scope.loading = true;

			var dataObject = {
				GymID: $('#accGymID').val(),
				Namespace: $('#accNamespace').val(),
				OldPassword: $('#OldPassword').val(),
				NewPassword: $('#Password').val()
			}

			$http({
				method: 'POST',
				url: '/account/changepassword/',
				data: dataObject
			}).success(function (data) {
				var data = data;
				var translated = $translateThis(data);
				$('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
				
				if (data == 'Success') {
					$('.validation-errors .section-valid').addClass('success');
				}
				$scope.loading = false;
			}).error(function () {
				// console.log('error');
			});
		}
	}

	// Get Gyms
	$scope.getGyms = function () {
		var dataObject = {
			Namespace: namespace
		}
		$http({
			method: 'POST',
			url: '/Membership/GetGyms',
			data: dataObject
		}).success(function (data) {
			$scope.membershipGyms = data;

		}).error(function () {
			// console.log('error');
		});
	}

	$scope.getGyms();

	if (result) {
		$scope.cancelResult = result;
	}

	function setCookie(key, value) {
		var val = value;
		var expires = new Date();
		expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));
		document.cookie = key + '=' + value + ';expires=' + expires.toUTCString() + ';path=/';
		if (val != "true") {
			$('body').addClass('pound-currency');
		} else {
			$('body').removeClass('pound-currency');
		}
	}

	function getCookie(key) {
		var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
		return keyValue ? keyValue[2] : null;
	}

	$scope.redirectLogin = function () {
		var href = window.location;
		var currentHref = href.origin + '/Account?nameSpace=' + namespace + '&gymId=' + $scope.DivisionID;
		if ( isMobile == true ) {
			currentHref += '&isMobile=true';
		}
		var date = $('.step .membersip-card.checked .more-info .info-action input').val();
		setCookie('setUrl', href);
		setCookie('setDate', date);
		window.location.replace(currentHref);
	}
	// PrintClientInfoReport(int ClientID, DateTime DateStart, DateTime DateEnd, int GymID, string AppKey)

	// Get getPrint
	$scope.getPrint = function () {
		var dataObject = {
			ClientID: $scope.Client.ClientID,
			DateStart: todayOneHundredYearAgo,
			DateEnd: today,
			GymID: gymid,
			Namespace: namespace
		}
		$http({
			method: 'POST',
			url: '/Account/PrintClientInfoReport',
			data: dataObject
		}).success(function (data) {
			if ( data ){
				var membershipPrint = data;
				window.location.replace(membershipPrint);
			}
		}).error(function () {
			// console.log('error');
		});
	}

	// Get getPrint
	$scope.forgetAboutMe = function () {

		var href = window.location;
		var currentHref = href.origin + '/Account?nameSpace=' + namespace + '&gymId=' + $scope.DivisionID;
		if ( isMobile == true ) {
			currentHref += '&isMobile=true';
		}

		var forgetAboutMe1 = 'Forgotten';
		var forgetAboutMe2 = 'Customer';

		if ($scope.currentLang = 'bg') {
			forgetAboutMe1 = 'Забравен';
			forgetAboutMe2 = 'Клиент';
		}

		var dataObject = {
			ForgetMe1: forgetAboutMe1,
			ForgetMe2: forgetAboutMe2,
			GymID: gymid,
			Namespace: namespace
		}
		$http({
			method: 'POST',
			url: '/Account/ForgetMe',
			data: dataObject
		}).success(function (data) {

			$('.popup-wrapper').addClass('responded');

			if (data == 'true') {
				$scope.forgotten = true;

				setTimeout(function () {
					window.location.replace(currentHref);
				}, 1500);
			} else {
				$scope.forgotten = false;
				$('.popup-wrapper').removeClass('responded');
			}

		}).error(function () {
			// console.log('error');
		});
	}

	if(qrCode){
		// var qrcode = new QRCode("qrcode");
		QRCode.toCanvas(document.getElementById('qrcode'), qrCode, {width: 250, scale: 1, margin: 1}, function (error) {
			if (error) console.error(error)
			console.log('success!');
		})
	}


	if ( gymServices ){
		$scope.gymServices = gymServices;

		if ( $scope.gymServices.length > 0 ) {
			$scope.gymServices = $.grep($scope.gymServices, function(e){ 
			     return e.Name != 'Deposit'; 
			});
		}

		if ( $scope.gymServices.length == 1 ) {
			$scope.mySubscription = $scope.gymServices[0]
			if ( $scope.mySubscription.Code ) {
				JsBarcode("#barcode", $scope.mySubscription.Code, {
					background: "transparent",
					width: 1
				});
			}
		}

		$scope.changeServiceModel = function(){
			var serviceItem = $scope.serviceModel;

			var result = $.grep($scope.gymServices, function (e) { return e.ServiceID == serviceItem; });

			if ( result.length > 0 ) {
				$scope.mySubscription = result[0];
				if ( $scope.mySubscription.Code ) {
					JsBarcode("#barcode", $scope.mySubscription.Code, {
						background: "transparent",
						width: 1
					});
				}else{
					JsBarcode("#barcode", 'Sorry, no code', {
						background: "transparent",
						width: 1
					});
				}
			}
		}
	}

	$scope.showPopup = function (sel, id) {
		var selected = sel;
		var id = id;
		$('.popup-wrapper[data-id="' + sel + '"]').addClass('show');
		if (id) {
			$('.popup-wrapper[data-id="' + sel + '"] .btn.agree').attr('data-id', id);
		}
	}

	$scope.closePopup = function (sel) {
		$('.popup-wrapper[data-id="' + sel + '"]').removeClass('show').find('.btn.agree').attr('data-id', '');
	}

	$(window).on('load', function () {
		var lastUrl = getCookie('setUrl');

		if ($('.dashboard').length && lastUrl != null && lastUrl != '') {
			var relocated = false;

			if (!relocated) {
				relocated = true;
				setCookie('setUrl', '');
				window.location.replace(lastUrl);
			}
		}

	})

	$scope.getTerms = function(intent = false){
		$scope.onePageloading = true;
		var startDate = new Date($scope.theChoosenMembershipDate);
		startDate.setHours(0,0,0,0);
		var dataObject = {
			Namespace: namespace,
			GymID: $scope.DivisionID,
			ClientID: -1,
			ServiceID: $scope.theChoosenMembership.ServiceDefinitionID,
			Discount: $scope.Discount,
			DateStart: startDate,
			GenerateIntent: intent,
			Email: $scope.Email,
			OrderType: 'PURCHASE',
			PromoCode: $scope.promocodeFalse ? '' : $scope.PromoCode
		}

		$http({
			method: 'POST',
			url: '/Membership/Terms',
			data: dataObject
		}).success(function (data) {
			if(data == 'User doesn`t exists!'){
				var translated = $translateThis('User doesn`t exists!');
				Swal.fire({
	                type: 'warning',
                    title: translated,
					onAfterClose: (function () {
                        $timeout(function() {
							$scope.onePageloading = false;
						}, 1);
                    })
	            })
			}else{
				$scope.theChoosenMembership.OriginalPrice = data.Price;

				if(intent){
					$scope.PaymentIntentID = data.PaymentIntentID;
					let secret = data.ClientSecret;

					stripeConfirmCard(secret);
				}else{
					$scope.onePageloading = false;
				}
			}
			
		}).error(function (error) {
			$scope.onePageloading = false;
			if(intent){
				$scope.stripeError.textContent = error.ExceptionMessage;
			}
		});
	}

	$scope.$watch('paymentway', function (v) {
		var paymentWayValue = v;

		if (paymentWayValue == '9') {

			// $('.onepage-wrapper .actions .stripe-button').addClass('show');
			// Create a Stripe client.
			$scope.stripe = Stripe($scope.membershipSettings.StripePublishKey);
			// Create an instance of Elements.
			var elements = $scope.stripe.elements();
			// Custom styling can be passed to options when creating an Element.
			// (Note that this demo uses a wider set of styles than the guide below.)
			var style = {
			  base: {
				color: '#32325d',
				lineHeight: '18px',
				fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
				fontSmoothing: 'antialiased',
				fontSize: '16px',
				'::placeholder': {
				  color: '#aab7c4'
				}
			  },
			  invalid: {
				color: '#fa755a',
				iconColor: '#fa755a'
			  }
			};


			// Create an instance of the card Element.
			// $scope.card = elements.create('card', {style: style});
			$scope.card = elements.create('card', {style: style, hidePostalCode: $scope.settings.HidePostalCode });

			// Add an instance of the card Element into the `card-element` <div>.
			$scope.card.mount('#card-element');

			// Handle real-time validation errors from the card Element.
			$scope.stripeError = document.getElementById('card-errors');
			$scope.card.addEventListener('change', function(event) {
			  	if (event.error) {
					$scope.stripeError.textContent = event.error.message;
			  	} else {
					$scope.stripeError.textContent = '';
			  	}
			});

			$('.onepage-wrapper .stripe-button').on('click', function(e){
				e.preventDefault();
				$scope.getTerms(true)
			    // if ($scope.orderLoading == false || $scope.orderLoading == undefined) {
			    //     $scope.orderLoading = true;
			        
			    // }
				
			})
		}else{
			// $('.onepage-wrapper .actions .stripe-button').removeClass('show');
		}

		if (paymentWayValue == 66) {
			// $(".onepage-wrapper .actions .commbank-buttonhp").addClass('show');
			var hostedPayments = SimplifyCommerce.hostedPayments(
		        function(response) {
		            var cardToken = response.cardToken;
		            console.log(cardToken);
		            // TODO: Pass token to the server & use Simplify's API to make a payment

		            $scope.token = cardToken;
		            $scope.placeOrder(true);
		        },
		        {
		            scKey: $scope.settings.CommBankPublicApiKey,
		            amount: $scope.finalBankPrice,
		            operation: 'create.token',
		            name: $scope.Division,
		            description: $scope.theChoosenMembership.ServiceName

		        }
		    ).closeOnCompletion();
		    /**
		     * Handle the error response from the server call that
		     * failed to make a payment from the card token.
		     */
		    function apiPaymentErrorHandler() {
		        // re-enable the payment button, so the user can try again.
		        hostedPayments.enablePayBtn();
		        // TODO: Handle error
		    }
		}else{
			// $(".onepage-wrapper .actions .commbank-buttonhp").removeClass('show');
		}

		if (paymentWayValue == 6) {
            // $(".onepage-wrapper .actions .commbank-button").addClass('show');
            $(".onepage-wrapper .actions .commbank-button").on("click", function () {
                $scope.orderLoading = true;
                $('.payment-form .payment-status').empty();
                $('.payment-form, .loader-container-loader').addClass('loading');
                // Disable the submit button
                $(".onepage-wrapper .actions .commbank-button").attr("disabled", "disabled");
                // Generate a card token & handle the response
                SimplifyCommerce.generateToken({
                    key: $scope.settings.CommBankPublicApiKey,
                    card: {
                        number: $("#cc-number").val(),
                        cvc: $("#cc-cvc").val(),
                        expMonth: $("#cc-exp-month").val(),
                        expYear: $("#cc-exp-year").val()
                    }
                }, simplifyResponseHandler);
                // Prevent the form from submitting
                return false;
            });

            function simplifyResponseHandler(data) {
                // Remove all previous errors
                $(".error").remove();
                // Check for errors
                if (data.error) {
                    // Show any validation errors
                    if (data.error.code == "validation") {
                        var fieldErrors = data.error.fieldErrors,
                            fieldErrorsLength = fieldErrors.length,
                            errorList = "";
                        for (var i = 0; i < fieldErrorsLength; i++) {
                            errorList += "<div class='error'>Field: '" + fieldErrors[i].field +
                                         "' is invalid - " + fieldErrors[i].message + "</div>";
                        }

                        // console.log(errorList);
                        // Display the errors
                        $('.payment-form .payment-status').html('<div class="error-msg"></div>');
                        $('.payment-form .payment-status .error-msg').after('<div class="error-msg show">' + errorList + '</div>');
                    }
                    // Re-enable the submit button
                    $scope.orderLoading = false;
                    $(".onepage-wrapper .actions .commbank-button").removeAttr("disabled");
                } else {
                    // The token contains id, last4, and card type
                    var token = data["id"];
                    // Insert the token into the form so it gets submitted to the server
                    $('.payment-form .payment-status').append("<input type='hidden' name='simplifyToken' value='" + token + "' />");
                    // Submit the form to the server

                    $scope.token = token;
                    $scope.placeOrder(true);
                }
                $('.payment-form, .loader-container-loader').removeClass('loading');
            }
        }else{
            // $(".onepage-wrapper .actions .commbank-button").removeClass('show');
        }
	});


	// Purchase Page
	$scope.lockMembership = false;
	$scope.onePageloading = false;
	$scope.additionalConfirmationOnline = true;


	$(".onepage-wrapper .actions .commbank-buttonhp").on('click', function(e){
		e.preventDefault();
		$('.payment-method .sections .section-title button').trigger('click');
	})

	if ( settings ) {
		$scope.settings = settings;
	}

	function checActivePaymentMethods(settings){
		const paymentMethods = [];
		const activePaymentMethod = [];
		paymentMethods.push({name: 'epay', value: settings.EPay}, {name: 'stripe', value: settings.StripePublishKey ? true : false}, { name: 'commbank', value: settings.CommBankPublicApiKey ? true : false});
		paymentMethods.filter((element) => {
			if (element.value){
				activePaymentMethod.push(element);
			}
		} )

		if(activePaymentMethod.length == 1 ){
			$timeout(function() {
				$scope.mainPaymentWay = activePaymentMethod[0].name;
			})
		}
	}

	if ( memberships ) {
		$scope.memberships = memberships;

		if ( $scope.memberships.length == 1 ) {
			$scope.lockMembership = true;
			$scope.theChoosenMembership = $scope.memberships[0];
			getFinalPrice($scope.theChoosenMembership.OriginalPrice);

			if($scope.theChoosenMembership.FixedDate){
				let membershipDate = new Date($scope.theChoosenMembership.FixedStartingDate);
				$scope.theChoosenMembershipDate = membershipDate;
				$('#membdatepicker').datepicker('setDate', new Date(membershipDate));
				$('#membdatepicker').datepicker('disable');
			}else{
				$scope.theChoosenMembershipDate = new Date();
				$('#membdatepicker').datepicker('setDate', new Date(today));
				$('#membdatepicker').datepicker('enable');
			}

			// $scope.theChoosenMembership.Fibank = true;
			// $scope.orderCardReccuring = ($scope.theChoosenMembership.Fibank != true) ? false : true;
			if( $scope.theChoosenMembership.Fibank == true ){
				$scope.orderCardReccuring = true;
				$scope.getTerms();
			}else{
				$scope.orderCardReccuring = false;	
			}

			$scope.choosenMembership = true;
			if($scope.theChoosenMembership.RequiresAdditionalConfirmationOnline){
				$scope.additionalConfirmationOnline = false;
			}
		}
	}


	$scope.$watch('mainPaymentWay', function (v) {
		if ( v == 'stripe' ) {
			$timeout(function() {
				$scope.paymentway = 9;
			})
			// $scope.$apply();
		}else if ( v == 'commbank' ){
			$timeout(function() {
				$scope.paymentway = 6;
			})
		}else if ( v == 'commbankhp' ){
			$timeout(function() {
				$scope.paymentway = 66;
			})
		}else{
			$scope.paymentway = '';
			$('.onepage-wrapper .actions .stripe-button').removeClass('show');
		}

	});

	$scope.theChoosenMembershipIsFree = false;
	$scope.getMembership = function(id){
		var result = $scope.memberships.filter(function (obj) {
			return obj.ServiceDefinitionID == id;
		});

		$scope.theChoosenMembership = result[0];
		// $scope.theChoosenMembership.Fibank = true;
		// $scope.orderCardReccuring = ($scope.theChoosenMembership.Fibank != true) ? false : true;

		if($scope.theChoosenMembership.FixedDate){
			let membershipDate = new Date($scope.theChoosenMembership.FixedStartingDate);
			$scope.theChoosenMembershipDate = membershipDate;
			$('#membdatepicker').datepicker('setDate', new Date(membershipDate));
			$('#membdatepicker').datepicker('disable');
		}else{
			$scope.theChoosenMembershipDate = today;
			$('#membdatepicker').datepicker('setDate', new Date(today));
			$('#membdatepicker').datepicker('enable');
		}

		if( $scope.theChoosenMembership.Fibank == true ){
			$scope.orderCardReccuring = true;
			$scope.getTerms();
		}else{
			$scope.orderCardReccuring = false;	
		}

		if ( $scope.theChoosenMembership.OriginalPrice == 0 ){
			$scope.theChoosenMembershipIsFree = true;
			$scope.paymentway = 0;
		}else{
			$scope.theChoosenMembershipIsFree = false;
			$scope.paymentway = null;
			getFinalPrice($scope.theChoosenMembership.OriginalPrice);
		}

		if($scope.theChoosenMembership.RequiresAdditionalConfirmationOnline){
			$scope.additionalConfirmationOnline = false;
		}
		$scope.choosenMembership = true;

		if($scope.choosenMembership && $inputEmail.is('.ng-valid'))
	  		typingEmail = setTimeout(function() {checkWaiver()}, 2000);
	}

	function getFinalPrice(price){
		if (price.toString().indexOf(".") == -1 ) {
	        $scope.finalBankPrice = price + '00';
	    }else{
	        $scope.finalBankPrice = price.toString().split('.').join("");
	    }

	    $scope.finalBankPrice = parseInt($scope.finalBankPrice);
	}

	$scope.placeOrderLink = function(){

		if ( $scope.paymentway == 9 ) {
			$scope.getTerms(true);
		}else{
			$scope.placeOrder();
		}
	}

	$scope.changeUser = function(){
		$scope.validateUser = false;
	}

	$scope.validateForm = function(){
		$scope.validateUser = false;
		if($scope.NewAccount){
			registerUser();
		}else{
			validetUser();
		}
	}

	$scope.validateUser = false;

	function validetUser(){

		let dataObject = {
			Email: $scope.Email, 
			Password: $scope.Password,
			Namespace: namespace
		}
		
		$http({
			method: 'POST',
			url: '/Membership/ValidateUser',
			data: dataObject
		}).success(function (data) {
			console.log(data);

			if(data == 'Success'){

				$scope.validateUser = true;

				$([document.documentElement, document.body]).animate({
					scrollTop: $("#checkout").offset().top
				}, 1000);
			}else{
				let translated = $translateThis(data);

				Swal.fire({
					type: 'warning',
					title: translated,
				})
			}
			// else if(data == 'User doesn`t exist!'){

			// }else{
			// 	data == 'Password incorrect!'
			// }
				
		}).error(function (error) {
			
		});
	}

	function registerUser(){

		var startDate = new Date($scope.theChoosenMembershipDate);
		startDate.setHours(0,0,0,0);
		var number = $scope.inputPhone.selectedDialCode.innerHTML + $scope.inputPhone.telInput.value;
		number = number.replace(/ /g,'');

		
		let dataObject = {
			Namespace: namespace,
			GymID: $scope.DivisionID,
			model: { FirstName: $scope.FirstName, LastName: $scope.LastName, Email: $scope.Email, Password: $scope.Password, NewAccount: $scope.NewAccount, Telephone: number, Note: $scope.Note }

		}
		
		$http({
			method: 'POST',
			url: '/Membership/RegisterUser',
			data: dataObject
		}).success(function (data) {
			let result = data.Value;
			if(result == 'Success'){

				let translated = $translateThis('Registration successful');
				Swal.fire({
					type: 'success',
					title: translated
				});
				$scope.validateUser = true;
				$([document.documentElement, document.body]).animate({
					scrollTop: $("#checkout").offset().top
				}, 1000);
			}else{
				if(result.includes(" is already taken.")){
					let email = result.split(' is already taken.');
					email = email[0].split('Name ');
					email = email[1];

					result = $translateThis('Email is already taken', {value: email});
				}

				Swal.fire({
					type: 'warning',
					title: result
				});
			}
		}).error(function (error) {
			
		});
	}

	$scope.placeOrder = function(sendProcessPayment = false){

		$scope.onePageloading = true;
		let processPayment = true;
		var paymentProvider = '';
		let price = $scope.theChoosenMembership.OriginalPrice;

		if ( $scope.paymentway == 1 ) {
			paymentProvider = 'paylogin';
		}else if ( $scope.paymentway == 2 ){
			paymentProvider = 'credit_paydirect';
		}else if ( $scope.paymentway == 9 ){
			paymentProvider = 'stripe card';
			processPayment = false;
		}else if ( $scope.paymentway == 6 ){
			paymentProvider = 'CommBank';
			processPayment = false;
		}else if ( $scope.paymentway == 66 ){
			paymentProvider = 'CommBank';
			processPayment = false;
		}else if ( $scope.paymentway == 8 ){
			paymentProvider = 'Fibank';
		}else if ( $scope.paymentway == 0 ){
			paymentProvider = '0';
		}

		if(sendProcessPayment)
			processPayment = true;

		var startDate = new Date($scope.theChoosenMembershipDate);
		startDate.setHours(0,0,0,0);
		var number = $scope.inputPhone.selectedDialCode.innerHTML + $scope.inputPhone.telInput.value;
		number = number.replace(/ /g,'');

		var dataObject = { 
			GymID: $scope.DivisionID, 
			Namespace: namespace, 
			model: { FirstName: $scope.FirstName, LastName: $scope.LastName, Email: $scope.Email, Password: $scope.Password, Telephone: number, MembershipID: $scope.membershipId, PaymentProvider: paymentProvider, Token: $scope.token, MembershipID: $scope.theChoosenMembership.ServiceDefinitionID, Date: startDate, Note: $scope.Note, PromoCode: $scope.promocodeFalse ? '' : $scope.PromoCode, price: price, PaymentIntentID: $scope.PaymentIntentID, receiveEmails: $scope.receiveEmails, ProcessPayment: processPayment }
		};

		$http({
			method: 'POST',
			url: '/Membership/PurchaseAndRegister',
			data: dataObject
		}).success(function (data) {

			// console.log(data);

			if ( data.Key == 1 || data.Key == 2 || data.Key == 3 ){
				Swal.fire({
	                type: 'warning',
	                title: data.Value,
					onAfterClose: (function () {
                        $scope.onePageloading = false;
                    })
	            })
			}else if ( data.Key == 0 ){
				var translated = $translateThis('Payment finished with success.');
				Swal.fire({
	                type: 'success',
                    title: translated,
					onAfterClose: (function () {
                        $scope.onePageloading = false;
                    })
	            })
			}else if ( data == 'Error' ){
				var translated = $translateThis('buyError');
				Swal.fire({
	                type: 'warning',
	                title: translated,
					onAfterClose: (function () {
                        $scope.onePageloading = false;
                    })
	            })
			}else if ( data == 'Recurring service exist!' ){
				var translated = $translateThis('Recurring service exist! OnePage');
				Swal.fire({
	                type: 'warning',
	                title: translated,
                    onAfterClose: (function () {
                        $scope.onePageloading = false;
                    })
	            })
			}else if ( data == 'succeeded' ){
				var translated = $translateThis('Payment finished with success.');
				Swal.fire({
	                type: 'success',
                    title: translated,
                    onAfterClose: (function () {
                        window.location.reload(true);
                    })
	            })
			}else if ( data == 'done' ){
				// if ( $scope.paymentway == 9 ){
				// 	$('.onepage-wrapper .actions .stripe-button').trigger('click');
				// }else if ( $scope.paymentway == 6 ){
				// 	$(".onepage-wrapper .actions .commbank-button").trigger('click');
				// }else if ( $scope.paymentway == 66 ){
				// 	$(".onepage-wrapper .actions .commbank-buttonhp").trigger('click');	
				// }
			}else if ( data == 'Waiver Required!'){
				var translated = $translateThis('Waiver Required!');
				var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + $scope.DivisionID + '&NameSpace=' + namespace + '&Redirect=/membership/purchase';
				Swal.fire({
					type: 'warning',
					title: translated,
					showCancelButton: true,
				}).then(function(result) {
					if (result.value) {
						window.location.href = waiverHref;
					}else{
						$timeout(function() {
							$scope.onePageloading = false;
						}, 1);
					}
				});
			}else{
				window.location.href = data;
			}
				
		}).error(function () {
			$scope.onePageloading = false;			
		});
	}

	// CheckWaiver(string Email, int? ClientID, int MembershipID, int GymID, string Namespace)

	//setup before functions
	var typingEmail;
	var $inputEmail = $('#Email');

	//on keyup, start the countdown
	$inputEmail.on('keyup', function () {
	  	clearTimeout(typingEmail);
	  	if($scope.choosenMembership && $inputEmail.is('.ng-valid'))
			typingEmail = setTimeout(function() {checkWaiver()}, 2000);
	});

	//on keydown, clear the countdown 
	$inputEmail.on('keydown', function () {
		clearTimeout(typingEmail);
	});

	function checkWaiver(){

		let dataObject = {
			Namespace: namespace,
			GymID: $scope.DivisionID,
			MembershipID: $scope.membershipId,
			ClientID: -1,
			Email: $scope.Email
		}
		
		$http({
			method: 'POST',
			url: '/Membership/CheckWaiver',
			data: dataObject
		}).success(function (data) {
			if(data == 'Waiver Required!'){
				var translated = $translateThis('Waiver Required!');
				var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + $scope.DivisionID + '&NameSpace=' + namespace + '&Redirect=/membership/purchase';
				Swal.fire({
					type: 'warning',
					title: translated,
					showCancelButton: true,
				}).then(function(result) {
					if (result.value) {
						window.location.href = waiverHref;
					}else{
						$timeout(function() {
							$scope.onePageloading = false;
						}, 1);
					}
				});
			}
		}).error(function (error) {
			
		});
	}

	function getPrice(price, discount) {         
		var numVal1 = Number(price);
		var numVal2 = Number(discount);

		var totalValue = numVal1 * ( (100-numVal2) / 100 )
		return totalValue.toFixed(2);
	}

	$scope.changePromoCode = function () {

		if ($scope.PromoCode.length > 3) {
			var dataObject = {
				Namespace: namespace,
				GymID: $scope.DivisionID,
				ClientID: -1,
				ServiceID: $scope.theChoosenMembership.ServiceDefinitionID,
				orderType: $scope.orderType,
				DateStart: $scope.theChoosenMembershipDate,
				PromoCode: $scope.PromoCode,
				Discount: $scope.Discount
			}
			// if (dataObject.GymID == undefined)
			//     dataObject.GymId = $scope.Model.GymId;
			// if ($scope.orderCardId == undefined && $scope.serviceDefinitionId != undefined)
			// 	dataObject.ServiceID = $scope.serviceDefinitionId;
			$http({
				method: 'POST',
				url: '/Membership/ValidatePromoCode',
				data: dataObject
			}).success(function (data) {
				$scope.promocodeFalse = false;
				if (data != 'false') {
					$scope.Discount = data.DiscountPercent;
					// if ($scope.orderCardId != undefined && $scope.serviceRealID == undefined)
					// 	$scope.serviceRealID = $scope.orderCardId;

					$scope.theChoosenMembership.OriginalPrice = getPrice($scope.theChoosenMembership._originalPrice, data.DiscountPercent)
					// getTermsForMembership();
				}else{
					$scope.promocodeFalse = true;
				}
			}).error(function () {
				// console.log('error');
			});
		}
	};


	function stripeConfirmCard(secret){
		let name = $scope.Email;
		if( $scope.NewAccount )
			name = $scope.FirstName + ' ' + $scope.LastName;

		$scope.stripe.confirmCardPayment(secret, {
			payment_method: {
				card: $scope.card,
				  billing_details: {
					name: name
				  }
			}
		}).then(function(result) {
			if (result.error) {
				// Show error to your customer (e.g., insufficient funds)
				$scope.stripeError.textContent = result.error.message;;
				$timeout(function() {
					$scope.onePageloading = false;
				}, 100);
			} else {
				  // The payment has been processed!
				  if (result.paymentIntent.status === 'succeeded') {
					$scope.card.clear();
					$scope.placeOrder(true);
					// Show a success message to your customer
					// There's a risk of the customer closing the window before callback
					// execution. Set up a webhook or plugin to listen for the
					// payment_intent.succeeded event that handles any business critical
					// post-payment actions.
				  }
			}
		});
	}


	$(window).on('load', function(){
		if ( $('.onepage-wrapper').length ) {
			$timeout(function() {
				if ( $scope.theChoosenMembership && $scope.theChoosenMembership.OriginalPrice == 0 ){
					$scope.theChoosenMembershipIsFree = true;
					$('#payment-free').prop("checked", true).trigger("click");
					$scope.paymentway = 0;
				}else{
					$scope.theChoosenMembershipIsFree = false;
				}
		    });
			$scope.matchingOnePagePassword = '';
			$('#Password, #ConfirmPassword').on('keyup', function () {
				if ($('#Password').val() == $('#ConfirmPassword').val()) {
					$('.validation-errors').html('');
					$scope.matchingOnePagePassword = 'pass';
				} else {
					var translated = $translateThis('notMaching');
					$('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
					$scope.matchingOnePagePassword = '';
				}

				$scope.$apply();
			});

			$('.header .logo').attr('href', '');

			if ( $('.payment-method .sections .section.active').length == 1 ){
				$('.payment-method .sections .section.active input[name="mainPaymentWay"]').prop('checked', true);
				$scope.mainPaymentWay = $('.payment-method .sections .section.active input[name="mainPaymentWay"]').val();
				$scope.$apply();
			}

			setTimeout(function() {
				$('#sc-style-modal').remove()
			}, 3000);
		}
	})

}]);
membershipApp.controller('MembershipBuyController', ['$scope', '$http', '$timeout', '$translate', '$filter', function ($scope, $http, $timeout, $translate, $filter) {
	var today = new Date();
	$scope.paySafeInit = false;
	$scope.newCard = false;
	$scope.currentStep = 1;
	$scope.orderType = 'PURCHASE';
	$scope.PromoCode = '';
	$scope.Discount = 0;
	$scope.promocodeFalse = false;
	$scope.hasRecurring = false;
	$scope.requiresAdditionalConfirmationOnline = false;
	var $translateThis = $filter('translate');

	if ( lang ){
		$translate.use(lang);
	}

	$scope.chooseCard = function (val) {
		$scope.hasRecurring = false;
		$scope.requiresAdditionalConfirmationOnline = false;
		$('.step-memberships .step-actions .next').addClass('disabled');
		var result = $.grep($scope.membershipCards, function (e) { return e.ServiceDefinitionID == val; });
		if(result.length){	
			$scope.currentCard = result[0];
			$scope.orderCardId = result[0].ServiceDefinitionID;
			$scope.orderCardPrice = result[0].OriginalPrice;
			$scope.orderCardName = result[0].ServiceName;
			$scope.orderCardReccuring = (result[0].Fibank != true) ? false : true;
			$scope.orderCardPaysafe = (result[0].IsPaySafe != true) ? false : true;
			$scope.orderAdditionDescription = result[0].AdditionalDescription;
			$scope.orderAdditionDesc = ($scope.orderAdditionDescription != null) ? true : false;
			$scope.cardStartDate = today;
			$scope.newCard = true;

			if($scope.currentCard.FixedDate){
				let membershipDate = new Date( $scope.currentCard.FixedStartingDate);
				$scope.theChoosenMembershipDate = membershipDate;
				$('.datepicker-input[data-id="mem' + val + '"]').datepicker('setDate', new Date(membershipDate));
				$('.datepicker-input[data-id="mem' + val + '"]').datepicker('disable');
			}else{
				$scope.cardStartDate = today;
				$('.datepicker-input[data-id="mem' + val + '"]').datepicker('setDate', new Date(today));
				$('.datepicker-input[data-id="mem' + val + '"]').datepicker('enable');
			}

			if ( result[0].Recurring == true ) {
				$http({
					method: 'POST',
					url: '/Membership/HasRecurring',
					data: { Namespace: $scope.Model.Namespace, GymID: $scope.Model.GymId }
				}).success(function (data) {
					if ( data == 'True' ) {
						$scope.hasRecurring = true;
					}else{
						$scope.hasRecurring = false;
					}
				}).error(function () {
				});
			}else{
				$('.step .step-actions .next').removeClass('disabled');
			}

			if ( result[0].RequiresAdditionalConfirmationOnline == true ) {	
				$scope.requiresAdditionalConfirmationOnline = false;

				$scope.$watch('currentCard.additionalConfirmationOnline', function (v) {
					$scope.requiresAdditionalConfirmationOnline = v;
					// console.log(v);
				})
			}else{
				$scope.requiresAdditionalConfirmationOnline = true;
			}

			var data = $('.step .membersip-card[data-memid="mem' + val + '"]').find('.info-action input').val();
		}
	}

	$scope.changePromoCode = function () {

		if ($scope.PromoCode.length > 3) {
			var dataObject = {
				Namespace: $scope.Model.Namespace,
				GymID: $scope.gymZoneId,
				ClientID: $scope.clientInfo.ClientID,
				ServiceID: $scope.orderCardId,
				orderType: $scope.orderType,
				DateStart: $scope.cardStartDate,
				PromoCode: $scope.PromoCode,
				Discount: $scope.Discount,
				Renew: $scope.orderType == 'RENEW' ? true : false
			}
			if (dataObject.GymID == undefined)
			    dataObject.GymId = $scope.Model.GymId;
			if ($scope.orderCardId == undefined && $scope.serviceDefinitionId != undefined)
				dataObject.ServiceID = $scope.serviceDefinitionId;
			$http({
				method: 'POST',
				url: '/Membership/ValidatePromoCode',
				data: dataObject
			}).success(function (data) {
				$scope.promocodeFalse = false;
				if (data != 'false') {
					$scope.Discount = data.DiscountPercent;
					if ($scope.orderCardId != undefined && $scope.serviceRealID == undefined)
						$scope.serviceRealID = $scope.orderCardId;
					getTermsForMembership();
				}else{
					$scope.promocodeFalse = true;
				}
			}).error(function () {
				// console.log('error');
			});
		}
	};

	$scope.changeStep = function (n) {
		$scope.currentStep = n;
		$scope.Discount = 0;
		$scope.PromoCode = '';
		// $scope.hasRecurring = false;
		if (n == 2) {
			setTimeout(function () {
				if (membershipID != null) {
					var memId = Number(membershipID);
					$scope.chooseCard(memId);
					$('.step .membersip-card').hide();
					$('input[id="radio-card-' + memId + '"]').parents('.membersip-card').show().addClass('checked');
					$('input[id="radio-card-' + memId + '"]').trigger('click');

					$('.membershipbuy-wrapper').removeClass('loading');
				}
			}, 50);
		}

		if (n == 3) {
			var date = $('.step .membersip-card.checked .more-info .info-action input').val();

			if ($scope.gym[0].Culture != 'en-US') {
				var res = date.split('/');
				var newDate = res[1] + '/' + res[0] + '/' + res[2];
				$scope.cardStartDate = new Date(newDate);
			}
			else {
				$scope.cardStartDate = new Date(date);
			}


			var dataObject = {
				Namespace: $scope.Model.Namespace,
				GymID: $scope.Model.GymId,
				ClientID: $scope.clientInfo.ClientID,
				ServiceID: $scope.orderCardId,
				orderType: $scope.orderType,
				DateStart: $scope.cardStartDate,
				PromoCode: $scope.PromoCode,
				Discount: $scope.Discount
			}
			if ($scope.orderCardId == undefined && !$scope.orderType == "PAY")
				dataObject.ServiceID = $scope.serviceDefinitionId;
			$http({
				method: 'POST',
				url: '/Membership/Terms',
				data: dataObject
			}).success(function (data) {
				$scope.orderCardPrice = data.Price;
				checkWaiver($scope.orderCardId);
			}).error(function () {
				// console.log('error');
			});

			if ( $scope.Model.Namespace == 'athletic') {
				fbq('track', 'AddToCart');
			}

			var numItems = $('.payment-method .section.active').length

			if ( numItems == 1 ) {
				$('.payment-method .section.active .section-title input').trigger('click');
				$scope.mainPaymentWay = 'epay';
				$scope.$apply();
			}

			// $('.payment-method .section')
		}

	}

	function checkWaiver(membershipID){

		let dataObject = {
			Namespace: $scope.Model.Namespace,
			GymID: $scope.Model.GymId,
			MembershipID: membershipID,
			ClientID: $scope.clientInfo.ClientID,
			Email: $scope.clientInfo.Email
		}
		
		$http({
			method: 'POST',
			url: '/Membership/CheckWaiver',
			data: dataObject
		}).success(function (data) {
			if(data == 'Waiver Required!'){

				var translated = $translateThis('Waiver Required!');
				var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + $scope.Model.GymId + '&NameSpace=' + $scope.Model.Namespace + '&Redirect=/membership/buy';
				Swal.fire({
					type: 'warning',
					title: translated,
					showCancelButton: true,
				}).then(function(result) {
					if (result.value) {
						window.location.href = waiverHref;
					}else{
						$timeout(function() {
							$scope.loading = false;
						}, 1);
					}
				});
			}
		}).error(function (error) {
			
		});
	}

	// Get Gyms
	$scope.getGyms = function () {
		var dataObject = {
			Namespace: $scope.Model.Namespace
		}
		$http({
			method: 'POST',
			url: '/Membership/GetGyms',
			data: dataObject
		}).success(function (data) {
			$scope.membershipGyms = data;

			if ($scope.membershipGyms.length == 1) {
				$scope.getCards($scope.membershipGyms[0].GymID);
			}
		}).error(function () {
			// console.log('error');
		});
	}

	$scope.getGyms();


	$('.tooltip i').on('click', function () {
		$(this).parent('.tooltip').toggleClass('show');
	})

	$scope.goCheckout = function () {
		var self = $(this);
	}

	// Get Cards
	$scope.getCards = function (id) {
		$('body').removeClass('loaded');
		$scope.gymZoneId = id;
		var result = $scope.membershipGyms.filter(function (obj) {
			return obj.GymID == $scope.gymZoneId;
		});

		$scope.gymZoneName = result[0].GymName;

		var dataObject = {
			Namespace: $scope.Model.Namespace,
			GymID: $scope.gymZoneId
		}
		
		$http({
			method: 'POST',
			url: '/Membership/GetCards',
			data: dataObject
		}).success(function (data) {
			var data = data;
			$scope.membershipCards = data;
			$scope.changeStep(2);
			$scope.hasRecurring = false;

			$('body').addClass('loaded');
		}).error(function () {
			// console.log('error');
		});
	}

	// $scope.getCards();

	// Get Terms
	var url = window.location.href;
	var serviceId = url.split('ServiceID=');
	$scope.clientInfo = client;

	function getTermsForMembership() {
		var dataObject = {
			Namespace: $scope.Model.Namespace,
			GymID: $scope.Model.GymId,
			ClientID: $scope.clientInfo.ClientID,
			ServiceID: $scope.serviceRealID,
			orderType: $scope.orderType,
			Discount: $scope.Discount,
			PromoCode: $scope.promocodeFalse ? '' : $scope.PromoCode
		}
		if ($scope.orderCardId == undefined && !$scope.orderType == "PAY" && dataObject.ServiceID != undefined)
			dataObject.ServiceID = $scope.serviceDefinitionId;

		$http({
			method: 'POST',
			url: '/Membership/Terms',
			data: dataObject
		}).success(function (data) {
			$scope.membershipTerms = data;
			$scope.orderCardPrice = data.Price;
			checkWaiver($scope.serviceRealID);

			if ($scope.membershipTerms == 'unactive service') {
				$('.invalid-card').addClass('show');
			} else {
				$('.invalid-card').removeClass('show');
				$("#membershipStartDate").datepicker('option', 'minDate', new Date($scope.membershipTerms.MinimalStartingDate));
			}
		}).error(function () {
			// console.log('error');
		});
	}


	if (serviceId.length > 1) {
		var serviceVarId = serviceId[1].split('&');
		$scope.serviceRealID = parseInt(serviceVarId[0]);
		$scope.orderType = serviceVarId[2].split('=')[1];
		$scope.serviceDefinitionId = serviceVarId[1].split('=')[1];

		getTermsForMembership();
		// $scope.getTerms = function () {
		// }

		// $scope.getTerms();
	}

	// Get Settings
	$scope.getSettings = function () {
		var dataObject = {
		    Namespace: $scope.Model.Namespace,
		    GymID: $scope.DivisionID
		}
		$http({
			method: 'POST',
			url: '/Membership/GetSettings',
			data: dataObject
		}).success(function (data) {
			$scope.membershipSettings = data;
			$scope.countriesSettings = data.Countries;

			if ($scope.membershipSettings.Culture == 'bg-BG') {
				$scope.currency = 'лв.';
			}else if($scope.membershipSettings.Culture.includes('-ES') || $scope.membershipSettings.Culture.includes('pt')){
				$scope.currency = 'eur';
			}else if($scope.membershipSettings.Culture.includes('-GB')){
				$scope.currency = '£';
			}else {
				$scope.currency = '$';
			}

			if (customCurrency) {
				$scope.currency = customCurrency;
			}
		}).error(function () {
			// console.log('error');
		});
	}

	$scope.getSettings();

	$scope.getPaymentMethods = function () {
	    if (client != null && client != undefined) {
	        var dataObject = {
	            Namespace: $scope.Model.Namespace,
	            GymID: $scope.Model.GymId,
	            ClientId: $scope.clientInfo.ClientID
	        }

	        $http({
	            method: 'POST',
	            url: '/Membership/GetPaymentMethods',
	            data: dataObject
	        }).success(function (data) {
	            $scope.clientPaymentCards = data;
	        }).error(function () {
	        });
	    }
	}

	$scope.getPaymentMethods();

	function is_url(str)
	{
	  regexp =  /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/;
	  regexp1 = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
	        if (regexp1.test(str))
	        {
	          return true;
	        }
	        else
	        {
	          return false;
	        }
	}

	// .
	var paymentMethodsArray = new Array("", "paylogin", "credit_paydirect", "PaySafe Card", "PAYSAFE SEPA", "PAYSAFE ACH", "PAYSAFE EFT", "PAYSAFE BACKS", "Fibank", "STRIPE CARD");
	$scope.placeOrder = function () {

		$scope.loading = true;
		$('.steps-body .step-actions button.pay').addClass('disabled');
		var gymId = $scope.Model.GymId;
		var token = ''
		var paymentProvider = paymentMethodsArray[$scope.paymentway];
		$scope.paymentError = false;
		$scope.paymentReccuringError = false;

		if (paymentProvider == 'PaySafe Card') {
			var token = $scope.tokenPaySafe;
		}

		if (!$scope.newCard) {
			var price = $scope.membershipTerms.Price;

			if ($scope.membershipTerms.CanChooseDate != false) {
				var startDate = moment($scope.membershipStartDate);
			} else {
				var startDate = $scope.membershipTerms.MinimalStartingDate;
			}

			var startDate = new Date(startDate);
		} else {
			var price = $scope.orderCardPrice;
			var serviceRealId = $scope.orderCardId;
			var startDate = $scope.cardStartDate;
			gymId = $scope.gymZoneId;
		}

		var orderType = $scope.orderType;

		if (paymentProvider == 'Fibank') {
			orderType = 'INITIAL PAYMENT';
		}

		// Brand New Membership
		var dateObjectOrder = { paymentMethodID: $scope.paymentway, paymentProvider: paymentProvider, serviceName: $scope.orderCardName, serviceDefinitionID: serviceRealId, clientID: $scope.clientInfo.ClientID, cardId: $scope.clientInfo.CardID, price: price, dateStart: startDate, token: token, orderType: orderType, AccountHolderName: $scope.accountHolderName, AccountNumber: $scope.accountNumber, RoutingNumber: $scope.routingNumber, TransitNumber: $scope.transitNumber, InstitutionID: $scope.institutionID, Iban: $scope.iban, Bic: $scope.bic, AccountNumber: $scope.accountNumber, SortCode: $scope.sortCode, RecipentName: $scope.recipentName, Telephone: $scope.telephone, Country: $scope.country, State: $scope.state, Zip: $scope.zip, City: $scope.city, Street: $scope.street, PromoCode: $scope.promocodeFalse ? '' : $scope.PromoCode, PaymentIntentID: $scope.PaymentIntentID }

		// Old Membership
		if ($scope.serviceRealID > 0 && ($scope.orderType == "RENEW" || $scope.orderType == "PAY")) {
			dateObjectOrder = { paymentMethodID: $scope.paymentway, paymentProvider: paymentProvider, serviceName: $scope.membershipTerms.ServiceName, serviceDefinitionID: $scope.serviceDefinitionId, clientID: $scope.clientInfo.ClientID, cardId: $scope.clientInfo.CardID, price: price, dateStart: startDate, token: token, orderType: $scope.orderType, serviceID: $scope.serviceRealID, AccountNumber: $scope.accountNumber, RoutingNumber: $scope.routingNumber, TransitNumber: $scope.transitNumber, InstitutionID: $scope.institutionID, Iban: $scope.iban, Bic: $scope.bic, AccountNumber: $scope.accountNumber, SortCode: $scope.sortCode, RecipentName: $scope.recipentName, Telephone: $scope.telephone, Country: $scope.country, State: $scope.state, Zip: $scope.zip, City: $scope.city, Street: $scope.street, PromoCode: $scope.promocodeFalse ? '' : $scope.PromoCode, PaymentIntentID: $scope.PaymentIntentID }
		}

		if ($scope.paymentway == 'usedcardStripe') {
			dateObjectOrder.paymentMethodID = 9;
			dateObjectOrder.paymentProvider = 'STRIPE CARD';
			dateObjectOrder.selectedPaymentMethodID = $scope.preChoosedCardStripe;
		}

		if ($scope.paymentway == 'usedcardPaysafe') {
			dateObjectOrder.paymentMethodID = 3;
			dateObjectOrder.paymentProvider = 'PaySafe Card';
			dateObjectOrder.selectedPaymentMethodID = $scope.preChoosedCardPaysafe;
		}

		if ($scope.paymentway == 'usedcardFibank') {
			dateObjectOrder.paymentMethodID = 8;
			dateObjectOrder.paymentProvider = 'Fibank';
			dateObjectOrder.selectedPaymentMethodID = $scope.preChoosedCardFibank;
		}

		var dataObject = {
			Namespace: $scope.Model.Namespace,
			GymID: gymId,
			order: dateObjectOrder
		}

		$http({
			method: 'POST',
			url: '/Membership/PlaceOrder',
			data: dataObject
		}).success(function (data) {
			var currentHref = window.location;
			$scope.PaymentIntentID = 0;

			if ( data == 'succeeded'){
				var href = currentHref.origin + '/membership/SuccessPurchase?nameSpace=' + $scope.Model.Namespace + '&gymId=' + gymId;
				if ( isMobile == true ) {
					href += '&isMobile=true';
				}
				window.location.href = href;
			}else if ( data == 'Recurring service exist!' ){
				$scope.paymentReccuringError = true;
				$scope.loading = false;
			}else if ( data == 'Waiver Required!'){
				var translated = $translateThis('Waiver Required!');
				var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymId + '&NameSpace=' + $scope.Model.Namespace + '&Redirect=/membership/buy';
				Swal.fire({
					type: 'warning',
					title: translated,
					showCancelButton: true,
				}).then(function(result) {
					if (result.value) {
						window.location.href = waiverHref;
					}else{
						$timeout(function() {
							$scope.loading = false;
						}, 1);
					}
				});
			}else if ( data == 'error' || data == 'Object reference not set to an instance of an object.' || data == 'Sequence contains more than one element' || data == 'Your card was declined.' || !is_url(data) ){
				$scope.paymentError = true;
				$scope.loading = false;
			}else{
				$('.steps-body .step-actions button.pay').removeClass('disabled');
				window.location.replace(data);
			}

		}).error(function () {
			$scope.PaymentIntentID = 0;
			$('.steps-body .step-actions button.pay').removeClass('disabled');
			$scope.loading = false;
		});

		// PlaceOrder
	}

	$scope.$watch('paymentway', function (v) {
		var paymentWayValue = v;

		if (paymentWayValue == '9') {

			$('.step-actions .stripe-button').addClass('show');

			// Create a Stripe client.
			$scope.stripe = Stripe($scope.membershipSettings.StripePublishKey);
			// Create an instance of Elements.
			var elements = $scope.stripe.elements();
			// Custom styling can be passed to options when creating an Element.
			// (Note that this demo uses a wider set of styles than the guide below.)
			var style = {
			  base: {
				color: '#32325d',
				lineHeight: '18px',
				fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
				fontSmoothing: 'antialiased',
				fontSize: '16px',
				'::placeholder': {
				  color: '#aab7c4'
				}
			  },
			  invalid: {
				color: '#fa755a',
				iconColor: '#fa755a'
			  }
			};


			// Create an instance of the card Element.
			// $scope.card= elements.create('card', {style: style});
			$scope.card = elements.create('card', {style: style, hidePostalCode: $scope.membershipSettings.HidePostalCode });

			// Add an instance of the card Element into the `card-element` <div>.
			$scope.card.mount('#card-element');

			// Handle real-time validation errors from the card Element.
			$scope.stripeError = document.getElementById('card-errors');
			$scope.card.addEventListener('change', function(event) {
			  	if (event.error) {
					$scope.stripeError.textContent = event.error.message;
			  	} else {
					$scope.stripeError.textContent = '';
			  	}
			});

			$('.stripe-button').on('click', function(e){
				e.preventDefault();
				$scope.stripeError.textContent = '';
				generatePaymentIntent();
			})
		}else{
			$('.step-actions .stripe-button').removeClass('show');
		}

		if (paymentWayValue == '3') {
			$('.step-actions .paysafe-button').addClass('show');
			if (!$scope.paySafeInit) {
				if ($scope.membershipSettings.PaySafeFrontEndKey != '') {
					$scope.paySafeInit = true;
					// Base64 encoded version the Single-use Token API key.
					// Create the key below by concatenating the API username and password
					// separated by a colon and Base64-encoding the result
					var apiKey = $scope.membershipSettings.PaySafeFrontEndKey;
					var Enviroment = "TEST";
					if ($scope.membershipSettings.PaySafeLive == true)
						Enviroment = "LIVE";
					var options = {

						// select the Paysafe test / sandbox environment
						environment: Enviroment,

						// set the CSS selectors to identify the payment field divs above
						// set the placeholder text to display in these fields
						fields: {
							cardNumber: {
								selector: "#cardNumber",
								placeholder: "Card number"
							},
							expiryDate: {
								selector: "#expiryDate",
								placeholder: "Expiry date"
							},
							cvv: {
								selector: "#cvv",
								placeholder: "CVV"
							}
						}
					};

					paysafe.fields.setup(apiKey, options, function (instance, error) {
						$('.step-actions .paysafe-button').on('click', function (event) {
							instance.tokenize(function (instance, error, result) {
								if (error) {
									alert(JSON.stringify(error));
								} else {
									$scope.tokenPaySafe = result.token
									$scope.placeOrder();
								}
							});
						})
					});
				}
			}
		} else {
			$scope.paysafeinit = false;
			$('.step-actions .paysafe-button').removeClass('show');
		}

		$('#placeOrder input.inputField').val('');
	});

	$scope.$watch('mainPaymentWay', function (v) {
		var paymentValue = v;
		$scope.paymentway = '';
		$('.payment-method .sections .section-title input[value="' + paymentValue + '"]')
			.parents('.section')
			.addClass('active')
			.siblings('.active')
			.removeClass('active');
	});

	function generatePaymentIntent(){
		$scope.loading = true;
		$scope.PaymentIntentID = 0;
		var dataObject = {
			Namespace: $scope.Model.Namespace,
			GymID: $scope.Model.GymId,
			ClientID: $scope.clientInfo.ClientID,
			ServiceID: $scope.orderCardId,
			orderType: $scope.orderType,
			DateStart: $scope.cardStartDate,
			PromoCode: $scope.PromoCode,
			Discount: $scope.Discount,
			GenerateIntent: true
		}
		if ($scope.orderCardId == undefined && !$scope.orderType == "PAY")
			dataObject.ServiceID = $scope.serviceDefinitionId;
		$http({
			method: 'POST',
			url: '/Membership/Terms',
			data: dataObject
		}).success(function (data) {
			$scope.PaymentIntentID = data.PaymentIntentID;
			$scope.orderCardPrice = data.Price;
			let secret = data.ClientSecret;

			stripeConfirmCard(secret);
		}).error(function (error) {
			// console.log('error');
			$scope.loading = false;
			$scope.stripeError.textContent = error.ExceptionMessage;
		});
	}

	function stripeConfirmCard(secret){

		$scope.stripe.confirmCardPayment(secret, {
			payment_method: {
				card: $scope.card,
				  billing_details: {
					name: $scope.clientInfo.ClientName
				  }
			}
		}).then(function(result) {
			if (result.error) {
				// Show error to your customer (e.g., insufficient funds)
				$scope.stripeError.textContent = result.error.message;;
				$timeout(function() {
					$scope.loading = false;
				}, 100);
			} else {
				  // The payment has been processed!
				  if (result.paymentIntent.status === 'succeeded') {
					$scope.card.clear();
					$scope.placeOrder();
					// Show a success message to your customer
					// There's a risk of the customer closing the window before callback
					// execution. Set up a webhook or plugin to listen for the
					// payment_intent.succeeded event that handles any business critical
					// post-payment actions.
				  }
			}
		});
	}

	$(window).on('load', function () {
		if (selectedGym != null) {
			$('.membershipbuy-wrapper').addClass('loading');
			setTimeout(function () {
				var id = Number(selectedGym);
				$scope.getCards(id);
			}, 500);
		}
	});

}]);
membershipApp.controller('MembershipChangePaymentMethodController', ['$scope', '$http', '$timeout', '$translate', '$filter', function ($scope, $http, $timeout, $translate, $filter) {
	$scope.alerting = false;
	var $translateThis = $filter('translate');
	$scope.loading = false;


	if ( lang ){
		$translate.use(lang);
	}

	$scope.getClientServices = function () {
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			ClientID: client.ClientID
		}

		$http({
			method: 'POST',
			url: '/Membership/GetClientServices',
			data: dataObject
		}).success(function (data) {
			$scope.clientServices = data;
			$scope.PaymentMethods.forEach(function (el) {
				var el = el;
				var result = $.grep($scope.clientServices, function (e) { return e.PaymentMethodID == el.ID; });

				if (result.length > 0) {
					el.ServiceName = result[0].ServiceName;
				}
			});
		}).error(function () {
		});
	}

	$scope.getPaymentMethods = function () {
	    if (client != null && client != undefined) {
	        var dataObject = {
	            Namespace: namespace,
	            GymID: gymid,
	            ClientId: client.ClientID
	        }

	        $http({
	            method: 'POST',
	            url: '/Membership/GetPaymentMethods',
	            data: dataObject
	        }).success(function (data) {
	            $scope.PaymentMethods = data;
	            $scope.getClientServices();
	        }).error(function () {
	        });
	    }
	}
	$scope.getPaymentMethods();


	$scope.setDefaultPaymentMethod = function (id) {
		var paymentId = id;
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			ClientID: client.ClientID,
			Id: paymentId
		}

		$http({
			method: 'POST',
			url: '/Membership/SetDefaultPaymentMethod',
			data: dataObject
		}).success(function (data) {
			var data = data;
			if (data == true) {
				$('.paymentmethod-item[data-paymentid="' + paymentId + '"]').addClass('default').siblings('.default').removeClass('default');
			}
			$scope.closePopup('setDefaultPaymentMethod');
		}).error(function () {
		});
	}

	$scope.removePaymentMethod = function (id) {
		$scope.loading = true;
		var paymentId = id;
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			ClientID: client.ClientID,
			Id: paymentId
		}

		$http({
			method: 'POST',
			url: '/Membership/RemovePaymentMethod',
			data: dataObject
		}).success(function (data) {
			var data = data;
			$scope.loading = false;
			var translated = $translateThis('Payment method removed!');
			Swal.fire({
                type: 'warning',
                title: translated,
                onAfterClose: (function () {
					$scope.closePopup('removePaymentMethod');
                    window.location.reload(true);
                })
            })
		}).error(function (err) {
			$scope.loading = false;
			Swal.fire({
                type: 'warning',
                title: err
            })
		});
	}

	$scope.addPaymentMethod = function (token) {
		$scope.loading = true;

		var newPaymentMethodModel = { PaymentProvider: $scope.mainPaymentWay, ClientID: client.ClientID, CardID: client.CardID, paymentIntentID: $scope.PaymentIntentID }

		if ( token ) {
			if ( $scope.mainPaymentWay == 'STRIPE CARD' ) {
				token = token.id;
			}
			newPaymentMethodModel.Token = token;			
		}

		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			model: newPaymentMethodModel
		}

		$http({
			method: 'POST',
			url: '/Membership/AddPaymentMethod',
			data: dataObject
		}).success(function (data) {
			$scope.PaymentIntentID = 0;
			var data = data;
			if (data == 'error' || data == 'Error') {
				var currentHref = window.location;
				var href = currentHref.origin + '/membership/errorPurchase?nameSpace=' + namespace + '&gymId=' + gymid;
				if ( isMobile == true ) {
					href += '&isMobile=true';
				}
				window.location.replace(href);
			}else if(data == 'done'){
				var translated = $translateThis('Payment method added!');
				Swal.fire({
	                type: 'success',
                    title: translated,
                    onAfterClose: (function () {
                        window.location.reload(true);
                    })
	            })
			} else {
				window.location.replace(data);
			}
			$scope.loading = false;
		}).error(function () {
			$scope.PaymentIntentID = 0;
		});
	}

	$('.popup-wrapper[data-id="setDefaultPaymentMethod"] .btn.agree').on('click', function () {
		var id = $(this).data('id');
		$scope.setDefaultPaymentMethod(id);
	})

	$('.popup-wrapper[data-id="removePaymentMethod"] .btn.agree').on('click', function () {
		var id = $(this).data('id');
		$scope.removePaymentMethod(id);
	})

	$('.popup-wrapper[data-id="addPaymentMethod"] .btn.agree').on('click', function () {
		$scope.addPaymentMethod();
	})

	$scope.$watch('mainPaymentWay', function (v) {
		var paymentValue = v;
		$scope.paymentway = '';

		// if (paymentValue == 'fibank'){
		//     $scope.paymentway = 8;
		// }else{
		// }

		if (paymentValue == 'STRIPE CARD') {

			$scope.PaymentIntentID = 0;

			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				ClientID: client.ClientID,
				Email: client.Email
			}
	
			$http({
				method: 'POST',
				url: '/Membership/CreateIntentFuturePayments',
				data: dataObject
			}).success(function (data) {
	
				console.log(data);
				$scope.PaymentIntentID = data.ID;
				let secret = data.ClientSecret;
				stripe(secret);

			}).error(function (error) {
				// console.log('error');
			});

			function stripe(secret){
				$('.step-actions .stripe-button').addClass('show');
				// Set your publishable key: remember to change this to your live publishable key in production
				// See your keys here: https://dashboard.stripe.com/apikeys
				const stripe = Stripe($scope.membershipSettings.StripePublishKey);

				const options = {
					clientSecret: secret,
					// Fully customizable with appearance API.
					appearance: {
						theme: 'stripe',
						variables: {
							colorPrimary: '#0570de',
							colorBackground: '#ffffff',
							colorText: '#30313d',
							colorDanger: '#df1b41',
							fontFamily: 'Ideal Sans, system-ui, sans-serif',
							spacingUnit: '2px',
							borderRadius: '4px',
							// See all possible variables below
						}
					},
				};

				
				// Set up Stripe.js and Elements to use in checkout form, passing the client secret obtained in step 2
				const elements = stripe.elements(options);
				
				// Create and mount the Payment Element
				const paymentElement = elements.create('payment');
				paymentElement.mount('#payment-element');

				const form = document.getElementById('payment-form');
				// setTimeout( () => wrapper.className += ' loaded', 1000 )


				$('.stripe-button').on('click', function(e){
					e.preventDefault();

					if ($scope.loading == false || $scope.loading == undefined) {
						$('.step-actions').addClass('loading');
						$scope.loading = true;
						stripe.confirmSetup({
							//`Elements` instance that was used to create the Payment Element
							elements,
							confirmParams: {
								return_url: 'https://my-site.com/account/payments/setup-complete',
							},
							redirect: 'if_required',
						})
						.then(function(result) {
							
							if (result.error){
								// This point will only be reached if there is an immediate error when
								// confirming the payment. Show error to your customer (e.g., payment
								// details incomplete)
								const messageContainer = document.querySelector('#error-message');
								messageContainer.textContent = result.error.message;
								$scope.loading = false;
							}else{
								console.log(result);
								
								$scope.addPaymentMethod();
							}
							// Inform the customer that there was an error.
						});
					}
				})
			}
		}else{
			$('.step-actions .stripe-button').removeClass('show');
		}

		if (paymentValue == 'paysafe') {
			$('.step-actions .paysafe-button').addClass('show');
			$scope.getPaymentMethods();
			if (!$scope.paySafeInit) {
				if ($scope.membershipSettings.PaySafeFrontEndKey != '') {
					$scope.paySafeInit = true;
					// Base64 encoded version the Single-use Token API key.
					// Create the key below by concatenating the API username and password
					// separated by a colon and Base64-encoding the result
					var apiKey = $scope.membershipSettings.PaySafeFrontEndKey;
					var Enviroment = "TEST";
					if ($scope.membershipSettings.PaySafeLive == true)
						Enviroment = "LIVE";
					var options = {

						// select the Paysafe test / sandbox environment
						environment: Enviroment,

						// set the CSS selectors to identify the payment field divs above
						// set the placeholder text to display in these fields
						fields: {
							cardNumber: {
								selector: "#cardNumber",
								placeholder: "Card number"
							},
							expiryDate: {
								selector: "#expiryDate",
								placeholder: "Expiry date"
							},
							cvv: {
								selector: "#cvv",
								placeholder: "CVV"
							}
						}
					};

					paysafe.fields.setup(apiKey, options, function (instance, error) {
						$('.step-actions .paysafe-button').on('click', function (event) {
							$scope.loading = true;
							instance.tokenize(function (instance, error, result) {
								if (error) {
									alert(JSON.stringify(error));
									$scope.loading = false;
								} else {
									var token = result.token
									$scope.addPaymentMethod(token);
								}
							});
						})
					});
				}
			}
		} else {
			$scope.paysafeinit = false;
		}
	});
}])
membershipApp.controller('ScheduleController', ['$scope', '$http', '$timeout', '$translate', '$filter', '$compile', function ($scope, $http, $timeout, $translate, $filter, $compile) {

	$scope.text = 'me@example.com';
	$scope.emailFormat = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

	// Default variables

	var now = new Date();
	var dd = now.getDate();
	var mm = now.getMonth() + 1;
	var yyyy = now.getFullYear();
	var nextYear = now.getFullYear() + 1;

	$scope.visitArea = 0;
	$scope.visitInstructor = 0;
	$scope.nameInstructor;
	$scope.choosenInstructor = false;
	$scope.filterActivity = filterActivity;
	$scope.nameActivity;
	$scope.choosenActivity = false;
	$scope.modalLoading = false;
	$scope.activityId = null;
	$scope.peopleWaiting = 0;
	$scope.smodal = {paymentMethod: null, email: ''};
	var $translateThis = $filter('translate');
	// if ( lang == null ){
	// 	lang = 'en';
	// }

	// Finding TimeZone Offset
	const timeZones = ["Europe/Andorra","Asia/Dubai","Asia/Kabul","Europe/Tirane","Asia/Yerevan","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","America/Argentina/Buenos_Aires","America/Argentina/Cordoba","America/Argentina/Salta","America/Argentina/Jujuy","America/Argentina/Tucuman","America/Argentina/Catamarca","America/Argentina/La_Rioja","America/Argentina/San_Juan","America/Argentina/Mendoza","America/Argentina/San_Luis","America/Argentina/Rio_Gallegos","America/Argentina/Ushuaia","Pacific/Pago_Pago","Europe/Vienna","Australia/Lord_Howe","Antarctica/Macquarie","Australia/Hobart","Australia/Melbourne","Australia/Sydney","Australia/Broken_Hill","Australia/Brisbane","Australia/Lindeman","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Asia/Baku","America/Barbados","Asia/Dhaka","Europe/Brussels","Europe/Sofia","Atlantic/Bermuda","Asia/Brunei","America/La_Paz","America/Noronha","America/Belem","America/Fortaleza","America/Recife","America/Araguaina","America/Maceio","America/Bahia","America/Sao_Paulo","America/Campo_Grande","America/Cuiaba","America/Santarem","America/Porto_Velho","America/Boa_Vista","America/Manaus","America/Eirunepe","America/Rio_Branco","America/Nassau","Asia/Thimphu","Europe/Minsk","America/Belize","America/St_Johns","America/Halifax","America/Glace_Bay","America/Moncton","America/Goose_Bay","America/Blanc-Sablon","America/Toronto","America/Nipigon","America/Thunder_Bay","America/Iqaluit","America/Pangnirtung","America/Atikokan","America/Winnipeg","America/Rainy_River","America/Resolute","America/Rankin_Inlet","America/Regina","America/Swift_Current","America/Edmonton","America/Cambridge_Bay","America/Yellowknife","America/Inuvik","America/Creston","America/Dawson_Creek","America/Fort_Nelson","America/Whitehorse","America/Dawson","America/Vancouver","Indian/Cocos","Europe/Zurich","Africa/Abidjan","Pacific/Rarotonga","America/Santiago","America/Punta_Arenas","Pacific/Easter","Asia/Shanghai","Asia/Urumqi","America/Bogota","America/Costa_Rica","America/Havana","Atlantic/Cape_Verde","America/Curacao","Indian/Christmas","Asia/Nicosia","Asia/Famagusta","Europe/Prague","Europe/Berlin","Europe/Copenhagen","America/Santo_Domingo","Africa/Algiers","America/Guayaquil","Pacific/Galapagos","Europe/Tallinn","Africa/Cairo","Africa/El_Aaiun","Europe/Madrid","Africa/Ceuta","Atlantic/Canary","Europe/Helsinki","Pacific/Fiji","Atlantic/Stanley","Pacific/Chuuk","Pacific/Pohnpei","Pacific/Kosrae","Atlantic/Faroe","Europe/Paris","Europe/London","Asia/Tbilisi","America/Cayenne","Africa/Accra","Europe/Gibraltar","America/Nuuk","America/Danmarkshavn","America/Scoresbysund","America/Thule","Europe/Athens","Atlantic/South_Georgia","America/Guatemala","Pacific/Guam","Africa/Bissau","America/Guyana","Asia/Hong_Kong","America/Tegucigalpa","America/Port-au-Prince","Europe/Budapest","Asia/Jakarta","Asia/Pontianak","Asia/Makassar","Asia/Jayapura","Europe/Dublin","Asia/Jerusalem","Asia/Kolkata","Indian/Chagos","Asia/Baghdad","Asia/Tehran","Atlantic/Reykjavik","Europe/Rome","America/Jamaica","Asia/Amman","Asia/Tokyo","Africa/Nairobi","Asia/Bishkek","Pacific/Tarawa","Pacific/Enderbury","Pacific/Kiritimati","Asia/Pyongyang","Asia/Seoul","Asia/Almaty","Asia/Qyzylorda","Asia/Qostanay","Asia/Aqtobe","Asia/Aqtau","Asia/Atyrau","Asia/Oral","Asia/Beirut","Asia/Colombo","Africa/Monrovia","Europe/Vilnius","Europe/Luxembourg","Europe/Riga","Africa/Tripoli","Africa/Casablanca","Europe/Monaco","Europe/Chisinau","Pacific/Majuro","Pacific/Kwajalein","Asia/Yangon","Asia/Ulaanbaatar","Asia/Hovd","Asia/Choibalsan","Asia/Macau","America/Martinique","Europe/Malta","Indian/Mauritius","Indian/Maldives","America/Mexico_City","America/Cancun","America/Merida","America/Monterrey","America/Matamoros","America/Mazatlan","America/Chihuahua","America/Ojinaga","America/Hermosillo","America/Tijuana","America/Bahia_Banderas","Asia/Kuala_Lumpur","Asia/Kuching","Africa/Maputo","Africa/Windhoek","Pacific/Noumea","Pacific/Norfolk","Africa/Lagos","America/Managua","Europe/Amsterdam","Europe/Oslo","Asia/Kathmandu","Pacific/Nauru","Pacific/Niue","Pacific/Auckland","Pacific/Chatham","America/Panama","America/Lima","Pacific/Tahiti","Pacific/Marquesas","Pacific/Gambier","Pacific/Port_Moresby","Pacific/Bougainville","Asia/Manila","Asia/Karachi","Europe/Warsaw","America/Miquelon","Pacific/Pitcairn","America/Puerto_Rico","Asia/Gaza","Asia/Hebron","Europe/Lisbon","Atlantic/Madeira","Atlantic/Azores","Pacific/Palau","America/Asuncion","Asia/Qatar","Indian/Reunion","Europe/Bucharest","Europe/Belgrade","Europe/Kaliningrad","Europe/Moscow","Europe/Simferopol","Europe/Kirov","Europe/Volgograd","Europe/Astrakhan","Europe/Saratov","Europe/Ulyanovsk","Europe/Samara","Asia/Yekaterinburg","Asia/Omsk","Asia/Novosibirsk","Asia/Barnaul","Asia/Tomsk","Asia/Novokuznetsk","Asia/Krasnoyarsk","Asia/Irkutsk","Asia/Chita","Asia/Yakutsk","Asia/Khandyga","Asia/Vladivostok","Asia/Ust-Nera","Asia/Magadan","Asia/Sakhalin","Asia/Srednekolymsk","Asia/Kamchatka","Asia/Anadyr","Asia/Riyadh","Pacific/Guadalcanal","Indian/Mahe","Africa/Khartoum","Europe/Stockholm","Asia/Singapore","America/Paramaribo","Africa/Juba","Africa/Sao_Tome","America/El_Salvador","Asia/Damascus","America/Grand_Turk","Africa/Ndjamena","Indian/Kerguelen","Asia/Bangkok","Asia/Dushanbe","Pacific/Fakaofo","Asia/Dili","Asia/Ashgabat","Africa/Tunis","Pacific/Tongatapu","Europe/Istanbul","America/Port_of_Spain","Pacific/Funafuti","Asia/Taipei","Europe/Kiev","Europe/Uzhgorod","Europe/Zaporozhye","Pacific/Wake","America/New_York","America/Detroit","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Indiana/Indianapolis","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Vevay","America/Chicago","America/Indiana/Tell_City","America/Indiana/Knox","America/Menominee","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/North_Dakota/Beulah","America/Denver","America/Boise","America/Phoenix","America/Los_Angeles","America/Anchorage","America/Juneau","America/Sitka","America/Metlakatla","America/Yakutat","America/Nome","America/Adak","Pacific/Honolulu","America/Montevideo","Asia/Samarkand","Asia/Tashkent","America/Caracas","Asia/Ho_Chi_Minh","Pacific/Efate","Pacific/Wallis","Pacific/Apia","Africa/Johannesburg","America/Antigua","America/Anguilla","Africa/Luanda","Antarctica/McMurdo","America/Aruba","Europe/Mariehamn","Europe/Sarajevo","Africa/Ouagadougou","Asia/Bahrain","Africa/Bujumbura","Africa/Porto-Novo","America/St_Barthelemy","America/Kralendijk","Africa/Gaborone","Africa/Kinshasa","Africa/Lubumbashi","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Europe/Busingen","Africa/Djibouti","America/Dominica","Africa/Asmara","Africa/Addis_Ababa","Africa/Libreville","America/Grenada","Europe/Guernsey","Africa/Banjul","Africa/Conakry","America/Guadeloupe","Africa/Malabo","Europe/Zagreb","Europe/Isle_of_Man","Europe/Jersey","Asia/Phnom_Penh","Indian/Comoro","America/St_Kitts","Asia/Kuwait","America/Cayman","Asia/Vientiane","America/St_Lucia","Europe/Vaduz","Africa/Maseru","Europe/Podgorica","America/Marigot","Indian/Antananarivo","Europe/Skopje","Africa/Bamako","Pacific/Saipan","Africa/Nouakchott","America/Montserrat","Africa/Blantyre","Africa/Niamey","Asia/Muscat","Africa/Kigali","Atlantic/St_Helena","Europe/Ljubljana","Arctic/Longyearbyen","Europe/Bratislava","Africa/Freetown","Europe/San_Marino","Africa/Dakar","Africa/Mogadishu","America/Lower_Princes","Africa/Mbabane","Africa/Lome","Africa/Dar_es_Salaam","Africa/Kampala","Pacific/Midway","Europe/Vatican","America/St_Vincent","America/Tortola","America/St_Thomas","Asia/Aden","Indian/Mayotte","Africa/Lusaka","Africa/Harare" ]

	let timezoneP = timeZone.split(') ');
	let timezonePi = timezoneP[1].split(',');
	let timeZoneC = timezonePi[0];
	let timeZoneF = timeZones.find(el => el.includes(timeZoneC)); 

	let timeZoneOffsetSplit = timezoneP[0].split('UTC');
	$scope.timeZoneOffset = timeZoneOffsetSplit[1];

	moment.tz.setDefault(timeZoneF);

	if ( lang ){
		$translate.use(lang);
	}else{
		lang = $translate.proposedLanguage() || $translate.use();
	}

	$scope.lang = lang;

	$scope.paymentMethods = new Array("OnSide", "Membership", "Sodexo", "MultiSport", "Voucher", "EPay", "PaySafe");

	if (settings) {
		$scope.classSettings = settings
	}

	if (dd < 10) {
		dd = '0' + dd
	}

	if (mm < 10) {
		mm = '0' + mm
	}

	today = mm + '/' + dd + '/' + yyyy;
	todayInOneYear = mm + '/' + dd + '/' + nextYear;

	var schedule_from = $("#schedule_from");
	var schedule_to = $("#schedule_to");
	$scope.scheduleStartDate = today;
	$scope.scheduleEndDate = todayInOneYear;

	if ( $scope.mobileApp ){
		$scope.scheduleStartDate = new Date(today);
		$scope.scheduleEndDate = new Date(todayInOneYear);
	}

	function findElement(arr, propName, propValue) {
		for (var i = 0; i < arr.length; i++)
			if (arr[i][propName] == propValue)
				return arr[i];
		// will return undefined if not found; you could return a default instead
	}


	if (clientModel) {
		$scope.client = clientModel.Client;
	}


	function getClientWaitingList(data) {
		let scheduleData = data;
		var dataObject = {
			Namespace: namespace,
			Email: $scope.client.Email
		}
		$http({
			method: 'POST',
			url:'/ScheduleV2/GetClientWaitingList',
			data: dataObject
		}).success(function (data) {
			
			let allData = scheduleData.concat(data);
			console.log(allData);
			if ( allData.length == 0 ) {
				$scope.noEvents = true;
				$scope.clientSchedule = {};
			}
			else{
				var today = new Date();
				$scope.testData = [];
				angular.copy(allData, $scope.testData);
				for (var i = 0; i < $scope.testData.length; ++i) {
					var DateNewDate = moment($scope.testData[i]['Date']);
					var DateNewDateEnd = moment($scope.testData[i]['DateEnd']);

					var isDstChangeDay = moment(DateNewDate).isDST();
					if ( isDstChangeDay ){
						DateNewDate = moment(DateNewDate).add(1, 'hours');
						DateNewDateEnd = moment(DateNewDateEnd).add(1, 'hours');
					}

					var convertedDate = DateNewDate.toString();
					var convertedDateEnd = DateNewDateEnd.toString();
					var x = findElement($scope.schedule_areas, "AreaID", $scope.testData[i]['AreaID']);

					$scope.testData[i]['NewDate'] = moment(convertedDate).toDate();
					$scope.testData[i]['NewDateEnd'] = moment(convertedDateEnd).toDate();
					if (x != undefined && x['Name'] != undefined)
					    $scope.testData[i]['AreaName'] = x['Name'];

				}

				$scope.testData = $scope.convertTo($scope.testData, 'Date', true);

				$scope.clientSchedule = {};
				Object.keys($scope.testData).sort().forEach(function (key) {
					$scope.clientSchedule[key] = $scope.testData[key];
				});
			}
		}).error(function () {

		});
	}


	$scope.getClientServices = function () {
		var dataObject = {
			Namespace: namespace,
			Email: $scope.client.Email,
			datestart: $scope.scheduleStartDate,
			dateend: $scope.scheduleEndDate
		}
		$http({
			method: 'POST',
			url:'/ScheduleV2/GetClientSchedule',
			data: dataObject
		}).success(function (data) {
			console.log(data);

			getClientWaitingList(data);

		}).error(function () {

		});
	}

	$scope.beforLeaveEvent = function(visitDate, visitId, waitingID) {
		$scope.currentVisitDate = visitDate;
		$scope.currentVisitID = visitId;
		$scope.currentWaitingID = waitingID;
		$('#shcedule-popup').addClass('show');
		$('#shcedule-popup .popup').addClass('show');
	}

	// public ContentResult RemoveFromWaitingList(string Namespace, string Email, int WaitingListID)

	$scope.leaveLink = function(){
		if($scope.currentWaitingID > 0){
			leaveWaitingList();
		}else{
			leaveEvent();
		}
	}

	function leaveWaitingList(){
		var dataObject = {
			Namespace: namespace,
			Email: $scope.client.Email,
			WaitingListID: $scope.currentWaitingID,
		}

		$http({
			method: 'POST',
			url: '/ScheduleV2/RemoveFromWaitingList',
			data: dataObject
		}).success(function (data) {
			if (data == true || data == 'True') {
				$('#shcedule-popup .popup-body').addClass('show-success');
				$scope.getClientServices();
			}else{
				$('#shcedule-popup .popup-body').addClass('show-error');
			}
		}).error(function () {
			$('#shcedule-popup .popup-body').addClass('show-error');
		});
	}
	function leaveEvent() {
		var now = new Date();

		var dateBeforeCancel = new Date($scope.currentVisitDate);
		dateBeforeCancel.setHours(dateBeforeCancel.getHours() - $scope.classSettings.HoursBeforeCanceling);

		if (now < dateBeforeCancel) {
			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				Id: $scope.currentVisitID,
				ClientID: $scope.client.ClientID
			}

			$http({
				method: 'POST',
				url: '/private/leaveEvent',
				data: dataObject
			}).success(function (data) {
				if (data == true || data == 'True') {
					$('#shcedule-popup .popup-body').addClass('show-success');
					$scope.getClientServices();
				}else{
					$('#shcedule-popup .popup-body').addClass('show-error');
				}
			}).error(function () {
				$('#shcedule-popup .popup-body').addClass('show-error');
			});
		} else {
			$('#shcedule-popup .popup-body').addClass('show-error');
		}
	}

	$scope.getEventsType = function(dgymID){
		if ( dgymID ) {
			gymid = dgymID;
		}

		var dataObject = {
			Namespace: namespace,
			GymId: gymid
		}
		$http({
			method: 'GET',
			url: '/api/public/GetPublicEvents?nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			$scope.schedule_activities = data;
		}).error(function () {

		});
	}
	$scope.getEventsType();
 

	// Get Schedule

	$scope.getSchedule = function (from, to, dgymID, dontUpdateActInstr) {
		var updateActInstr = true;

		if ( dontUpdateActInstr != undefined ){
			updateActInstr = false;
		}

		if ( dgymID ) {
			gymid = dgymID;
		}

		var dataObject = {
			GymID: gymid,
			Namespace: namespace,
			DateStart: $scope.scheduleStartDate,
			DateEnd: $scope.scheduleEndDate,
			AreaID: $scope.visitArea,
			InstructorID: $scope.visitInstructor,
			Private: true,
			PublicEventID: $scope.activityId
		}

		$http({
			method: 'POST',
			url: '/api/public/GetSchedule',
			data: dataObject
		}).success(function (data) {
			var today = new Date();
			$scope.testData = [];
			var currentActivities = [];
			var currentInstructors = [];
			angular.copy(data, $scope.testData);
			for (var i = 0; i < $scope.testData.length; ++i) {
				var DateNewDate = moment($scope.testData[i]['Date']);
				var DateNewDateEnd = moment($scope.testData[i]['DateEnd']);

				var isDstChangeDay = moment(DateNewDate).isDST();
				if ( isDstChangeDay ){
					DateNewDate = moment(DateNewDate).add(1, 'hours');
					DateNewDateEnd = moment(DateNewDateEnd).add(1, 'hours');
				}
				var convertedDate = DateNewDate.toString();
				var convertedDateEnd = DateNewDateEnd.toString();

				var x = findElement($scope.schedule_areas, "AreaID", $scope.testData[i]['AreaID']);

				$scope.testData[i]['NewDate'] = moment(convertedDate).toDate();
				$scope.testData[i]['NewDateEnd'] = moment(convertedDateEnd).toDate();
				if (x != undefined && x['Name'] != undefined)
				    $scope.testData[i]['AreaName'] = x['Name'];

				$scope.testData[i]['ShowParticipantsCount'] = x != undefined ? x['ShowParticipantsCount'] : false;

				var testDateBeforeBooking = new Date($scope.testData[i]['Date']);
				testDateBeforeBooking.setHours(moment($scope.testData[i]['Date']).hours() - $scope.classSettings.HoursBeforeBooking);
				$scope.testData[i]['HoursBeforeBooking'] = testDateBeforeBooking;

				var testDatedaysAheadBooking = new Date(convertedDate);
				testDatedaysAheadBooking.setDate(testDatedaysAheadBooking.getDate() - $scope.classSettings.DaysAheadBooking);

				if (today >= testDatedaysAheadBooking || $scope.classSettings.DaysAheadBooking == 0) {
					$scope.testData[i]['AheadBooking'] = true;
				} else {
					$scope.testData[i]['AheadBooking'] = false;
				}

				if ( $scope.testData[i]['PeopleAttending'] >= $scope.testData[i]['MaxClients']) {
					$scope.testData[i]['FullCapacity'] = true;
				}else{
					$scope.testData[i]['FullCapacity'] = false;
				}

				$scope.testData[i]['SlotsLeft'] = $scope.testData[i]['MaxClients'] - $scope.testData[i]['PeopleAttending'];

				// console.log($scope.testData[i]);
				if ( updateActInstr == true ){
					if ( !currentActivities.includes($scope.testData[i]['PublicEventID']) ) {
						currentActivities.push($scope.testData[i]['PublicEventID']);
					}
				}

				if ( $scope.testData[i]['InstructorIDs'] != null ) {
					var manageInstrucors = $scope.testData[i]['InstructorIDs'];

					if ( manageInstrucors.indexOf(',') > -1 ) {
						var res = manageInstrucors.split(',');

						for (var n = 0; n < res.length; n++) {
							if ( !currentInstructors.includes(res[n]) ) {
								currentInstructors.push(res[n]);
							}

							var result = $.grep($scope.schedule_instructors, function (e) { return e.Id == res[n] });
							if ( result.length > 0 ) {
								var instructor = result[0].Name;
								if ( n > 0 ) {
									instructor = ', ' + instructor;
								}
								$scope.testData[i]['Instructors']  += instructor;
							}
						}
					}else{
						if ( !currentInstructors.includes(manageInstrucors) && manageInstrucors != '00000000-0000-0000-0000-000000000000' && manageInstrucors != '' ) {
							currentInstructors.push(manageInstrucors);
						}

						var result = $.grep($scope.schedule_instructors, function (e) { return e.Id == manageInstrucors });
						if ( result.length > 0 ) {
							$scope.testData[i]['Instructors'] = result[0].Name;
						}
					}
				}
			}

			if ( updateActInstr == true ){
				getCurrentActivities(currentActivities);
				getCurrentInstructors(currentInstructors);
			}

			$scope.originalData = $scope.testData;
			$scope.testData = $scope.convertTo($scope.testData, 'Date', true);

			$scope.Schedule = {};
			Object.keys($scope.testData).sort().forEach(function (key) {
				$scope.Schedule[key] = $scope.testData[key];
			});

			$('body').addClass('loaded-body');

		}).error(function () {

		});
	}

	function getCurrentActivities(array){
		$scope.current_activities = [];

		for (var i = 0; i < array.length; i++) {
			var activity = array[i];
			var result = $.grep($scope.schedule_activities, function (e) { return e.Id == activity });

			if ( result.length > 0 ) {
				$scope.current_activities.push(result[0]);
			}
		}
	}

	function getCurrentInstructors(array){
		$scope.current_instructors = [];

		for (var i = 0; i < array.length; i++) {
			var instructor = array[i];
			var result = $.grep($scope.schedule_instructors, function (e) { return e.Id == instructor });

			if ( result.length > 0 ) {
				$scope.current_instructors.push(result[0]);
			}
		}

		console.log($scope.current_instructors);
	}

	$scope.convertTo = function (arr, key, dayWise) {
		var groups = {};
		for (var i = 0; l = arr.length, i < l; i++) {
			var newDateLocal = new Date(arr[i][key]).toISOString().slice(0, 10);
			// console.log(newDateLocal);

			arr[i]['DateLocal'] = new Date(arr[i][key]).toISOString().slice(0, 10);

			groups[arr[i]['DateLocal']] = groups[arr[i]['DateLocal']] || [];
			groups[arr[i]['DateLocal']].push(arr[i]);
		}
		return groups;
	};

	$scope.updateActivity = function (activityId) {
		$('body').removeClass('loaded-body');
		$scope.activityId = activityId;
		$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, gymid, 'dontUpdateActInstr');
		if (activityId != null) {
			var x = findElement($scope.schedule_activities, "Id", activityId);

			$scope.choosenActivity = true;
			$scope.nameActivity = x['Name'];
		} else {
			$scope.choosenActivity = false;
		}

		$('.schedule-wrapper .filter-section .filter-col-activities .dd').removeClass('show');
	}


	// Get Areas

	$scope.getAreas = function (gymid, allAreas) {
		var dataObject = {
			Namespace: namespace,
			GymId: gymid,
			AllAreas: false
		}

		if ( allAreas ) {
			dataObject = {
				Namespace: namespace,
				GymId: gymid,
				AllAreas: true
			}
		}


		$http({
			method: 'GET',
			url: '/api/public/GetAreas?AllAreas=' + allAreas + '&nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			$scope.schedule_areas = data;
		}).error(function () {

		});
	}

	$scope.updateAreaId = function (id, gymID) {
		$('body').removeClass('loaded-body');
		$('.filter-col-activities input:checked').prop('checked', false);
		$scope.choosenActivity = false;
		$scope.scheduleActivity = null;
		$scope.activityId = null;
		$('.filter-col-instructors input:checked').prop('checked', false);
		$scope.visitInstructor = 0;
		$scope.choosenInstructor = false;
		$scope.scheduleActivity = 'null';
		$scope.scheduleInstructor = '0';
		$scope.visitArea = id;
		if ( gymID ) {
			$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, gymID);
		}else{
			$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate);
		}
	}

	// Get Instructors
	$scope.getInstructors = function (gymid) {
		var dataObject = {
			Namespace: namespace,
			GymId: gymid
		}
		$http({
			method: 'GET',
			url: '/api/public/GetInstructors?nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			$scope.schedule_instructors = data;
		}).error(function () {

		});
	}

	$(window).on('load', function () {
		setTimeout(function () {
			if ($scope.membershipGyms.length > 1 && $('.schedule-wrapper-main').length) {
				$('.schedule-wrapper-main').addClass('loading');
				$scope.getAreas(gymid, false);
			} else {
				$scope.getAreas(gymid, true);
				setTimeout(function () {
					$scope.getSchedule(today, todayInOneYear, gymid);
					$scope.getClientServices();
				}, 100);
				$scope.getInstructors(gymid);
				$scope.getSettings(gymid);
			}
		}, 700);
	})

	$scope.changeScheduleZone = function () {
		var id = $scope.scheduleZone;
		var x = findElement($scope.membershipGyms, "GymID", id);
		$scope.scheduleZoneName = x.GymName;
		$scope.choosenActivity = false;
		$scope.scheduleActivity = null;
		$scope.activityId = null

		$('.filter-col-instructors input:checked').prop('checked', false);
		$scope.choosenInstructor = false;
		$scope.visitInstructor = 0;

		$scope.scheduleActivity = 'null';
		$scope.scheduleInstructor = '0';
		$scope.scheduleArea = '0';

		$scope.getAreas(id, false);
		$scope.getInstructors(id);
		$scope.getSettings(id);
		$scope.getEventsType(id);

		setTimeout(function () {
			$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, id);

			if (days != null) {
				$('.schedule-list').addClass('hide');
				for (var i = 0; i < days; i++) {
					$('.schedule-list .list-item').eq(i).addClass('show');
				}
			}

			$('.schedule-wrapper').removeClass('loading');
		}, 500);

	}

	$scope.getSettings = function (id) {
		var dataObject = {
		    Namespace: namespace,
		    GymID: id
		}
		$http({
			method: 'POST',
			url: '/ScheduleV2/GetSettings',
			data: dataObject
		}).success(function (data) {
			$scope.classSettings = data;

			$scope.showCapacity = data.ShowCapacityCustomersPortal;
			$scope.showInstructor = data.ShowInstructorCustomersPortal;

			if($scope.classSettings.ShowScheduleDaysAhead > 0 ){
				let date = new Date($scope.scheduleStartDate);
				date.setDate(date.getDate() + $scope.classSettings.ShowScheduleDaysAhead);
				date = new Date(date);

				let dd = date.getDate();
				let mm = date.getMonth() + 1;
				let yyyy = date.getFullYear();

				$scope.scheduleEndDate = mm + '/' + dd + '/' + yyyy;
			}
		}).error(function () {
			// console.log('error');
		});
	}

	$scope.updateInstructorId = function (id) {
		$scope.visitInstructor = id;

		$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, gymid, 'dontUpdateActInstr');

		if (id != '0') {
			var x = findElement($scope.schedule_instructors, "Id", id);

			$scope.choosenInstructor = true;
			$scope.nameInstructor = x['Name'];
		} else {
			$scope.choosenInstructor = false;
		}

		$('.schedule-wrapper .filter-section .dd').removeClass('show');
	}

	$scope.updateVisitProduct = function(id){
		if ( id != '-1') {
			var result = $.grep($scope.visitProducts, function (e) { return e.ProductID == id });
			$scope.productId = id;
			$scope.productName = result[0].ProductName;
		}else{
			$scope.productId = '-1';
			$scope.productName = 'Own equipment'
		}
	}

	// Join Event

	function paymentChange(){
		if ($scope.smodal.paymentMethod == '7') {
			$('.popup-wrapper .popup .stripe-button').addClass('show');

			// Stripe
			$scope.stripe = Stripe($scope.classSettings.StripePublishKey);
			// Create a Stripe client.
			// var stripe = Stripe($scope.classSettings.StripePublishKey);
			// Create an instance of Elements.
			var elements = $scope.stripe.elements();
			// Custom styling can be passed to options when creating an Element.
			// (Note that this demo uses a wider set of styles than the guide below.)
			var style = {
				base: {
				color: '#32325d',
				lineHeight: '18px',
				fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
				fontSmoothing: 'antialiased',
				fontSize: '16px',
				'::placeholder': {
					color: '#aab7c4'
				}
				},
				invalid: {
				color: '#fa755a',
				iconColor: '#fa755a'
				}
			};

			// Create an instance of the card Element.
			// $scope.card = elements.create('card', {style: style});
			$scope.card = elements.create('card', {style: style, hidePostalCode: $scope.classSettings.HidePostalCode });

			// Add an instance of the card Element into the `card-element` <div>.
			$scope.card.mount('#card-element');

			// Handle real-time validation errors from the card Element.
			$scope.card.addEventListener('change', function(event) {
				var displayError = document.getElementById('card-errors');
				if (event.error) {
					displayError.textContent = event.error.message;
				} else {
					displayError.textContent = '';
				}
			});

			$('.stripe-button').on('click', function(e){
				e.preventDefault();
				generatePaymentIntent();
			})
		}else{
			$('.popup-wrapper .popup .stripe-button').removeClass('show');
		}
	}

	// Generate PaymentInted for Stripe
	function generatePaymentIntent() {
		$scope.PaymentIntentID = 0;
		$('#shcedule-popup .error-msg').removeClass('show');
		$('#shcedule-popup .success-msg').removeClass('show');
		let dataObject = prepareDataToSned();

		if ($scope.formLoaded == true) {
			$scope.formLoaded = false;
			$scope.loading = true;
			$http({
				method: 'POST',
				url: '/private/GeneratePaymentIntent',
				data: dataObject
			}).success(function (data) {

				if(data == 'Waiver Required!'){
					var translated = $translateThis('Waiver Required!Portal');
					var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/account/embedgroupschedule';
					Swal.fire({
						type: 'warning',
						title: translated,
						showCancelButton: true,
					}).then(function(result) {
						if (result.value) {
							window.location.href = waiverHref;
						}else{
							$timeout(function() {
								$scope.formLoaded = true;
								$scope.loading = false;
								$('#shcedule-popup .success-msg').removeClass('show');
							}, 1);
						}
					});
				}

				if( data == 2 ){
					$scope.joinEventResponse = joinEventResponses[data];
					$('#shcedule-popup .error-msg').removeClass('show');
					$('#shcedule-popup .success-msg').addClass('show');
					$scope.formLoaded = true;
					$scope.loading = false;
				}else{
					stripeConfirmCard(data);
					$scope.PaymentIntentID = data.ID;
					$scope.formLoaded = true;
				}
			}).error(function (error) {
				$scope.errorResponse = error.ExceptionMessage;
				$('#shcedule-popup .error-msg').addClass('show');
				$scope.formLoaded = true;
				$scope.loading = false;
			});
		}
	}

	function stripeConfirmCard(data){

		let name = $scope.Client.FirstName + ' ' + $scope.Client.LastName;

		$scope.stripe.confirmCardPayment(data.ClientSecret, {
			payment_method: {
				card: $scope.card,
				  billing_details: {
					name: name
				  }
			}
		}).then(function(result) {
			if (result.error) {
				// Show error to your customer (e.g., insufficient funds)
				$scope.joinEventResponse = result.error.message;
				$('#shcedule-popup .error-msg').removeClass('show');
				$('#shcedule-popup .success-msg').addClass('show');
				$timeout(function() {
					$scope.formLoaded = true;
					$scope.loading = false;
				}, 100);
			} else {
				  // The payment has been processed!
				  if (result.paymentIntent.status === 'succeeded') {
					$scope.joinEvent();
					// Show a success message to your customer
					// There's a risk of the customer closing the window before callback
					// execution. Set up a webhook or plugin to listen for the
					// payment_intent.succeeded event that handles any business critical
					// post-payment actions.
				  }else{
					$scope.formLoaded = true;
					$scope.loading = false;
					$('#shcedule-popup .success-msg').removeClass('show');
				  }
			}
		});
	}

	function prepareDataToSned(){
		let dataObject = {
			Namespace: namespace,
			GymID: gymid,
			Id: $scope.modalVisit.ID,
			Email: $scope.Client.Email,
			FirstName: $scope.Client.FirstName,
			LastName: $scope.Client.LastName,
			Telephone: $scope.Client.Telephone,
			Date: moment($scope.modalVisit.NewDate).toISOString(),
			VisitName: $scope.modalVisit.VisitName,
			PaymentMethod: $scope.smodal.paymentMethod,
			Language: $scope.currentLang,
			ProductID: $scope.productId,
			ProductName: $scope.productName,
			PaymentIntentID: $scope.PaymentIntentID
		}

		if ( $scope.smodal.paymentMethod == '7' ) {
			dataObject.PaymentMethod = 7;
			dataObject.Token = $scope.token;
			dataObject.Price = $scope.modalPrice;
			dataObject.PublicEventID = $scope.PublicEventID;
		}

		return dataObject;
	}

	$scope.formLoaded = true;
	var joinEventResponses = new Array('joinEventResponse1', 'joinEventResponse2', 'joinEventResponse3', 'joinEventResponse4', 'joinEventResponse5', 'joinEventResponse6', 'joinEventResponse7', 'joinEventResponseEmpty','joinEventResponseEmpty', 'joinEventResponse8', 'joinEventResponse9');

	$scope.joinEvent = function () {
		let dataObject = prepareDataToSned();

		if ($scope.formLoaded = true) {
		    $scope.formLoaded = false;
		    $http({
		        method: 'POST',
		        url: '/private/JoinEvent',
		        data: dataObject
		    }).success(function (data) {
		        $scope.loading = false;
		        var responseI = data;
		        $scope.joinEventResponse = joinEventResponses[responseI];

		        $('#shcedule-popup .error-msg').removeClass('show');
		        $('#shcedule-popup .success-msg').addClass('show');

		        if (responseI == 0) {
		            $('#shcedule-popup .success-msg').addClass('green');
		            setTimeout(function() {
		            	if ( !$scope.formLoaded ) {
		            		$scope.closePopup();
		            	}
		            }, 3000);
		        }else if (responseI == 1) {
					// $scope.joinWaitingList($scope.modalVisit);
					$('#waiting-popup .popup, #waiting-popup').addClass('show');
		        }else if (responseI == 6) {
		            $('#shcedule-popup .success-msg').addClass('red');
		        }else if(responseI == 8){
					var translated = $translateThis('Waiver Required!Portal');
					var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/account/embedgroupschedule';
					Swal.fire({
						type: 'warning',
						title: translated,
						showCancelButton: true,
					}).then(function(result) {
						if (result.value) {
							window.location.href = waiverHref;
						}else{
							$timeout(function() {
								$scope.formLoaded = true;
								$scope.loading = false;
								$('#shcedule-popup .success-msg').removeClass('show');
							}, 1);
						}
					});
				}else{
		        	$scope.formLoaded = true;
		        }

		    }).error(function () {
		        $('#shcedule-popup .error-msg').addClass('show');
		        $('#shcedule-popup .form-actions .button-join').addClass('disabled');
		        $scope.formLoaded = true;
		        $scope.loading = false;
		    });
		}
	}

	$scope.closePopup = function () {
		$('.popup-wrapper, #shcedule-popup .success-msg').removeClass('show');
		$scope.resetForm();
		$('#shcedule-popup .success-msg').removeClass('green');
		$scope.formLoaded = true;
	}

	$scope.resetForm = function () {
		$('#shcedule-popup .popup-body').find('input').val('');
		$('#shcedule-popup .dd .dd-head').html('');
		$('.shcedule-popup .form-field .dd-field input:checked').prop('checked', false);
		$('.popup-wrapper .popup .stripe-button').removeClass('show');
		$scope.smodal = {paymentMethod: null, email: ''};
	}

	$scope.validateForm = function(){
		$('#shcedule-popup .form-actions .button').removeClass('disabled');
	}

	// CheckWaiver(string Email, int PublicEventID, int GymID, string Namespace)

	function checkWaiver(){

		let dataObject = {
			Namespace: namespace,
			GymID: gymid,
			PublicEventID: $scope.PublicEventID,
			Email: $scope.Client.Email
		}
		
		$http({
			method: 'POST',
			url: '/private/CheckWaiver',
			data: dataObject
		}).success(function (data) {
			if(data == 'Waiver Required!'){
				var translated = $translateThis('Waiver Required!Portal');
				var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/Schedulev2/EmbedGroupSchedule';
				Swal.fire({
					type: 'warning',
					title: translated,
					showCancelButton: true,
				}).then(function(result) {
					if (result.value) {
						window.location.href = waiverHref;
					}else{
						$timeout(function() {
							$scope.formLoaded = true;
							$scope.loading = false;
							$('#shcedule-popup .success-msg').removeClass('show');
						}, 1);
					}
				});
			}else{
				$scope.loading = false;
			}
		}).error(function (error) {
			$scope.loading = false;
		});
	}

	// Check Valid Membership
	// HasValidMembership(int ClientID, int ScheduleID, int GymID, string Namespace)

	function checkHasValidMembership(){
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			ScheduleID: $scope.modalVisit.ID,
			ClientID: $scope.client.ClientID
		}
		
		$http({
			method: 'GET',
			url: '/private/HasValidMembership?Namespace=' + namespace + '&GymID=' + gymid + '&ScheduleID=' + $scope.modalVisit.ID + '&ClientID=' + $scope.client.ClientID,
			data: dataObject
		}).success(function (data) {
			console.log(data);

			if(data == 'true' || data == 'True' || data == true){
				$('#fieldMembership').next('label').trigger('click');
				$('#fieldMembership').prop('checked', true);
				$scope.smodal.paymentMethod = '1';
				$scope.paymentLocked = true;
			}else{
				getEventPrice();
			}
		}).error(function () {
		});
	}

	$scope.eventLink = function(event){

		$scope.peopleWaiting = 0;
		$scope.modalVisit = event;

		if(event.FullCapacity){
			$('#waiting-popup .popup, #waiting-popup').addClass('show');
		}

		if( event.AheadBooking && event.BookOnline == true && !event.FullCapacity ){

			// CheckForWaitingPeople(int ScheduleContentID, int GymID, string Namespace)
			let dataObject = {
				ScheduleContentID: event.ID,
				GymID: gymid,
				Namespace: namespace
			}
			$http({
				method: 'POST',
				url: '/private/CheckForWaitingPeople',
				data: dataObject
			}).success(function (data) {

				$scope.peopleWaiting = data;
				if( data > 0 ){
					$('#waiting-popup .popup, #waiting-popup').addClass('show');
				}else{
					$scope.joinModal(event.ID);
				}

			}).error(function (error) {
			});
		}
	}

	$scope.joinWaitingList = function(event){
		let dataObject = {
			Namespace: namespace,
			GymID: gymid,
			Id: event.ID,
			Email: $scope.client.Email,
			FirstName: $scope.Client.FirstName,
			LastName: $scope.Client.LastName,
			Telephone: $scope.Client.Telephone,
			Date: moment(event.NewDate).toISOString(),
			VisitName: event.VisitName,
			Language: lang
		}

		$http({
			method: 'POST',
			url: '/private/JoinWaitingList',
			data: dataObject
		}).success(function (data) {

			//0:everything ok; 1:no client found; 2:cannot add to waiting list; 3:error;4 already in the same waiting list; 7:no event found

			console.log(data);
			let response = data;

			if(response == 0){
				let translated = $translateThis('Thank you for joining the waitlist. You will receive an email if space becomes available.');
				Swal.fire({
					type: 'success',
					title: translated,
				});
			}else if(response == 1){
				let translated = $translateThis('There is no customer with this email. Please contact reception.');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 2){
				let translated = $translateThis('Cannot add to waiting list');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 3){
				let translated = $translateThis('Error');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 4){
				let translated = $translateThis('You are already in the waitlist. We will send you an email if space becomes available');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 7){
				let translated = $translateThis('no event found');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}

			$scope.closePopup();
		}).error(function (error) {
		});
	}

	// Join Modal
	$scope.joinModal = function (visitId) {
		$scope.modalLoading = true;
		$scope.loading = true;
		$scope.noActivePayment = false;
		$scope.paymentLocked = false;
		$scope.visitProducts = [];
		var result = $.grep($scope.originalData, function (e) { return e.ID == visitId; });

		if ( result.length > 0 ) {
			$scope.modalVisit = result[0];
			$scope.PublicEventID = result[0].PublicEventID;

			var dayOfWeek = $filter('date')($scope.modalVisit.NewDate, 'EEEE');
			var compiledeHTML = $compile("<span translate-date-object><span class='day ng-binding'>" + dayOfWeek + "</span></span>")($scope);
			$(".dayofweekn").html(compiledeHTML);


			var now = new Date();

			if (now < $scope.modalVisit.HoursBeforeBooking) {
				$('#shcedule-popup').addClass('show');
				checkHasValidMembership();
				
				setTimeout(function () {
					var dataObject = {
						Namespace: namespace,
						GymID: gymid,
						ID: visitId
					}

					$http({
				        method: 'GET',
				        url: '/api/public/GetEqipment?nameSpace=' + namespace + '&gymId=' + gymid + '&ID=' + visitId,
				        data: dataObject
				    }).success(function (data) {
				        $scope.visitProducts = data;
				        $scope.modalLoading = false;
						checkWaiver();
				    }).error(function () {
				    });
					$('#shcedule-popup .popup').addClass('show');
					$('#shcedule-popup .form-actions .button-join').removeClass('disabled');
				}, 10);
			} else {
				$('#shcedule-not-popup').addClass('show');
				setTimeout(function () {
					$('#shcedule-not-popup .popup').addClass('show');
					$scope.loading = false;
				}, 10);
			}
		}
	}

	function getEventPrice(){
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			id: $scope.PublicEventID,
		}
		
		$http({
			method: 'GET',
			url: '/private/GetPublicEventPrice?Namespace=' + namespace + '&GymID=' + gymid + '&id=' + $scope.PublicEventID,
			data: dataObject
		}).success(function (data) {
			$scope.modalPrice = data;
			
			if( $('.shcedule-popup .form-field .dd-field').length == 1){
				$('.shcedule-popup .form-field .dd-field label').trigger('click');
				$('.shcedule-popup .form-field .dd-field input').prop('checked', true);

				$scope.smodal.paymentMethod = $('.shcedule-popup .form-field .dd-field input').val();
				paymentChange();
			}

		}).error(function () {
		});
	}

	$scope.getAttendingClients = function(item){

		if(!item.AttendingClients){
			$scope.modalLoading = true;

			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				ScheduleID: item.ID,
				AreaID: item.AreaID
			}

			$http({
				method: 'GET',
				url: '/private/GetAttendingClients?Namespace=' + namespace + '&GymID=' + gymid + '&ScheduleID=' + item.ID + '&AreaID=' + item.AreaID,
				data: dataObject
			}).success(function (data) {
				item.attedingCleints = data;

				$scope.clientsData = item.attedingCleints;
				$('#clients-popup, #clients-popup .popup').addClass('show');
				$scope.modalLoading = false;

			}).error(function () {
				// console.log('error');
			});
		}else{
			$('#clients-popup, #clients-popup .popup').addClass('show');
			$scope.clientsData = item.AttendingClients
		}
	}


	$('.popup-wrapper .close, .popup-wrapper .popup-overlay').on('click', function (e) {
		e.preventDefault();
		$('.popup-wrapper, #shcedule-popup .popup, #shcedule-popup .error-msg, #shcedule-popup .success-msg').removeClass('show');
		$('#shcedule-popup .popup-body').removeClass('show-success show-error');
		$scope.resetForm();
	})

	// Datepickers
	$scope.currentLang = $translate.proposedLanguage() || $translate.use();

	schedule_from.datepicker({
		changeMonth: true,
		numberOfMonths: 2,
		minDate: 0,
		onSelect: function (dateText, inst) {
			var date = dateText;
			schedule_to.datepicker("option", "minDate", date);


			if ($scope.gym[0].Culture != 'en-US') {
				var res = date.split("/");
				var date = res[1] + '/' + res[0] + '/' + res[2];
			}

			$scope.scheduleStartDate = date;
		}
	});

	schedule_to.datepicker({
		changeMonth: true,
		numberOfMonths: 2,
		onSelect: function (dateText, inst) {
			var date = dateText;
			schedule_from.datepicker("option", "maxDate", date);

			if ($scope.gym[0].Culture != 'en-US') {
				var res = date.split("/");
				var date = res[1] + '/' + res[0] + '/' + res[2];
			}

			var tomorrow = new Date(date);
			tomorrow.setDate(tomorrow.getDate() + 1);


			$scope.scheduleEndDate = tomorrow;
		}
	});

	$('.ui-datepicker').addClass('notranslate');

	if($scope.classSettings.ShowScheduleDaysAhead > 0 ){
		let days = $scope.classSettings.ShowScheduleDaysAhead - 1;
		let today = new Date();
		today.setDate(today.getDate() + days);
		maxDate = new Date(today);

		schedule_from.datepicker("option", "maxDate", maxDate);
		schedule_to.datepicker("option", "maxDate", maxDate);

	}

	if ($scope.currentLang == 'bg') {
		$('#schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['bg']);
	}else if($scope.currentLang == 'es' || $scope.currentLang == 'esc'){
		$('#schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['es']);
	}else if($scope.currentLang == 'pt'){
		$('#schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['pt']);
	}else{
		$('#schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['en']);
	}

	if ($scope.gym[0].Culture == 'en-US') {
		$('#schedule_to, #schedule_from').datepicker( "option", "dateFormat", "mm/dd/yy" );
	} else {
		$('#schedule_to, #schedule_from').datepicker( "option", "dateFormat", "dd/mm/yy" );
	}


	function getDate(element) {
		var date;
		try {
			date = $.datepicker.parseDate(dateFormat, element.value);
		} catch (error) {
			date = null;
		}
		return date;
	}


	$(document).on('click', '.dd .dd-head', function (e) {
		e.preventDefault();
		if(!$scope.paymentLocked)
			$(this).parent('.dd').toggleClass('show');
	});

	$(document).click(function (e) {
		if ($(e.target).closest('.dd').length === 0 && $('.dd').is('.show')) {
			$('.dd').removeClass('show');
		}
	});

	$(document).on('click', '#shcedule-popup .dd-field', function () {
		var content = $(this).find('label').html();
		$scope.paymentMethod = $(this).find('input').val();
		$('#shcedule-popup .dd-head').html(content);
		$('#shcedule-popup .dd').removeClass('show');
		paymentChange();
	})

	$('.schedule-wrapper .filter-section .date-col i').on('click', function (e) {
		$(this).parent().find('input').datepicker('show');
	})

	$(window)
	.on('load', function(){
		resizeAndDatepicker();
	})
	.on('resize', function(){
		resizeAndDatepicker();
	})

	//  Check Window Size and change datepicker options
	function resizeAndDatepicker(){
		var windowWidth = $(window).width();

		if ( windowWidth <= 768 ) {
			schedule_from.datepicker("option", "numberOfMonths", 1);
			schedule_to.datepicker("option", "numberOfMonths", 1);
		}else{
			schedule_from.datepicker("option", "numberOfMonths", 2);
			schedule_to.datepicker("option", "numberOfMonths", 2);
		}
	}

}]);
membershipApp.directive('datepicker', ['$translate', function ($translate) {
	return {
		link: function ($scope, el, attr, ngModel) {

			function setCookie(key, value) {
				var val = value;
				var expires = new Date();
				expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));
				document.cookie = key + '=' + value + ';expires=' + expires.toUTCString() + ';path=/';
				if (val != "true") {
					$('body').addClass('pound-currency');
				} else {
					$('body').removeClass('pound-currency');
				}
			}

			function getCookie(key) {
				var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
				return keyValue ? keyValue[2] : null;
			}

			var today = new Date();
			var datepicker = $(el);
			var lastDate = getCookie('setDate');

			datepicker.datepicker({
				changeMonth: true,
				changeYear: true,
				yearRange: "1920:2040",
				numberOfMonths: 1,
				onSelect: function (dateText, inst) {
					$scope.currentLang = $translate.proposedLanguage() || $translate.use();
					var date = $(this).val();

					if ($scope.gym[0].Culture != 'en-US') {
						var res = date.split("/");
						var date = res[1] + '/' + res[0] + '/' + res[2];
					}
					$scope.cardStartDate = new Date(date);
					$scope.membershipStartDate = $scope.cardStartDate;

					if ($('.section-authorize').length && !$('#RegBirthdayVal').is(':checked')) {
						$('#RegBirthdayVal').trigger('click');
					}
					
					if ( $('.onepage-wrapper').length ) {
						$scope.theChoosenMembershipDate = $scope.cardStartDate;
						$scope.getTerms();
					}
					$scope.$apply();
				}
			});

			$('.ui-datepicker').addClass('notranslate');
			$scope.currentLang = $translate.proposedLanguage() || $translate.use();

			if ($('.membershipbuy-wrapper').length) {

				if (lastDate != null && lastDate != '') {

					if ($scope.gym[0].Culture != 'en-US') {
						var res = lastDate.split('/');
						var newDate = res[1] + '/' + res[0] + '/' + res[2];
						var newLastDate = new Date(newDate);
					}
					else {
						var newLastDate = new Date(lastDate);
					}

					datepicker.datepicker("setDate", newLastDate);
					if (datepicker.parents('.membersip-card').is('.checked')) {
						setCookie('setDate', '');
					}
				} else {
					datepicker.datepicker("option", "minDate", 0);
					datepicker.datepicker("setDate", today);
				}
			}

			if ( $('.onepage-wrapper').length ) {

				if($scope.theChoosenMembership && $scope.theChoosenMembership.FixedDate){
					let membershipDate = new Date($scope.theChoosenMembership.FixedStartingDate);
					$scope.theChoosenMembershipDate = membershipDate;
					$('#membdatepicker').datepicker('setDate', new Date(membershipDate));
					$('#membdatepicker').datepicker('disable');
				}else{
					datepicker.datepicker("option", "minDate", 0);
					datepicker.datepicker("setDate", today);
					$scope.theChoosenMembershipDate = today;

					if ( $scope.lockMembership ) {
						datepicker.datepicker("option", "maxDate", $scope.settings.MembershipAheadPurchase);
					}
				}	
			}
			
			if ($('.section-authorize').length) {
				datepicker.datepicker("option", "maxDate", 0);
			}

			datepicker.next('i').on('click', function () {
				datepicker.datepicker('show');
			});


			if ($scope.currentLang == 'en') {
				if(gym[0].Culture == 'en-GB'){
					datepicker.datepicker("option", $.datepicker.regional['en-GB']);
				}else{
					datepicker.datepicker("option", $.datepicker.regional['en']);
				}
			}else if ($scope.currentLang == 'es' || $scope.currentLang == 'esc'){
				datepicker.datepicker("option", $.datepicker.regional['es']);
			}else if ($scope.currentLang == 'pt'){
				datepicker.datepicker("option", $.datepicker.regional['pt']);
			}else {
				datepicker.datepicker("option", $.datepicker.regional['bg']);
			}

			if ( $scope.gym[0].Culture == 'en-US' ) {
				datepicker.datepicker("option", "dateFormat", 'mm/dd/yy');
			}else{
				datepicker.datepicker("option", "dateFormat", 'dd/mm/yy');
			}

			$(document).on('click', '.lang-nav li a', function () {
				var lang = $(this).data('lang');

				if (lang == 'en') {
					if(gym[0].Culture == 'en-GB'){
						datepicker.datepicker("option", $.datepicker.regional['en-GB']);
					}else{
						datepicker.datepicker("option", $.datepicker.regional['en']);
					}
				}else if ($scope.currentLang == 'es' || $scope.currentLang == 'esc'){
					datepicker.datepicker("option", $.datepicker.regional['es']);
				}else if ($scope.currentLang == 'pt'){
					datepicker.datepicker("option", $.datepicker.regional['pt']);
				}else {
					datepicker.datepicker("option", $.datepicker.regional['bg']);
				}

				if ( $scope.gym[0].Culture == 'en-US' ) {
					datepicker.datepicker("option", "dateFormat", 'mm/dd/yy');
				}else{
					datepicker.datepicker("option", "dateFormat", 'dd/mm/yy');
				}
			})
		}
	};
}]);
membershipApp.directive('translateDateObject', ['$timeout', '$translate', function ($timeout, $translate) {
	return {
		controller: function ($scope) {
			return {};
		},
		requires: 'translateDateObject',
		link: function (scope, element, attrs, thisController) {

			$timeout(function () {

				thisController.html = element[0].innerHTML;

				// CLEAN THE STRING TO GET A CLEAN NAME DAY
				var content_temp1 = thisController.html.replace('<span class="day ng-binding">', '');
				var content_temp2 = content_temp1.replace('</span>', '').toLowerCase();

				var day_name = '';

				for (var i = 0, len = content_temp2.length; i < len; i++) {
					// CHECK IF IS A CHAR
					if (content_temp2[i].match(/[a-z]/i)) {
						day_name += content_temp2[i];
					}
				}

				// CHECK THE ACTIVE LANGUAGE
				var lang = $translate.proposedLanguage() || $translate.use();

				if (lang == 'bg') {
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Понеделник</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Вторник</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Сряда</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Четвъртък</span>');
							break;
						case 'friday':
							element.html('<span class="day">Петък</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Събота</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Неделя</span>');
							break;
					}
				}else if (lang == 'es'){
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Lunes</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Martes</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Miércoles</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Jueves</span>');
							break;
						case 'friday':
							element.html('<span class="day">Viernes</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Sábado</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Domingo</span>');
							break;
					}
				}else if (lang == 'esc'){
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Dilluns</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Dimarts</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Dimecres</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Dijous</span>');
							break;
						case 'friday':
							element.html('<span class="day">Divendres</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Dissabte</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Diumenge</span>');
							break;
					}
				}else if (lang == 'pt'){
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Segunda-feira</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Terça-feira</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Quarta-feira</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Quinta-feira</span>');
							break;
						case 'friday':
							element.html('<span class="day">Sexta-feira</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Sábado</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Domingo</span>');
							break;
					}
				}

				$(document).on('click', '.lang-nav li a', function () {
					var lang = $(this).data('lang');

					if (lang == 'en') {
						switch (day_name) {
							case 'monday':
								element.html('<span class="day">Monday</span>');
								break;
							case 'tuesday':
								element.html('<span class="day">Tuesday</span>');
								break;
							case 'wednesday':
								element.html('<span class="day">Wednesday</span>');
								break;
							case 'thursday':
								element.html('<span class="day">Thursday</span>');
								break;
							case 'friday':
								element.html('<span class="day">Friday</span>');
								break;
							case 'saturday':
								element.html('<span class="day">Saturday</span>');
								break;
							case 'sunday':
								element.html('<span class="day">Sunday</span>');
								break;
						}
					}else if (lang == 'es'){
						// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
						switch (day_name) {
							case 'monday':
								element.html('<span class="day">Lunes</span>');
								break;
							case 'tuesday':
								element.html('<span class="day">Martes</span>');
								break;
							case 'wednesday':
								element.html('<span class="day">Miércoles</span>');
								break;
							case 'thursday':
								element.html('<span class="day">Jueves</span>');
								break;
							case 'friday':
								element.html('<span class="day">Viernes</span>');
								break;
							case 'saturday':
								element.html('<span class="day">Sábado</span>');
								break;
							case 'sunday':
								element.html('<span class="day">Domingo</span>');
								break;
						}
					}else if (lang == 'esc'){
						// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
						switch (day_name) {
							case 'monday':
								element.html('<span class="day">Dilluns</span>');
								break;
							case 'tuesday':
								element.html('<span class="day">Dimarts</span>');
								break;
							case 'wednesday':
								element.html('<span class="day">Dimecres</span>');
								break;
							case 'thursday':
								element.html('<span class="day">Dijous</span>');
								break;
							case 'friday':
								element.html('<span class="day">Divendres</span>');
								break;
							case 'saturday':
								element.html('<span class="day">Dissabte</span>');
								break;
							case 'sunday':
								element.html('<span class="day">Diumenge</span>');
								break;
						}
					}else if (lang == 'pt'){
						// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
						switch (day_name) {
							case 'monday':
								element.html('<span class="day">Segunda-feira</span>');
								break;
							case 'tuesday':
								element.html('<span class="day">Terça-feira</span>');
								break;
							case 'wednesday':
								element.html('<span class="day">Quarta-feira</span>');
								break;
							case 'thursday':
								element.html('<span class="day">Quinta-feira</span>');
								break;
							case 'friday':
								element.html('<span class="day">Sexta-feira</span>');
								break;
							case 'saturday':
								element.html('<span class="day">Sábado</span>');
								break;
							case 'sunday':
								element.html('<span class="day">Domingo</span>');
								break;
						}
					} else {
						switch (day_name) {
							case 'monday':
								element.html('<span class="day">Понеделник</span>');
								break;
							case 'tuesday':
								element.html('<span class="day">Вторник</span>');
								break;
							case 'wednesday':
								element.html('<span class="day">Сряда</span>');
								break;
							case 'thursday':
								element.html('<span class="day">Четвъртък</span>');
								break;
							case 'friday':
								element.html('<span class="day">Петък</span>');
								break;
							case 'saturday':
								element.html('<span class="day">Събота</span>');
								break;
							case 'sunday':
								element.html('<span class="day">Неделя</span>');
								break;
						}
					}
				})

			});
		}
	}
}]);
var app  = angular.module('app', ['ngSanitize', 'pascalprecht.translate'])

app.config(['$httpProvider', '$translateProvider', function ($httpProvider, $translateProvider) {
	$httpProvider.defaults.timeout = 5000;
	 
	//$translateProvider.translations('en', dictEN)
	//                .translations('bg', dictBG);

	//$translateProvider.preferredLanguage('bg');

	$translateProvider.fallbackLanguage('en');
	$translateProvider.registerAvailableLanguageKeys(['bg', 'en', 'es', 'esc', 'pt'], {
		'bg_*': 'bg',
		'en_*': 'en',
		'es_*': 'es',
		'esc_*': 'esc',
		'pt_*': 'pt'
	});

	var ob_bg;
	var ob_en;
	var ob_es;
	var ob_esc;
	var ob_pt;

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/bg.json",
		success: function (json) {
			ob_bg = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/en.json",
		success: function (json) {
			ob_en = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/es.json",
		success: function (json) {
			ob_es = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/esc.json",
		success: function (json) {
			ob_esc = json;
		}
	});

	$.ajax({
		async: false,
		url: "../frontend/customersportal/src/translate/pt.json",
		success: function (json) {
			ob_pt = json;
		}
	});

	$translateProvider.translations('en', ob_en);
	$translateProvider.translations('es', ob_es);
	$translateProvider.translations('esc', ob_esc);
	$translateProvider.translations('bg', ob_bg);
	$translateProvider.translations('pt', ob_pt);

	$translateProvider.preferredLanguage('bg');
	$translateProvider.preferredLanguage(lang);

 }]);
app.controller('ScheduleController', ['$scope', '$http', '$timeout', '$translate', '$compile', '$filter', function ($scope, $http, $timeout, $translate, $compile, $filter) {

	$scope.text = 'me@example.com';
	$scope.emailFormat = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

	// Default variables

	var today = new Date();
	var dd = today.getDate();
	var mm = today.getMonth() + 1;
	var yyyy = today.getFullYear();
	var nextYear = today.getFullYear() + 1;
	$scope.visitArea = 0;
	$scope.visitInstructor = 0;
	$scope.nameInstructor;
	$scope.choosenInstructor = false;
	$scope.nameActivity;
	$scope.choosenActivity = false;
	$scope.showFilters = showFilters;
	$scope.showCapacity = showCapacity;
	$scope.allowBooking = allowBooking;
	$scope.startMonday = startMonday;
	$scope.filterActivity = filterActivity;
	$scope.showInstructor = showInstructor;
	$scope.paymentMethods = new Array("OnSide", "Membership", "Sodexo", "MultiSport", "Voucher", "EPay", "PaySafe", "Stripe");
	$scope.listView = true;
	$scope.currentGymId = gymid;
	$scope.modalLoading = false;
	$scope.activityId = null;
	$scope.peopleWaiting = 0;
	$scope.logo = logo;
	$scope.showLogo = showLogo;
	$scope.login = login;
	$scope.loginRequired = loginRequired;
	var $translateThis = $filter('translate');
	$scope.smodal = {paymentMethod: null, email: ''};
	if ( lang == null ) {
		lang = 'bg';
	}

	if( client != null ){
		$scope.client = client;
	}

	if(gym){
		$scope.gym = gym;

		$scope.phoneFormat = gym[0].Culture.includes('GB') ? /^[0-9\s]{5,11}$/ : /^[0-9]{5,15}$/;

		$($scope.gym[0].BODYPart).prependTo('.body-scripts');
		$($scope.gym[0].HEADPart).appendTo(document.head);

		if (gym[0].Culture == 'bg-BG') {
			$scope.customCurrency = 'лв.';
		}else if(gym[0].Culture.includes('-ES') || gym[0].Culture.includes('pt')){
			$scope.customCurrency = 'eur';
		}else if(gym[0].Culture == "fr-CH"){
			$scope.customCurrency = 'CHF';
		}else if(gym[0].Culture.includes('-GB')){
			$scope.customCurrency = '£';
		}else {
			$scope.customCurrency = '$';
		}
	}

	$scope.gymAreaOnly = false;
	if ( gymArea ){
		$scope.gymAreaOnly = true;
	}

	$scope.lang = lang;

	if (showFilters == false) {
		var time = new Date().getTime();
		$(document.body).bind("mousemove keypress touchstart touch", function (e) {
			time = new Date().getTime();
		});

		var timeout = 900000;

		function refresh() {
			if (new Date().getTime() - time >= timeout) {
				window.location.reload(true);
			} else {
				setTimeout(refresh, timeout);
			}
		}

		setTimeout(refresh, timeout);
	}


	// Finding TimeZone Offset
	const timeZones = ["Europe/Andorra","Asia/Dubai","Asia/Kabul","Europe/Tirane","Asia/Yerevan","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","America/Argentina/Buenos_Aires","America/Argentina/Cordoba","America/Argentina/Salta","America/Argentina/Jujuy","America/Argentina/Tucuman","America/Argentina/Catamarca","America/Argentina/La_Rioja","America/Argentina/San_Juan","America/Argentina/Mendoza","America/Argentina/San_Luis","America/Argentina/Rio_Gallegos","America/Argentina/Ushuaia","Pacific/Pago_Pago","Europe/Vienna","Australia/Lord_Howe","Antarctica/Macquarie","Australia/Hobart","Australia/Melbourne","Australia/Sydney","Australia/Broken_Hill","Australia/Brisbane","Australia/Lindeman","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Asia/Baku","America/Barbados","Asia/Dhaka","Europe/Brussels","Europe/Sofia","Atlantic/Bermuda","Asia/Brunei","America/La_Paz","America/Noronha","America/Belem","America/Fortaleza","America/Recife","America/Araguaina","America/Maceio","America/Bahia","America/Sao_Paulo","America/Campo_Grande","America/Cuiaba","America/Santarem","America/Porto_Velho","America/Boa_Vista","America/Manaus","America/Eirunepe","America/Rio_Branco","America/Nassau","Asia/Thimphu","Europe/Minsk","America/Belize","America/St_Johns","America/Halifax","America/Glace_Bay","America/Moncton","America/Goose_Bay","America/Blanc-Sablon","America/Toronto","America/Nipigon","America/Thunder_Bay","America/Iqaluit","America/Pangnirtung","America/Atikokan","America/Winnipeg","America/Rainy_River","America/Resolute","America/Rankin_Inlet","America/Regina","America/Swift_Current","America/Edmonton","America/Cambridge_Bay","America/Yellowknife","America/Inuvik","America/Creston","America/Dawson_Creek","America/Fort_Nelson","America/Whitehorse","America/Dawson","America/Vancouver","Indian/Cocos","Europe/Zurich","Africa/Abidjan","Pacific/Rarotonga","America/Santiago","America/Punta_Arenas","Pacific/Easter","Asia/Shanghai","Asia/Urumqi","America/Bogota","America/Costa_Rica","America/Havana","Atlantic/Cape_Verde","America/Curacao","Indian/Christmas","Asia/Nicosia","Asia/Famagusta","Europe/Prague","Europe/Berlin","Europe/Copenhagen","America/Santo_Domingo","Africa/Algiers","America/Guayaquil","Pacific/Galapagos","Europe/Tallinn","Africa/Cairo","Africa/El_Aaiun","Europe/Madrid","Africa/Ceuta","Atlantic/Canary","Europe/Helsinki","Pacific/Fiji","Atlantic/Stanley","Pacific/Chuuk","Pacific/Pohnpei","Pacific/Kosrae","Atlantic/Faroe","Europe/Paris","Europe/London","Asia/Tbilisi","America/Cayenne","Africa/Accra","Europe/Gibraltar","America/Nuuk","America/Danmarkshavn","America/Scoresbysund","America/Thule","Europe/Athens","Atlantic/South_Georgia","America/Guatemala","Pacific/Guam","Africa/Bissau","America/Guyana","Asia/Hong_Kong","America/Tegucigalpa","America/Port-au-Prince","Europe/Budapest","Asia/Jakarta","Asia/Pontianak","Asia/Makassar","Asia/Jayapura","Europe/Dublin","Asia/Jerusalem","Asia/Kolkata","Indian/Chagos","Asia/Baghdad","Asia/Tehran","Atlantic/Reykjavik","Europe/Rome","America/Jamaica","Asia/Amman","Asia/Tokyo","Africa/Nairobi","Asia/Bishkek","Pacific/Tarawa","Pacific/Enderbury","Pacific/Kiritimati","Asia/Pyongyang","Asia/Seoul","Asia/Almaty","Asia/Qyzylorda","Asia/Qostanay","Asia/Aqtobe","Asia/Aqtau","Asia/Atyrau","Asia/Oral","Asia/Beirut","Asia/Colombo","Africa/Monrovia","Europe/Vilnius","Europe/Luxembourg","Europe/Riga","Africa/Tripoli","Africa/Casablanca","Europe/Monaco","Europe/Chisinau","Pacific/Majuro","Pacific/Kwajalein","Asia/Yangon","Asia/Ulaanbaatar","Asia/Hovd","Asia/Choibalsan","Asia/Macau","America/Martinique","Europe/Malta","Indian/Mauritius","Indian/Maldives","America/Mexico_City","America/Cancun","America/Merida","America/Monterrey","America/Matamoros","America/Mazatlan","America/Chihuahua","America/Ojinaga","America/Hermosillo","America/Tijuana","America/Bahia_Banderas","Asia/Kuala_Lumpur","Asia/Kuching","Africa/Maputo","Africa/Windhoek","Pacific/Noumea","Pacific/Norfolk","Africa/Lagos","America/Managua","Europe/Amsterdam","Europe/Oslo","Asia/Kathmandu","Pacific/Nauru","Pacific/Niue","Pacific/Auckland","Pacific/Chatham","America/Panama","America/Lima","Pacific/Tahiti","Pacific/Marquesas","Pacific/Gambier","Pacific/Port_Moresby","Pacific/Bougainville","Asia/Manila","Asia/Karachi","Europe/Warsaw","America/Miquelon","Pacific/Pitcairn","America/Puerto_Rico","Asia/Gaza","Asia/Hebron","Europe/Lisbon","Atlantic/Madeira","Atlantic/Azores","Pacific/Palau","America/Asuncion","Asia/Qatar","Indian/Reunion","Europe/Bucharest","Europe/Belgrade","Europe/Kaliningrad","Europe/Moscow","Europe/Simferopol","Europe/Kirov","Europe/Volgograd","Europe/Astrakhan","Europe/Saratov","Europe/Ulyanovsk","Europe/Samara","Asia/Yekaterinburg","Asia/Omsk","Asia/Novosibirsk","Asia/Barnaul","Asia/Tomsk","Asia/Novokuznetsk","Asia/Krasnoyarsk","Asia/Irkutsk","Asia/Chita","Asia/Yakutsk","Asia/Khandyga","Asia/Vladivostok","Asia/Ust-Nera","Asia/Magadan","Asia/Sakhalin","Asia/Srednekolymsk","Asia/Kamchatka","Asia/Anadyr","Asia/Riyadh","Pacific/Guadalcanal","Indian/Mahe","Africa/Khartoum","Europe/Stockholm","Asia/Singapore","America/Paramaribo","Africa/Juba","Africa/Sao_Tome","America/El_Salvador","Asia/Damascus","America/Grand_Turk","Africa/Ndjamena","Indian/Kerguelen","Asia/Bangkok","Asia/Dushanbe","Pacific/Fakaofo","Asia/Dili","Asia/Ashgabat","Africa/Tunis","Pacific/Tongatapu","Europe/Istanbul","America/Port_of_Spain","Pacific/Funafuti","Asia/Taipei","Europe/Kiev","Europe/Uzhgorod","Europe/Zaporozhye","Pacific/Wake","America/New_York","America/Detroit","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Indiana/Indianapolis","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Vevay","America/Chicago","America/Indiana/Tell_City","America/Indiana/Knox","America/Menominee","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/North_Dakota/Beulah","America/Denver","America/Boise","America/Phoenix","America/Los_Angeles","America/Anchorage","America/Juneau","America/Sitka","America/Metlakatla","America/Yakutat","America/Nome","America/Adak","Pacific/Honolulu","America/Montevideo","Asia/Samarkand","Asia/Tashkent","America/Caracas","Asia/Ho_Chi_Minh","Pacific/Efate","Pacific/Wallis","Pacific/Apia","Africa/Johannesburg","America/Antigua","America/Anguilla","Africa/Luanda","Antarctica/McMurdo","America/Aruba","Europe/Mariehamn","Europe/Sarajevo","Africa/Ouagadougou","Asia/Bahrain","Africa/Bujumbura","Africa/Porto-Novo","America/St_Barthelemy","America/Kralendijk","Africa/Gaborone","Africa/Kinshasa","Africa/Lubumbashi","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Europe/Busingen","Africa/Djibouti","America/Dominica","Africa/Asmara","Africa/Addis_Ababa","Africa/Libreville","America/Grenada","Europe/Guernsey","Africa/Banjul","Africa/Conakry","America/Guadeloupe","Africa/Malabo","Europe/Zagreb","Europe/Isle_of_Man","Europe/Jersey","Asia/Phnom_Penh","Indian/Comoro","America/St_Kitts","Asia/Kuwait","America/Cayman","Asia/Vientiane","America/St_Lucia","Europe/Vaduz","Africa/Maseru","Europe/Podgorica","America/Marigot","Indian/Antananarivo","Europe/Skopje","Africa/Bamako","Pacific/Saipan","Africa/Nouakchott","America/Montserrat","Africa/Blantyre","Africa/Niamey","Asia/Muscat","Africa/Kigali","Atlantic/St_Helena","Europe/Ljubljana","Arctic/Longyearbyen","Europe/Bratislava","Africa/Freetown","Europe/San_Marino","Africa/Dakar","Africa/Mogadishu","America/Lower_Princes","Africa/Mbabane","Africa/Lome","Africa/Dar_es_Salaam","Africa/Kampala","Pacific/Midway","Europe/Vatican","America/St_Vincent","America/Tortola","America/St_Thomas","Asia/Aden","Indian/Mayotte","Africa/Lusaka","Africa/Harare" ]

	let timezoneP = timeZone.split(') ');
	let timezonePi = timezoneP[1].split(',');
	let timeZoneC = timezonePi[0];
	let timeZoneF = timeZones.find(el => el.includes(timeZoneC)); 

	let timeZoneOffsetSplit = timezoneP[0].split('UTC');
	$scope.timeZoneOffset = timeZoneOffsetSplit[1];

	moment.tz.setDefault(timeZoneF);

	if (dd < 10) {
		dd = '0' + dd
	}

	if (mm < 10) {
		mm = '0' + mm
	}

	today = mm + '/' + dd + '/' + yyyy;
	todayInOneYear = mm + '/' + dd + '/' + nextYear;

	var schedule_from = $("#schedule_from");
	var schedule_to = $("#schedule_to");
	$scope.scheduleStartDate = today;
	$scope.scheduleEndDate = todayInOneYear;

	if (days != null) {
		let today = new Date();
		let dd = today.getDate();
		dd += days;
		if (dd < 10) {
			dd = '0' + dd
		}
		$scope.scheduleEndDate = mm + '/' + dd + '/' + yyyy;
	}else{
		$scope.scheduleEndDate = todayInOneYear;
	}

	if (settings) {
		$scope.classSettings = settings;
		
		if($scope.classSettings.ShowScheduleDaysAhead > 0 ){
			let date = new Date($scope.scheduleStartDate);
			date.setDate(date.getDate() + $scope.classSettings.ShowScheduleDaysAhead);
			date = new Date(date);

			let dd = date.getDate();
			let mm = date.getMonth() + 1;
			let yyyy = date.getFullYear();

			$scope.scheduleEndDate = mm + '/' + dd + '/' + yyyy;
		}
	}

	function findElement(arr, propName, propValue) {
		for (var i = 0; i < arr.length; i++)
			if (arr[i][propName] == propValue)
				return arr[i];
		// will return undefined if not found; you could return a default instead
	}

	$scope.getEventsType = function(dgymID){
		if ( dgymID ) {
			gymid = dgymID;
		}

		var dataObject = {
			Namespace: namespace,
			GymId: gymid
		}
		$http({
			method: 'GET',
			url: '/api/public/GetPublicEvents?nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			$scope.schedule_activities = data;
			$scope.getAreas(gymid);
		}).error(function () {

		});
	}
	// $scope.getEventsType();

	// Get Areas
	$scope.getAreas = function (dgymID) {
		if ( dgymID ) {
			gymid = dgymID;
		}

		var dataObject = {
			Namespace: namespace,
			GymId: gymid
		}
		$http({
			method: 'GET',
			url: '/api/public/GetAreas?nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			$scope.schedule_areas = data;

			setTimeout(function() {
				if ( dgymID ) {
					$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, dgymID);
				}else{
					$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate);
				}
			}, 500);
		}).error(function () {

		});
	}

	function getMonday(d) {
		d = new Date(d);
		var day = d.getDay();

		var diff = d.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday

		$scope.scheduleStartDate = new Date(d.setDate(diff));
	}

	// Get Schedule
	$scope.getSchedule = function (from, to, dgymID, dontUpdateActInstr) {
		var updateActInstr = true;

		if ( dontUpdateActInstr != undefined ){
			updateActInstr = false;
		}

		if ($scope.startMonday == true) {
			getMonday($scope.scheduleStartDate);
		}

		if ( dgymID ) {
			gymid = dgymID;
		}

		if ( gymArea ){
			$scope.visitArea = gymArea;
		}

		if ( currentActivity ){
			$scope.activityId = currentActivity;
		}


		var dataObject = {
			GymID: gymid,
			Namespace: namespace,
			DateStart: $scope.scheduleStartDate,
			DateEnd: $scope.scheduleEndDate,
			AreaID: $scope.visitArea,
			InstructorID: $scope.visitInstructor,
			Private: true,
			PublicEventID: $scope.activityId
		}

		$http({
			method: 'POST',
			url: '/api/public/GetSchedule',
			data: dataObject
		}).success(function (data) {
			var today = new Date();
			var currentActivities = [];
			var currentInstructors = [];
			$scope.originalData = data;
			$scope.testData = [];
			$scope.calendarSchedule = [];

			angular.copy(data, $scope.testData);
			for (var i = 0; i < $scope.testData.length; ++i) {
				var DateNewDate = moment($scope.testData[i]['Date']);
				var DateNewDateEnd = moment($scope.testData[i]['DateEnd']);

				var isDstChangeDay = moment(DateNewDate).isDST();
				if ( isDstChangeDay ){
					DateNewDate = moment(DateNewDate).add(1, 'hours');
					DateNewDateEnd = moment(DateNewDateEnd).add(1, 'hours');
				}

				var convertedDate = DateNewDate.toString();
				var convertedDateEnd = DateNewDateEnd.toString();
				var x = findElement($scope.schedule_areas, "AreaID", $scope.testData[i]['AreaID']);

				$scope.testData[i]['NewDate'] = moment(convertedDate).toDate();
				$scope.testData[i]['NewDateEnd'] = moment(convertedDateEnd).toDate();
				
				if (x != undefined && x['Name'] != undefined)
				    $scope.testData[i]['AreaName'] = x['Name'];

				$scope.testData[i]['ShowParticipantsCount'] = x != undefined ? x['ShowParticipantsCount'] : false;

				var testDateBeforeBooking = new Date($scope.testData[i]['Date']);
				testDateBeforeBooking.setHours(moment($scope.testData[i]['Date']).hours() - $scope.classSettings.HoursBeforeBooking);
				$scope.testData[i]['HoursBeforeBooking'] = testDateBeforeBooking;

				var testDatedaysAheadBooking = new Date(convertedDate);
				testDatedaysAheadBooking.setDate(testDatedaysAheadBooking.getDate() - $scope.classSettings.DaysAheadBooking);

				if (today >= testDatedaysAheadBooking || $scope.classSettings.DaysAheadBooking == 0) {
					$scope.testData[i]['AheadBooking'] = true;
				} else {
					$scope.testData[i]['AheadBooking'] = false;
				}

				if ( $scope.testData[i]['PeopleAttending'] >= $scope.testData[i]['MaxClients']) {
					$scope.testData[i]['FullCapacity'] = true;
				}else{
					$scope.testData[i]['FullCapacity'] = false;
				}

				$scope.testData[i]['SlotsLeft'] = $scope.testData[i]['PeopleAttending'] >= $scope.testData[i]['MaxClients'] ? '0' : $scope.testData[i]['MaxClients'] - $scope.testData[i]['PeopleAttending'];

				var item = {
					title: $scope.testData[i]['VisitName'],
					start: $scope.testData[i]['NewDate'],
					end: $scope.testData[i]['NewDateEnd'],
					zone: $scope.testData[i]['AreaName'],
					itemId: $scope.testData[i]['ID'],
					AheadBooking: $scope.testData[i]['AheadBooking'],
					BookOnline: $scope.testData[i]['BookOnline'],
					HoursBeforeBooking: $scope.testData[i]['HoursBeforeBooking'],
					color: $scope.testData[i]['Color'],
					fullCapacity: $scope.testData[i]['FullCapacity']
				}

				$scope.calendarSchedule.push(item);

				if ( updateActInstr == true ) {
					if ( !currentActivities.includes($scope.testData[i]['PublicEventID']) ) {
						currentActivities.push($scope.testData[i]['PublicEventID']);
					}
				}

				if ( $scope.testData[i]['InstructorIDs'] != null ) {
					var manageInstrucors = $scope.testData[i]['InstructorIDs'];

					if ( manageInstrucors.indexOf(',') > -1 ) {
						var res = manageInstrucors.split(',');

						for (var n = 0; n < res.length; n++) {
							if ( !currentInstructors.includes(res[n]) ) {
								currentInstructors.push(res[n]);
							}

							var result = $.grep($scope.schedule_instructors, function (e) { return e.Id == res[n] });
							if ( result.length > 0 ) {
								var instructor = result[0].Name;
								if ( n > 0 ) {
									instructor = ', ' + instructor;
								}
								$scope.testData[i]['Instructors']  += instructor;
							}
						}
					}else{
						if ( !currentInstructors.includes(manageInstrucors) && manageInstrucors != '00000000-0000-0000-0000-000000000000' && manageInstrucors != '' ) {
							currentInstructors.push(manageInstrucors);
						}

						var result = $.grep($scope.schedule_instructors, function (e) { return e.Id == manageInstrucors });
						if ( result.length > 0 ) {
							$scope.testData[i]['Instructors'] = result[0].Name;
						}
					}
				}
			}

			if ( updateActInstr == true ){
				getCurrentActivities(currentActivities);
				getCurrentInstructors(currentInstructors);
			}

			$scope.originalData = $scope.testData;
			$scope.testData = $scope.convertTo($scope.testData, 'Date', true);

			$scope.Schedule = {};
			Object.keys($scope.testData).sort().forEach(function (key) {
				$scope.Schedule[key] = $scope.testData[key];
			});

			if( $('.schedule-wrapper .filter-section .switch-field a.calendar').is('.active') ){
				fullCalendar($scope.calendarSchedule);
			}

			$('body').addClass('loaded-body');
				
		}).error(function () {

		});
	}

	function getCurrentActivities(array){
		$scope.current_activities = [];

		for (var i = 0; i < array.length; i++) {
			var activity = array[i];
			var result = $.grep($scope.schedule_activities, function (e) { return e.Id == activity });

			if ( result.length > 0 ) {
				$scope.current_activities.push(result[0]);
			}
		}
	}

	function getCurrentInstructors(array){
		$scope.current_instructors = [];

		for (var i = 0; i < array.length; i++) {
			var instructor = array[i];
			var result = $.grep($scope.schedule_instructors, function (e) { return e.Id == instructor });

			if ( result.length > 0 ) {
				$scope.current_instructors.push(result[0]);
			}
		}
	}

	function fullCalendar(calendarSchedule){
		if ( $('#calendar').children().length > 0 ) {
		    $('#calendar').fullCalendar('destroy');
		}

		$('#calendar').fullCalendar({
			events: calendarSchedule,
			listDayAltFormat: false,
            listDayFormat: 'dddd DD.MM.YYYY ',
            nowIndicator: true,
            header: {
                left: 'title',
                center: '',
                right: 'prev,next'
            },
            lang: lang,
            locale: lang,
            height: 'auto',
            slotDuration: '00:30:00',
            timeFormat: 'HH:mm',
            defaultView: 'agendaWeek',
            allDaySlot: false,
            editable: false,
            droppable: false,
            minTime: '07:00:00',
            maxTime: '23:00:00',
            eventColor: '#3799b1',
            timezone: 'Europe/Sofia',
			eventRender: function(event, element) {
				if ( event.fullCapacity == true ) {
                	element.css({
                		"opacity": 0.5,
                		"pointer-events": "none"
                	})
				}

                element.find('.fc-title').html('<span style="font-size: 1.1em; font-weight: 600;">'+event.title+'</span><span class="pull-right">'+event.zone+'</span>').css('white-space','nowrap');
			},
			eventClick: function(event, jsEvent){
				if ( $scope.allowBooking && event.AheadBooking && event.fullCapacity == false && event.BookOnline == true ){
					var convertedDate = event.start.toString();
					var convertedDateEnd = event.end.toString();
					var eventStart = new Date(convertedDate);
					var eventEnd = new Date(convertedDateEnd);
					$scope.joinModal(event.itemId);
                }
			},
			eventAfterAllRender: function(view) {
				setTimeout(function() {
					$('body').addClass('loaded-body');
				}, 1000);
			}
		});
	}

	// Get Gyms
	$scope.getGyms = function () {
		$scope.membershipGyms = [];
		var dataObject = {
			Namespace: namespace
		}
		$http({
			method: 'POST',
			url: '/Membership/GetGyms',
			data: dataObject
		}).success(function (data) {
			if ( data.length > 0 ) {
				for (var i = 0; i < data.length; i++) {
					if ( data[i].IsOnline == true ) {
						$scope.membershipGyms.push(data[i]);
					}
				}

				$scope.gymid = $scope.membershipGyms[0].GymID;

				if( $scope.membershipGyms.length == 1 ){
					// $timeout(function() {
						// console.log($scope.membershipGyms[0].GymID);
						$scope.scheduleDivision = $scope.membershipGyms[0].GymID;
						$scope.updategymId($scope.membershipGyms[0].GymID);
						$('#scheduleDivisionSelect').val($scope.membershipGyms[0].GymID).trigger('change');
					// });
				}else{
					$scope.updategymId(gymid);
				}
			}else{
				$scope.updategymId(gymid);
				$scope.gymAreaOnly = true;
			}
		}).error(function () {
			// console.log('error');
		});
	}

	$scope.getGyms();

	$('.schedule-wrapper .filter-section .switch-field a').on('click', function(e){
		e.preventDefault();
		var item = $(this);

		if ( !item.is('.active') ){
			item.addClass('active').siblings('.active').removeClass('active');
		}

		if ( item.is('.list') ){
			$('.schedule-list').show();
			$('#calendar').hide();
		}else{
			$('.schedule-list').hide();
			$('#calendar').show();
			fullCalendar($scope.calendarSchedule);
		}
	})

	$scope.convertTo = function (arr, key, dayWise) {
		var groups = {};

		for (var i = 0; l = arr.length, i < l; i++) {
			arr[i]['DateLocal'] = new Date(arr[i][key]).toISOString().slice(0, 10);

			groups[arr[i]['DateLocal']] = groups[arr[i]['DateLocal']] || [];
			groups[arr[i]['DateLocal']].push(arr[i]);
		}
		return groups;
	};

	$scope.updateAreaId = function (id, gymID) {
		$('body').removeClass('loaded-body');
		$('.filter-col-activities input:checked').prop('checked', false);
		$('.filter-col-instructors input:checked').prop('checked', false);
		$scope.activityId = null;
		$scope.choosenActivity = false;
		$scope.scheduleActivity = 'null';
		$scope.visitInstructor = 0;
		$scope.choosenInstructor = false;
		$scope.scheduleInstructor = '0';
		$scope.visitArea = id;
		if ( gymID ) {
			$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, gymID);
		}else{
			$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate);
		}
	}

	$scope.getSettings = function (id) {
		var dataObject = {
		    Namespace: namespace,
		    GymID: gymid
		}
		$http({
			method: 'POST',
			url: '/ScheduleV2/GetSettings',
			data: dataObject
		}).success(function (data) {
			$scope.classSettings = data;

			if($scope.classSettings.ShowScheduleDaysAhead > 0 ){
				let date = new Date($scope.scheduleStartDate);
				date.setDate(date.getDate() + $scope.classSettings.ShowScheduleDaysAhead);
				date = new Date(date);

				let dd = date.getDate();
				let mm = date.getMonth() + 1;
				let yyyy = date.getFullYear();

				$scope.scheduleEndDate = mm + '/' + dd + '/' + yyyy;
			}
		}).error(function () {
			// console.log('error');
		});
	}

	$scope.updategymId = function (gymID) {
		$('body').removeClass('loaded-body');
		$scope.visitArea = 0;
		$scope.scheduleActivity = null;
		$scope.choosenActivity = false;
		$scope.activityId = null;
		$('.filter-col-instructors input:checked').prop('checked', false);
		$scope.choosenInstructor = false;
		$scope.visitInstructor = 0;
		$scope.scheduleActivity = 'null';
		$scope.scheduleInstructor = '0';
		$scope.scheduleArea = '0';
		// $scope.getAreas(gymID);
		$scope.getEventsType(gymID);
		$scope.getSettings(gymID);
		$scope.getInstructors(gymID);
		$('.schedule-wrapper .filter-section').addClass('choosedGym');
	}

	$scope.updateActivity = function (activityId) {
		$('body').removeClass('loaded-body');
		$scope.activityId = activityId;
		$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, gymid, 'dontUpdateActInstr');

		if (activityId != null) {
			var x = findElement($scope.schedule_activities, "Id", activityId);

			$scope.choosenActivity = true;
			$scope.nameActivity = x['Name'];
		} else {
			$scope.choosenActivity = false;
		}

		$('.schedule-wrapper .filter-section .filter-col-activities .dd').removeClass('show');
	}


	// Get Instructors

	$scope.getInstructors = function (dgymID) {
		if ( dgymID ) {
			gymid = dgymID;
		}

		var dataObject = {
			Namespace: namespace,
			GymID: gymid
		}
		$http({
			method: 'GET',
			url: '/api/public/GetInstructors?nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			$scope.schedule_instructors = data;
		}).error(function () {

		});
	}

	$scope.getInstructors();

	$scope.updateInstructorId = function (id) {
		$scope.visitInstructor = id;

		$scope.getSchedule($scope.scheduleStartDate, $scope.scheduleEndDate, gymid, 'dontUpdateActInstr');

		if (id != '0') {
			var x = findElement($scope.schedule_instructors, "Id", id);

			$scope.choosenInstructor = true;
			$scope.nameInstructor = x['Name'];
		} else {
			$scope.choosenInstructor = false;
		}

		$('.schedule-wrapper .filter-section .dd').removeClass('show');
	}
	
	$scope.updateVisitProduct = function(item){
		if (item.productName && item.productName != 'Own equipment') {
			var result = $.grep($scope.visitProducts, function (e) { return e.ProductName == item.productName });
			result[0].ItemsLeft = ++result[0].ItemsLeft;
		}

		if ( item.productId != '-1' ) {
			var result = $.grep($scope.visitProducts, function (e) { return e.ProductID == item.productId });
			item.productName = result[0].ProductName;
			item.productItemsLeft = result[0].ItemsLeft;
			result[0].ItemsLeft = --result[0].ItemsLeft;
		}else{
			item.productName = 'Own equipment'
		}

		return item;
	}

	function getEventPrice() {
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			id: $scope.PublicEventID,
		}
	    
	    $http({
	        method: 'GET',
	        url: '/private/GetPublicEventPrice?Namespace=' + namespace + '&GymID=' + gymid + '&id=' + $scope.PublicEventID,
	        data: dataObject
	    }).success(function (data) {
	        // console.log(data);
	        $scope.modalPrice = data;

			// Check if there is only one payment method
			if( $('.shcedule-popup .form-field.field-payments .dd-field:visible').length ==  1){
				// And trigger the hell out of it!
				$('.shcedule-popup .form-field.field-payments .dd-field:visible').trigger('click').find('label').trigger('click');
				$('.shcedule-popup .form-field.field-payments .dd-field:visible input').prop('checked', true);
				let paymentNumber = $('.shcedule-popup .form-field.field-payments .dd-field:visible input').val();
				$timeout(function() {
					$scope.smodal.paymentMethod = paymentNumber;
					paymentChange();
				}, 10);
			}
			
	        calculateEventPrice();
	    }).error(function () {
	    });
	}

	function stripeInit(){
		// Stripe
		$scope.stripe = Stripe($scope.classSettings.StripePublishKey);
		// Create a Stripe client.
		// var stripe = Stripe($scope.classSettings.StripePublishKey);
		// Create an instance of Elements.
		var elements = $scope.stripe.elements();
		// Custom styling can be passed to options when creating an Element.
		// (Note that this demo uses a wider set of styles than the guide below.)
		var style = {
			base: {
			color: '#32325d',
			lineHeight: '18px',
			fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
			fontSmoothing: 'antialiased',
			fontSize: '16px',
			'::placeholder': {
				color: '#aab7c4'
			}
			},
			invalid: {
			color: '#fa755a',
			iconColor: '#fa755a'
			}
		};

		// Create an instance of the card Element.
		$scope.card = elements.create('card', {style: style, hidePostalCode: $scope.classSettings.HidePostalCode });

		// Add an instance of the card Element into the `card-element` <div>.
		$scope.card.mount('#card-element');

		// Handle real-time validation errors from the card Element.
		$scope.card.addEventListener('change', function(event) {
			var displayError = document.getElementById('card-errors');
			if (event.error) {
				displayError.textContent = event.error.message;
			} else {
				displayError.textContent = '';
			}
		});
	}

	function paymentChange(){

		if ($scope.smodal.paymentMethod == '7') {
			stripeInit();
			$('.shcedule-popup .form-actions .button.stripe-button').addClass('show');
			

			$('.stripe-button').on('click', function(e){
				e.preventDefault();
				
				if(Number($scope.modalPrice).toFixed(2) == 0.00){
					$scope.smodal.paymentMethod = '0';
					$scope.joinEvent();
				}else{
					generatePaymentIntent();
				}
			})
		}else{
			$('.shcedule-popup .form-actions .button.stripe-button').removeClass('show');
		}
	}

	// Generate PaymentInted for Stripe
	function generatePaymentIntent() {
		$scope.PaymentIntentID = 0;
		let dataObject = prepareDataToSned();

		if ($scope.formLoaded == true) {
			$scope.formLoaded = false;
			$scope.loading = true;
			$http({
				method: 'POST',
				url: '/private/GeneratePaymentIntent',
				data: dataObject
			}).success(function (data) {

				if(data == 'Waiver Required!'){
					var translated = $translateThis('Waiver Required!Portal');
					var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/Schedulev2/EmbedGroupSchedule';
					Swal.fire({
						type: 'warning',
						title: translated,
						showCancelButton: true,
					}).then(function(result) {
						if (result.value) {
							window.location.href = waiverHref;
						}else{
							$timeout(function() {
								$scope.formLoaded = true;
								$scope.loading = false;
								$('#shcedule-popup .success-msg').removeClass('show');
							}, 1);
						}
					});
				}

				if( data == 2 ){
					$scope.joinEventResponse = joinEventResponses[data];
					$('#shcedule-popup .error-msg').removeClass('show');
					$('#shcedule-popup .success-msg').addClass('show');
					$scope.formLoaded = true;
					$scope.loading = false;
				}else{
					stripeConfirmCard(data);
					$scope.PaymentIntentID = data.ID;
					$scope.formLoaded = true;
				}
			}).error(function (error) {
				$scope.errorResponse = error.ExceptionMessage;
				$('#shcedule-popup .error-msg').addClass('show');
				$scope.formLoaded = true;
				$scope.loading = false;
			});
		}
	}


	function stripeConfirmCard(data){

		let name;
		if($scope.client){
			name = $scope.client.FirstName + ' ' + $scope.client.LastName;
		}else{
			name = $scope.scheduleFirstName + ' ' + $scope.scheduleLastName;
		}

		$scope.stripe.confirmCardPayment(data.ClientSecret, {
			payment_method: {
				card: $scope.card,
				  billing_details: {
					name: name
				  }
			}
		}).then(function(result) {
			if (result.error) {
				// Show error to your customer (e.g., insufficient funds)
				$scope.joinEventResponse = result.error.message;
				$('#shcedule-popup .error-msg').removeClass('show');
				$('#shcedule-popup .success-msg').addClass('show');
				$timeout(function() {
					$scope.formLoaded = true;
					$scope.loading = false;
				}, 100);
			} else {
				  // The payment has been processed!
				  if (result.paymentIntent.status === 'succeeded') {
					$scope.joinEvent();
					// Show a success message to your customer
					// There's a risk of the customer closing the window before callback
					// execution. Set up a webhook or plugin to listen for the
					// payment_intent.succeeded event that handles any business critical
					// post-payment actions.
				  }else{
					$scope.formLoaded = true;
					$scope.loading = false;
					$('#shcedule-popup .success-msg').removeClass('show');
				  }
			}
		});
	}

	function prepareDataToSned(){
		let dataObject = {
			Namespace: namespace,
			GymID: gymid,
			Id: $scope.modalVisit.ID,
			Email: $scope.client ? $scope.client.Email : $scope.smodal.email,
			Date: moment($scope.modalVisit.NewDate).toISOString(),
			VisitName: $scope.modalVisit.VisitName,
			PaymentMethod: $scope.smodal.paymentMethod,
			Language: lang,
			ProductID: $scope.smodal.productId,
			ProductName: $scope.smodal.productName,
			AdditionalGuests: $scope.people,
			PaymentIntentID: $scope.PaymentIntentID,
			receiveEmails: $scope.smodal.MarketingEmailsClassBooking
		}

		if ( $scope.classSettings.ClassBookingRequireProfile != true ) {
			let tel;
			if($scope.inputPhone){
				tel = $scope.inputPhone.selectedDialCode.innerHTML + $scope.inputPhone.telInput.value;
				tel = tel.replace(/ /g,'');
			}

			dataObject.FirstName = $scope.client ? $scope.client.FirstName : $scope.scheduleFirstName;
			dataObject.LastName = $scope.client ? $scope.client.LastName : $scope.scheduleLastName;
			dataObject.Telephone = $scope.client ? $scope.client.Telephone : tel;
		}

		if ( $scope.smodal.paymentMethod == '7' ) {
			dataObject.Price = $scope.totalPrice;
			dataObject.PublicEventID = $scope.PublicEventID;
		}

		return dataObject;
	}


	$scope.formLoaded = true;
	var joinEventResponses = new Array('joinEventResponse1', 'joinEventResponse2', 'joinEventResponse3', 'joinEventResponse4', 'joinEventResponse5', 'joinEventResponse6', 'joinEventResponse7', 'joinEventResponseEmpty','joinEventResponseEmpty', 'joinEventResponse8', 'joinEventResponse9');

	$scope.joinEvent = function () {
		
		getEqipment($scope.modalVisit.ID, true);
		
	}

	function sendJoinEventRequest(){
		const dataObject = prepareDataToSned();

		if ($scope.formLoaded == true) {
			$scope.formLoaded = false;

			/// <returns>0:everything ok; 1:max people reached; 2:client already joined the event;3:the event doesnt exist;4:no membership;5 requires a deposit; 5 require profile; 7 schedule wasnt found; 8 Needs Waiver</returns>
			$http({
				method: 'POST',
				url: '/private/JoinEvent',
				data: dataObject
			}).success(function (data) {
				var responseI = data;
				$scope.joinEventResponse = joinEventResponses[responseI];
	
				$('#shcedule-popup .error-msg').removeClass('show');
				$('#shcedule-popup .success-msg').addClass('show');
	
				if (responseI == 0) {
					$('#shcedule-popup .success-msg').addClass('green');
	
					setTimeout(function() {
						if ( !$scope.formLoaded ) {
							$scope.closePopup();
						}
					}, 3000);
				}else if(responseI == 1) {
					$('#waiting-popup .popup, #waiting-popup').addClass('show');
				}else if(responseI == 6) {
					$('#shcedule-popup .success-msg').addClass('red');
				}else if(responseI == 8){
					var translated = $translateThis('Waiver Required!Portal');
					var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/Schedulev2/EmbedGroupSchedule';
					Swal.fire({
						type: 'warning',
						title: translated,
						showCancelButton: true,
					}).then(function(result) {
						if (result.value) {
							window.location.href = waiverHref;
						}else{
							$timeout(function() {
								$scope.formLoaded = true;
								$scope.loading = false;
								$('#shcedule-popup .success-msg').removeClass('show');
							}, 1);
						}
					});
				}else{
					$scope.formLoaded = true;
				}

				$scope.loading = false;
			}).error(function (error) {
				$scope.errorResponse = error.ExceptionMessage;
				$('#shcedule-popup .error-msg').addClass('show');
				$scope.formLoaded = true;
				$scope.loading = false;
			});
		}
	}

	// CheckWaiver(string Email, int PublicEventID, int GymID, string Namespace)

	//setup before functions
	var typingEmail;
	var $inputEmail = $('#popupemail');

	//on keyup, start the countdown
	$inputEmail.on('keyup', function () {
	  clearTimeout(typingEmail);
	  if(!$inputEmail.is('.ng-invalid'))
	  	typingEmail = setTimeout(function() {checkWaiver()}, 2000);
	});

	//on keydown, clear the countdown 
	$inputEmail.on('keydown', function () {
	  clearTimeout(typingEmail);
	});


	function setStorage(){
		sessionStorage.setItem('urlParams', window.location.search);
	}

	function checkWaiver(){

		let dataObject = {
			Namespace: namespace,
			GymID: gymid,
			PublicEventID: $scope.PublicEventID,
			Email: $scope.client ? $scope.client.Email : $scope.smodal.email
		}
		
		$http({
			method: 'POST',
			url: '/private/CheckWaiver',
			data: dataObject
		}).success(function (data) {
			if(data == 'Waiver Required!'){
				var translated = $translateThis('Waiver Required!Portal');
				var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/Schedulev2/EmbedGroupSchedule';
				Swal.fire({
					type: 'warning',
					title: translated,
					showCancelButton: true,
				}).then(function(result) {
					if (result.value) {

						setStorage();

						window.location.href = waiverHref;
					}else{
						$timeout(function() {
							$scope.formLoaded = true;
							$scope.loading = false;
							$('#shcedule-popup .success-msg').removeClass('show');
						}, 1);
					}
				});
			}else{
				if($scope.client)
					checkHasValidMembership();
			}
		}).error(function (error) {
			$scope.loading = false;
		});
	}

	$scope.closePopup = function () {
		$('.popup-wrapper, #shcedule-popup .success-msg').removeClass('show');
		$scope.resetForm();
		$scope.formLoaded = true;
		$('#shcedule-popup .success-msg').removeClass('green');
	}

	$scope.resetForm = function () {
		$('#shcedule-popup .popup-body').find('input[type="text"], input[type="tel"], input[type="email"]').val('');
		$('.shcedule-popup .form-field .dd-field input:checked').prop('checked', false);
		$('.shcedule-popup .dd .dd-head').html('');
		$('.shcedule-popup .form-actions .button.stripe-button').removeClass('show');
		$scope.waitingList = {};
		$scope.people = [];
		$scope.modalPrice = null;
		$scope.smodal = [];
		$scope.$apply();
	}

	$scope.eventLink = function(event){
		$scope.peopleWaiting = 0;
		$scope.modalVisit = event;

		if(event.FullCapacity){
			$('#waiting-popup .popup, #waiting-popup').addClass('show');
		}

		if( $scope.allowBooking && !event.FullCapacity && event.AheadBooking && event.BookOnline == true ){
			// CheckForWaitingPeople(int ScheduleContentID, int GymID, string Namespace)
			let dataObject = {
				ScheduleContentID: event.ID,
				GymID: gymid,
				Namespace: namespace
			}
			$http({
				method: 'POST',
				url: '/private/CheckForWaitingPeople',
				data: dataObject
			}).success(function (data) {
				$scope.peopleWaiting = data;
				if( data > 0 ){

					$('#waiting-popup .popup, #waiting-popup').addClass('show');
				}else{
					$scope.joinModal(event.ID);
				}

			}).error(function (error) {
			});
		}

		if($scope.allowBooking && $scope.login && $scope.loginRequired && !$scope.client){
			$scope.loginModal();
		}
	}

	$scope.joinWaitingList = function(event){
		let dataObject = {
			Namespace: namespace,
			GymID: gymid,
			Id: event.ID,
			Email: $scope.client ? $scope.client.Email : $scope.waitingList.Email,
			Date: moment(event.NewDate).toISOString(),
			VisitName: event.VisitName,
			Language: lang,
			AdditionalGuests: $scope.people
		}

		if ( $scope.classSettings.ClassBookingRequireProfile != true ) {
			let tel;
			if($scope.inputPhone){
				tel = $scope.inputPhone.selectedDialCode.innerHTML + $scope.inputPhone.telInput.value;
				tel = tel.replace(/ /g,'');
			}

			dataObject.FirstName = $scope.client ? $scope.client.FirstName : $scope.scheduleFirstName;
			dataObject.LastName = $scope.client ? $scope.client.LastName : $scope.scheduleLastName;
			dataObject.Telephone = $scope.client ? $scope.client.Telephone : tel;
		}

		$http({
			method: 'POST',
			url: '/private/JoinWaitingList',
			data: dataObject
		}).success(function (data) {

			//0:everything ok; 1:no client found; 2:cannot add to waiting list; 3:error;4 already in the same waiting list; 7:no event found

			console.log(data);
			let response = data;

			if(response == 0){
				let translated = $translateThis('Thank you for joining the waitlist. You will receive an email if space becomes available.');
				Swal.fire({
					type: 'success',
					title: translated,
				});
			}else if(response == 1){
				let translated = $translateThis('There is no customer with this email. Please contact reception.');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 2){
				let translated = $translateThis('Cannot add to waiting list');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 3){
				let translated = $translateThis('Error');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 4){
				let translated = $translateThis('You are already in the waitlist. We will send you an email if space becomes available');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}else if(response == 7){
				let translated = $translateThis('no event found');
				Swal.fire({
					type: 'warning',
					title: translated,
				});
			}

			$scope.closePopup();
		}).error(function (error) {
		});
	}


	// Join Modal
	$scope.joinModal = function (visitId) {
		$scope.haveEquipment = true;
		$scope.visitProducts = [];
		$scope.visitOriginalProducts = [];
		$scope.modalLoading = true;
		$scope.loading = true;
		$scope.activeMembership = false;
		var result = $.grep($scope.originalData, function (e) { return e.ID == visitId; });

		if ( result.length > 0 ) {
			$scope.PublicEventID = result[0].PublicEventID;
			$scope.modalVisit = result[0];
			$scope.noSlotsLeft = $scope.modalVisit.SlotsLeft > 1 ? false : true;

			var dayOfWeek = $filter('date')($scope.modalVisit.NewDate, 'EEEE');
			var compiledeHTML = $compile("<span translate-date-object-schedule><span class='day ng-binding'>" + dayOfWeek + "</span></span>")($scope);
			$(".dayofweekn").html(compiledeHTML);

			var now = new Date();

			if (now < $scope.modalVisit.HoursBeforeBooking) {
				$('#shcedule-popup').addClass('show');
				getEventPrice();

				setTimeout(function () {
					$('#shcedule-popup .popup').addClass('show');

					getEqipment(visitId);

					if($scope.client){
						checkWaiver();
					}
					
				}, 10);
			} else {
				$('#shcedule-not-popup').addClass('show');
				setTimeout(function () {
					$('#shcedule-not-popup .popup').addClass('show');
				}, 10);
			}
		}else{

		}
	}

	// Check Valid Membership
	// HasValidMembership(int ClientID, int ScheduleID, int GymID, string Namespace)

	function checkHasValidMembership(){
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			ScheduleID: $scope.modalVisit.ID,
			ClientID: $scope.client.ClientID
		}
		
		$http({
			method: 'GET',
			url: '/private/HasValidMembership?Namespace=' + namespace + '&GymID=' + gymid + '&ScheduleID=' + $scope.modalVisit.ID + '&ClientID=' + $scope.client.ClientID,
			data: dataObject
		}).success(function (data) {
			console.log(data);

			if(data == 'true' || data == 'True' || data == true){
				$('#fieldMembership').next('label').trigger('click');
				$('#fieldMembership').prop('checked', true);
				$timeout(function() {
					$scope.smodal.paymentMethod = '1';
					$scope.activeMembership = true;
				}, 10);
			}else{
				$('#fieldMembership').parent('.dd-field').addClass("ng-hide");

				// Check if there is only one payment method
				if( $('.shcedule-popup .form-field.field-payments .dd-field:visible').length ==  1){
					// And trigger the hell out of it!
					$('.shcedule-popup .form-field.field-payments .dd-field:visible').trigger('click').find('label').trigger('click');
					$('.shcedule-popup .form-field.field-payments .dd-field:visible input').prop('checked', true);
					let paymentNumber = $('.shcedule-popup .form-field.field-payments .dd-field:visible input').val();
					$timeout(function() {
						$scope.smodal.paymentMethod = paymentNumber;
						paymentChange();
					}, 10);
				}
			}

			$scope.formLoaded = true;
			$scope.loading = false;
		}).error(function () {
		});
	}


	function checkEqipment(){	
		let bookedPeople = [...$scope.people];

		if(bookedPeople){
			bookedPeople.push({productId: $scope.smodal.productId})
			let group = bookedPeople.reduce((r, a) => {
				r[a.productId] = [...r[a.productId] || [], a];
				return r;
			}, {});

			for (var key in group) {
				if(key > 0){
					let item = $scope.visitOriginalProducts.find((item) => item.ProductID == key);
					if( item.ItemsLeft >= group[key].length){
						$scope.haveEquipment = true;
					}else{
						$scope.haveEquipment = false;
						break;
					}
				}else{
					$scope.haveEquipment = true;
				}
			}
		}else{
			let item = $scope.visitOriginalProducts.find((item) => item.ProductID == $scope.smodal.productId);
			if(item.ItemsLeft>0){
				$scope.haveEquipment = true;
			}else{
				$scope.haveEquipment = false;
			}
		}


		if($scope.haveEquipment){
			sendJoinEventRequest();
		}
	}

	function getEqipment(visitId, final = false){
		var dataObject = {
			Namespace: namespace,
			GymID: gymid,
			ID: visitId
		}

		$http({
			method: 'GET',
			url: '/api/public/GetEqipment?nameSpace=' + namespace + '&gymId=' + gymid + '&ID=' + visitId,
			data: dataObject
		}).success(function (data) {
			if($scope.visitProducts.length == 0){
				$scope.visitProducts = data;
			}
			$scope.visitOriginalProducts = [...data];
			$scope.modalLoading = false;
			$scope.loading = false;
			if(final)
				checkEqipment();
		}).error(function () {

		});
	}

	$scope.getAttendingClients = function(item){

		if(!item.AttendingClients){
			$scope.modalLoading = true;

			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				ScheduleID: item.ID,
				AreaID: item.AreaID
			}

			$http({
				method: 'GET',
				url: '/private/GetAttendingClients?Namespace=' + namespace + '&GymID=' + gymid + '&ScheduleID=' + item.ID + '&AreaID=' + item.AreaID,
				data: dataObject
			}).success(function (data) {
				item.attedingCleints = data;

				$scope.clientsData = item.attedingCleints;
				$('#clients-popup, #clients-popup .popup').addClass('show');
				$scope.modalLoading = false;

			}).error(function () {
				// console.log('error');
			});
		}else{
			$('#clients-popup, #clients-popup .popup').addClass('show');
			$scope.clientsData = item.AttendingClients
		}
	}

	function calcPopupHeight(){
        let windowHeight = $(window).height();
        let popupHeight = $('.login-popup .popup .section-authorize').height();

        if(popupHeight + 40 >= windowHeight){
            $('.login-popup .popup').addClass('overflowScroll');
        }else{
            $('.login-popup .popup').removeClass('overflowScroll');
        }
    }

	// $scope.dashLogin = true;
	$scope.loginModal = function () {
		$scope.modalLoading = true;

		$('#login-popup').addClass('show');
		$('#login-popup .popup').addClass('show');
		calcPopupHeight();
		$timeout(function() {
			$scope.modalLoading = false;            
		}, 100);
	}

	function calculateEventPrice(){
		if ( $scope.people.length > 0 ) {
			$scope.additionPrice = $scope.people.length*parseFloat($scope.modalPrice);
			$scope.totalPrice = (parseFloat($scope.additionPrice) + parseFloat($scope.modalPrice)).toFixed(4);
		}else{
			$scope.totalPrice = $scope.modalPrice;
		}

		$scope.noSlotsLeft = $scope.modalVisit.SlotsLeft > $scope.people.length + 1 ? false : true;
	}

	$scope.people = [];
	$scope.noSlotsLeft = false;

	$scope.addPerson = function(){
		let person = {};
		$scope.people.push(person);
		calculateEventPrice();
	}

	$scope.deletePerson = function(index){
		let item = $scope.people[index];

		if (item.productId > -1) {
			let result = $.grep($scope.visitProducts, function (e) { return e.ProductID == item.productId });
			result[0].ItemsLeft = ++result[0].ItemsLeft;
		}
		$scope.people.splice(index,1);
		calculateEventPrice();
	}

	$('.popup-wrapper .close, .popup-wrapper .popup-overlay').on('click', function (e) {
		e.preventDefault();
		$('.popup-wrapper, #shcedule-popup .popup, #shcedule-popup .error-msg, #shcedule-popup .success-msg').removeClass('show');
		$scope.resetForm();
	})

	// Datepickers

	schedule_from.datepicker({
		changeMonth: true,
		numberOfMonths: 2,
		minDate: 0,
		onSelect: function (dateText, inst) {
			var date = $(this).val();
			schedule_to.datepicker("option", "minDate", date);

			if (gym[0].Culture != 'en-US') {
				var res = date.split("/");
				var date = res[1] + '/' + res[0] + '/' + res[2];
			}

			$scope.scheduleStartDate = date;
		}
	});

	schedule_to.datepicker({
		changeMonth: true,
		numberOfMonths: 2,
		onSelect: function (dateText, inst) {
			var date = $(this).val();
			schedule_from.datepicker("option", "maxDate", date);

			if (gym[0].Culture != 'en-US') {
				var res = date.split("/");
				var date = res[1] + '/' + res[0] + '/' + res[2];
			}

			var tomorrow = new Date(date);
			tomorrow.setDate(tomorrow.getDate() + 1);

			$scope.scheduleEndDate = tomorrow;
		}
	});

	$('.ui-datepicker').addClass('notranslate');

	if (gym[0].Culture == 'en-US') {
		$('#schedule_to, #schedule_from').datepicker( "option", "dateFormat", "mm/dd/yy" );
	} else {
		$('#schedule_to, #schedule_from').datepicker( "option", "dateFormat", "dd/mm/yy" );
	}

	if($scope.classSettings.ShowScheduleDaysAhead > 0 ){
		let days = $scope.classSettings.ShowScheduleDaysAhead - 1;
		let today = new Date();
		today.setDate(today.getDate() + days);
		maxDate = new Date(today);

		schedule_from.datepicker("option", "maxDate", maxDate);
		schedule_to.datepicker("option", "maxDate", maxDate);

	}else if (days != null) {
		days -= 1;
		let today = new Date();
		today.setDate(today.getDate() + days);
		maxDate = new Date(today);

		schedule_from.datepicker("option", "maxDate", maxDate);
		schedule_to.datepicker("option", "maxDate", maxDate);
	}

	function getDate(element) {
		var date;
		try {
			date = $.datepicker.parseDate(dateFormat, element.value);
		} catch (error) {
			date = null;
		}
		return date;
	}


	$(document).on('click', '.dd .dd-head', function (e) {
		e.preventDefault();
		if(!$scope.activeMembership){
			$(this).parent('.dd').toggleClass('show');
		}
	});

	$(document).click(function (e) {
		if ($(e.target).closest('.dd').length === 0 && $('.dd').is('.show')) {
			$('.dd').removeClass('show');
		}
	});

	$(document).on('click', '#shcedule-popup .dd-field', function () {
		var content = $(this).find('label').html();
		var dd = $(this).parents('.dd');
		dd.find('.dd-head').html(content);
		dd.removeClass('show');
		paymentChange();
	})

	$('.schedule-wrapper .filter-section .date-col i').on('click', function (e) {
		$(this).parent().find('input').datepicker('show');
	})

	function manageDays(){
		$('.schedule-list .col').removeClass('show');
		$('.schedule-list').addClass('hide');
		for (var i = 0; i < days; i++) {
			$('.schedule-list .col').eq(i).addClass('show');
		}
	}

	function scroll(){

		var windowHeight = $(window).height();
		var contentHeight = $('.schedule-wrapper').height();

		console.log(windowHeight);
		console.log(contentHeight);

		if ( contentHeight > windowHeight ) {
			var timeScrollDown = contentHeight;
			var timeScrollUp = contentHeight;

			if ( (contentHeight - windowHeight) > 2000 ) {
				timeScrollDown = parseInt(timeScrollDown*25);
				timeScrollUp = parseInt(timeScrollUp*20);
			}else if ( (contentHeight - windowHeight) > 500 ){
				timeScrollDown = parseInt(timeScrollDown*25);
				timeScrollUp = parseInt(timeScrollUp*10);
			}else if( (contentHeight - windowHeight) > 250 ){
				timeScrollDown = parseInt(timeScrollDown*22);
				timeScrollUp = parseInt(timeScrollUp*7);
			}else if( (contentHeight - windowHeight) > 100 ){
				timeScrollDown = parseInt(timeScrollDown*21);
				timeScrollUp = parseInt(timeScrollUp*5);
			}else{
				timeScrollDown = parseInt(timeScrollDown*20);
				timeScrollUp = parseInt(timeScrollUp*3);
			}
			
			if ( $(window).scrollTop() == 0 ){
				$('html, body').clearQueue();
  				$('html, body').stop();
  				setTimeout(function() {
					$("html, body").animate({ scrollTop: $(document).height() }, timeScrollDown, 'linear');
  				}, 2000);
			}else if ( $(window).scrollTop() + $(window).height() == $(document).height() ){
				$('html, body').clearQueue();
  				$('html, body').stop();
  				setTimeout(function() {
					$('html, body').animate({scrollTop:0}, timeScrollUp, 'linear');
  				}, 2000);
			}
		}
	}
	
	$(window)
	.on('load', function () {
		setTimeout(function () {

			if (calendarView) {
				$('.schedule-wrapper .filter-section .switch-field a.calendar').trigger('click');
			}else{
				$('#calendar').hide();
				$('body').addClass('loaded-body');
			}

			if (pageScroll) {
				scroll();
			}
			
		}, 1000);

		if( sessionStorage.getItem('urlParams') ){
			sessionStorage.clear();
		}

		resizeAndDatepicker();

		let phoneLang = getLanguage($scope.gym[0].Culture);
		var inputInitPhone = document.querySelector("#popuptelephone");
		
        if(inputInitPhone){

			if($scope.gym[0].Culture.includes('GB')){
				$('#popuptelephone')
				.on('keydown', function (e) {
					if(e.keyCode == 32){
						return false;
					}
				})
				.on('keyup', function (e) {
					if(e.target.value.length == 4){
						e.target.value = e.target.value += ' ';
					}
				});
			}

            $scope.inputPhone = window.intlTelInput(inputInitPhone, {
                autoHideDialCode: false,
                preferredCountries: [phoneLang],
                separateDialCode: true
            });

			inputInitPhone.addEventListener("countrychange", function() {
                let countryinfo = $scope.inputPhone.getSelectedCountryData()
                if(countryinfo.dialCode == '44'){
                    inputInitPhone.value = inputInitPhone.value.split(' ').join('');
                    if(inputInitPhone.value.length > 4){
                        inputInitPhone.value = inputInitPhone.value.substring(0, 4) + " " + inputInitPhone.value.substring(4, 10);
                    }
                    $scope.phoneFormat = /^[0-9\s]{5,11}$/;
                    $('#popuptelephone')
                    .on('keydown', function (e) {
                        if(e.keyCode == 32){
                            return false;
                        }
                    })
                    .on('keyup', function (e) {
                        if(e.target.value.length == 4){
                            e.target.value = e.target.value += ' ';
                        }
                    });
                }else{
                    inputInitPhone.value = inputInitPhone.value.split(' ').join('');
                    $scope.phoneFormat = /^[0-9]{5,15}$/;
                    $scope.waiverForm.Telephone.$validate()
                    $('#popuptelephone')
                    .on('keydown', function (e) {
                        if(e.keyCode == 32){
                            return false;
                        }
                    })
                    .on('keyup', function (e) {
                        if(e.target.value.length == 4){
                            // e.target.value = e.target.value += ' ';
                        }
                    });
                }
            });
        }
	})
	.on('resize', function(){
		resizeAndDatepicker();

		calcPopupHeight();
	})
	.on('scroll', function(){
		if (pageScroll) {
			scroll();
		}
	})


	// Get Language from backend settings
	function getLanguage(culture){
		let lang = culture.split('-');
		lang = lang[1].toLowerCase();
		return lang;
	}

	$scope.dateFeaturedFormat = 'dd/MM/yyyy';

	if (gym) {
		if (gym[0].PortalColor != null && gym[0].PortalColor != 'default') {
			$('.schedule-wrapper').addClass('theme-' + gym[0].PortalColor);
		}

		if ( gym[0].Culture == 'en-US' ) {
			$scope.dateFeaturedFormat = 'MM/dd/yyyy';
		}
	}

	//  Check Window Size and change datepicker options
	function resizeAndDatepicker(){
		var windowWidth = $(window).width();

		if ( windowWidth <= 768 ) {
			schedule_from.datepicker("option", "numberOfMonths", 1);
			schedule_to.datepicker("option", "numberOfMonths", 1);
		}else{
			schedule_from.datepicker("option", "numberOfMonths", 2);
			schedule_to.datepicker("option", "numberOfMonths", 2);
		}
	}

}]);
app.controller('GetScheduleController', ['$scope', '$http', '$timeout', '$translate', '$compile', '$filter', function ($scope, $http, $timeout, $translate, $compile, $filter) {
	$scope.noSchedule = false;

	let now = moment();
	// console.log(moment(schedule.Date), now)

	if ( schedule != null && now < moment(schedule.Date) ) {
		$scope.schedule = schedule;
		console.log($scope.schedule);
		$scope.gym = gym[0];
		$scope.visitProducts = $scope.schedule.Products;
		$scope.haveEquipment = true;
		$scope.fullEvent = false;
		$scope.modalPrice = null;
		$scope.peopleWaiting = 0;
		$scope.waitingListApprove = false;
		$scope.visitOriginalProducts = [];
		var $translateThis = $filter('translate');

		if(client){
			$scope.client = client;
		}

		if(WaitingListID && WaitingList){
			$scope.waitingListApprove = true;
		}

		$scope.phoneFormat = $scope.gym.Culture.includes('GB') ? /^[0-9\s]{5,11}$/ : /^[0-9]{5,15}$/;

		// Finding TimeZone Offset
		const timeZones = ["Europe/Andorra","Asia/Dubai","Asia/Kabul","Europe/Tirane","Asia/Yerevan","Antarctica/Casey","Antarctica/Davis","Antarctica/DumontDUrville","Antarctica/Mawson","Antarctica/Palmer","Antarctica/Rothera","Antarctica/Syowa","Antarctica/Troll","Antarctica/Vostok","America/Argentina/Buenos_Aires","America/Argentina/Cordoba","America/Argentina/Salta","America/Argentina/Jujuy","America/Argentina/Tucuman","America/Argentina/Catamarca","America/Argentina/La_Rioja","America/Argentina/San_Juan","America/Argentina/Mendoza","America/Argentina/San_Luis","America/Argentina/Rio_Gallegos","America/Argentina/Ushuaia","Pacific/Pago_Pago","Europe/Vienna","Australia/Lord_Howe","Antarctica/Macquarie","Australia/Hobart","Australia/Melbourne","Australia/Sydney","Australia/Broken_Hill","Australia/Brisbane","Australia/Lindeman","Australia/Adelaide","Australia/Darwin","Australia/Perth","Australia/Eucla","Asia/Baku","America/Barbados","Asia/Dhaka","Europe/Brussels","Europe/Sofia","Atlantic/Bermuda","Asia/Brunei","America/La_Paz","America/Noronha","America/Belem","America/Fortaleza","America/Recife","America/Araguaina","America/Maceio","America/Bahia","America/Sao_Paulo","America/Campo_Grande","America/Cuiaba","America/Santarem","America/Porto_Velho","America/Boa_Vista","America/Manaus","America/Eirunepe","America/Rio_Branco","America/Nassau","Asia/Thimphu","Europe/Minsk","America/Belize","America/St_Johns","America/Halifax","America/Glace_Bay","America/Moncton","America/Goose_Bay","America/Blanc-Sablon","America/Toronto","America/Nipigon","America/Thunder_Bay","America/Iqaluit","America/Pangnirtung","America/Atikokan","America/Winnipeg","America/Rainy_River","America/Resolute","America/Rankin_Inlet","America/Regina","America/Swift_Current","America/Edmonton","America/Cambridge_Bay","America/Yellowknife","America/Inuvik","America/Creston","America/Dawson_Creek","America/Fort_Nelson","America/Whitehorse","America/Dawson","America/Vancouver","Indian/Cocos","Europe/Zurich","Africa/Abidjan","Pacific/Rarotonga","America/Santiago","America/Punta_Arenas","Pacific/Easter","Asia/Shanghai","Asia/Urumqi","America/Bogota","America/Costa_Rica","America/Havana","Atlantic/Cape_Verde","America/Curacao","Indian/Christmas","Asia/Nicosia","Asia/Famagusta","Europe/Prague","Europe/Berlin","Europe/Copenhagen","America/Santo_Domingo","Africa/Algiers","America/Guayaquil","Pacific/Galapagos","Europe/Tallinn","Africa/Cairo","Africa/El_Aaiun","Europe/Madrid","Africa/Ceuta","Atlantic/Canary","Europe/Helsinki","Pacific/Fiji","Atlantic/Stanley","Pacific/Chuuk","Pacific/Pohnpei","Pacific/Kosrae","Atlantic/Faroe","Europe/Paris","Europe/London","Asia/Tbilisi","America/Cayenne","Africa/Accra","Europe/Gibraltar","America/Nuuk","America/Danmarkshavn","America/Scoresbysund","America/Thule","Europe/Athens","Atlantic/South_Georgia","America/Guatemala","Pacific/Guam","Africa/Bissau","America/Guyana","Asia/Hong_Kong","America/Tegucigalpa","America/Port-au-Prince","Europe/Budapest","Asia/Jakarta","Asia/Pontianak","Asia/Makassar","Asia/Jayapura","Europe/Dublin","Asia/Jerusalem","Asia/Kolkata","Indian/Chagos","Asia/Baghdad","Asia/Tehran","Atlantic/Reykjavik","Europe/Rome","America/Jamaica","Asia/Amman","Asia/Tokyo","Africa/Nairobi","Asia/Bishkek","Pacific/Tarawa","Pacific/Enderbury","Pacific/Kiritimati","Asia/Pyongyang","Asia/Seoul","Asia/Almaty","Asia/Qyzylorda","Asia/Qostanay","Asia/Aqtobe","Asia/Aqtau","Asia/Atyrau","Asia/Oral","Asia/Beirut","Asia/Colombo","Africa/Monrovia","Europe/Vilnius","Europe/Luxembourg","Europe/Riga","Africa/Tripoli","Africa/Casablanca","Europe/Monaco","Europe/Chisinau","Pacific/Majuro","Pacific/Kwajalein","Asia/Yangon","Asia/Ulaanbaatar","Asia/Hovd","Asia/Choibalsan","Asia/Macau","America/Martinique","Europe/Malta","Indian/Mauritius","Indian/Maldives","America/Mexico_City","America/Cancun","America/Merida","America/Monterrey","America/Matamoros","America/Mazatlan","America/Chihuahua","America/Ojinaga","America/Hermosillo","America/Tijuana","America/Bahia_Banderas","Asia/Kuala_Lumpur","Asia/Kuching","Africa/Maputo","Africa/Windhoek","Pacific/Noumea","Pacific/Norfolk","Africa/Lagos","America/Managua","Europe/Amsterdam","Europe/Oslo","Asia/Kathmandu","Pacific/Nauru","Pacific/Niue","Pacific/Auckland","Pacific/Chatham","America/Panama","America/Lima","Pacific/Tahiti","Pacific/Marquesas","Pacific/Gambier","Pacific/Port_Moresby","Pacific/Bougainville","Asia/Manila","Asia/Karachi","Europe/Warsaw","America/Miquelon","Pacific/Pitcairn","America/Puerto_Rico","Asia/Gaza","Asia/Hebron","Europe/Lisbon","Atlantic/Madeira","Atlantic/Azores","Pacific/Palau","America/Asuncion","Asia/Qatar","Indian/Reunion","Europe/Bucharest","Europe/Belgrade","Europe/Kaliningrad","Europe/Moscow","Europe/Simferopol","Europe/Kirov","Europe/Volgograd","Europe/Astrakhan","Europe/Saratov","Europe/Ulyanovsk","Europe/Samara","Asia/Yekaterinburg","Asia/Omsk","Asia/Novosibirsk","Asia/Barnaul","Asia/Tomsk","Asia/Novokuznetsk","Asia/Krasnoyarsk","Asia/Irkutsk","Asia/Chita","Asia/Yakutsk","Asia/Khandyga","Asia/Vladivostok","Asia/Ust-Nera","Asia/Magadan","Asia/Sakhalin","Asia/Srednekolymsk","Asia/Kamchatka","Asia/Anadyr","Asia/Riyadh","Pacific/Guadalcanal","Indian/Mahe","Africa/Khartoum","Europe/Stockholm","Asia/Singapore","America/Paramaribo","Africa/Juba","Africa/Sao_Tome","America/El_Salvador","Asia/Damascus","America/Grand_Turk","Africa/Ndjamena","Indian/Kerguelen","Asia/Bangkok","Asia/Dushanbe","Pacific/Fakaofo","Asia/Dili","Asia/Ashgabat","Africa/Tunis","Pacific/Tongatapu","Europe/Istanbul","America/Port_of_Spain","Pacific/Funafuti","Asia/Taipei","Europe/Kiev","Europe/Uzhgorod","Europe/Zaporozhye","Pacific/Wake","America/New_York","America/Detroit","America/Kentucky/Louisville","America/Kentucky/Monticello","America/Indiana/Indianapolis","America/Indiana/Vincennes","America/Indiana/Winamac","America/Indiana/Marengo","America/Indiana/Petersburg","America/Indiana/Vevay","America/Chicago","America/Indiana/Tell_City","America/Indiana/Knox","America/Menominee","America/North_Dakota/Center","America/North_Dakota/New_Salem","America/North_Dakota/Beulah","America/Denver","America/Boise","America/Phoenix","America/Los_Angeles","America/Anchorage","America/Juneau","America/Sitka","America/Metlakatla","America/Yakutat","America/Nome","America/Adak","Pacific/Honolulu","America/Montevideo","Asia/Samarkand","Asia/Tashkent","America/Caracas","Asia/Ho_Chi_Minh","Pacific/Efate","Pacific/Wallis","Pacific/Apia","Africa/Johannesburg","America/Antigua","America/Anguilla","Africa/Luanda","Antarctica/McMurdo","America/Aruba","Europe/Mariehamn","Europe/Sarajevo","Africa/Ouagadougou","Asia/Bahrain","Africa/Bujumbura","Africa/Porto-Novo","America/St_Barthelemy","America/Kralendijk","Africa/Gaborone","Africa/Kinshasa","Africa/Lubumbashi","Africa/Bangui","Africa/Brazzaville","Africa/Douala","Europe/Busingen","Africa/Djibouti","America/Dominica","Africa/Asmara","Africa/Addis_Ababa","Africa/Libreville","America/Grenada","Europe/Guernsey","Africa/Banjul","Africa/Conakry","America/Guadeloupe","Africa/Malabo","Europe/Zagreb","Europe/Isle_of_Man","Europe/Jersey","Asia/Phnom_Penh","Indian/Comoro","America/St_Kitts","Asia/Kuwait","America/Cayman","Asia/Vientiane","America/St_Lucia","Europe/Vaduz","Africa/Maseru","Europe/Podgorica","America/Marigot","Indian/Antananarivo","Europe/Skopje","Africa/Bamako","Pacific/Saipan","Africa/Nouakchott","America/Montserrat","Africa/Blantyre","Africa/Niamey","Asia/Muscat","Africa/Kigali","Atlantic/St_Helena","Europe/Ljubljana","Arctic/Longyearbyen","Europe/Bratislava","Africa/Freetown","Europe/San_Marino","Africa/Dakar","Africa/Mogadishu","America/Lower_Princes","Africa/Mbabane","Africa/Lome","Africa/Dar_es_Salaam","Africa/Kampala","Pacific/Midway","Europe/Vatican","America/St_Vincent","America/Tortola","America/St_Thomas","Asia/Aden","Indian/Mayotte","Africa/Lusaka","Africa/Harare" ]

		let timezoneP = timeZone.split(') ');
		let timezonePi = timezoneP[1].split(',');
		let timeZoneC = timezonePi[0];
		let timeZoneF = timeZones.find(el => el.includes(timeZoneC)); 

		let timeZoneOffsetSplit = timezoneP[0].split('UTC');
		$scope.timeZoneOffset = timeZoneOffsetSplit[1];

		// console.log($scope.infoData.TimeZoneKey);
		// console.log(timeZoneC);
		// console.log(timeZoneF);

		moment.tz.setDefault(timeZoneF);
		

		if( schedule.PeopleAttending >= schedule.MaxClients){
			$scope.fullEvent = true;
		}else{

			// CheckForWaitingPeople(int ScheduleContentID, int GymID, string Namespace)
			let dataObject = {
				ScheduleContentID: schedule.ID,
				GymID: gymid,
				Namespace: namespace
			}
			$http({
				method: 'POST',
				url: '/private/CheckForWaitingPeople',
				data: dataObject
			}).success(function (data) {
				if( $scope.waitingListApprove && data >= 1){
					$scope.peopleWaiting = 0;
				}else{
					$scope.peopleWaiting = data;
				}
			}).error(function (error) {
			});
		}

		$scope.smodal = {paymentMethod: null, email: ''};

		if ( lang == null ){
			lang = 'en';
		}

		var DateNewDate = moment($scope.schedule['Date']);
		var DateNewDateEnd = moment($scope.schedule['DateEnd']);

		var isDstChangeDay = moment(DateNewDate).isDST();
		if ( isDstChangeDay ){
			DateNewDate = moment(DateNewDate).add(1, 'hours');
			DateNewDateEnd = moment(DateNewDateEnd).add(1, 'hours');
		}

		var convertedDate = DateNewDate.toString();
		var convertedDateEnd = DateNewDateEnd.toString();

		$scope.schedule['NewDate'] = moment(convertedDate).toDate();
		$scope.schedule['NewDateEnd'] = moment(convertedDateEnd).toDate();

		$scope.people = [];
		$scope.noSlotsLeft = false;


		var dayOfWeek = $filter('date')($scope.schedule.NewDate, 'EEEE');
		var compiledeHTML = $compile("<span translate-date-object-schedule><span class='day ng-binding'>" + dayOfWeek + "</span></span>")($scope);
		$(".dayofweekn").html(compiledeHTML);

	    $scope.getSettings = function (id) {
			var dataObject = {
			    Namespace: namespace,
			    GymID: gymid
			}
			$http({
				method: 'POST',
				url: '/ScheduleV2/GetSettings',
				data: dataObject
			}).success(function (data) {
				console.log(data);
				$scope.classSettings = data;
			}).error(function () {
				// console.log('error');
			});
		}

		$scope.getSettings();


		// $scope.updateVisitProduct = function(id){
		// 	if ( id != '-1' ) {
		// 		var result = $.grep($scope.visitProducts, function (e) { return e.ProductID == id });
		// 		$scope.productId = id;
		// 		$scope.productName = result[0].ProductName;
		// 	}else{
		// 		$scope.productId = '-1';
		// 		$scope.productName = 'Own equipment'
		// 	}
		// }

		// public bool RemoveFromWaitingList(int ID, int GymID, string Namespace)

		$scope.cancelRequest = function(){
			let translated = $translateThis('Are you sure you want to cancel your request');
			Swal.fire({
				type: 'warning',
				title: translated,
				showCancelButton: true,
				confirmButtonText: 'Yes!'
			}).then((result) => {
				if (result.value) {
					removeFromWaitingList();
				}
			});
		}

		function removeFromWaitingList(){
			let dataObject = {
				ID: WaitingListID,
				GymID: gymid,
				Namespace: namespace
			}
			$http({
				method: 'POST',
				url: '/private/RemoveFromWaitingList',
				data: dataObject
			}).success(function (data) {
				console.log(data);
				let result = JSON.parse(data.toLowerCase());

				if(result){
					let translated = $translateThis('You are removed!');

					Swal.fire({
						type: 'success',
						title: translated,
					});
				}else{
					let translated = $translateThis('Error');

					Swal.fire({
						type: 'error',
						title: translated,
					});
				}
			}).error(function (error) {})

		}

		$scope.updateVisitProduct = function(item){
			if (item.productName && item.productName != 'Own equipment') {
				var result = $.grep($scope.visitProducts, function (e) { return e.ProductName == item.productName });
				result[0].ItemsLeft = ++result[0].ItemsLeft;
			}
	
			if ( item.productId != '-1' ) {
				var result = $.grep($scope.visitProducts, function (e) { return e.ProductID == item.productId });
				item.productName = result[0].ProductName;
				item.productItemsLeft = result[0].ItemsLeft;
				result[0].ItemsLeft = --result[0].ItemsLeft;
			}else{
				item.productName = 'Own equipment'
			}
	
			return item;
		}

		function getEventPrice() {
			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				id: $scope.PublicEventID,
			}
			
			$http({
				method: 'GET',
				url: '/private/GetPublicEventPrice?Namespace=' + namespace + '&GymID=' + gymid + '&id=' + $scope.PublicEventID,
				data: dataObject
			}).success(function (data) {
				$scope.modalPrice = data;
				calculateEventPrice();

				// Check if there is only one payment method
				if( $('.shcedule-popup .form-field.field-payments .dd-field:visible').length ==  1){
					// And trigger the hell out of it!
					$('.shcedule-popup .form-field.field-payments .dd-field:visible').trigger('click').find('label').trigger('click');
					$('.shcedule-popup .form-field.field-payments .dd-field:visible input').prop('checked', true);
					let paymentNumber = $('.shcedule-popup .form-field.field-payments .dd-field:visible input').val();
					$timeout(function() {
						$scope.smodal.paymentMethod = paymentNumber;
						paymentChange();
					}, 10);
				}
			}).error(function () {
			});
		}
	
	
		function stripeInit(){
			// Stripe
			$scope.stripe = Stripe($scope.classSettings.StripePublishKey);
			// Create a Stripe client.
			// var stripe = Stripe($scope.classSettings.StripePublishKey);
			// Create an instance of Elements.
			var elements = $scope.stripe.elements();
			// Custom styling can be passed to options when creating an Element.
			// (Note that this demo uses a wider set of styles than the guide below.)
			var style = {
				base: {
				color: '#32325d',
				lineHeight: '18px',
				fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
				fontSmoothing: 'antialiased',
				fontSize: '16px',
				'::placeholder': {
					color: '#aab7c4'
				}
				},
				invalid: {
				color: '#fa755a',
				iconColor: '#fa755a'
				}
			};
	
			// Create an instance of the card Element.
			// $scope.card = elements.create('card', {style: style});
			$scope.card = elements.create('card', {style: style, hidePostalCode: $scope.classSettings.HidePostalCode });
	
			// Add an instance of the card Element into the `card-element` <div>.
			$scope.card.mount('#card-element');
	
			// Handle real-time validation errors from the card Element.
			$scope.card.addEventListener('change', function(event) {
				var displayError = document.getElementById('card-errors');
				if (event.error) {
					displayError.textContent = event.error.message;
				} else {
					displayError.textContent = '';
				}
			});
		}
	
		function paymentChange(){
	
			if ($scope.smodal.paymentMethod == '7') {
				stripeInit();
				$('.form-actions .button.stripe-button').addClass('show');
				
	
				$('.stripe-button').on('click', function(e){
					e.preventDefault();

					if(Number($scope.modalPrice).toFixed(2) == 0.00){
						$scope.smodal.paymentMethod = '0';
						$scope.joinEvent();
					}else{
						generatePaymentIntent();
					}

					
				})
			}else{
				$('.form-actions .button.stripe-button').removeClass('show');
			}
		}
	
		// Generate PaymentInted for Stripe
		function generatePaymentIntent() {
			$scope.PaymentIntentID = 0;
			let dataObject = prepareDataToSned();
	
			if ($scope.formLoaded == true) {
				$scope.formLoaded = false;
				$scope.loading = true;
				$http({
					method: 'POST',
					url: '/private/GeneratePaymentIntent',
					data: dataObject
				}).success(function (data) {

					if(data == 'Waiver Required!'){
						var translated = $translateThis('Waiver Required!Portal');
						var waiverHref = window.location.origin + '/waiver/embedregistration?GymID=' + gymid + '&NameSpace=' + namespace + '&Redirect=/Schedulev2/GetScheduleID='+schedule.ID;
						Swal.fire({
							type: 'warning',
							title: translated,
							showCancelButton: true,
						}).then(function(result) {
							if (result.value) {
								window.location.href = waiverHref;
							}else{
								$timeout(function() {
									$scope.formLoaded = true;
									$scope.loading = false;
									$('#shcedule-popup .success-msg').removeClass('show');
								}, 1);
							}
						});
					}else if( data == 2 ){
						$scope.joinEventResponse = joinEventResponses[data];
						$('#shcedule-popup .error-msg').removeClass('show');
						$('#shcedule-popup .success-msg').addClass('show');
						$scope.formLoaded = true;
						$scope.loading = false;
					}else{
						stripeConfirmCard(data);
						$scope.PaymentIntentID = data.ID;
						$scope.formLoaded = true;
					}
				}).error(function (error) {
					$scope.errorResponse = error.ExceptionMessage;
					$('#shcedule-popup .error-msg').addClass('show');
					$scope.formLoaded = true;
					$scope.loading = false;
				});
			}
		}
	
	
		function stripeConfirmCard(data){
	
			let name;
			if($scope.client){
				name = $scope.client.FirstName + ' ' + $scope.client.LastName;
			}else{
				name = $scope.scheduleFirstName + ' ' + $scope.scheduleLastName;
			}
	
			$scope.stripe.confirmCardPayment(data.ClientSecret, {
				payment_method: {
					card: $scope.card,
					  billing_details: {
						name: name
					  }
				}
			}).then(function(result) {
				if (result.error) {
					// Show error to your customer (e.g., insufficient funds)
					$scope.joinEventResponse = result.error.message;
					$('#shcedule-popup .error-msg').removeClass('show');
					$('#shcedule-popup .success-msg').addClass('show');
					$timeout(function() {
						$scope.formLoaded = true;
						$scope.loading = false;
					}, 100);
				} else {
					  // The payment has been processed!
					  if (result.paymentIntent.status === 'succeeded') {
						$scope.joinEvent();
						// Show a success message to your customer
						// There's a risk of the customer closing the window before callback
						// execution. Set up a webhook or plugin to listen for the
						// payment_intent.succeeded event that handles any business critical
						// post-payment actions.
					  }else{
						$scope.formLoaded = true;
						$scope.loading = false;
						$('#shcedule-popup .success-msg').removeClass('show');
					  }
				}
			});
		}
	
		function prepareDataToSned(){
			
			let dataObject = {
				Namespace: namespace,
				GymID: gymid,
				Id: $scope.schedule.ID,
				Email: $scope.client ? $scope.client.Email : $scope.smodal.email,
				Date: moment($scope.schedule.NewDate).toISOString(),
				VisitName: $scope.schedule.VisitName,
				PaymentMethod: $scope.smodal.paymentMethod,
				Language: lang,
				ProductID: $scope.productId,
				ProductName: $scope.productName,
				AdditionalGuests: $scope.people,
				PaymentIntentID: $scope.PaymentIntentID,
				receiveEmails: $scope.smodal.MarketingEmailsClassBooking
			}
	
			if ( $scope.classSettings.ClassBookingRequireProfile != true ) {
				let tel;
				tel = $scope.inputPhone.selectedDialCode.innerHTML + $scope.inputPhone.telInput.value;
				tel = tel.replace(/ /g,'');
	
				dataObject.FirstName = $scope.client ? $scope.client.FirstName : $scope.scheduleFirstName;
				dataObject.LastName = $scope.client ? $scope.client.LastName : $scope.scheduleLastName;
				dataObject.Telephone = $scope.client ? $scope.client.Telephone : tel;
			}
	
			if ( $scope.smodal.paymentMethod == '7' ) {
				dataObject.Price = $scope.totalPrice;
				dataObject.PublicEventID = $scope.PublicEventID;
			}
	
			return dataObject;
		}


		$scope.PublicEventID = $scope.schedule.PublicEventID;
		$scope.noSlotsLeft = $scope.schedule.SlotsLeft > 1 ? false : true;

		function calculateEventPrice(){
			if ( $scope.people.length > 0 ) {
				$scope.additionPrice = $scope.people.length*parseFloat($scope.modalPrice);
				$scope.totalPrice = (parseFloat($scope.additionPrice) + parseFloat($scope.modalPrice)).toFixed(4);
			}else{
				$scope.totalPrice = $scope.modalPrice;
			}
	
			$scope.noSlotsLeft = $scope.schedule.SlotsLeft > $scope.people.length + 1 ? false : true;
		}

		getEventPrice();

		function checkEqipment(){	
			let bookedPeople = [...$scope.people];
	
			if(bookedPeople){
				bookedPeople.push({productId: $scope.smodal.productId})
				let group = bookedPeople.reduce((r, a) => {
					r[a.productId] = [...r[a.productId] || [], a];
					return r;
				}, {});
	
				for (var key in group) {
					if(key > 0){
						let item = $scope.visitOriginalProducts.find((item) => item.ProductID == key);
						if( item.ItemsLeft >= group[key].length){
							$scope.haveEquipment = true;
						}else{
							$scope.haveEquipment = false;
							break;
						}
					}else{
						$scope.haveEquipment = true;
					}
				}
			}else{
				let item = $scope.visitOriginalProducts.find((item) => item.ProductID == $scope.smodal.productId);
				if(item.ItemsLeft>0){
					$scope.haveEquipment = true;
				}else{
					$scope.haveEquipment = false;
				}
			}

			if($scope.haveEquipment){
				sendJoinEventRequest();
			}
		}

		function getEqipment(final = false){
			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				ID: $scope.schedule.ID
			}
	
			$http({
				method: 'GET',
				url: '/api/public/GetEqipment?nameSpace=' + namespace + '&gymId=' + gymid + '&ID=' + $scope.schedule.ID,
				data: dataObject
			}).success(function (data) {
				if($scope.visitProducts.length == 0){
					$scope.visitProducts = data;
				}
				$scope.visitOriginalProducts = [...data];
				$scope.modalLoading = false;
				if(final)
					checkEqipment();
			}).error(function () {
	
			});
		}

		getEqipment();

		// Join Event
		$scope.formLoaded = true;

		var joinEventResponses = new Array('joinEventResponse1', 'joinEventResponse2', 'joinEventResponse3', 'joinEventResponse4', 'joinEventResponse5', 'joinEventResponse6', 'joinEventResponse7');

		function sendJoinEventRequest(){

			if($scope.waitingListApprove && ($scope.smodal.paymentMethod == 1 || $scope.smodal.paymentMethod == 7)){
				standardJoinEvent();
			}else if($scope.waitingListApprove && ($scope.smodal.paymentMethod == 0 || $scope.smodal.paymentMethod == 2 || $scope.smodal.paymentMethod == 3 || $scope.smodal.paymentMethod == 4 || $scope.smodal.paymentMethod == 5 || $scope.smodal.paymentMethod == 6)){
				approveFromWaitingList();
			}else{
				standardJoinEvent();
			}
		}

		// ApproveFromWaitingList(string Email, string Language, int ID, int GymID, string Namespace)

		function approveFromWaitingList(){
			$scope.loading = true;
			let dataObject = {
				ID: WaitingListID,
				Namespace: namespace,
				GymID: gymid,
				Email: $scope.client ? $scope.client.Email : $scope.smodal.email,
				Language: lang
			}

			$http({
				method: 'POST',
				url: '/private/ApproveFromWaitingList',
				data: dataObject
			}).success(function (data) {
				let result = JSON.parse(data.toLowerCase());
				$('.event-single-box .error-msg').removeClass('show');
			    $('.event-single-box .success-msg').addClass('show');
				
				if(result){
					$scope.joinEventResponse = joinEventResponses[0];
					$('.event-single-box .success-msg').addClass('green');
				}else{
					$scope.joinEventResponse = joinEventResponses[2];
					$('.event-single-box .success-msg').addClass('red');
				}
				$scope.loading = false;
			}).error(function () {
				$scope.loading = false;
			});
		}

		function standardJoinEvent(){
			let dataObject = prepareDataToSned();
			if ($scope.formLoaded == true) {
			    $scope.formLoaded = false;
			    $http({
			        method: 'POST',
			        url: '/private/JoinEvent',
			        data: dataObject
			    }).success(function (data) {
			        var responseI = data;
			        $scope.joinEventResponse = joinEventResponses[responseI];

			        $('.event-single-box .error-msg').removeClass('show');
			        $('.event-single-box .success-msg').addClass('show');

			        if (responseI == 0) {
			            $('.event-single-box .success-msg').addClass('green');
			        }else if(responseI == 1) {
						// $scope.joinWaitingList($scope.modalVisit);
						$scope.fullEvent = true;
						$('#waiting-popup .popup, #waiting-popup').addClass('show');
					}else if (responseI == 6) {
			            $('.event-single-box .success-msg').addClass('red');
			        }
					
			        $scope.formLoaded = true;
					$scope.loading = false;
			    }).error(function () {
			        $('.event-single-box .error-msg').addClass('show');
			        $scope.formLoaded = true;
					$scope.loading = false;
			    });
			}
		}

		$scope.joinEvent = function () {
			getEqipment(true);
		}

		$scope.joinWaitingList = function(event){
			let dataObject = {
				Namespace: namespace,
				GymID: gymid,
				Id: event.ID,
				Email: $scope.client ? $scope.client.Email : $scope.waitingList.Email,
				Date: moment(event.NewDate).toISOString(),
				VisitName: event.VisitName,
				Language: lang
			}
	
			if ( $scope.client ) {
				dataObject.FirstName = $scope.client.FirstName;
				dataObject.LastName = $scope.client.LastName;
				dataObject.Telephone = $scope.client.Telephone;
			}

	
			$http({
				method: 'POST',
				url: '/private/JoinWaitingList',
				data: dataObject
			}).success(function (data) {
	
				//0:everything ok; 1:no client found; 2:cannot add to waiting list; 3:error;4 already in the same waiting list; 7:no event found
	
				console.log(data);
				let response = data;
	
				if(response == 0){
					let translated = $translateThis('Thank you for joining the waitlist. You will receive an email if space becomes available.');
					Swal.fire({
						type: 'success',
						title: translated,
					});
				}else if(response == 1){
					let translated = $translateThis('There is no customer with this email. Please contact reception.');
					Swal.fire({
						type: 'warning',
						title: translated,
					});
				}else if(response == 2){
					let translated = $translateThis('Cannot add to waiting list');
					Swal.fire({
						type: 'warning',
						title: translated,
					});
				}else if(response == 3){
					let translated = $translateThis('Error');
					Swal.fire({
						type: 'warning',
						title: translated,
					});
				}else if(response == 4){
					let translated = $translateThis('You are already in the waitlist. We will send you an email if space becomes available');
					Swal.fire({
						type: 'warning',
						title: translated,
					});
				}else if(response == 7){
					let translated = $translateThis('no event found');
					Swal.fire({
						type: 'warning',
						title: translated,
					});
				}
			}).error(function (error) {
			});
		}

		$scope.addPerson = function(){
			let person = {};
			$scope.people.push(person);
			calculateEventPrice();
		}
	
		$scope.deletePerson = function(index){
			let item = $scope.people[index];
	
			if (item.productId > -1) {
				let result = $.grep($scope.visitProducts, function (e) { return e.ProductID == item.productId });
				result[0].ItemsLeft = ++result[0].ItemsLeft;
			}
			$scope.people.splice(index,1);
			calculateEventPrice();
		}

		$(document).on('click', '.dd .dd-head', function (e) {
			$(this).parent('.dd').toggleClass('show');
		});

		$(document).click(function (e) {
			if ($(e.target).closest('.dd').length === 0 && $('.dd').is('.show')) {
				$('.dd').removeClass('show');
			}
		});

		$(document).on('click', '.event-single-box .dd-field', function () {
			var content = $(this).find('label').html();
			var dd = $(this).parents('.dd');
			dd.find('.dd-head').html(content);
			dd.removeClass('show');
			paymentChange();
		})

		if (gym) {
			if (gym[0].PortalColor != null && gym[0].PortalColor != 'default') {
				$('.schedule-wrapper').addClass('theme-' + gym[0].PortalColor);
			}
		}

		$(window)
			.on('load', function () {

				let phoneLang = getLanguage($scope.gym.Culture);
				var inputInitPhone = document.querySelector("#popuptelephone");
				
				if(inputInitPhone){

					if($scope.gym.Culture.includes('GB')){
						$('#popuptelephone')
						.on('keydown', function (e) {
							if(e.keyCode == 32){
								return false;
							}
						})
						.on('keyup', function (e) {
							if(e.target.value.length == 4){
								e.target.value = e.target.value += ' ';
							}
						});
					}

					$scope.inputPhone = window.intlTelInput(inputInitPhone, {
						autoHideDialCode: false,
						preferredCountries: [phoneLang],
						separateDialCode: true
					});

					inputInitPhone.addEventListener("countrychange", function() {
						let countryinfo = $scope.inputPhone.getSelectedCountryData()
						if(countryinfo.dialCode == '44'){
							inputInitPhone.value = inputInitPhone.value.split(' ').join('');
							if(inputInitPhone.value.length > 4){
								inputInitPhone.value = inputInitPhone.value.substring(0, 4) + " " + inputInitPhone.value.substring(4, 10);
							}
							$scope.phoneFormat = /^[0-9\s]{5,11}$/;
							$('#popuptelephone')
							.on('keydown', function (e) {
								if(e.keyCode == 32){
									return false;
								}
							})
							.on('keyup', function (e) {
								if(e.target.value.length == 4){
									e.target.value = e.target.value += ' ';
								}
							});
						}else{
							inputInitPhone.value = inputInitPhone.value.split(' ').join('');
							$scope.phoneFormat = /^[0-9]{5,15}$/;
							$scope.waiverForm.Telephone.$validate()
							$('#popuptelephone')
							.on('keydown', function (e) {
								if(e.keyCode == 32){
									return false;
								}
							})
							.on('keyup', function (e) {
								if(e.target.value.length == 4){
									// e.target.value = e.target.value += ' ';
								}
							});
						}
					});
				}
			})

		// Get Language from backend settings
		function getLanguage(culture){
			let lang = culture.split('-');
			lang = lang[1].toLowerCase();
			return lang;
		}
		
	}else{
		$scope.noSchedule = true;
	}
}]);
app.controller('ScheduleEventInfoController', ['$scope', '$http', '$timeout', '$translate', function ($scope, $http, $timeout, $translate) {

	$scope.schedule = schedule;
	$scope.client = client;
	$scope.attending = attending;

	var scheduleDate = new Date(schedule.Date);
	var dateBeforeCancel = new Date(schedule.Date);
	dateBeforeCancel.setHours(dateBeforeCancel.getHours() - settings.HoursBeforeCanceling);
	var today = new Date();

	if (scheduleDate > today) {
		$scope.canCancel = true;
	}

	function findElement(arr, propName, propValue) {
		for (var i = 0; i < arr.length; i++)
			if (arr[i][propName] == propValue)
				return arr[i];
		// will return undefined if not found; you could return a default instead
	}

	// Get Areas
	$scope.getAreas = function () {
		var dataObject = {
			Namespace: namespace,
			GymId: gymid
		}
		$http({
			method: 'GET',
			url: '/api/public/GetAreas?nameSpace=' + namespace + '&gymId=' + gymid,
			data: dataObject
		}).success(function (data) {
			var x = findElement(data, "AreaID", $scope.schedule.AreaID);
			$scope.areaName = x['Name'];

		}).error(function () {

		});
	}

	$scope.getAreas();

	$scope.leaveEvent = function () {
		var now = new Date();

		if (now < dateBeforeCancel) {
			var dataObject = {
				Namespace: namespace,
				GymID: gymid,
				Id: $scope.schedule.ID,
				ClientID: $scope.client.ClientID
			}

			$http({
				method: 'POST',
				url: '/private/leaveEvent',
				data: dataObject
			}).success(function (data) {
				if (data == true || data == 'True') {
					$('.event-box .actions').addClass('show-success');
				}
			}).error(function () {

			});
		} else {
			$('.event-box .actions').addClass('show-error');
		}
	}

}]);
app.directive('translateDateObjectSchedule', function ($timeout) {
	return {
		controller: function ($scope) {
			return {};
		},
		requires: 'translateDateObjectSchedule',
		link: function (scope, element, attrs, thisController) {

			$timeout(function () {

				thisController.html = element[0].innerHTML;

				// CLEAN THE STRING TO GET A CLEAN NAME DAY
				var content_temp1 = thisController.html.replace('<span class="day ng-binding">', '');
				var content_temp2 = content_temp1.replace('</span>', '').toLowerCase();

				var day_name = '';

				for (var i = 0, len = content_temp2.length; i < len; i++) {
					// CHECK IF IS A CHAR
					if (content_temp2[i].match(/[a-z]/i)) {
						day_name += content_temp2[i];
					}
				}

				lang = scope.currentLang ? scope.currentLang : lang;

				// CHECK THE ACTIVE LANGUAGE
				if (lang == 'bg') {
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Понеделник</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Вторник</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Сряда</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Четвъртък</span>');
							break;
						case 'friday':
							element.html('<span class="day">Петък</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Събота</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Неделя</span>');
							break;
					}
				}else if (lang == 'es'){
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Lunes</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Martes</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Miércoles</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Jueves</span>');
							break;
						case 'friday':
							element.html('<span class="day">Viernes</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Sábado</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Domingo</span>');
							break;
					}
				}else if (lang == 'esc'){
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Dilluns</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Dimarts</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Dimecres</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Dijous</span>');
							break;
						case 'friday':
							element.html('<span class="day">Divendres</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Dissabte</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Diumenge</span>');
							break;
					}
				}else if (lang == 'pt'){
					// ASSIGN A DIFFERENT TRANSLATION FOR EACH DAY
					switch (day_name) {
						case 'monday':
							element.html('<span class="day">Segunda-feira</span>');
							break;
						case 'tuesday':
							element.html('<span class="day">Terça-feira</span>');
							break;
						case 'wednesday':
							element.html('<span class="day">Quarta-feira</span>');
							break;
						case 'thursday':
							element.html('<span class="day">Quinta-feira</span>');
							break;
						case 'friday':
							element.html('<span class="day">Sexta-feira</span>');
							break;
						case 'saturday':
							element.html('<span class="day">Sábado</span>');
							break;
						case 'sunday':
							element.html('<span class="day">Domingo</span>');
							break;
					}
				}
			});
		}
	}
})
app.directive('numbersOnly', function () {
	return {
		require: 'ngModel',
		link: function (scope, element, attr, ngModelCtrl) {
			function fromUser(text) {
				if (text) {
					var transformedInput = text.replace(/[^0-9]/g, '');

					if (transformedInput !== text) {
						ngModelCtrl.$setViewValue(transformedInput);
						ngModelCtrl.$render();
					}
					return transformedInput;
				}
				return undefined;
			}
			ngModelCtrl.$parsers.push(fromUser);
		}
	};
})
app.directive('language', ["$translate", "$http", function ($translate, $http) {
    return {
        restrict: 'E',
        replace: true,
        template: '<div class="lang-nav"><a class="current" data-lang="{{currentLang}}" ng-click="langon=!langon;">\
            			<i class="flag {{currentLang}}"></i>\
                        {{currentLang}}\
        			</a> \
                    <ul ng-show="langon">\
                    	<li ng-repeat="lang in languages track by $index" ng-hide="currentLang==lang">\
                    		<a ng-click="setLang(lang)" data-lang="{{lang}}">\
                    			<i class="flag {{lang}}"></i>\
                                {{lang}}\
                			</a>\
            			</li>\
                    </ul></div>',
        link: function ($scope, el, attrs) {

            function setCookie(key, value) {
                var expires = new Date();
                expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));
                document.cookie = key + '=' + value + ';expires=' + expires.toUTCString() + ';path=/';
            }
        
            function getCookie(key) {
                var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
                return keyValue ? keyValue[2] : null;
            }

			getCultureLanguage();

			if (lang)
				$translate.use(lang);

            $scope.setLang = function (d) {
                $translate.use(d);
                setCookie('setLang', d);
                $scope.langon = false;
                $scope.currentLang = d;
				updateDatepickerRegion(d);
            }

            const lastLang = getCookie('setLang');
			$scope.currentLang = $translate.proposedLanguage() || $translate.use();

            if ( lastLang ) {
                $scope.currentLang = lastLang;
                $translate.use(lastLang)
            }else{
				$translate.use($scope.cultureLang);
				$scope.currentLang = $scope.cultureLang;	
            }

			if(gym[0].Languages != null){
				$scope.languages = gym[0].Languages.split(',');
				if( !$scope.languages.includes($scope.cultureLang)){
					$scope.languages.push($scope.cultureLang);
				}
			}else{
				$scope.languages = ['en', 'bg', 'es', 'esc', 'pl', 'pt'];
			}

			if ($scope.currentLang == 'bg') {
				$scope.AdditionInfo = $scope.gym[0].AdditionalInformation;
				$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['bg']);
			}else if($scope.currentLang == 'es' || $scope.currentLang == 'esc'){
				$scope.AdditionInfo = $scope.gym[0].AddditionalInformationEN;
				$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['es']);
			}else if($scope.currentLang == 'pt'){
				$scope.AdditionInfo = $scope.gym[0].AddditionalInformationEN;
				$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['pt']);
			}else if(gym[0].Culture == 'en-GB'){
				$scope.AdditionInfo = $scope.gym[0].AddditionalInformationEN;
				$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['en-GB']);
			}else{
				$scope.AdditionInfo = $scope.gym[0].AddditionalInformationEN;
				$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['en']);
			}

			if ($scope.gym[0].Culture == 'en-US') {
				$('#from, #to, #schedule_to, #schedule_from').datepicker( "option", "dateFormat", "mm/dd/yy" );
			} else {
				$('#from, #to, #schedule_to, #schedule_from').datepicker( "option", "dateFormat", "dd/mm/yy" );
			}

			// Language Switch
			$scope.$on('$translateChangeSuccess', function (event, current, previous) {
				$scope.currentLang = $translate.proposedLanguage() || $translate.use();
			});

			function getCultureLanguage(){
				if (gym[0].Culture.includes('-ES') ) {
					if (gym[0].Culture == 'ca-ES' || gym[0].Culture == 'ca-ES-valencia') {
						$scope.cultureLang = 'esc';	
					}else{
						$scope.cultureLang = 'es';
					}
				}else if (gym[0].Culture == 'bg-BG'){
					$scope.cultureLang = 'bg';
				}else if (gym[0].Culture == 'pt-PT'){
					$scope.cultureLang = 'pt';
				}else{
					$scope.cultureLang = 'en';	
				}
			}

			function updateDatepickerRegion(e){
				var lang = e;

				if (lang == 'bg') {
					$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['bg']);
				}else if(lang == 'es' || lang == 'esc'){
					$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['es']);
				}else if(lang == 'pt'){
					$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['pt']);
				}else if(gym[0].Culture == 'en-GB'){
					$scope.AdditionInfo = $scope.gym[0].AddditionalInformationEN;
					$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['en-GB']);
				}else{
					$('#from, #to, #schedule_to, #schedule_from').datepicker("option", $.datepicker.regional['en']);
				}

				if ($scope.gym[0].Culture == 'en-US') {
					$('#from, #to, #schedule_to, #schedule_from').datepicker( "option", "dateFormat", "mm/dd/yy" );
				} else {
					$('#from, #to, #schedule_to, #schedule_from').datepicker( "option", "dateFormat", "dd/mm/yy" );
				}

				if ($scope.AdditionInfo) {
					var prtext = $scope.AdditionInfo.replace(/\n/g, '<br />')
					$('.section-addtext').html(prtext);
				}
			}
        }
    };
}]);
app.filter('money', [function () {
    return function (d) {
		var curTpl = '';

		if(customCurrency){
			curTpl = "{{money}} " + customCurrency;
		}else if ( gym[0].Culture ) {
			if (gym[0].Culture == 'bg-BG') {
				curTpl = "{{money}} лв.";
				// $scope.customCurrency = 'лв.';
			}else if(gym[0].Culture.includes('-ES') || gym[0].Culture.includes('pt')){
				curTpl = "{{money}}€";
				// $scope.customCurrency = 'eur';
			}else if(gym[0].Culture == "fr-CH"){
				curTpl = "CHF{{money}}";
				// $scope.customCurrency = 'CHF';
			}else if(gym[0].Culture.includes('-GB')){
				curTpl = "£{{money}}";
			}else {
				curTpl = "${{money}}";
				// $scope.customCurrency = '$';
			}
		}

        function formatPrice(num) {
            if (num == 0) return '0.00';
			if (num){
				num = parseFloat(num);
				return num.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
			}
            return '';
        }
        return curTpl.replace("{{money}}", formatPrice(d))
    }
}]);
angular.
    module('app').
    component('authorization', {  // This name is what AngularJS uses to match to the `<phone-list>` element.
        templateUrl: '../Frontend/CustomersPortal/src/partials/authorization.template.html',
        controller: ['$scope', '$http', '$translate', '$filter', '$timeout', AuthorizationController],
        bindings: {
            login: '<'
        }
});

function AuthorizationController($scope, $http, $translate, $filter, $timeout){
    $scope.statusSuccess = false
    if (typeof infoData !== 'undefined') {
        $scope.Namespace = infoData.NameSpace;
        $scope.GymID = infoData.GymID;
    }else{
        $scope.Namespace = namespace;
        $scope.GymID = gymid;
    }

    $scope.dashLogin = this.login ? this.login : false;
    $scope.dashLogin = true;


    $scope.closePopup = function () {
		$('.popup-wrapper').removeClass('show');
		$scope.formLogin.$setPristine();
        $scope.formRegister.$setPristine();
	}

    if ( isMobile ){
        $scope.mobileApp = isMobile;
    }
    
    if (gym)
        $scope.gym = gym;

    if (learnedFrom)
        $scope.learnedFrom = learnedFrom

    var $translateThis = $filter('translate');

    $scope.showLogin = function () {
        $scope.dashLogin = true;
    }

    $scope.hideLogin = function () {
        $scope.dashLogin = false;
    }

    $scope.phoneFormat = $scope.gym[0].Culture.includes('GB') ? /^[0-9\s]{5,11}$/ : /^[0-9]{5,15}$/;


    // Get Gyms
    getGyms = function () {
        var dataObject = {
            Namespace: $scope.Namespace
        }

        $http({
            method: 'POST',
            url: '/Membership/GetGyms',
            data: dataObject
        }).success(function (data) {
            $scope.membershipGyms = data;
            
            //$scope.$apply();

            if ($scope.membershipGyms.length == 1) {
                $timeout(function () {
                    $scope.RegGymName = $scope.membershipGyms[0].GymID;
                })
            }
        }).error(function () {
            // console.log('error');
        });
    }

    getGyms();

    $scope.accRegister = function () {
        $scope.statusSuccess = false;
        $scope.loading = true;
        $scope.currentLang = $translate.proposedLanguage() || $translate.use();
        var GymID = $scope.GymID;
        var Namespace = $scope.Namespace;
        var regbirthdate = $('#RegBirthdate').val();
        if ($scope.gym[0].Culture != 'en-US') {
            var res = regbirthdate.split("/");
            var date = res[1] + '/' + res[0] + '/' + res[2];
        }else{
            var date = regbirthdate;
        }
        var number = $scope.inputPhone.selectedDialCode.innerHTML + $scope.inputPhone.telInput.value;
        number = number.replace(/ /g,'');
        let url = window.location.pathname.split("/");
        let controller = url[1];
        let action = url[2];

        var dataObject = {
            RegEmail: $('#RegEmail').val(),
            RegPassword: $('#RegPassword').val(),
            RegConfirmPassword: $('#RegConfirmPassword').val(),
            RegFirstName: $('#RegFirstName').val(),
            RegLastName: $('#RegLastName').val(),
            Namespace: $scope.Namespace,
            GymID: $scope.GymID,
            Male: $scope.regSexRadio,
            Telephone: number,
            DivisionID: $('#RegGym').val(),
            Birthdate: moment(date).toISOString(),
            LearnedFrom: $('#RegLearnedFrom').val(),
            WorkAddress: $('#RegWorkAddress').val(),
            HomeAddress: $('#RegAddress').val(),
            RecommendBy: $('#RegRecommendBy').val(),
            Controller: controller,
            Action: action,
            receiveEmails: $scope.receiveEmails
        }

        $http({
            method: 'POST',
            url: '/account/register/',
            data: dataObject
        }).success(function (data) {
            var data = data;

            if (data == 'Success') {

                if( $('.newbooking-body').length ){
                    $scope.statusSuccess = true;
                }else{
                    var currentHref = window.location;
                    var href = currentHref.origin + '/Account/ConfirmYourEmail?nameSpace=' + $scope.Namespace + '&gymId=' + $scope.GymID;
                    if ( isMobile == true ) {
                        href += '&isMobile=true';
                    }  
    
                    window.location.replace(href);   
                }
            } else {
                var n = data.search("com is already taken");

                if (n > 0) {
                    var translated = $translateThis('User Taken');
                    $('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
                } else {
                    var res = data.split(".");

                    if (res.length > 2) {
                        $('.validation-errors').html('<div class="section-valid"></div>');
                        for (var i = 0; i < res.length - 1; i++) {
                            var msg = res[i] + '.';
                            var translated = $translateThis(msg);
                            $('.validation-errors .section-valid').append('<p>' + translated + '</p>');
                        }
                    } else {
                        var translated = $translateThis(data);
                        $('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
                    }
                }
            }
            $scope.loading = false;

        }).error(function () {
            // console.log('error');
        });
    };

    $scope.accLogin = function () {

        $scope.loading = true;
        var gymid = $('#accGymID').val();
        var namespace = $('#Namespace').val();

        var email = $('#Email').val();
        email = email.replace(/ /g,'');
        var password = $('#Password').val();
        var rememberme = $('#rememberMe').val();

        var dataObject = {
            Email: email,
            Password: password,
            RememberMe: rememberme,
            Namespace: namespace,
            GymID: gymid
        }

        $http({
            method: 'POST',
            url: '/account/login/',
            data: dataObject
        }).success(function (data) {
            var data = data;
            var currentHref = window.location;
            var href = currentHref.origin + '/Account/Dashboard?nameSpace=' + namespace + '&gymId=' + gymid;

            if (data == 'Success') {
                window.location.reload();
            } else {
                var translated = $translateThis(data);
                $('.validation-errors').html('<div class="section-valid"><p>' + translated + '</p></div>');
            }
            $scope.loading = false;

        }).error(function () {
            // console.log('error');
        });
    };


    function setCookie(key, value) {
        var val = value;
        var expires = new Date();
        expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));
        document.cookie = key + '=' + value + ';expires=' + expires.toUTCString() + ';path=/';
        if (val != "true") {
            $('body').addClass('pound-currency');
        } else {
            $('body').removeClass('pound-currency');
        }
    }

    function getCookie(key) {
        var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
        return keyValue ? keyValue[2] : null;
    }

    var today = new Date();
    var datepicker = $('#RegBirthdate');
    var lastDate = getCookie('setDate');

    datepicker.datepicker({
        changeMonth: true,
        changeYear: true,
        yearRange: "1920:2040",
        numberOfMonths: 1,
        onSelect: function (dateText, inst) {
            $scope.currentLang = $translate.proposedLanguage() || $translate.use();
            var date = $(this).val();

            if ($scope.gym[0].Culture != 'en-US') {
                var res = date.split("/");
                var date = res[1] + '/' + res[0] + '/' + res[2];
            }
            $scope.cardStartDate = new Date(date);
            $scope.membershipStartDate = $scope.cardStartDate;

            if ($('.section-authorize').length && !$('#RegBirthdayVal').is(':checked')) {
                $('#RegBirthdayVal').trigger('click');
            }
            
            if ( $('.onepage-wrapper').length ) {
                $scope.theChoosenMembershipDate = $scope.cardStartDate;
            }
            $scope.$apply();
        }
    });
    $('.ui-datepicker').addClass('notranslate');
    $scope.currentLang = $translate.proposedLanguage() || $translate.use();

    if ($('.section-authorize').length) {
        datepicker.datepicker("option", "maxDate", 0);
    }

    datepicker.next('i').on('click', function () {
        datepicker.datepicker('show');
    });


    if ($scope.currentLang == 'en') {
        datepicker.datepicker("option", $.datepicker.regional['en']);
    }else if ($scope.currentLang == 'es' || $scope.currentLang == 'esc'){
        datepicker.datepicker("option", $.datepicker.regional['es']);
    }else if ($scope.currentLang == 'pt'){
        datepicker.datepicker("option", $.datepicker.regional['pt']);
    }else {
        datepicker.datepicker("option", $.datepicker.regional['bg']);
    }

    if ( $scope.gym[0].Culture == 'en-US' ) {
        datepicker.datepicker("option", "dateFormat", 'mm/dd/yy');
    }else{
        datepicker.datepicker("option", "dateFormat", 'dd/mm/yy');
    }

    // Get Language from backend settings
	function getLanguage(culture){
		let lang = culture.split('-');
		lang = lang[1].toLowerCase();
		return lang;
	}

    $(window).on('load', function () {

        let phoneLang = getLanguage($scope.gym[0].Culture);
        var inputInitPhone = document.querySelector("#RegPhone");

        if(inputInitPhone){

            if($scope.gym[0].Culture.includes('GB')){
                $('#RegPhone')
                .on('keydown', function (e) {
                    if(e.keyCode == 32){
                        return false;
                    }
                })
                .on('keyup', function (e) {
                    if(e.target.value.length == 4){
                        e.target.value = e.target.value += ' ';
                    }
                });
            }

            $scope.inputPhone = window.intlTelInput(inputInitPhone, {
                autoHideDialCode: false,
                preferredCountries: [phoneLang],
                separateDialCode: true
            });

            inputInitPhone.addEventListener("countrychange", function() {
                let countryinfo = $scope.inputPhone.getSelectedCountryData()
                if(countryinfo.dialCode == '44'){
                    inputInitPhone.value = inputInitPhone.value.split(' ').join('');
                    if(inputInitPhone.value.length > 4){
                        inputInitPhone.value = inputInitPhone.value.substring(0, 4) + " " + inputInitPhone.value.substring(4, 10);
                    }
                    $scope.phoneFormat = /^[0-9\s]{5,11}$/;
                    $('#RegPhone')
                    .on('keydown', function (e) {
                        if(e.keyCode == 32){
                            return false;
                        }
                    })
                    .on('keyup', function (e) {
                        if(e.target.value.length == 4){
                            e.target.value = e.target.value += ' ';
                        }
                    });
                }else{
                    inputInitPhone.value = inputInitPhone.value.split(' ').join('');
                    $scope.phoneFormat = /^[0-9]{5,15}$/;
                    $scope.waiverForm.Telephone.$validate()
                    $('#RegPhone')
                    .on('keydown', function (e) {
                        if(e.keyCode == 32){
                            return false;
                        }
                    })
                    .on('keyup', function (e) {
                        if(e.target.value.length == 4){
                            // e.target.value = e.target.value += ' ';
                        }
                    });
                }
            });
        }
    });
}
$(window).on('load', function(){
	var link = location.href.split('/').pop();
	link = link.split('?');
	link = link[0].toLowerCase();
	$('.nav li[data-link="' + link + '"]').addClass('active');

	setTimeout(function() {
		$('body').addClass('loaded');
	}, 500);

	$('.menu-trigger').on('click', function(e){
		e.preventDefault();

		$('.mobile-menu .nav li.has-submenu').removeClass('open-submenu');
		$('body').toggleClass('show-menu');
	});

	$('.nav > ul > li.has-submenu > a').on('click', function(e){
		var li = $(this).parent('li');
		if( !li.is('.open-submenu') ){
			e.preventDefault();
			li.addClass('open-submenu').siblings('li.open-submenu').removeClass('open-submenu');
		}
	})
})
//# sourceMappingURL=maps/main.js.map