// Deklarerer globale variabler
var g_loading = false;
var currentBedpresElement;
var neutHeight;


// Denne funksjonen tar inn en boolsk variabel som sier ifra om tilstanden er loading-modus eller ikke
function setLoading(loading) {
	if (loading) {
		// Vi laster noe
		// Vis loading-grafikken
		document.getElementById("loading").className = "visible";
		g_loading = true;
	} else {
		// Lastingen er ferdig
		// Skjul loading-grafikken
		document.getElementById("loading").className = "hidden";
		g_loading = false;
	}


}

// Denne funksjonen viser feilmeldinger fra underliggende JavaScript
function showErrorMessage(message) {
	alert(message);
}

// Denne funksjonen fjerner white-space på begge sider av en string
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g, "");
}

// Denne funksjonen fjerner white-space på starten av en string
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/, "");
}

// Denne funksjonen fjerner white-space på slutten av en string
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/, "");
}

// Denne funksjonen sjekker om et objekt har en gitt css-klasse
// Returnerer TRUE eller FALSE
function cssCheckClass(object, nameOfClass) {
	return new RegExp('\\b'+nameOfClass+'\\b').test(object.className);
}

// Denne funksjonen legger en css-klasse til et objekt
// Dersom objektet allerede har klassen vil ingenting skje
function cssAddClass(object, nameOfClass) {
	if (!cssCheckClass(object, nameOfClass)) {
		// Legger til klassen, og søreger for å fjerne whitespace i kantene
    	object.className = trim(object.className + ' ' + nameOfClass);
	}
}

// Denne funksjonen fjerner en css-klasse fra et objekt
// Dersom objektet ikke har klassen vil ingenting skje
function cssRemoveClass(object, nameOfClass) {
	// Søker etter klassenavnet prefixet med mellomrom, for å forhindre doble mellomrom om klassen
	// befinner seg mellom andre klasser. Dersom vi ikke finner klassenavnet med mellomrom
	// erstatter vi kun klassenavnet
	var rep = object.className.match(' ' + nameOfClass) ? ' '+nameOfClass : nameOfClass;
	object.className = object.className.replace(rep, '');
}

// Denne funksjonen henter et element by CLASS (finnes merkelig nok ikke i JS DOMen fra før)
// ## Written by: Dustin Diaz
// ## http://www.dustindiaz.com
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

// Benytter Yahoo sitt UI-rammeverk til å animere et objekt
function animateIn(element) {

	// Sjekk at vi har et element å animere
	if (element == null) return false;
	
	// Lagre en referanse til dette elementet slik at vi skal kunne sette
	// timere på det som fungerer selv etter at funksjonen er ferdig
	currentBedpresElement = element;
	neutHeight = element.style.height;

	// Definerer lengden på animasjonen i sekunder
	var length = 0.6;
	
	// Hent høyden elementet skal ha når det er ferdig
	var realHeight = element.offsetHeight;

	// På grunn av en bug i YAHOO!-Anim så blir elementene 11px for lange for hver gang.
	// Reduser dermed størrelsen på elementet med 11px.
	realHeight -= 11;

	// Sett starthøyden til elementet
	element.style.height = 10 + 'px';

	// Opprett animasjonsobjektet
	var myAnim = new YAHOO.util.Anim(element, {height: { to: realHeight }}, length, YAHOO.util.Easing.easeOut);

	// Run the animation
	myAnim.animate();

	// For at det skal fungere godt å skifte sider inne i bedpresDetaljer også 
	// etter animasjonen må høyden settes tilbake til auto. Vi gjør dette 200 ms
	// etter at animasjonen skal være ferdig.
	setTimeout('currentBedpresElement.style.height = \'auto\';', (length*1000) + 200);
}

// åpner et nytt vindu, brukes blant annet til å poppe opp info om hvordan man skal finne kortnummer
function openwin(width, height, url)
{
	win = window.open(url, 'win', 'width=' + width + ',height=' + height);
	if (win.focus)
		win.focus();
}

// Denne funksjonen filtrerer en liste
function jsFilter(filterElements, filterIDs, filterSet, filterList) {
	// Skrevet av Mads Gedde i desember 2007. 
	// Vanskelig å sette seg inn i kanskje, men prøver å forklare. :-)

	// Denne funksjonen filtrerer en liste
	// Den baserer seg på endel ulike arrays
	// € filterElements: Array (of Strings) - Definerer hvilke id-navn som skal filtreres. (Eks: ['row', 'bedpresInfo']).
	// -> ID blir automatisk satt inn etter hvert id-navn (til row117, bedpresInfo117 osv.)
	// € filterIDs: Array (of Integer) - Definerer id'ene som skal filtreres. (Eks: [110,111,112,116,97,118,121]).
	// -> Disse IDene må være i korrekt rekkefølge i forhold til filterList-verdiene.
	// € filterList: Tre-dimensjonal Array (of Integer) - Definerer en filterlinje sine verdier, 1 = true, 0 = false.
	// -> Disse verdiene må være i korrekt rekkefølge i forhold til filterIDs-elementene
	// € filterSet: To-dimensjonal Array (of Integer) - Definerer om en filterlinje er i bruk eller ikke, 1 = true, 0 = false. (Eks. [[1,0],[0,0]]).
	// -> Filterlinjer tilsvarer for eksempel: Stillingstyper, Kommende-vs.-Alle presentasjoner osv.

	// Temoporær filtervariabel
	var t_filter = 0;
    var u_filter = 0; //union-filter mellom samme sett
    var antall = 0;

	// Looper gjennom elementene som skal filtreres
	for (i = 0; i < filterIDs.length; i++) {

    	// Resetter filtervariabel
        t_filter = 1;

		// Looper gjennom de ulike filtersettene
    	for (s = 0; s < filterSet.length; s++) {

            // Resetter filtervariabel
            u_filter = 0;
            
            // Looper gjennom elementer i et filterset
            // Disse er ok dersom unionen av dem er sann (f.eks. klassetrinn er 1, 2, 3, 4 _ELLER_ 5)
        	for (u = 0; u < filterSet[s].length; u++) {
        	    u_filter = (filterSet[s][u] * filterList[i][s][u]);

        	    //We have found a match
        	    if (u_filter == 1) break;
           	}
           	
           	// If the union filter is false here after looping through each variables, then the total filter is false
           	if (u_filter == 0) {
				t_filter = 0;
				break;
			}
    	}

    	// Vis eller fjern elementet
    	if (t_filter == 0) {
			// Skjul elementet
			for (k = 0; k < filterElements.length; k++) {
				cssAddClass(document.getElementById(filterElements[k] + filterIDs[i]), 'hidden');
			}
		} else {
			// Vis elementet
			antall++;
			for (k = 0; k < filterElements.length; k++) {
				cssRemoveClass(document.getElementById(filterElements[k] + filterIDs[i]), 'hidden');
			}
		}
	}
	
	// Hvis vi ikke fikk noen treff viser vi raden som sier dette
	if (antall == 0) {
		cssRemoveClass(document.getElementById(filterElements[0] + 'Filter'), 'hidden');
	} else {
		cssAddClass(document.getElementById(filterElements[0] + 'Filter'), 'hidden');
	}
}


