/**
 * Location:	/modules/view/default/js/calendar.js
 * Copyright:	Neist & Felskov, 2009+
 *
 * Author:		Neist & Felskov
 * Mail:		kontakt@nfdesign.dk
 * Web:			www.nfdesign.dk
 *
 ***********
 *
 * Håndter sortering, søgning og segmentering i kalenderen, samt roll-in af arrangementer.
 */

/**
 * Calendar
 *
 **********
 *
 * Indlæser løbende listen over events i kalenderen, der matcher brugerens kriterier.
 * Håndterer desuden intelligent preloading af events.
 */
function Calendar(){
	// Indlæs en reference til container-elementet
	this.container=document.getElementById('calendar_overview');
	this.list=document.getElementById('calendar_list');
	this.page_container=document.getElementById('calendar_page');

	// Fjern alle eksisterende elementer fra kalenderen
	this.list.innerHTML='';
	document.getElementById("calendar_expand_link").href="javascript:cal.expand();";

	// Klargør variabler
	this.onLoaded=false;										// Onload er endnu ikke kørt
	this.type=0;												// Som udgangspunkt vises arrangementer i salg nu
	this.venues=[];												// Klargør et array til fravalgte venues
	this.q=''; this.searchTimer=null;							// Som udgangspunkt søges der ikke på noget
	this.genre='';												// Som udgangspunkt er der ikke valgt nogen genre
	this.tstamp='';												// Som udgangspunkt er der ikke valgt nogen dato
	this.sort='tstamp';											// Standard sortering på dato
	this.sortDir='asc';											// ... stigende

	// Opsætning af status-ikoner
	this.status=[
		{'height':20,'center':'0','img':null},											// Intet (0)
		{'height':20,'center':'9px','img':'-81px','hover':'-380px','txt':'Ny','ie6':'templates/view/da_DK/default/images/ie6/ny.png'},			// Nyt (1)
		{'height':22,'center':'7px','img':'-483px','hover':'-483px','txt':'Ny info!','ie6':'templates/view/da_DK/default/images/ie6/ny_info.png'}	// Ny info (2)
	];

	// Opsætning af billet-status
	this.tickets=[
		{'img':'-1px',hover:'-300px','txt':'Køb billet','ie6':'templates/view/da_DK/default/images/ie6/bestil.png'},		// Mange billetter (status 0)
		{'img':'-21px',hover:'-320px','txt':'Få billetter','ie6':'templates/view/da_DK/default/images/ie6/faa_billetter.png'},	// Næsten udsolgt (status 1)
		{'img':'-41px',hover:'-340px','txt':'Udsolgt','ie6':'templates/view/da_DK/default/images/ie6/udsolgt.png'},			// Udsolgt (status 2)
		{'img':'-61px',hover:'-360px','txt':'Aflyst','ie6':'templates/view/da_DK/default/images/ie6/aflyst.png'},			// Aflyst (status 3)
		{'img':'-443px',hover:'-463px','txt':'Gratis','ie6':'templates/view/da_DK/default/images/ie6/gratis.png'},			// Gratis (status 4)
		{'img':'-505px',hover:'-525px','txt':'Entré','ie6':'templates/view/da_DK/default/images/ie6/entre.png'},			// Entré (status 5)
		{'img':'-1500px',hover:'-1500px','txt':'','ie6':'templates/view/da_DK/default/images/layout/blank.gif'},			// Intet ikon (status 6)
		{'img':'-545px',hover:'-565px','txt':'Venteliste','ie6':'templates/view/da_DK/default/images/ie6/venteliste.png'}	// Venteliste (status 7)
	];

	// Klargør variabler
	this.defaultDisplayed=20;									// Der skal vises 10 elementer fra start af
	this.displayed=this.defaultDisplayed;						// ------------------ || ------------------
	this.page=25;												// Som udgangspunkt vises 25 events pr. side

	this.preloading=true;										// Angiv at der ikke preloades noget
	this.preloaded=0;											// Angiver antal preloadede events
	this.remaining=1;											// Angiver antal tilbageværende events i databasen

	this.tmpEvents=[];											// Klargør en midlertidig liste over aktive/viste events, der bruges under søgning, sortering og segmentering
	this.events=[];												// Klargør en liste over aktive/viste events

	// Klargør top-baren
	this.top=document.getElementById('calendar_top'); var list=this.top.getElementsByTagName('a');
	var i=list.length; var j=i;

	// IE6?
	if(!isIE6) var path='templates/view/da_DK/default/images/calendar/calendar.png';
	else var path='templates/view/da_DK/default/images/ie6/calendar.gif';

	// Opret seperatorer mellem hvert element
	if(i>0)do{
		// Håndter det første element
		if(j==i){
			var sep=document.createElement('div'); var s=sep.style;										// Opret elementet
			s.width='11px'; s.height='30px'; s.styleFloat='left'; s.cssFloat='left';					// Angiv størrelsen
			s.background='url('+path+') no-repeat';														// Indlæs baggrundsbilledet
			s.backgroundPosition='0 -110px';															// Positioner baggrundsbilledet

			var sep2=document.createElement('div'); var s=sep2.style;									// Opret elementet
			s.width='18px'; s.height='30px'; s.styleFloat='left'; s.cssFloat='left';					// Angiv størrelsen
			s.background='url('+path+') no-repeat';														// Indlæs baggrundsbilledet
			s.backgroundPosition='-11px -110px';														// Positioner baggrundsbilledet

		// Håndter midter elementer
		}else if(i>1){
			var sep=document.createElement('div'); var s=sep.style;										// Opret elementet
			s.width='5px'; s.height='30px'; s.styleFloat='left'; s.cssFloat='left';						// Angiv størrelsen
			s.background='url('+path+') no-repeat';														// Indlæs baggrundsbilledet
			s.backgroundPosition='-24px -110px';														// Positioner baggrundsbilledet

			var sep2=document.createElement('div'); var s=sep2.style;									// Opret elementet
			s.width='30px'; s.height='30px'; s.styleFloat='left'; s.cssFloat='left';					// Angiv størrelsen
			s.background='url('+path+') no-repeat';														// Indlæs baggrundsbilledet
			s.backgroundPosition='-34px -110px';														// Positioner baggrundsbilledet

		// Håndter slut elementet
		}else{
			var sep=document.createElement('div'); var s=sep.style;										// Opret elementet
			s.width='5px'; s.height='30px'; s.styleFloat='left'; s.cssFloat='left';						// Angiv størrelsen
			s.background='url('+path+') no-repeat';														// Indlæs baggrundsbilledet
			s.backgroundPosition='-24px -110px';														// Positioner baggrundsbilledet

			var sep2=document.createElement('div'); var s=sep2.style;									// Opret elementet
			s.width='25px'; s.height='30px'; s.styleFloat='left'; s.cssFloat='left';					// Angiv størrelsen
			s.background='url('+path+') no-repeat';														// Indlæs baggrundsbilledet
			s.backgroundPosition='-66px -110px';														// Positioner baggrundsbilledet
		}

		// Indsæt seperatorerne
		this.top.insertBefore(sep,list[j-i]); sep=null;
		if(list[j-i].nextSibling) this.top.insertBefore(sep2,list[j-i].nextSibling); else this.top.appendChild(sep2); sep2=null; s=null;

		// Vis elementet
		list[j-i].style.visibility='visible';
	}while(--i);

	// Ryd hukommelsen
	list=null;

	// Begynd at preloade, når siden er indlæst
	setTimeout(function(){cal.preload();},1500);
}

/**
 * setType
 *
 **********
 *
 * Vælger type af arrangementer der vises.
 *
 **********
 *
 * Parametre:
 * type (int)							Angiver typen.
 */
Calendar.prototype.setType=function(type){
	// Sæt typen
	this.type=type;
	this.init=true;

	// Gennemgå top-menuen og opdater layoutet
	var list=this.top.getElementsByTagName('a');
	var i=list.length; var j=i;

	if(i>0)do{
		// Indlæs en reference til elementet
		var tmp=list[j-i];

		// Håndter start-elementet
		if(j==i){
			// Skal elementet være aktivt?
			if(type==j-i){
				// Håndter start-elementet
				tmp.previousSibling.style.width='11px';
				tmp.previousSibling.style.backgroundPosition='0 -110px';

				// Håndter slut-elementet
				tmp.nextSibling.style.width='18px';
				tmp.nextSibling.style.backgroundPosition='-11px -110px';

			// ... Eller inaktivt?
			}else{
				// Håndter start-elementet
				tmp.previousSibling.style.width='11px';
				tmp.previousSibling.style.backgroundPosition='-23px -110px';

				// Håndter slut-elementet
				if(type!=j-i+1){
					tmp.nextSibling.style.width='30px';
					tmp.nextSibling.style.backgroundPosition='-34px -110px';
				}else{
					tmp.nextSibling.style.width='25px';
					tmp.nextSibling.style.backgroundPosition='-66px -110px';
				}
			}

		// Håndter midter-elementer
		}else if(i>1){
			// Skal elementet være aktivt?
			if(type==j-i){
				// Håndter start-elementet
				tmp.previousSibling.style.width='11px';
				tmp.previousSibling.style.backgroundPosition='0 -110px';
			
				// Håndter slut-elementet
				tmp.nextSibling.style.width='18px';
				tmp.nextSibling.style.backgroundPosition='-11px -110px';
			
			// ... Eller inaktivt?
			}else{
				// Håndter start-elementet
				tmp.previousSibling.style.width='5px';
				tmp.previousSibling.style.backgroundPosition='-24px -110px';
			
				// Håndter slut-elementet
				if(type!=j-i+1){
					tmp.nextSibling.style.width='30px';
					tmp.nextSibling.style.backgroundPosition='-34px -110px';
				}else{
					tmp.nextSibling.style.width='25px';
					tmp.nextSibling.style.backgroundPosition='-66px -110px';
				}
			}

		// Håndter slut-elementer
		}else{
			// Skal elementet være aktivt?
			if(type==j-i){
				// Håndter start-elementet
				tmp.previousSibling.style.width='11px';
				tmp.previousSibling.style.backgroundPosition='0 -110px';
			
				// Håndter slut-elementet
				tmp.nextSibling.style.width='11px';
				tmp.nextSibling.style.backgroundPosition='-11px -110px';
			
			// ... Eller inaktivt?
			}else{
				// Håndter start-elementet
				tmp.previousSibling.style.width='5px';
				tmp.previousSibling.style.backgroundPosition='-24px -110px';
			
				// Håndter slut-elementet
				tmp.nextSibling.style.width='25px';
				tmp.nextSibling.style.backgroundPosition='-66px -110px';
			}
		}

		// Opdater baggrunden på selve linket
		if(tmp.currentStyle) var bg=tmp.currentStyle['backgroundPosition']?tmp.currentStyle['backgroundPosition']:tmp.currentStyle['backgroundPositionX']+' '+tmp.currentStyle['backgroundPositionY'];
		else if(window.getComputedStyle) var bg=document.defaultView.getComputedStyle(tmp,null).getPropertyValue('background-position');

		// Udregn placeringen af baggrunden (for at markere som (in)aktiv)
		if(j-i==type) bg=bg.split('-140px').join('-110px');
		else bg=bg.split('-110px').join('-140px');

		// Opdater baggrunden
		tmp.style.backgroundPosition=bg;
	}while(--i);

	// Håndter valg af måned
	var tmp=document.getElementById('tstamp_now');
	tmp.style.display=(type==0)?'block':'none';
	tmp.getElementsByTagName('span')[0].innerHTML='Vælg måned';
	tmp.getElementsByTagName('select')[0].selectedIndex=0;
	tmp=null;

	var tmp=document.getElementById('tstamp_previous');
	tmp.style.display=(type==1)?'block':'none';
	tmp.getElementsByTagName('span')[0].innerHTML='Vælg måned';
	tmp.getElementsByTagName('select')[0].selectedIndex=0;
	tmp=null;

	var tmp=document.getElementById('tstamp_favorites');
	tmp.style.display=(type==2)?'block':'none';
	tmp.getElementsByTagName('span')[0].innerHTML='Vælg måned';
	tmp.getElementsByTagName('select')[0].selectedIndex=0;
	tmp=null;

	this.tstamp='';

	// Opdater sortering!
	this.sort='tstamp';
	this.sortDir=(type!=1)?'asc':'desc';

	// Fjern sorterings-pile på alle andre værdier
	var list=document.getElementById('calendar_titles').getElementsByTagName('a'); var i=list.length; var j=i;
	if(i>0)do{list[j-i].getElementsByTagName('img')[0].style.backgroundPosition='0 -1000px';}while(--i);

	// Opdater pilen
	document.getElementById('calendar_titles').getElementsByTagName('a')[0].getElementsByTagName('img')[0].style.backgroundPosition=((this.sortDir=='asc')?'0':'-7px')+' -99px';

	// Tjek om der vises en side
	if(!this.showingPage){
		// Udfør søgningen!
		this.updateList();

	// ... Hvis det er tilfældet, starter vi med at slide siden ud
	}else{
		// Slide siden ud
		new Effect(function(p){cal.container.style.left=Math.round(-510+510*p)+'px'; cal.page_container.style.left=Math.round(510*p)+'px'; if(p==1){document.getElementById('calendar_comments').style.display='none';}},{duration:0.65,ease:true});
		this.showingPage=false; this.preloadingID=null; this.eventID=null;

		// Udfør søgningen
		setTimeout(function(){cal.updateList();},250);
	}
}

