String.prototype.regexmatch = function(format, value) {
  var result = format.exec(this);
  return !result ? value : (result.length === 1 ? result[0] : (result.length === 2 ? result[1] : result));
};

jQuery.fn.reduce = function(fun, initial) {
  var value = initial;
  $(this).
  each(
    function() {
      value = fun(value, $(this));
    }
  );
  return value;
}

jQuery.fn.cookie = function(name, value) {
  if (value === undefined)
    return document.cookie ? document.cookie.regexmatch(new RegExp('\\b' + name + '=([^;]*)')) : null;
  var date = new Date();
  date.setTime(date.getTime() + 365 * 24 * 60 * 60 * 1000);
  document.cookie = name + '=' + value + '; expires=' + date.toGMTString() + '; path=/; domain=.' + document.domain.regexmatch(/[\w\-]+\.\w+$/);
  return this;
}

function oude_browser() {
  return $.browser.msie && $.browser.version <= 6;
}

function zetLettergrootte() {
  var schermbreedte = $(window).width();
  if (schermbreedte == $('body').data('schermbreedte'))
    return;

  var lettergrootte = schermbreedte / 85;
  var verhouding = schermbreedte / 2633;

  $('body').
  cookie('schermbreedte', schermbreedte).
  data('schermbreedte', schermbreedte).
  cookie('lettergrootte', lettergrootte).
  css('font-size', lettergrootte).
  data('verhouding', verhouding).
  find('#fotobalk').
    css({
      'background-image': 'url("' + plaatjeFotobalk(0) + '")',
      'height': verhouding * 476
    }).
  end().
  find('#kop').
    css({
      'background-image': 'url("achtergrond-boven.jpg?breedte=' + schermbreedte + '")',
      'height': verhouding * 75
    }).
  end().
  find('#tussen').
    css('background-image', 'url("achtergrond-tussen.jpg?breedte=' + schermbreedte + '")').
  end().
  find('#voet').
    css({
      'background-image': 'url("achtergrond-onder.jpg?breedte=' + schermbreedte + '")',
      'height': verhouding * 124
    }).
  end().
  find('#bladeren').
    css({
      'background-image': 'url("achtergrond-met-blad.jpg?breedte=' + schermbreedte + '")',
      'height': verhouding * 487,
      'margin-bottom': -verhouding * (487 - 75)
    }).
  end();

  var kaderbreedte = Math.floor(schermbreedte * 0.13) - 2;
  var kaderhoogte  = Math.round(kaderbreedte / 1003 * 83);
  $('#links').
    find('.kadertussen').
      css('background-image', 'url("kader-tussen.jpg?breedte=' + kaderbreedte + '")').
    end().
    find('.kaderboven').
      css({
        'background-image': 'url("kader-boven.jpg?breedte=' + kaderbreedte + '")',
        'height': kaderhoogte
      }).
    end().
    find('.kaderonder').
      css({
        'background-image': 'url("kader-onder.jpg?breedte=' + kaderbreedte + '")',
        'height': kaderhoogte
      }).
    end().
  end();

  if (oude_browser())
    $('#links').
      css('margin-left', schermbreedte * 0.095 / 2).
    end();

  if (!oude_browser())
    zetHoogteKaderTussen();
}

function zetHoogteKaderTussen() {
  var topmenu = $('#topmenu ul');
  var oudeitemmarge = parseFloat(topmenu.find('li:first').css('padding-left'));
  if (!oudeitemmarge) {
    // de lettergrootte is nog niet doorberekend in alle groottes
    setTimeout(zetHoogteKaderTussen, 500);
    return;
  }

  var nieuweitemmarge = oudeitemmarge + ($('body').data('verhouding') * 2237 - topmenu.width()) / (2 * topmenu.find('li').length);
  topmenu.
  find('li').
    css({
      'padding-left': nieuweitemmarge,
      'padding-right': nieuweitemmarge
    }).
  end();

  $('.kadertussen').
    each(
      function() {
        var hoogte =
          $(this).
          children('ul:visible').
          height();
        $(this).
        css('height',
          hoogte ? hoogte + 0.03 * $(this).width() : 0
        );
      }
    ).
  end();
}

