var a2plusPageManager = null;

function A2PlusPageManager () {
	
	var self = this;
	
	this.currentPage = "";
	this.siteURL = "";
	
	this.showSpinner = function() {
		$("#spinner").show();
	}

	this.hideSpinner = function() {
		$("#spinner").hide();
	}

	this.isProject = function() {
		if (self.currentPage.indexOf("project/") == 0) {
			return true;
		}
		return false;
	}
	
	this.loadPage = function (pageSlug) {
		
		self.showSpinner();

		if (pageSlug.indexOf("/") == 0) {
			pageSlug = pageSlug.substring(1);
		}
		
		var previousPage = this.currentPage;
		
		this.currentPage = pageSlug;
		$.ajax({
	        url:"?action=ajax_page&slug=" + pageSlug,
	        success:function(data) {

	        	self.hideSpinner();

	        	$("#main-content").html(data);
	        	this.currentPage = pageSlug;
	        	self.ajaxizeLinks();
				$('#bg').crossSlidePause();

				if (pageSlug == "home") {					
					if (previousPage != "home") {
						playCrossSlideHomeImages();
						playCrossSlideHomeMessages();
					}
				}
				
				self.pageChanged();
	        }
	    });
	};
	
	this.loadProjectCategory = function (categorySlug) {

		self.showSpinner();
		
		this.currentPage = "project_category/" + categorySlug;

		$.ajax({
	        url: "project_category/" + categorySlug,
	        success:function(data) {

	        	self.hideSpinner();

	        	$("#main-content").html(data);
	        	this.currentPage = categorySlug;
	        	self.ajaxizeLinks();
				$('#bg').crossSlidePause();
				
				self.pageChanged();
	        }
	    });
	};
	
	this.ajaxizeLinks = function () {
		$("#left-menu a").each(function() {
			var href = $(this).attr("href");
			if (href.indexOf("javascript:void") == -1) {
				$(this).attr("href", "javascript:void(0)");
				$(this).attr("data-href", href);
				$(this).click(function() {
					if (self.isProject() || self.currentPage == "search") {
						location.href = self.siteURL + "#/" + $(this).attr('data-href');
					} else {
						$.address.value($(this).attr('data-href')); 
					}					 
				});	
			}	
		});
	
		$(".ajax-link").each(function() {
			var href = $(this).attr("href");
			if (href.indexOf("javascript:void") == -1) {
				$(this).attr("href", "javascript:void(0)");
				$(this).attr("data-href", href);
				
				if ($(this).attr("data-href") == self.currentPage) {
					$(this).addClass("selected");
				}
				
				$(this).click(function() {
					$.address.value($(this).attr('data-href')); 
				});	
			}
		});
	}
	
	this.pageChanged = function () {
		/*self.toggleFullscreen();*/
		if(self.currentPage == "home"){
			$("#mag_rightbox").slideDown();
			$("#mag_text").slideDown();
		}
	};
}

function initPageManager() {
	if (typeof(a2plusPageManager) == 'undefined' || a2plusPageManager == null) {
		a2plusPageManager = new A2PlusPageManager();
		
		var projectURLIndex = $.address.baseURL().indexOf("project/");
		var searchURLIndex = $.address.baseURL().indexOf("?s");
		
		if (projectURLIndex!= -1) {
			a2plusPageManager.currentPage = $.address.baseURL().substring(projectURLIndex);
			a2plusPageManager.siteURL = $.address.baseURL().substring(0, projectURLIndex);
		} else if (typeof(isSearch) != 'undefined' && isSearch == true) {
			a2plusPageManager.currentPage = "search";
			a2plusPageManager.siteURL = $.address.baseURL().substring(0, searchURLIndex);
		} else {
			a2plusPageManager.currentPage = "home";
			a2plusPageManager.siteURL = $.address.baseURL() + "/";
		}
	}		
}

initPageManager();

$(document).ready(function() {
	
	a2plusPageManager.ajaxizeLinks();
	
	$.address.change(function(event) { 

		if (a2plusPageManager.isProject()) {
			a2plusPageManager.pageChanged();
		}	 
		
		if (event.value == a2plusPageManager.currentPage) {
			prepareMain();
			return;
		}
		
		if (a2plusPageManager.currentPage == "search") {		
			a2plusPageManager.pageChanged();
			prepareMain();
			return;
		}
		
		if (!a2plusPageManager.isProject()) {			
			if (event.value == "/" && a2plusPageManager.currentPage == "home") {
				a2plusPageManager.pageChanged();
				prepareMain();
				return;
			}	
			
			if (event.value == "/") {
				a2plusPageManager.loadPage("home");
				prepareMain();
				return;
			}		

			// If I'm trying to load a project category...
			if (event.value.indexOf("/project_category/") != -1) {
				a2plusPageManager.loadProjectCategory(event.value.replace("/project_category/", ""));
			} else {
				a2plusPageManager.loadPage(event.value);
			}			
			
			prepareMain();
			return;
							
		} else {
			if (event.value == "home" || event.value == "/home") {
				location.href = a2plusPageManager.siteURL;
				prepareMain();
				return;	
			}
			prepareMain();
		}   			
	});  
});