/**
 * toggleVenue
 *
 **********
 *
 * Håndterer til- og fravalg af venues i kalenderen.
 *
 **********
 *
 * Parametre:
 * venueID (int)						ID'et på det venue, der skal til-/fravælges.
 * handler (object)						En reference til linket, der håndterer dette venue.
 */
Calendar.prototype.toggleVenue=function(venueID,handler,init){
	// Tjek om dette venue allerede er fravalgt
	var i=this.venues.length; var j=i; var status=-1;
	if(i>0)do{
		// Er dette det fravalgte venue?
		if(this.venues[j-i]==venueID){
			// Så gemmer vi ID'et (så vi ved, at det er fravalgt i forvejen og nu skal tilvælges)
			status=j-i;

			// Og afbryd loopet
			break;
		}
	}while(--i);

	// Opdater status for dette venue
	if(status==-1) this.venues[this.venues.length]=venueID
	else this.venues.splice(status,1);

	// Opdater checkboksen
	handler.getElementsByTagName('img')[0].style.backgroundPosition=((status==-1)?'-13px':'0')+' -87px';

	// Udfør søgningen!
	if(!init){
		this.init=true;
		this.updateList();
	}
}

/**
 * setGenre
 *
 **********
 *
 * Søger på en bestemt genre.
 *
 **********
 *
 * Parametre:
 * genre (int)							Indeholder ID'et på den valgte genre.
 */
Calendar.prototype.setGenre=function(genre){
	// Gem ID'et på genren
	this.genre=genre;
	this.init=true;

	// Udfør søgningen!
	this.updateList();
}

/**
 * setTstamp
 *
 **********
 *
 * Søger på en bestemt måned.
 *
 **********
 *
 * Parametre:
 * tstamp (string)						Indeholder den valgte måned.
 */
Calendar.prototype.setTstamp=function(tstamp){
	// Gem ID'et på genren
	this.tstamp=tstamp;
	this.init=true;

	// Udfør søgningen!
	this.updateList();
}

/**
 * search
 *
 **********
 *
 * Udfører en fritekstsøgning i kalenderen.
 */
Calendar.prototype.search=function(){
	// Indlæs den aktuelle søgning
	var q=document.getElementById('calendar_search_q').value;

	// Hvis der ikke er sket nogen ændringer, udfører vi ikke en ny søgning
	if(q==this.q) return;

	// Gem info om brugerens søgning
	this.searchTimer=null;	// Angiv at der ikke længere er en søgning i gang
	this.q=q;				// Gem søge-strengen
	this.init=true;

	// Udfør søgningen!
	this.updateList();
}

/**
 * sortBy
 *
 **********
 *
 * Håndterer valg af sortering i listen.
 *
 **********
 *
 * Parametre:
 * sort (string)						Angiver hvad der skal sorteres på.
 * dir (string)							Angiver om der skal sorteres stigende/faldende som standard.
 * handler (object)						En reference til linket, der håndterer sorteringen.
 */
Calendar.prototype.sortBy=function(sort,dir,handler){
	// Er der sorteret på denne værdi i forvejen?
	// - Hvis ikke, gør vi det med det samme
	if(this.sort!=sort){
		this.sort=sort;		// Angiv sorteringen
		this.sortDir=dir;	// ... og rækkefølgen (stigende/faldende)

	// Ellers sorterer vi modsat den nuværende sortering
	}else{
		this.sortDir=(this.sortDir=='asc')?'desc':'asc';
	}

	// Fjern sorterings-pile på alle andre værdier
	var list=document.getElementById('calendar_titles').getElementsByTagName('a'); var i=list.length; var j=i;
	if(i>0)do{list[j-i].getElementsByTagName('img')[0].style.backgroundPosition='0 -1000px';}while(--i);

	// Opdater pilen
	handler.getElementsByTagName('img')[0].style.backgroundPosition=((this.sortDir=='asc')?'0':'-7px')+' -99px';

	// Opdater listen
	this.init=true;
	this.updateList();
}

/**
 * updateList
 *
 **********
 *
 * Slider den gamle liste op, rydder hukommelsen og starter download af den næste liste
 */
Calendar.prototype.updateList=function(){
	// Preloades der? - Så afbryder vi den aktuelle preloading
	if(this.preloading){
		// Så venter vi til "onPreloaded" køres
		this.onPreloaded=function(){cal.updateList();}

		// Afbryd preloading hurtigst muligt
		if(this.page!=1){
			if(this.page) this.tmpPage=this.page;
			else this.tmpPage=-1;
			this.page=1;
		}

		// ... Og afbryd funktionen indtil videre
		return;
	}

	// Husk visning af antal events
	if(this.tmpPage>0) this.page=this.tmpPage;
	else if(this.tmpPage<1) this.page=0;

	// Nulstil info om preloaded og viste events
	var height=this.getHeight();
	this.displayed=0; this.preloaded=0; this.tmpEvents=this.tmpEvents.concat(this.events); this.events=[];

	// Angiv status for systemet
	var status=document.getElementById('calendar_expand_link');		// Indlæs en reference til status-linjen
	var icon=status.getElementsByTagName('img')[0];					// Indlæs en reference til ikonet
	var label=status.getElementsByTagName('span')[0];				// Indlæs en reference til status-teksten

	// Vis load-ikonet
	icon.style.display='inline';									// Vis ikonet
	if(icon.src.indexOf('templates/view/da_DK/default/images/calendar/loader.gif')==-1) icon.src='templates/view/da_DK/default/images/calendar/loader.gif';	// Indlæs loader-ikonet
	icon.style.background='none';									// Skjul "fold ud"-ikonet

	// Opdater teksten
	label.style.paddingLeft='10px';									// Tilføj margen på teksten
	if(label.childNodes[0]) label.removeChild(label.childNodes[0]);	// Fjern den nuværende status-tekst
	label.appendChild(document.createTextNode('Indlæser...'));		// Indsæt den nye status-tekst

	// Opdater elementet
	status.style.cursor='default';									// Indiker at elementet ikke er et link
	status=null; icon=null; label=null;								// Ryd hukommelsen

	// Begynd at preloade arrangementer
	this.onPreloaded=function(){cal.updateList2();}
	this.preload();

	// Slide kalenderen helt op
	if(height>0) new Effect(function(p){cal.list.style.height=Math.round(height-height*p)+'px'; ie6Render();},{duration:0.5,ease:true});
}

/**
 * updateList2
 *
 **********
 *
 * Fjerner gamle events og slider den nye liste ned.
 */
Calendar.prototype.updateList2=function(){
	// Kør først denne funktion, når kalenderen er slidet helt op
	if(this.list.offsetHeight>0){
		setTimeout(function(){cal.updateList2();},50);
		return;
	}

	// Fjern den eksisterende liste
	while(this.tmpEvents[0]){
		// Fjern fra den visuelle liste
		this.tmpEvents[0].container.parentNode.removeChild(this.tmpEvents[0].container);

		// Fjern fra hukommelsen
		this.tmpEvents.splice(0,1);
	}

	// Udvid den nye liste!
	this.expand();
}

/**
 * setPage
 *
 **********
 *
 * Opdaterer info om hvor mange events, der skal vises pr. side.
 *
 **********
 *
 * Parametre:
 * page (int)							Angiv hvor mange events, der skal vises pr. side.
 */
Calendar.prototype.setPage=function(page){
	// Opdater info!
	this.page=page;

	// Er der behov for flere preloadede events?
	// Og er systemet ikke allerede i gang med at preloade?
	// - Så starter vi med at preloade nye elementer med det samme
	if((this.preloaded<this.page&&!this.preloading)||this.page==0) this.preload();

	// Indlæs teksten til "Vis de næste X arrangementer"
	var remaining=parseInt(this.remaining,10)+parseInt(this.preloaded,10);
	if(this.page<remaining) var txt=this.page?'Vis de næste '+this.page+' arrangementer':'Vis alle arrangementer';
	else{
		// Indlæs antal arrangementer tilbage
		if(remaining>1) var txt='Vis de sidste '+remaining+' arrangementer';
		else if(remaining==1) var txt='Vis det sidste arrangement';
		else if(this.displayed>0) var txt='';
		else var txt='Der er ikke nogen matchende arrangementer...';
	}

	// Opdater "Vis de næste X arrangementer"
	var tmp=document.getElementById('calendar_expand_link').getElementsByTagName('span')[0];	// Indlæs en reference til teksten
	tmp.removeChild(tmp.childNodes[0]);				// Fjern den nuværende tekst
	tmp.appendChild(document.createTextNode(txt));	// Indsæt den rigtige tekst
	tmp=null;										// Ryd hukommelsen
}

/**
 * preload
 *
 **********
 *
 * Preloader de kommende elementer i listen.
 */
Calendar.prototype.preload=function(){
	// Er hele listen indlæst? - Så afbryder vi preloadingen
	if((this.page>0 && this.preloaded>=this.page) || (this.init && this.preloaded==this.defaultDisplayed)){
		// Afslut preloading
		this.init=false;
		this.endPreload();

		// Afbryd funktionen
		return;
	}

	// Begynd at preloade det næste event
	this.preloading=true;	// Angiv at der preloades
	this.loadEvent();		// Preload det næste event	
}

/**
 * loadEvent
 *
 **********
 *
 * Indlæser informationer om det næste event i listen.
 */
