// Definerer variabler
var currentBedpresID = null;

// Arrays som brukes til filtrering
var bedpresFilterElements = ['row']; // Array (of String)
var bedpresFilterIDs = []; // Array (of integer)
var bedpresFilterList = []; // Two-dimensional array (of Boolean)
var bedpresFilterSet = [[0,1],[0,1]]; // Array (of Boolean)
// -> Set 0: Alle presentasjoner vs. kommende presentasjoner. Set 1: Alle presentasjoner vs. Aktuelle presentasjoner

// Denne funksjonen kalles når brukeren trykker på en bedpres
// AJAX-backenden blir kalt, og en presentasjon blir lastet
function lastBedpres(inBedpresID) {

	// Dersom Ajax-initialiseringen har feilet lar vi linken fortsette
	if (!ajax) return true;

	// Dersom vi er i loading-modus avbryter vi denne forespørselen
	// Returner false her siden vi ikke ønsker å videresende brukeren slik vi ønsker over
	if (g_loading) return false;

	// Er dette snakk om lukking av en bedpres, og ikke åpning?
	if ( cssCheckClass(document.getElementById("row" + inBedpresID), "open") ) {
		skjulBedpres(inBedpresID);
		return false;
	}

	// Er det en ny presentasjon som åpnes mens en annen fortsatt er åpen?
	// I så fall lukker vi den gamle
	if ( currentBedpresID != null && !cssCheckClass(document.getElementById("bedpresInfo" + currentBedpresID), "hidden") ) {
		skjulBedpres(currentBedpresID);
	}

	// Lagrer bedpresIDen til senere
	currentBedpresID = inBedpresID;

	// Koble til backend
	var url = "bedpresAjax.asp?BedpresID=" + currentBedpresID + "&ajax=true&timestamp=" + Math.random();
	ajax.open("GET", url, true);
	ajax.onreadystatechange = visResultat;
	ajax.send(null);

	// Informer om at vi nå laster innhold
	setLoading(true);

	// Vi returner false slik at linken ikke fortsetter og AJAXen får jobbe
	return false;
}

// Denne funksjonen viser resultatet av AJAX-kallet
// Det betyr at enten vises bedpres-informasjonen dersom brukeren var logget inn,
// eller så vises innloggingsboksen dersom brukeren ikke var logget inn
function visResultat() {
	if (ajax.readyState == 4) {
		if (ajax.status == 200) {

			// Er brukeren logget inn?
			if ( trim(ajax.responseText) == "loginFailed" ) {

        		// Brukeren er ikke logget inn.
        		// Forandre headeren for å fortelle at brukeren må logge inn.
        		// Farger raden som ble valgt
        		cssAddClass(document.getElementById("row" + currentBedpresID), "open");
				// Skjuler Bedriftsnavn, dato, tidspunkt og status fra headeren
				cssAddClass(document.getElementById("presBedrift" + currentBedpresID), "hidden");
				cssAddClass(document.getElementById("presDato" + currentBedpresID), "hidden");
				cssAddClass(document.getElementById("presTidspunkt" + currentBedpresID), "hidden");
				cssAddClass(document.getElementById("presStatus" + currentBedpresID), "hidden");
				// Viser informasjonen som forklarer hvordan man logger inn
				cssRemoveClass(document.getElementById("presInformasjon" + currentBedpresID), "hidden");
				
				// Setter en timer som tilbakestiller headeren etter x sekunder
				var antallSekunder = 4;
				setTimeout( "skjulBedpres(" + currentBedpresID + ")", antallSekunder * 1000);

			} else {

				// Fyll container div-en vår med innholdet vi har lastet
				document.getElementById("bedpresInfo" + currentBedpresID).innerHTML = ajax.responseText;
				// Vis div-en og åpne den vha css
				cssRemoveClass(document.getElementById("bedpresInfo" + currentBedpresID), "hidden");
				cssAddClass(document.getElementById("row" + currentBedpresID), "open");

				//Erstatter statusen til headeren med den nylastede statusen (i tilfelle registrering/avregistrering)
				headerStatus = document.getElementById("presStatus" + currentBedpresID);
		        newStatus = document.getElementById("presBlokkStatus" + currentBedpresID);
		
		        headerStatus.className = newStatus.className;
		        headerStatus.innerHTML = newStatus.innerHTML;

				// Forandre headeren
				// Skjuler dato, tidspunkt og status fra headeren, og viser informasjonen som forklarer hvordan headeren lukkes
				cssAddClass(document.getElementById("presDato" + currentBedpresID), "hidden");
				cssAddClass(document.getElementById("presTidspunkt" + currentBedpresID), "hidden");
				cssAddClass(document.getElementById("presStatus" + currentBedpresID), "hidden");
				cssRemoveClass(document.getElementById("presClose" + currentBedpresID), "hidden");
				
				// Animer inngangen til bedpres-elementet
				// Denne forårsaker foreløpig en bug i IE og må kuttes ut
				// Innholdet i framen forsvinner etter animasjonen, fordi vi prøver å sette
				// height tilbake til 'auto', som vi trenger for å kunne resize de ulike
				// sidene når man bruker navigasjonsbaren
				//animateIn( document.getElementById("bedpresInfo" + currentBedpresID) );

			}

			// Informer om at vi ikke laster lenger
			setLoading(false);
			
		} else {
			// Det har oppstått et problem
			showErrorMessage("Det har oppstått en feil: " + ajax.status);
		}
	} else {
		// Do nothing... We are waiting for the signal.
	}
}

