$(function() {

	$('#topbar .topbarLink [href=#faq]').bind('click', function() {
		pageload('faq');
	});	
	$('.menuLinks li a').bind('click', function(e) {
		pageload($(this).attr('href'));
	});
	
	var curHash = "";
	var curQuery = "";
	var fullHash = "";
	
	var sbOptions = {
		resizeDuration: 0.2,
		fadeDuration: 0.2,
		loadingImage: 'img/loader_menu.gif',
		autoplayMovies: false
	};
	
	Shadowbox.init({
		skipSetup: true
	});
	
	// ----------------
	// History Handling
	// ----------------
	
	// $.ajaxHistory.initialize();
	
	function pageload(hash) {
		if(hash.indexOf('#') >= 0) { hash = hash.split('#')[1]; }
		if(hash.length === 0) { hash = 'rep_ov'; }
		if(hash.indexOf('-print') >= 0) {
			hash = hash.split('-print')[0];
			printPage();
		}
		var qIndex = hash.indexOf('?');
		var query;
		if(qIndex >= 0) {
			var hashSplit = hash.split('?');
			hash = hashSplit[0];
			query = hashSplit[1];
		}
		if(curHash === "" || curHash != hash) {
			if(hash) {
				// restore ajax loaded state
				loadContent(hash, query);
				curHash = hash;
				curQuery = query;
			} else {
				// start page
				loadContent("rep_ov", query);
				curHash = "rep_ov";
				curQuery = query;
			}
			selectMenuItem($("#menu [href^=#" + curHash + "]"));
		} else if(curQuery != query) {
			loadTabs(query);
			curQuery = query;
		}
	}
	
	pageload(location.href);
	
	function loadContent(hash, query) {
		$.ajax({
			type: "GET",
			url: "modules_en/" + hash + ".html",
			dataType: "html",
			timeout: 2000,
			beforeSend: function (XMLHttpRequest) {
				$("#contentLoader").fadeIn("fast");
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
				pageload('error');
			},
			success: function(data, textStatus) {
				$("#contentLoader").fadeOut("fast");
				$("#contentText").html(data);
				loadTabs(query);
				changeTheme(curHash);
				if($('[rel^=shadowbox]').size() > 0) {
					Shadowbox.setup($('[rel^=shadowbox]'), sbOptions);
				}
				$('#flashButton').bind('click', function() {
					var url;
					if(curHash == "int_censearch") { url = "censearch"; }
					else if(curHash == "int_flipbook") { url = "flipbook"; }
					else if(curHash == "int_quizt") { url = "quizt"; }
					window.open('interactive/' + url + '.html','name','toolbar=no,resizable=no,scrollbars=no,height=600,width=800');
				});
				$('#surveyForm').ajaxForm(function() { 
					$('#formSubmit').html("<strong><em>Thank you for your input!</em></strong>");
				});
			}
		});
	}
	
	// --------------
	// Theme Handling
	// --------------
	function changeTheme(ref) {
		if(undefined !== ref && ref.length > 0) {
			section = ref.substring(0, ref.indexOf('_'));
			
			switch(section) {
				case "rep": section = "report"; break;
				case "int": section = "interactive"; break;
				case "gi": section = "getInvolved"; break;
				case "au": section = "aboutUs"; break;
				default: section = "others";
			}
			$("body").attr("id", section);
		}
	}
	
	function changeBackground(icon, hasTabs) {
		$('#contentBg').empty();
		if(hasTabs) {
			$('#contentBg').css('margin-top', '26px');
		} else {
			$('#contentBg').css('margin-top', '1px');			
		}
		if(icon !== undefined) {
			var iconImage = document.createElement('img');
			iconImage.src = 'img/content_bg_' + icon + '.png';
			$('#contentBg').append(iconImage);
		}
	}
	
	// ----------------------
	// Menu Related Functions
	// ----------------------

	var selectedMenu;
	var selectedMenuItem;
	
	$(".menuHeader").bind("click", function () {
		openMenu($(this));
	});

	$("li.menuSet[id^=" + $("body").attr("id") + "]").children("img").trigger("click");
		
	// Menu toolbar function interceptor
	function printPage() {
		var content = $('#contentFrame').clone();
		content.css('margin-left','10px');

		$('body').empty();
		$('body').append(content);
		
		// $('#topbar').toggle();
		// $('#menu').toggle();
		// $('#header').toggle();
		// $(".mainDiv").css('border', '0');
		// $('#contentFrame').css('width','100%');
		// $('#contentFrame').css('margin','0 auto');
		// $('#contentText').css('width','90%');
		// $('#wrapper').css('width','100%');
		// $('#contentFrame').css('margin-left','0');
		// var back = document.createElement('a');
		// $('#contentFrame').prepend(back);
	}
	
	$('#printFunction').bind('click', function() {
		window.open('notebook_lofi.html#' + fullHash + '-print','name','toolbar=no,resizable=no,scrollbars=yes,height=600,width=689');
	});	
	
	$("#bookmarkFunction").bind("click", function () {
		if (window.sidebar) { // Firefox
			window.sidebar.addPanel(document.title, location.href, "");
		} else if(window.opera && window.print) { // Opera
			var elem = document.createElement('a');
			elem.setAttribute('href',location.href);
			elem.setAttribute('title',document.title);
			elem.setAttribute('rel','sidebar');
			elem.click();
		} else if(document.all) { // IE
			window.external.AddFavorite(location.href, document.title);
		}
	});	
	$("#increaseFontFunction").bind("click", function() {
		$("body").css('font-size', '1em');
	});
	$("#decreaseFontFunction").bind("click", function() {
		$("body").css('font-size', '.75em');	
	});
	
	// Menu state change functions
	function openMenu(elem) {
		if(selectedMenu) {
			selectedMenu.removeClass("selected").bind("click", function () {
				openMenu($(this));
			});
			selectedMenu.siblings("ul").slideUp("fast");
		}
		selectedMenu = elem;
		selectedMenu.addClass("selected").unbind("click");
		selectedMenu.siblings("ul").slideDown("fast");
	}
	
	function selectMenuItem(elem) {
		if(selectedMenuItem) {
			selectedMenuItem.removeClass("selected");
		}
		selectedMenuItem = elem;
		selectedMenuItem.addClass("selected");
	}
		
	// ----------------------
	// Tab Related Functions
	// ----------------------
	
	function loadTabs(query) {
		$('#tabSet').empty();

		var tabDiv = $(".tabSection");
		var numTabs = tabDiv.size();

		if(numTabs > 1) {
			$('#contentTop').addClass('withTabs');
			$('#tabSet').show();
		} else {
			$('#contentTop').removeClass('withTabs');
			$('#tabSet').hide();
		}
		
		for(i = 0; i < numTabs; i++) {
			var tab = $(document.createElement('a'));
			tab.addClass('tabItem');
			tab.attr('href', '#' + curHash + '?' + tabDiv.attr('name'));
			tab.text(tabDiv.attr('title'));
			tab.css('z-index', 5 - i);
			tab.bind('click', function() {
				pageload($(this).attr('href'));
			});

			if((query === undefined && i === 0) || tabDiv.attr('name') == query) {
				fullHash = curHash + ((query !== undefined && query.length > 0) ? '?' + query : '');
				changeBackground(tabDiv.attr('id'), numTabs > 1);
				tabDiv.show();
				tab.addClass('selected');
				tab.css('z-index', 10);
				$('#hiFiLink').attr('href', 'notebook.html#' + fullHash);
				$('#lowFiLink').attr('href', 'notebook_lofi.html#' + fullHash);
			} else {
				tabDiv.hide();
			}

			if(i === 0) {
				tab.addClass('tabItemFirst');
			} else {
				tab.addClass('tabItemRest');
			}

			$('#tabSet').append(tab);

			tabDiv = tabDiv.next();
			
			$('#contentText a').bind('click', function() {
				pageload($(this).attr('href'));
			});
		}
	}
});