﻿var total = locations.length;

function getWeek(year,month,day) {
  var when = new Date(year,month,day);
  var newYear = new Date(year,0,1);
  var modDay = newYear.getDay();
  if(modDay == 0) {
  modDay=6;
  }
  else {
  modDay--;
  }
  var daynum = ((Date.UTC(year,when.getMonth(),when.getDate(),0,0,0) - Date.UTC(year,0,1,0,0,0))/1000/60/60/24) + 1;
  if(modDay < 4 ) {
  var weeknum = Math.floor((daynum+modDay-1)/7)+1;
  }
  else {
    var weeknum = Math.floor((daynum+modDay-1)/7);
    if(weeknum == 0) {
      year--;
      var prevNewYear = new Date(year,0,1);
      var prevmodDay = prevNewYear.getDay();
      if(prevmodDay == 0) {
      prevmodDay = 6;
      }
      else {
      prevmodDay--;
      }
      if(prevmodDay < 4) {
      weeknum = 53;
      }
      else {
      weeknum = 52;
      }
    }
  }
  return + weeknum;
}

function getTestCookie(cookieName){
var cookieFoundAt;
var cookieValue;
cookieFoundAt = document.cookie.indexOf(cookieName + "=");
  if (cookieFoundAt < 0) {
  cookieValue = "";
  }
  else {
  cookieFoundAt = document.cookie.indexOf("=",cookieFoundAt);
  cookieFoundAt++;
  cookieEnd = document.cookie.indexOf(";", cookieFoundAt);
    if (cookieEnd == -1) {
    cookieEnd = document.cookie.length;
    }
    cookieValue =document.cookie.substring(cookieFoundAt,cookieEnd);
  }
  return cookieValue;
}

var strCookie = getTestCookie('testcookie');

function bookRoom(bookday, bookroom) {
document.cookie = 'rescookie=' + bookingYear + '&' + (bookingMonth+1) + '&' + bookday + '&' + bookroom;
location.href = 'reservation.aspx';
}

function splitData(array, index) {
  var mainArray = array.split("#");
  var subArray = mainArray[index-1].split("*");
  var bookings = '';
  for(m in subArray) {
  if(subArray[m]!='') bookings += subArray[m] + '<br />';
  }
  return bookings;
}

function getHolidays() {   
  var selectedMonth = padOut(bookingMonth+1);
  var selectedYear = bookingYear - 0;
  var easter = getEaster(selectedYear);
  var easterDay = getDD(easter);
  var easterMonth = getMM(easter);
  holidays = new Array();
  var when = addDays(easterDay,easterMonth,selectedYear,-7);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[1] = getHoliday(getDD(holidayDate),holidayMonth) + ' Palmesøndag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,-3);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[2] = getHoliday(getDD(holidayDate),holidayMonth) + ' Skærtorsdag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,-2);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[3] = getHoliday(getDD(holidayDate),holidayMonth) + ' Langfredag';
  }
  if(easterMonth == selectedMonth) {
  holidays[4] = getHoliday(easterDay,easterMonth) + ' Påskedag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,1);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[5] = getHoliday(getDD(holidayDate),holidayMonth) + ' 2. Påskedag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,26);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[6] = getHoliday(getDD(holidayDate),holidayMonth) + ' St. Bededag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,39);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[7] = getHoliday(getDD(holidayDate),holidayMonth) + ' Kr. Himmelfartsdag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,40);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[8] = getHoliday(getDD(holidayDate),holidayMonth) + ' Lukket';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,49);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[9] = getHoliday(getDD(holidayDate),holidayMonth) + ' Pinsedag';
  }
  var when = addDays(easterDay,easterMonth,selectedYear,50);
  var holidayDate = getMMDD(when);
  var holidayMonth = getMM(holidayDate);
  if(holidayMonth == selectedMonth) {
  holidays[10] = getHoliday(getDD(holidayDate),holidayMonth) + ' 2. Pinsedag';
  }
  if(selectedMonth == 01) {
  holidays[11] = '01.01 Nytårsdag';
  }
  else if(selectedMonth == 05) {
  holidays[12] = '01.05 Lukket';
  }
  else if(selectedMonth == 06) {
  holidays[13] = '05.06 Grundlovsdag';
  }
  else if(selectedMonth == 12) {
  holidays[14] = '23.12 Lukket';
  holidays[15] = '24.12 Lukket';
  holidays[16] = '25.12 1. Juledag';
  holidays[17] = '26.12 2. Juledag';
  holidays[18] = '27.12 Lukket';
  holidays[19] = '28.12 Lukket';
  holidays[20] = '29.12 Lukket';
  holidays[21] = '30.12 Lukket';
  holidays[22] = '31.12 Lukket';
  }
}

