/* $Id: js-functions.js,v 1.17 2009/02/04 14:26:22 TJ Exp $ */

// linkOn: Optional parameter, true if you want a mailto link on the address
function hidemail(formmailalias, formmaildomain, formmailtld, linkOn) {
	var address = formmailalias + '&#64;' + formmaildomain + '.' + formmailtld;
	if (linkOn) { document.write('<a href=\"mailto:' + address + '\">') }
	document.write(address);
	if (linkOn) { document.write('</a>') }
}

function redirect(url) {
	window.focus();
	window.location = url;
}

function setjslink() {
	document.write('<link rel="stylesheet" type="text/css" href="/inc/client/styles/javascript-only.css"/>');
}

function setactiveinput() {

	var field, focus;
	field = 0;
	focus = false;

	// Start kun hvis der er mere end en form på siden, da vi altid har en søgeform øverst til højre
	if (document.forms.length > 1) {
		// Bliv ved indtil der ikke er flere felter, eller der er blevet sat focus
		while ((field < document.forms[1].elements.length) & (! focus)) {
			// Spring fieldset over, lowercase fordi FF 1.5 resulterer i stort FIELDSET selv om det er XHTML
			if (
				(document.forms[1].elements[field].tagName.toLowerCase() != 'fieldset')
				)
			{ 
				// Spring hidden, submit og drop-down bokse over
				if (
					(document.forms[1].elements[field].type != 'hidden') && 
					(document.forms[1].elements[field].type != 'submit') && 
					(document.forms[1].elements[field].nodeName != 'select')
					)
				{
					// Sæt fokus
					document.forms[1].elements[field].focus();
			 		
					// Hvis det er et tekstfelt, så vælg også feltet
					if ((document.forms[1].elements[field].nodeName == 'input'))
					{
						document.forms[1].elements[field].select();
					}
					focus = true;
				}
			}
			field = field + 1;
		}
	}
}


function hide(id) {
	element = document.getElementById(id);
  element.style.display = 'none';
}


function printpage() {
	window.print();
}

function setattribute(id, attribute, content) {
  document.getElementById(id).setAttribute(attribute, content);
}

function seterror() {
  setattribute('body', 'class', 'invalid');
}

function signalerror() {
  document.getElementById('tekst').setAttribute('class', 'error-text');
}



