/*******************************************************************************
                                         
	Title: Byron                                 
	Date: November 2010

*******************************************************************************/

//$('#content').hide();
//$('#navigation').hide();

$(document).ready(function() {

	/* Height of image background */
	if ( $(window).height() > $("#content").height() ) {
	  $(".full-bg-wrapper").css("height", $(window).height());
	  }
	else {
	  $(".full-bg-wrapper").css("height", ($("#content").height()+20));
	}

	/* Slide in content and sidebar when page loads */
	//$('#content').show("slide", { direction: "down" }, 750);
	//$('#navigation').show("slide", { direction: "up" }, 750);

	/* Scroll to anchors on page */
	$('#navigation').localScroll();

	/* Missing :last-child support in IE */
	if ($.browser.msie) {
		$(".thirds .third:last-child").addClass("last-child");
		$(".subscribe ul li:last-child").addClass("last-child");
		$(".box-inner p.border:last-child").addClass("last-child");
		$("#content .box:last-child").addClass("last-child");
	}
	
	RestaurantLocator.init();
	ShackLocator.init();
	Subscribe.init();
	RestaurantNews.init();	
});

var RestaurantNews = (function(){
	var self = {
		init: function() {
			setTimeout("RestaurantNews.forceResize()",700);
			//		
			$(window).resize(function() {
				self.forceResize();
			});		
		},
		forceResize: function() {
			if( $("#share2") ) {
				$("#share2").css("bottom",$("#restarant-content").height() + 30);	
			}
		}
	}
	return self;
})();

var RestaurantLocator = (function(){
	var self = {
		baseEl: null,
		viewContainer: null,
		browseList: null,
		searchForm: null,
		message: null,

		defaultTitle: null,

		init: function() {
			self.baseEl			= $('#restaurant-locator');
			self.viewContainer	= $('#restaurant-view');
			self.browseList		= $('.restaurants-browse');
			self.searchForm		= self.baseEl.find('form');
			self.message		= self.baseEl.find('.header h3.large');
			self.defaultTitle   = document.title;
			self.newsContainer = $('#share2');
			self.newsContent = $('#restarant-content');

			if (self.viewContainer.size() == 0) return;

			self.browseList.find('li a').click(self.handleBrowseClick);

			self.searchForm.submit(self.handleSearchSubmit);
			self.viewContainer.addClass('location-searching');

			/* If browser supports geolocation, run query*/
			if (navigator.geolocation) {
				 navigator.geolocation.getCurrentPosition(self.handleGeolocationSuccess, self.handleGeolocationError);
			} else {
				self.handleGeolocationError();
			}
		},

		handleGeolocationSuccess: function(position) {
			RestaurantLocator.searchRestaurants(position.coords.latitude + ',' + position.coords.longitude);
		},

		handleGeolocationError: function() {
			RestaurantLocator.searchForm.show();
			RestaurantLocator.viewContainer.html();
		},
		

		/* Handle click event on browse list */
		handleBrowseClick: function(e) {
			e.preventDefault();
			RestaurantLocator.loadRestaurant($(this).attr('href'));
			RestaurantLocator.baseEl.addClass('view-entry');
		},

		/* Handle search form submit */
		handleSearchSubmit: function(e) {
			e.preventDefault();
			RestaurantLocator.searchRestaurants($(this).find('input[name=address]').val());
		},

		searchRestaurants: function(address) {
			$.ajax({
				url: RestaurantLocator.searchForm.attr('action') + '/' + escape(address),
				dataType: 'json',
				success: function(data){
					var result = data.results[0];

					if (result != undefined) {
						var msg = $.sprintf(BH.restaurant_map_distance, getUnitLabel(result.distance), result.title)
						RestaurantLocator.displayMessage(msg);
						RestaurantLocator.getShackDistance(address);
						RestaurantLocator.loadRestaurant(result.url);

						RestaurantLocator.viewContainer.removeClass('location-searching');
						RestaurantLocator.searchForm.hide();
					} else {
						RestaurantLocator.displayMessage(BH.restaurant_map_not_found);
					}
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					RestaurantLocator.displayMessage(BH.restaurant_map_error);
				}
				
			});

		},

		getShackDistance: function(address){
			$.ajax({
				url:  RestaurantLocator.searchForm.find('input[name=shack_url]').val()  + 'search/' + escape(address),
				dataType: 'json',
				success: function(data){
					var result = data.results[0],
						shack_url = RestaurantLocator.searchForm.find('input[name=shack_url]').val();
					
					if (result != undefined) {
						var msg = $.sprintf(BH.restaurant_map_shack_distance, getUnitLabel(result.distance), shack_url);
						RestaurantLocator.message.append(msg);
					} 
				}
			});
		},

		/* Ajax load restaurant into container */
		loadRestaurant: function(url) {
			$.ajax({
				url: url + '/plain/',
				success: function(data){
				
					if( $("<div>").append(data).find("#ajax-restarant-content").find("h2").length > 0 ) {
						RestaurantLocator.newsContent.html($("<div>").append(data).find("#ajax-restarant-content").html());
						RestaurantLocator.newsContainer.css('display','block');
					} else {
						RestaurantLocator.newsContainer.css('display','none');
					}
					RestaurantNews.forceResize();
					RestaurantLocator.viewContainer.html(data);

					// Update page title
					document.title = RestaurantLocator.defaultTitle + ' ' + 
									 BH.page_title_separator + ' ' + 
									 RestaurantLocator.viewContainer.find('.fn').text();

					// Toggle browser view list
					//RestaurantLocator.browseList.find('li:hidden').show();
					//RestaurantLocator.browseList.find('li a[href=' + url + ']').parents('li').hide();
				}
			});
		},

		/* Show messages*/
		displayMessage: function(text) {
			RestaurantLocator.message.html(text);
			RestaurantLocator.message.show();
		}
	};
	return self;
})();