// Denne funksjonen lukker en åpen bedpresBoks
function skjulBedpres(inBedpresID) {
	if(inBedpresID != "") {
					
		// Skjuler div-en med informasjon vha css
		cssAddClass(document.getElementById("bedpresInfo" + inBedpresID), "hidden");
		// Forandrer overskriftsraden vha css
		cssRemoveClass(document.getElementById("row" + inBedpresID), "open");
		// Viser Bedriftsnavn, dato, tidspunkt og status fra headeren
		cssRemoveClass(document.getElementById("presBedrift" + inBedpresID), "hidden");
		cssRemoveClass(document.getElementById("presDato" + inBedpresID), "hidden");
		cssRemoveClass(document.getElementById("presTidspunkt" + inBedpresID), "hidden");
		cssRemoveClass(document.getElementById("presStatus" + inBedpresID), "hidden"); //HÆR
		// Skjuler informasjonen som forklarer hvordan headeren lukkes, og evt beskjed om at brukeren må logge inn
		cssAddClass(document.getElementById("presClose" + inBedpresID), "hidden");
		cssAddClass(document.getElementById("presInformasjon" + inBedpresID), "hidden");

	}
}

// Denne funksjonen skifter hvilken side som vises under bedpresDetaljer, og blir aktivert
// når brukeren trykker på en navigasjonslenke
function swapPage(inBedpresID, swapToPage, linkPressed) {
	
		// Dersom linken som er presset er den aktive trenger vi ikke gjøre noe
		if (cssCheckClass(linkPressed, "active")) return false;

		// Her setter vi opp de lovlige tilstandene vi kan ha
		// Andre tilstander enn disse utløser ingen handling
		switch(swapToPage) {
			case 'details':
			case 'companyInformation':
			case 'majors':
			case 'participants':
			case 'feedback':
			case 'fbregister':
			case 'tellAFriend':
				// Skjul alle sidene, og vis den korrekte
				updatePages(inBedpresID, swapToPage);
				
				// Fjern 'active'-klasse fra linkene
				clearLinkClasses(inBedpresID);

                // Legg til 'active'-klasse på aktuell link
                cssAddClass(linkPressed, "active");
                
                // Avslutt prosedyren
            	break;
  		}

		// Returner false slik at linken ikke fører deg noe sted
		return false;
}

// Denne funksjonen fjerner 'active'-klassen fra alle linkene
function clearLinkClasses(inBedpresID) {
	
	// Hent parent-noden
	var parentNode = document.getElementById("bedpresInfo" + inBedpresID);
				
	// Hent alle children-nodes som er ul (dette er navigasjonsnodene), og deretter dens li-er
	var navNodes = parentNode.getElementsByTagName("ul")[0].getElementsByTagName("li");
	
	// Loop gjennom children-nodene og fjern active-klassen fra alle
	// (i koden til linken blir 'active'-klassen lagt til på linken som ble trykket)
	for (i = 0; i < navNodes.length; i++) {
		// Hide the element
		cssRemoveClass(navNodes[i].getElementsByTagName("a")[0], "active");
	}

}

// Denne funksjonen skjuler alle sider som vises under bedpresDetlajer,
// og den viser den korrekte siden
function updatePages(inBedpresID, swapToPage) {
	
	// Hent parent-noden
	var parentNode = document.getElementById("bedpresInfo" + inBedpresID);
	
	// Hent alle children-nodes som er divs
	var divNodes = parentNode.getElementsByTagName("div");
	
	// Loop gjennom children-nodene og skjul de med 'bedpres'-klasse
	for (i = 0; i < divNodes.length; i++) {
			if (cssCheckClass(divNodes[i], "bedpres")) {
				
				// Er dette siden vi skal vise?
				if (cssCheckClass(divNodes[i], swapToPage)) {
					// Show the element
					cssRemoveClass(divNodes[i], "hidden");
				} else {
					// Hide the element
					cssAddClass(divNodes[i], "hidden");
				}
			}
	}
}

// Denne funksjonen initialiserer filter-arrays
function bedpresFilterInitialize(inFilterIDs, inFilterList) {
	bedpresFilterIDs = inFilterIDs;
	bedpresFilterList = inFilterList;
}