Calendar.prototype.loadEvent=function(){
	// Klargør et AJAX-objekt (tag højde for browser-forskelle)
	var ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

	// Klargør modtagning af informationerne
	ajax.onreadystatechange=
	function(){
		// Tjek om hele status er modtaget
		if(ajax.readyState==4 && ajax.status==200){
			// Klargør en reference til XML'en
			var xml=ajax.responseXML.documentElement;

			// Er der sendt nogen data retur? - Så tilføjer vi eventet til listen
			if(xml.getElementsByTagName('id')[0]){
				// Formater informationerne
				try{var id=xml.getElementsByTagName('id')[0].firstChild.nodeValue;}catch(e){var id='';}								// Indlæs ID
				try{var title=xml.getElementsByTagName('title')[0].firstChild.nodeValue;}catch(e){var title='';}					// Indlæs titel
				try{var subtitle=xml.getElementsByTagName('subtitle')[0].firstChild.nodeValue;}catch(e){var subtitle='';}			// Indlæs subtitel
				try{var tstamp=xml.getElementsByTagName('tstamp')[0].firstChild.nodeValue;}catch(e){var tstamp=0;}					// Indlæs timestamp
				try{var tstamp2=xml.getElementsByTagName('tstamp2')[0].firstChild.nodeValue;}catch(e){var tstamp='1-0-1970-Mandag';}// Indlæs timestamp
				try{var ticket=xml.getElementsByTagName('ticket')[0].firstChild.nodeValue;}catch(e){var ticket='';}					// Indlæs billet-status
				try{var status=xml.getElementsByTagName('status')[0].firstChild.nodeValue;}catch(e){var status='';}					// Indlæs status
				try{var venue=xml.getElementsByTagName('venue')[0].firstChild.nodeValue;}catch(e){var venue='';}					// Indlæs farvekoder
				try{var colors=xml.getElementsByTagName('colors')[0].firstChild.nodeValue;}catch(e){var colors='';}					// Indlæs farvekoder
				try{var favorite=parseInt(xml.getElementsByTagName('favorite')[0].firstChild.nodeValue);}catch(e){var favorite=0;}	// Indlæs favorit-status
				try{var url=xml.getElementsByTagName('url')[0].firstChild.nodeValue;}catch(e){var url='';}							// Indlæs favorit-status
				try{var link=xml.getElementsByTagName('link')[0].firstChild.nodeValue;}catch(e){var link='';}						// Indlæs favorit-status

				// Registrer informationerne
				cal.addEvent(id,title,subtitle,tstamp,ticket,status,venue,colors,favorite,url,link,tstamp2);	// Klargør eventet
				cal.preloaded++;																		// Opdater antal preloadede elementer

				// Ryd hukommelsen
				id=null; title=null; subtitle=null; ticket=null; status=null; venue=null; colors=null;
			}

			// Indlæs antal elementer tilbage i databasen
			cal.remaining=xml.getElementsByTagName('remaining')[0].firstChild.nodeValue;

			// Ryd hukommelsen
			xml=null;

			// Hvis der er flere elementer, preloades det næste event i listen - ellers afslutter vi preload
			if(parseInt(cal.remaining,10)>0) cal.preload();
			else cal.endPreload();
		}
	}

	// Send forespørgslen til serveren
	ajax.open("GET",document.getElementsByTagName('base')[0].href+"ajax/view/calendar.php?count="+this.events.length+"&sort="+this.sort+"&sortDir="+this.sortDir+"&type="+this.type+"&venues="+this.venues.join(',')+"&tstamp="+this.tstamp+"&genre="+this.genre+"&q="+encodeURIComponent(this.q),true);
	ajax.send(null);
}

/**
 * endPreload
 *
 **********
 *
 * Afslutter en preloading
 */
Calendar.prototype.endPreload=function(){
	// Vi preloader ikke længere
	this.preloading=false;

	// Skjul evt. "vis næste"
	if(this.remaining<=0 && this.displayed>0 && this.preloaded<0){
		// Opdater teksten
		var tmp=document.getElementById('calendar_expand_link').getElementsByTagName('span')[0];	// Indlæs en reference til teksten
		tmp.removeChild(tmp.childNodes[0]);				// Fjern den nuværende tekst
		tmp.appendChild(document.createTextNode(''));	// Indsæt den rigtige tekst
		tmp=null;										// Ryd hukommelsen

		// Skjul pilen
		var tmp=document.getElementById('calendar_expand_link');	// Indlæs en reference til linket
		tmp.getElementsByTagName('img')[0].style.display='none';	// Fjern pilen
		tmp.getElementsByTagName('span')[0].style.paddingLeft='0';	// Fjern margen
		tmp.style.cursor='default';									// Indiker at knappen ikke længere er et link
	}

	// Tjek om der skal køres et event
	var tmp=this.onPreloaded;	// Indlæs en reference til eventet
	this.onPreloaded=null;		// Sørg for at samme funktion ikke køres 2 gange
	if(tmp) tmp(); tmp=null;	// Kør evt. onPreloaded-eventen	
}

/**
 * addEvent
 *
 **********
 *
 * Opretter en handler til eventet.
 *
 **********
 *
 * Parametre:
 * id (int)								ID'et på eventet.
 * title (string)						Titlen på eventet.
 * subtitle (string)					Eventuel subtitel.
 * tstamp (int)							Timestamp/dato for eventet.
 * ticket (int)							Billet-status for eventet (0-2, se Calendar).
 * status (int)							Status for eventet (0-1, se Calendar).
 * venue (int)							ID'et på venuen for eventet.
 * colors (int)							Farvekoder for eventet.
 * favorite (boolean)					Angiver om arrangementet er markeret som favorit.
 * url (string)							URL'en til arrangementet
 * link (string)						Linket til billetsalg
 */
Calendar.prototype.addEvent=function(id,title,subtitle,tstamp,ticket,status,venue,colors,favorite,url,link,tstamp2){
	// Opret eventen
	this.events[this.events.length]=new Event(id,title,subtitle,tstamp,ticket,status,venue,colors,favorite,url,link,tstamp2);
}

/**
 * expand
 *
 **********
 *
 * Udvidder listen ved klik på "Vis de næste x arrangementer".
 */
Calendar.prototype.expand=function(){
	// Preloades der?
	if(this.preloading){
		// Så venter vi til "onPreloaded" køres
		this.onPreloaded=function(){cal.expand();}

		// Angiv status for systemet
		var status=document.getElementById('calendar_expand_link');		// Indlæs en reference til status-linjen
		var icon=status.getElementsByTagName('img')[0];					// Indlæs en reference til ikonet
		var label=status.getElementsByTagName('span')[0];				// Indlæs en reference til status-teksten

		// Vis load-ikonet
		icon.style.display='inline';									// Vis ikonet
		if(icon.src.indexOf('templates/view/da_DK/default/images/calendar/loader.gif')==-1) icon.src='templates/view/da_DK/default/images/calendar/loader.gif';	// Indlæs loader-ikonet
		icon.style.background='none';									// Skjul "fold ud"-ikonet

		// Opdater teksten
		label.style.paddingLeft='10px';									// Tilføj margen på teksten
		if(label.childNodes[0]) label.removeChild(label.childNodes[0]);	// Fjern den nuværende status-tekst
		label.appendChild(document.createTextNode('Indlæser...'));		// Indsæt den nye status-tekst

		// Ryd hukommelsen
		label=null; icon=null;
	
		// ... Og afbryder funktionen indtil videre
		return;
	}

	// Skjul preload-ikonet
	var icon=document.getElementById('calendar_expand_link').getElementsByTagName('img')[0];	// Indlæs en reference til ikonet
	icon.src='templates/view/da_DK/default/images/layout/blank.gif';							// Skjul loader-ikonet
	if(!isIE6) icon.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat -42px -121px';	// Vis "fold ud"-ikonet
	else icon.style.background='url(templates/view/da_DK/default/images/ie6/expand.gif)';	// Vis "fold ud"-ikonet

	// Indlæs højden før de næste events vises
	var h2=this.getHeight();

	// Vi skal vise de næste X events
	if(this.page){
		this.displayed+=Math.min(this.page,this.preloaded);	// Angiv at der nu vises X events mere
		this.preloaded-=Math.min(this.page,this.preloaded);	// Angiv at der nu er X preloadede events mindre (de er lige blevet vist)

	// Vi skal vise alle events
	}else{
		this.displayed+=this.preloaded;	// Angiv at der nu vises X events mere
		this.preloaded=0;				// Angiv at der nu er 0 preloadede events (de er lige blevet vist)
	}

	// Udvid containeren
	var h=this.getHeight()-h2; var c=this.list;
	new Effect(function(p){c.style.height=(h2+Math.round(h*p))+'px'; ie6Render(); if(p==1) c=null;},{ease:true,duration:0.5});

	// Opdater "Vis de næste X arrangementer", hvis der ikke er nok arrangementer til at fylde næste side
	var remaining=parseInt(this.remaining,10)+parseInt(this.preloaded,10);
	if(this.page>=remaining || this.page==0){
		// Indlæs antal arrangementer tilbage
		if(remaining>1) var txt='Vis de sidste '+remaining+' arrangementer';
		else if(remaining==1) var txt='Vis det sidste arrangement';
		else if(this.displayed>0) var txt='';
		else var txt='Der er ikke nogen matchende arrangementer...';

		// Opdater teksten
		var tmp=document.getElementById('calendar_expand_link').getElementsByTagName('span')[0];	// Indlæs en reference til teksten
		tmp.removeChild(tmp.childNodes[0]);				// Fjern den nuværende tekst
		tmp.appendChild(document.createTextNode(txt));	// Indsæt den rigtige tekst
		tmp=null;										// Ryd hukommelsen

		// Skjul evt. "fold ud"-pilen
		if(remaining<1){
			var tmp=document.getElementById('calendar_expand_link');	// Indlæs en reference til linket
			tmp.getElementsByTagName('img')[0].style.display='none';	// Fjern pilen
			tmp.getElementsByTagName('span')[0].style.paddingLeft='0';	// Fjern margen
			tmp.style.cursor='default';									// Indiker at knappen ikke længere er et link
		}
	}else if(remaining > 0){
		// Opdater teksten
		var tmp=document.getElementById('calendar_expand_link').getElementsByTagName('span')[0];	// Indlæs en reference til teksten
		tmp.removeChild(tmp.childNodes[0]);															// Fjern den nuværende tekst
		tmp.appendChild(document.createTextNode('Vis de næste '+this.page+' arrangementer'));		// Indsæt den rigtige tekst
		tmp=null;																					// Ryd hukommelsen
	}

	// Begynd at preloade nye events
	if(this.remaining>0) this.preload();
}

/**
 * getHeight
 *
 **********
 *
 * Udregner højden af de events, der vises.
 */
Calendar.prototype.getHeight=function(){
	// Gennemgå de viste rækker og udregn højden
	var i=Math.min(this.displayed,this.events.length); var j=i; var h=0;
	if(i>0)do{
		// Udregn højden
		h+=this.events[j-i].height;
	}while(--i);

	// Returner højden
	return h;
}

/**
 * showPage
 *
 **********
 *
 * Indlæser yderligere info om et event, når der klikkes på dette.
 *
 **********
 *
 * Parametre:
 * id (int)								Angiver ID'et på det event, der prøver at vises.
 */
