
(function($) {
	
	if(!window.console) window.console = {};
	if(!window.console.log) window.console.log = function() { };
	if(!window.console.debug) window.console.debug = window.console.log;

	$(function() {

		if($.browser.webkit) $('html').addClass('webkit');
		else if($.browser.mozilla) $('html').addClass('mozilla');
		else if($.browser.msie) $('html').addClass('ie');
		//$('html').addClass($.client.browser);
		//$('html').addClass(String($.client.os).toLowerCase());*/
		
		// init menus
		history_init();

		
		
		
		
	});
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	var history_init = function() {

		return function() {
			if (!History.enabled) {
				return false;
			}

			var rootUrl = History.getRootUrl(),
				$menu = $('nav'),
				$contentContainer = $('#contentContainer'),
				$body = $(document.body);

			$.expr[':'].internal = function(obj, index, meta, stack){
				// Prepare
				var
					$this = $(obj),
					url = $this.attr('href')||'',
					isInternalLink;

				// Check link
				isInternalLink = url.substring(0,rootUrl.length) === rootUrl || (/[^\:]/).test(url);

				// Ignore or Keep
				return isInternalLink;
			};

			$.fn.ajaxify = function() {
				// Prepare
				var $this = $(this);

				// Ajaxify
				$this.find('a:internal:not(.reload)').click(function(event){
					// Prepare
					var
						$this = $(this),
						url = $this.attr('href'),
						title = $this.attr('title')||null;

					// Continue as normal for cmd clicks etc
					if ( event.which == 2 || event.metaKey ) { return true; }

					// Ajaxify this link
					History.pushState(null, title, url);
					event.preventDefault();
					return false;
				});

				// Chain
				return $this;
			};
			$body.ajaxify();


			// Hook into State Changes
			$(window).bind('statechange', function(){
				var State = History.getState(),
					url = State.url,
					relativeUrl = url.replace(rootUrl,''),
					$menuItems;

				//console.log(State, url, relativeUrl);

				// Update menu
				$menuItems = $menu.find('li');
				$menuItems.filter('.selected').removeClass('selected');
				$menuItems = $menuItems.has('a[href^="'+relativeUrl+'"],a[href^="/'+relativeUrl+'"],a[href^="'+url+'"]');
				if ($menuItems.length === 1) { $menuItems.addClass('selected'); }

				// Set Loading
				$body.addClass('loading');

				// Start Fade Out
				// Animating to opacity to 0 still keeps the element's height intact
				// Which prevents that annoying pop bang issue when loading in new content
				$contentContainer.animate({opacity:0}, 4300);

				// Ajax Request the Traditional Page
				$.ajax({
					url: url,
					success: function(data, textStatus, jqXHR){
						//console.log(data);

						var $data = $(data).ajaxify();

						$contentContainer.stop(true,true)
										 .empty()
										 .html(data)
										 .ajaxify()
										 //.css('opacity',100)
										 .animate({opacity:1}, 500);
										 //.show();

						$body.removeClass('loading');
						
						// Fetch the content
						/*contentHtml = $data.find(contentSelector).filter(':first').html()||$data.html();
						if ( !contentHtml ) {
							document.location.href = url;
							return false;
						}*/

						/*
						// Update the content
						$content.stop(true,true);
						$content.html(contentHtml).ajaxify().css('opacity',100).show(); // you could fade in here if you'd like
						*/

						// Inform Google Analytics of the change
						if ( typeof window.pageTracker !== 'undefined' ) {
							window.pageTracker._trackPageview(relativeUrl);
						}
					},
					error: function(jqXHR, textStatus, errorThrown){
						document.location.href = url;
						return false;
					}
				});

			});



		}
	}();



	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



	
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


	
	



})(jQuery);

