// event-adding

//addEvent(document, "mouseover", function(e) { Tooltip.show(e); });

addEvent(document, "click", function(e) { // hide blog if click on heading. den här ska bort så klart....

	//for(var t in e) if(!confirm(t)) return;

	var target = getTarget(e);

	if(isTag(target, "h1")) hideBlogPost(target.parentNode.id);
	else if(isMember(target, "blogg_bild")) {

		return;

		// funkar inte perfekt än, så klart

		var offset = (windowDimensions().height - currentStyle(target, "height")) / 2;
		scrollIntoView(target, getScrollableObject(document.body, id("scroller")), offset);
	} else if(isMember(target, "mini_galleri_anchor")) {
		miniGallery(target.getAttribute("start"), target.getAttribute("stop"));
	}
});/**/

document.oncontextmenu = function(e) {

	e = e || window.event;
	var target = getTarget(e);
	
	if(isTag(target, "img") && target.id != "bloglovin" && !isMember(target, "kommentar_hus")) return (e.ctrlKey) ? true : false;
};

// init the site

function initPrickig() { // initiates some events and stuff

	//new ErrorHandler("php/handleerror.php"); // disablad under debug så klart

	// to create an updated script-file in silence if needed
	simplePost("php/createjscache.php", "silenced=true&files=js/util.js,js/ajax.js,js/drag.js,js/extras.js,js/util_extras.js,js/default.js");

	var hash = _unhash(window.location.hash);
	if(!hash) { // check for rss-refered stuff
		var search = window.location.search;
		if(search) hash = _unhash(search.split("=")[1]);
	}

	if(hash) {
		if(!isNaN(hash)) getBlogPost(hash, true);
		// else är det väl en sida eller nåt
	}

	initHistory(function(entryInfo) {

		// den här måste lägga till urlen man kommer emd som post ett (0)

		if(window.stop) window.stop();

		if(entryInfo === "") { // this should mean that we are back at the startpage

			// borde finnas en backup här som kollar för ?blaha

			var last = id("sista");
			if(last) last = last.className;

			if(id("current") && last != id("current").className) { // move to the last page
				last = last.split("_");
				changeBlogMonth(last[0]+last[1], true);
			} else {
				resetScroll();
			}
		} else {
			getBlogPost(entryInfo, true);
		}
	});

	// start with some main-events

	var imageHeight = currentStyle("top_image", "height");
	var topMenu = id("top_menu");
	var topLeft = currentStyle(topMenu, "left");

	// start with some main-events

	var scrollObj = getScrollableObject(document.body, id("scroller"));
	if(scrollObj && topMenu) {
	
		addEvent(scrollObj, "scroll", function() { // set the events for the movement of the top-menu

			var movies = elementsByClassName("tmp_html", "div", "blogg_cont");

			if(scrollObj.scrollTop > imageHeight) {

				topMenu.style.left = topLeft + "px";
				changeClass(topMenu, "top_menu_relative", "top_menu_fixed");

			} else if(scrollObj.scrollTop <= imageHeight) {

				changeClass(topMenu, "top_menu_fixed", "top_menu_relative");
				topMenu.style.left = "0px";
			}

			if(objIsOver(topMenu, movies)) changeClass(topMenu, "top_opacity", "noopacity");
			else changeClass(topMenu, "noopacity", "top_opacity");
		});
	}

	addEvent(window, "resize", function() { resizeBlogImages(); });

	addEvent(window, "unload", function() {

		var hash = window.location.hash.ltrim("#");
		if(hash) setCookie("reload", hash, 10); // behövs nog inte

		// this works in correlation with php sometimes, and sometimes not. onunload isn't very reliable
	});

	resizeBlogImages();

	addEvent(document, "click", _hideallmenu);

	// handle the main-menu

	// start by setting events for the main-menu

	addEvent("pren_menu", "click", handlePrenumerationLayer);

	addEvent("bloglovin_link", "focus", function(e) {
		getTarget(e).blur();
	});

	addEvent("mail_link", "click", handleMailLayer);

	addEvent("changeimagesize", "click", updateImages);

	addEvent("blogg_hider", "click", handleMultipleBlogPosts);

	var nodes = elementsByClassName("top_link", "*", "top_menu");
	var layers = elementsByClassName("sub_layer", "div", "top_menu");
	for(var i = 0, len = nodes.length; i < len; i++) {

		addEvent(nodes[i], "mouseover", function(e) {

			var target = getTarget(e);

			hover(target, "light_mc");

			for(var u = 0, len2 = layers.length; u < len2; u++) {

				if(currentStyle(layers[u], "display") == "block" && layers[u].previousSibling == target) continue;
				else {
					hideLayer(layers[u]);

					var menuPost = layers[u].previousSibling;

					if(isMember(menuPost, "light_mcT")) removeClass(menuPost, "light_mcT");
					else removeClass(menuPost, "dark_mcT");
				}
			}
		});
	}

	var bloggMenuPost = id("blogg_menu_post");
	addEvent(bloggMenuPost, "click", function() {
		addClass(bloggMenuPost, "light_mcT");
	});

	_setmenuintervals("blogg_menu_post", "blogg_menu");

	// handle the first sub-menu

	var subNodes = elementsByClassName("sub_menu", "", "blogg_menu");
	var subLayers = elementsByClassName("sub_layer", "div", "blogg_menu");
	
	for(var i = 0, len = subNodes.length; i < len; i++) {

		var hasLayer = isMember(subNodes[i].nextSibling, "sub_layer");
		if(!hasLayer) addEvent(subNodes[i], "click", function(e) { _hideallmenu(null, true); });
		
		addEvent(subNodes[i], "mouseover", function(e) {

			var target = getTarget(e);

			hover(target, "dark_mc");

			for(var u = 0, len2 = subLayers.length; u < len2; u++) {

				if(currentStyle(subLayers[u], "display") == "block" && subLayers[u].previousSibling == target) {
					continue;
				} else {
					hideLayer(subLayers[u]);
					removeClass(subLayers[u].previousSibling, "dark_mcT");
				}
			}
		});
	}

	// handle calender-menu

	var calMenuPost = id("calender");
	var calenderLayer = id("calender_layer");

	_setmenuintervals(calMenuPost, function() { // pass in some ajax-stuff that fills the calender-layer

		var currentLoadedMonth = id("current").className;

		if(calenderLayer.innerHTML.contains("laddar")) {

			var split = currentLoadedMonth ? currentLoadedMonth.split("_") : [0,0];
			simpleGet("php/month_kal.php?year=" + split[0] + "&month=" + split[1], function(r) { calenderLayer.innerHTML = r; });
		}

		showLayer(calenderLayer);
		addClass(calMenuPost, "dark_mcT");
	});
	
	// handle more-menu

	var moreMenuPost = id("more");
	var moreLayer = id("more_layer");

	_setmenuintervals(moreMenuPost, function() {

		// uppdatera infon här since its done unobtrusive

		showLayer(moreLayer);
		addClass(moreMenuPost, "dark_mcT");

	});

	setAllBlogPostEvents();

	// renew cookie
	//var cookie = getCookie("all");
	//if(cookie) setCookie("tmp_url", cookie);

	//fillScreen("scroller", false, 0, true);
}