Calendar.prototype.showPage=function(id){
	// Tjek om denne side stadig skal vises
	if(id!=this.preloadingID) return;

	// Udregn placeringen af kalenderen (så vi kan scrolle til toppen)
	var tmp=document.getElementById('calendar'); var y=-30;
	while(tmp){y+=tmp.offsetTop; tmp=tmp.offsetParent;}
	tmp=0;

	// Udregn hvor brugeren er scrollet til pt.
	var y2=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;

	// Scroll op!
	if(y2>y+60){
		var t=0.75;
		new Effect(function(p){window.scrollTo(0,Math.round(y2-(y2-y)*p));},{duration:0.75,ease:true});
	}else
		var t=0;

	// Udregn højden på info-boksen
	var h=this.page_container.offsetHeight-142;
	var h2=this.getHeight();

	// Slide listen op, så den matcher højden på info-siden
	var t2=0.75;
	cal.fullyDisplayed = false;
	setTimeout(function(){new Effect(function(p){cal.list.style.height=Math.round(h2+(h-h2)*p)+'px'; ie6Render();},{duration:t2,ease:true}); setTimeout(function(){cal.fullyDisplayed = true;}, t2*1000);},t*500);

	// Slide siden ind
	setTimeout(function(){new Effect(function(p){cal.container.style.left=Math.round(-510*p)+'px'; cal.page_container.style.left=Math.round(510-510*p)+'px';},{duration:0.65,ease:true});},Math.max(t*500,t2*1000));

	// Registrer at der vises en side
	this.showingPage=this.events[id].id;
	this.eventID=id;
	this.preloadingID=null;

	// Håndter hash-address
	window.location.hash="event="+this.events[id].id;

	// Preload kommentarer
	this.preloadComments(this.showingPage);

	// Ryd fritekstsøgning
	if(this.q){
		document.getElementById('calendar_search_q').value='';
		this.search();
		document.getElementById('calendar_search_q').value='Søg i arrangementer';
	}
}

/**
 * hidePage
 *
 **********
 *
 * Skjuler yderligere info om et event, når dette lukkes.
 */
Calendar.prototype.hidePage=function(id){
	// Afbryd billede-fade
	if(this.imageTimer) clearInterval(this.imageTimer);

	// Slide siden ud
	new Effect(function(p){cal.container.style.left=Math.round(-510+510*p)+'px'; cal.page_container.style.left=Math.round(510*p)+'px';},{duration:0.65,ease:true});

	// Udregn højden på info-boksen
	var h=this.getHeight();
	var h2=this.page_container.offsetHeight-142;

	// Slide listen op, så den matcher højden på info-siden
	var t=Math.max(0.25,Math.abs(h-h2)/700);
	setTimeout(function(){new Effect(function(p){cal.list.style.height=Math.round(h2+(h-h2)*p)+'px'; ie6Render(); if(p==1){document.getElementById('calendar_comments').style.display='none'; document.getElementById('calendar_page_image').src='templates/view/da_DK/default/images/layout/blank.gif'; document.getElementById('calendar_page_image_fader').src='templates/view/da_DK/default/images/layout/blank.gif';}},{duration:t,ease:true});},300);

	// Registrer at der ikke længere vises en side
	this.showingPage=false;

	// Angiv at siden lukkes
	window.location.hash='collapse';

	// Ryd cookie-info
	var ts=new Date();
	ts.setTime(ts.getTime()-10000000);
	document.cookie="calendar_active=; expires="+ts.toGMTString();
}

/**
 * handleImages
 *
 **********
 *
 * Håndterer listen over billeder, der skal vises.
 *
 **********
 *
 * Parametre:
 * images (array)						Angiv listen over billeder.
 */
Calendar.prototype.handleImages=function(images){
	// Gem listen over billeder
	this.images=images;
	this.imageIndex=0;

	// Afbryd igangværende fading
	clearTimeout(this.imageTimer);
	this.fadeActive=false;

	if(document.all) document.getElementById('calendar_page_image_fader').style.filter='alpha(opacity=0)';
	else document.getElementById('calendar_page_image_fader').style.opacity=0;

	// Vis det første billede
	if(this.images[0]) document.getElementById('calendar_page_image').src='/docs/media/events/'+this.images[0]+'.jpg';
	else document.getElementById('calendar_page_image').src='/templates/view/da_DK/default/images/layout/blank.gif';

	// Preload billederne
	var j=this.images.length; var i=j-1; var tmp=[];
	if(i>0)do{
		tmp[j-i]=new Image();
		tmp[j-i].src='/docs/media/events/'+this.images[0]+'.jpg';
	}while(--i);

	// Fade hvert 10. sekund
	if(this.images.length>1) this.imageTimer=setInterval(function(){cal.nextImage();},10000);
}

/**
 * nextImage
 *
 **********
 *
 * Viser det næste billede i rækken.
 */
Calendar.prototype.nextImage=function(){
	// Opdater index
	this.imageIndex++;
	if(this.imageIndex>=this.images.length) this.imageIndex=0;

	// Klargør fade
	var tmp=document.getElementById('calendar_page_image_fader');
	tmp.style.backgroundImage='url(/docs/media/events/'+this.images[this.imageIndex]+'.jpg)';
	if(document.all) tmp.style.filter='alpha(opacity=0)';
	else tmp.style.opacity=0;

	// Fade det næste billede ind
	this.fadeActive=true; var t=this;
	new Effect(function(p){if(t.fadeActive){if(document.all) tmp.style.filter='alpha(opacity='+(p*100)+')'; else tmp.style.opacity=p;} if(p==1){tmp=null; if(t.fadeActive) document.getElementById('calendar_page_image').src='/docs/media/events/'+cal.images[cal.imageIndex]+'.jpg'; t=null;}},{duration:0.5});
}

/**
 * handleFavorite
 *
 **********
 *
 * Håndterer favorit-status på arrangementer i kalenderen.
 */
Calendar.prototype.handleFavorite=function(){
	// Indlæs en reference til det aktive event
	if(!this.eventID){
		var i=this.events.length; var j=i;
		if(i>0)do{
			if(this.events[j-i].id==this.showingPage){
				this.eventID=j-i;
				break;
			}
		}while(--i);
	}

	// Håndter favorit-status
	handleFavorite(document.getElementById('calendar_page_favorite'),'event',this.showingPage);

	// Opdater listevisningen
	if(String(typeof this.eventID).toLowerCase()=='number'){
		// Opdater visningen
		var className=this.events[this.eventID].favoriteIcon.className.split('_');
		className[1]=document.getElementById('calendar_page_favorite').className.split('_')[1];
		this.events[this.eventID].favoriteIcon.className=className.join('_');

		// Opdater status
		this.events[this.eventID].favorite=this.events[this.eventID].favorite?false:true;
	}
}

/**
 * preloadComments
 *
 **********
 *
 * Preload loge anmeldelser af et arrangement.
 *
 **********
 *
 * Parametre:
 * eventID (int)						Angiv det interne ID på arrangementet.
 */
Calendar.prototype.preloadComments=function(eventID){
	// Klargør et AJAX-objekt (tag højde for browser-forskelle)
	var ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

	// Klargør modtagning af informationerne
	ajax.onreadystatechange=
	function(){
		// Tjek om hele status er modtaget
		if(ajax.readyState==4 && ajax.status==200){
			// Skal data vises?
			if(eventID==cal.showingPage) {
				document.getElementById('calendar_comments').innerHTML=ajax.responseText;
				cal.showComments();
			}

			// Ryd hukommelsen
			ajax=null;
		}
	}

	// Send forespørgslen til serveren
	ajax.open("GET",document.getElementsByTagName('base')[0].href+"ajax/view/event_comments.php?id="+eventID,true);
	ajax.send(null);
}

/**
 * showComments
 *
 **********
 *
 * Slider kommentarerne ind.
 */
Calendar.prototype.showComments=function(){
	// Denne funktion kan kun køres, hvis der er nogen kommentarer at vise!
	//if(!this.eventID) return;
	if (!cal.fullyDisplayed) {
		setTimeout(function() { cal.showComments(); }, 50);
		return;
	}

	// Indlæs en reference til containeren
	var tmp=document.getElementById('calendar_comments');

	// Udregn højden på containeren
	tmp.style.display='block';
	var h=tmp.offsetHeight;

	// Slide ned og vis kommentarerne
	var h2=this.list.offsetHeight;
	new Effect(function(p){cal.list.style.height=Math.round(h2+(h*p))+'px'; ie6Render();},{duration:0.5,ease:true});

	// Skjul "Vis kommentarer"-linket
	document.getElementById('calendar_comments_expand_link').innerHTML='';

	// Ryd hukommelsen
	tmp=null;
}

/**
 * postComment
 *
 **********
 *
 * Preload loge anmeldelser af et arrangement.
 *
 **********
 *
 * Parametre:
 * eventID (int)						Angiv det interne ID på arrangementet.
 */
Calendar.prototype.postComment=function(eventID){
	// Tjek om brugeren er logget på
	if (!vega_user_logged_in) {
		ApisFacebook.authorize('modules/view/calendar/ajax/facebook_connect.php');
		return;
	}

	// Klargør et AJAX-objekt (tag højde for browser-forskelle)
	var ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

	// Klargør modtagning af informationerne
	ajax.onreadystatechange=
	function(){
		// Tjek om hele status er modtaget
		if(ajax.readyState==4 && ajax.status==200){
			// Skal data vises?
			if(eventID==cal.showingPage) {
				// Udregn den nuværende højde af kommentarerne
				var h = document.getElementById('calendar_comments').offsetHeight;

				// Opdater kommentarerne
				document.getElementById('calendar_comments').innerHTML=ajax.responseText;
				var h = document.getElementById('calendar_comments').offsetHeight - h;
				
				// Slide ned og vis kommentarerne
				var h2=cal.list.offsetHeight;
				new Effect(function(p){cal.list.style.height=Math.round(h2+(h*p))+'px'; ie6Render();},{duration:0.5,ease:true});
			}

			// Ryd hukommelsen
			ajax=null;
		}
	}

	if (!document.getElementById('calendar_new_comment_review').value || document.getElementById('calendar_new_comment_review').value === 'Skriv kommentar her...') {
		alert('Du skal skrive en kommentar!');
		return;
	}

	// Klargør params
 	var params = "title=" + encodeURIComponent(document.getElementById('calendar_new_comment_title').value) + "&review=" + encodeURIComponent(document.getElementById('calendar_new_comment_review').value) +"&facebook=" + encodeURIComponent(((document.getElementById('calendar_new_comment_post_to_facebook') && document.getElementById('calendar_new_comment_post_to_facebook').checked) ? '1' : '0'));

	// Send forespørgslen til serveren
	ajax.open("POST",document.getElementsByTagName('base')[0].href+"ajax/view/event_comments_post.php?id="+eventID+"&rand="+(+new Date),true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", params.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(params);

	// Dim knappen
	document.getElementById('calendar_new_comment_button').style.opacity = 0.5;
	document.getElementById('calendar_new_comment_button').style.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=50)';
}

/**
 * deleteComment
 *
 **********
 *
 * Preload loge anmeldelser af et arrangement.
 *
 **********
 *
 * Parametre:
 * eventID (int)						Angiv det interne ID på arrangementet.
 */
Calendar.prototype.deleteComment=function(eventID,commentID){
	// Klargør et AJAX-objekt (tag højde for browser-forskelle)
	var ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

	// Klargør modtagning af informationerne
	ajax.onreadystatechange=
	function(){
		// Tjek om hele status er modtaget
		if(ajax.readyState==4 && ajax.status==200){
			// Skal data vises?
			if(eventID==cal.showingPage) {
				// Udregn den nuværende højde af kommentarerne
				var h = document.getElementById('calendar_comments').offsetHeight;

				// Opdater kommentarerne
				document.getElementById('calendar_comments').innerHTML=ajax.responseText;
				var h = h - document.getElementById('calendar_comments').offsetHeight;
				
				// Slide ned og vis kommentarerne
				var h2=cal.list.offsetHeight;
				cal.list.style.height = (h2 - h) + 'px';
			}

			// Ryd hukommelsen
			ajax=null;
		}
	}

	// Send forespørgslen til serveren
	ajax.open("GET",document.getElementsByTagName('base')[0].href+"ajax/view/delete_comment.php?id="+eventID+"&comment_id="+commentID+"&rand="+(+new Date),true);
	ajax.send(null);
}

