	function module(div_id, profile_id)
	{
		module_ajax(div_id, profile_id, '');
	}

	function module_ajax(div_id, profile_id, param, quick_load)
	{
		if (quick_load == undefined)
			quick_load = false;

		// Plocka fram den DIV där modulinnehållet ska läggas
		var div = document.getElementById(div_id);

		//Avbryt om vi inte hittar div-en eller om den saknar rad och kolumnvärde
		if (!div || div_id=="m") return;

		if (!quick_load)
		{
			// Plocka bort ev tidigare innehåll i modulen
			while (div.firstChild)
				div.removeChild(div.firstChild);

			// Lägg in en text och en animerad GIF under tiden modulen laddas via AJAX
			var newdiv = document.createElement('div');
			newdiv.appendChild(document.createTextNode(p('ID_MOD_LOADING')));
			newdiv.className = 'header module_loading';
			div.appendChild(newdiv);

			// Animerad gif
			var img = document.createElement('img');
			img.setAttribute("src", "/images/wait16.gif");
			div.appendChild(img);
		}

		// Utför AJAX-anropet
		var request = getHTTPObject();
		url = "ajax2/module.php?ID=" + profile_id + param + '&' + Math.random();
		request.open("GET", url, true);
		request.onreadystatechange = function ()
		{
			if (request.readyState == 4)
			{
				// AJAX har returnerat ett innehåll
				
				
				// Om abort-taggen har skickats avbryts utritningen av modulen då den inte ska visas
				if(request.responseXML.getElementsByTagName('abort').item(0) != null) {
					// Göm laddningsanimationen
					while (div.firstChild)
						div.removeChild(div.firstChild);
				}
				// Annars fortsätter vi med utritningen
				else {
				
					// Plocka bort den tillfälliga "laddar..."-texten och den animerade wait GIF:en
					while (div.firstChild)
						div.removeChild(div.firstChild);
	
					// Läs i XML-svaret och plocka ut modulens namn och resultat
					var profile = request.responseXML.getElementsByTagName('module').item(0);
					var profile_name = profile.getAttribute("name");
					var show_header = profile.getAttribute("showheader");
					var rss_link = null;
	
					// Om en länk finns i modul headern, isf skapa länk-tagg
					if(profile.getAttribute("uri"))
					{
						var profile_link = document.createElement('a');
						profile_link.setAttribute('href',profile.getAttribute('uri'));
						profile_link.innerHTML = profile.getAttribute("linkname");
					}
	
					// Kontrollera om det finns någon länk för RSS
	// 				var rss = profile.getElementsByTagName('rss').item(0);
	// 				if (rss)
	// 				{
	// 					var url = rss.getElementsByTagName('url').item(0).firstChild;
	// 					var mobile = rss.getElementsByTagName('mobile').item(0).firstChild;
	// 					var fullname = rss.getElementsByTagName('fullname').item(0).firstChild;
	// 					var email = rss.getElementsByTagName('email').item(0).firstChild;
	
	// 					if (url)
	// 					{
	// 						rss_link = document.createElement('a');
	// 						rss_link.setAttribute('href','javascript://');
	// 						rss_link.onclick = function() {
	// 	 						rss_popup(url.nodeValue, (mobile ? mobile.nodeValue : ''), (fullname ? fullname.nodeValue : ''), (email ? email.nodeValue : ''));
	// 						}
	
	// 						rss_link.style.marginRight = "3px";
	// 						rss_link.innerHTML = "<img src=\"/images/icons/rss_grey.png\" border=\"0\" onMouseOver=\"this.src='/images/icons/rss.png'\" onMouseOut=\"this.src='/images/icons/rss_grey.png'\"/>";
	// 					}
	// 				}
	
	
	
					if(show_header != "no") {
	
						// Skapa en DIV för att visa en header i modulen
						var header_div = document.createElement('div');
						header_div.className = 'header';
						var header_span = document.createElement('span');
						header_span.style.cssFloat = 'left';
						header_span.style.styleFloat = 'left';
		//  				if (rss_link)
		//  					header_span.appendChild(rss_link);
						header_span.appendChild(document.createTextNode(profile_name));
		
						if(profile.getAttribute("uri"))
							header_span.appendChild(profile_link);
		
						header_div.appendChild(header_span);

						var settings = profile.getElementsByTagName('settings').item(0);
						var settings_parts = settings.getElementsByTagName('item');
		
						// Läs in HTML-koden från AJAX XML-svar, denna ligger i flera delar för att komma förbi begränsningar i Firefox
						sett_html = "";
						for (i = 0; i < settings_parts.length; i++)
						{
							var part = settings_parts.item(i);
							if (part.firstChild != null)
							{
								var settings_text = part.firstChild.nodeValue;
								sett_html = sett_html + settings_text;
							}
						}
		
						var settings_div = null;
						if (sett_html.length > 0)
						{
							// Skapa en DIV för att innehålla ev settingsdel
							settings_div = document.createElement('div');
							settings_div.className = 'settings settings_m'+profile_id;
							settings_div.setAttribute('id', div_id + '_settings');
							settings_div.innerHTML = sett_html;
		
							var edit_span = document.createElement('span');
							edit_span.style.cssFloat = 'right';
							edit_span.style.styleFloat = 'right';
							edit_span.className = 'edit_link';
							var edit_link = document.createElement('a');
							edit_link.setAttribute('href', '#');
							edit_link.setAttribute('target', '_blank');
							edit_link.setAttribute('title', p('ID_MOD_EDIT'));
							edit_link.appendChild(document.createTextNode(p('ID_MOD_EDIT')));
							edit_link.onclick = function() {
								var show_div = document.getElementById(div_id + '_settings');
								if (!div) return;
									show_div.style.display = 'block';
								return false;
							}
		
							if (rss_link)
								edit_span.appendChild(rss_link);
							edit_span.appendChild(edit_link);
							header_div.appendChild(edit_span);
		
							// Spara de ursprungliga värdena från inputfälten som default attribut till elementen
							var sett_form = settings_div.getElementsByTagName('form')[0];
							for (i = 0; i < sett_form.elements.length; i++)
							{
								if (sett_form.elements[i].type == 'checkbox') {
								sett_form.elements[i].setAttribute('defaultVal', (sett_form.elements[i].checked ? 1 : 0));
							}
								else if (sett_form.elements[i].type == 'select-one' || sett_form.elements[i].type == 'text')
								sett_form.elements[i].setAttribute('defaultVal', sett_form.elements[i].value);
							}
						}
					}
	
					var data = profile.getElementsByTagName('data').item(0);
					var module_parts = data.getElementsByTagName('item');
	
					// Skapa en DIV för att innehålla modulinnehållet
					var content_div = document.createElement('div');
					content_div.className = 'content content_m'+profile_id;
	
					// Läs in HTML-koden från AJAX XML-svar, denna ligger i flera delar för att komma förbi begränsningar i Firefox
					div_html = "";
					for (i = 0; i < module_parts.length; i++)
					{
						var part = module_parts.item(i);
						if (part.firstChild != null)
						{
							var module_text = part.firstChild.nodeValue;
							div_html = div_html + module_text;
						}
					}
					content_div.innerHTML = div_html;
	
					var headID = document.getElementsByTagName("head")[0];
					var jsscript = profile.getElementsByTagName('jsscript').item(0);
					var jsscript_parts = jsscript.getElementsByTagName('item');
	
					for (i = 0; i < jsscript_parts.length; i++)
					{
						var part = jsscript_parts.item(i);
						if (part.firstChild != null)
						{
							var newScript = document.createElement('script');
							newScript.type = 'text/javascript';
							newScript.src = part.firstChild.nodeValue;
							headID.appendChild(newScript);
						}
					}
	
					if(header_div != null) {
						div.appendChild(header_div);
					}
					if (settings_div != null)
						div.appendChild(settings_div);
					div.appendChild(content_div);
					
					
					// Skapa en DIV för modul footer
					var footer_div = document.createElement('div');
					footer_div.className = 'footer';
					div.appendChild(footer_div);

					/* Modul klar, kör extra kod här */
					moduleLoadComplete();
				}
			}
		}
		request.send(null);
	}
	
	/* Körs när module laddats klart, override-a i egna js för att koppla */
	function moduleLoadComplete() {
	
	}

	function resetInputElements(div_form)
	{
		var checkboxes = new Array();

		// Alla checkboxar där värdet är 0 (noll) är "Alla xxx-nyheter", spara värdet om dessa är
		// default förkryssade eller ej, vi behöver detta värde för att avgöra om vi ska göra övriga
		// checkboxar disabled eller ej
		for (i = 0; i < div_form.elements.length; i++)
			if (div_form.elements[i].type == 'checkbox' && div_form.elements[i].value == 0)
				checkboxes[div_form.elements[i].name] = (div_form.elements[i].getAttribute('defaultVal') == 1);

		for (i = 0; i < div_form.elements.length; i++)
		{
			if (div_form.elements[i].type == 'checkbox')
			{
				if (div_form.elements[i].value != '0')
				div_form.elements[i].disabled = checkboxes[div_form.elements[i].name];
				div_form.elements[i].checked = (div_form.elements[i].getAttribute('defaultVal') == 1);
			}
			else if (div_form.elements[i].type == 'select-one' || div_form.elements[i].type == 'text')
				div_form.elements[i].value = div_form.elements[i].getAttribute('defaultVal');
		}
	}

	function handle_checkbox(box)
	{
		name = box.name;
		form = find_parent_node(box, 'FORM')
		if (!form) return;

		for (i = 0; i < form.elements.length; i++)
		{
			if ((form.elements[i].name == name) && (form.elements[i].value != '0') && (form.elements[i].type == 'checkbox'))
			{
				form.elements[i].disabled = box.checked;
				if (box.checked)
					form.elements[i].checked = false;
			}
		}
	}

