﻿/* Author: 

*/
//Store Locator Modules
$(document).ready(function(){
	var $storeLocator = $("#store-locator");
	if($storeLocator.length){
		//Replaces tooltip
		(function(){
			var $storeLocatorRight = $("#store-locator-right", $storeLocator);
			var $storeLocatorTooltip = $("<div class='tooltip'></div>").hide().appendTo($storeLocatorRight);
			var halfWidth = $storeLocatorRight.width()*.5;
			$storeLocatorRight.find('a').each(function(){
				var $this = $(this);
				$this.data('store-locator-text', $this.attr('title'));
			}).mouseover(onStoreOver).removeAttr('title');
			function onStoreOver(e){
				var $this = $(this).addClass('hover').siblings('a').removeClass('hover').end();
				var position = $this.position();
				var midPos = position.left + 12;
				$storeLocatorTooltip.show().text($this.data('store-locator-text')).css({
					top: position.top + 4,
					left: midPos + ((midPos > halfWidth)?-$storeLocatorTooltip.outerWidth():0)
				});
			}
		})();
		
		//Postcode Search
		//TODO Build it
		(function(){
			var AJAX_URL = "/cmspages/storelocator.aspx";
			$("#store-locator-postcode", $storeLocator).show();
			$(".store-locator-or", $storeLocator).show();
			var $input = $("#store-locator-input", $storeLocator);
			var $radio = $("input[name=\"postcode-country\"]", $storeLocator);
			var $submit = $("#store-locator-submit", $storeLocator).removeAttr('disabled');
			var $error = $("<label class=\"store-locator-error\" for=\"store-locator-input\" />").insertAfter($submit).hide();
			var originalValue = $submit.val();
			var $form = $($input[0].form).submit(onStoreLocatorSubmit);
			var submitting = false;
			
			var $popupContainer = $("<div id=\"store-locator-popup\" />").append("<div class=\"store-locator-popup-top\"></div><div class=\"store-locator-popup-content\"><div class=\"store-locator-popup-header\"><h2>Your nearest Bose Stores</h2></div></div><div class=\"store-locator-popup-bottom\"></div>").appendTo("body").hide();
			var $closeLink = $("<a>×</a>").appendTo($(".store-locator-popup-header", $popupContainer)).click(function(e){
				e.preventDefault();
				$.fancybox.close();
			});
			var $storesContainer = $("<div id=\"store-locator-popup-main\" />").appendTo($(".store-locator-popup-content", $popupContainer));
			$("<a href=\"#\" class=\"general-btn\"><span class=\"slide\">Find another store &raquo;</span></a>").appendTo($(".store-locator-popup-content", $popupContainer)).click(onAllBoseStoresClick);
			
			var $fancyboxLink = $("<a />").appendTo('body').hide().fancybox({
				type : "inline",
				href : "#store-locator-popup",
				content : $popupContainer,
				showCloseButton : false,
				padding: 0,
				width : 420,
				scrolling : 'no',
				onClosed : onFancyboxClosed
			});
			
			function onStoreLocatorSubmit(e){
				e.preventDefault();
				if(submitting) return;
				if(!validateInput()) return;
				submitting = true;
				$input.blur();
				$submit.val('Finding...').attr('disabled', 'disabled').css({
					'opacity': .5,
					'cursor' : 'default'
				});
				$.ajax({
					url : AJAX_URL,
					success : onAjaxSuccess,
					error : onAjaxError,
					complete : onAjaxComplete,
					dataType : "json",
					data : {
						postcode : $input.val(),
						country : $radio.filter(":checked").val()
					}
				});
				onAjaxComplete();
			}
			
			/*
				data.stores {
					href : url,
					name : string,
					streetAddress1 : string,
					streetAddress2 : string,
					streetAddress3 : string,
					phone : string,
					email : email
				}
			*/
			function onAjaxSuccess(data, textStatus, jqXHR){
				if(data && data.validPostcode && data.stores && data.stores.length){
					$storesContainer.empty();
					for(var i = 0; i < data.stores.length; i++){
						var store = data.stores[i];
						var $store = $("<div class=\"store-locator-popup-item clearfix\"></div>");
						$store.append("<h2><a href=\""+store.href+"\">"+store.name+"</a></h2>");
						var $left = $("<div class=\"half-column\" />").appendTo($store);
						var $right = $("<div class=\"half-column\" />").appendTo($store);
						$left.append("<ul class=\"nobullet\"><li><strong>Address</strong></li><li>"+store.streetAddress1+"</li><li>"+store.streetAddress2+"</li><li>"+store.streetAddress3+"</li></ul>");
						$right.append("<ul class=\"nobullet\"><li><strong>Phone</strong></li><li>"+store.phone+"</li><li><strong>Email</strong></li><li><a href=\"mailto:"+store.email+"\">"+store.email+"</a></li></ul>");
						$store.append("<div class=\"clearer\"></div>");
						$store.append("<div style=\"margin-top:14px;\"><a href=\""+store.href+"\" class=\"general-btn\"><span class=\"slide\">Go to store &raquo;</span></a></div>");
						$storesContainer.append($store);
					}
					$popupContainer.show();
					$fancyboxLink.click();
				} else {
					$error.text("We could find a store near your postcode. Please search again.").show();
					$.fancybox.close();
				}
			}
			
			function onAjaxError(jqXHR, textStatus, errorThrown){
				$error.text("This service is currently unavailable.\n\nPlease try again later or select a store from the map.").show();
			}
			
			function onAjaxComplete(jqXHR, textStatus){
				$submit.val(originalValue).removeAttr('disabled').css({
					'opacity': 1,
					'cursor' : 'pointer'
				});
				submitting = false;
			}
			
			function onFancyboxClosed(e){
				$popupContainer.hide();
			}
			
			function onAllBoseStoresClick(e){
				e.preventDefault();
				$.fancybox.close();
				$input.focus().select();
			}
			
			function validateInput(){
				var value = $input.val();
				if(value.match(/^\d{3,4}$/)){
					$error.hide();
					return true;
				}
				
				$error.text('Please enter a valid postcode').show();
				return false;
			}
		})();
	}
});

