"use strict";

var MAHES = {};
MAHES.Page = (function () {

	var //Variablen für Anker
		navId = -1,
		pageId = -1,
		//Ladeanimation
		needLoadAnim = 0,
		//Cache
		cache = {};

	//Anker
	function setNavId(id) {
		navId = id;
		location.hash = navId+"_"+pageId;
		updateHighlights();
	}
	function setPageId(id) {
		pageId = id;
		location.hash = navId+"_"+pageId;
		updateHighlights();
	}

	function updateHighlights() {
		$("#navigation > span").removeClass("selected");
		$("#nav_"+navId).addClass("selected");
		$("#subnavigation > span").removeClass("selected");
		$("#subnav_"+pageId).addClass("selected");
	}
	
	function updateLoadIcon(v) {
		needLoadAnim += v;
		if (needLoadAnim === 0) {
			$("#loadIcon").hide();
		} else {
			$("#loadIcon").show();
		}
	}
	
	//Hauptnavigation setzen
	function setNavigation(content) {
		if (!content) {
		} else {
			$("#navigation").html(content);
			updateHighlights();
		}
	}
	//Subnavigation setzen
	function setSubNavigation(content) {
		if (!content) {
			$("#subnavigation").fadeOut();
		} else {
			$("#subnavigation").fadeOut(function(){
				$("#subnavigation").html(content);
				updateHighlights();
			}).fadeIn();
		}
	}
	//Inhalt setzen
	function setContent(title, content) {
		if (!content) {
			$("#content").fadeOut();
		} else {
			$("#content").fadeOut(function(){
				$("#title").html(title);
				$("#text").html(content);
				updateHighlights();
			}).fadeIn();
		}
	}

	//Lade-Funktion / Verbindung zum Server
	function get(url, success) {
		updateLoadIcon(1);
		$.ajax({
			type: "GET",
			url: "./server/"+url,
			dataType: "json",
			success: function(a,b,c) {
				success(a,b,c);
				updateLoadIcon(-1);
			},
			error: function(a,b,c) {setContent("Fehler!",
				"Folgender Fehler ist aufgetreten:<br/><br/>"+
					a+"<br/>"+b+"<br/>"+c+"<br/><br/>"+
					"Sollte dieser Fehler beim normalen Benützen der"+
					"Seite aufgetreten sein, verständigen Sie den"+
					"Administrator!");
					updateLoadIcon(-1);
			}
		});
	}
	function getNavigation(call) {
		if (cache["nav"]) {
			call(cache["nav"]);
		} else {
			get("get_pages.php", function(a) {
				cache["nav"] = a;
				call(a);
			});
		}
	}
	function getSubNavigation(id, call) {
		var srvStr;
		if (cache["subnav_"+id]) {
			call(cache["subnav_"+id]);
		} else {
			if (id === "news") {
				srvStr = "get_posts.php?start=0&amount=5";
			} else {
				srvStr = "get_pages.php?id="+id;
			}
			get(srvStr, function(a) {
				cache["subnav_"+id] = a;
				call(a);
			});
		}
	}
	function getPage(id,call) {
		if (id === -1) {
			id = "news";
		}
		if (cache["page_"+id]) {
			call(cache["page_"+id]);
		} else {
			get("get_page.php?id="+id, function(a) {
				cache["page_"+id] = a;
				call(a);
			});
		}
	}
	
	return {
		//Initialisieren
		init: function() {
			setNavigation();
			setSubNavigation();
			setContent();
			
			//Events anlegen
			$("#navigation > span").live("click",function() {
				MAHES.Page.loadSubNavigation(this.id.slice(4));
			});
			$("#subnavigation > span").live("click",function () {
				MAHES.Page.loadPage(this.id.slice(7));
			});

		},

		//Haupt-Navigation laden
		loadNavigation: function() {
			setNavigation();
			
			var callback = function(data) {
				var sb = "",
					pages = data.pages,
					i;
					
				//Spezielle Menüs einfügen
				pages.reverse();
				pages.push({id: "news", title: "Neuigkeiten"});
				pages.reverse();

				for (i in pages) { if (pages.hasOwnProperty(i)) {
					sb = sb + "<span id=\"nav_"+pages[i].id+
						"\" class=\"navigation\">"+
						pages[i].title+"</span>";
				}}
				setNavigation(sb);
			};
			getNavigation(callback);
		},

		//Sub-Navigation laden
		loadSubNavigation: function(id) {
			id = id || "news";
			
			setNavId(id);
			setSubNavigation();
			
			var callback = function(data) {
				var sb = "",
					pages,
					i;
				
				if (data.pages) {
					pages = data.pages;
					if (""+data.parentid !== navId) {
						return;
					}
				} else {
					pages = data.posts;
					if (navId !== "news") {
						return;
					}
				}
				
				for (i in pages) { if (pages.hasOwnProperty(i)) {
					sb = sb + "<span id=\"subnav_"+pages[i].id+
						"\" class=\"subnavigation\">"+
						pages[i].title+"</span>";
				}}
				setSubNavigation(sb);
			};
			getSubNavigation(id, callback);			
		},

		//Eine Seite laden
		loadPage: function(id) {
			id = id || -1;

			setPageId(id);			
			setContent();

			var callback = function(data) {
				if (""+pageId === ""+data.page.id) {
					setContent(data.page.title, data.page.content);
				}
			}

			getPage(id, callback);	
		}
	};
}());