
	Event.observe(window, 'load', function() {
		initializePage();
	});
	
	// Kept global
	var gOkFunction = null;
	var gCancelFunction = null;
	
	
	//Körs på page-onLoad
	function initializePage()
	{
		observeMouseMovement();
	
		setTimeout(function() {
			keepSessionAlive();
		}, 300000);
	}

	function keepSessionAlive()
	{
		var url = '/actions/session_keep_alive.php';
		var pars = 'ajax=1';
		
		new Ajax.Request(url, {
				method: 'post'
			});
			
		setTimeout(function() {
			keepSessionAlive();
		}, 300000);
	}
	
	
	function trace(data)
	{
		var url = '/actions/ajax_trace.php';
		var pars = 'data='+data;
		
		new Ajax.Request(url, {
				parameters: pars,
				method: 'post'
			});
	}	
	
	
	var pointerX = 0, pointerY = 0;
	function observeMouseMovement()
	{
		Event.observe(document, 'mousemove', onMouseMove, false);
	}
	
	function onMouseMove(event)
	{
		pointerX = Event.pointerX(event);
		pointerY = Event.pointerY(event);
	}

	/*
	// Menysystemet
	*/
	var mainMenuHideTimer = null;
	function openSubMenu(subMenu)
	{
		hideAllSubMenus();
		clearSubMenuTimeout();
		Element.addClassName('subMenu_'+subMenu, 'subMenu_visible');
	}
	
	function menuLinkMouseOut(subMenu)
	{
		mainMenuHideTimer = setTimeout(function() {
			Element.removeClassName('subMenu_'+subMenu, 'subMenu_visible');
		}, 90);
	}
	
	function subMenuMouseOver(subMenu)
	{
		clearSubMenuTimeout();
	}
	
	function hideAllSubMenus()
	{
		var subMenus = $('menu').getElementsByClassName('subMenu');
		
		for (var i=0; i<subMenus.length; i++)
		{
			var subMenu = subMenus[i];
			Element.removeClassName(subMenu, 'subMenu_visible');
		}
	}
	
	function clearSubMenuTimeout()
	{
		if (mainMenuHideTimer != null)
		{
			clearTimeout(mainMenuHideTimer);
		}
	}
	
	/*
	// Sökrutan
	*/
	function SearchBoxFocus(object)
	{
		var defaultKeyword = "Sök...";
		if (object.value == defaultKeyword)
		{
			Element.addClassName(object, 'active');
			Element.addClassName($('searchLeftRoundedCorner'), 'leftActive');
			Element.addClassName($('searchRightRoundedCorner'), 'rightActive');
			object.value = "";
		}
	}

	function SearchBoxBlur(object)
	{
		var defaultKeyword = "Sök...";

		if (object.value == "")
		{
			Element.removeClassName(object, 'active');
			Element.removeClassName($('searchLeftRoundedCorner'), 'leftActive');
			Element.removeClassName($('searchRightRoundedCorner'), 'rightActive');
			object.value = defaultKeyword;
		}
	}
	
	function validateSearch(form)
	{
		var defaultKeyword = "Sök recept här";
		var keywords = form.keywords.value;
		
		if (keywords.length == 0 || keywords == defaultKeyword)
		{
			alert('Du måste skriva in något att söka på!');
			return false;
		}
	
		return true;
	}

	function htmlEntities(texto)
	{
		if (texto.length == 0)
		{
			return '';
		}
		
		var i,carac,letra,novo='';
		for(i=0;i<texto.length;i++)
		{
			carac = texto.charCodeAt(i);
			if( (carac > 47 && carac < 58) || (carac > 62 && carac < 127) || carac == 10 ){
				novo += texto.charAt(i);
			}
			else
			{
				novo += "&#" + carac + ";";
			}
    	}
	   	return novo;
	}

	function delayedRedirect(url, timeout)
	{
		setTimeout(function() {
			window.location.href = url;
		}, timeout);
	}


	function plonk(str)
	{
		alert('Debugutskrift:\n'+str);
	}

	function createCookie(name, value, days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}

	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}

	function eraseCookie(name) {
		createCookie(name,"",-1);
	}

	//
	//	KONVERTERINGSFUNKTIONER
	//

	function js2html(str)
	{
		str = decodeURIComponent(str);
		str = htmlEntities(str);
		str = str.replace(/\n/g, "<br />");
		return str;
	}
	
	function html2input(str)
	{
		str = htmlEntities(str);
		return str;
	}
	
	// To replace js2input().
	// NOT compatible.
	// TODO: 
	// Notera, används i receptboken, så inte helt åt helvete, tror jag.
	function NEWjs2input(str)
	{
		// TODO: Varför inte htmlEntities? Borde vi nog ha... 
//		str = htmlEntities(str);
		// line breaks/endings does not survive this pass.
		str = str.replace(/\n/g, "");
		str = str.replace(/\r/g, "");
		return str;
	}
	
	function NEWjs2textarea(str)
	{
		// TODO: Varför inte htmlEntities? Borde vi nog ha... 
//		str = htmlEntities(str);
		// line breaks/endings does not survive this pass.
//		str = str.replace(/\n/g, "");
//		str = str.replace(/\r/g, "");
		return str;
	}	
	
	function js2input(str)
	{
		str = js2html(str);
		return str;
	}
	
	function input2js(str)
	{
		str = encodeURIComponent(str);
		return str;
	}

	function html2textarea(str)
	{
		str = ITKunescapeHTML(str);
		return str;
	}

	function js2textarea(str)
	{
		str = decodeURIComponent(str);
		return str;
	}

	function ITKunescapeHTML(html)
	{
		var htmlNode = document.createElement("DIV");
		htmlNode.innerHTML = html;

		if(htmlNode.innerText)
		{
			return htmlNode.innerText; // IE
		}

		return htmlNode.textContent; // FF
	}

	//
	//	INLOGGNIGSRUTAN
	//

	function OpenRealLoginDialog()
	{
		var loginDialogHTML = '';
		loginDialogHTML += '<div id="loginLoadingImage"></div>';
		loginDialogHTML += '<fieldset class="loginForm">';
		loginDialogHTML += '	<label>Användarnamn:</label>';
		loginDialogHTML += '		<input class="text username" type="text" id="login_username" name="username" maxlength="50" value="" onfocus="Element.addClassName(this, \'focus\');" onblur="Element.removeClassName(this, \'focus\');" onkeypress="submitOnEnter(event);" /><br />';
		loginDialogHTML += '	<label>Lösenord:</label>';
		loginDialogHTML += '		<input class="text password" type="password" id="login_password" name="password" maxlength="50" value="" onfocus="Element.addClassName(this, \'focus\');" onblur="Element.removeClassName(this, \'focus\');" onkeypress="submitOnEnter(event);" />';
		loginDialogHTML += '	<div class="checkboxes clear">';
		loginDialogHTML += '		<input type="checkbox" name="autologin" value="1" checked="checked"  id="login_autologin" /> <label class="autologin" for="login_autologin">Kom ihåg mig</label><br />';
		loginDialogHTML += '	</div>';
		loginDialogHTML += '</fieldset>';
		loginDialogHTML += '<div class="loginStatus" id="loginStatus"></div>';
		loginDialogHTML += '<p class="center clear"><input type="button" value="Logga in" onclick="Login();" /> <input type="button" value="Avbryt" onclick="CloseDialogBox();" /></p>';
		loginDialogHTML += '<div class="loginFooter big padding4"><a href="/bli_medlem/" style="color: #b65709;"><strong>Bli medlem nu!</strong></a> <a href="/glomt_losenord/">Glömt lösenordet?</a></div>';

		ShowDialogBox(loginDialogHTML,{title: 'Logga in!'});

		return false;		
	}
	
	
	
 	function OpenLoginDialog(object)
	{
		preLoginDialogHTML = '';
		preLoginDialogHTML += '<div style="height: 300px;" class="preLoginBox center">';
		preLoginDialogHTML += '<div class="leftColumn">';
		preLoginDialogHTML += '<img src="/images/icons/becomeMember.gif" />';
		preLoginDialogHTML += '<h4>Inte medlem än?</h4>';
		preLoginDialogHTML += '<p>Bli medlem <strong>gratis</strong> och få:</p>';
		preLoginDialogHTML += '<ul class="pros">';
		preLoginDialogHTML += '<li><span>Egen receptbok för favoriter</span></li>';
		preLoginDialogHTML += '<li><span>Inköpslista att handla efter</span></li>';
		preLoginDialogHTML += '<li><span>Veckomeny direkt i mailen</span></li>';
		preLoginDialogHTML += '<li><span>Rösta på bilder och recept</span></li>';
		preLoginDialogHTML += '<li><span>Diskutera</span></li>';
		preLoginDialogHTML += '</ul>';
		preLoginDialogHTML += '<p class="center"><a href="/bli_medlem"><strong>Bli medlem direkt, på 1 minut!</strong></a></p>';
		preLoginDialogHTML += '</div>';
		preLoginDialogHTML += '<div class="rightColumn">';
		preLoginDialogHTML += '<img src="/images/icons/bigGrin.gif" />';
		preLoginDialogHTML += '<h4>Redan medlem?</h4>';
		preLoginDialogHTML += '<p><br /><a href="/js" onclick="return OpenRealLoginDialog();"><strong>Klicka här för att<br /> logga in på en gång!</strong></a><br /><br /><br /><a href="/glomt_losenord">Glömt lösenordet?</a></p>';
		preLoginDialogHTML += '</div>';
		preLoginDialogHTML += '</div>';
		preLoginDialogHTML += '<p class="center"><input type="button" value="Jag är redan medlem, logga in!" onclick="OpenRealLoginDialog();" /> <input type="button" value="Stäng rutan" onclick="CloseDialogBox();" /></p>';
		
		ShowDialogBox(preLoginDialogHTML,{title: 'Bli medlem!'});
		return false;
	}
	
	
	function openAlertDialog(message)
	{
		ShowDialogBox('<p class="center"><strong class="medium padding4">'+message+'<br /><br /></strong></p> <p class="center"><input type="button" value="OK" onclick="CloseDialogBox();" /></p>',{title: 'Information', width: 300});
		return false;
	}

	
	// Basen där man själv bestämmer om man vill ha bild etc.
	function openYesNoDialog(message, okFunction, cancelFunction)
	{
		gOkFunction = okFunction;
		if (okFunction == null)
		{
			gOkFunction = function(){};
		}
	
		gCancelFunction = cancelFunction;
		if (cancelFunction == null)
		{
			gCancelFunction = function(){};
		}

		ShowDialogBox('<p class="center"><strong class="medium padding4">'+message+'<br /><br /></strong></p> <p class="center"><input type="button" value="Ja" onclick="CloseDialogBox(); gOkFunction();" /> <input type="button" value="Nej" onclick="CloseDialogBox(); gCancelFunction();" /></p>',{title: 'Bekräfta', width: 300});
	}


	// Samma som openYesNoDialog men med en liten frågeteckenbild över.
	function openYesNoDialogQuestionmark(message, okFunction, cancelFunction)
	{
		var msg = '<p class="center"><img src="/images/icons/questionMark.gif" /><br />' + message+'</p>';
		openYesNoDialog(msg, okFunction, cancelFunction);
	}


	function DestroyLoginDialog()
	{
		$('loginHeader').innerHTML = "";
		$('loginStatus').innerHTML = "";
		CloseDialogBox();
	}

	function submitOnEnter(e)
	{
		var key;
		
		if(window.event)
		{
			key = window.event.keyCode; //IE
		}
		else
		{
			key = e.which; //Firefox
		}

		if (key == 13) //Enter
		{
			Login();
		}
					
		var kC  = (window.event) ? event.keyCode : e.keyCode; // MSIE or Firefox?	 
		var Esc = (window.event) ? 27 : e.DOM_VK_ESCAPE; // MSIE : Firefox
		
		if(kC==Esc)
		{
			DestroyLoginDialog();
		}
	}
	
	function getPressedKeyCode(e)
	{
		if(window.event)
		{
			return window.event.keyCode; //IE
		}
		else
		{
			return e.which; //Firefox
		}
	}
	
	
	function Login()
	{
		$('loginStatus').innerHTML = "";		
		var loading_html = '<img src="/images/loading.gif" alt="Laddar.." />';
		$('loginLoadingImage').innerHTML = loading_html;
		
		var url = '/actions/login.php';
		var pars = 'ajax=1&username='+$('login_username').value+'&password='+$('login_password').value;
		
		new Ajax.Request(url, {
				method: 'post', 
				parameters: pars,
				encoding: 'ISO-8859-1',
				onComplete: LoginResult
			});
	}
	
	function LoginResult(originalRequest)
	{
		if (originalRequest.responseText != "0")
		{
			var autologin = "0";
			if ($('login_autologin').checked == true)
			{
				createCookie("itkoket_autologin", originalRequest.responseText, 30);
			}
			else
				eraseCookie("itkoket_autologin");

			window.location.href = '/mittkok';
		}
		else
		{
			setTimeout(function() {
				$('loginLoadingImage').innerHTML = "";
				$('loginStatus').innerHTML = "Fel användarnamn och/eller lösenord!";
				
			}, 1000);
			
		}
	}


	function Logout()
	{	
	///actions/logga_ut.php
	
		var url = '/actions/logga_ut.php';
		var pars = '';
		
		new Ajax.Request(url, {
				method: 'post', 
				parameters: pars,
				encoding: 'ISO-8859-1',
				onComplete: function() 
				{
				eraseCookie('itkoket_autologin');
				window.location.href = unescape('/');
				}
			});
			
		return false;
	}


	function saveRecepieChange(recipeInfo, returnText, callbackFuntion)
	{
		var url = '/actions/change_recipe.php';
		var pars = 'ajax=1&recipeId='+recipeInfo['id']+'&title='+recipeInfo['title']+'&defaultNumberOfPersons='+recipeInfo['defaultNumberOfPersons']+'&introText='+recipeInfo['introText']+'&outroText='+recipeInfo['outroText']+'&difficulty='+recipeInfo['difficulty']+'&access='+recipeInfo['access']+'&returnText='+returnText+'';

		new Ajax.Request(url, {
				method: 'post', 
				parameters: pars,
				encoding: 'ISO-8859-1',
				onComplete: function(originalRequest){
				
					var response = originalRequest.responseText;

					if (response == "0")
					{
						alert('Du är inte inloggad!');
					}
			
					if (callbackFuntion != null)
					{
						eval(callbackFuntion+"(originalRequest)");
					}
				}
			});
	}
	
	function splitAndTrim(string)
	{
		var return_array = new Array();
		var pieces = string.split(",");
		
		for(i=0; i<pieces.length; i++)
		{
			piece = pieces[i];
			return_array[i] = piece.replace(/^\s+|\s+$/g, '');
		}
		
		return return_array;
	}
	
	function array_search(needle, haystack)
	{
		for(var i in haystack)
		{
			if(haystack[i] == needle)
			{
				return i;
			}    
		}
		
		return false;
	}
	
	//
	// Ratingfunktioner för ForumPosts
	//
	
	function RateForumPost(postId, rating)
	{
		//Om rating inte är up eller down så avsluta.
		if (rating != 'up' && rating != 'down')
			return false;
			
		var url = '/actions/rate_forum_post.php';
		var pars = 'ajax=1&postId='+postId+'&rating='+rating+'';
		
		new Ajax.Request(url, {
				method: 'post', 
				parameters: pars,
				onComplete: RateForumPostComplete
			});

		return false;
	}
	
	function RateForumPostComplete(originalRequest)
	{
		var info = originalRequest.responseText.split("|", 2);
		var postId = info[0];
		var rating = info[1];

		var output = '';

		output =  '<em>Omdöme:</em> <strong>';
		
		if (rating > 0)
			output += '+'+rating+'';
		else
			output += ''+rating+'';
		
		if (rating <= -2)
		{
			Effect.BlindUp($('forumPostText_'+postId+''), { duration: 0.2 });
			
			setTimeout(function() {
				Element.addClassName($('forumPost_'+postId+''), 'negative');
			}, 350);
		}
		else if (Element.hasClassName($('forumPost_'+postId+''), 'negative'))
		{
			Element.removeClassName($('forumPost_'+postId+''), 'negative');
		}
		
		output += '</strong>';
		$('rateForumPostButtons_'+postId+'').innerHTML = output;
	}
	
	function showForumPost(postId)
	{
		Effect.toggle($('forumPostText_'+postId+''), 'blind', { duration: 0.5 });
		
		if ($('forumPostRatingContainer_'+postId) != null)
		{
			Element.show($('forumPostRatingContainer_'+postId));
		}
		
		return false;
	}
	
	function saveForumPost(form)
	{
		var commentData = form.commentData.value;
		commentData.replace(/|/g, "");
		
		var threadId = form.threadId.value;
		
		var isPostedFromForum = false;
		if (form.isPostedFromForum != null)
		{
			isPostedFromForum = true;
		}
		
		if ($('insertRecepieLinkSearchResults') != null && Element.visible('insertRecepieLinkSearchResults'))
		{
			if (!confirm('Du är på väg att skicka iväg inlägget, vill du det?\n\nTips! Klicka på recepten du vill infoga som länk med musen!'))
			{
				return false;
			}
		}
		else if (commentData.length == 0)
		{
			alert('Du kan inte skicka ett tomt meddelande!');
			return false;
		}
		
		disableForumPostForm(form);
		
		var pars = 'ajax=1&threadId='+threadId+'&message='+input2js(commentData);
		
		if (form.userName != null)
		{
			pars = pars + '&userName='+input2js(form.userName.value)+'&captcha='+input2js(form.captcha.value);
		}
		
		//Skickar med en flagga att det postades från forumet, och inte från receptsidan
		if (isPostedFromForum)
		{
			pars += '&isPostedFromForum=1'; 
		}

		if (form.watchThread != null && form.watchThread.checked)
		{
			pars += '&watchThread=1'; 
		}

		var url = "/actions/save_forum_post.php";
		new Ajax.Request(url, {
			method: 'post', 
			parameters: pars,
			onComplete: function(originalRequest){
			
				var response = originalRequest.responseText;
				if (response == "0")
				{
					alert("Det blev inte rätt med bilden, prova igen.");
					enableForumPostForm(form);
					return;
				}
				
				var info = response.split("|", 2);
				var postId = info[0];
				var forumThreadHtml = info[1];
				
				//Skickar man från forumet?
				if (isPostedFromForum)
				{
					$('forumThread').innerHTML = forumThreadHtml;
					clearForumPostForm(form);
					
					setTimeout(function() {
						Effect.Pulsate('forumPostText_'+postId+'');
					}, 20);
				}
				else //Skickar man t.ex. från ett recept så ska detta köras.
				{
					$('recepieCommentsContainer').innerHTML = forumThreadHtml;
					
					setTimeout(function() {
						Effect.Pulsate('inner_message_'+postId+'');
					}, 20);

					clearForumPostForm(form);
					
					if (form.userName != null)
					{
						form.captcha.value = '';
					
						// Force reload of captcha with the mongo parameter.
						var now = new Date();
						$('captcha').src='/actions/CaptchaSecurityImages.php?width=100&height=40&characters=5&mongo='+now.getTime();
					}
				}
			}
		});

		return false;
	}

	function previewForumPost(form)
	{
		Element.show($('forumPostPreview'));
		$('forumPostPreview').innerHTML = '	<p class="nomargin padding4 center"><img src="/images/loading.gif" alt="Laddar" title="Laddar" /></p>';
		
		setTimeout(function()
		{
			var pars = 'ajax=1&preview=1&message='+input2js(form.commentData.value);
			var url = "/actions/save_forum_post.php";
			
			new Ajax.Request(url, {
					method: 'post', 
					parameters: pars,
					encoding: 'ISO-8859-1',
					onComplete: function(originalRequest){
					
						var response = originalRequest.responseText;
						$('forumPostPreview').innerHTML = '<p class="nomargin">'+response+'</p>';
					}
				});
				
		}, 500);
	}
	
	function disableForumPostForm(form)
	{
		form.submit.disabled = 'disabled';
		form.submit.value = 'Skickar...';
	}
	
	function enableForumPostForm(form)
	{
		form.submit.disabled = '';
		form.submit.value = 'Skicka inlägg';
	}
	
	function clearForumPostForm(form)
	{
		form.commentData.value = '';
		
		if (form.title != null)
		{
			form.title.value = '';
		}
		
		enableForumPostForm(form);
	}
	
	function saveNewForumThread(form)
	{
		if ($('insertRecepieLinkSearchResults') != null && Element.visible('insertRecepieLinkSearchResults'))
		{
			if (!confirm('Du är på väg att skicka iväg inlägget, vill du det?\n\nTips! Klicka på recepten du vill infoga som länk med musen!'))
			{
				return false;
			}
		}
		else if (form.title != null && form.title.value.length == 0)
		{
			alert('Du måste skriva in en titel!');
			form.title.focus();
			return false;
		}
		else if (form.commentData.value.length == 0)
		{
			alert('Du måste skriva ett inlägg!');
			form.commentData.focus();
			return false;
		}
		
		disableForumPostForm(form);
		
		return true;
	}
	
	function showHideRecepieLinkSearch()
	{
		Element.toggle('insertRecepieLinkSearch');
		Element.toggle('insertRecepieLinkSearchResults');
		var posY = findPosY($('insertRecepieLinkSearchBox'))
		
		if (Element.visible('insertRecepieLinkSearchBox'))
		{
			$('insertRecepieLinkSearchBox').focus();
		}
		
		Element.setStyle('insertRecepieLinkSearchResults', {top: (posY-5)+'px' });
		
		return false;
	}

	function searchRecepieLink(inputObject)
	{
		var keyword = inputObject.value;
		
		if (keyword.length == 0)
		{
			$('insertRecepieLinkSearchResults').innerHTML = '<ul><li class="help">Börja skriv i rutan ovan..</li><li class="help"></li><li class="help"><a href="/js" onclick="resetRecepieLinkSearch(); return false;"><em>Stänga denna ruta, utan att infoga</em></a></li></ul>';
		}
		else if (keyword.length > 2)
		{
			var pars = 'ajax=1&keyword='+input2js(keyword);
			var url = "/actions/search_recepie_link_id.php";
			
			new Ajax.Request(url, {
					method: 'post', 
					parameters: pars,
					encoding: 'ISO-8859-1',
					onComplete: searchRecepieLinkCallback
				});
			
			return true;
		}
		else
		{
			$('insertRecepieLinkSearchResults').innerHTML = '<ul><li class="help">Minst <strong>3</strong> tecken</li></ul>';
		}
	}
	
	function searchRecepieLinkCallback(originalRequest)
	{
		var responseText = originalRequest.responseText;
		$('insertRecepieLinkSearchResults').innerHTML = responseText;
	}

	function resetRecepieLinkSearch()
	{
		$('insertRecepieLinkSearchBox').value = '';
		$('insertRecepieLinkSearchResults').innerHTML = '<ul><li class="help">Börja sök i rutan ovan..</li></ul>';
		Element.hide('insertRecepieLinkSearchResults');
		Element.hide('insertRecepieLinkSearch');
	}

	function quotePost(postId)
	{
		var pars = 'ajax=1&postId='+postId;
		var url = "/actions/get_forum_post_quote.php";
		
		new Ajax.Request(url, {
			method: 'post', 
			parameters: pars,
			encoding: 'ISO-8859-1',
			onComplete: function(originalRequest){
			
				var response = originalRequest.responseText;
				insertText(response, 'forumPostMessage');
			}
		});

		ITKscrollTo('forumPostMessageAnchor');

		return false;
	}
	
	function textInputFocus(object)
	{
		Element.addClassName(object, 'focus');
	}
	
	function textInputBlur(object)
	{
		Element.removeClassName(object, 'focus');
	}
		
	function openTellAFriendForm()
	{
		$('tell_a_friend_container').innerHTML = $('tell_a_friend').innerHTML;
		return false;
	}
	
	function sendTellAFriend(form)
	{
		$('tell_a_friend_submit').value = 'Skickar..';
		$('tell_a_friend_submit').disabled = 'disabled';
	
		var pars = 'ajax=1&senderName='+form.senderName.value+'&email1='+form.email1.value+'&mess='+input2js(form.mess.value);
		var url = "/actions/send_tell_a_friend_email.php";
		
		new Ajax.Request(url, {
			method: 'post', 
			parameters: pars,
			onComplete: function(originalRequest){
				var response = originalRequest.responseText;
				// reset.
				$('tell_a_friend_submit').value = 'Skicka';
				$('tell_a_friend_submit').disabled = '';
				
				if (response == "0")
				{
					alert("Någonting gick inte som det skulle.. Ditt mail har inte skickats!");
					return;
				}
				
				$('tell_a_friend_container').innerHTML = '<p class="center nomargin">'+response+'</p>';
			}
		});
		
		return false;
	}
	
	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft+5;
	}

	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop+5;
	}
	
	function getWindowWidthHeight()
	{
		var scr_w = screen.availWidth;
		var scr_h = screen.availHeight;
		var browseWidth, browseHeight;
		
		if(document.layers||(document.getElementById&&!document.all))
		{
		   browseWidth=window.outerWidth;
		   browseHeight=window.outerHeight;
		}
		else if(document.all)
		{
		   browseWidth=document.body.clientWidth;
		   browseHeight=document.body.clientHeight;
		}
		
		return [browseWidth,browseHeight];
	}
	
	
	function insertText(text, object)
	{
		var textarea = $(object);
		
		textarea.value = textarea.value + '' + text;
		textarea.focus();
		return false;
	}
	
	function insertTextFormatting(description, bbCodeTag, objectId)
	{
		var text = prompt(description+':', "");
		
		if (text != null)
		{
			insertText('['+bbCodeTag+']'+text+'[/'+bbCodeTag+']', objectId);
		}
		else
		{
			alert('För att få sådan text skriver du:\n['+bbCodeTag+']din text[/'+bbCodeTag+']');
		}
	}
	
	function insertLink(objectId)
	{
		var linkUrl = prompt("Adress till hemsidan", "http://");
		
		if (linkUrl == null)
		{
			alert('Infoga länk genom att skriva:\n[url=http://www.google.se/]sök på nätet[/url]');
			return false;
		}
		
		if (linkUrl.length == 0 || linkUrl == "http://")
		{
			alert('Du måste skriva in en ordentlig adress!');
			return false;
		}
		
    	var linkTitle = prompt("Text som ska visas", "Min hemsida");
		
		var insertHtml = "";
		
		if (linkTitle == null || linkTitle.length == 0)
		{
			insertHtml = '[url]'+linkUrl+'[/url]';
		}
		else
		{
			insertHtml = '[url='+linkUrl+']'+linkTitle+'[/url]';
		}
		
		insertText(insertHtml, objectId);
	}
	
	/*
	//	starsRating
	*/
	
	function starsRatingOver(hoveredStarCount, currentRating, ratingIdPrefix)
	{
		for(i=1; i<=hoveredStarCount; i++)
		{
			$(ratingIdPrefix+'_star'+i).src = "/images/stars/star_over.gif";
		}
	}
	
	function starsRatingOut(currentRating, ratingIdPrefix)
	{
		setStarsRating(currentRating, ratingIdPrefix);
	}
	
	function setStarsRating(currentRating, ratingIdPrefix)
	{
		for(i=1; i<=Math.floor(currentRating); i++)
		{
			$(ratingIdPrefix+'_star'+i).src = "/images/stars/star.gif";
		}
		
		if (Math.floor(currentRating) != Math.ceil(currentRating))
		{
			$(ratingIdPrefix+'_star'+(i++)).src = "/images/stars/star_half.gif";
		}

		for(j=i; j<=5; j++)
		{
			$(ratingIdPrefix+'_star'+j).src = "/images/stars/star_empty.gif";
		}
	}
	
	function setUsersRating(myRating, ratingIdPrefix)
	{
		var image = $(ratingIdPrefix+'_star'+myRating);
		
		if (image.src == "/images/stars/star_half.gif")
		{
			image.src = "/images/stars/star_half_selected.gif";
		}
		else if (image.src == "/images/stars/star_empty.gif")
		{
			image.src = "/images/stars/star_empty_selected.gif";
		}
		else
		{
			image.src = "/images/stars/star_selected.gif";
		}
	}

	function rateRecepie(myRating, ratingIdPrefix, recepieId)
	{
		//Denna ska funka både på själva receptsidan och i recepieListItem-klassen!
		
		setStarsRating(myRating, ratingIdPrefix);
		setUsersRating(myRating, ratingIdPrefix);
		
		$(ratingIdPrefix+'_star'+myRating).src = "/images/stars/star_selected.gif";

		var url = '/actions/rate_recepie.php';
		var pars = 'ajax=1&recepieId='+recepieId+'&ratingPoints='+myRating+'';
	
		$(ratingIdPrefix).innerHTML = '<img src="/images/loading_wide.gif" />';
		
		setTimeout(function() {
		
			new Ajax.Request(url, {
					method: 'post', 
					parameters: pars,
					onComplete: function(originalRequest){
					
						var responseText = originalRequest.responseText;
						
						if (responseText == "0")
						{
							alert('Du är inte inloggad!');
							return false;
						}
						
						$(ratingIdPrefix).innerHTML = responseText;
						
						//Om vi är på receptsidan ska vi ändra antalet röster
						if ($('theRecepieNumberOfVotesText') != null)
						{
							var votesText = $('theRecepieNumberOfVotesText');
							var votesCount = votesText.getElementsByTagName('span');
							
							if (votesCount.length == 0)
							{
								votesText.innerHTML = getNumberOfVotesText(1);
							}
							else
							{
								votesCount = parseInt(votesCount[0].innerHTML);
								votesCount++;
								votesText.innerHTML = getNumberOfVotesText(votesCount);
							}
						}
					}
				});
				
		}, 300);
		
		return false;
	}
	
	function rateRecepieImage(myRating, ratingIdPrefix, recepieImageId, simpleReturn)
	{
		if (simpleReturn == null)
		{
			simpleReturn = false;
		}
	
		var ratingContainer = $(ratingIdPrefix+'_container');
		if ($('recepieImageCredits') != null)
		{
			ratingContainer = $('recepieImageCredits');
		}
			
		ratingContainer.innerHTML = '<p class="center"><img src="/images/loading_wide.gif" /></p>';
		
		
		//Lägger in en timeout så folk fattar att ratingen laddas om
		setTimeout(function()
		{
			var pars = 'ajax=1&imageId='+recepieImageId+'&ratingPoints='+myRating+'';
			
			if (simpleReturn)
			{
				pars += '&simpleReturn=1';
			}
			else
			{
				pars += '&simpleReturn=0';
			}
			
			new Ajax.Updater(
				ratingContainer, 
				"/actions/rate_image.php", 
				{
					parameters: pars,
					method: 'post'
				});
		}, 200);
		
		return false;
	}
	
	function getNumberOfVotesText(votes)
	{
		if (votes == 0)
		{
			return 'Inga röster';
		}
		else if (votes == 1)
		{
			return '1 röst';
		}
		else
		{
			return votes+' röster';
		}
	}
	
	function setSelectedOptionByValue(select, value)
	{
		var options = select.options;
		
		for(i=0; i<options.length; i++)
		{
			var option = options[i];
			
			if (option.value == value)
			{
				option.selected = true;
				return false;
			}
		}
		
		return false;
	}
	
	function isInString(needle, haystack)
	{
		return (haystack.indexOf(needle) != -1);
	}
	
	function titledBox_changeTab(boxId, tabId)
	{
		titledBox_resetTabs(boxId);

		Element.addClassName($('titledBoxTabs'+boxId+'_Tab'+tabId+''), 'selected');
		Element.show($('titledBoxTabs'+boxId+'_Tab'+tabId+'_Content'));

		return false;
	}
	
	function titledBox_resetTabs(boxId)
	{
		var tabs = $('titledBoxTabs'+boxId).getElementsByTagName('li');
		
		for(var i=0; i<tabs.length; i++)
		{
			tab = tabs[i];
			Element.removeClassName(tab, 'selected');
			Element.hide($('titledBoxTabs'+boxId+'_Tab'+i+'_Content'));
		}
	}
	
	
	
	
	/*
	//
	//	UserEvents
	//
	*/
	function markUserEventAsRead(link, eventId)
	{
		var url = "/actions/set_userEvent_checked.php";
		var pars = "eventId="+eventId+"&redirect=0";
	
		var linkParent = link.parentNode;
	
		linkParent.innerHTML = "<em>Sparar...</em>";
		
		new Ajax.Request(url, {
			method: 'get', 
			parameters: pars,
			onSuccess: function(originalRequest){
			
				if (originalRequest.responseText == 0)
				{
					alert('Du är inte inloggad!');
					return false;
				}
			
				Element.removeClassName(linkParent.parentNode, 'new');
				Element.remove(linkParent);
			}
		});

		return false;
	}
	
	function markAllUserEventsAsRead(link)
	{
		var url = "/actions/set_all_userEvents_checked.php";
		
		var linkParent = link.parentNode;
		linkParent.innerHTML = "<em>Sparar...</em>";

		new Ajax.Request(url, {
			method: 'get',
			onSuccess: function(originalRequest){
			
				if (originalRequest.responseText == 0)
				{
					alert('Du är inte inloggad!');
					return false;
				}
				
				var events = $('userEvents').getElementsByTagName('dd');
				
				for(var i=0; i<events.length; i++)
				{
					event = events[i];
					
					link = event.getElementsByClassName('check');
					if (link.length > 0)
					{
						Element.remove(link[0]);
					}
					
					Element.removeClassName(event, 'new');
				}
		
				Element.remove(linkParent);
			}
		});

		return false;
		
	}
	
	/*
	//
	//	RecipeOfTheDay aka. sushibilden
	//
	*/
	
	function RecipeOfTheDay_resetImages(list)
	{
		var items = list.getElementsByTagName('li');
		
		for(var i=0; i<items.length; i++)
		{
			Element.removeClassName(items[i], 'active');
		}
	}
	
	function RecipeOfTheDay_changeBigImage(link, imageId, title, text, url)
	{
		var list = link.parentNode.parentNode;
		var listItem = link.parentNode;
		
		RecipeOfTheDay_resetImages(list);
		Element.addClassName(listItem, 'active');
		
		var recipeTitle = $('recipeOfTheDayInfo').getElementsByClassName('recipeTitle')[0];
		recipeTitle.innerHTML = '<a href="'+url+'">'+js2html(title)+'</a>';
		
		var recipeIntroText = $('recipeOfTheDayInfo').getElementsByClassName('recipeIntroText')[0];
		recipeIntroText.innerHTML = '<a href="'+url+'" class="text">'+js2html(text)+'</a>';
		
		$('recipeOfTheDayBigImage').src = '/bilder/blandat/'+imageId+'.jpg';
		$('recipeOfTheDayBigImage').parentNode.href = url;
		
		
		return false;
	}
	
	/*
	//
	//	Form-funktioner
	//
	*/
	
	function Form_resetColorPicker(colorPickerList)
	{
		$A(colorPickerList.getElementsByTagName('li')).each(function(item) {
			Element.removeClassName(item, 'selected');
		});
	}
	
	function Form_chooseColorPickerColor(link, hexCode, colorInputId)
	{
		$(colorInputId).value = hexCode;
		Form_resetColorPicker(link.parentNode.parentNode);
		Element.addClassName(link.parentNode, 'selected');
		return false;
	}
	
	
	//
	// Inställningssidan
	//
	function ChangeSubscriptions()
	{
		$('loadingImageSubscriptions').innerHTML = '<p class="float_left"><img src="/images/loading_wide.gif" /></p>';
		
		$('changeSubscriptionButton').value = "Sparar...";
		$('changeSubscriptionButton').disabled = true;
		
		var newsletter = 0;
		var recepieOfTheDay_daily = 0;
		var recepieOfTheDay_weekly = 0;
		if ($('newsletter').checked)
		{
			newsletter = 1;
		}
		if ($('recepieOfTheDay_daily').checked)
		{
			recepieOfTheDay_daily = 1;
		}
		if ($('recepieOfTheDay_weekly').checked)
		{
			recepieOfTheDay_weekly = 1;
		}
		
		var pars = 'newsletter=' +newsletter+'&recepieOfTheDay_daily='+recepieOfTheDay_daily+'&recepieOfTheDay_weekly='+recepieOfTheDay_weekly;
		new Ajax.Request(
			"/actions/change_user_email_settings.php", 
			{
				parameters: pars,
				method: 'post',
				onSuccess: function(originalRequest)
				{
					var retCode = originalRequest.responseText;
					if (retCode == '1')
					{
						$('loadingImageSubscriptions').innerHTML = '<p class="float_left"><font color="green">Inställningarna sparade!</font></p>';
					}
					else
					{
						$('loadingImageSubscriptions').innerHTML = '<p class="float_left"><font color="red">Det blev fel!</font></p>';
					}
					$('changeSubscriptionButton').value = "Spara";
					$('changeSubscriptionButton').disabled = false;
					

				}
			});

		return false;
	}
		
	
	
	function ChangeUserMetaInfo()
	{
		$('loadingImageMetaData').innerHTML = '<p class="float_left"><img src="/images/loading_wide.gif" /></p>';
		
		$('changeMetaDataButton').value = "Sparar...";
		$('changeMetaDataButton').disabled = true;
		
		var realName = input2js($('realName').value);
		var chefType = input2js($('chefType').value);
		var city = input2js($('city').value);
		var birthYear = input2js($('birthYear').value);
		var sex = 2;
		
		if ($('man').checked)
		{
			sex = 0;
		}
		else if ($('kvinna').checked)
		{
			sex = 1;			
		}
		var webpage = input2js($('webpage').value);
		var msn = input2js($('msn').value);
		var freeText = input2js($('freeText').value);
		var personalMessage = input2js($('personalMessage').value);
		
		var pars = 'realName='+realName+'&chefType='+chefType+'&city='+city+'&birthYear='+birthYear+'&sex='+sex+'&webpage='+webpage+'&msn='+msn+'&freeText='+freeText+'&personalMessage='+personalMessage;

		new Ajax.Request(
			"/actions/change_user_meta_info.php", 
			{
				parameters: pars,
				method: 'post',
				onSuccess: function(originalRequest)
				{
					var retCode = originalRequest.responseText;
					if (retCode == '1')
					{
						$('loadingImageMetaData').innerHTML = '<p class="float_left"><font color="green">Inställningarna sparade!</font></p>';
					}
					else
					{
						$('loadingImageMetaData').innerHTML = '<p class="float_left"><font color="red">Det blev fel!</font></p>';
					}
					$('changeMetaDataButton').value = "Spara";
					$('changeMetaDataButton').disabled = false;
					

				}
			});

		return false;
	}
		
	
	function ChangePassword(form)
	{
		$('loadingImagePassword').innerHTML = '<p class="float_left"><img src="/images/loading_wide.gif" /></p>';
		
		form.submit.value = "Sparar...";
		form.submit.disabled = true;
		
		var oldPassword =  form.oldPassword.value;
		var password1 = form.password1.value;
		var password2 = form.password2.value;

		var pars = 'oldPassword=' + oldPassword + '&password1='+password1+'&password2='+password2;
		new Ajax.Request(
			"/actions/change_password.php", 
			{
				parameters: pars,
				method: 'post',
				onSuccess: function(originalRequest)
				{
					var retCode = originalRequest.responseText.substring(0, 1);
					var retText = originalRequest.responseText.substring(1);
					if (retCode == '1')
					{
						$('loadingImagePassword').innerHTML = '<p class="float_left"><font color="green">Lösenordet är bytt!</font></p>';
					}
					else
					{
						$('loadingImagePassword').innerHTML = '<p class="float_left"><font color="red">'+retText+'</font></p>';
					}
					form.submit.value = "Byt lösenord!";
					form.submit.disabled = false;
					

				}
			});

		return false;
	}
	
	function startAvatarUpload()
	{
		$('startUploadButton').value = 'Sparar...';
		$('startUploadButton').disabled = true;
		$('avatar_upload_process').innerHTML = '<img src="/images/loading.gif" /><p>Laddar upp, ett ögonblick...</p>';
		$('result').innerHTML = '';
		$('avatarUploadForm').submit();
	}	
	
	
	function stopAvatarUpload(userId)
	{
		$('startUploadButton').value = 'Ladda upp!';
		$('startUploadButton').disabled = false;
		$('avatar_upload_process').innerHTML = '';
		$('uploadedfile').value = '';

		if (userId != 0)
		{
			$('result').innerHTML = '<p class="float_left"><font color="green">Bilden är bytt!</font></p>';
			
			// Force reload of image with the mongo parameter.
			var now = new Date();
			$('currentImage').innerHTML = '<img src="/bilder/avatar/'+userId + '.jpg?mongo='+now.getTime()+'" /><br />';
			
		}
		else
		{
			$('result').innerHTML = '<p class="float_left"><font color="red">Ojsan, det gick inte! Prova igen</font></p>';
		}
		return true;
	}

	var gModalboxTimer = null;
	
	function _resizeModalboxContentTimerFunc()
	{
		// Don't resize first call.
		if (gModalboxTimer != null)
		{
			Modalbox.resizeToContent();
		}
		gModalboxTimer = setTimeout(_resizeModalboxContentTimerFunc, 500);
	}

	function _startModalboxResizeTimer()
	{
		_resizeModalboxContentTimerFunc();
	}
	
	function _stopModalboxResizeTimer()
	{
		clearTimeout(gModalboxTimer);
		gModalboxTimer = null;
	}	

	function CloseDialogBox()
	{
		Modalbox.hide();
		_stopModalboxResizeTimer();
	}
	
	function ShowDialogBox(content, options)
	{
		if (options = null)
		{
			var options = {};
		}
	
		Modalbox.show(content, options);
		Modalbox.setOptions({ afterHide: function() {_stopModalboxResizeTimer(); } });
		_startModalboxResizeTimer();
	}
	
	
	
	//
	//	Öppna Lägg till i inköpslista-rutan
	//
	var ingredientsToSkip = new Array();
	function openAddToShoppingListWindow(recipeId)
	{
		//Kollar om recipeContents finns dvs. om vi är på receptsidan
		if ($('recepieContents') != null)
		{
			var checkboxes = $('recepieContents').getElementsByClassName('addToShoppingListCheckboxInput');
						
			var j=0, checked=0;
			for(var i=0; i<checkboxes.length; i++)
			{
				checkbox = checkboxes[i];
				
				if (checkbox.checked == false)
				{
					ingredientsToSkip[j] = checkbox.value;
					j++;
				}
				else
				{
					checked++;
				}
			}
			
			if (checked == 0)
			{
				openAlertDialog('Du måste välja några ingredienser att lägga till.');
				return false;	
			}
		}
		
		ingredientsToSkipJSON = Object.toJSON(ingredientsToSkip);
		
		var html = '<div class="addToShoppingListDialogContent"><h3>Lägg till i inköpslista</h3>';
		html += '<div id="addToShoppingListDialogIngredients"><br /><img src="/images/loading.gif" alt="Laddar ingredienser till receptet" title="Laddar ingredienser till receptet" /><br /><strong>Laddar receptet...</strong><br /><br /></div></div><p class="center"><input type="button" value="Lägg till i inköpslistan" onclick="addIngredientsToShoppingList();" /> <input type="button" value="Avbryt" onclick="CloseDialogBox();" /></p>';
		
		ShowDialogBox(html,{title: 'Lägg i inköpslistan'});
		var numberOfPersons = "";
		if ($('showNumberOfPersons') != null)
		{
			numberOfPersons = $('showNumberOfPersons').value;
		}
			
		setTimeout(function(){	
					
		var pars = 'recipeId='+recipeId+'&skipIngredients='+ingredientsToSkipJSON+'&numberOfPersons='+numberOfPersons;
		new Ajax.Updater(
			'addToShoppingListDialogIngredients', 
			"/actions/get_recepie_contents_for_shopping_list.php", 
			{
				parameters: pars,
				method: 'post',
				onComplete: function(){
				}
		});
		
		}, 1000);	

		return false;
	}
	
	function reCalculateIngredients(numberOfPersons, recipeId, skipIngredients)
	{
		$('addToShoppingListDialogIngredientsList').innerHTML = '<img src="/images/loading.gif" alt="Laddar ingredienser till receptet" title="Laddar  ingredienser till receptet" /><strong>Räknar om ingredienser...</strong>';
		
		setTimeout(function(){
			var pars = 'recipeId='+recipeId+'&skipIngredients='+skipIngredients+'&numberOfPersons='+numberOfPersons+'&skipNumberOfPersonsSelect=1';
			new Ajax.Updater(
				'addToShoppingListDialogIngredientsList', 
				"/actions/get_recepie_contents_for_shopping_list.php", 
				{
					parameters: pars,
					method: 'post'
			});
		}, 150);
	}
	
	function addIngredientsToShoppingList()
	{
		var numberOfPersons = $('shoppingListNumberOfPersons').value;
		var recipeId = recepieInfo['id'];
		var pars = 'recipeId='+recipeId+'&numberOfPersons='+numberOfPersons+'&excludeOrderIds='+ingredientsToSkipJSON;
		
		new Ajax.Request(
			'/actions/add_recipe_to_shopping_list.php', 
			{
				parameters: pars,
				method: 'post',
				onComplete: function() 
				{
					setTimeout(function(){
						openAlertDialog('<strong class="big blue">Ingredienserna tillagda i inköpslistan!</strong><br /><br /><div style="height: 100px;"><img src="/images/icons/goJump.gif" height="97" /></div><br />Inköpslistan hittar du antingen <a href="/inkopslistan">här</a> eller i menyn i "Mitt kök"<br />');
					}, 200);
				}
		});
	}
	
	
	function ITKscrollTo(objName)
	{
		var obj = $(objName);
	
		var pos = Element.cumulativeOffset(obj);
		$('wrapper').scrollTop = pos[1];
	}



	function toggleForumWatch(threadId)
	{
		var isWatching = $('is_watching_forum_thread').value;
		
		// watching -> non watching and back. Input is what IS currently.
		var pars = 'threadId=' + threadId + '&toggle_base=' + isWatching;
		new Ajax.Request(
			"/actions/toggle_forum_watch.php", 
			{
				parameters: pars,
				method: 'post',
				onSuccess: function(originalRequest)
				{
					var retCode = originalRequest.responseText.substring(0, 1);
					$('is_watching_forum_thread').value = retCode;
					if (retCode == '1')
					{
						$('toggle_forum_watch').value = "Stoppa bevakning";
						setTimeout(function(){
						openAlertDialog('<strong class="big blue">Bevakningen är startad!</strong><br /><br /><img src="/images/icons/goJump.gif" height="97" /><br />Vi skickar dig ett mejl när det händer någonting i denna tråden.<br />');
					}, 200);
					}
					else
					{
						$('toggle_forum_watch').value = "Starta endast bevakning";
						setTimeout(function(){
						openAlertDialog('<strong class="big blue">Bevakningen är stoppad!</strong><br /><br /><img src="/images/icons/goJump.gif" height="97" /><br />Vi kommer <strong>inte</strong> skicka dig några mejl om den här tråden.<br />');
					}, 200);
					}
				}
			});
		return false;
	}
	
	function hideTopNotice(noticeId)
	{
		$('top_notice').hide();

		new Ajax.Request(
			'/actions/hide_top_notice.php', 
			{
				parameters: 'noticeId='+noticeId+'',
				method: 'post',
				onComplete: function(response) 
				{
					if (response.responseText.length > 0)
					{
						alert(response.responseText);
					}
				}
		});
		
	}