/**
 * Event
 *
 *********
 *
 * Håndterer informationer om et event.
 *
 **********
 *
 * Parametre:
 * id (int)								ID'et på eventet.
 * title (string)						Titlen på eventet.
 * subtitle (string)					Evt. subtitel på eventet.
 * tstamp (int)							Timestamp/dato for eventet.
 * ticket (int)							Billet-status for eventet (0-2, se Calendar).
 * status (int)							Status for eventet (0-1, se Calendar).
 * venue (int)							ID på venue for eventet.
 * colors (int)							Farvekoder for eventet.
 * favorite (boolean)					Angiver om arrangementet er markeret som favorit.
 * url (string)							URL'en til arrangementet.
 * link (string)						Linket til køb billet.
 */
function Event(id,title,subtitle,tstamp,ticket,status,venue,colors,favorite,url,ticket_link,tstamp2){
	// Indlæs indstillinger
	this.eventID=cal.events.length;									// Indlæs det interne event-ID
	this.status=0;													// Data om eventet er ikke preloadet
	this.id=id;														// Gem eksetern event-ID
	this.title=title;												// Gem titlen
	this.subtitle=subtitle;											// Gem subtitlen
	this.ticket=ticket;												// Gem billetstatus
	this.eventStatus=status;										// Gem status
	this.venue=venue;												// Gem venue ID
	this.colors=colors;												// Gem info om farvekoder
	this.date=new Date(); this.date.setTime(tstamp*1000);			// Gem datoen for eventet
	this.favorite=favorite?true:false;								// Gem favorit-status for eventet
	this.comments='';												// Gem kommentarer
	this.url=url;													// Gem URL
	this.ticket_link=ticket_link;									// Gem Link

	// Håndter server-dato
	var tmpDate = tstamp2.split('-');
	this.date_day = tmpDate[0];
	this.date_month = tmpDate[1];
	this.date_year = tmpDate[2];
	this.date_dow = tmpDate[3];

	// Beskyt mod timezone forskelle!
	this.date.setTime(this.date.getTime() + (this.date.getTimezoneOffset() + 1)*60000);

	// Opret et element til eventet
	var container=document.createElement('a');						// Opret et element til eventet
	container.href='javascript:;';									// Håndter klik (vis eventet)
	if((this.eventID%2)) container.style.backgroundColor='#d7d7d7';	// Håndter skiftende baggrundsfarve
	container.handler=this;											// Tilføj en reference til denne klasse

	// Indsæt en seperator øverst i hver linje
	var separator=document.createElement('img');					// Opret et element til seperatoren
	separator.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	separator.style.display='block'; separator.style.width='510px'; separator.style.height='1px';	// Indlæs størrelsen for seperatoren
	separator.style.background='url(templates/view/da_DK/default/images/calendar/events.png) repeat-x';			// Indlæs seperator-billedet
	container.appendChild(separator); separator=null;				// Tilføj seperatoren

	// Tilføj venue-indikator
	var venueColor=document.createElement('img');					// Opret et element til venue-indikatoren
	venueColor.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	venueColor.style.styleFloat='left'; venueColor.style.cssFloat='left'; venueColor.style.width='3px'; venueColor.style.height='0';	// Indlæs størrelsen for venue-indikatoren
	venueColor.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat 0 -1000px '+colors.split(',')[0];	// Indlæs den mørke farvekode
	container.appendChild(venueColor);								// Tilføj venue-indikatoren

	var venueColor2=document.createElement('img');					// Opret et element til venue-indikatoren
	venueColor2.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	venueColor2.style.styleFloat='left'; venueColor2.style.cssFloat='left'; venueColor2.style.width='2px'; venueColor.style.height='0';	// Indlæs størrelsen for venue-indikatoren
	venueColor2.style.marginRight='10px';							// Tilføj den rette margen efter indikatoren
	venueColor2.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat 0 -1000px '+colors.split(',')[1];	// Indlæs den mørke farvekode
	container.appendChild(venueColor2);								// Tilføj venue-indikatoren

	// Indsæt datoen for eventet
	var dateIcon=document.createElement('img');								// Opret et element til datoen
	dateIcon.src='templates/view/da_DK/default/images/layout/blank.gif';	// Klargør datoen
	dateIcon.style.styleFloat='left'; dateIcon.style.cssFloat='left'; dateIcon.style.width='21px'; dateIcon.style.height='20px';			// Indlæs størrelsen for datoen
	dateIcon.style.marginTop='10px'; dateIcon.style.padding='0';			// Tilføj korrekt margen
	dateIcon.style.background='url(templates/view/da_DK/default/images/elements/dates.png) no-repeat 0 '+(parseInt(this.date_day,10)*-20+20)+'px';// Indlæs baggrundsbilledet
	container.appendChild(dateIcon); dateIcon=null;							// Vis datoen

	// Indsæt måneden for eventet
	var dateIcon=document.createElement('img');								// Opret et element til datoen
	dateIcon.src='templates/view/da_DK/default/images/layout/blank.gif';	// Klargør datoen
	dateIcon.style.styleFloat='left'; dateIcon.style.cssFloat='left'; dateIcon.style.width='30px'; dateIcon.style.height='20px';			// Indlæs størrelsen for datoen
	dateIcon.style.marginTop='10px'; dateIcon.style.padding='0';			// Tilføj korrekt margen
	dateIcon.style.background='url(templates/view/da_DK/default/images/elements/dates.png) no-repeat -21px '+(parseInt(this.date_month,10)*-20)+'px';	// Indlæs baggrundsbilledet
	container.appendChild(dateIcon); dateIcon=null;							// Vis datoen

	// Indsæt beskrivelsen af eventet
	var b=document.createElement('b');								// Opret et element til beskrivelsen
	var tmp=title.split('(').join('<span style="font-weight:normal;">(').split(')').join(')</span>');	// Indsæt titlen i beskrivelsen

	// Indsæt evt. subtitlen i beskrivelsen
	if(subtitle){
		// Tjek om der skal fremhæves en del af subtitlen
		var x=subtitle.indexOf(':');

		// Tilføj subtitlen
		if(x==-1) tmp+='<span style="display:block; margin-top:5px; font:12px/1em \'times new roman\',serif;">'+subtitle+'</span>';
		else tmp+='<span style="display:block; margin-top:5px; font:12px/1em \'times new roman\',serif;"><span style="font-weight:bold;">'+subtitle.substr(0,x+1)+'</span>'+subtitle.substr(x+1,subtitle.length)+'</span>';
	}

	b.innerHTML=tmp;												// Indsæt beskrivelsen i elementet
	container.appendChild(b); b=null;								// Tilføj til eventet

	// Tilføj status-ikon
	var statusIcon=document.createElement('img');					// Opret billede-elementet
	statusIcon.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	statusIcon.style.styleFloat='left'; statusIcon.style.cssFloat='left'; statusIcon.style.width='68px'; statusIcon.style.height=cal.status[status].height+'px'; // Indlæs størrelsen af ikonet
	statusIcon.style.margin='10px 10px 0 0';				// Tilføj den rette margen omkring ikonet
	if(cal.status[status].img){
		if(!isIE6) statusIcon.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat '+cal.status[status].center+' '+cal.status[status].img;	// Indlæs status som billede
		else statusIcon.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+cal.status[status].ie6+'",sizingMethod="crop")';//'url(templates/view/da_DK/default/images/calendar/events.png) no-repeat '+cal.status[status].center+' '+cal.status[status].img;	// Indlæs status som billede
	}
	statusIcon.alt=cal.status[status].txt;		  					// Indlæs status som tekst
	statusIcon.title='';						  					// Der skal ikke være noget 'tooltip'
	container.appendChild(statusIcon); statusIcon=null; 			// Tilføj til eventet

	// Tilføj favorit-ikon
	var favoriteIcon=document.createElement('img');								// Opret billede-elementet
	favoriteIcon.rel=this.id; favoriteIcon.eventHandler=this;							// Relater favorit-linket til koncerten
	favoriteIcon.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	favoriteIcon.className='favorite_'+(!favorite?'add':'remove')+'_calendar';	// Indlæs CSS
	favoriteIcon.style.margin='10px 10px 0 0';									// Tilføj den rette margen omkring ikonet
	favoriteIcon.alt='Tilføj til favoritter';		  							// Indlæs som tekst
	favoriteIcon.title='';						  								// Der skal ikke være noget 'tooltip'
	container.appendChild(favoriteIcon);					 					// Tilføj til eventet
	this.favoriteIcon=favoriteIcon;

	if(document.attachEvent) favoriteIcon.attachEvent('onclick',function(e){var e=e||window.event; var src=e.srcElement||e.target; handleFavorite(src,'event',src.rel); src.eventHandler.favorite=src.eventHandler.favorite?false:true; stopEvent(e); src=null; e=null;});
	else favoriteIcon.addEventListener('click',function(e){var e=e||window.event; var src=e.srcElement||e.target; handleFavorite(src,'event',src.rel); src.eventHandler.favorite=src.eventHandler.favorite?false:true; stopEvent(e); src=null; e=null;},false);
	favoriteIcon=null;

	// Tilføj billet-ikon
	var ticketIcon=document.createElement('img');					// Opret billede-elementet
	ticketIcon.link=this.ticket_link;								// Gem link til billetkøb
	ticketIcon.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	ticketIcon.style.styleFloat='left'; ticketIcon.style.cssFloat='left'; ticketIcon.style.width='62px'; ticketIcon.style.height='20px'; // Indlæs størrelsen af ikonet
	ticketIcon.style.margin='10px 20px 0 0';						// Tilføj den rette margen omkring ikonet
	if(!isIE6) ticketIcon.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat 0 '+cal.tickets[ticket].img;	// Indlæs status som billede
	else ticketIcon.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+cal.tickets[ticket].ie6+'",sizingMethod="crop")';
	ticketIcon.alt=cal.tickets[ticket].txt;		  					// Indlæs status som tekst
	ticketIcon.title='';						  					// Der skal ikke være noget 'tooltip'
	container.appendChild(ticketIcon);					 			// Tilføj til eventet

	// Tilføj en "fold ud"-pil
	var arrow=document.createElement('img');						// Opret billede-elementet
	arrow.src='templates/view/da_DK/default/images/layout/blank.gif';	// Indlæs en blank gif
	arrow.style.styleFloat='left'; arrow.style.cssFloat='left'; arrow.style.width='23px'; arrow.style.height='23px'; // Indlæs størrelsen af pilen
	arrow.style.marginTop='8px';									// Tilføj den rette margen omkring ikonet
	if(!isIE6) arrow.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat 0 -121px';	// Indlæs pilen
	else{
		arrow.style.background='none';
		arrow.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+'templates/view/da_DK/default/images/ie6/calendar_arrow.png",sizingMethod="crop")';
	}
	container.appendChild(arrow); arrow=null; 						// Tilføj til eventet

	// Tilføj en "clear"
	var clear=document.createElement('div');						// Opret et clear-element
	clear.style.clear="both";										// Clear float-elementer
	clear.style.height="0";											// Dette element må ikke fylde noget
	clear.style.font="0/0 serif";									// ... Heller ikke i IE
	container.appendChild(clear); clear=null;						// Tilføj til eventet

	// Tilføj hover-effekt til eventen
	if(container.attachEvent){
		container.attachEvent('onmouseover',Event.prototype.over);
		container.attachEvent('onmouseout',Event.prototype.out);
		if(this.ticket!=3 && this.ticket_link) ticketIcon.attachEvent('onclick',function(e){var e=e||window.event; var src=e.srcElement||e.target; window.open(src.link); stopEvent(e);});
		container.attachEvent('onclick',function(e){var e=e||window.event; var src=e.srcElement||e.target; while(src&&!src.handler){src=src.parentNode;} src.handler.preload(); src=null; e=null;});
	}else{
		container.addEventListener('mouseover',Event.prototype.over,false);
		container.addEventListener('mouseout',Event.prototype.out,false);
		if(this.ticket!=3 && this.ticket_link) ticketIcon.addEventListener('click',function(e){var e=e||window.event; var src=e.srcElement||e.target; window.open(src.link); stopEvent(e);},false);
		container.addEventListener('click',function(e){var e=e||window.event; var src=e.srcElement||e.target; while(src&&!src.handler){src=src.parentNode;} src.handler.preload(); src=null; e=null;},false);
	}
	ticketIcon=null;

	// Indsæt eventet i kalenderen
	cal.list.appendChild(container);								// Tilføj til kalenderen
	this.container=container; container=null;						// Gem en reference til eventen

	// Indlæs højden på eventet
	this.height=this.container.offsetHeight;						// Gem højden til brug ved udviddelse af listen
	venueColor.style.height=(this.height-1)+'px'; venueColor=null;	// Opdater højden på venue-indikatoren
	venueColor2.style.height=(this.height-1)+'px'; venueColor2=null;	// Opdater højden på venue-indikatoren
}