function plaatjeFotobalk(verhoging) {
  var fotobalken = new Array(
    'achtergrond-fotobalk-01.jpg',
    'achtergrond-fotobalk-02.jpg',
    'achtergrond-fotobalk-03.jpg',
    'achtergrond-fotobalk-04.jpg',
    'achtergrond-fotobalk-05.jpg',
    'achtergrond-fotobalk-06.jpg',
    'achtergrond-fotobalk-07.jpg',
    'achtergrond-fotobalk-08.jpg'
  );
  var nummer = (parseInt($('body').cookie('fotobalknr') || 0) + verhoging) % fotobalken.length;
  $('body').cookie('fotobalknr', nummer);
  return fotobalken[nummer] + '?breedte=' + $('body').data('schermbreedte');
}

function volgendeFotobalk() {
  $('<img />').
  attr('src', plaatjeFotobalk(1)).
  load(
    function() {
      $('<div></div>').
      attr('id', 'nieuwefotobalk').
      css({
        'background-image': 'url("' + $(this).attr('src') + '")',
        'display': 'none',
        'height': $('#fotobalk').height()
      }).
      insertAfter('#fotobalk').
      fadeIn(
        2000,
        function() {
          $('#fotobalk').
          remove();
          $('#nieuwefotobalk').
          attr('id', 'fotobalk');
          setTimeout(volgendeFotobalk, 2000);
        }
      );
    }
  );
}

