/**
 * 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_v2_overview');
	this.list=document.getElementById('calendar_v2_list');
	this.page_container=document.getElementById('calendar_v2_page');
	this.top=document.getElementById('calendar_v2_top');

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

	// Klargør variabler
	this.onLoaded=false;										// Onload er endnu ikke kørt
	this.countLoaded=false;										// Vi har endnu ikke indlæst antal arrangementer i hver genre og venue
	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

	// 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

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

	// Håndter lukning af dropdowns
	if (document.attachEvent) { document.attachEvent('onclick', function() { cal.closeDropdown(); }); }
	else { document.addEventListener('click', function() { cal.closeDropdown(); }, false); }

	// Håndter automatisk udvidelse ved scroll
	if (document.attachEvent) {
		window.attachEvent('onscroll', function() { cal.onScroll(); });
	} else {
		window.addEventListener('scroll', function() { cal.onScroll(); }, false);
	}
}

/**
 * onScroll
 *
 ***********
 *
 * Køres automatisk, når brugeren scroller og udvider automatisk listen, hvis
 * man når bunden.
 */
Calendar.prototype.onScroll = function() {
	// Kør kun funktionen, hvis der pt. ikke vises en side
	if (this.showingPage) { return; }

	// Udregn placeringen af bunden af kalenderne
	var tmp = document.getElementById('calendar_v2_expand'); var y = -20;
	while (tmp) {
		y += tmp.offsetTop;
		tmp = tmp.offsetParent;
	}

	// Udregn scroll-offset
	var scroll = (window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight || 0) + (window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0);

	// Expand?
	if (scroll >= y) {
		this.expand();
	}
}

/**
 * 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 separators=this.top.getElementsByTagName('div');
	var items=this.top.getElementsByTagName('a');

	// Skal 'I salg nu' vises?
	if (type === 0) {
		separators[0].style.backgroundPosition = '0 0';
		separators[1].style.backgroundPosition = '-19px 0';
		separators[2].style.backgroundPosition = '-120px 0';

		items[0].style.backgroundPosition = '0 -70px';
		items[1].style.backgroundPosition = '-69px -35px';

	// Skal 'Tidligere arrangementer' vises?
	} else {
		separators[0].style.backgroundPosition = '-60px 0';
		separators[1].style.backgroundPosition = '-79px 0';
		separators[2].style.backgroundPosition = '-150px 0';

		items[0].style.backgroundPosition = '0 -35px';
		items[1].style.backgroundPosition = '-69px -70px';
	}

	// Håndter valg af måned
	try { document.getElementById('calendar_tstamp_now_'+ (this.tstamp ? this.tstamp : 'all')).getElementsByTagName('a')[0].className = ''; } catch(e) {}
	try { document.getElementById('calendar_tstamp_previous_'+ (this.tstamp ? this.tstamp : 'all')).getElementsByTagName('a')[0].className = ''; } catch(e) {}
	document.getElementById('calendar_tstamp_now_all').getElementsByTagName('a')[0].className = 'active';
	document.getElementById('calendar_tstamp_previous_all').getElementsByTagName('a')[0].className = 'active';
	this.tstamp='';

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

	// Fjern sorterings-pile på alle andre værdier
	var list=document.getElementById('calendar_v2_sort').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_v2_sort').getElementsByTagName('a')[0].getElementsByTagName('img')[0].style.backgroundPosition=((this.sortDir=='asc')?'-180px':'-187px')+' -15px';

	// 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_v2_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)?'-180px':'-195px')+' 0';

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

/**
 * setGenre
 *
 **********
 *
 * Søger på en bestemt genre.
 *
 **********
 *
 * Parametre:
 * genre (int)							Indeholder ID'et på den valgte genre.
 */