function getEaster(Y) {
var C = Math.floor(Y/100);
var N = Y - 19*Math.floor(Y/19);
var K = Math.floor((C - 17)/25);
var I = C - Math.floor(C/4) - Math.floor((C - K)/3) + 19*N + 15;
I = I - 30*Math.floor((I/30));
I = I - Math.floor(I/28)*(1 - Math.floor(I/28)*Math.floor(29/(I + 1))*Math.floor((21 - N)/11));
var J = Y + Math.floor(Y/4) + I + 2 - C + Math.floor(C/4);
J = J - 7*Math.floor(J/7);
var L = I - J;
var M = 3 + Math.floor((L + 40)/44);
var D = L + 28 - 31*Math.floor(M/4);
return padOut(M) + '.' + padOut(D);
}

function padOut(number) { 
return (number < 10) ? '0' + number : number;
}

function getMM(string) {
return eval(string.substring(0,2));
}

function getDD(string) {
return eval(string.substring(3,5));
}

function getMMDD(string) {
return string.substring(string.indexOf('.')+1,string.length);
}

function getHoliday(day,month) {
return padOut(day) + '.' + padOut(month);
}

function getDaysInYear(year) { 
  if(isLeapYear(year)) {
  return 366;
  }
  else {
  return 365;
  } 
}

function addDays(day,month,year,addition) {
  if (isLeapYear(year)) {
  var number = day + accumulateLY[month] + addition;
  }
  else {
  var number = day + accumulate[month] + addition;
  }
  var days = getDaysInYear(year);
  while(number > days) {
  number -= days;
  days = getDaysInYear(++year);
  }
  while(number < 1) {
  days = getDaysInYear(--year);
  number += days;
  }
  month = 1;
  if(isLeapYear(year)) {
    while (number > accumulateLY[month]) { 
    month++;
    }
    day = number - accumulateLY[--month];
  }
  else {
    while (number > accumulate[month]) {
    month++; 
    }
    day = number - accumulate[--month];
  }
  return year + '.' + padOut(month) + '.' + padOut(day);
}

function makeArray() {
this[0] = makeArray.arguments.length;
  for (i = 0; i<makeArray.arguments.length; i++) {
  this[i+1] = makeArray.arguments[i];
  }
}

var accumulate   = new makeArray(0,31,59,90,120,151,181,212,243,273,304,334);
var accumulateLY = new makeArray(0,31,60,91,121,152,182,213,244,274,305,335);

function getDaysInMonth(month, year)  {
var days;
  if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) { 
  days=31;
  }
  else if(month==4 || month==6 || month==9 || month==11) {
  days=30;
  }
  else if(month==2)  {
    if(isLeapYear(year)) { 
    days=29; 
    }
    else { 
    days=28; 
    }
  }
  return (days);
}