// handles the site-structure, sort of

/*function loadUrl(url, target, callback, urlToSave) { // urlToSave is the real url to save for reload, if it's not the same as url

	if(!urlToSave) urlToSave = url;

	// den här får fixa hash och så, bland andra

	target = id(target);
	if(!url || !target) return;

	target.innerHTML = "<span class=\"load_page\">Sidan laddas och oj vad det jobbas för att det ska gå fort...</span>";

	simpleGet(url, function(r) {

		target.innerHTML = r;
		if(callback) callback();

		id("calender_layer").innerHTML = "laddar kalender...";

		setCookie("tmp_url", encodeURIComponent(urlToSave));
	});
}*/

// blog-stuff

function setAllBlogPostEvents() {

	for(var i = 0, elem = elementsByClassName("blogg_post_cont", "div", "blogg_cont"), len = elem.length; i < len; i++)
		setBlogPostEvents(elem[i].id);
}

function setBlogPostEvents(date) {

	var post = id(date);

	date = date.trim("_cont");

	var img = elementsByClassName("blogg_bild", "img", post);
	for(var i = 0, len = img.length; i < len; i++) {
		img[i].ondragstart = function() { return false; }
	}

	/*var blogPost = id(date + "_cont");
	if(!blogPost) return;

	var blog = id("date");

	// heading

	var h1 = blogPost.getElementsByTagName("h1")[0];
	if(h1) addEvent(h1, "click", function() { hideBlogPost(date); });

	// images

	var height = windowDimensions().height;

	for(var i = 0, images = elementsByClassName("blogg_bild", "img", blog), len = images.length; i < len; i++) {
		
		addEvent(images[i], "click", function(e) {

			var target = getTarget(e);
			scrollIntoView(target, getScrollableObject(document.body, id("scroller")), ((height - currentStyle(target, "height")) / 2));
		});
	}

	// minigalleries

	for(var i = 0, nodes = elementsByClassName("mini_galleri_anchor", "div", blog), len = nodes.length; i < len; i++) {
		
		addEvent(nodes[i], "click", function(e) {

			var target = getTarget(e);
			miniGallery(target.getAttribute("start"), target.getAttribute("stop"));
		});

	}*/

	// kommentarer så klart...
}

function getBlogPost(date, noHistory) { // collects a blogpost with ajax

	if(!date) return;

	var requestedMonth = date.substring(0,4);
	var element = elementsByClassName("blogg_post_cont", "div", "blogg_cont", true);

	if(!element || requestedMonth != element.id.substring(0,4)) { // need to load another month

		changeBlogMonth(date, noHistory);

	} else {

		if(date.length < 6) {

			resetScroll();
		} else {

			showBlogPost(date);
			if(!noHistory) addToHistory(date);
		}
	}
}

