// the last ajax transaction is saved here so we don't do it twice
var gLast_loaded_anchor = " ";
var gSection = "";
var gViewMode = "list";

$(document).ready(function() {
	//filter
	$("#filter_links a").click(function(){
		var link = $(this);
		id = link.attr("id");
		type_id = ($('body').hasClass('news')) ? 2 : 1;
		$("#filter").slideUp(function(){
			if ($("#filter").hasClass(id)) {
				$("#filter_links a").removeClass('selected');
				$("#filter").removeClass();
			} else {
				$.ajax({
					url: "/ajax/" + id + ".php",
					type: "POST",
					data: { type_id:type_id },
					success: function(data) { 
						//potentially update the links to be the grid
						$("#filter").html(data).slideDown().removeClass().addClass(id);
						$("#filter_links a").removeClass('selected');
						link.addClass('selected');
						changeFilterLinks(gViewMode);
					}
				});
			}
		});
	});
	
	if(getSection() == "clients" || getSection() == "news") {
		// only watch anchors on relevant pages
		if(getSection() == "clients") {
			gViewMode = "grid";
		} else {
			gViewMode = "list";
		}

		$(window).hashchange(syncContentToAnchor);
		syncContentToAnchor();
		
		$('a.mode_list').bind("click", switchModeList);
		$('a.mode_grid').bind("click", switchModeGrid);
				
		updateSelectedMode();
	}
});

function switchModeList(evt) { switchModeTo("list"); }
function switchModeGrid(evt) { switchModeTo("grid"); }

function switchModeTo(new_mode) {
	var old_mode = "grid";
	if(new_mode == "grid") {
		old_mode = "list";
	}
	
	gViewMode = new_mode;
	
	updateSelectedMode();
	changeFilterLinks(new_mode);
	
	
	var anchor = document.location.hash;
	anchor = anchor.replace(old_mode + ',', new_mode + ',');
	if(anchor != "") document.location.hash = anchor;

	//$("#content").removeClass().addClass(gViewMode);
	syncContentToAnchor();
}

function updateSelectedMode() {
	if(gViewMode == "grid") {
		$('a.mode_list').removeClass("selected");
		$('a.mode_grid').addClass("selected");
	} else {
		$('a.mode_list').addClass("selected");
		$('a.mode_grid').removeClass("selected");
	}
}

function getCurrentViewMode() {
	return gViewMode;
}

// use to switch between grid/list viewing modes
function changeFilterLinks(new_mode) {
	var href;
	var old_mode = "grid";
	if (new_mode == "grid") old_mode = "list";
	$.each($('a.filter'), function(index, value) {
			href = $(value).attr("href");
			href = href.replace(old_mode + ',', new_mode + ',');
			$(value).attr("href", href);
		}
	);
}

function getSection() {
	if (gSection == "") {
		var url_split = (document.location.href.split("#")[0]).split("/");
		var section = url_split[url_split.length - 1];
		if(section == "") section = url_split[url_split.length - 2];
		section = $.trim(section.toLowerCase());
		gSection = section;
	}
	return gSection;
}

function getType() {
	return gSection;
}

function syncContentToAnchor(evt) {
	var anchor = document.location.hash;
	
	if(anchor == gLast_loaded_anchor && anchor != "") {
		// no change - ignore this event
		return;
	}
	
	// break up the anchor to relevant parts
	try {
		var relevant = anchor.split(":")[0];
		var mode = relevant.split(',')[0].replace('#', '');
		var filter_parts = relevant.split(',')[1].split('=');
		var filter = filter_parts[0];
		var val = filter_parts[1];
		gViewMode = mode;
	} catch(e) {
		// malformed anchor, just load default	
	}
		
	if(filter == 'discipline') {
		// discipline
		loadPostsByFilter(mode, "categories", val);
	} else if(filter == 'client') {
		loadPostsByFilter(mode, "clients", val);
	} else if(filter == "tag") {
		loadPostsByFilter(mode, "tags", val);
	} else if(filter == "industry") {
		loadPostsByFilter(mode, "industries", val);
	} else if(filter == 'date') {
		loadPostsByDate(mode, val);
	} else {
		// default (no anchor)
		loadPosts(gViewMode);
	}
	
	gLast_loaded_anchor = anchor;
}

function loadPosts(mode) {
	archiveLoadingStart();
	
	$.ajax({
		url: "/ajax/posts.php",
		type: "POST",
		data: { mode:mode, type:getType() },
		success: function(data) {
			$("#content").removeClass().addClass(gViewMode);
			$("#primary").html(innerShiv(data));
		},
		complete: function(data) {
			archiveLoadingEnd();
		}
	});
}

function loadPostsByDate(mode, date_str) {
	var date_split = date_str.split("-");
	
	if(date_split.length != 2) return;
	
	var month = stringToNumbersOnly(date_split[0]);
	var year = stringToNumbersOnly(date_split[1]);
	
	if(isNaN(month) || isNaN(year)) return;
	
	archiveLoadingStart();
	
	$.ajax({
		url: "/ajax/posts.php",
		type: "POST",
		data: { month: month, year:year, mode:mode, type:getType() },
		success: function(data) {
			$("#content").removeClass().addClass(gViewMode);
			$("#primary").html(data);
		},
		complete: function(data) {
			archiveLoadingEnd();
		}
	});
}

function loadPostsByFilter(mode, filter, id) {
	archiveLoadingStart();
	
	$.ajax({
		url: "/ajax/posts.php",
		type: "POST",
		data: { filter:filter, filter_id:id, mode:mode, type:getType() },
		success: function(data) {
			$("#content").removeClass().addClass(gViewMode);
			$("#primary").html(data);
		},
		complete: function(data) {
			archiveLoadingEnd();
		}
	});
	
	archiveLoadingStart();
}

// if we want to show a loading indicator, loading start
function archiveLoadingStart() {
	$("#primary").html('<div id="please_wait"></div>');
}

// if we want to show a loading indicator, loading done
function archiveLoadingEnd() {

}

// strips a string of non-number characters
function stringToNumbersOnly(str) {
	return str.replace(/[^0-9]/, "");
}