function isLeapYear(Year) {
  if(((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
  return (true);
  } 
  else { 
  return (false); 
  }
}

function showCalendar() {
  if(strCookie!='') {
  displayCalendar(bookingMonth, bookingYear);
  document.getElementById("formarea").style.visibility = 'visible';
  }
  else {
  document.getElementById("calendar").innerHTML = '<p>Din browser er indstillet til at afvise cookies.</p><p>Tillad anvendelse af cookies for at få adgang til booking systemet.</p>';
  }
}

function displayCalendar(month, year) {
  getHolidays();
  var month = parseInt(month);
  var year = parseInt(year);
  var days = getDaysInMonth(month+1, year);
  var firstOfMonth = new Date (year, month, 0);
  var startingPos = firstOfMonth.getDay();
  if(startingPos==0) {
    var weekday = new Array("Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag");
    if(month==6) {
    holidays[23] = '01.07 Lukket';
    holidays[24] = '02.07 Lukket';
    holidays[25] = '03.07 Lukket';
    holidays[26] = '04.07 Lukket';
    holidays[27] = '05.07 Lukket';
    holidays[28] = '08.07 Lukket';
    holidays[29] = '09.07 Lukket';
    holidays[30] = '10.07 Lukket';
    holidays[31] = '11.07 Lukket';
    holidays[32] = '12.07 Lukket';
    holidays[33] = '15.07 Lukket';
    holidays[34] = '16.07 Lukket';
    holidays[35] = '17.07 Lukket';
    holidays[36] = '18.07 Lukket';
    holidays[37] = '19.07 Lukket';
    holidays[38] = '22.07 Lukket';
    holidays[39] = '23.07 Lukket';
    holidays[40] = '24.07 Lukket';
    holidays[41] = '25.07 Lukket';
    holidays[42] = '26.07 Lukket';
    }
  }
  else if(startingPos==1) {
    var weekday = new Array("Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag");
    if(month==6) {
    holidays[23] = '07.07 Lukket';
    holidays[24] = '08.07 Lukket';
    holidays[25] = '09.07 Lukket';
    holidays[26] = '10.07 Lukket';
    holidays[27] = '11.07 Lukket';
    holidays[28] = '14.07 Lukket';
    holidays[29] = '15.07 Lukket';
    holidays[30] = '16.07 Lukket';
    holidays[31] = '17.07 Lukket';
    holidays[32] = '18.07 Lukket';
    holidays[33] = '21.07 Lukket';
    holidays[34] = '22.07 Lukket';
    holidays[35] = '23.07 Lukket';
    holidays[36] = '24.07 Lukket';
    holidays[37] = '25.07 Lukket';
    holidays[38] = '28.07 Lukket';
    holidays[39] = '29.07 Lukket';
    holidays[40] = '30.07 Lukket';
    holidays[41] = '31.07 Lukket';
    }
  }
  else if(startingPos==2) {
    var weekday = new Array("Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag");
    if(month==6) {
    holidays[23] = '06.07 Lukket';
    holidays[24] = '07.07 Lukket';
    holidays[25] = '08.07 Lukket';
    holidays[26] = '09.07 Lukket';
    holidays[27] = '10.07 Lukket';
    holidays[28] = '13.07 Lukket';
    holidays[29] = '14.07 Lukket';
    holidays[30] = '15.07 Lukket';
    holidays[31] = '16.07 Lukket';
    holidays[32] = '17.07 Lukket';
    holidays[33] = '20.07 Lukket';
    holidays[34] = '21.07 Lukket';
    holidays[35] = '22.07 Lukket';
    holidays[36] = '23.07 Lukket';
    holidays[37] = '24.07 Lukket';
    holidays[38] = '27.07 Lukket';
    holidays[39] = '28.07 Lukket';
    holidays[40] = '29.07 Lukket';
    holidays[41] = '30.07 Lukket';
    holidays[42] = '31.07 Lukket';
    }
  }
  else if(startingPos==3) {
    var weekday = new Array("Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag");
    if(month==6) {
    holidays[23] = '05.07 Lukket';
    holidays[24] = '06.07 Lukket';
    holidays[25] = '07.07 Lukket';
    holidays[26] = '08.07 Lukket';
    holidays[27] = '09.07 Lukket';
    holidays[28] = '12.07 Lukket';
    holidays[29] = '13.07 Lukket';
    holidays[30] = '14.07 Lukket';
    holidays[31] = '15.07 Lukket';
    holidays[32] = '16.07 Lukket';
    holidays[33] = '19.07 Lukket';
    holidays[34] = '20.07 Lukket';
    holidays[35] = '21.07 Lukket';
    holidays[36] = '22.07 Lukket';
    holidays[37] = '23.07 Lukket';
    holidays[38] = '26.07 Lukket';
    holidays[39] = '27.07 Lukket';
    holidays[40] = '28.07 Lukket';
    holidays[41] = '29.07 Lukket';
    holidays[42] = '30.07 Lukket';
    }
  }
  else if(startingPos==4) {
    var weekday = new Array("Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag");
    if(month==6) {
    holidays[23] = '04.07 Lukket';
    holidays[24] = '05.07 Lukket';
    holidays[25] = '06.07 Lukket';
    holidays[26] = '07.07 Lukket';
    holidays[27] = '08.07 Lukket';
    holidays[28] = '11.07 Lukket';
    holidays[29] = '12.07 Lukket';
    holidays[30] = '13.07 Lukket';
    holidays[31] = '14.07 Lukket';
    holidays[32] = '15.07 Lukket';
    holidays[33] = '18.07 Lukket';
    holidays[34] = '19.07 Lukket';
    holidays[35] = '20.07 Lukket';
    holidays[36] = '21.07 Lukket';
    holidays[37] = '22.07 Lukket';
    holidays[38] = '25.07 Lukket';
    holidays[39] = '26.07 Lukket';
    holidays[40] = '27.07 Lukket';
    holidays[41] = '28.07 Lukket';
    holidays[42] = '29.07 Lukket';
    }
    else if(month==7) {
    holidays[0] = '01.08 Lukket';
    }
  }
  else if(startingPos==5) {
    var weekday = new Array("Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag");
    if(month==6) {
    holidays[23] = '03.07 Lukket';
    holidays[24] = '04.07 Lukket';
    holidays[25] = '05.07 Lukket';
    holidays[26] = '06.07 Lukket';
    holidays[27] = '07.07 Lukket';
    holidays[28] = '10.07 Lukket';
    holidays[29] = '11.07 Lukket';
    holidays[30] = '12.07 Lukket';
    holidays[31] = '13.07 Lukket';
    holidays[32] = '14.07 Lukket';
    holidays[33] = '17.07 Lukket';
    holidays[34] = '18.07 Lukket';
    holidays[35] = '19.07 Lukket';
    holidays[36] = '20.07 Lukket';
    holidays[37] = '21.07 Lukket';
    holidays[38] = '24.07 Lukket';
    holidays[39] = '25.07 Lukket';
    holidays[40] = '26.07 Lukket';
    holidays[41] = '27.07 Lukket';
    holidays[42] = '28.07 Lukket';
    }
  }
  else {
    var weekday = new Array("Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag","Søndag","Mandag","Tirsdag");
    if(month==6) {
    holidays[23] = '02.07 Lukket';
    holidays[24] = '03.07 Lukket';
    holidays[25] = '04.07 Lukket';
    holidays[26] = '05.07 Lukket';
    holidays[27] = '06.07 Lukket';
    holidays[28] = '09.07 Lukket';
    holidays[29] = '10.07 Lukket';
    holidays[30] = '11.07 Lukket';
    holidays[31] = '12.07 Lukket';
    holidays[32] = '13.07 Lukket';
    holidays[33] = '16.07 Lukket';
    holidays[34] = '17.07 Lukket';
    holidays[35] = '18.07 Lukket';
    holidays[36] = '19.07 Lukket';
    holidays[37] = '20.07 Lukket';
    holidays[38] = '23.07 Lukket';
    holidays[39] = '24.07 Lukket';
    holidays[40] = '25.07 Lukket';
    holidays[41] = '26.07 Lukket';
    holidays[42] = '27.07 Lukket';
    }
  }
  var strCalendar = '<table cellspacing="0" cellpadding="3"><tr><td class="header" style="width:30px">Dato</td><td class="header" style="width:50px">Ugedag</td><td class="header" style="width:20px">Uge</td>';
  for(s=1; s<total; s++) strCalendar += '<td class="header" style="width:110px">' + locations[s] + '</td>';
  strCalendar += '</tr>';
  var strMonth = padOut(month+1);
  for(i=0; i<days; i++) {
    if(i>=startDate) {
      var strDay = padOut(i+1);
      var strDate = strDay + '.' + strMonth;
      var holiday = '';
      if(((month<8)&&(month!=1))||(month==11)) {
        for(n in holidays) {
          if(holidays[n].indexOf(strDate)!=-1) {
          holiday = holidays[n].slice(6);
          break;
          }
        }
      }
      if( (weekday[i]!='Lørdag') && (weekday[i]!='Søndag') ) {
        strCalendar += '<tr><td>' + strDate + '</td><td>' + weekday[i] + '</td><td>' + getWeek(year,month,i+1) + '</td>';
        if(holiday=="") {
          for(t=1; t<total; t++) {
            var bookingdata = splitData(daydata[i+1],t);
            if(bookingdata!='Lukket<br />') {
            strCalendar += '<td class="picker" title="' + weekday[i] + ' d. ' + strDate + ' &raquo; ' + locations[t] + '" onclick="bookRoom(' + (i+1) + ',' + t + ')">' + bookingdata + '</td>';
            }
            else {
            strCalendar += '<td>Lukket</td>';
            }
          }
        }
        else {
        strCalendar += '<td><b>' + holiday + '</b></td>';
        for(u=2; u<total; u++) strCalendar += '<td></td>';
        }
        strCalendar += "</tr>";
      }
      else {
        strCalendar += '<tr><td class="subheader">' + strDate + '</td><td class="subheader">' + weekday[i] + '</td><td class="subheader">' + getWeek(year,month,i+1) + '</td><td class="subheader">';
        if(holiday!="") strCalendar += '<b>' + holiday + '</b>';
        strCalendar += "</td>";
        for(v=2; v<total; v++) strCalendar += '<td class="subheader"></td>';
        strCalendar += "</tr>";
      }
    }
  }
  strCalendar += '<tr><td colspan="' + (total+2) + '" style="padding-top:10px;border-style:none">';
  strCalendar += '<table cellspacing="0" cellpadding="0" width="100%">';
  strCalendar += '<tr>';
  strCalendar += '<td style="border-style:none"><div><a href="default.aspx"><img src="files/booking/external/back.gif" width="15" height="7" alt="" /> Tilbage til hjemmeside</a></div></td>';
  strCalendar += '<td style="border-style:none;text-align:right"><div class="copyright">&copy; Copyright 2007 <a href="http://www.getonline.dk/">getONLINE</a></div></td>';
  strCalendar += '</tr>';
  strCalendar += '</table>';
  strCalendar += '</td></tr>';
  strCalendar += '</table>';
  strCalendar = strCalendar.replace(new RegExp('<<','g'), '<span>');
  strCalendar = strCalendar.replace(new RegExp('>>','g'), '</span>');
  document.getElementById("calendar").innerHTML = strCalendar;
}

function getMonth() {
var index = document.forms[0].month.selectedIndex;
var ident = document.forms[0].month.options[index].value;
location.href = 'booking.aspx?id=' + ident;
}