//Contact Page
$(document).ready(function() {
	var $contactMap = $("#contact-map");
	if($contactMap.length){
		//Contact maps
		//Change image to absolute link
		
		googleMapsAsync.registerCallback("contact-map", function(){
			var markerImage = new google.maps.MarkerImage("../App_Themes/Bose/img/bose_marker.png", new google.maps.Size(24, 36), new google.maps.Point(0, 0), new google.maps.Point(12, 31));
			var bose = window.bose || {};
			var markers = [];
			
			var center = new google.maps.LatLng(bose.focus.latitude, bose.focus.longitude);
			var options = {
				zoom: bose.focus.zoom,
				center: center,
				mapTypeId : google.maps.MapTypeId.ROADMAP,
				mapTypeControl : false,
				streetViewControl : false
			}
			var contactMap = new google.maps.Map($('<div style="width:100%; height:100%;" />').appendTo($contactMap)[0], options);
			if(bose.locations && typeof bose.locations == "object"){
				var markerOptions = {
					animation : google.maps.Animation.DROP,
					flat : true,
					icon : markerImage,
					map : contactMap
				}
				for(var i = 0; i < bose.locations.length; i++){
					var location = bose.locations[i];
					markerOptions.position = new google.maps.LatLng(location.latitude, location.longitude);
					markerOptions.title = location.storeName;
					var tempMarker = new google.maps.Marker(markerOptions);
					if(location.url){
						tempMarker.url = location.url;
						google.maps.event.addListener(tempMarker, 'click', function() {
							window.location = this.url;
						});
					}
					markers.push(tempMarker);
				}
			}			
			$contactMap.show();
		});
	}
});

//Expandable Nav
$(document).ready(function(){
	$sidenav = $('#sidenav.expandable');
	if($sidenav.length){
		function onExpandingClick(e){
			e.preventDefault();
			var $ul = e.data.ul;
			var $li = e.data.li;
			if($li.hasClass('CMSListMenuHighlightedLI')){
				$ul.slideUp(400, function(){
					$li.removeClass('CMSListMenuHighlightedLI');
				});
			} else {
				$li.addClass('CMSListMenuHighlightedLI');
				$ul.slideDown(400);
			}
		}
		$sidenav.children('ul').children('li').each(function(i,e){
			var $li = $(this);
			var $ul = $li.children('ul');
			$li.removeClass('CMSListMenuHighlightedLI');
			if($ul.length){
				$li.children('a').bind('click', {li:$li, ul:$ul}, onExpandingClick);
				$ul.hide();
			}
		});
	}
})





