// Denne funksjonen viser alle eller kun kommende presentasjoner, basert på et boolsk flag
// True: Vis kommende, False: Vis alle
function bedpresEnabledKommende(flag) {

	// Oppdater filterlinjen
	if (flag) {
		bedpresFilterSet[0][0] = 1;
		bedpresFilterSet[0][1] = 0;
		
		// Oppdater stilene
		cssAddClass(document.getElementById("filterKommendeLeft"),"selected");
		cssRemoveClass(document.getElementById("filterKommendeRight"),"selected");
	} else {
		bedpresFilterSet[0][0] = 0;
		bedpresFilterSet[0][1] = 1;
		
		// Oppdater stilene
		cssRemoveClass(document.getElementById("filterKommendeLeft"),"selected");
		cssAddClass(document.getElementById("filterKommendeRight"),"selected");
	}

	// Oppdaterer listen
	jsFilter(bedpresFilterElements, bedpresFilterIDs, bedpresFilterSet, bedpresFilterList);
	
	// Har vi en bedpres som er åpen, men som nå ble filtrert bort?
	// I så fall lukker vi denne
	// Er det en ny presentasjon som åpnes mens en annen fortsatt er åpen?
	// I så fall lukker vi den gamle
	if ( currentBedpresID != null && cssCheckClass(document.getElementById("row" + currentBedpresID), "hidden") && !cssCheckClass(document.getElementById("bedpresInfo" + currentBedpresID), "hidden") ) {
		skjulBedpres(currentBedpresID);
	}

	// Returner false så vi ikke følger etter linken
	return false;
}

// Denne funksjonen viser alle eller kun aktuelle presentasjoner, basert på et boolsk flag
// True: Vis aktuelle, False: Vis alle
function bedpresEnabledAktuelle(flag) {

	// Oppdater filterlinjen
	if (flag) {
		bedpresFilterSet[1][0] = 1;
		bedpresFilterSet[1][1] = 0;
		
		// Oppdater stilene
		cssAddClass(document.getElementById("filterAktuelleLeft"),"selected");
		cssRemoveClass(document.getElementById("filterAktuelleRight"),"selected");
	} else {
		bedpresFilterSet[1][0] = 0;
		bedpresFilterSet[1][1] = 1;
		
		// Oppdater stilene
		cssRemoveClass(document.getElementById("filterAktuelleLeft"),"selected");
		cssAddClass(document.getElementById("filterAktuelleRight"),"selected");
	}

	// Oppdaterer listen
	jsFilter(bedpresFilterElements, bedpresFilterIDs, bedpresFilterSet, bedpresFilterList);
	
	// Har vi en bedpres som er åpen, men som nå ble filtrert bort?
	// I så fall lukker vi denne
	// Er det en ny presentasjon som åpnes mens en annen fortsatt er åpen?
	// I så fall lukker vi den gamle
	if ( currentBedpresID != null && cssCheckClass(document.getElementById("row" + currentBedpresID), "hidden") && !cssCheckClass(document.getElementById("bedpresInfo" + currentBedpresID), "hidden") ) {
		skjulBedpres(currentBedpresID);
	}
	
	// Returner false så vi ikke følger etter linken
	return false;
}

// Denne funksjonen kalles når brukeren melder seg på en bedpres
// AJAX-backenden blir kalt, og en presentasjon blir lastet
function registerPres(inBedpresID) {
//Google analytics logging:
pageTracker._trackPageview("/student/registerPres");

	// Dersom Ajax-initialiseringen har feilet lar vi linken fortsette
	if (!ajax) return true;

	// Dersom vi er i loading-modus avbryter vi denne forespørselen
	// Returner false her siden vi ikke ønsker å videresende brukeren slik vi ønsker over
	if (g_loading) return false;

	// Lagrer bedpresIDen til senere
	currentBedpresID = inBedpresID;

	// Koble til backend
	var url = "bedpresAjax.asp?BedpresID=" + currentBedpresID + "&ajax=true&action=register&timestamp=" + Math.random();
	ajax.open("GET", url, true);
	ajax.onreadystatechange = visResultat;
	ajax.send(null);

	// Informer om at vi nå laster innhold
	setLoading(true);

	// Vi returner false slik at linken ikke fortsetter og AJAXen får jobbe
	return false;
}

// Denne funksjonen kalles når brukeren melder seg av en bedpres
// AJAX-backenden blir kalt, og en presentasjon blir lastet
function unregisterPres(inBedpresID) {
//Google analytics logging:
pageTracker._trackPageview("/student/unregisterPres");

	// Dersom Ajax-initialiseringen har feilet lar vi linken fortsette
	if (!ajax) return true;

	// Dersom vi er i loading-modus avbryter vi denne forespørselen
	// Returner false her siden vi ikke ønsker å videresende brukeren slik vi ønsker over
	if (g_loading) return false;

	// Lagrer bedpresIDen til senere
	currentBedpresID = inBedpresID;

	// Koble til backend
	var url = "bedpresAjax.asp?BedpresID=" + currentBedpresID + "&ajax=true&action=unregister&timestamp=" + Math.random();
	ajax.open("GET", url, true);
	ajax.onreadystatechange = visResultat;
	ajax.send(null);

	// Informer om at vi nå laster innhold
	setLoading(true);

	// Vi returner false slik at linken ikke fortsetter og AJAXen får jobbe
	return false;
}