/**
 * over
 *
 **********
 *
 * Håndterer hover-effekten på arrangementerne, når musen føres over et arrangement.
 *
 **********
 *
 * Parametre:
 * e (eventinfo)						Indeholder informationerne om brugerens inputs.
 */
Event.prototype.over=function(e){
	// Indlæs brugerens inputs
	var e=e||window.event;							// Indlæs inputs
	var src=e.srcElement||e.target;					// Indlæs en reference til det arrangement, som musen føres over
	while(src&&!src.handler){src=src.parentNode;}	// ----- || -----
	var tmp=src.getElementsByTagName('img');		// Indlæs listen over elementer i arrangementet

	// Tilføj hover-effekten til elementet
	if(!isIE6){
		src.style.background='url(templates/view/da_DK/default/images/calendar/events.png) repeat-x 0 -143px '+src.handler.colors.split(',')[0];
		src.style.color='#ffffff';

		// Tilføj hover-effekten til venue-indikatoren
		tmp[1].style.backgroundPosition='0 -144px';
		tmp[2].style.backgroundPosition='0 -144px';
	}else{
		src.style.background=src.handler.colors.split(',')[0];
		src.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+'templates/view/da_DK/default/images/ie6/event_bg_repeat.png",sizingMethod="scale")';
		src.style.color='#ffffff';

		// Tilføj hover-effekten til venue-indikatoren
		tmp[1].style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+'templates/view/da_DK/default/images/ie6/event_bg_repeat.png",sizingMethod="scale")';
		tmp[2].style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+'templates/view/da_DK/default/images/ie6/event_bg_repeat.png",sizingMethod="scale")';
	}

	// Tilføj hover-effekten til status-ikoner
	if(!isIE6){
		if(cal.status[src.handler.eventStatus].hover) tmp[5].style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat '+cal.status[src.handler.eventStatus].center+' '+cal.status[src.handler.eventStatus].hover;
		tmp[6].className=tmp[6].className.split('_calendar').join('_calendar_hover');
		tmp[7].style.backgroundPosition='0 '+cal.tickets[src.handler.ticket].hover;
		tmp[8].style.backgroundPosition='0 -420px';
	}else{
		tmp[8].style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+'templates/view/da_DK/default/images/ie6/calendar_arrow_active.png",sizingMethod="crop")';
	}

	// Ryd hukommelsen
	tmp=null; src=null; e=null;
}

/**
 * out
 *
 **********
 *
 * Håndterer hover-effekten på arrangementerne, når musen fjernes fra et arrangement.
 *
 **********
 *
 * Parametre:
 * e (eventinfo)						Indeholder informationerne om brugerens inputs.
 */
Event.prototype.out=function(e){
	// Indlæs brugerens inputs
	var e=e||window.event;							// Indlæs inputs
	var src=e.srcElement||e.target;					// Indlæs en reference til det arrangement, som musen føres over
	while(src&&!src.handler){src=src.parentNode;}	// ----- || -----
	var tmp=src.getElementsByTagName('img');		// Indlæs listen over elementer i arrangementet

	// Fjern hover-effekten fra elementet
	if(!isIE6){
	 	src.style.background=(src.handler.eventID%2)?'#d7d7d7':'transparent';
		src.style.color='#373737';

		// Fjern hover-effekten fra venue-indikatoren
		tmp[1].style.backgroundPosition='0 -1000px';
		tmp[2].style.backgroundPosition='0 -1000px';
	}else{
	 	src.style.background=(src.handler.eventID%2)?'#d7d7d7':'transparent';
		src.style.filter='none';
		src.style.color='#373737';

		// Fjern hover-effekten fra venue-indikatoren
		tmp[1].style.filter='none';
		tmp[2].style.filter='none';
	}

	// Fjern hover-effekten fra status-ikoner
	if(!isIE6){
		if(cal.status[src.handler.eventStatus].img) tmp[5].style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat '+cal.status[src.handler.eventStatus].center+' '+cal.status[src.handler.eventStatus].img;
		tmp[6].className=tmp[6].className.split('_calendar_hover').join('_calendar');
		tmp[7].style.backgroundPosition='0 '+cal.tickets[src.handler.ticket].img;
		tmp[8].style.backgroundPosition='0 -121px';
	}else{
		tmp[8].style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+document.getElementsByTagName('base')[0].href+'templates/view/da_DK/default/images/ie6/calendar_arrow.png",sizingMethod="crop")';
	}

	// Ryd hukommelsen
	tmp=null; src=null; e=null;
}

/**
 * preload
 *
 **********
 *
 * Preloader data om et event, og slider derefter eventet ind.
 */
Event.prototype.preload=function(){
	// Tjek om data allerede er preloadet?
	if(this.status==2){
		// Så parser vi data med det samme!
		cal.preloadingID=this.eventID; this.parse();
		return;

	// Er preloading i gang?
	}else if(this.status==1){
		// Så venter vi på den igangværende preloading
		return;
	}

	// Vis at der preloades
	var status=document.getElementById('calendar_expand_link');		// Indlæs en reference til status-linjen
	var icon=status.getElementsByTagName('img')[0];					// Indlæs en reference til ikonet
	var label=status.getElementsByTagName('span')[0];				// Indlæs en reference til status-teksten

	// Vis load-ikonet
	icon.style.display='inline';									// Vis ikonet
	if(icon.src.indexOf('templates/view/da_DK/default/images/calendar/loader.gif')==-1) icon.src='templates/view/da_DK/default/images/calendar/loader.gif';	// Indlæs loader-ikonet
	icon.style.background='none';									// Skjul "fold ud"-ikonet

	// Opdater teksten
	label.style.paddingLeft='10px';									// Tilføj margen på teksten
	label.tmpLabel=label.innerHTML;									// Indlæs den eksisterende status-tekst
	if(label.childNodes[0]) label.removeChild(label.childNodes[0]);	// Fjern den nuværende status-tekst
	label.appendChild(document.createTextNode('Indlæser...'));		// Indsæt den nye status-tekst	

	// Er der nogen aktive preloadinger? - Så afbryder vi disse
	if(cal.preloadingID && cal.events[cal.preloadingID]) cal.events[cal.preloadingID].abortPreload();
	cal.preloadingID=this.eventID;

	// Klargør et AJAX-objekt (tag højde for browser-forskelle)
	this.ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

	// Klargør modtagning af informationerne
	var t=this;
	this.ajax.onreadystatechange=
	function(){
		// Tjek om hele status er modtaget
		if(t.ajax.readyState==4 && t.ajax.status==200){
			// Parse XML-data
			t.parse(t.ajax.responseXML.documentElement);

			// Ryd hukommelsen
			t.status=2; t.ajax=null; t=null;
		}
	}

	// Send forespørgslen til serveren
	this.ajax.open("GET",document.getElementsByTagName('base')[0].href+"ajax/view/event.php?id="+this.id,true);
	this.ajax.send(null);
}

/**
 * abortPreload
 *
 **********
 *
 * Afslutter preloading af data, hvis brugeren ombestemmer sig.
 */
Event.prototype.abortPreload=function(){
	// Afbryd preloading!
	if(this.ajax) this.ajax.abort();
}

/**
 * parse
 *
 **********
 *
 * Parser data modtaget fra serveren vedr. eventet.
 */