function changeBlogMonth(date, noHistory) { // changes the loaded month, and scrolls down to a day if day is specified in date

	var blogCont = id("blogg_cont");
	var year = date.substring(0,2), month = date.substring(2,4).ltrim("0");

	blogCont.innerHTML = "<span id=\"load_page\" class=\"load_page\">jobbar som tusan </span>";
	
	var loader = id("load_page");

	var interval = setInterval(function() {

		if(loader.innerHTML.indexOf("jobbar som tusan ") != 0) {
			clearInterval(interval);
			return;
		}

		if(loader.innerHTML != "jobbar som tusan ...") loader.innerHTML += ".";
		else loader.innerHTML = "jobbar som tusan ";
	}, 500);

	simplePost("php/blogparent.php", "fromsite&year=" + year + "&month=" + month, function(r) {

		clearInterval(interval);

		blogCont.innerHTML = preprocess(r);

		if(date.length > 4) showBlogPost(date);
		else resetScroll();

		if(!noHistory) addToHistory(date);

		var elements = elementsByClassName("blogg_post_cont", "div", "blogg_post");
		for(var i = 0, len = elements.length; i < len; i++) setBlogPostEvents(elements[i].id.split("_")[0]);
	});
}

function showBlogPost(blogPost, noScroll) { // shows a blogpost, and loads it if needed

	blogPost = id(blogPost);
	if(!blogPost) return;

	date = blogPost.id.trimText();

	if(!id(date + "_cont")) return; // must have a container

	hideLayer(id(date + "_mini"));
	showLayer(blogPost);

	if(blogPost.innerHTML.split(" ")[0] == "laddar") simplePost("php/getblog.php","datum=" + date, ( noScroll ? date : function(r) {

		blogPost.innerHTML = preprocess(r);

		setBlogPostEvents(date);

		scrollBlog(date + "_cont");
	} ));
	else if(!noScroll) scrollBlog(date + "_cont");

	_hideallmenu(null, true);
}

function hideBlogPost(blogPost) {
	
	blogPost = id(blogPost);
	if(!blogPost) return;

	hideLayer(blogPost);
	showLayer(blogPost.id + "_mini");
}

function _showAllBlogPosts(year, month) {

	deleteCookie("all");

	simplePost("php/blogparent.php", "fromsite&year=" + year + "&month=" + month, function(r) {

		id("blogg_cont").innerHTML = preprocess(r);

		setAllBlogPostEvents();
	});	
}

function handleMultipleBlogPosts() { // hide or show all blogposts

	// den här kan nog effektiviseras rejält...

	getScrollableObject(document.body, id("scroller")).scrollTop = 0;
	var obj = id("blogg_hider");

	var blogs = elementsByClassName("blogg_post", "div", "blogg_cont");
	var len = blogs.length;

	if(getCookie("all")) { // show all blogs

		deleteCookie("all");
		obj.innerHTML = "göm gamla";

		var monthInfo = id("sista").className.split("_");
		_showAllBlogPosts(monthInfo[0], monthInfo[1]);

	} else { // hide all blogs, with an exception for the last
		
		var latestMonth = id("sista").className.split("_");
		var firstBlogToHide = (blogs[0].id.substring(0, 4) == (latestMonth[0] + latestMonth[1])) ? 1 : 0;

		setCookie("all", true);

		var images = elementsByClassName("blogg_bild", "img", "blogg_cont");
		for(var u = 0, completedFiles = 0, imgLen = images.length; u < imgLen; u++) if(!images[u].complete) completedFiles++;

		if((completedFiles / imgLen) >= 0.2) { // behöver nog ses över
			window.location.reload();
		} else {
			obj.innerHTML = "visa gamla";
			for(var i = firstBlogToHide; i < len; i++) hideBlogPost(blogs[i]);
		}
	}
}

function scrollBlog(obj) {

	obj = id(obj);
	if(!obj) return;

	scrollIntoView(obj, getScrollableObject(document.body, id("scroller")), 10);
}

function resetScroll() {
	getScrollableObject(document.body, id("scroller")).scrollTop = 0; 
}

// minigallery-stuff

function miniGalleryGluer(obj) { // checks position after mouseup and glues it back if its suitable

	var anchor = id(obj.id.split("_lager")[0] + "_anchor");

	var anchorBottom = currentStyle(anchor, "top") + currentStyle(anchor, "height") - getScrollableObject(document.body, id("scroller")).scrollTop;
	var anchorLeft = currentStyle(anchor, "left");
	var objTop = currentStyle(obj, "top");
	var objLeft = currentStyle(obj, "left");
	
	var offset = 12;

	if(objTop > (anchorBottom - offset) && objTop < (anchorBottom + offset) &&
		objLeft > (anchorLeft - offset) && objLeft < (anchorLeft + offset * 2)) {

		// must force explorer for some reason
		dispatchEvent(document, "mouseup");

		insertAfterNode(anchor, obj);
		removeCss(obj, "top, left");
	}
}

function miniGalleryDrag(obj) { // initiates minigalleries for dragging

	if(obj.parentNode.tagName != "BODY") {

		var currentTop = currentStyle(obj, "top", false, false) - getScrollableObject(document.body, id("scroller")).scrollTop - 2;
		var currentLeft = currentStyle(obj, "left", false, true);
		
		document.body.appendChild(obj);

		obj.style.left = currentLeft + "px";
		obj.style.top = currentTop + "px";
	}
}

