﻿var dkDayOfWeek = new Array(7);
dkDayOfWeek[0]="søndag";
dkDayOfWeek[1]="mandag";
dkDayOfWeek[2]="tirsdag";
dkDayOfWeek[3]="onsdag";
dkDayOfWeek[4]="torsdag";
dkDayOfWeek[5]="fredag";
dkDayOfWeek[6]="lørdag";

var dkMonthOfYear = new Array(12);
dkMonthOfYear[0]="januar";
dkMonthOfYear[1]="februar";
dkMonthOfYear[2]="marts";
dkMonthOfYear[3]="april";
dkMonthOfYear[4]="maj";
dkMonthOfYear[5]="juni";
dkMonthOfYear[6]="juli";
dkMonthOfYear[7]="august";
dkMonthOfYear[8]="september";
dkMonthOfYear[9]="oktober";
dkMonthOfYear[10]="november";
dkMonthOfYear[11]="december";
	
var enDayOfWeek = new Array(7);
enDayOfWeek[0]="Sunday";
enDayOfWeek[1]="Monday";
enDayOfWeek[2]="Tuesday";
enDayOfWeek[3]="Wednesday";
enDayOfWeek[4]="Thursday";
enDayOfWeek[5]="Friday";
enDayOfWeek[6]="Saturday";

var enMonthOfYear = new Array(12);
enMonthOfYear[0]="January";
enMonthOfYear[1]="February";
enMonthOfYear[2]="March";
enMonthOfYear[3]="April";
enMonthOfYear[4]="May";
enMonthOfYear[5]="June";
enMonthOfYear[6]="July";
enMonthOfYear[7]="August";
enMonthOfYear[8]="September";
enMonthOfYear[9]="October";
enMonthOfYear[10]="November";
enMonthOfYear[11]="December";
	
var eventsList = null;
	
function getDateFromGCalTime(gCalTime) { 
  // text for regex matches
  var remtxt = gCalTime;

  function consume(retxt) {
    var match = remtxt.match(new RegExp('^' + retxt));
    if (match) {
      remtxt = remtxt.substring(match[0].length);
      return match[0];
    }
    return '';
  }

  // minutes of correction between gCalTime and GMT
  var totalCorrMins = 0;

  var year = consume('\\d{4}');
  consume('-?');
  var month = consume('\\d{2}');
  consume('-?');
  var dateMonth = consume('\\d{2}');

  var theDate = new Date();
  theDate.setTime( Date.UTC(year, month-1, dateMonth) );
  return theDate;
}

function formatDateString(fDate, langCode) {
	var weekdayNum = fDate.getDay();
	var monthDay = fDate.getDate();
	var monthNum = fDate.getMonth();
	if (langCode == "dk") {
		var weekdayName = dkDayOfWeek[weekdayNum];
		var monthName = dkMonthOfYear[monthNum];
		return weekdayName + " " + monthDay + ". " + monthName;
	}
	else {
		var weekdayName = enDayOfWeek[weekdayNum];
		var monthName = enMonthOfYear[monthNum];
		return weekdayName + " " + monthDay + ". " + monthName;
	}
}

/**
 * Creates an unordered list of events in a human-readable form
 *
 * @param {json} root is the root JSON-formatted content from GData
 * @param {string} divId is the div in which the events are added
 */ 
function buildEventsList(root, langCode) {
  var feed = root.feed;
  
  // create a new unordered list
  eventsList = document.createElement('ul');

  // loop through each event in the feed
  for (var i = 0; i < feed.entry.length; i++) {
    var entry = feed.entry[i];
    var title = entry.title.$t;

    var start = entry['gd$when'][0].startTime;
	var startDate = getDateFromGCalTime(start);

    var end = entry['gd$when'][0].endTime;
	var endDate = getDateFromGCalTime(end);
	if (end.indexOf('T') == -1) {
		endDate.setDate(endDate.getDate() - 1);
	}
	
	var dateString = "";
	
	if (startDate.getTime() == endDate.getTime()) {
		dateString = formatDateString(startDate, langCode);	
	}
	else {
		dateString = formatDateString(startDate, langCode) +" - " + formatDateString(endDate, langCode);
	}
	
	var entryLinkHref = '';
	if (typeof entry.content.$t != 'undefined') {
		var content = entry.content.$t;
		var linkStart = content.indexOf('[LINK:');
		if (linkStart >= 0) {
			linkStart = linkStart + '[LINK:'.length;
			var linkEnd = content.indexOf(']',linkStart);
			entryLinkHref = content.substring(linkStart,linkEnd);
		}
	}
	
    var li = document.createElement('li');
	li.appendChild(document.createTextNode(dateString + ': '));
	
    if (entryLinkHref.length > 0) {
		var anchor = document.createElement('a');
		anchor.setAttribute('href', entryLinkHref);
		anchor.appendChild(document.createTextNode(title));
		li.appendChild(anchor);
    }
	else {
		li.appendChild(document.createTextNode(title));
	}
	
    // append the list item onto the unordered list
    eventsList.appendChild(li);
  }
}

function buildDkEventsList(root) {
  buildEventsList(root, 'dk');
}

function buildEnEventsList(root) {
  buildEventsList(root, 'en');
}

function showEvents(divId, headingText) {  if (eventsList.childNodes.length > 0) {	  var events = document.getElementById(divId);	  while (events.childNodes.length > 0) {		events.removeChild(events.childNodes[0]);	  }	  	  var heading = document.createElement('h1');	  heading.appendChild(document.createTextNode(headingText));	  events.appendChild(heading);	  events.appendChild(eventsList);	  	  events.style.display = "block";  } }
