(function(){
var smartbar = document.getElementById("smartbar");
var smartbartabs = smartbar.getElementsByTagName("ul")[0].getElementsByTagName("a");
var smartbarcontents = document.getElementById("smartbarcontents");
var smartbarxhr; //holder XMLHttpRequest-objektet som blir brukt av smartbaren (slik at vi kan avbryte tideligere kall som ikke er ferdige når brukere drar musen raskt over tabene)
var preloadedSmartbarTabs = new Array(); //array over forhåndslastede (og cachede) tabs
var doPreloadSmartbarTabs = false; //Skal tabene preloades etter at resten av siden er ferdig lastet?

for(var i = 1; i <= smartbartabs.length; i++)
{
 addTabEventHandler(i);
}
function addTabEventHandler(tab)
{
 var tabelement = smartbartabs[tab-1]; //Tabene begynner på 1 mens arrayen begynner på 0. Derfor -1.
 tabelement.onmouseover = function() //Både onclick og onmouseover. Ikke alle bruker mus slik at de kan få til en onmouseover.
 {
  if(tabelement.parentNode.className == "active")
   return false; //Hvis taben allerede er aktiv returnerer vi false

  for(var i = 0; i < smartbartabs.length; i++)//Loop gjennom alle tabene og fjern active-klassenavnet
  {
   if(smartbartabs[i].parentNode.className == "active")
   {
    smartbartabs[i].parentNode.className = "";
    break; //Kun èn tab har active-klassenavn, så det er trygt å bryte ut av loopen nå.
   }
  }
  tabelement.parentNode.className = "active"; //Gir den aktive taben classen active
  
  var timeout = setTimeout(function() //lager fÃ¸rst en timeout som legger inn "Laster"-teksten hvis det tar mer enn 100 ms Ã¥ laste taben
  {
   if(smartbartabs[tab-1].parentNode.className == "active") //hvis requesten har tatt mer enn et tidels sekund og dette fortsatt er den aktive taben, gir vi brukeren en liten laster-melding.
   {
    smartbarcontents.style.minHeight = smartbarcontents.clientHeight + "px"; //Gjør at boksen ikke krymper når man endrer innholdet til "Laster..."
    smartbarcontents.innerHTML = '<div style="height: '+smartbarcontents.clientHeight+'px">Laster...</div>';
   }
  }, 100);
  
  loadSmartbarTabContents(tab, function(contents)
  {
   clearTimeout(timeout); //fjern timeouten, for nå er innholdet lastet
   smartbarcontents.innerHTML = contents;
  });
  return false; //return false for at ikke nettleseren skal gjøre det den vanligvis ville ha gjort (følge lenken når den blir trykket på)
 }
 tabelement.onclick = function()
 {
	if(tabelement.parentNode.className = "active") //hvis fanen allerede er aktiv, skal brukeren sendes videre til siden for den aktuelle fanen
	 return true;
	else
	{
	 tabelement.onmouseover(); //nettleseren skal gjøre det samme som han ville ha gjort på en mouseover
	 return false; //return false for at nettleseren ikke skal følge lenken
	}
	 
 }
}

function preloadSmartbarTabs()
{
	var xhr = createXHR();
	xhr.open("GET", "/includes/smartbar"+((window.location.href.indexOf("vis=itpro") != -1) ? "" : "2") + ".php?jscall=true&preloading=true");
	xhr.onreadystatechange = function()
	{
		if(xhr.readyState == 4 && xhr.status == 200)
		{
			var array = xhr.responseText.split("<!--[newtab]-->");
			for(var i = 0; i < array.length; i++)
			{
				preloadedSmartbarTabs[i+1] = array[i];
			}
		}
	};
	xhr.send(null);
}
if(doPreloadSmartbarTabs)
 window.addEvent("load", preloadSmartbarTabs);

function loadSmartbarTabContents(tab, callback) //Laster innholdet i taben og returerer det som et argument til callback-funksjonen
{
 if(preloadedSmartbarTabs[tab]) //hvis taben er forhåndslastet eller cachet returnerer vi bare det, i stedet for å hente innholdet på serveren.
 {
  callback(preloadedSmartbarTabs[tab]);
  return;
 }
 //Hvis ikke taben er preloaded må vi laste den ned via XHR
 if(smartbarxhr)
  smartbarxhr.abort(); //fjern eventuelle tideligere requester

 smartbarxhr = createXHR(); //Lag nytt XHR-objekt (det ville jo virke naturlig å bruke det gamle, men jeg har møtt på en del problemer når jeg har gjort det)
 smartbarxhr.open("GET", "/includes/smartbar"+((window.location.href.indexOf("vis=itpro") != -1) ? "" : "2") + ".php?jscall=true&radioart="+tab, true);
 smartbarxhr.onreadystatechange = function()
 {
  if(smartbarxhr.readyState == 4)
  {
   callback(smartbarxhr.responseText);
   preloadedSmartbarTabs[tab] = smartbarxhr.responseText;
  }
 }
 smartbarxhr.send(null);
}
})();
