/**
 * 
 * Data Layer Events functions
 * @author QBurst
 * Version 1
 * 
 **/

var mainApp = (function() {
	"use strict"
	window.dataLayer = window.dataLayer || [];

	var currentPageUrl = window.location.href,
		tourBtnAll = '.data-layer-event-schedule-tour a, a.data-layer-event-schedule-tour,button.data-layer-event-schedule-tour',
		tourBtnIcon = 'a.data-layer-event-schedule-tour-icon',
		tourBtnFp = 'a.data-layer-event-schedule-tour-fp',
		tourBtnVirtualTour = '.data-layer-event-virtual-tour a,a.data-layer-event-virtual-tour',
		fpBtn = '.data-layer-event-fp-results-cta',
		fpBtnDetailsPage = '.data-layer-event-fp-detail-cta',
		fpFilter = 'ul.data-layer-event-fp-filter li,.data-layer-event-fp-filter label,.data-layer-event-fp-filter button,.data-layer-event-fp-filter a,.data-layer-event-fp-filter option,.data-layer-event-fp-filter p,.data-layer-event-fp-filter dd,.data-layer-event-fp-filter input[type=radio],.data-layer-event-fp-filter span',
		fpFilterCheckbox = '.data-layer-checkbox',
		fpFilterPlugin = 'ul.selectBox-dropdown-menu li',
		fpFilterSubmit = 'input.data-layer-event-fp-filter-submit,.data-layer-event-fp-filter-submit',
		fpFilterQuickSearchWidget = 'ul.data-layer-event-fp-filter-wdget li,.data-layer-event-fp-filter-wdget button,.data-layer-event-fp-filter-wdget a,.data-layer-event-fp-filter-wdget label',
		headerNav = 'a.data-layer-event-header-nav,.data-layer-event-header-nav a,.data-layer-event-header-nav button',
		hamburgerNav = '.data-layer-event-hamburger-nav a',
		footerLinks = 'a.data-layer-event-footer-links,.data-layer-event-footer-links a,.data-layer-event-footer-links button',
		contactBtn = '.data-layer-event-contact-btn a,a.data-layer-event-contact-btn,button.data-layer-event-contact-btn',
		phone = '.tel-link,.ham_phone a',
		socialMedia = 'a.data-layer-event-social-media,.data-layer-event-social-media a',
		residentLogin = 'li.data-layer-event-resident-login a,a.data-layer-event-resident-login',
		address = 'a.data-layer-event-address-link,.data-layer-event-address-link a',
		applyBtn = '.data-layer-event-apply-now a,a.data-layer-event-apply-now',
		gallery = '.data-layer-event-gallery-filter button,.data-layer-event-gallery-filter a,.data-layer-event-gallery-filter .filter',
		contactMap = 'a.data-layer-event-contact-map',
		getDirectionBtn = 'a.data-layer-event-get-direction',
		downloadBrochureBtn = 'a.data-layer-event-download-brochure, button.data-layer-event-download-brochure',
		mapFilters = '.data-layer-event-map-filters > li > button, .data-layer-event-map-filters > li > a, .data-layer-event-map-filters > li > span',
		fpView = '';



	// Update data
	const updateDataLayer = (data) => {
		window.dataLayer.push(data);
	}

	function updateCurrentPageUrl() {
		currentPageUrl = window.location.href;
	}

	//This event should fire when a user clicks on the "Schedule a Tour" Button in any location in the entire site except the floor plan page.
	var scheduleTourClick = function() {
		
		jQuery(document).on("click", tourBtnAll, function(e) {
			updateCurrentPageUrl();

			if (jQuery(this).parent().hasClass('data-tour-header-menu') || jQuery(this).hasClass('data-tour-header-menu')) {
				var placement = 'Header Menu';
			} else if (jQuery(this).parent().parent().hasClass('data-tour-ham-menu') || jQuery(this).parent().hasClass('data-tour-ham-menu') || jQuery(this).hasClass('data-tour-ham-menu')) {
				var placement = 'Hamburger Menu';
			} else if (jQuery(this).parent().hasClass('data-tour-footer-menu') || jQuery(this).hasClass('data-tour-footer-menu')) {
				var placement = 'Footer Menu';
			} else {
				var placement = jQuery(this).attr('data-tour-location');
				if ((placement == '') || (typeof placement == 'undefined')) {
					placement = '';
				}
			}

			var eventData = {
				'event': 'schedule_a_tour_click',
				'click_text': jQuery(this).text().trim(),
				'page_url': currentPageUrl,
				'placement': placement,
				'destination_url': jQuery(this).attr('href'),
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	var scheduleTourIconClick = function() {
		
		jQuery(tourBtnIcon).on("click", function(e) {
			updateCurrentPageUrl();
			if (jQuery(this).hasClass('data-tour-header-menu')) {
				var placement = 'Header Menu';
			} else if (jQuery(this).hasClass('data-tour-ham-menu')) {
				var placement = 'Hamburger Menu';
			} else if (jQuery(this).hasClass('data-tour-footer-menu')) {
				var placement = 'Footer Menu';
			} else {
				var placement = jQuery(this).attr('data-tour-location');
				if ((placement == '') || (typeof placement == 'undefined')) {
					placement = '';
				}
			}

			var eventData = {
				'event': 'schedule_a_tour_click',
				'click_text': 'Schedule a Tour Icon',
				'page_url': currentPageUrl,
				'placement': placement,
				'destination_url': jQuery(this).attr('href'),
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}


	//virtual tour menu click
	var virtualTourButtonClick = function() {
		
		jQuery(tourBtnVirtualTour).on("click", function(e) {
			updateCurrentPageUrl();
			var click_text = jQuery(this).html();
				click_text = click_text.replace(/<(.|\n)*?>/g, '');
				click_text = click_text.replace(/\r?\n|\r/g, '');
				click_text = click_text.trim();
			var eventData = {
				'event': 'virtual_tour_menu',
				'click_text': click_text,
				'page_url': currentPageUrl,
				'destination_url': jQuery(this).attr('href'),
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}


	//Floorplan CTA button click from results page
	var fpResultsPageCtaClick = function() {
		
		jQuery(document).on("click", fpBtn, function(e) {
			updateCurrentPageUrl();
			if (jQuery('.floor-plans').length || jQuery('.floorplan-detail').length || jQuery('.apartments').length || jQuery('.sightmap').length) {

			var hiddenViewVal = jQuery('input[name=hidden_view]').val();
			if (hiddenViewVal == 'building') {
				fpView = 'Building';
			} else if (hiddenViewVal == 'grid') {
				fpView = 'FloorPlan';
			} else {
				fpView = 'Apartment';
			}
			var click_text = jQuery(this).attr('data-name');
	
			if (click_text == '' || click_text == undefined) {
				click_text = jQuery(this).text();
				click_text = click_text.replace(/<(.|\n)*?>/g, '');
				click_text = click_text.replace(/\r?\n|\r/g, '');
				click_text = click_text.replace(/\t/g, '');
				click_text = click_text.replace(/%/g, '');
				click_text = click_text.trim();
			}
			var eventData = {
				'event': 'floor_plan_result_cta',
				'click_text': click_text,
				'page_url': currentPageUrl,
				'floor_plan_view_type': fpView
			};

			updateDataLayer(eventData);
			console.log(eventData);

			if (currentPageUrl.indexOf('broadandwashington') != -1 || currentPageUrl.indexOf('atwellonspring') != -1 || currentPageUrl.indexOf('liveatleesquare') != -1){
				if (click_text.indexOf('Details') != -1){
					var eventData = {
								'event': 'floor_plan_page_view',
						};
	
						updateDataLayer(eventData);
						console.log(eventData);
	
				}
			}
		}
		});
	}

	//Floorplan CTA button click from detail page
	var fpDetailsPageCtaClick = function() {
		
		jQuery(document).on("click", fpBtnDetailsPage, function(e) {
			updateCurrentPageUrl();
			var eventData = {
				'event': 'floor_plan_detail_cta',
				'page_url': currentPageUrl,
				'floor_plan_type': jQuery(this).attr('data-fp'),
				'price': jQuery(this).attr('data-price'),
				'square_footage': jQuery(this).attr('data-sqft'),
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event should fire when a user clicks any of the filters & also onclick of Search CTA inside Floor Plan and Apartment page.
	var fpFilterClick = function() {
		jQuery(document).on("click", fpFilter, function(e) {

			var filterType = jQuery(this).parent().attr('data-filter-type'),
				filterValue = jQuery(this).attr('data-value'),
				sortType = jQuery('input[name=hidden_sort]').val();

			if (filterValue == '') {
				filterValue = 'All';
			}else if(filterValue == 'required'){
				filterValue = jQuery(this).text();
			}

			if ((filterType == '') || (typeof filterType == 'undefined')) {
				var filterType = jQuery(this).parent().parent().attr('data-filter-type');
				if ((filterType == '') || (typeof filterType == 'undefined')) {
					var filterType = jQuery(this).parent().parent().parent().attr('data-filter-type');
				}
				if ((filterType == '') || (typeof filterType == 'undefined')) {
					var filterType = jQuery(this).parents('.filter_col').attr('data-filter-type');
				}
			}
			if ((filterValue == '') || (typeof filterValue == 'undefined')) {
				if (jQuery(this).parent().find('input').length > 0) {
					filterValue = jQuery(this).parent().find('input').val();
				}
		    }

			if (sortType == 'minsquarefeet') {
				sortType = 'SQFT';
			} else if (sortType == 'vacantdate') {
				sortType = 'AVAILABILITY';
			} else if (sortType == 'unitrent') {
				sortType = 'PRICE';
			} else {
				sortType = 'APARTMENT TYPE';
			}

			var eventData = {
				'event': 'floor_plan_filters',
				'filter_type': filterType,
				'filter_value': filterValue,
				'sort_type': sortType
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});

		jQuery('ul.selectBox-dropdown-menu li:not(:first-child)').on("click", function(e) {

			var filterType = jQuery(this).parent().find('li:first-child a').text(),
				filterValue = jQuery(this).find('a').text();

			var eventData = {
				'event': 'floor_plan_filters',
				'filter_type': filterType,
				'filter_value': filterValue,
				'sort_type': 'APARTMENT TYPE'
			};

			updateDataLayer(eventData);
			console.log(eventData);
		});

		jQuery('.selectListInnerWrap dl > dd').on("click", function(e) {

			var filterType = jQuery(this).parent().find('dd:first-child').text(),
				filterValue = jQuery(this).text();

			if (jQuery('.gallery').length){
				var eventData = {
				'event': 'gallery_filter',
				'click_text': filterValue
				};
			}else{
				var eventData = {
				'event': 'floor_plan_filters',
				'filter_type': filterType,
				'filter_value': filterValue,
				'sort_type': 'APARTMENT TYPE'
				};
			}


			updateDataLayer(eventData);
			console.log(eventData);
		});


		jQuery('.chk_area input').on("click", function(e) {

			var filterValue = jQuery(this).val();

			var eventData = {
				'event': 'floor_plan_filters',
				'filter_type': 'Bedroom',
				'filter_value': filterValue,
				'sort_type': 'APARTMENT TYPE'
			};

			updateDataLayer(eventData);
			console.log(eventData);
		});

		jQuery(document).on("click", fpFilterCheckbox, function(e) {
			var filterType = jQuery(this).parent().attr('data-filter-type'),
			    filterValue = jQuery(this).attr('data-value');

			var eventData = {
				'event': 'floor_plan_filters',
				'filter_type': filterType,
				'filter_value': filterValue,
				'sort_type': 'APARTMENT TYPE'
			};

			updateDataLayer(eventData);
			console.log(eventData);
		});

		jQuery('select.data-layer-event-fp-filter').on('change', function() {
				  var filterType = jQuery(this).attr('data-filter-type');
				  var eventData = {
						'event' : 'floor_plan_filters',
						'filter_type': filterType,
						'filter_value' :  jQuery(this).find(':selected').text(),
						'sort_type' : 'APARTMENT TYPE'
					};
	        
					updateDataLayer(eventData);
					console.log(eventData);
		});
		
	}

	//This event should fire when a user clicks Floorplans filters form submit button
	var fpFilterSubmitClick = function() {
		jQuery(fpFilterSubmit).on("click", function(e) {

			var sortType = jQuery('input[name=hidden_sort]').val();

			if (sortType == 'minsquarefeet') {
				sortType = 'SQFT';
			} else if (sortType == 'vacantdate') {
				sortType = 'AVAILABILITY';
			} else if (sortType == 'unitrent') {
				sortType = 'PRICE';
			} else {
				sortType = 'APARTMENT TYPE';
			}

			var eventData = {
				'event': 'floor_plan_filters',
				'filter_type': 'Form Submit',
				'filter_value': '',
				'sort_type': sortType
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event should fire when a user clicks any of the filters from Quick Search Widget
	var fpFilterQuickSearchWidgetClick = function() {
		//jQuery(fpFilterQuickSearchWidget).on("click", function(e) {
		jQuery(document).on("click", fpFilterQuickSearchWidget, function(e) {	

			var filterType = jQuery(this).parent().attr('data-filter-type');
			var filterValue = jQuery(this).attr('data-value');

			if (filterValue == '') {
				filterValue = 'All';
			}

			if ((filterType == '') || (typeof filterType == 'undefined')) {
				var filterType = jQuery(this).closest('.data-layer-event-fp-filter-wdget').attr('data-filter-type');
			}

			var eventData = {
				'event': 'home_page_filter',
				'filter_type': filterType,
				'filter_value': filterValue,
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});

		jQuery('select.data-layer-event-fp-filter-wdget').on('change', function() {
				  var filterType = jQuery(this).attr('data-filter-type');
				  var eventData = {
						'event': 'home_page_filter',
						'filter_type': filterType,
						'filter_value' :  jQuery(this).find(':selected').text(),
					};
	        
					updateDataLayer(eventData);
					console.log(eventData);
		});
	}

	//This event should fire when a user clicks on any of the Header Navigation on the page.
	var headerNavClick = function() {
		jQuery(headerNav).on("click", function(e) {
			updateCurrentPageUrl();
			var click_text = jQuery(this).text();
			    click_text = click_text.replace( /\r?\n|\r/g, '');
                   click_text = click_text.trim();

				if(click_text == '' || (typeof click_text == 'undefined')){
			    		click_text = jQuery(this).attr('data-name');
			    }
			var eventData = {
				'event': 'header_nav',
				'header_name': click_text,
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

				if (currentPageUrl.indexOf('broadandwashington') != -1 || currentPageUrl.indexOf('atwellonspring') != -1  || currentPageUrl.indexOf('liveatleesquare') != -1){
					if (click_text.indexOf('Floor Plans') != -1){
						var eventData = {
									'event': 'floor_plan_page_view',
							};
		
							updateDataLayer(eventData);
							console.log(eventData);
		
					}
				}

		});
	}

	//This event should fire when a user clicks on any of the links in the hamburger.
	var hamburgerNavClick = function() {
		jQuery(document).on("click", hamburgerNav, function(e) {
			updateCurrentPageUrl();
			var click_text = jQuery(this).attr('data-name');
			if ((click_text == '') || (typeof click_text == 'undefined')) {
				var click_text = jQuery(this).text();
				click_text = click_text.replace(/<(.|\n)*?>/g, '');
				click_text = click_text.replace(/\r?\n|\r/g, '');
				click_text = click_text.replace(/\t/g, '');
				click_text = click_text.replace(/%/g, '');
				click_text = click_text.trim();
			}

			var eventData = {
				'event': 'hamburger_nav',
				'click_text': click_text,
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

			if (currentPageUrl.indexOf('broadandwashington') != -1 || currentPageUrl.indexOf('atwellonspring') != -1  || currentPageUrl.indexOf('liveatleesquare') != -1){
				if (click_text.indexOf('Floor Plans') != -1){
					var eventData = {
								'event': 'floor_plan_page_view',
						};
	
						updateDataLayer(eventData);
						console.log(eventData);
	
				}
			}

		});

	}


	//This event should fire when a user clicks on any of the links in the footer.
	var footerLinksClick = function() {
		jQuery(footerLinks).on("click", function(e) {
			updateCurrentPageUrl();
			var click_text = jQuery(this).attr('data-name');
			if (click_text == '' || click_text == undefined) {
				click_text = jQuery(this).text();
				click_text = click_text.replace(/<(.|\n)*?>/g, '');
				click_text = click_text.replace(/\r?\n|\r/g, '');
				click_text = click_text.replace(/\t/g, '');
				click_text = click_text.replace(/%/g, '');
				click_text = click_text.replace(/\s+/g, " ");
				click_text = click_text.trim();
			}

			var eventData = {
				'event': 'footer_nav',
				'click_text': click_text,
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks on the Contact us button which is present in various places in the site.
	var contactButtonClick = function() {
		jQuery(document).on("click", contactBtn, function(e) {	
			updateCurrentPageUrl();
			var eventData = {
				'event': 'contact_us',
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);
		});
	}

	//This event fires when the user clicks on the phone number on all webpages of the site
	var phoneNumberClick = function() {
		//jQuery(phone).on("click", function(e) {
		jQuery(document).on("click", phone, function(e) {
			updateCurrentPageUrl();
			if(jQuery(this).attr('href')){
				var click_text = jQuery(this).text();
				click_text = click_text.replace('tel:', '');
				click_text = click_text.replace(/<(.|\n)*?>/g, '');
				click_text = click_text.replace(/\r?\n|\r/g, '');
				click_text = click_text.replace(/\t/g, '');
				click_text = click_text.replace(/%/g, '');
				click_text = click_text.trim();
				
				if(click_text == ''){
					click_text = "Call Icon";
				}
		    }else{
				if(jQuery(this).children('a').length > 0){
					if(jQuery(this).children('a').attr('href')){
						var click_text = jQuery(this).children('a').text();
						click_text = click_text.replace('tel:', '');
						click_text = click_text.replace(/<(.|\n)*?>/g, '');
						click_text = click_text.replace(/\r?\n|\r/g, '');
						click_text = click_text.replace(/\t/g, '');
						click_text = click_text.replace(/%/g, '');
						click_text = click_text.trim();
					}else{
						click_text = "Call Icon";
					}
				}else{
					var click_text = 'Phone Icon';
				}		    	
		    }

			var eventData = {
				'event': 'click_to_call',
				'click_text': click_text,
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event must fire when the user clicks on any social media icons
	var socialMediaClick = function() {
		jQuery(socialMedia).on("click", function(e) {
			updateCurrentPageUrl();
			var click_text = jQuery(this).attr('data-name');

			if (click_text == '' || (typeof click_text == 'undefined')) {
				var link = jQuery(this).attr('href');
				if (link.indexOf('facebook') != -1) {
					click_text = 'Facebook';
				} else if (link.indexOf('twitter') != -1) {
					click_text = 'Twitter';
				} else if (link.indexOf('insta') != -1) {
					click_text = 'Instagram';
				} else if (link.indexOf('youtube') != -1) {
					click_text = 'Youtube';
				} else {
					click_text = 'Social Link';
				}
			}

			var eventData = {
				'event': 'social_media_clicks',
				'social_media_name': click_text,
				'destination_url': jQuery(this).attr('href'),
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks resident login CTA in the header on the website
	var residentLoginClick = function() {
		jQuery(residentLogin).on("click", function(e) {
			updateCurrentPageUrl();
			var eventData = {
				'event': 'resident_login',
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks resident login CTA in the header on the website
	var addressClick = function() {
		//jQuery(address).on("click", function(e) {
		jQuery(document).on("click", address, function(e) {	
			updateCurrentPageUrl();
			var eventData = {
				'event': 'address_click',
				'destination_url': jQuery(this).attr('href'),
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks on the Apply Now CTA present on home page, Specific Floor Plan Page
	var applyNowBtnClick = function() {
		jQuery(document).on("click", applyBtn, function(e) {
			updateCurrentPageUrl();
               
               var fpType = jQuery(this).attr('data-fp');
               var fpPrice = jQuery(this).attr('data-price');
               var fpSqr = jQuery(this).attr('data-sqft');

               if (typeof fpType == 'undefined') {
               	fpType = '';
               }
               if (typeof fpPrice == 'undefined') {
               	fpPrice = '';
               }
               if (typeof fpSqr == 'undefined') {
               	fpSqr = '';
               }

			var eventData = {
				'event': 'apply_now',
				'floor_plan_type': fpType,
				'price': fpPrice,
				'square_footage': fpSqr,
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks on the sub menu buttons on the gallery page
	var galleryFilterClick = function() {
			jQuery(document).on("click", gallery, function(e) {
				if (jQuery('.gallery').length) {
					var filterValue = jQuery(this).attr('data-value');
					if(filterValue == 'required'){
						filterValue = jQuery(this).text();
					}else if (typeof filterValue == 'undefined') {
						filterValue = jQuery(this).text();
						filterValue = filterValue.replace(/<(.|\n)*?>/g, '');
						filterValue = filterValue.replace(/\r?\n|\r/g, '');
						filterValue = filterValue.trim();
					}
					var eventData = {
						'event': 'gallery_filter',
						'click_text': filterValue
					};

					updateDataLayer(eventData);
					console.log(eventData);
				}

			});
	}

	//This event fires when the user clicks on the arrows on the gallery page to move back and forth in the gallery pictures.
	var galleryArrowClick = function() {

			setTimeout(function() {
				var galleryNavigationNext = '.mfp-arrow-right,.gallery .slick-next,.gallery .data-layer-gallery-next,.gallery .flex-next,.vbox-next',
					galleryNavigationPrev = '.mfp-arrow-left,.gallery .slick-prev,.gallery .data-layer-gallery-prev,.gallery .flex-prev,.vbox-prev';

				jQuery(document).on("click", galleryNavigationNext, function(e) {
					if (jQuery('.gallery').length){

						if (jQuery('.slider-wrap.mob').length < 1){
							var eventData = {
								'event': 'arrow_click',
								'click_text': 'Next'
							};

							updateDataLayer(eventData);
							console.log(eventData);
						}
					}
				});

				jQuery(document).on("click", galleryNavigationPrev, function(e) {
					if (jQuery('.gallery').length){
						if (jQuery('.slider-wrap.mob').length < 1){
						var eventData = {
							'event': 'arrow_click',
							'click_text': 'Previous'
						};

						updateDataLayer(eventData);
						console.log(eventData);
						}
					}
				});
			}, 100);

	}

	//This event fires when the user clicks on the map on the contact us page
	var contactMapClick = function() {
		jQuery(contactMap).on("click", function(e) {
			updateCurrentPageUrl();
			var eventData = {
				'event': 'map_interaction',
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks on the download brochure button on footer
	var downloadBrochureClick = function() {
		jQuery(downloadBrochureBtn).on("click", function(e) {
			
			var eventData = {
				'event': 'download_brochure_button_click',
				'page_url': currentPageUrl,
				'destination_url': jQuery(this).attr('href')
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event fires when the user clicks on the get direction button on the contact us page
	var getDirectionClick = function() {
		jQuery(getDirectionBtn).on("click", function(e) {

			var eventData = {
				'event': 'get_direction_click',
				'page_url': currentPageUrl,
				'destination_url': jQuery(this).attr('href')
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}


	//This event fires when the user clicks on the map filter buttons on the location page
	var mapFilterButtonClick = function() {
		jQuery(document).on("click", mapFilters, function(e) {	
			var eventData = {
				'event': 'map_filters',
				'page_url': currentPageUrl,
				'click_text': jQuery.trim(jQuery(this).text()),
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	// this event is for sightmap matrix
	var sightmapMatrixClick = function() {
		
		// Extract unit number from URL parameter ?unit=603
		var urlParams = new URLSearchParams(window.location.search);		
		var unitNUmber = urlParams.get('unit');
		
		
		var embed = new SightMap.Embed('sightmap');
		if(unitNUmber){
			embed.on('ready', function() {
				// Use the extracted unit number, convert to integer if it's a valid number
				var unitNumbers = parseInt(unitNUmber);
				embed.setUnitNumberMatches(unitNumbers);
			});
		}else{
			embed.on('ready', function() {
				//embed.locateUnitByUnitNumber();
			});
		}

		// Fired when a user selects the 'Calculate' call-to-action within the unit details modal.
            embed.on('metrics.unitDetails.calculate.click', function (event) {
                var unitID = event.data.unit.mapId
                var thisUnitData = {
                    'event': 'floorplan_sightmap_calculate_my_cost',
                    'unitId': event.data.unit.id,
                    'unitNumber': event.data.unit.unitNumber,
                    'unitNumberDisplay': event.data.unit.unitNumberDisplay,
                    'area': event.data.unit.area,
                    'areaDisplay': event.data.unit.areaDisplay,
                    'price': event.data.unit.price,
                    'priceDisplay': event.data.unit.priceDisplay,
                    'availableOn': event.data.unit.availableOn,
                    'availableOnDisplay': event.data.unit.availableOnDisplay,
                    'floorId': event.data.unit.floor.id,
                    'floorLabel': event.data.unit.floor.filterLabel,
                    'floorShortLabel': event.data.unit.floor.filterShortLabel,
                    'floorPlanId': event.data.unit.floorPlan.id,
                    'planName': event.data.unit.floorPlan.name,
                    'planBedrooms': event.data.unit.floorPlan.bedroomCount,
                    'planBathrooms': event.data.unit.floorPlan.bathroomCount
                }
                window.dataLayer.push(thisUnitData);
                console.log(thisUnitData);
            });

            // Fired when a user clicks to increment or decrement an optional expense occurrence within the calculator modal.
            embed.on('metrics.calculator.expense.click', function (event) {
                console.log(event);
                var unitID = event.data.unit.mapId
                var thisUnitData = {
                    'event': 'floorplan_sightmap_calculate_expense_click',
                    'unitId': event.data.unit.id,
                    'unitNumber': event.data.unit.unitNumber,
                    'unitNumberDisplay': event.data.unit.unitNumberDisplay,
                    'area': event.data.unit.area,
                    'areaDisplay': event.data.unit.areaDisplay,
                    'price': event.data.unit.price,
                    'priceDisplay': event.data.unit.priceDisplay,
                    'availableOn': event.data.unit.availableOn,
                    'availableOnDisplay': event.data.unit.availableOnDisplay,
                    'floorId': event.data.unit.floor.id,
                    'floorLabel': event.data.unit.floor.filterLabel,
                    'floorShortLabel': event.data.unit.floor.filterShortLabel,
                    'floorPlanId': event.data.unit.floorPlan.id,
                    'planName': event.data.unit.floorPlan.name,
                    'planBedrooms': event.data.unit.floorPlan.bedroomCount,
                    'planBathrooms': event.data.unit.floorPlan.bathroomCount,
                    'action': event.data.action,
                    'expenses': event.data.expenses
                }
                window.dataLayer.push(thisUnitData);
                console.log(thisUnitData);
            });

            // Fired when a user selects the 'Apply' call-to-action within the calculator modal.
              embed.on('metrics.calculator.apply.click', function (event) {
                 console.log(event);
                 var unitID = event.data.unit.mapId
                 var thisUnitData = {
                     'event': 'floorplan_sightmap_calculate_apply_click',
                     'unitId': event.data.unit.id,
                     'unitNumber': event.data.unit.unitNumber,
                     'unitNumberDisplay': event.data.unit.unitNumberDisplay,
                     'area': event.data.unit.area,
                     'areaDisplay': event.data.unit.areaDisplay,
                     'price': event.data.unit.price,
                     'priceDisplay': event.data.unit.priceDisplay,
                     'availableOn': event.data.unit.availableOn,
                     'availableOnDisplay': event.data.unit.availableOnDisplay,
                     'floorId': event.data.unit.floor.id,
                     'floorLabel': event.data.unit.floor.filterLabel,
                     'floorShortLabel': event.data.unit.floor.filterShortLabel,
                     'floorPlanId': event.data.unit.floorPlan.id,
                     'planName': event.data.unit.floorPlan.name,
                     'planBedrooms': event.data.unit.floorPlan.bedroomCount,
                     'planBathrooms': event.data.unit.floorPlan.bathroomCount,
                     'leaseTerm': event.data.leaseTerm,
                     'applyUrl': event.data.applyUrl,
                     'applyLabel': event.data.applyLabel,
                     'moveInDate': event.data.moveInDate
                 }
                 window.dataLayer.push(thisUnitData);
                 console.log(thisUnitData);
             });

		
	}

	// Load SightMap API dynamically - prevents multiple insertions
	var sightMapAPILoading = false;
	var sightMapAPILoaded = false;
	var floorplanMapEmbedInitialized = false;
	var initializedIframeSrc = null;
	var initializedUnitNumber = null;

	var loadSightMapAPI = function() {
		return new Promise(function(resolve, reject) {
			// Check if SightMap is already loaded
			if (typeof SightMap !== 'undefined' || sightMapAPILoaded) {
				console.log('SightMap API already loaded');
				resolve();
				return;
			}

			// Check if script is already being loaded
			if (sightMapAPILoading) {
				console.log('SightMap API already loading, waiting...');
				// Wait for existing load to complete
				var checkLoaded = setInterval(function() {
					if (typeof SightMap !== 'undefined' || sightMapAPILoaded) {
						clearInterval(checkLoaded);
						resolve();
					}
				}, 100);
				return;
			}

			// Check if script tag already exists
			var existingScript = document.querySelector('script[src="https://sightmap.com/embed/api.js"]');
			if (existingScript) {
				console.log('SightMap API script tag already exists');
				sightMapAPILoading = true;
				
				existingScript.onload = function() {
					sightMapAPILoaded = true;
					sightMapAPILoading = false;
					console.log('SightMap API loaded successfully');
					resolve();
				};
				
				existingScript.onerror = function() {
					sightMapAPILoading = false;
					console.error('Failed to load SightMap API');
					reject(new Error('SightMap API failed to load'));
				};
				return;
			}

			// Mark as loading
			sightMapAPILoading = true;

			// Create script element
			var script = document.createElement('script');
			script.src = 'https://sightmap.com/embed/api.js';
			script.async = true;
			script.id = 'sightmap-api-script'; // Add ID for easy identification
			
			script.onload = function() {
				sightMapAPILoaded = true;
				sightMapAPILoading = false;
				console.log('SightMap API loaded successfully');
				resolve();
			};
			
			script.onerror = function() {
				sightMapAPILoading = false;
				console.error('Failed to load SightMap API');
				reject(new Error('SightMap API failed to load'));
			};
			
			// Append to head
			document.head.appendChild(script);
		});
	}

	var initializeFloorplanMapEmbed = function() {
		var iframe = document.querySelector('#rfwa-fee-calc-popup iframe');
		
		if (iframe) {
			// Get current iframe src (original, before we add parameters)
			// Use getAttribute to get the original href value, or src if attribute not available
			var iframeSrc = iframe.getAttribute('src') || iframe.src || '';
			
			// Extract unit_number from URL to detect different units
			var getUnitNumber = function(src) {
				if (!src) return null;
				try {
					var url = new URL(src, window.location.href);
					return url.searchParams.get('unit_number');
				} catch(e) {
					// Fallback: try regex if URL constructor fails
					var match = src.match(/[?&]unit_number=([^&]*)/);
					return match ? match[1] : null;
				}
			};
			
			var currentUnitNumber = getUnitNumber(iframeSrc);
			
			// Check if this is a different unit (unit_number changed)
			if (floorplanMapEmbedInitialized && initializedUnitNumber !== null && currentUnitNumber !== null && currentUnitNumber !== initializedUnitNumber) {
				// Different unit number detected, reset flag to allow re-initialization
				floorplanMapEmbedInitialized = false;
				initializedIframeSrc = null;
				initializedUnitNumber = null;
			}
			
			// Prevent multiple initializations for the same unit
			if (floorplanMapEmbedInitialized && currentUnitNumber !== null && currentUnitNumber === initializedUnitNumber) {
				return;
			}
			
			// Set flag immediately to prevent concurrent calls
			floorplanMapEmbedInitialized = true;
			
			if (iframeSrc) {
				var needsUpdate = false;
				var updatedSrc = iframeSrc;
				var separator = updatedSrc.indexOf('?') !== -1 ? '&' : '?';
				
				// Add enable_api=1 if not present
				if (updatedSrc.indexOf('enable_api=1') === -1) {
					updatedSrc = updatedSrc + separator + 'enable_api=1';
					needsUpdate = true;
					separator = '&';
				}
				
				// Add origin parameter if not present
				if (updatedSrc.indexOf('origin=') === -1) {
					var currentOrigin = window.location.origin;
					updatedSrc = updatedSrc + separator + 'origin=' + encodeURIComponent(currentOrigin);
					needsUpdate = true;
				}
				
				if (needsUpdate) {
					iframe.src = updatedSrc;
				}
			}
			
			if (!iframe.id) {
				iframe.id = 'rfwa-fee-calc';
			}
			
			// Check if SightMap is available, if not load it first
			if (typeof SightMap !== 'undefined' && SightMap.Embed) {
				var embed = new SightMap.Embed('rfwa-fee-calc');
				setupFloorplanMapEvents(embed);
				// Store the original iframe src and unit number that was initialized
				initializedIframeSrc = iframeSrc;
				initializedUnitNumber = currentUnitNumber;
			} else {
				loadSightMapAPI().then(function() {
					var embed = new SightMap.Embed('rfwa-fee-calc');
					setupFloorplanMapEvents(embed);
					// Store the original iframe src and unit number that was initialized
					initializedIframeSrc = iframeSrc;
					initializedUnitNumber = currentUnitNumber;
				}).catch(function(error) {
					console.error('Failed to load SightMap API:', error);
					// Reset flag on error so it can be retried
					floorplanMapEmbedInitialized = false;
					initializedIframeSrc = null;
					initializedUnitNumber = null;
				});
			}
		} else {
			console.log('iframe not found');
			// Reset flag if iframe not found so it can be retried when iframe appears
			floorplanMapEmbedInitialized = false;
			initializedIframeSrc = null;
			initializedUnitNumber = null;
		}
	}


	var setupFloorplanMapEvents = function setupFloorplanMapEvents(embed) {
		window.dataLayer = window.dataLayer || [];
		
		//Edited on Sep 01, 2025
		//Fired when a user clicks to increment or decrement an optional expense occurrence within the calculator modal.
		embed.on('metrics.calculator.expense.click', function (event) {
			var unitID = event.data.unit.mapId;
			var floorPlanName = event.data.unit.floorPlan ? event.data.unit.floorPlan.name : '';
			const match = floorPlanName.match(/"name":"([^"]+)"/);
			floorPlanName = match ? match[1] : null;
			
			var thisUnitData = {
				'event': 'floorplan_calculator_expense_click',
				'floor_plan_unit_number': event.data.unit.unitNumber,
				'floor_plan_name': floorPlanName,
				'area': event.data.unit.area,
				'price': '$' + event.data.unit.price,
				'availableOn': event.data.unit.availableOn,
				'floorplan_monthly_price': jQuery('input[name="hidden_monthly_fee"]').val(),
				'page_url': currentPageUrl,
				'action': event.data.action
			}
			window.dataLayer.push(thisUnitData);
			console.log(thisUnitData);
		});
	
		//Fired when a user selects the 'Apply' call-to-action within the calculator modal.
		embed.on('metrics.calculator.apply.click', function (event) {
		   var unitID = event.data.unit.mapId;
		   var floorPlanName = event.data.unit.floorPlan ? event.data.unit.floorPlan.name : '';
		   const match = floorPlanName.match(/"name":"([^"]+)"/);
		   floorPlanName = match ? match[1] : null;
		   
		   var thisUnitData = {
			   'event': 'floorplan_calculate_apply_click',
			   'floor_plan_unit_number': event.data.unit.unitNumber,
			   'floor_plan_name': floorPlanName,
			   'area': event.data.unit.area,
			   'price':  '$' + event.data.unit.price,
			   'availableOn': event.data.unit.availableOn,
			   'floorplan_monthly_price': jQuery('input[name="hidden_monthly_fee"]').val(),
			   'page_url': currentPageUrl
		   }
		   window.dataLayer.push(thisUnitData);
		   console.log(thisUnitData);
	   });
	}

	 //This event fires after user creates an account 
	 var initialize = function(){
		updateCurrentPageUrl();
        if (currentPageUrl.indexOf('broadandwashington') != -1 || currentPageUrl.indexOf('atwellonspring') != -1 || currentPageUrl.indexOf('liveatleesquare') != -1){
			if (currentPageUrl.indexOf('floor-plans') != -1){
				var eventData = {
							'event': 'floor_plan_page_view',
					};

					updateDataLayer(eventData);
					console.log(eventData);

			}
		}
		jQuery(document).on("click", '.rfwa-export-pdf-link', function(e) {	
			var eventData = {
				'event': 'export_click',
				'page_url': currentPageUrl
			};

			updateDataLayer(eventData);
			console.log(eventData);
		});
		  /***Datalayer events **/
		  jQuery(document).on("click", '.rfwa-fee-calculator', function(e) {	

			// Remove existing hidden input if it exists
			jQuery('body input[name="hidden_monthly_fee"]').remove();
	   
			// Create a new hidden input and append it to the form
			jQuery('<input>')
				.attr('type', 'hidden')
				.attr('name', 'hidden_monthly_fee')
				.val(jQuery(this).attr('data-monthly-price'))
				.appendTo('body');
	   
				   var eventData = {
					   'event': 'floorplan_calculate_my_cost',
					   'floor_plan_name':  jQuery(this).attr('data-fp-name') ? jQuery(this).attr('data-fp-name') : '',
					   'floor_plan_unit_number': jQuery(this).attr('data-unit') ? jQuery(this).attr('data-unit') : '',
					   'price': jQuery(this).attr('data-price') ? jQuery(this).attr('data-price') : '',
					   'area': jQuery(this).attr('data-area') ? jQuery(this).attr('data-area') : '',
					   'availableOn': jQuery(this).attr('data-available') ? jQuery(this).attr('data-available') : '',
			   		  'floorplan_monthly_price': jQuery(this).attr('data-monthly-price') ? jQuery(this).attr('data-monthly-price') : '',
					  'page_url': currentPageUrl
				   };
			window.dataLayer = window.dataLayer || [];
			window.dataLayer.push(eventData);
			console.log(eventData);
			setTimeout(initializeFloorplanMapEmbed, 300);
		 });

    }

	return {
		initialize:initialize,
		scheduleTourClick: scheduleTourClick,
		//fpScheduleTourClick:fpScheduleTourClick,	
		scheduleTourIconClick: scheduleTourIconClick,
		virtualTourButtonClick: virtualTourButtonClick,
		fpResultsPageCtaClick: fpResultsPageCtaClick,
		fpDetailsPageCtaClick: fpDetailsPageCtaClick,
		fpFilterClick: fpFilterClick,
		fpFilterSubmitClick: fpFilterSubmitClick,
		fpFilterQuickSearchWidgetClick: fpFilterQuickSearchWidgetClick,
		headerNavClick: headerNavClick,
		hamburgerNavClick: hamburgerNavClick,
		footerLinksClick: footerLinksClick,
		contactButtonClick: contactButtonClick,
		phoneNumberClick: phoneNumberClick,
		socialMediaClick: socialMediaClick,
		residentLoginClick: residentLoginClick,
		addressClick: addressClick,
		applyNowBtnClick: applyNowBtnClick,
		galleryArrowClick: galleryArrowClick,
		galleryFilterClick: galleryFilterClick,
		contactMapClick: contactMapClick,
		getDirectionClick: getDirectionClick,
		downloadBrochureClick: downloadBrochureClick,
		mapFilterButtonClick: mapFilterButtonClick,
		 sightmapMatrixClick:sightmapMatrixClick
	};

})();

(function(init) {
		// The global jQuery object is passed as a parameter
		init(window.jQuery, window, document);
	}
	(function(jQuery, window, document) {
		// The jQuery is now locally scoped
		// Listen for the jQuery ready event on the document
		jQuery(function() {
			mainApp.initialize();
			mainApp.scheduleTourClick();
			mainApp.scheduleTourIconClick();
			//mainApp.fpScheduleTourClick();
			mainApp.virtualTourButtonClick();
			mainApp.fpFilterQuickSearchWidgetClick();
			mainApp.headerNavClick();
			mainApp.hamburgerNavClick();
			mainApp.footerLinksClick();
			mainApp.contactButtonClick();
			mainApp.phoneNumberClick();
			mainApp.socialMediaClick();
			mainApp.residentLoginClick();
			mainApp.applyNowBtnClick();
			mainApp.addressClick();
			mainApp.downloadBrochureClick();

			// if the page is a sightmap page, then fire the sightmapMatrixClick event
			if(jQuery('#sightmap').length) {
			 mainApp.sightmapMatrixClick();
			}

			//if (jQuery('.floor-plans').length || jQuery('.floorplan-detail').length || jQuery('.apartments').length || jQuery('.sightmap').length) {
				mainApp.fpResultsPageCtaClick();
				mainApp.fpDetailsPageCtaClick();
				mainApp.fpFilterClick();
				mainApp.fpFilterSubmitClick();
				//console.log('Enter floorplans1');
			//}

				mainApp.galleryArrowClick();
				mainApp.galleryFilterClick();

			if (jQuery('.contact').length || jQuery('.get-in-touch').length) {
				mainApp.contactMapClick();
				mainApp.getDirectionClick();
			}

			if (jQuery('.neighborhood').length) {
				mainApp.mapFilterButtonClick();
			}

		});




	}));