function countTags() {
}

function miniGallery(first, last) { // toggler for the minigalleries

	var galleryID = "mini_" + first;

	var obj = id(galleryID + "_lager");
	var anchor = id(galleryID + "_anchor");

	var nav;

	if(!anchor) return;
	if(!obj) {

		obj = document.createElement("div");
		obj.id = galleryID + "_lager";
		obj.className = "float_lager minigalleri";
		obj.innerHTML = "<div class=\"mini_filler\">laddar bilder...</div>";

		createFakeWindow(obj, false, function() { miniGallery(first); }, false, true);

		insertAfterNode(anchor, obj);

		nav = id(galleryID + "_lager_nav");

		//some dragging events
		addEvent(nav, "mousedown", function(e) { miniGalleryDrag(obj); drag(e, obj); });
		addEvent(nav, "mouseup", function(e) { miniGalleryGluer(obj); });
	}

	if(currentStyle(obj, "display") != "block") { // show the layer

		anchor.innerHTML = "färre bilder <span class=\"mini_galleri_anchor_pil\">&lt;</span>";

		var tmp = elementsByClassName("mini_filler", "div", obj, true);
		var miniInner = tmp.innerHTML;

		var failText = "verkar inte finnas några bilder, nånting kanske har gått fel.";

		if(miniInner == "laddar bilder..." || miniInner == failText) {

			if(!first || !last) return;

			simplePost("php/minigalleri.php", "start=" + first + "&slut=" + last, function(resp) {

				var contentsCheck = resp ? true : false;

				tmp.innerHTML = contentsCheck ? resp : failText;

				//set events to the images
				var img = getChildNodes(tmp, false, "img");
				for(var i = 0, len = img.length; i < len; i++) {
					addEvent(img[i], "click", function(e) { showImageScreen(getTarget(e).id); });
				}

				nav.style.width = (currentStyle(obj, "width") - 2) + "px"; // for ie 7
			});
		}

		var scroller = getScrollableObject(document.body, id("scroller"));

		fakeWindowToTop(obj);

		// the scrolltop-stuff is because of internet explorer...
		var scrollTop = scroller.scrollTop;
		showLayer(obj);
		scroller.scrollTop = scrollTop;

		nav.style.width = (currentStyle(obj, "width") - 2) + "px"; // for ie 7
				
	} else { // hide the layer

		anchor.innerHTML = "fler bilder <span class=\"mini_galleri_anchor_pil\">&gt;</span>";
		hideLayer(obj);
	}
}

// image-screen

function showImageScreen(image) { // shows the fullscreen-image-screen, sets relevant events and passes the ball on

	var cont = id("imageViewer_cont");
	var sliderNode = id("slider_cont"); //the slider that controls the slideshow

	if(!image) { //reset and hide

		removeEvent(document, "keydown", _keyloggerforimage);

		cont.style.display = "none";
		window.onresize = null;

		return;
	}

	cont.style.display = "block";

	var imageMenu = id("imageViewer_nav_cont");
	var helpIcon = id("q");
	var imgHelp = id("imageViewer_help");

	removeClass(helpIcon, "imageViewer_hoverT");
	hideLayer(imgHelp);

	//make the menu stand out a short time
	addClass(imageMenu, 'imageViewer_notify');
	var standOutInterval = setInterval(function() { 
		removeClass(imageMenu, 'imageViewer_notify');
		clearInterval(standOutInterval);
	}, 500);
	
	if(!cont.initiated) { //set menu-events
		
		//set slider-events
		
		var sliderInfo = elementsByClassName("slider_info", "div", sliderNode, true);

		Slider.init(sliderNode, function(e, position) { // mousedrag
		
			if(window.sliderInterval) window.clearInterval(sliderInterval);

			if(position < -5 || position > 5) _setSliderInterval(position);
			else position = 0;
			
			sliderInfo.innerHTML = _createVisibleTime(position)
			
		}, function(e, position) { // mousedown
		
			sliderInfo.innerHTML = _createVisibleTime(position);
			showLayer(sliderInfo);
			
		}, function(e, position) { // mouseup
		
			if(position > -5 && position < 5) {
				Slider.setPosition(sliderNode, 0);
				position = 0;
			}
		
			sliderInfo.innerHTML = _createVisibleTime(position);
			
			window.hideSliderInfo = setInterval( function() {
				hideLayer(sliderInfo);
				window.clearInterval(window.hideSliderInfo);
			}, 300);
			
		});
		
		// events related to the navigation

		var menuElems = elementsByClassName("imageViewer_nav_menu", "span", imageMenu);

		for(var i = 0, len = menuElems.length; i < len; i++) {
		
			addEvent(menuElems[i], "mouseover", function(e) {
				hover(getTarget(e), "imageViewer_hover");
			});
		}

		addEvent(id("imageBackward"), "click", function() { browseImages(); });
		addEvent(id("imageForward"), "click", function() { browseImages(true); });
		addEvent(id("imageViewer_nav_kryss"), "click", function(e) { showImageScreen(); });
		addEvent(helpIcon, "click", function() {
			toggleClass(helpIcon, "imageViewer_hoverT");
			toggleLayer(imgHelp); 
		});

		addEvent("imageViewer_body", "focus", function(e) {
			getTarget(e).blur();
		});

		addEvent("imageViewer_bild_cont", "click", function() {
			browseImages(true);
		});
		
		addEvent(id("auto"), "click", function(e) {
		
			Slider.toggle(sliderNode);
			_handleSliderVisibility(sliderNode);
		});

		cont.initiated = true;
	}

	// temporary events

	addEvent(window, "resize", function() {
		showImage(elementsByClassName("imageViewer_bild", "img", "imageViewer_body", true).id);
	});

	addEvent(document, "keydown", _keyloggerforimage);
	
	// show the image and related stuff
	_handleSliderVisibility(sliderNode);
	showImage(image);
}

