$(window).hashchange( function(){
	var hash = location.hash.substring(3);

	load_content(hash);

	// Set the page title based on the hash.
	if(hash.length > 0) {
		document.title = 'Boardspots | ' + (hash.replace(/^\w/, function($0) { return $0.toUpperCase(); }));
	}
});

$(window).hashchange();

function load_content(url) {
	//$("#content .container").slideUp();

	//via http://37signals.com/svn/posts/2577-loading-spinner-animation-using-css-and-webkit
	var sphtml = 
	"<div class='spinner' style='width: 38px; height: 38px'>"+
	"<div class='bar1'></div>"+
	"<div class='bar2'></div>"+
	"<div class='bar3'></div>"+
	"<div class='bar4'></div>"+
	"<div class='bar5'></div>"+
	"<div class='bar6'></div>"+
	"<div class='bar7'></div>"+
	"<div class='bar8'></div>"+
	"<div class='bar9'></div>"+
	"<div class='bar10'></div>"+
	"<div class='bar11'></div>"+
	"<div class='bar12'></div>"+
	"</div>";

	$("#content .container").html(sphtml);

	//could use .load(url #content .container)
	var furl = url;
	var i = furl.indexOf("/");
	var san = url;
	if(i > 0) {
		furl = furl.replace("/", ".php?v=");
		san = url.substring(0, i);
	} else if (furl == "" ) {
		furl = "home.php";
		san = "home";
	} else {
		furl = furl+".php";
	}

	$("#content .container").load(furl, function(response, status, xhr) {
		if (status == "error") {
			var msg = "<div id='c404'><h2>Sorry, 404.</h2><br /><img src='img/tantien.png' alt='404' /></div>";
			$("#content .container").html(msg);
		} else {
			//$("#content .container").slideDown();
			$("ul#main_nav li a").removeClass('nav_selected');
			$("ul#main_nav li a:contains('"+san+"')").addClass('nav_selected');
		}
	});
}

// getPageScroll() by quirksmode.com
function getPageScroll() {
	var xScroll, yScroll;
	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
			} else if (document.body) {// all other Explorers
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;
			}
			return new Array(xScroll,yScroll)
		}

		// Adapted from getPageSize() by quirksmode.com
		function getPageHeight() {
			var windowHeight
			if (self.innerHeight) {	// all except Explorer
				windowHeight = self.innerHeight;
				} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
					windowHeight = document.documentElement.clientHeight;
					} else if (document.body) { // other Explorers
						windowHeight = document.body.clientHeight;
					}
					return windowHeight
				}


/* search box */

var result_count = 1;
var hpos = 0;
var prevsearch = null;
var prevresults = null;

$(document).ready(function() {
	
	$('#searchform').submit(function() {
		if(hpos == 0) {
			window.location.hash = "#!/search/"+escape($("#s").val());
			$("#s-results").fadeOut();
			$("#s").blur();
		}
		return false;
	});

	function displayData(data, search) {
		var res = "";
		result_count = 1;
		hpos = 0;
		for (var i = 0; i < Math.min(data[0].length, 2); i++) {
			result_count++;
			res += "<a href='"+data[0][i].link+"' name='"+(result_count-1)+"'>"+
			"<span class='s-title'>"+data[0][i].title+"</span>"+
			"<span class='s-content'>"+data[0][i].content+"</span"+
			"</a>";
		}
		for (var j = 0; j < Math.min(data[1].length, 2); j++) {
			result_count++;
			res += "<a href='"+data[1][j].link+"' name='"+(result_count-1)+"'>"+
			"<span class='s-title'>"+data[1][j].title+"</span>"+
			"<span class='s-content'>"+data[1][j].content+"</span"+
			"</a>";
		}
		if(data[0].length > 2 || data[1].length > 2) {
			result_count++;
			res += "<a href='#!/search/"+search+"' name='"+(result_count-1)+"'>"+
			"<span class='s-title'>more...</span>"+
			"</a>";
		} else if (data[0].length + data[1].length < 1) {
			result_count++;
			res += "<a href='#!/search/"+search+"' name='"+(result_count-1)+"'>"+
			"<span class='s-title'>nothing found for "+search+"</span>"+
			"</a>";
		}
		$("#s-results").html(res);
		$("#s-results a").hover(
			function () {
				$("#s-results a").removeClass("hov");
				hpos = parseInt($(this).attr("name")) + 1;
				$(this).addClass("hov");
			},
			function () {
				$(this).removeClass("hov");
			}
		);
	}

	$("#s").keyup(function(e) {	
		if(jQuery("#s-results").is(":hidden")) {
			$("#s-results").fadeIn();
		}

		var search = $(this).val().toLowerCase();
		if(search == "") {
			$("#s-results").fadeOut();
		} else if(search != prevsearch) {
			if(prevsearch != null && (search.substr(0, prevsearch.length)) == prevsearch) { //same results as last search
				var isRelevant = function(e) {
					return (e.title.toLowerCase()).indexOf(search) != -1 || (e.content.toLowerCase()).indexOf(search) != -1;
				}
				var filtered = [(prevresults[0].filter(isRelevant)),(prevresults[1].filter(isRelevant))];
				displayData(filtered, search);
				prevresults = filtered;
				} else { //different search, ajax
					$.ajax({
						url: "classes/search_ajax.php",
						data: ({v : escape(search)}),
						dataType: "json",
						success: function(data) {
							displayData(data, search);
							prevresults = data;	
						}
					});
				}
				prevsearch = search;
			}
		});

		$("#s").focus(function() {
			if($("#s").val() != "") {
				$("#s-results").fadeIn();
			} else {
				$("#s-results").fadeOut();
			}
		});
		$("#s").blur(function() {
			$("#s-results").fadeOut();
		});	
		$("#s-results a").click(function(){
			$("#s-results").fadeOut();
		});

		$("#s").keydown(function(e) {
			var code = e.keyCode;
			if(code == 38) { //up
				$("#s-results a:nth-child("+hpos+")").removeClass("hov");
				if(hpos == 1) hpos = result_count;
				hpos = (hpos - 1) % (result_count);
				$("#s-results a:nth-child("+hpos+")").addClass("hov");
				return false;
				} else if(code == 40) { //down
					$("#s-results a:nth-child("+hpos+")").removeClass("hov");
					hpos = Math.max(1,(hpos + 1) % (result_count));
					$("#s-results a:nth-child("+hpos+")").addClass("hov");
					return false;
					} else if(code == 27) { //esc
						$("#s").blur();
						$("#s-results a").removeClass("hov");
						hpos = 0;
						return false;
						} else if(code == 13) { //enter
							if(hpos != 0) {
								$("#s-results").fadeOut();
								$("#s").blur();
								window.location.hash = $("#s-results a:nth-child("+hpos+")").attr("href");
								return false;
							}
						}
					});
				});