Event.prototype.parse=function(responseXML){
	// Afslut preloading
	var status=document.getElementById('calendar_expand_link');				// Indlæs en reference til status-linjen
	var icon=status.getElementsByTagName('img')[0];							// Indlæs en reference til ikonet
	var label=status.getElementsByTagName('span')[0];						// Indlæs en reference til status-teksten

	// Vis load-ikonet
	icon.style.display=((cal.preloaded+cal.remaining)>0)?'inline':'none';	// Vis ikonet
	icon.src='templates/view/da_DK/default/images/layout/blank.gif';		// Indlæs loader-ikonet
	icon.style.background='url(templates/view/da_DK/default/images/calendar/events.png) no-repeat -42px -121px';	// Skjul "fold ud"-ikonet

	// Opdater teksten
	label.style.paddingLeft='10px';											// Tilføj margen på teksten
	label.innerHTML=label.tmpLabel;											// Opdater status-teksten

	// Indlæs data
	if(responseXML){
		try{this.venueName=responseXML.getElementsByTagName('venue')[0].firstChild.nodeValue;}catch(e){this.venueName='';}
		try{this.presale=responseXML.getElementsByTagName('presale')[0].firstChild.nodeValue;}catch(e){this.presale='';}
		try{this.entry=responseXML.getElementsByTagName('entry')[0].firstChild.nodeValue;}catch(e){this.entry='';}
		try{this.openhours=responseXML.getElementsByTagName('openhours')[0].firstChild.nodeValue;}catch(e){this.openhours='';}
		try{this.description=responseXML.getElementsByTagName('description')[0].firstChild.nodeValue;}catch(e){this.description='';}
		try{this.links=responseXML.getElementsByTagName('links')[0].firstChild.nodeValue;}catch(e){this.links='';}
		try{this.recommendations=responseXML.getElementsByTagName('recommendations')[0].firstChild.nodeValue;}catch(e){this.recommendations='';}
		try{this.twitterLikes=responseXML.getElementsByTagName('twitterlikes')[0].firstChild.nodeValue;}catch(e){this.twitterLikes='';}
		try{this.facebookLikes=responseXML.getElementsByTagName('facebooklikes')[0].firstChild.nodeValue;}catch(e){this.facebookLikes='';}
		try{this.ticket_status=responseXML.getElementsByTagName('ticket_status')[0].firstChild.nodeValue;}catch(e){this.ticket_status='';}
		try{this.ticket_link=responseXML.getElementsByTagName('ticket_link')[0].firstChild.nodeValue;}catch(e){this.ticket_link='';}
		try{this.ticket_button=responseXML.getElementsByTagName('ticket_button')[0].firstChild.nodeValue;}catch(e){this.ticket_button='';}
		try{this.images=responseXML.getElementsByTagName('images')[0].firstChild.nodeValue.split('\n');}catch(e){this.images=[];}
		try{this.commentCount=parseInt(responseXML.getElementsByTagName('comments')[0].firstChild.nodeValue,10);}catch(e){this.commentCount=0;}
	}

	// Opdater overskriften
	cal.page_container.getElementsByTagName('h1')[0].innerHTML="<span style=\"color:"+this.colors.split(',')[0]+";\">"+this.venueName+":</span> "+this.title;
	document.getElementById('calendar_page_subtitle').innerHTML=this.subtitle;

	// Opdater datoen
	document.getElementById('calendar_page_date').style.backgroundPosition='0 '+(parseInt(this.date_day,10)*-20+20)+'px';
	document.getElementById('calendar_page_month').style.backgroundPosition='-21px '+(parseInt(this.date_month,10)*-20)+'px';

	// Indlæs billederne
	cal.handleImages(this.images);

	// Opdater info-baren
	var html="<b style=\"text-transform:uppercase; color:"+this.colors.split(',')[0]+";\">"+this.venueName+":</b><br />";

	if(this.title.length<45) html+=this.title+"<br />";
	else html+=this.title.substr(0,43)+"...<br />";

	var d=parseInt(this.date_day,10); var m=parseInt(parseInt(this.date_month,10)+1,10);
	html+=this.date_dow+' d. '+((d<10)?'0'+d:d)+"."+((m<10)?'0'+m:m)+"."+this.date_year+"<br />";

	html+="<div class=\"separator\" style=\"margin:8px 0;\"></div>";

	if(this.presale) html+="<b>Forsalg:</b> "+this.presale+((this.presale.indexOf('kr')==-1)?" kr.":"")+((this.presale.indexOf('gebyr')==-1)?" + gebyr":"")+"<br />";
	if(this.entry) html+="<b>Entré:</b> "+this.entry+((this.entry.indexOf('kr')==-1)?" kr.":"")+"<br />";
	else html+="<b>Entré:</b> Gratis entré<br />";
	if(this.openhours) html+="<b>Tidspunkt:</b> "+((this.openhours.indexOf('kl')==-1)?"kl. ":"")+this.openhours+"<br />";

	document.getElementById('calendar_page_overview').innerHTML=html;

	// Indlæs beskrivelsen
	document.getElementById('calendar_page_description').innerHTML="<h2 style='display:none;'>Arrangementsbeskrivelse</h2>"+this.description;
	document.getElementById('calendar_page_links_content').innerHTML=this.links.split('class=\"calendar_link\"').join('class=\"calendar_link\" style=\"background-color:'+this.colors.split(',')[0]+'\"');
	if(this.links.replace('\n','').replace(' ', '')){
		document.getElementById('calendar_page_links_title').style.display = 'block';
		document.getElementById('calendar_page_recommendations_title').style.marginTop = '10px';
		document.getElementById('calendar_page_share_links_title').style.marginTop = '10px';
	}else {
		document.getElementById('calendar_page_links_title').style.display = 'none';
		document.getElementById('calendar_page_recommendations_title').style.marginTop = '0';
		document.getElementById('calendar_page_share_links_title').style.marginTop = '0';
	}

	document.getElementById('calendar_page_recommendations_content').innerHTML=this.recommendations.split('class=\"calendar_link\"').join('class=\"calendar_link\" style=\"background-color:'+this.colors.split(',')[0]+'\"');
	if(this.recommendations.replace('\n','').replace(' ', '')){
		document.getElementById('calendar_page_recommendations_title').style.display = 'block';
		document.getElementById('calendar_page_share_links_title').style.marginTop = '10px';
	}else {
		document.getElementById('calendar_page_recommendations_title').style.display = 'none';
	}

	// Klargør addthis-share-link
	try{
		document.getElementById('addthisShareEvent').share.url=this.url;
		document.getElementById('addthisShareEvent').share.title=this.title;
	    if (window.addthis){
	       window.addthis.ost = 0;
	       window.addthis.ready();
	    }
	}catch(e){}

	// Klargør facebook-share-link
	document.getElementById('facebookShareEvent').innerHTML = '<iframe src="http://www.facebook.com/plugins/like.php?href='+ encodeURIComponent(this.url) +'&layout=box_count&show_faces=true&width=55&action=like&colorscheme=light&height=65&locale=en_US" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:55px; height:65px;" allowTransparency="true"></iframe>';

	// Klargør twitter-share-link
	document.getElementById('twitterShareEvent').innerHTML = '<iframe title="Twitter For Websites: Tweet Button" style="width: 55px; height: 62px;" class="twitter-share-button twitter-count-vertical" src="http://platform0.twitter.com/widgets/tweet_button.html?_='+ (+new Date) +'&count=vertical&id=twitter_tweet_button_0&lang=en&original_referer='+ encodeURIComponent(window.location.href) +'&text='+encodeURIComponent(this.title)+'&url='+encodeURIComponent(this.url)+'&via=%23" allowtransparency="true" frameborder="0" scrolling="no"></iframe>';

	// Opdater links, så de åbner i et nyt faneblad
	var tmp=document.getElementById('calendar_page_links').getElementsByTagName('a'); var i=tmp.length; var j=i;
	if(i>0)do{tmp[j-i].target="_blank";}while(--i);
	tmp=null;

	// Indlæs billet-status
	document.getElementById('calendar_page_ticket_status').innerHTML=this.ticket_status;
	document.getElementById('calendar_page_ticket_link').href=this.ticket_link;
	document.getElementById('calendar_page_ticket_link2').href=this.ticket_link;

	// Indlæs billetknap
	var btn=document.getElementById('calendar_page_ticket_link').getElementsByTagName('img')[0].style;
	var btn2=document.getElementById('calendar_page_ticket_link2').getElementsByTagName('img')[0].style;
	if(this.ticket_button=='0'){
		btn.backgroundPosition='0 -100px'; btn.display='inline';
		btn2.backgroundPosition='0 -100px'; btn2.display='inline';
	}else if(this.ticket_button=='1'){
		btn.backgroundPosition='0 -160px'; btn.display='inline';
		btn2.backgroundPosition='0 -160px'; btn2.display='inline';
	}else{
		btn.backgroundPosition='0 0'; btn.display='none';
		btn2.backgroundPosition='0 0'; btn2.display='none';
	}

	// Udsolgt?
	if(this.ticket=='2'){
		document.getElementById('calendar_page_ticket_sold').style.display='block';
	}else{
		document.getElementById('calendar_page_ticket_sold').style.display='none';
	}

	// Opdater farve-indikatoren
	var color1=document.getElementById('calendar_page_color1');
	color1.style.backgroundColor=this.colors.split(',')[0];
	color1.style.height=color1.parentNode.offsetHeight+'px';
	color1=null;

	var color2=document.getElementById('calendar_page_color2');
	color2.style.backgroundColor=this.colors.split(',')[1];
	color2.style.height=color2.parentNode.offsetHeight+'px';
	color2=null;

	// Opdater favorit-status
	if(this.favorite){
		document.getElementById('calendar_page_favorite').className='favorite_remove';
		document.getElementById('calendar_page_favorite').innerHTML='Fjern fra favoritter';
	}else{
		document.getElementById('calendar_page_favorite').className='favorite_add';
		document.getElementById('calendar_page_favorite').innerHTML='Tilføj som favorit';
	}

	// Opdater antal kommentarer
	if(this.commentCount>0) document.getElementById('calendar_comments_expand_link').innerHTML='<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" /> <span>Vis kommentarer ('+this.commentCount+')</span>';
	else if (vega_user_logged_in) document.getElementById('calendar_comments_expand_link').innerHTML='<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" /> <span>Skriv en kommentar</span>';
	else document.getElementById('calendar_comments_expand_link').innerHTML='<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" /> <span>Vis kommentarer</span>';

	// Slide eventet ind!
	cal.showPage(this.eventID);

	// Registrer at eventet vises
	var ts=new Date();
	ts.setTime(ts.getTime()+5*60*1000);
	document.cookie="calendar_active="+this.id+"; expires="+ts.toGMTString();

	// Håndter links
	handleHashLinks();
}

/**
 * handleHash
 *
 **********
 *
 * Håndterer SWF-address links!
 */
function handleHash(){
	// Er systemet klargjort?
	try{var tmp=cal;}catch(e){var tmp=false;}

	// ... Ellers prøver vi igen om 50 ms
	if(!tmp){
		setTimeout(handleHash,50);
		return;
	}

	// Indlæs SWF-address
	var hash=window.location.hash.split('#').join('');

	// Er der valgt et event?
	if(hash.substr(0,6)=="event="){
		// Klargør et AJAX-objekt (tag højde for browser-forskelle)
		var ajax=(window.ActiveXObject)?new ActiveXObject('Microsoft.XMLHTTP'):new XMLHttpRequest();

		// Klargør modtagning af informationerne
		ajax.onreadystatechange=
		function(){
			// Tjek om hele status er modtaget
			if(ajax.readyState==4 && ajax.status==200){
				// Parse XML-data
				try{expandHashEvent(ajax.responseXML.documentElement);}catch(e){alert(e);}

				// Ryd hukommelsen
				ajax=null;
			}
		}

		// Send forespørgslen til serveren, og indlæs data om det valgte event
		ajax.open("GET",document.getElementsByTagName('base')[0].href+"ajax/view/event_active.php?id="+parseInt(hash.substr(6,hash.length),10),true);
		ajax.send(null);

	}	
}

/**
 * expandHashEvent
 *
 **********
 *
 * Viser event valgt via hash-adresse.
 *
 **********
 *
 * Parametre:
 * responseXML (xmlobject)				Indeholder informationer om det valgte event.
 */
