(function($) { 
	$(document).ready(function() {

		var mediaCache = {};

		$('body').addClass('loaded');
		
		$('#nakedbus').each(function() {
			$(this).html('<a href="http://affiliates.naked.co.nz/1068-5-1-41.html" target="_blank" rel="nofollow"><img border="0" src="http://affiliates.naked.co.nz/banners/nakedpassport_336x280.gif" style="width: 336px; height: 280px;" /></a>');
		});
		

		var navSecondaryHTML = $('#nav-secondary').html();
		$('#nav-primary a').each(function() {
			$(this).mouseover(setMenu);
			$(this).mouseout(unsetMenu);
		});
		$('#nav-secondary').mouseover(setSecondaryMenu);
		$('#nav-secondary').mouseout(unsetMenu);
		
		function setMenu(event) {
			resetMenu();
			var menuItem = event.target;
			if (menuItem.tagName.toLowerCase() != 'a') menuItem = $(menuItem).parents('a');
			var menuHref = $(menuItem).attr('href').replace(/\/|experiencequeenstown/g, "");
			$('#nav-primary').addClass('hover');
			$(menuItem).parents('li').addClass('hover');
			menuStatus = false;
			
			if (menuHref in menu) {
				$('#nav-primary').addClass('has-children-hover');
				$('#nav-secondary').addClass('has-children-hover');
				var menuChildren = menu[menuHref];
				var insert = "<ul class='flat'>";
				if (typeof(menuChildren) == 'string') {
					insert += "<p>" + menuChildren + "</p>";
				}
				else {
					$.each(menuChildren, function(key, val) {
						insert += "<li><a href='" + val.URLSegment + "/'>" + val.Title + "</a>";
					});
				}
				insert += "</ul>";
				$('#nav-secondary').html(insert);
			} else {
				$('#nav-primary').addClass('no-children');
				$('#nav-secondary').addClass('no-children');
				$('#nav-secondary').html('');
			}
		}
		function setSecondaryMenu(event) {
			menuStatus = false;
		}
		function unsetMenu(event) {
			resetCounter();
		}
		
		var count = 0;
		var menuStatus = false;
		var counter = function() {
			count++;
			if (count > 2 && menuStatus == true) {
				resetMenu();
				menuStatus = false;
			}
		}
		setInterval(counter, 1000);
		
		function resetCounter() {
			count = 0;
			menuStatus = true;
		}
		function resetMenu() {
			$('#nav-primary').removeClass('has-children-hover').removeClass('no-children').removeClass('hover');
			$('#nav-secondary').removeClass('has-children-hover').removeClass('no-children').html(navSecondaryHTML);
			$('#nav-primary li.hover').removeClass('hover');
		}
		
		/*
		 * Images clickable within article
		 */
		$('#main img[src*="assets/"].left, #main img[src*="assets/"].right').each(function() {
			$(this).attr('css', '');
			$(this).wrap('<div class="img ' + $(this).attr('class') +'"></div>');
			$(this).after('<p>' + $(this).attr('alt') + '</p>');
			var $originalImg = $(this);
			var src = $originalImg.attr('src');
			var path = src.substr(0, src.lastIndexOf('/'));
			var smallFilename = src.substr(src.lastIndexOf('/'));
			var originalFilename = smallFilename.substr(smallFilename.indexOf('-'));
			var largeFilename = 'SetWidth558' + originalFilename;
			var originalDimensions = { 'width': $originalImg.width(), 'height': $originalImg.height() };
			var largeImg = $('<img src=' + path + '/' + largeFilename + ' style="position: absolute; top: 0; left: -600px;" />');
			$('body').append(largeImg);
			largeImg.load(function() {
				$originalImg.addClass('clickable');
				$originalImg.click(function() {
					if ($(this).width() == '558') {
						$(this).animate({'width': originalDimensions.width, 'height': originalDimensions.height});
						$(this).siblings('p').hide();
					} else {
						$(this).attr('src', $(largeImg).attr('src'));
						$(this).animate({'width': $(largeImg).width(), 'height': $(largeImg).height()}, function() {
							$(this).siblings('p').fadeIn();
						});
					}
				});
			});
		});
		
		/*
		 * Back button
		 */
		$('#left').each(function() {
			$(this).append($("<div id='back'><span><a href='" + location.href + "'>close</a></span></div>"));
			$('#back').hide();
			$('#back').click(function() {
				$('#left > div').hide();
				$('#main').show();
				return false;
			});
		});
		

		$('#content a[href*="media/"], #content #media .controls a').each(function() {
			if (!$(this).parents('.photo-gallery').size()) {
				$(this).click(initiateMedia);
			}
		});
		function initiateMedia(event) {
			$('#main').hide(); // and probably all other first divs
			var a = event.target;
			if (a.tagName.toLowerCase() != 'a') {
				a = $(a).parents('a');
			} else {
				a = $(a);
			}
			var container = $("#media .container");
			
			if (container.size()) {
				container.fadeOut('normal', function() {
					$('#media').show();
					loadMedia(a);
				});
			} else {
				$('#left').prepend($("<div id='media' class='Photo'><div class='wrap'><div class='container'><h1></h1><div class='loading'></div><div id='media-container'></div></div></div><div class='content'><p class='controls'><a href='#' class='button left previous'><span>Previous</span></a><a href='#' class='button right next'><span>Next</span></a></p><p class='by'></p><p class='description'></p><p class='tags'></p></div></div>"));
				$('.controls a').each(function(i) {
					$(this).click(initiateMedia);
				});
				loadMedia(a);
			}
			
			$('#back').show();
			return false;
		}
		var loadMedia = function(a) {
			var href = a.attr('href');
			if (mediaCache[href]) {
				insertMedia(mediaCache[href]);
			} else {
				$("#media .container .loading").show();
				$.getJSON(href, function(data) {
					mediaCache[href] = data;
					insertMedia(mediaCache[href]);
				});
			}
		}
		var insertMedia = function(media) {
			$("#media .container").show();
			$("#media .container .loading").show();
			$("#media h1").text(media.Title);
			$("#media .description").text(media.Description);
			if (media.By) {
				if (media.ByLink) {
					var by = media.Type + " by: <a href='" + media.ByLink + "'>" + media.By + "</a>";
				} else {
					var by = media.Type + " by: " + media.By;
				}
			} else {
				var by = '&nbsp;';
			}
			$("#media .by").html(by);
			$("#media .description").text(media.Description);
			$('#media .photo').unreflect();

			var tags = "Tags: ";
			if (media.Tags.length) {
				tags += media.Tags.join(', ');
			}
			else {
				tags = "";
			}
			$("#media .tags").html(tags);
			
			//setPrevAndNext(media.Type + 's', document.baseURI + 'Media/View/' + media.ID);
			// Put them all in one now
			setPrevAndNext('content', 'media/' + media.ID);
			if (media.Type == 'Photo') {
				$("#media-container").html("<p><img src='" + media.Media + "' class='photo' alt='" + media.Title + "' width='557' /></p>");
				$("#media .photo").load(photoLoaded);
			} else {
				$("#media-container").html("<object width='557' height='443'><param name='movie' value='" + media.Media + "&hl=en&fs=1'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param><param name='wmode' value='transparent'></param><embed src='" + media.Media + "&hl=en&fs=1' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='557' height='443' wmode='transparent'></embed></object>");
				resizeMediaContainer(443);
			}
		}
		var photoLoaded = function(event) {
			var image = event.target;
			var imageHeight = $(image).height();
			addReflection(image);
			$(image).unbind('load');
		}
		var addReflection = function(image) {
			$(image).reflect({ height: 30, opacity: 2/4 });
			// fix reflect div
			$('#media-container>div').css({width: 'auto', height: $(image).height() + 30});
			resizeMediaContainer($(image).height());
		}
		var resizeMediaContainer = function(height) {
			$("#media .wrap").height(height + 57);
				$("#media .loading").fadeOut('normal');
			
		}
		
		// Photo in HTML already
		$("#media img.photo").each(function() {
			if ($(this)[0].complete) {
				addReflection($(this));	
			} else {
				$(this).load(function() {
					addReflection($(this));
				});
			}
		});
		
		if ($("#media object").size()) {
			resizeMediaContainer(443);
		}
		
		var urls = {};
		var titles = {};
		function setPrevAndNext(container, url) {
			// Set this up once only
			if (!urls[container]) {
				var collectedUrls = [];
				var collectedTitles = [];
				$('#' + container + ' .thumb ul a').each(function() {
					collectedUrls.push($(this).attr('href'));
					collectedTitles.push($(this).find('img').attr('alt'));
				});
				urls[container] = collectedUrls;
				titles[container] = collectedTitles;
			}
			var index = urls[container].indexOf(url);
			var previous = index == 0 ? urls[container].length - 1 : index - 1;
			var next = index == urls[container].length - 1 ? 0 : index + 1;
			var previousButton = $("#media .previous");
			var nextButton = $("#media .next");

			previousButton.attr('href', urls[container][previous]);
			previousButton.attr('title', titles[container][previous]);
			nextButton.attr('href', urls[container][next]);
			nextButton.attr('title', titles[container][next]);
		}
		//if ($("#media.Photo").length) { setPrevAndNext('Photos', document.location.href); }
		//if ($("#media.Video").length) { setPrevAndNext('Videos', document.location.href); }
		// Put them all in one now
		if ($("#media").size()) { setPrevAndNext('MediaTab', document.location.href.replace($('base').attr('href'), '')); }

		$('.column.wide').append($('<div class="bottom"></div>'));
	
		// Facebook comments
		window.fbAsyncInit = function() {
		  FB.init({appId: 'your app id', status: true, cookie: true,
		           xfbml: true});
		};
		(function() {
		  var e = document.createElement('script'); e.async = true;
		  e.src = document.location.protocol +
		    '//connect.facebook.net/en_US/all.js';
		  document.getElementById('fb-root').appendChild(e);
		}());
		
		$('#ContactForm').each(function() {
			$(this).load($(this).attr('load'));
		});
		
		// lists
		$('.list').each(function() {
			var totalHeight = $(this).height();
			var aggregatedHeight = 0;
			var replacement = $('<div></div>');
			var leftList = $('<ul class="list column"></ul>');
			var rightList = $('<ul class="list column"></ul>');
			$(this).children().each(function() {
				var height = $(this).height();
				if (aggregatedHeight < totalHeight / 2) {
					leftList.append($(this));
				} else {
					rightList.append($(this));
				}
				aggregatedHeight += height;
			});
			replacement.append(leftList).append(rightList);
			$(this).replaceWith(replacement);
		});
	
	});
})(jQuery);