$(document).
ready(
  function() {
    if (document.domain.regexmatch(/^(www\.)?[\w\-]+\.\w+$/)) {
      _gaq.push(['_setAccount', 'UA-16154545-1']);
      _gaq.push(['_trackPageview']);
    }

    $('#links>ul>li').
      addClass('kader').
      wrapInner('<div class="kadertussen"></div>').
      prepend('<div class="kaderboven"></div>').
      append('<div class="kaderonder"></div>').
    end();

    var huidigepagina = window.location.href.regexmatch(/([\w-]+)[^\/]*$/);
    $('#links').
    find('ul ul').
      hide().
    end().
    find('a[href="' + huidigepagina + '"]').
      addClass('gekozen').
      click(
        function() {
          return false;
        }
      ).
      parents('ul').
        show().
      end().
      next('ul').
        show().
      end().
    end();

    if (huidigepagina == 'home' && !oude_browser()) {
      $('#tussen').
      prepend('<div id="bladeren"></div>');
      $('#kop').
      remove();
    }

    $(window).
    resize(zetLettergrootte).
    resize();
    
    $('#middenenrechts').
    children().
      wrapAll('<div id="midden"></div>').
    end().
    find('#rechts').
    insertAfter(
      $('#midden')
    );

    if (!oude_browser() && !$('body').cookie('stilstaandefotobalk'))
      setTimeout(volgendeFotobalk, 2000);

    $('.uitklapbaar>li').
      wrapInner('<div></div>').
      find(':first :first').
        each(
          function() {
            $(this).
            parent().
              parent().
                prepend(
                  $(this).
                  clone()
                ).
              end().
            end().
            remove();
          }
        ).
      end().
      find(':first').
        wrapInner('<span></span>').
        find(':first').
          click(
            function() {
              $(this).
              parent().
                next().
                  slideToggle().
                end().
              end().
              toggleClass('open');
            }
          ).
          addClass('klikbaar').
        end().
        next().
          hide();

    var laatste_kolom =
      $('table#agenda tr, table#oudeagenda tr').
      reduce(
        function(a, b) {
          return Math.max(a, $(b).find('td').length);
        },
        0
      );

    var nu = new Date();
    var een_week_geleden = (new Date()).setDate(nu.getDate() - 7);
    var over_vier_weken = (new Date()).setDate(nu.getDate() + 28);
    var maanden = {'jan': 0, 'feb': 1, 'mrt': 2, 'apr': 3, 'mei': 4, 'jun': 5, 'juni': 5, 'jul': 6, 'juli': 6, 'aug': 7, 'sep': 8, 'sept': 8, 'okt': 9, 'nov': 10, 'dec': 11};
    var weekdagen = {'zo': 0, 'ma': 1, 'di': 2, 'wo': 3, 'do': 4, 'vr': 5, 'za': 6};

    $('table#agenda').
    find('tr').
      each(
        function() {
          var klasse = 'ongeldig';
          var datumtekst = $(this).find('td:nth-child(1)').text() + ' ' + $(this).find('td:nth-child(2)').text();
          var datumvelden = /^(\w+) +(\d+) +(\w+) +(\d+) +(\d+):(\d+)$/.exec(datumtekst); // bijvoorbeeld za 03 juli 2010 09:00
          if (datumvelden != null) {
            var aanvang = new Date(datumvelden[4], maanden[datumvelden[3].toLowerCase()], datumvelden[2], datumvelden[5], datumvelden[6]);
            if (weekdagen[datumvelden[1].toLowerCase()] != aanvang.getDay())
              klasse = 'ongeldig';
            else if (aanvang < een_week_geleden)
              klasse = 'verleden';
            else if (aanvang < nu)
              klasse = 'recent';
            else if (aanvang < over_vier_weken)
              klasse = 'binnenkort';
            else if (datumvelden[3] == datumvelden[3].toUpperCase()) // maand in hoofdletters => belangrijk
              klasse = 'belangrijk';
            else
              klasse = 'toekomst';
          }
          $(this).
          addClass(klasse).
          find('td:nth-child(1)').
            text(
              $(this).
              find('td:nth-child(1)').
              text().
              regexmatch(/^(\w+ +\d+ +\w+)/, $(this).find('td:nth-child(1)').text()).
              toLowerCase()
            ).
          end();
        }
      ).
    end();

    $('table#agenda, table#oudeagenda').
    find('tr').
      find('td:nth-child(' + laatste_kolom + ')').
        each(
          function() {
            $(this).
            closest('tr').
              find('td:nth-child(' + (laatste_kolom - 2) + ')').
                css('width', '100%').
                wrapInner('<span></span>').
                find(':first').
                  addClass('klikbaar').
                  click(
                    function() {
                      $(this).
                      toggleClass('open').
                      next().
                      slideToggle();
                    }
                  ).
                  after('<div class="extrainfo">' + $(this).html() + '</div>').
                end().
              end().
            end().
            remove();
          }
        ).
      end().
    end();

    $('a.emailadres').
    each(
      function() {
        $(this).
        attr('href',
          $(this).
          attr('href').
          replace(/^postnaar\b/, 'mailto').
          replace(/_apestaartje_/g, '@').
          replace(/_punt_/g, '.').
          replace(/_streepje_/g, '-')
        );
      }
    ).
    find('img').
      parent().
      removeClass('emailadres').
    end();

    $('.fotos').
    wrap('<div class="fotogalerij"></div>').
    before('<div class="galerij"></div>').
    find('img').
      click(
        function() {
          $(this).
          closest('.fotogalerij').
            find('.galerij').
              empty().
              append(
                $(this).
                clone()
              ).
            end().
            find('.active').
              removeClass('active').
            end().
          end().
          addClass('active');
        }
      ).
      eq(0).
        click().
      end().
    end();

    $('#actualiteiten li').
    find('a').
      addClass('meer').
    end().
    click(
      function() {
        window.location.href = $(this).find('a:last').attr('href');
      }
    ).
    css('cursor', 'pointer');
  }
);