function expandHashEvent(responseXML){
	// Indlæs data
	if(responseXML){
		try{var id=responseXML.getElementsByTagName('id')[0].firstChild.nodeValue;}catch(e){var id='';}
		try{var colors=responseXML.getElementsByTagName('colors')[0].firstChild.nodeValue;}catch(e){var colors='';}
		try{var date=new Date(); date.setTime(responseXML.getElementsByTagName('tstamp')[0].firstChild.nodeValue*1000);}catch(e){var date=new Date();}
		try{var date2=responseXML.getElementsByTagName('tstamp2')[0].firstChild.nodeValue;}catch(e){var date2='';}
		try{var title=responseXML.getElementsByTagName('title')[0].firstChild.nodeValue;}catch(e){var title='';}
		try{var subtitle=responseXML.getElementsByTagName('subtitle')[0].firstChild.nodeValue;}catch(e){var subtitle='';}
		try{var url=responseXML.getElementsByTagName('url')[0].firstChild.nodeValue;}catch(e){var url='';}
		try{var favorite=parseInt(responseXML.getElementsByTagName('favorite')[0].firstChild.nodeValue,10);}catch(e){var favorite=0;}
		try{var venueName=responseXML.getElementsByTagName('venue')[0].firstChild.nodeValue;}catch(e){var venueName='';}
		try{var presale=responseXML.getElementsByTagName('presale')[0].firstChild.nodeValue;}catch(e){var presale='';}
		try{var entry=responseXML.getElementsByTagName('entry')[0].firstChild.nodeValue;}catch(e){var entry='';}
		try{var openhours=responseXML.getElementsByTagName('openhours')[0].firstChild.nodeValue;}catch(e){var openhours='';}
		try{var description=responseXML.getElementsByTagName('description')[0].firstChild.nodeValue;}catch(e){var description='';}
		try{var links=responseXML.getElementsByTagName('links')[0].firstChild.nodeValue;}catch(e){var links='';}
		try{var recommendations=responseXML.getElementsByTagName('recommendations')[0].firstChild.nodeValue;}catch(e){var recommendations='';}
		try{var twitterLikes=responseXML.getElementsByTagName('twitterlikes')[0].firstChild.nodeValue;}catch(e){var twitterLikes='';}
		try{var facebookLikes=responseXML.getElementsByTagName('facebooklikes')[0].firstChild.nodeValue;}catch(e){var facebookLikes='';}
		try{var tickets=responseXML.getElementsByTagName('tickets')[0].firstChild.nodeValue;}catch(e){var tickets='';}
		try{var ticket_status=responseXML.getElementsByTagName('ticket_status')[0].firstChild.nodeValue;}catch(e){var ticket_status='';}
		try{var ticket_link=responseXML.getElementsByTagName('ticket_link')[0].firstChild.nodeValue;}catch(e){var ticket_link='';}
		try{var ticket_button=responseXML.getElementsByTagName('ticket_button')[0].firstChild.nodeValue;}catch(e){var ticket_button='';}
		try{var images=responseXML.getElementsByTagName('images')[0].firstChild.nodeValue.split('\n');}catch(e){var images=[];}
		try{var commentCount=parseInt(responseXML.getElementsByTagName('comments')[0].firstChild.nodeValue,10);}catch(e){var commentCount=0;}
	}

	// Beskyt mod timezone forskelle!
	date.setTime(date.getTime() + (date.getTimezoneOffset() + 1)*60000);

	// Formater dato
	var tmpDate = date2.split('-');
	var date_day = tmpDate[0];
	var date_month = tmpDate[1];
	var date_year = tmpDate[2];
	var date_dow = tmpDate[3];

	// Opdater overskriften
	cal.page_container.getElementsByTagName('h1')[0].innerHTML="<span style=\"color:"+colors.split(',')[0]+";\">"+venueName+":</span> "+title;
	document.getElementById('calendar_page_subtitle').innerHTML=subtitle;

	// Opdater datoen
	document.getElementById('calendar_page_date').style.backgroundPosition='0 '+(parseInt(date_day,10)*-20+20)+'px';
	document.getElementById('calendar_page_month').style.backgroundPosition='-21px '+(parseInt(date_month,10)*-20)+'px';

	// Indlæs billederne
	cal.handleImages(images);

	// Opdater info-baren
	var html="<b style=\"text-transform:uppercase; color:"+colors.split(',')[0]+";\">"+venueName+":</b><br />";

	if(title.length<45) html+=title+"<br />";
	else html+=title.substr(0,43)+"...<br />";

	var d=parseInt(date_day,10); var m=parseInt(parseInt(date_month,10)+1,10);
	html+=date_dow+' d. '+((d<10)?'0'+d:d)+"."+((m<10)?'0'+m:m)+"."+date_year+"<br />";

	html+="<div class=\"separator\" style=\"margin:8px 0;\"></div>";

	if(presale) html+="<b>Forsalg:</b> "+presale+((presale.indexOf('kr')==-1)?" kr.":"")+((presale.indexOf('gebyr')==-1)?" + gebyr":"")+"<br />";
	if(entry) html+="<b>Entré:</b> "+entry+((entry.indexOf('kr')==-1)?" kr.":"")+"<br />";
	else html+="<b>Entré:</b> Gratis entré<br />";
	if(openhours) html+="<b>Tidspunkt:</b> "+((openhours.indexOf('kl')==-1)?"kl. ":"")+openhours+"<br />";

	document.getElementById('calendar_page_overview').innerHTML=html;

	// Indlæs beskrivelsen
	document.getElementById('calendar_page_description').innerHTML="<h2 style='display:none;'>Arrangementsbeskrivelse</h2>"+description;
	document.getElementById('calendar_page_links_content').innerHTML=links.split('class=\"calendar_link\"').join('class=\"calendar_link\" style=\"background-color:'+colors.split(',')[0]+'\"');
	if(links.replace('\n','').replace(' ', '')){
		document.getElementById('calendar_page_links_title').style.display = 'block';
		document.getElementById('calendar_page_recommendations_title').style.marginTop = '10px';
		document.getElementById('calendar_page_share_links_title').style.marginTop = '10px';
	}else {
		document.getElementById('calendar_page_links_title').style.display = 'none';
		document.getElementById('calendar_page_recommendations_title').style.marginTop = '0';
		document.getElementById('calendar_page_share_links_title').style.marginTop = '0';
	}

	document.getElementById('calendar_page_recommendations_content').innerHTML=recommendations.split('class=\"calendar_link\"').join('class=\"calendar_link\" style=\"background-color:'+colors.split(',')[0]+'\"');
	if(recommendations.replace('\n','').replace(' ', '')){
		document.getElementById('calendar_page_recommendations_title').style.display = 'block';
		document.getElementById('calendar_page_share_links_title').style.marginTop = '10px';
	}else {
		document.getElementById('calendar_page_recommendations_title').style.display = 'none';
	}

	// Klargør addthis-share-link
	try{
		document.getElementById('addthisShareEvent').share.url=url;
		document.getElementById('addthisShareEvent').share.title=title;
	    if (window.addthis){
	       window.addthis.ost = 0;
	       window.addthis.ready();
	    }
	}catch(e){}

	// Klargør facebook-share-link
	document.getElementById('facebookShareEvent').innerHTML = '<iframe src="http://www.facebook.com/plugins/like.php?href='+ encodeURIComponent(url) +'&layout=box_count&show_faces=true&width=55&action=like&colorscheme=light&height=65&locale=en_US" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:55px; height:65px;" allowTransparency="true"></iframe>';

	// Klargør twitter-share-link
	document.getElementById('twitterShareEvent').innerHTML = '<iframe title="Twitter For Websites: Tweet Button" style="width: 55px; height: 62px;" class="twitter-share-button twitter-count-vertical" src="http://platform0.twitter.com/widgets/tweet_button.html?_='+ (+new Date) +'&count=vertical&id=twitter_tweet_button_0&lang=en&original_referer='+ encodeURIComponent(window.location.href) +'&text='+encodeURIComponent(title)+'&url='+encodeURIComponent(url)+'&via=%23" allowtransparency="true" frameborder="0" scrolling="no"></iframe>';

	// Opdater links, så de åbner i et nyt faneblad
	var tmp=document.getElementById('calendar_page_links').getElementsByTagName('a'); var i=tmp.length; var j=i;
	if(i>0)do{tmp[j-i].target="_blank";}while(--i);
	tmp=null;

	// Indlæs billet-status
	document.getElementById('calendar_page_ticket_status').innerHTML=ticket_status;
	document.getElementById('calendar_page_ticket_link').href=ticket_link;
	document.getElementById('calendar_page_ticket_link2').href=ticket_link;

	// Indlæs billetknap
	var btn=document.getElementById('calendar_page_ticket_link').getElementsByTagName('img')[0].style;
	var btn2=document.getElementById('calendar_page_ticket_link2').getElementsByTagName('img')[0].style;
	if(ticket_button=='0'){
		btn.backgroundPosition='0 -100px'; btn.display='inline';
		btn2.backgroundPosition='0 -100px'; btn2.display='block';
	}else if(ticket_button=='1'){
		btn.backgroundPosition='0 -160px'; btn.display='inline';
		btn2.backgroundPosition='0 -160px'; btn2.display='block';
	}else{
		btn.backgroundPosition='0 0'; btn.display='none';
		btn2.backgroundPosition='0 0'; btn2.display='none';
	}

	// Udsolgt?
	if(tickets=='2'){
		document.getElementById('calendar_page_ticket_sold').style.display='block';
	}else{
		document.getElementById('calendar_page_ticket_sold').style.display='none';
	}

	// Opdater farve-indikatoren
	var color1=document.getElementById('calendar_page_color1');
	color1.style.backgroundColor=colors.split(',')[0];
	color1.style.height=color1.parentNode.offsetHeight+'px';
	color1=null;

	var color2=document.getElementById('calendar_page_color2');
	color2.style.backgroundColor=colors.split(',')[1];
	color2.style.height=color2.parentNode.offsetHeight+'px';
	color2=null;

	// Opdater favorit-status
	if(favorite){
		document.getElementById('calendar_page_favorite').className='favorite_remove';
		document.getElementById('calendar_page_favorite').innerHTML='Fjern fra favoritter';
	}else{
		document.getElementById('calendar_page_favorite').className='favorite_add';
		document.getElementById('calendar_page_favorite').innerHTML='Tilføj som favorit';
	}

	// Opdater antal kommentarer
	if(commentCount>0) document.getElementById('calendar_comments_expand_link').innerHTML='<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" /> <span>Vis kommentarer ('+commentCount+')</span>';
	else if(vega_user_logged_in) document.getElementById('calendar_comments_expand_link').innerHTML='<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" /> <span>Skriv en kommentar</span>';
	else document.getElementById('calendar_comments_expand_link').innerHTML='<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" /> <span>Vis kommentarer</span>';

	// Angiv at eventet vises
	cal.showingPage=id;
	cal.fullyDisplayed = true;
 	cal.preloadComments(id);

	// Vis eventet
	if(cal.onLoaded){
		document.getElementById('calendar_list').style.height='2000px';
		document.getElementById('calendar_list').style.height=(document.getElementById('calendar_page').offsetHeight-142)+'px';
		ie6Render();
	}else
		cal.onLoaded=true;

	document.getElementById('calendar_page').style.left='0px';
	document.getElementById('calendar_overview').style.left='-510px';

	// Udregn placeringen af kalenderen (så vi kan scrolle til toppen)
	var tmp=document.getElementById('calendar'); var y=-30;
	while(tmp){y+=tmp.offsetTop; tmp=tmp.offsetParent;}
	tmp=0;

	// Udregn hvor brugeren er scrollet til pt.
	var y2=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;

	// Scroll op!
	if(y2>y+60 || y2<y-60){
		new Effect(function(p){window.scrollTo(0,Math.round(y2-(y2-y)*p));},{duration:0.75,ease:true});
	}

	// Håndter links
	handleHashLinks();
}

// Tjek hash-adresse
handleHash();

// Gennemgå alle links og håndter hash-adresse
function handleHashLinks(){
	// Indlæs en reference til alle links
	var links=document.getElementsByTagName('a');
	var i=links.length; var j=i; var x=0;

	if(i>0)do{
		if(links[j-i].href.indexOf('#event=')!=-1 && !links[j-i].nfHashHandled){
			// Håndter hash-linket
			if(document.attachEvent) links[j-i].attachEvent('onclick',function(){setTimeout(handleHash,50);});
			else links[j-i].addEventListener('click',function(){setTimeout(handleHash,50);},false);
			links[j-i].nfHashHandled=true;
		}
	}while(--i);
}

// Håndter onload-eventet
function calendarOnLoad(){
	// Er cal ikke defineret endnu?
	try{
		if(!cal){
			setTimeout(calendarOnLoad,50);
			return;
		}
	}catch(e){
		setTimeout(calendarOnLoad,50);
		return;
	}
	// Håndter hash-adresser
	handleHashLinks();

	// Angiv at onload er køret
	if(cal.onLoaded){
		document.getElementById('calendar_list').style.height='2000px';
		document.getElementById('calendar_list').style.height=(document.getElementById('calendar_page').offsetHeight-142)+'px';
		ie6Render();
	}
	cal.onLoaded=true;
}
window.onload=calendarOnLoad;

isIE6=/MSIE 6/i.test(navigator.userAgent);