Calendar.prototype.setGenre=function(genre){
	// Update the CSS of the currently selected genre
	document.getElementById('genre_' + (this.genre ? this.genre : 'all')).getElementsByTagName('a')[0].className = '';
	document.getElementById('genre_' + (genre ? genre : 'all')).getElementsByTagName('a')[0].className = 'active';

	// Gem ID'et på genren
	this.genre=genre;
	this.init=true;

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

/**
 * showDropdown
 *
 **********
 *
 * Denne funktion åbner en dropdown.
 *
 **********
 *
 * Parametre:
 * dropdown_id (string)					Indeholder ID'et på den dropdown, der skal åbnes.
 */
Calendar.prototype.showDropdown=function(dropdown_id) {
	// Luk eventuelt åbne dropdowns
	this.closeDropdown();

	// Åbn dropdown'en
	document.getElementById(dropdown_id).style.display = 'block';

	// Registrer at dropdown'en er åben
	setTimeout(function() {
		if (!cal.openDropdowns) { cal.openDropdowns = []; }
		cal.openDropdowns[cal.openDropdowns.length] = dropdown_id;
	}, 50);
}

/**
 * closeDropdown
 *
 **********
 *
 * Denne funktion lukker åbne dropdowns.
 */
Calendar.prototype.closeDropdown=function() {
	// Løb igennem listen over åbne dropdowns og luk dem!
	if (!this.openDropdowns) { this.openDropdowns = []; } var i = this.openDropdowns.length;
	while (i--) { document.getElementById(this.openDropdowns[i]).style.display = 'none'; }

	// Nulstil listen over åbne dropdowns
	this.openDropdowns = [];
}

/**
 * setTstamp
 *
 **********
 *
 * Søger på en bestemt måned.
 *
 **********
 *
 * Parametre:
 * tstamp (string)						Indeholder den valgte måned.
 */
Calendar.prototype.setTstamp=function(tstamp){
	// Opdater den highlightede dato
	document.getElementById('calendar_tstamp_'+ (!this.type ? 'now' : 'previous') +'_'+ (this.tstamp ? this.tstamp : 'all')).getElementsByTagName('a')[0].className = '';
	document.getElementById('calendar_tstamp_'+ (!this.type ? 'now' : 'previous') +'_'+ (tstamp ? tstamp : 'all')).getElementsByTagName('a')[0].className = 'active';

	// Gem ID'et på genren
	this.tstamp=tstamp;
	this.init=true;

	// Udfør søgningen!
	this.setPage(25);
	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_v2_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.setPage(25);
	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_v2_sort').getElementsByTagName('a'); var i=list.length; var j=i;
	if(i>0)do{
		list[j-i].style.color = '#c1c1c1';
		list[j-i].getElementsByTagName('img')[0].style.backgroundPosition='0 -1000px';
	}while(--i);

	// Opdater pilen
	handler.style.color = '#ffffff';
	handler.getElementsByTagName('img')[0].style.backgroundPosition=((this.sortDir=='asc')?'-180px':'-187px')+' -15px';

	// Opdater listen
	this.init=true;
	this.setPage(25);
	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
	document.getElementById('calendar_v2_expand_link').style.display = 'block';
	document.getElementById('calendar_v2_expand_all').style.display = 'none';
	var status=document.getElementById('calendar_v2_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_v2/loader.gif')==-1) icon.src='templates/view/da_DK/default/images/calendar_v2/loader.gif';	// Indlæs loader-ikonet
	icon.style.background='none';									// Skjul "fold ud"-ikonet

	// Opdater 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=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"
	document.getElementById('calendar_v2_expand_link').style.display = 'block';
	document.getElementById('calendar_v2_expand_all').style.display = (remaining > 0) ? 'block' : 'none';
	var tmp=document.getElementById('calendar_v2_expand_link').getElementsByTagName('span')[0];	// Indlæs en reference til teksten
	if (tmp.childNodes[0]) { 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 pilen
	document.getElementById('calendar_v2_expand_link').getElementsByTagName('img')[0].style.display = 'none';
}

/**
 * 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(){
	// Afbryd eventuelt igangværende preload
	if (this.ajax) { this.ajax.abort(); }

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

	// 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 image=xml.getElementsByTagName('image')[0].firstChild.nodeValue;}catch(e){var image='';}					// Indlæs billede-sti
				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
				try{var genre_id=xml.getElementsByTagName('genre_id')[0].firstChild.nodeValue;}catch(e){var genre_id='';}			// Indlæs favorit-status
				try{var genre_name=xml.getElementsByTagName('genre_name')[0].firstChild.nodeValue;}catch(e){var genre_name='';}		// Indlæs favorit-status

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

				// Opdater antal matchende elementer for hvert venue
				try {
					var venues = xml.getElementsByTagName('count')[0].getElementsByTagName('venues')[0].getElementsByTagName('*'); var i = venues.length;
					while (i--) {
						// Opdater antal matchende events
						document.getElementById(venues[i].tagName +'_count').innerHTML = '('+ venues[i].firstChild.nodeValue +')';
					}
				} catch(e) {}

				// Opdater antal matchende elementer for hver genre
				try {
					var genres = xml.getElementsByTagName('count')[0].getElementsByTagName('genres')[0].getElementsByTagName('*'); var i = genres.length;
					while (i--) {
						// Opdater antal matchende events
						document.getElementById(genres[i].tagName).getElementsByTagName('span')[0].innerHTML = '('+ genres[i].firstChild.nodeValue +')';
					}
				} catch(e) {}

				// 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)+"&get_count="+(((this.events.length && this.countLoaded) || true)?'0':'1'),true);
	ajax.send(null);
	this.countLoaded = true;
}

/**
 * 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
		document.getElementById('calendar_v2_expand_link').style.display = 'none';
		document.getElementById('calendar_v2_expand_all').style.display = 'none';
	}

	// 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,image,tstamp,ticket,status,venue,colors,favorite,url,link,tstamp2,genre_id,genre_name){
	// Opret eventen
	this.events[this.events.length]=new Event(id,title,subtitle,image,tstamp,ticket,status,venue,colors,favorite,url,link,tstamp2,genre_id,genre_name);
}

/**
 * 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_v2_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_v2/loader.gif')==-1) icon.src='templates/view/da_DK/default/images/calendar_v2/loader.gif';	// Indlæs loader-ikonet
		icon.style.background='none';									// Skjul "fold ud"-ikonet

		// Opdater 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

		// Skjul 'alle'-linket
		document.getElementById('calendar_v2_expand_all').style.display = 'none';

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

	// Skjul preload-ikonet
	var icon=document.getElementById('calendar_v2_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
		document.getElementById('calendar_v2_expand_link').style.display = 'block';
		document.getElementById('calendar_v2_expand_all').style.display = (remaining > 0) ? 'block' : 'none';
		var tmp=document.getElementById('calendar_v2_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
		document.getElementById('calendar_v2_expand_link').getElementsByTagName('img')[0].style.display='none';
		tmp=null;										// Ryd hukommelsen
		
	}else if(remaining > 0){
		// Opdater teksten
		document.getElementById('calendar_v2_expand_link').style.display = 'block';
		document.getElementById('calendar_v2_expand_all').style.display = 'block';
		var tmp=document.getElementById('calendar_v2_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
		document.getElementById('calendar_v2_expand_link').getElementsByTagName('img')[0].style.display='none';
		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_v2'); 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||0;

	// Gem nuværende scroll-offset
	this.scrollY = y2;

	// 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;

	// Registrer ID'et
	favorite_eventID = this.events[id].id;

	// Håndter hash-address
	if (("replaceState" in window.history) && window.history.replaceState !== null) {
		this.replaceURL = window.location.href;
		window.history.replaceState("", "", this.events[id].url);
	}

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

	// Ryd fritekstsøgning
	if(this.q && false){
		document.getElementById('calendar_v2_search_q').value='';
		this.search();
		document.getElementById('calendar_v2_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;

	// Udregn scrolling
	var scroll = window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;
	var scroll2 = this.scrollY - scroll;
	var scroll3 = window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;

	// Slide listen op, så den matcher højden på info-siden
	var t=Math.min(1,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';
			window.scrollTo(scroll3, Math.round(scroll + scroll2 * p));
			ie6Render();
			if(p==1 && cal.showingPage == false){
				document.getElementById('calendar_v2_comments').style.display='none';
				document.getElementById('calendar_v2_page_image').src='templates/view/da_DK/default/images/layout/blank.gif';
				document.getElementById('calendar_v2_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;

	// Håndter hash-address
	if (("replaceState" in window.history) && window.history.replaceState !== null) {
		if (!this.replaceURL) { this.replaceURL = window.location.href.substr(0, window.location.href.lastIndexOf('/') + 1); }
		window.history.replaceState("", "", this.replaceURL);
	}

	// 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
	clearInterval(this.imageTimer);
	this.fadeActive=false;

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

	// Vis det første billede
	if(this.images[0]) document.getElementById('calendar_v2_page_image').src='/docs/media/events/'+this.images[0]+'-n.jpg';
	else document.getElementById('calendar_v2_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]+'-n.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_v2_page_image_fader');
	tmp.style.backgroundImage='url(/docs/media/events/'+this.images[this.imageIndex]+'-n.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_v2_page_image').src='/docs/media/events/'+cal.images[cal.imageIndex]+'-n.jpg'; t=null;}},{duration:0.5});
}

/**
 * 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_v2_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_v2_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});

	// 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_v2_comments').offsetHeight;

				// Opdater kommentarerne
				document.getElementById('calendar_v2_comments').innerHTML=ajax.responseText;
				var h = document.getElementById('calendar_v2_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_v2_comments').offsetHeight;

				// Opdater kommentarerne
				document.getElementById('calendar_v2_comments').innerHTML=ajax.responseText;
				var h = h - document.getElementById('calendar_v2_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,image,tstamp,ticket,status,venue,colors,favorite,url,ticket_link,tstamp2,genre_id,genre_name){
	// Indlæs indstillinger
	this.eventID=cal.events.length;									// Indlæs det interne event-ID
	this.status=0;													// Data om eventet er ikke preloadet
	this.status2=status;											// Gem event-status
	this.id=id;														// Gem eksetern event-ID
	this.title=title;												// Gem titlen
	this.image=image;												// Gem billede-stien
	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
	this.genre_id=genre_id;
	this.genre_name=genre_name;

	// 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)
	container.handler=this;																// Tilføj en reference til denne klasse
	container.style.backgroundImage='url(docs/media/events/'+ this.image +'-n2.jpg)';	// Tilføj baggrundsbillede til eventet

	// Indsæt den hvide gradient øverst
	var gradient=document.createElement('img');																			// Opret et element til den hvide gradient
	gradient.src='templates/view/da_DK/default/images/layout/blank.gif';												// Indlæs en blank gif
	gradient.style.position='absolute'; gradient.style.top=0; gradient.style.left=0; gradient.style.zIndex=10000;		// Placer gradienten
	gradient.style.display='block'; gradient.style.width='510px'; gradient.style.height='37px';							// Indlæs størrelsen for gradienten
	gradient.style.background='url(templates/view/da_DK/default/images/calendar_v2/calendar.png) repeat-x 0 -407px';	// Indlæs gradienten
	container.appendChild(gradient); gradient=null;																		// Tilføj gradienten

	// Tilføj den sorte gradient
	var gradient=document.createElement('img');																			// Opret et element til den sorte gradient
	gradient.src='templates/view/da_DK/default/images/layout/blank.gif';												// indlæs en blank gif
	gradient.style.position='absolute'; gradient.style.top=0; gradient.style.left='217px'; gradient.style.zIndex=1000;	// Placer gradienten
	gradient.style.display='block'; gradient.style.width='293px'; gradient.style.height='79px';							// Indlæs størrelsen for gradienten
	gradient.style.background='url(templates/view/da_DK/default/images/calendar_v2/calendar.png) no-repeat 0 -444px';	// Indlæs gradienten
	container.appendChild(gradient); gradient=null;																		// Tilføj gradienten

	// Tilføj den sorte hover-gradient
	var gradient=document.createElement('img');																				// Opret et element til den sorte gradient
	gradient.src='templates/view/da_DK/default/images/layout/blank.gif';													// indlæs en blank gif
	gradient.style.position='absolute'; gradient.style.top=0; gradient.style.left='-30px'; gradient.style.zIndex=1100;		// Placer gradienten
	gradient.style.display='block'; gradient.style.width='287px'; gradient.style.height='79px';								// Indlæs størrelsen for gradienten
	gradient.style.background='url(templates/view/da_DK/default/images/calendar_v2/calendar.png) no-repeat -293px -444px';	// Indlæs gradienten
	container.appendChild(gradient); gradient=null;																			// Tilføj gradienten

	// Tilføj hover-effekten
	var hover=document.createElement('img');																// Opret et element til hover-effekten
	hover.src='templates/view/da_DK/default/images/layout/blank.gif';										// Indlæs en blank gif
	hover.style.position='absolute'; hover.style.top=0; hover.style.left='5px'; hover.style.zIndex=1099;	// Placer hover-effekten
	hover.style.display='none'; hover.style.width='245px'; hover.style.height='79px';						// Indlæs størrelsen af hover-effekten
	hover.style.background=colors.split(',')[0];															// Tilføj baggrundsfarven
	hover.style.opacity=0.4; hover.style.filter='progid:DXImageTransform.Microsoft.Alpha(Opacity=40)';		// Tilføj opacity-kanal til hover-effekten
	container.appendChild(hover); hover = null;

	// 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='5px'; venueColor.style.height='0';		// Indlæs størrelsen for venue-indikatoren
	venueColor.style.background=colors.split(',')[0];																						// Indlæs den mørke farvekode
	container.appendChild(venueColor);																										// 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.position='absolute'; dateIcon.style.top='8px'; dateIcon.style.left='18px'; dateIcon.style.zIndex=2000;								// Placer datoen
	dateIcon.style.width='58px'; dateIcon.style.height='40px';																							// Indlæs størrelsen for datoen
	dateIcon.style.background='url(templates/view/da_DK/default/images/calendar_v2/dates.png) no-repeat 0 '+(parseInt(this.date_day,10)*-40+40)+'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.position='absolute'; dateIcon.style.top='48px'; dateIcon.style.left='18px'; dateIcon.style.zIndex=2000;									// Placer datoen
	dateIcon.style.width='58px'; dateIcon.style.height='21px'; 																								// Indlæs størrelsen for datoen
	dateIcon.style.background='url(templates/view/da_DK/default/images/calendar_v2/dates.png) no-repeat -58px '+(parseInt(this.date_month,10)*-21)+'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;										// Indsæt titlen i beskrivelsen
	if(subtitle){ tmp+='<span>'+subtitle+'</span>'; }	// Indsæt evt. subtitlen i beskrivelsen
	b.innerHTML=tmp;									// Indsæt beskrivelsen i elementet
	container.appendChild(b);							// Tilføj til eventet

	// Indsæt genre
	if (genre_name) {
		var genre = document.createElement('div');																		// Opret et element til genren
		genre.style.position='absolute'; genre.style.top='58px'; genre.style.left='314px'; genre.style.zIndex=10000;	// Positioner genren
		genre.style.height='15px'; genre.style.paddingLeft='15px'; genre.style.paddingRight='2px';						// Indlæs størrelsen for genren
		genre.style.background='url(templates/view/da_DK/default/images/calendar_v2/calendar.png) no-repeat 0 -572px';	// Indlæs baggrundsbilledet for genren
		genre.style.font='10px/15px arial,helvetica,sans-serif'; genre.style.color='#7f7e7c';							// Indlæs skrift-farven for genren
		genre.style.cursor='pointer';																					// Tilføj cursor:pointer til genren
		genre.innerHTML = genre_name +'<img src="templates/view/da_DK/default/images/layout/blank.gif" alt="" style="position:absolute; top:0; right:-3px; width:3px; height:15px; background:url(templates/view/da_DK/default/images/calendar_v2/calendar.png) no-repeat -197px -572px;">';

		genre.genre_id = genre_id;
		if (document.attachEvent) {
			genre.attachEvent('onclick', function(e) { var e = e || window.event; var src = e.srcElement || e.target; while (src && !src.genre_id) { src = src.parentNode; } if (!src) { return; } cal.setGenre(src.genre_id); e.stopPropagation && e.stopPropagation(); e.cancelBubble = true; e.preventDefault && e.preventDefault(); e.returnValue=false; e = null; src = null; });
		} else {
			genre.addEventListener('click', function(e) { var e = e || window.event; var src = e.srcElement || e.target; while (src && !src.genre_id) { src = src.parentNode; } if (!src) { return; } cal.setGenre(src.genre_id); e.stopPropagation && e.stopPropagation(); e.cancelBubble = true; e.preventDefault && e.preventDefault(); e.returnValue=false; e = null; src = null; }, false);
		}

		container.appendChild(genre); genre = null;
	}

	// Tilføj status-ribbon
	if (status == 1 || status == 2 || status == 3 || status == 4 || ticket == 1 || ticket == 2 || ticket == 3 || ticket == 7) {
		// Klargør elementet
		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.position='absolute'; statusIcon.style.top=0; statusIcon.style.right=0; statusIcon.style.zIndex=2000;	// Placer ribbon'et
		statusIcon.style.width='62px'; statusIcon.style.height='62px';															// Indlæs størrelsen af ribbon'et
		statusIcon.style.background='url(templates/view/da_DK/default/images/calendar_v2/calendar.png) no-repeat';				// Indlæs baggrundsbilledet

		// Vis det korrekte ribbon
		if (status == 1) { statusIcon.style.backgroundPosition = '-314px -35px'; }
		else if (status == 2) { statusIcon.style.backgroundPosition = '-376px -35px'; }
		else if (status == 3) { statusIcon.style.backgroundPosition = '-686px -35px'; }
		else if (status == 4) { statusIcon.style.backgroundPosition = '-748px -35px'; }
		else if (ticket == 1) { statusIcon.style.backgroundPosition = '-438px -35px'; }
		else if (ticket == 2) { statusIcon.style.backgroundPosition = '-500px -35px'; }
		else if (ticket == 3) { statusIcon.style.backgroundPosition = '-562px -35px'; }
		else if (ticket == 7) { statusIcon.style.backgroundPosition = '-624px -35px'; }

		container.appendChild(statusIcon); statusIcon=null; 			// Tilføj til eventet
	}

	// Tilføj billet-ikon
	if (ticket == 0 || ticket == 1 || ticket == 4 || ticket == 5) {
		// Klargør elementet
		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.position='absolute'; ticketIcon.style.top='58px'; ticketIcon.style.left='464px'; ticketIcon.style.zIndex=2000;	// Placer billet-knappen
		ticketIcon.style.width='39px'; ticketIcon.style.height='15px';																	// Indlæs størrelsen af ikonet
		ticketIcon.style.background='url(templates/view/da_DK/default/images/calendar_v2/calendar.png) no-repeat';						// Indlæs status som billede
		container.appendChild(ticketIcon);					 																			// Tilføj til eventet

		// Vis det korrekte ikon
		if (ticket == 0 || ticket == 1) { ticketIcon.style.backgroundPosition='-210px 0'; }
		else if (ticket == 4) { ticketIcon.style.backgroundPosition='-210px -15px'; }
		else { ticketIcon.style.backgroundPosition='-249px 0'; }

		// Håndter link til billet-køb
		if(this.ticket_link) {
			if (document.attachEvent) { ticketIcon.attachEvent('onclick',function(e){var e=e||window.event; var src=e.srcElement||e.target; window.open(src.link); stopEvent(e);}); }
			else { ticketIcon.addEventListener('click',function(e){var e=e||window.event; var src=e.srcElement||e.target; window.open(src.link); stopEvent(e);},false); }
		}

		// Ryd hukommelsen
		ticketIcon=null;
	}

	// Tilføj hover-effekt til eventen
	if(container.attachEvent){
		container.attachEvent('onmouseover',Event.prototype.over);
		container.attachEvent('onmouseout',Event.prototype.out);
		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);
		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);
	}

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

	// Sørg for at titlen ikke overskrider den tilladte højde
	fontSize = 20;
	while (b.offsetHeight > 58) { fontSize--; b.style.fontSize = fontSize +'px'; }

	// Sørg for titlen altid er 58 pixels høj
	b.style.height		= '58px';
	b.style.overflow	= 'hidden';

	// 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
}

/**
 * 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

	// Vis hover-effekten
	tmp[3].style.display = 'block';

	// 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
	tmp[3].style.display = 'none';

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

/**
 * preload
 *
 **********
 *
 * Preloader data om et event, og slider derefter eventet ind.
 */
Event.prototype.preload=function(){
	// Understøtter browseren dynamisk sideskift? - Hvis ikke, så redirect til den rigtige side!
	if (!("replaceState" in window.history) || window.history.replaceState === null) {
		window.location.href = this.url;
		return;
	}

	// 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_v2_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_v2/loader.gif')==-1) icon.src='templates/view/da_DK/default/images/calendar_v2/loader.gif';	// Indlæs loader-ikonet
	icon.style.background='none';									// Skjul "fold ud"-ikonet

	// Opdater 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	

	// Skjul 'alle'-linket
	document.getElementById('calendar_v2_expand_all').style.display = 'none';

	// 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_v2_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

	// Skjul ikonet
	icon.style.display='none';

	// Opdater 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;}
		try{this.statement_text=responseXML.getElementsByTagName('statement_text')[0].firstChild.nodeValue;}catch(e){this.statement_text='';}
		try{this.statement_by=responseXML.getElementsByTagName('statement_by')[0].firstChild.nodeValue;}catch(e){this.statement_ny='';}
		try{this.statement_dept=responseXML.getElementsByTagName('statement_dept')[0].firstChild.nodeValue;}catch(e){this.statement_dept='';}
	}

	// Opdater overskriften
	cal.page_container.getElementsByTagName('h1')[0].innerHTML=this.title;
	document.getElementById('calendar_v2_page_subtitle').innerHTML=this.subtitle;

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

	// Opdater info-baren
	var html="<h2 style=\"color:"+this.colors.split(',')[0]+";\"><span></span>"+this.venueName+":</h2><div class='clear'></div>";

	var d=parseInt(this.date_day,10); var m=parseInt(parseInt(this.date_month,10)+1,10);
	html+='<b><span></span>'+this.date_dow+"</b><div class='clear' style='height:3px;'></div>";
	html+='<b><span></span>'+((d<10)?'0'+d:d)+"."+((m<10)?'0'+m:m)+"."+this.date_year+"</b><div class='clear' style='height:3px;'></div>";
	html+='<b><span></span>'+((this.openhours.indexOf('kl')==-1)?"Kl. ":"")+this.openhours+"</b><div class='clear'></div>";

	html+="<div style=\"margin:10px 0; overflow:hidden; height:1px; background:#ffffff; border-bottom:1px solid #000000;\"></div>";

	if(this.presale) html+="<b><span></span>Forsalg:</b><div class='clear'></div>"+this.presale+((this.presale.indexOf('kr')==-1)?" kr.":"")+((this.presale.indexOf('gebyr')==-1)?" + gebyr":"")+"<div class=\"clear\" style=\"height:10px;\"></div>";
	if(this.entry) html+="<b><span></span>Entré:</b><div class='clear'></div>"+this.entry+((this.entry.indexOf('kr')==-1)?" kr.":"");
	else html+="<b>Entré:</b><br>Gratis entré";

	// Tilføj status-ribbon
	if (this.status2 == 1 || this.status2 == 2 || this.status2 == 3 || this.status2 == 4 || this.ticket == 1 || this.ticket == 2 || this.ticket == 3 || this.ticket == 7) {
		// Vis det korrekte ribbon
		if (this.status2 == 1) { var tmp = '-314px -35px'; }
		else if (this.status2 == 2) { var tmp = '-376px -35px'; }
		else if (this.status2 == 3) { var tmp = '-686px -35px'; }
		else if (this.status2 == 4) { var tmp = '-748px -35px'; }
		else if (this.ticket == 1) { var tmp = '-438px -35px'; }
		else if (this.ticket == 2) { var tmp = '-500px -35px'; }
		else if (this.ticket == 3) { var tmp = '-562px -35px'; }
		else if (this.ticket == 7) { var tmp = '-624px -35px'; }

		// Klargør elementet
		html +='<img src="/templates/view/da_DK/default/images/layout/blank.gif" alt="" style="background-position:'+ tmp +';" />';
	}

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

	// Indlæs beskrivelsen
	document.getElementById('calendar_v2_page_description_container').innerHTML=this.description;
	document.getElementById('calendar_v2_page_facepile').innerHTML='<iframe src="//www.facebook.com/plugins/facepile.php?href='+ encodeURIComponent(this.url) +'&amp;size=small&amp;width=291&amp;max_rows=2&amp;colorscheme=dark" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:291px; height:90px;" allowTransparency="true"></iframe>';
	document.getElementById('calendar_v2_page_links_content').innerHTML=this.links;
	if(this.links.replace('\n','').replace(' ', '')){
		document.getElementById('calendar_v2_page_links_title').style.display = 'block';
		document.getElementById('calendar_v2_page_recommendations_title').style.marginTop = '30px';
		document.getElementById('calendar_v2_page_share_links_title').style.marginTop = '30px';
	}else {
		document.getElementById('calendar_v2_page_links_title').style.display = 'none';
		document.getElementById('calendar_v2_page_recommendations_title').style.marginTop = '0';
		document.getElementById('calendar_v2_page_share_links_title').style.marginTop = '0';
	}

	document.getElementById('calendar_v2_page_recommendations_content').innerHTML=this.recommendations;
	if(this.recommendations.replace('\n','').replace(' ', '')){
		document.getElementById('calendar_v2_page_recommendations_title').style.display = 'block';
		document.getElementById('calendar_v2_page_share_links_title').style.marginTop = '30px';
	}else {
		document.getElementById('calendar_v2_page_recommendations_title').style.display = 'none';
	}

	document.getElementById('calendar_v2_add_to_calendar_link').href = '/scripts/calendar.php?id='+ this.id;

	// 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 = '<div class="fb-like" data-href="'+ encodeURIComponent(this.url) +'" data-send="false" data-layout="box_count" data-width="55" data-show-faces="false"></div>';
  	FB.XFBML.parse();

	// 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>';

	// Tilføj VEGA siger
	document.getElementById('calendar_v2_page_vega_says_title').style.display = this.statement_text ? 'block' : 'none';
	document.getElementById('calendar_v2_page_vega_says_content').style.display = this.statement_text ? 'block' : 'none';
	document.getElementById('calendar_v2_page_vega_says_content').innerHTML = '<i>"'+ this.statement_text +'"</i><span class="red">'+ this.statement_by +'</span>'+ this.statement_dept;

	// Opdater links, så de åbner i et nyt faneblad
	var tmp=document.getElementById('calendar_v2_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_v2_page_ticket_status').innerHTML=this.ticket_status;
	document.getElementById('calendar_v2_page_ticket_link').href=this.ticket_link;
	document.getElementById('calendar_v2_page_ticket_link2').href=this.ticket_link;

	// Indlæs billetknap
	var btn=document.getElementById('calendar_v2_page_ticket_link');
	var btn2=document.getElementById('calendar_v2_page_ticket_link2');
	if(this.ticket_button=='0'){
		btn.className = ''; btn.style.display = 'block';
		btn2.className = ''; btn2.style.display = 'block';
	}else if(this.ticket_button=='1'){
		btn.className = 'venteliste'; btn.style.display = 'block';
		btn2.className = 'venteliste'; btn2.style.display = 'block';
	}else{
		btn.style.display='none';
		btn2.style.display='none';
	}

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

	// 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 onload-eventet
function calendarOnLoad(){
	// Er cal ikke defineret endnu?
	try{
		if(!cal){
			setTimeout(calendarOnLoad,50);
			return;
		}
	}catch(e){
		setTimeout(calendarOnLoad,50);
		return;
	}

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

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