var TULIPS = function() {
	var m_currentPage = "index";
	var m_pageIndex = 1;
	var m_bodyElements = ["div#body h2", "div#sidebar p, div#sidebar a", "div#content"];
	
	var primaryLinkHandler = function(event) {
		event.preventDefault(); // Prevent the default hyperlink action
		if (undefined == event.target.href)
			return; // Don't do anything for elements with no hyperlink
		
		if (m_currentPage == event.target.rel)
			return; // Don't do anything if user is already on same page
		
		m_currentPage = event.target.rel;
		m_pageIndex = 1; // Reset the page index to 1 every time a new page opens
		
		(b = $("body")).removeClass();
		b.addClass(m_currentPage);
		fadeOut(m_bodyElements, function() {
			TULIPS.loadBody(event.target.href);
		});
	};
	
	var sidebarLinkHandler = function(event) {
		event.preventDefault();
		if (undefined == event.target.href)
			return;
		
		if (m_currentPage == event.target.rel)
			return; // Don't do anything if user is already on same page
		
		m_currentPage = event.target.rel;
		fadeOut(["div#content"], function() {
			TULIPS.loadBody(event.target.href);
		});
	};
	
	var splashNavigationHandler = function(event) {
		var max = 5;
		var min = 1;
		var prefix = "services-";
		
		event.preventDefault();
		
		// Content only changes on click of the
		// splash navigation for the Services section
		if ("services" != m_currentPage)
			return;
		
		var btn = $(event.target)[0].rel;
		if ("next" == btn)
			(m_pageIndex == max) ? m_pageIndex = 1 : ++m_pageIndex;
		else if ("previous" == btn)
			(m_pageIndex == 1) ? m_pageIndex = max : --m_pageIndex;
		
		fadeOut(m_bodyElements, function() {
			TULIPS.loadBody("xml/" + prefix + m_pageIndex + ".xml");
		});
	};
	
	var fadeOut = function(t, f) {
		var c = 0;
		var l = t.length;
		
		colorTransition(t, "#eee", function() {
			if (0 == c++) f(); // Trigger the callback after the first animation completes
		});
		$("#body").addClass("showLoader");
	};
	
	var fadeIn = function(t) {
		colorTransition(t, $(t[0]).parent().css("color"));
		$("#body").removeClass("showLoader");
	};
	
	var colorTransition = function(t, c, f) {
		var p = {color: c};
		var o = {duration: 500, complete: f};
		var e;
		
		for (i in t) {
			if ((e = $(t[i])).size()) {
				e.animate(p, o);
			}
		}
	};
	
	var updateBody = function(xml) {
		var x = $($.parseXML(xml)); // Parse the XML and convert to a jQuery object
		var title = x.find("title")[0].textContent;
		var desc = x.find("desc")[0].textContent;
		var sidebar = x.find("sidebar").text();
		var content = x.find("content").text();
		
		if ("index" == m_currentPage) {
			$("#title").addClass("auto-width");
			$("#title").removeClass("fixed-width");
		}
		else {
			$("#title").addClass("fixed-width");
			$("#title").removeClass("auto-width");
		}
		
		if ("index" == m_currentPage)
			document.title = "Tulips India - Home";
		else
			document.title = "Tulips India - " + title;
		
		$("#title").html(title);
		$("#desc").html(desc);
		$("#sidebar").html(sidebar);
		$("#content").html(content);
		
		fadeIn(m_bodyElements);
		
		if ("services" == m_currentPage && m_pageIndex > 1)
			return;
		else
			SPLASH.play(m_currentPage);
	};
	
	var updateContent = function(xml) {
		var x = $($.parseXML(xml)); // Parse the XML and convert to a jQuery object
		var desc = x.find("desc")[0].textContent;
		var content = x.find("content").text();
		
		$("#desc").html(desc);
		$("#content").html(content);
		
		fadeIn("div#content");
	};
	
	var bodyComplete = function(xhr, status) {
		switch (status) {
			case "success":
				updateBody(xhr.responseText);
				break;
			
			case "notmodified":
				updateBody(xhr.responseText);
				break;
			
			case "error":
				console.log("Page load error");
				break;
			
			case "abort":
				console.log("Page load error");
				break;
			
			case "timeout":
				console.log("Request timeout");
				break;
		}
		
		var contentComplete = function(xhr, status) {
			switch (status) {
				case "success":
					updateContent(xhr.responseText);
					break;
				
				case "notmodified":
					updateContent(xhr.responseText);
					break;
				
				case "error":
					console.log("Page load error");
					break;
				
				case "abort":
					console.log("Page load error");
					break;
				
				case "timeout":
					console.log("Request timeout");
					break;
			}
		}
	};
	
	return {
		initNavigation: function() {
			$("#header h1").click(primaryLinkHandler);
			$("ul.primary-navigation").click(primaryLinkHandler);
			$("#sidebar").click(sidebarLinkHandler);
			$("#splash-navigation").click(splashNavigationHandler);
		},
		
		loadBody: function(src) {
			$.ajax({url: src, complete: bodyComplete});
		},
		
		loadContent: function(src) {
			$.ajax({url: src, complete: contentComplete});
		}
	}
}();