function getElementsByTagNames(list,obj)
{
	if (!obj) obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++)
	{
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++)
		{
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (testNode.sourceIndex)
	{
		resultArray.sort(function (a,b) {
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition)
	{
		resultArray.sort(function (a,b) {
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}


// Original TOC by http://www.quirksmode.org/dom/toc.html
// Når man trykker på et link der bruger anchor til at hoppe direkte ned på en 
// side, så hopper Firefox+Opera ned før TOC-et bliver lagt ind via Javascript, 
// højden på TOC-et i toppen bliver ikke lagt til. Er det et stort TOC, så kan 
// man altså ikke finde overskriften, fordi siden pludselig er længere når TOC-et 
// er indlæst. Problemet eksisterer ikke, hvis man klikker 
// på et link i TOC-et, for så er TOC-et lagt ind inden klik.
// Jeg mangler altså noget kode, der hopper igen efter TOC er indlagt, 
// hvis der er et anchor i URL-en.
function createTOC(specialid)
{
	// var x = document.body.childNodes;
	var toc = document.createElement('div');												// Hele TOC-boksen
	var header = toc.appendChild(document.createElement('span'));		// Overskriften
	var tocbody = toc.appendChild(document.createElement('div'));		// Selve indholdet, altså TOC-et

	// Sæt specifikt id, afhængigt af hvilket toc det er
	var tocid;
	if (specialid.length == 0) 
	{
		toc.className = 'toc';
		toc.id = 'toc';
		tocid = 'toc';
		header.onclick = showhideTOC;
	}
	else 
	{
		toc.className = 'toc ' + specialid;
		toc.id = specialid;
		tocid = specialid;
		//header.onclick = showhideTOC(tocid);				// Det her vil desværre ikke virke
		header.onclick = showhideMainTOC;
		
		// Vis ikke inline (main) TOC, hvis der er brugt direkte anchor link, for så hopper 
		// browseren forkert ned. Bemærk at dette gør at man ikke kan linke direkte til linkX anchors
		// som TOC-et skaber, da de nu ikke er vist, man kan kun linke til egne id-links.
		if (document.URL.indexOf("#") > 0) {
			tocbody.style.display = 'none';
			// Vis sidebar som standard når vi er hoppet direkte ned!
			// Sidebar toc burde også hoppe ned samtidig.
			document.getElementById('toc').lastChild.style.display = 'block';
		}
			
		// Det hjalp ikke at redirecte igen til samme position
		//if (document.URL.indexOf("#") > 0) window.location = document.URL;
	}

	header.innerHTML = 'Indholdsfortegnelse';

	// Nedenstående vil gøre at man også kan lukke side-toc-en ved at klikke i det hvide
	// tocbody.onclick = showhideTOC;

	var toBeTOCced = getElementsByTagNames('h2,h3,h4,h5');
	if (toBeTOCced.length < 2) return;

	for (var i=0;i<toBeTOCced.length;i++)
	{
		var tmp = document.createElement('a');
		tmp.innerHTML = toBeTOCced[i].innerHTML + '\r\n';
		tmp.className = 'page';
		if (toBeTOCced[i].nodeName == 'H3')
			tmp.className += ' indent';
		if (toBeTOCced[i].nodeName == 'H4')
			tmp.className += ' indent2';
		if (toBeTOCced[i].nodeName == 'H5')
			tmp.className += ' indent3';
		var headerId = toBeTOCced[i].id || 'link' + i;
		tmp.href = '#' + headerId;
		tocbody.appendChild(tmp);
		if (toBeTOCced[i].nodeName == 'H2')
		{
			// Fjern ting der står i parentes etc. i vores overskrifter (domæne og lignende)
			var cutpos = tmp.innerHTML.indexOf('(');
			if (cutpos <= 0) cutpos = tmp.innerHTML.indexOf('<');
			if (cutpos >= 0) tmp.innerHTML = tmp.innerHTML.substr(0, cutpos);
		}
		toBeTOCced[i].id = headerId;
	}
	document.body.insertBefore(toc,document.body.childNodes[5]);
}

function showhideMainTOC()
{
	var x = document.getElementById('inlinetoc');

	// Slå visning af toc-ens indhold til og fra
	if (x.lastChild.style.display == 'block') {
		x.lastChild.style.display = 'none'; }
	else {
		x.lastChild.style.display = 'block'; }
}

function showhideTOC()
{
	var x = document.getElementById('toc');

	// Slå visning af toc-ens indhold til og fra
	if (x.lastChild.style.display == 'block') {
		x.lastChild.style.display = 'none'; }
	else {
		x.lastChild.style.display = 'block'; }

// TOCstate = (TOCstate == 'none') ? 'block' : 'none';
//	x.lastChild.style.display = TOCstate;

}
  
/*******************************************************
*  Shows Confirmation dialog, returns true/false
*  Can have multiple arguments, which will be replaced 
*  in strText, using %1, %2, %3 etc.
*******************************************************/
function ShowConfirm(strText)
{
  var strAlert;
  var objRegEx;

  strAlert = strText;

  for (var intArg = 1; intArg < arguments.length; intArg++)
  {
    objRegEx = new RegExp(eval("/%" + intArg + "/g"));
    strAlert = strAlert.replace(objRegEx, arguments[intArg]);
  }

  return confirm(strAlert);
}


function ChangeFrontPageSetting() {
 try {
   var objSelect = document.getElementById("WebserverOS");
   var objCheckbox = document.getElementById("FrontPage");

   if (objSelect && objCheckbox) {
     if (objSelect.options[objSelect.selectedIndex].value == "unix") {
       objCheckbox.checked = false;
       objCheckbox.disabled = true;
     }
     
     else {
       objCheckbox.disabled = false;
     }
   }
 }
 
 catch(e) {
   /* do nothing */
 }
}
/**
 * Get URL Parameter in Javascript
 * Source: http://www.11tmr.com/11tmr.nsf/D6Plinks/MWHE-695L9Z
**/  
function getURLParam(strParamName) {
  try {
    var strReturn = "";
    var strHref = window.location.href;
    
    if (strHref.indexOf("?") > -1) {
      var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
      var aQueryString = strQueryString.split("&");
    
      for (var iParam = 0; iParam < aQueryString.length; iParam++) {
        if (aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 ) {
          var aParam = aQueryString[iParam].split("=");
          strReturn = aParam[1];
          break;
        }
      }
    }
    
    return unescape(strReturn);
  }
  
  catch(e) {
    /* nothing here */
  }
}
