/* ==========================================================================
 Project:     Georgia Farm Bureau
 Date:        05/16/17 - File created	
 Created by:  Third Wave Digital (www.thirdwavedigital.com)
 ========================================================================== */

var cmsSite = function () {

	/* ==========================================================================
	   Init
    ========================================================================== */

	// All Pages
	var $html = $("html");

	mainMenu();
	searchMenu(768); // (Breakpoint to close)
	cmsResponsiveElements();

	// Homepage
	if ($('.home').length) {
		// Individual panels
		homepagePanels();
	};

	// Interior 2 column
	if ($('.submenu').length) {
		// Rearrange content
		moveAsideFeatures();
		// Submenu
		subMenu();
	};

	// Slideshow?
	if ($(".slideshow").length) {
		$(".slideshow").closest(".col-sm-8").each(function (index, item) {
			$(this).find(".row").wrapAll('<div class="slideshow-wrapper" />').contents().unwrap();
			$(this).find(".slideshow-wrapper").attr("id", "slideshow-0" + index + "");
			$(this).find(".slideshow-wrapper [class*='col-']").contents().unwrap();
			$(this).find(".slideshow-wrapper p").contents().unwrap();
			$(this).find("p").remove();
			$(this).html(function (i, h) {
				return h.replace(/&nbsp;/g, '');
			});

			$(this).find(".slideshow-wrapper").append('<div class="slick-controls" role="toolbar" aria-label="Slideshow Controls" aria-controls="slideshow-0' + index + '"><button type="button" class="slick-prev" aria-label="Previous Slide"><span class="angle angle-left" aria-hidden="true"></span></button><button type="button" class="slick-next" aria-label="Next Slide"><span class="angle angle-right" aria-hidden="true"></span></button></div>');

			$(this).find(".slideshow-wrapper").slick({
				arrows: false,
				autoplay: false,
				autoplaySpeed: 3000,
				dots: true,
				infinite: true,
				slide: 'img',
				useTransform: true,
				useCSS: true,
				cssEase: 'ease-out',
				adaptiveHeight: true,
				centerPadding: '0px'
			});

			$(this).find(".slick-prev").on("click", function (e) {
				$("#slideshow-0" + index + "").slick("prev");
			})

			$(this).find(".slick-next").on("click", function (e) {
				$("#slideshow-0" + index + "").slick("next");
			})
		})
	}

	// Commodities
	if ($(".commodities-map #map").length) commoditiesMap();
	if ($(".commodities-search").length) commoditiesSearch();
	if ($(".counties-search").length) countiesSearch();

	/* ==========================================================================
	   Search
    ========================================================================== */

	function searchMenu(close_num) {
		var $header = $(".header-wrapper"),
			$search = $(".search-wrapper"),
			searchOpen = false;

		$header.find(".btn-showsearch").on("click", function (e) {
			e.stopPropagation();
			if (!$html.hasClass("search-open")) {
				searchOpen = true;
				$header.find(".btn-showsearch").toggleClass("active");
				$header.find(".btn-showsearch").find("span").toggleClass("fa-search fa-times");
				$search.removeAttr("tabindex");
				$search.attr({ "aria-hidden": "false" });
				$search.find("input").focus();
				$html.addClass("search-open");
				// Keyboard navigation
				$search.find("input, button").removeAttr("tabindex");
			} else {
				closeSearch();
			};
		});

		$(document).keyup(function (e) {
			if (e.keyCode === 27 && $header.find(".btn-showsearch").hasClass("active")) {
				closeSearch();
			};
		});

		// Close search when resizing
		$(window).resize(function () {
			if (window.innerWidth < close_num && searchOpen == true) {
				closeSearch();
			};
		}).resize();

		// Keyboard navigation
		$search.find("input, button").attr("tabindex", -1);

	};

	function closeSearch() {
		var $header = $(".header-wrapper"),
			$search = $(".search-wrapper"),
			searchOpen = false;

		$header.find(".btn-showsearch").removeClass("active");
		$search.attr({ "tabindex": "-1", "aria-hidden": "true" });
		$html.removeClass("search-open");
		$(".btn-showsearch").find("span").removeClass("fa-times").addClass("fa-search");

		// Keyboard navigation
		$search.find("input, button").attr("tabindex", -1);
	};

	/* ==========================================================================
	    Main menu
	========================================================================== */

	function mainMenu() {
		var $mainmenu = $("header .mainmenu"),
			$quicklinks = $("header .quicklinks"),
			$dropdown = $("header .mainmenu-dropdown");

		/* Main dropdown */
		var closeDropdown = function(e) {
			$html.removeClass("mainmenu-dropdown-open");
			$dropdown.removeClass("active");
		}
			
		$mainmenu.find(".btn-toggle-mainmenu").on("click",function(e) {
			$html.toggleClass("mainmenu-dropdown-open");
			$dropdown.toggleClass("active");
		})

		$(document).keyup(function (e) {
			if (e.keyCode === 27 && $html.hasClass("mainmenu-dropdown-open")) {
				closeDropdown();
			};
		})

		$dropdown.find(".col-6:last-child li:last-child a").on("blur",function(e) {
			closeDropdown();
		})

		/* Smaller dropdowns on quicklinks */
		if (!hasTouchSupport()) {          
			// Use hover states; it's not a touch device
			$quicklinks.find("li:has(ul)").hover(
			function () {
			    $("ul:first", this).addClass("active").attr("aria-hidden","false");
			}, 
			function () {
			    $("ul:first", this).removeAttr("class").attr("aria-hidden","true");
		   });	
		} else {
			// Use the click event 
			$quicklinks.find("li:has(ul) > a").on("click",function(e) {
				e.preventDefault();
				e.stopPropagation();
				var $thisdropdown = $(this).parent().find("ul");
				$quicklinks.find("ul").not($thisdropdown).removeClass("active");
				$quicklinks.find("li").not($(this).parent()).removeClass("active");
				$(this).parent().toggleClass("active");
				$thisdropdown.toggleClass("active");  
				if ($thisdropdown.hasClass("active")) {
					$thisdropdown.attr("aria-hidden","false");
				} else {
					$thisdropdown.attr("aria-hidden","true");
				};
			});
		  
			$(document).click(function(){
				closeDropdowns();
			});
		};
		
		function closeDropdowns() {
			$quicklinks.find("ul").removeClass("active").attr("aria-hidden","true");
		   	$quicklinks.find("li").removeClass("active");
		};
	};

	/* ==========================================================================
	   Submenu
	========================================================================== */

	function subMenu() {
		var $aside = $("article aside"),
			$submenu = $(".submenu"),
			original_html = $aside.find(".btn-toggle-submenu").html();

		// Show/hide the submenu in the <aside> element
		$aside.find(".btn-toggle-submenu").click(function (e) {
			if ($submenu.hasClass("d-none")) {
				$submenu.removeClass("d-none");
				$(this).html("<span class='fas fa-times-circle' aria-hidden='true'></span> Close").addClass("active");
			} else {
				$submenu.addClass("d-none");
				$(this).html(original_html).removeClass("active");
			}
		});

		// Add class to subs with subs
		$submenu.find("li:has(ul)").addClass("has-ul");

		// Submenu functionality
		$submenu.find(".btn-toggle-subs").on("click", function (e) {
			// Depth?
			var depth = $(this).parents("ul").length;
			// Swap icons
			if (depth == 1) {
				$submenu.find("span").not($(this).find("span")).removeClass("fa-times").addClass("fa-chevron-down");
			} else {
				$submenu.find("ul:nth-of-type(" + depth + ") span").not($(this).find("span")).removeClass("fa-chevron-down").addClass("fa-times");
			};
			$(this).find("span").toggleClass("fa-chevron-down fa-times");
			// Subs
			var $thisdropdown = $(this).parent().find("ul:first");
			$submenu.find("ul:nth-of-type(" + depth + ")").not($thisdropdown).removeClass("d-block").attr("aria-hidden", "true");
			$submenu.find("li").not($(this).parent()).removeClass("d-block");
			if (!$thisdropdown.hasClass("d-block")) {
				$thisdropdown.addClass("d-block").attr("aria-hidden", "false");
			} else {
				$thisdropdown.removeClass("d-block").attr("aria-hidden", "true");
			};
			$(this).parent().toggleClass("d-block");
		});

		// Show the active menu item and it's parents
		$submenu.find(".active").parents("ul").not('.submenu').addClass("d-block").attr("aria-hidden", "false");
		// Toggle the parent's icons
		$submenu.find(".show").prev().find("span").removeClass("fa-chevron-down").addClass("fa-times");
	};

	/* ==========================================================================
	    Move aside (.moveable) elements on resize
	========================================================================== */

	function moveAsideFeatures() {
		var $aside = $("article aside"),
			$content = $(".content-wrapper"),
			$aside_moveable = $("aside .moveable-content"),
			breakpoint;

		$(window).resize(function () {
			// xs
			if ($(window).width() < 768 && breakpoint != "xs") {
				$aside_moveable.insertAfter($content).addClass("moved");
				breakpoint = "xs";
			};
			// sm
			if ($(window).width() < 992 && $(window).width() >= 768 && breakpoint != "sm") {
				$aside_moveable.appendTo($aside).removeClass("moved");
				breakpoint = "sm";
			};
		}).resize();
	};

	/* ==========================================================================
		Homepage panels
	 ========================================================================== */

	function homepagePanels() {
		var $hero_wrapper = $(".hero-wrapper"),
			$news_wrapper = $(".news-wrapper"),
			$instagram_wrapper = $(".instagram-wrapper"),
			breakpoint;

		// Scroll
		$hero_wrapper.find(".btn-scrolldown").on("click", function (e) {
			var offset = 0;
			var $target = $(".membership-wrapper");
			$('html,body').animate({
				scrollTop: $target.offset().top - offset
			}, 500);
		});

		// News slideshow
		var $xs_slideshow = $news_wrapper.find("ul").clone();
		$xs_slideshow.removeClass().appendTo(".news-wrapper .col-12").addClass("d-md-none news-slideshow");

		$(window).resize(function () {
			// xs
			if (window.innerWidth < 768 && breakpoint != "xs") {
				$news_wrapper.find(".news-slideshow").slick({
					autoplay: false,
					arrows: false,
					dots: false,
					infinite: true,
					slide: '.entry-item',
					useTransform: true,
					useCSS: true,
					cssEase: 'ease-out',
					centerMode: true,
					centerPadding: '0px'
				});
				breakpoint = "xs";
			}
			// sm
			if (window.innerWidth >= 768 && breakpoint != "sm") {
				if ($news_wrapper.find(".news-slideshow").hasClass("slick-initialized")) $news_wrapper.find(".news-slideshow").slick("unslick");
				breakpoint = "sm";
			}
		}).resize();

		$news_wrapper.find(".slick-prev").on("click", function (e) {
			e.preventDefault();
			$news_wrapper.find(".news-slideshow").slick('prev');
		});
		$news_wrapper.find(".slick-next").on("click", function (e) {
			e.preventDefault();
			$news_wrapper.find(".news-slideshow").slick('next');
		});

		// Instagram wrapper
		$.ajax({
			url: "/skins/gfb/includes/home/com/functions.cfc?method=instaGraph&returnformat=plain",
			type: "POST",
			dataType: "json",
			success: function (data) {
				for (x in data.data) {
					var $li = '<li><a href="' + data.data[x].permalink + '" target="_blank" aria-label="Instagram Post"><img src="' + data.data[x].media_url + '" alt="' + data.data[x].caption + '"></a></li>';
					if (data.data[x].media_type == "VIDEO") {
						var $li = '<li><video controls poster="' + data.data[x].thumbnail_url + '"><source src="' + data.data[x].media_url + '" type="video/mp4" title="' + data.data[x].caption + '"></source></video></li>';
					}
					$instagram_wrapper.find("ul").append($li);
				}
			},
			error: function (request, error) {
				$instagram_wrapper.find("ul").remove();
			}
		})
	};

	/* ==========================================================================
		CMS responsive elements
	 ========================================================================== */

	function cmsResponsiveElements() {
		$(".content-wrapper").find("table").not(".dataTable").wrap("<div class='table-responsive'/>")
	};

	/* ==========================================================================
	   Utils
    ========================================================================== */

	function hasTouchSupport() {
		var check = false;

		if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) {
			$html.addClass("has-touch");
			check = true;
		};
		return check;
	};

	hasTouchSupport();

	/* ==========================================================================
	   Commodities map
	========================================================================== */
	
	function commoditiesMap() {
		// Init map
	    var map = new google.maps.Map(document.getElementById('map'));
	    var bounds = new google.maps.LatLngBounds();
	    
	 	// Add markers
	 	for (i = 0; i < markers.length; i++) {
			var data = markers[i];
	        var marker = new MarkerWithLabel({
		         icon: {url: '/img/map-marker.png'},
		         size: new google.maps.Size(15,20),
	             position: new google.maps.LatLng(data.lat,data.lon),
				 map: map,
				 labelContent: data.labelContent,
				 labelAnchor: new google.maps.Point(0, 40),
				 labelClass: "marker-label"
	         });
	        // Add map bounds
		    bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lon));
		   		   	
			// Add click handler
			(function (marker, data) {
		        google.maps.event.addListener(marker, "click", function (e) {
		            var locationURL = data.labelURL;
		            window.location.href = locationURL;
		        });
		    })(marker, data);
	   }
	   
	   	// Fit map bounds around markers
		map.fitBounds(bounds);
	    
	    // Init select pickers
		$("select").select2();


		
		/* 
		Show first 6
		$(".location:gt(5)").addClass("hidden");
		
		// Show x amount
		$("#locations-show").on("change",function(e) {
			var val = $(this).val();
			if (val == "All") val = $(".location").length;
			$(".location").addClass("hidden");
			$(".location:lt("+val+")").removeClass("hidden").addClass("animated fadeInUp").one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
				$(this).removeClass("animated fadeInUp");
			});
		});
		
		// Create searchable array
		var facilities = [];
		$(".location").each(function(index,value) {
			var fName = $(this).find("h2").text();
			var fAddress  = $(this).find("address").text();
			var fIndex = index;
			facilities.push({fName: fName, fAddress: fAddress, fIndex: fIndex});
		});
		
		// Search it on keyup
		$("#locations-search").on("keyup",function(e) {
			$(".location").addClass("hidden");
			var keyword = $(this).val();
			$.each(facilities, function (index, value) {
				if (((value.fName.search(new RegExp(keyword,"i")) != -1 ) || (value.fAddress.search(new RegExp(keyword,"i")) != -1))) {
					$(".location").eq(value.fIndex).removeClass("hidden");
				};
			});
			if (keyword == "") $(".location").removeClass("hidden");
		});
		*/

	};
	
	/* ==========================================================================
	   Commodities search
	========================================================================== */
	
	function commoditiesSearch() {
		// Init select pickers
		$(".gfb-search select").find("option:contains('South Georgia'), option:contains('Online Store')").after("<optgroup />");
		$(".gfb-search select").select2({
			placeholder: "Search...",
			size: 40,
			width: "100%"
		});
		
		$(".gfb-search select").on("change",function(e) {
			var selected = $(this).find("option:selected").val();
			location.href = selected;
		});
	};

	/* ==========================================================================
	   County Search
	========================================================================== */

	function  countiesSearch(){
		// Init select pickers
 		$(".gfb-search select").select2({
			placeholder: "Select a County",
			size: 40,
			width: "100%",
			eleemnt: 'body'
		});
		
	 
		$(".select-county").on("change",function(e) {
			var val = $(this).val();
			$(".counties").addClass("d-none").each(function(e) {
				if($(this).data("county") == val) $(this).removeClass("d-none");
			});
		});
	}
};

$(document).ready(function () {

	cmsSite();

}); 