// a few helper-functions for the slider, mostly to save code

function _handleSliderVisibility(sliderNode) {

	if(currentStyle(sliderNode, "display") == "block") {
		
		addClass("auto", "imageViewer_hoverT");
		
		var position = Slider.getPosition(sliderNode);
		
		if(position > 87) {
			Slider.setPosition(sliderNode, 87);
			position = 87;
		} else if(position < -87) {
			Slider.setPosition(sliderNode, -87);
			position = -87;
		}
		
		if(window.sliderInterval) window.clearInterval(sliderInterval); // reset the counter
		_setSliderInterval(position);
	
	} else {

		removeClass("auto", "imageViewer_hoverT");
		if(window.sliderInterval) window.clearInterval(sliderInterval);
	}
}

function _setSliderInterval(position) {

	if(position == 0) return;

	window.sliderInterval = window.setInterval(function() {
				
		browseImages(position < 0 ? false : true);

	}, _computeTimerSpeed(position));
}

function _computeTimerSpeed(position) {
	return (7001 - Math.abs(position) * 70);
}

function _createVisibleTime(position) {
	if(position == 0) return "paus";
	else return (_computeTimerSpeed(position) / 1000).toFixed(1) + "s";
}

// other image-functions

function resizeImage(image, offsetV, offsetH) { // resize one image

	return;

	image = id(image);
	if(!image || !isTag(image, "img")) return;

	resizeImages([ image ], offsetV, offsetH);
}

function resizeImages(imageCollection, offsetV, offsetH) { // resize multiple images

	return;

	if(!imageCollection) return;

	var wd = windowDimensions();
	var maxHeight = wd.height - offsetV;
	var maxWidth = wd.width - offsetH;

	// spara första storleken, om den inte redan finns

	for(var i = 0, len = imageCollection.length; i < len; i++) {

		if(isMember(imageCollection[i], "noresize")) continue;

		if(!imageCollection[i].realHeight) imageCollection[i].realHeight = imageCollection[i].height;
		if(!imageCollection[i].realWidth) imageCollection[i].realWidth = imageCollection[i].width;

		// den här bör nog vara den riktiga storleken, kanske
		var imageHeight = imageCollection[i].realHeight;
		var imageWidth = imageCollection[i].realWidth;

		// check and change size but keep proportions

		if(imageHeight > maxHeight) { // the image is to high

			imageWidth *= (maxHeight / imageHeight);
			imageHeight = maxHeight;
		}

		if(imageWidth > maxWidth) { // the image is to wide

			imageHeight *= (maxWidth / imageWidth);
			imageWidth = maxWidth;
		}

		addCss(imageCollection[i], { "height" : imageHeight + "px", "width" : imageWidth + "px" });
	}
}

function preprocess(input) { // preprocess html-input

	if(!input) return false;

	if(!getCookie("noimageresize")) { // resize images

		var tmp = document.createElement("div");
		tmp.innerHTML = input;

		resizeImages(elementsByClassName("blogg_bild", "img", tmp), 10, 10);

		input = tmp.innerHTML;
	}

	return input;
}

function resizeBlogImages() {
	return;

	if(!getCookie("noupdateimages")) resizeImages(elementsByClassName("blogg_bild", "img", "blogg_cont"), 10, 10);
	else setCookie("noupdateimages", true); // reset the time it is stored
}

function showImage(imageName) { // displays the actual image, computes size and stuff

	imageName = imageName.trim("_big");

	var imageContainer = id("imageViewer_bild_cont");

	var workingAreaHeight = windowDimensions().height - 22; //22 is the height of the top-menu with margin and borders
	id("imageViewer_body").style.height = workingAreaHeight + "px";

	var bigImageName = imageName + "_big";

	// create the image-node to show
	imageContainer.innerHTML = "<img id=\"" + bigImageName + "\" src=" + id(imageName).src + " class=\"imageViewer_bild\" />";

	var bigImage = id(bigImageName);
	
	// handle the size and position
	resizeImage(bigImage, 32, 10);
	imageContainer.style.top = workingAreaHeight / 2 - bigImage.height / 2 + "px";
}

