/**
 * 
 * Data Layer Events functions
 * @author QBurst
 * Version 1
 * 
 **/

var mainApp = (function() {
	"use strict"
	window.dataLayer = window.dataLayer || [];

	var currentPageUrl = window.location.href,
		tourBtnAll = 'li.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 = 'li.data-layer-event-virtual-tour a,a.data-layer-event-virtual-tour',
		fpBtn = 'button.data-layer-event-fp-results-cta,a.data-layer-event-fp-results-cta',
		fpBtnDetailsPage = 'button.data-layer-event-fp-detail-cta,a.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',
		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',
		contactBtn = '.data-layer-event-contact-btn a,a.data-layer-event-contact-btn,button.data-layer-event-contact-btn',
		phone = 'a.tel-link, li.dni_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);
	}

	//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) {
			//jQuery(tourBtnAll).on( "click", function(e) {

			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().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) {

			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': 'Mobile Icon',
				'page_url': currentPageUrl,
				'placement': placement,
				'destination_url': jQuery(this).attr('href'),
			};

			updateDataLayer(eventData);
			console.log(eventData);

		});
	}

	//This event should fire when a user clicks the "Schedule a Tour" Button on the floor plan page.
	// var fpScheduleTourClick =  function(){
	//    jQuery(document).on( "click",tourBtnFp, function(e) {
	// 		var eventData = {
	// 			'event' : 'schedule_a_tour_floor_plan',
	// 			'click_text': jQuery(this).html(),
	// 			'page_url': currentPageUrl,
	// 			'destination_url' : jQuery(this).attr('href'),
	// 			'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);

	// 	});
	// }


	//virtual tour menu click
	var virtualTourButtonClick = function() {
		jQuery(tourBtnVirtualTour).on("click", function(e) {
			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) {
			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) {

				var click_text = jQuery(this).text().replace(/<(.|\n)*?>/g, '');
				click_text = click_text.replace(/\r?\n|\r/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);

		});
	}

	//Floorplan CTA button click from detail page
	var fpDetailsPageCtaClick = function() {
		jQuery(document).on("click", fpBtnDetailsPage, function(e) {
			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 ((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();

			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) {

			var click_text = jQuery(this).text();
			    click_text = click_text.replace( /\r?\n|\r/g, '');
                   click_text = click_text.trim();

			    if(click_text == ''){
			    		click_text = jQuery(this).attr('data-name');
			    }
			var eventData = {
				'event': 'header_nav',
				'header_name': click_text,
				'page_url': currentPageUrl
			};

			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) {
			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.trim();
			}

			var eventData = {
				'event': 'hamburger_nav',
				'click_text': click_text,
				'page_url': currentPageUrl
			};

			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) {

			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.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(contactBtn).on("click", function(e) {

			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) {

			if(jQuery(this).attr('href')){
				var click_text = jQuery(this).attr('href');
				click_text = click_text.replace('tel:', '');
		    }

			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) {

			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 Logo';
				} else if (link.indexOf('twitter') != -1) {
					click_text = 'Twitter Logo';
				} else if (link.indexOf('insta') != -1) {
					click_text = 'Instagram Logo';
				} 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) {

			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) {

			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) {
			//jQuery(applyBtn).on( "click", function(e) {
               
               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) {

			var filterValue = jQuery(this).attr('data-value');
			if(filterValue == 'required'){
				filterValue = jQuery(this).text();
			}
			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 = '.gallery .slick-next,.gallery .data-layer-gallery-next,.gallery .flex-next',
				galleryNavigationPrev = '.gallery .slick-prev,.gallery .data-layer-gallery-prev,.gallery .flex-prev';

			jQuery(document).on("click", galleryNavigationNext, function(e) {

				var eventData = {
					'event': 'arrow_click',
					'click_text': 'Next'
				};

				updateDataLayer(eventData);
				console.log(eventData);
			});

			jQuery(document).on("click", galleryNavigationPrev, function(e) {

				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) {

			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);

		});
	}

	return {
		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
	};

})();

(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.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 (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');
			}

			if (jQuery('.gallery').length) {
				mainApp.galleryArrowClick();
				mainApp.galleryFilterClick();
			}

			if (jQuery('.contact').length || jQuery('.get-in-touch').length) {
				mainApp.contactMapClick();
				mainApp.getDirectionClick();
			}

			if (jQuery('.neighborhood').length) {
				mainApp.mapFilterButtonClick();
			}

		});




	}));