﻿//Javascript file
window.addEvent('domready', function(e) {
	window.address = window.location.toString();
	window.topDiv = $("topDiv");
	window.loginDiv = $("loginDiv");
	window.overLayDiv = $("overLayDiv");
	window.overLayDiv.changer = new Fx.Tween(window.overLayDiv, {duration: 1000, link: "cancel"});
	window.loginDiv.changer = new Fx.Tween(window.loginDiv, {duration: 1000});
	window.topDiv.changer = new Fx.Tween(window.topDiv, {duration: 1000});
	window.loginDiv.set('opacity', 0);
	window.loginDiv.set('display', '');
	window.showingLogin = false;
	window.loggingIn = false;
	window.pageNameDiv = $('sideNavn');
	window.makePageNameWork = function()
	{
		if(window.pageNameDiv.get('text') == "" && window.pageNameDiv.getParent() == $('content'))
		{
			window.pageNameDiv.dispose();
		}
		else if(window.pageNameDiv.get('text') != "" && window.pageNameDiv.getParent() != $('content'))
		{
			$('content').grab(window.pageNameDiv, 'top');
		}
	}
	window.makePageNameWork();
	window.makeSpecifiedInfo = function(spInfo)
	{
		if($type(spInfo) == "string")
		{
			window.specifiedInfo = JSON.decode(spInfo);
		}
		else if($type(spInfo) == "object")
		{
			window.specifiedInfo = spInfo;
		}
		else
		{
			throw "Feil spinfo!";
		}
		window.logedIn = window.specifiedInfo.logedIn;
		window.newDb = window.specifiedInfo.newDb;
		window.requireLogin = ($chk(window.specifiedInfo.requireLogin) && window.specifiedInfo.requireLogin);
		window.goBack = ($chk(window.specifiedInfo.goBack) && window.specifiedInfo.goBack);
		if(window.goBack)
		{
		//	history.back();
		}
		if($chk(window.specifiedInfo.redirect))
		{
			window.location = window.specifiedInfo.redirect;
			return;
		}
		if($chk(window.specifiedInfo.error))
		{
			alert("Feil: " + window.specifiedInfo.error);
			var url_array = window.location.toString().split("?");
			var url_q_arr = new Array();
			if(url_array[1])
			{
				var q_arr = url_array[1].split("&");
				for(var i = 0; i < q_arr.length; i++)
				{
					if(q_arr[i].indexOf("error=") != 0)
					{
						url_q_arr.push(q_arr[i]);
					}
				}
			}
			var q_string = new String();
			q_string = "";
			if(url_q_arr.length > 0)
			{
				for(var i = 0; i < url_q_arr.length; i++)
				{
					q_string += (q_string.length > 0) ? "&" : "?";
					q_string += url_q_arr[i];
				}
			}
			else
			{
				q_string = "";
			}
			var newUrl = url_array[0] + q_string;
			window.location = newUrl;
			return;
		}
		if($chk(window.specifiedInfo.notice))
		{
			alert("Info: " + window.specifiedInfo.notice);
			var url_array = window.location.toString().split("?");
			var url_q_arr = new Array();
			if(url_array[1])
			{
				var q_arr = url_array[1].split("&");
				for(var i = 0; i < q_arr.length; i++)
				{
					if(q_arr[i].indexOf("notice=") != 0)
					{
						url_q_arr.push(q_arr[i]);
					}
				}
			}
			var q_string = new String();
			q_string = "";
			if(url_q_arr.length > 0)
			{
				for(var i = 0; i < url_q_arr.length; i++)
				{
					q_string += (q_string.length > 0) ? "&" : "?";
					q_string += url_q_arr[i];
				}
			}
			else
			{
				q_string = "";
			}
			var newUrl = url_array[0] + q_string;
			window.location = newUrl;
			return;
		}
	}
	window.makeSpecifiedInfo($("siteInfo").get('text'));
	window.menuItems = new Array();
	window.MenuItem = new Class({
		initialize: function(element, listItem, newItem, newName, newHref, newId)
		{
			if(newItem)
			{
				this.element = new Element('a', {
					text: newName,
					title: newName,
					href: newHref,
					id: newId
				});
				this.listItem = new Element('li');
				this.listItem.grab(this.element);
			}
			else
			{
				this.element = element;
				this.listItem = listItem;
			}
		},
		getName: function()
		{
			return this.element.get('text');
		},
		setName: function(name)
		{
			this.element.set('text', name);
			this.element.set('title', name);
		},
		getAddress: function()
		{
			return this.element.get('href');
		},
		setAddress: function(address)
		{
			this.element.set('href', address);
		},
		remove: function()
		{
			this.listItem.dispose();
		},
		add: function()
		{
			$('menuList').grab(this.listItem);
		}
	});
	window.makeLinkAjax = function(linkElement)
	{
		return;
		var oldHref = linkElement.get('href');
		if(!oldHref)
		{
			return;
		}
		if(oldHref.indexOf("#") == -1 && oldHref.substring(0, "javascript:".length) != "javascript:" && oldHref.substring(0, "mailto:".length) != "mailto:" && !linkElement.get('dontAjaxefy'))
		{
			var oldHrefArr = oldHref.split("#");
			oldHrefArr = oldHrefArr[0].split("/");
			linkElement.set('href', './#/' + oldHrefArr[oldHrefArr.length - 1]);
			linkElement.addEvent('click', function(e) {
				var e = new Event(e);
				//e.stop();
				//alert(e.target);
				window.getPage($(e.target));
			});
		}
	}
	window.makeFormAjax = function(formElement)
	{
	}
	window.makeFormsAjax = function()
	{
	}
	window.submitForm = function(formElement)
	{
		formElement.submit();
	}
	window.makeLinksAjax = function()
	{
		return;
		var links = $$('a');
		links.each(window.makeLinkAjax);
	}
	window.makeLinksAjax();
	window.getPage = function(callingElement)
	{
		if(!callingElement.match("a"))
		{
			var callingElement = $(callingElement.getParent("a"));
			window.getPage(callingElement);
			return;
		}
		var address = callingElement.get('href');
		var adArr = address.split("#/");
		if(adArr.length != 2)
		{
			return;
		}
		window.getAddress(adArr[1]);
	}
	window.refreshPage = function(sentFromLogin, responseDelay)
	{
		window.location.reload();
	}
	window.getAddress = function(address, func, data, alreadyFadingIn, responseDelay, fadeOut)
	{
		window.location = address;
		return;
		if(fadeOut !== false)
		{
			fadeOut = true;
		}
		else if(fadeOut)
		{
			fadeOut = true;
		}
		else
		{
			fadeOut = false;
		}
		if(!responseDelay)
		{
			responseDelay = 0;
		}
		var baseData = 'jsPostBack=true';
		if(data)
		{
			baseData += "&" + data;
		}
		//alert(baseData);
		window.address = address;
		window.location = "./#/" + address;
		if(!alreadyFadingIn)
		{
			window.overLayDiv.changer.set('opacity', 0);
			window.overLayDiv.changer.set('display', '');
			window.overLayDiv.changer.set('width', $(document).getSize().x);
			window.overLayDiv.changer.set('height', $(document).getSize().y);
			window.overLayDiv.changer.set('top', $(document).getScroll().y);
			window.overLayDiv.changer.set('left', $(document).getScroll().x);
			//window.overLayDiv.fade('in');
		}
		var req = new Request.JSON({'url': address, 'method': 'post', 'data': baseData, 'onSuccess': (function(response) {
			if(response)
			{
				window.removeEvents('loaded_pageReady');
				window.makeSpecifiedInfo(response.siteInfo);
				window.remakeMenu(response.menu);
				response.content.stripScripts(true);
				$('sideTekst').set('html', response.content);
				document.title = response.title;
				window.pageNameDiv.set('text', response.name);
				window.makePageNameWork();
				if(func && $type(func) == "function")
				{
					func();
				}
				window.makeLinksAjax();
				window.makeFormsAjax();
				window.fireEvent('loaded_pageReady');
				if(fadeOut)
				{
					window.overLayDiv.fade('out');
				}
			}
			else
			{
				window.location = address;
			}
		}).create({delay: responseDelay})});
		req.send();
	}
	var arr = $A($('menuList').getChildren('li'));
	arr.each(function(item) {
		var e = item.getFirst('a');
		var it = new window.MenuItem(e, item);
		window.menuItems.push(it);
		makeLinkAjax(it.element);
	});
	window.addMenuItem = function(name, href, id)
	{
		var ite = new window.MenuItem("", "", true, name, href, id);
		window.menuMakerFunction(ite.element);
		window.menuItems.push(ite);
		ite.add();
	}
	window.removeMenuItem = function(name, href)
	{
		window.menuItems.each(function(item, index, array) {
			if(item.getName() == name && window.getAddress() == href)
			{
				item.remove();
				array.erase(item);
			}
		});
	}
	window.remakeMenu = function(newItems)
	{
		var newItems = $A(newItems);
		$('menuList').empty();
		window.menuItems.empty();
		newItems.each(function(item) {
			window.addMenuItem(item.name, item.address, item.id);
		});
		window.idBasedMenuItems();
	}
	if(window.requireLogin && !window.logedIn)
	{
		window.location = "index.php?error=Du+må+være+logget+inn+for+å+se+den+siden!";
		return;
	}
	$("loginText").set('opacity', 0);
	var list = $$('#menuList li a');
	window.menuMakerFunction = function(element)
	{
		//alert(element);
		var fx = new Fx.Morph(element, {duration: 150, link: 'cancel'});
		element.addEvent('mouseenter', function() {
			fx.start('.menu_active');
		});
		element.addEvent('mouseleave', function() {
			fx.start('.menu_normal')
		});
		element.set('class', 'menu_normal');
	}
	list.each(window.menuMakerFunction);
	document.oncontextmenu = function(e)
	{
		var e = new Event(e);
		if(e.control)
		{
			return true;
		}
		else
		{
			e.stop();
			if(!window.showingLogin && !window.logedIn && !window.newDb)
			{
				window.overLayDiv.changer.set('opacity', 0);
				window.overLayDiv.changer.set('display', '');
				window.overLayDiv.changer.set('width', $(document).getSize().x);
				window.overLayDiv.changer.set('height', $(document).getSize().y);
				window.overLayDiv.changer.set('top', $(document).getScroll().y);
				window.overLayDiv.changer.set('left', $(document).getScroll().x);
				window.overLayDiv.fade('in');
				window.loginDiv.changer.set('opacity', 0);
				window.loginDiv.changer.set('display', '');
				window.loginDiv.changer.set('top', $(document).getScroll().y + ($(document).getSize().y / 2) - (window.loginDiv.getSize().y / 2));
				window.loginDiv.changer.set('left', $(document).getScroll().x + ($(document).getSize().x / 2) - (window.loginDiv.getSize().x / 2));
				window.loginDiv.fade('in');
				window.showingLogin = true;
			}
		}
	}
	$('header').addEvent('dblclick', document.oncontextmenu);
	var list = $$('span.nummer');
	list.each(function(element) {
		var n = element.get('number');
		var newN = new Element('span', {'text': n});
		newN.inject(element, 'before');
		element.destroy();
	});
	var updater = function()
	{
		window.overLayDiv.changer.set('width', $(document).getSize().x);
		window.overLayDiv.changer.set('height', $(document).getSize().y);
		window.overLayDiv.changer.set('top', $(document).getScroll().y);
		window.overLayDiv.changer.set('left', $(document).getScroll().x);
		window.loginDiv.changer.set('top', $(document).getScroll().y + ($(document).getSize().y / 2) - (window.loginDiv.getSize().y / 2));
		window.loginDiv.changer.set('left', $(document).getScroll().x + ($(document).getSize().x / 2) - (window.loginDiv.getSize().x / 2));
	}
	window.addEvent('scroll', updater);
	window.addEvent('resize', updater);
	$("cancleLogin").addEvent('click', function()
	{
		if(window.showingLogin && !window.loggingIn)
		{
			window.overLayDiv.fade('out');
			window.loginDiv.fade('out');
			window.showingLogin = false;
			if($chk($("loginText").periodical))
			{
				$clear($("loginText").periodical);
			}
			$("loginText").get('tween').set('opacity', 0);
			$("loginText").get('tween').set('color', '#fff');
			$("loginText").set('text', 'Logger inn...');
		}
		else if(window.loggingIn)
		{
			window.loginRequest.cancel();
			window.loggingIn = false;
			if($chk($("loginText").periodical))
			{
				$clear($("loginText").periodical);
			}
			$("loginText").get('tween').set('opacity', 0);
		}
	});
	$("loginButton").addEvent('click', function()
	{
		if(!window.loggingIn)
		{
			if($chk($("loginText").periodical))
			{
				$clear($("loginText").periodical);
			}
			window.loggingIn = true;
			window.loginRequest = new Request.JSON({'url': 'Actions/login.php', 'method': 'post', 'data': 'username=' + $("username").value + "&password=" + $("password").value, 'onSuccess': function(response){
				if(response.login)
				{
					$("loginText").set('text', 'Logget inn...');
					$clear($("loginText").periodical);
					$("loginText").get('tween').cancel();
					$("loginText").get('tween').set('opacity', 1);
					$('loginText').highlight("#aa8", "#000");
					window.refreshPage.delay(1000, window);
				}
				else
				{
					$("loginText").set('text', 'Galt brukernavn eller passord!');
					$clear($("loginText").periodical);
					$("loginText").get('tween').cancel();
					$("loginText").get('tween').set('opacity', 1);
					var fx_bad = function()
					{
						$("loginText").get('tween').start('color', '#f00').chain(function(){this.start('color', '#fff');});
					}
					fx_bad();
					$("loginText").periodical = fx_bad.periodical(2000);
				}
				window.loggingIn = false;
			}});
			window.loginRequest.send();
			$("loginText").set('tween', {duration: 1000, 'link': 'cancel'});
			$("loginText").get('tween').set('opacity', 0);
			$("loginText").get('tween').set('color', '#fff');
			$("loginText").set('text', 'Logger inn...');
			var fx_login = function()
			{
				$("loginText").get('tween').start('opacity', 1).chain(function(){this.start('opacity', 0);});
			}
			fx_login();
			$("loginText").periodical = fx_login.periodical(2000);
		}
	});
	window.idBasedMenuItems = function()
	{
		if(window.logedIn)
		{
			var logOutButton = $("loggUt");
			logOutButton.addEvent("click", function(){
				var request = new Request.JSON({'url': 'Actions/logout.php', 'method': 'post', 'onSuccess': function(response){
					if(window.requireLogin)
					{
						window.getAddress("index.php");
					}
					else
					{
						window.refreshPage(false);
					}
				}});
				request.send();
			});
		}
	}
	window.idBasedMenuItems();
	window.loginDiv.addEvent('keydown', function(e)
	{
		var e = new Event(e);
		if(e.key == "enter")
		{
			$("loginButton").click();
			e.stop();
		}
	});
	var split = window.location.toString().split("#");
	if(split.length == 2)
	{
		if(split[1].substring(0, 1) == "/")
		{
			window.getAddress(split[1].substring(1));
			return;
		}
	}
	window.fireEvent('loaded_pageReady');
});