function browseImages(forward) { // toggles between the images

	var image = id("imageViewer_body").getElementsByTagName("img")[0];
	image = image.id.split("b");

	var newNumber = parseInt(image[1].split("_big")[0]);
	newNumber += (forward) ? 1 : -1;

	var newName = image[0] + "b" + newNumber;
	id(newName) ? showImage(newName) : showImageScreen();
}

function _keyloggerforimage(e) { // private function that enables toggling between images with arrow-keys

	e = e || window.event;

	switch((e) ? e.keyCode : event.keyCode) {
		case 27: showImageScreen(); break;
		case 37: case 40: browseImages(); break;
		case 39: case 38: browseImages(true); break;
	}
}

//mail and comment-functions

function handlePrenumerationLayer() {

	var obj = id("pren_lager");
	var link = id("pren_menu");

	if(currentStyle(obj, "display") != "block") {

		if(!obj.fakeWindow) {

			createFakeWindow(obj, false, function() {
				removeClass(link, "light_mc_t");
			}, false, false);

			positionLayer(obj, "center");

			addEvent("addMail", "click", function() {
				handlePrenumeration(true);
			});

			addEvent("removeMail", "click",  function() {
				handlePrenumeration(false);
			});

			addEvent("riktigmejl_pren", "focus", function(e) {
				onInputFocus(getTarget(e), "mail:");
			});
		}

		var mail = getCookie("mail");
		id("riktigmejl_pren").value = mail ? mail : "mail:";

		addClass(link, "light_mc_t");
		showLayer(obj);

		fakeWindowToTop(obj);

	} else {

		removeClass(link, "light_mc_t");
		hideLayer(obj);
	}
}

function handleMailLayer() {

	var link = id("mail_link");
	var obj = id("mail_lager");

	if(currentStyle(obj, "display") != "block") {

		if(!obj.fakeWindow) {

			createFakeWindow(obj, true, function() {
				resetToCookie("mejl");
				removeClass(link, "light_mc_t");
			}, function() {
				removeClass(link, "light_mc_t");
			}, false);

			positionLayer(obj, "center");

			var textMejl = id("text_mejl");

			// set some events

			addEvent(textMejl, "keyup", function() {
				resizeTextArea(textMejl, true);
			});

			addEvent("namn_mejl", "focus", function(e) {
				onInputFocus(getTarget(e), "namn:");
			});

			addEvent("riktigmejl_mejl", "focus", function(e) {
				onInputFocus(getTarget(e), "mail:");
			});

			addEvent("riktigmejl_mejl", "focus", function(e) {
				onInputFocus(getTarget(e), "mail:");
			});

			addEvent("subject_mejl", "focus", function(e) {
				onInputFocus(getTarget(e), "ämne:");
			});

			addEvent("text_mejl", "focus", function(e) {
				onInputFocus(getTarget(e), "skriv här!");
			});

			addEvent("skicka_mejl", "click", sendMail);

			addEvent("sudda_mejl", "click", function() {
				resetToCookie("mejl");
			});

			addEvent("personalInfoButton_mejl", "click", function() {
				handlePersonalData("mejl");
			});
		}

		addClass(link, "light_mc_t");
		showLayer(obj);

		_fixinputfields("mejl");

		fakeWindowToTop(obj);

	} else {

		removeClass(link, "light_mc_t");
		hideLayer(obj);
	}
}

function handleCommentLayers(obj) { // shows showcomment-layer and writecomment-layer

	obj = id(obj);

	var currStyle = currentStyle(obj, "display"); // have to save because it should only be shown if it's hidden
	
	// hide all layers currently showing for this blog
	for(var i = 0, elements = elementsByClassName("kommentar_lager", "div", obj.parentNode), len = elements.length; i < len; i++)
		hideLayer(elements[i]);
	
	if(currStyle != "block") { // show requested layer

		var tmp = obj.id.split("_");
		if(tmp[1] == "skriv") _fixinputfields(tmp[0]);

		showLayer(obj);
	}
}

function handlePrenumeration(add) { // if no parameter (or false) the address is removed

	var obj = id("pren_lager");

	var mail = id("riktigmejl_pren").value;
	if(!mail || mail.indexOf("@") == -1) {
		alert("Felaktig mailadress!");
		return;
	}

	simplePost("php/handlepren.php", "mail=" + mail.trim() + ( add ? "&add=true" : ""), function(r) {

		var text = "";

		switch(r) {
			case "rem": text = mail + " är borttagen från listan och slipper därmed få mail från oss. hmpf!"; break;
			case "add": text = mail + " kommer härmed få mail varje gång vi uppdaterar!"; break;
			case "rem_noexists": text = mail + " finns ju inte ens med i listan!"; break;
			case "add_exists": text = mail + " är redan med i listan..."; break;
			default: text = "Nåt gick fel!"; // r == error
		}

		alert(text); // tell the user how it went

		if(r != "error") handlePrenumerationLayer();
	});
}

function sendMail() { // inte testad än tror jag

	var data = _dataHelper("mejl");
	if(!data) return;

	simplePost("php/sendmail.php", "ajax=314159265&namn=" + data[0] + "&riktigmejl=" + data[1] + "&subject=" + data[2] + "&text=" + data[3], function(r) {
		
		if(r == "1") {
			showAlertBox("Mailet är skickat!");
			//alert("Mailet är skickat!");
			handleMailLayer();
		} else {
			showAlertBox("Något gick fel. prova igen...");
			//alert("Något gick fel. prova igen.");
		}
	});
}