var ShackLocator = (function(){
	var self = {
		baseEl: null,
		viewContainer: null,
		browseList: null,
		searchForm: null,
		message: null,

		defaultTitle: null,

		init: function() {
			self.baseEl			= $('#shack-locator');
			self.viewContainer	= $('#shack-view');
			self.searchForm		= self.baseEl.find('form');
			self.message		= self.baseEl.find('.header h3.large');

			if (self.viewContainer.size() == 0) return;

			self.searchForm.submit(self.handleSearchSubmit);
			self.viewContainer.addClass('location-searching');

			/* If browser supports geolocation, run query*/
			if (navigator.geolocation) {
				 navigator.geolocation.getCurrentPosition(self.handleGeolocationSuccess, self.handleGeolocationError);
			} else {
				self.handleGeolocationError();
			}
		},

		handleGeolocationSuccess: function(position) {
			ShackLocator.searchShack(position.coords.latitude + ',' + position.coords.longitude);
		},

		handleGeolocationError: function() {
			ShackLocator.searchForm.show();
			ShackLocator.viewContainer.html();
		},
		

		handleSearchSubmit: function(e) {
			e.preventDefault();
			ShackLocator.searchShack($(this).find('input[name=address]').val());
		},

		searchShack: function(address) {
			$.ajax({
				url: ShackLocator.searchForm.attr('action') + escape(address),
				dataType: 'json',
				success: function(data){
					var result = data.results[0];

					if (result != undefined) {
						var msg = $.sprintf(BH.shack_map_distance, getUnitLabel(result.distance))
						ShackLocator.displayMessage(msg);
						ShackLocator.loadShack(result.url);

						ShackLocator.viewContainer.removeClass('location-searching');
						ShackLocator.searchForm.hide();
					} else {
						ShackLocator.displayMessage(BH.shack_map_not_found);
					}
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					ShackLocator.displayMessage(BH.shack_map_error);
				}
				
			});
		
		},

		loadShack: function(url) {
			$.ajax({
				url: url + '/plain/',
				success: function(data){
					ShackLocator.viewContainer.html(data);
				}
			});
		},

		displayMessage: function(text) {
			self.message.html(text);
			self.message.show();
		}
	};
	return self;
})();


function getUnitLabel(value) {
	if (value > 1) {
		return value + ' miles';
	} 

	return value + ' ' + (value > 1 ? 'miles' : 'mile');
}


var Subscribe = (function(){
	var self = {
		el: null,
		msg: null,
		init: function(){
			self.el = $('#newsletter-subscribe form');
			if (self.el.size() == 0) return;

			self.el.before('<div id="message" class="message" style="display:none"></div>');
			self.msg = $('#message');
			self.el.validate({
				submitHandler: self.handleSubmit
			});
		},

		success: function(response, statusText, xhr, $form) {
        
            var responseType = $(response).find('ResultCode').text();
			var responseMessage = $(response).find('ResultDescription').text();
    
            if ((responseType == '') && (responseMessage == '')) {
				self.showInfo('Thank you for signing up to receive news from Byron.');
                return;
            }
            
			if (responseType == 0) {
				self.showError(responseMessage);
                return;
			} else {
				self.showInfo('Thank you for signing up to receive news from Byron.');
                return;
            }
		},

		showInfo: function(text) {
            self.msg.text(text)
            self.msg.show();
            $('#newsletter-form').hide();                               
		},

		showError: function(text) {
			self.msg.text(text).show();
		},
		
		handleSubmit: function(form) {
			self.el.ajaxSubmit({
				success: Subscribe.success
			}); 
			return false;
		}
	};
	return self;
})();