function saveComment(date) {

	var data = _dataHelper(date);
	if(!data) return;

	if(data[2].length > 0 && data[2].indexOf("http") == -1) data[2] = "http://" + data[2];

	if((a = data[3].match(/<a /gi)) && a.length >= 5) return; // more than five links are probably spam
	if(data[3].match(/<script/gi) || data[3].match(/<meta/gi)) return; // no script och meta-tags allowed

	data[3].replace(/img/gi, "img class=\"blogg_kommentar\"");

	var commentsLayer = id(date + "_kommentarer");
	commentsLayer.innerHTML = "<div class=\"kommentar\">laddar kommentarer...</div>";

	simplePost("php/handlecomments.php", "name=" + data[0] + "&mail=" + data[1] + "&url=" + data[2] + "&text=" + data[3] + "&datum=" + date, function(r) {
		commentsLayer.innerHTML = r;
		resetToCookie(date);
	});

	handleCommentLayers(commentsLayer);
}

function loadComments(date) { // always loads from the server to get the latest

	var obj = id(date + "_kommentarer");

	if(currentStyle(obj, "display") != "block") {

		obj.innerHTML = "<div class=\"kommentar\">laddar kommentarer...</div>";
		simplePost("php/handlecomments.php","datum=" + date, obj.id);
	}

	handleCommentLayers(obj);
}

function handlePersonalData(date) { // store or unstore data for next time
	
	var storeButton = id("personalInfoButton_" + date);
	var storeText = id("personalInfoText_" + date);

	if(isMember(storeButton, "booleanchooser_inactive")) { // throw away everything

		deleteCookie("namn");
		deleteCookie("mail");
		deleteCookie("url");

		removeClass(storeButton, "booleanchooser_inactive");
		storeText.innerHTML = "<-- kom ih&aring;g mig";

	} else { // save and indicate that we are saving

		_storePersonalData(date);

		addClass(storeButton, "booleanchooser_inactive");
		storeText.innerHTML = "";
	}
}

function onInputFocus(obj, value) { // sort of a wrapper but with some logic

	if(value && obj.value == value) obj.value = "";

	focus(obj, 'input_focus', false, false, true);
}

function resetToCookie(date) { // resets to cookies if set and value if not

	var name = id("namn_" + date);
	var mail = id("riktigmejl_" + date);

	var nameCookie = getCookie("namn");
	var mailCookie = getCookie("mail");

	name.value = nameCookie || "namn:";
	mail.value = mailCookie || (date == "mejl" ? "mail:" : "mail (visas inte):");

	if(date != "mejl") {
		var url = id("url_" + date);
		var urlCookie = getCookie("url");
		url.value = urlCookie || "url:";
	} else {
		id("subject_mejl").value = "";
	}

	var text = id("text_" + date);

	text.value = "skriv här!";
	text.style.height = "";
}

function resizeTextArea(obj, followWindow) { // den ska ju helst krympa med men vet inte hur

	obj = id(obj);

	var currentHeight = parseInt(currentStyle(obj, "height"));
	var increaseFactor = 46;

	if(followWindow) {

		if(obj.scrollHeight > currentHeight) {
			
			if(currentHeight + currentStyle(obj, "top") + increaseFactor >= windowDimensions().height) obj.style.fontSize = "7pt";
			else obj.style.height = currentHeight + increaseFactor + "px";
		}

	} else if(obj.scrollHeight > currentHeight) {
		obj.style.height = currentHeight + increaseFactor + "px";
	}
}

// a couple of helper-functions for mail and comments

function _collectAndValidateInput(date) { // validates and collects input

	if(!date) return null;

	var data = [];

	data[0] = id("namn_" + date).value.trim();
	data[1] = id("riktigmejl_" + date).value.trim();
	data[2] = ((date == "mejl") ? id("subject_mejl").value : id("url_" + date).value).trim();
	data[3] = id("text_" + date).value.trim().ln2br();

	// simple validation

	if(data[0] == "namn:") data[0] = "";
	if(data[1] == "mail (visas inte):" || data[1] == "mail:" || data[1].indexOf("@") == -1) data[1] = "";
	if((date == "mejl" && data[2] == "ämne:") || (date != "mejl" && (data[2] == "url:" || data[2].indexOf(".") == -1))) data[2] = "";
	if(data[3] == "skriv här!") data[3] == "";

	return data;
}

function _dataHelper(date) { // validates input for comments and mail, and alerts error-notifications

	var data = _collectAndValidateInput(date);
	if(!data[0] || !data[1] || !data[3]) {
		alert("Du måste skriva namn, mail (kommer inte visas) och nåt i meddelande-fältet.");
		return null;
	}

	if(isMember("personalInfoButton_" + date, "booleanchooser_inactive")) _storePersonalData(date, data); // update / create the cookies

	return data;
}

function _storePersonalData(date, data) { // stores personal data as cookies.

	if(!date) return false;
	if(!data) data = _collectAndValidateInput(date);

	if(data[0]) setCookie("namn", data[0]);
	if(data[1]) setCookie("mail", data[1]);
	if(date != "mejl" && data[2]) setCookie("url", data[2]);

	return true;
}

function _fixinputfields(date) { // if fields are untouched and cookies are set the fields are filled with cookie-information

	var nameCookie = mailCookie = urlCookie = null;

	var name = id("namn_" + date);
	if(name) {
		nameCookie = getCookie("namn");
		if(nameCookie && (!name.value || name.value == "namn:")) name.value = nameCookie;
	}

	var mail = id("riktigmejl_" + date);
	if(mail) {
		mailCookie = getCookie("mail");
		if(mailCookie && (!mail.value || mail.value == "mail:" || mail.value == "mail (visas inte):")) mail.value = mailCookie; 
	}

	var url = id("url_" + date);
	if(url) {
		urlCookie = getCookie("url");
		if(urlCookie && (!url.value || url.value == "url:")) url.value = urlCookie;
	}

	var storeButton = id("personalInfoButton_" + date);
	var storeText = id("personalInfoText_" + date);

	if(storeButton && storeText) {

		if(nameCookie || mailCookie || urlCookie) { // indicate that this is stored

			addClass(storeButton, "booleanchooser_inactive");
			storeText.innerHTML = "";
		} else {
			removeClass(storeButton, "booleanchooser_inactive");
			storeText.innerHTML = "<-- kom ih&aring;g mig";
		}
	}
}

// two simple help-functions for the dropdown-menu

function _setmenuintervals(node, onHover) {

	node = id(node);
	onHover = id(onHover);

	var interval;

	var func = function() { // just to save some code

		if(typeof onHover == "function") onHover();
		else {
			addClass(node, "light_mcT");
			showLayer(onHover);
		}

		clearInterval(interval);
	}

	addEvent(node, "mouseover", function() { interval = setInterval(func, 400); });
	addEvent(node, "mouseout", function() { clearInterval(interval); });
	addEvent(node, "click", func);
}

function _hideallmenu(e, dontCheckTarget) {

	if(!dontCheckTarget) {
		var target = getTarget(e);
		if(isMember(target.nextSibling, "sub_layer") || isMember(target, "sub_layer") || isChildNode(target, ".sub_layer", "div")) return;
	}

	var nodes = elementsByClassName("light_mcT");
	for(var i = 0, len = nodes.length; i < len; i++) removeClass(nodes[i], "light_mcT");

	nodes = elementsByClassName("dark_mcT");
	for(var i = 0, len = nodes.length; i < len; i++) removeClass(nodes[i], "dark_mcT");

	var layers = elementsByClassName("sub_layer", "div");
	for(var i = 0, len = layers.length; i < len; i++) hideLayer(layers[i]);
}

// asorted stuff

function updateImages() {

	var target = id("changimagesize");

	if(target.innerHTML == "ändra storlek") {
		deleteCookie("noupdateimages");
		resizeBlogImages();
		target.innerHTML = "behåll storlek";
		_hideallmenu(null, true);

	} else { // ugly with reload but who cares... well I do but...
		setCookie("noupdateimages", true);
		window.location.reload();
	}
}

function displayDirectLink(date) {

	var url = "http://www.prickig.se?date=" + date;

	showAlertBox(url + "<br/><br/><input id='bookmark_button' class='knapp' type='button' value='bookmark' />", true);
	
	id("bookmark_button").onclick = function() {

		var h1 = id(date).getElementsByTagName("h1");
		var title = h1.length > 0 ? h1[0].innerHTML : date;

		if(window.sidebar) window.sidebar.addPanel(title, url, "");
		else window.external.AddFavorite(url, title);
	}
}

function showAlertBox(info) {
	
	if(!info) return;

	var fillArea;

	var node = id("alertbox");
	if(!node) { // this is a singleton-object so create just once

		var fillArea = document.createElement("div");
		fillArea.className = "fillarea";

		var bottomArea = document.createElement("div");
		bottomArea.className = "bottomarea";

		var node = document.createElement("div");
		node.id = "alertbox";

		node.appendChild(fillArea);
		node.appendChild(bottomArea);

		bottomArea.innerHTML = "klicka utanför för att gömma rutan.";

		document.body.appendChild(node);
	}

	fillArea = elementsByClassName("fillarea", "div", node, true);

	fillArea.innerHTML = info;

	// borde anpassa storleken här, för hög öka bredden osv

	showLayer(node, "center");

	setTimeout(function() {
		
		var ev = addEvent(document, "click", function(e) {

			var target = getTarget(e);
			if(target == node || isChildNode(target, node)) return;

			removeEvent(document, ev);
			hideLayer(node);
		});
	}, 200);
}

function getScrollableObject() { // checks which, if any, of the providided objects has overflow

	for(var i = 0, len = arguments.length; i < len; i++) {

		var curr = currentStyle(arguments[i], "overflow");

		if(curr != "hidden" && curr != "none") return arguments[i];
	}

	return null;
}

// direct calls done asap, not onload

initPrickig();
