(function ($) {

  $.fn.agenda = function (opt) {
		
		if(!this.length) return false;
		
    //include date.js - http://www.datejs.com/
    var options = opt || {};

    var view = $(this);
    if (!options.hasOwnProperty('expandableOnly')) view.empty();
    var currentDate = Date.today();
    //set current date to date in the url
    var extLoadURL = '/agenda';
    var selectedType = 'firstview';

    if (!options.hasOwnProperty('expandableOnly')) {
      var dateTypeContainer = $('<div>', {
        id: 'dateTypeContainer'
      }).appendTo(view);
      var navigationContainer = $('<div>', {
        id: 'navigationContainer'
      }).appendTo(view);
      var eventsContainer = $('<div>', {
        id: 'eventsContainer'
      }).appendTo(view);
    }
    var dateTypes = [{
      name: 'dag',
      count: ''
    }, {
      name: 'week',
      count: ''
    }, {
      name: 'maand',
      count: ''
    }, {
      name: 'jaar',
      count: ''
    }, {
      name: 'firstview',
      count: '10'
    }]
    var sqlFormat = 'yyyy-MM-dd';
    var activity = '';
    var disiplines = '';

    var getTimeSpan = function () {
        var fromDate;
        var toDate;
        var name;
        var count = 0;

        switch (currentDateType()) {
        case 'dag':
          fromDate = currentDate;
          toDate = currentDate.clone().set({
            hour: 23,
            minute: 59,
            second: 59
          });
          name = currentDate.toString('dd MMMM yyyy');
          count = dateTypes[0]['count'];
          break;
        case 'week':
          fromDate = currentDate.clone();
          if (fromDate.getDay() > 1) fromDate.moveToDayOfWeek(1, -1);
          else if (fromDate.getDay() == 0) fromDate.moveToDayOfWeek(1, -1);
          toDate = fromDate.clone().set({
            hour: 23,
            minute: 59,
            second: 59
          }).addDays(6);
          name = fromDate.toString('dd MMMM yyyy') + ' - ' + toDate.toString('dd MMMM yyyy');;
          count = dateTypes[1]['count'];
          break;
        case 'maand':
          fromDate = currentDate.clone().moveToFirstDayOfMonth();
          toDate = currentDate.clone().moveToLastDayOfMonth().set({
            hour: 23,
            minute: 59,
            second: 59
          });
          name = fromDate.toString('MMMM yyyy');
          count = dateTypes[2]['count'];
          break;
        case 'jaar':
          fromDate = currentDate.clone().set({
            day: 1,
            month: 0
          });
          toDate = currentDate.clone().set({
            day: 31,
            month: 11,
            hour: 23,
            minute: 59,
            second: 59
          });
          name = fromDate.toString('yyyy');
          count = dateTypes[3]['count'];
          break;
        case 'firstview':
          fromDate = currentDate;
          toDate = currentDate.clone().set({
            day: 31,
            month: 11,
            hour: 23,
            minute: 59,
            second: 59
          });
          name = currentDate.toString('dd MMMM yyyy');
          count = dateTypes[4]['count'];
          break;
        }

        if (currentDateType() != 'firstview') {
          $('#navigationContainer').css('visibility', 'visible');
        }

        return {
          from: fromDate,
          to: toDate,
          name: name,
          count: count
        };
      }
    var getEvents = function () {

        var ts = getTimeSpan();

        var from = ts.from.toString(sqlFormat);
        var to = ts.to.toString(sqlFormat);
        var count = ts.count;

        eventsContainer.extLoad(extLoadURL + '?from=' + from + '&to=' + to + '&type=' + activity + '&count=' + count + '&tagid=' + disiplines, onGetEvents);
      }
    var onGetEvents = function (response) {
        //signup links
        $('#sb-container').addClass('Yellow');
        Shadowbox.setup("a.ExpandableItemSignup", {
          gallery: "aanmelden",
          animate: false,
          showOverlay: false,
          handleOversize: 'drag'
        });

        if (!currentDate.equals(Date.parse('today'))) $('.todayButton').css('display', 'inline');
        else $('.todayButton').hide();
      }
    var createDateTypes = function () {
        $(dateTypes).each(function (index, dt) {
          $('<input>', {
            type: 'radio',
            name: 'dateType',
            value: dt.name,
            click: onDateTypeChange
          }).prependTo($('<label>', {
            html: 'per ' + dt.name
          }).appendTo(dateTypeContainer));
        })
        $('#dateTypeContainer input[value=' + selectedType + ']').trigger('click');

        $('#dateTypeContainer input[value="firstview"]').parent().css("display", "none");
        $('#navigationContainer').css('visibility', 'hidden');

        $('<span>', {
          'class': 'todayButton',
          html: '&raquo; naar vandaag &laquo;',
          click: gotoToday
        }).hide().appendTo('#dateTypeContainer');

      }
    var gotoToday = function () {
        currentDate = Date.today();
        createNavigation();
        getEvents()
      }
    var onDateTypeChange = function (e) {
        $('#dateTypeContainer input:radio').attr('checked', false);
        $(e.target).attr('checked', true);
        createNavigation();
        getEvents();
      }
    var createNavigation = function () {

        var ts = getTimeSpan();

        navigationContainer.empty();
        var prevButton = $('<div>', {
          text: 'vorige',
          'class': 'AgendaPrevious'
        }).appendTo(navigationContainer).click(prevEventsDate);
        var currentDateName = $('<div>', {
          html: '<span>' + ts.name + '</span>',
          'class': 'AgendaDate'
        }).appendTo(navigationContainer);
        var nextButton = $('<div>', {
          text: 'volgende',
          'class': 'AgendaNext'
        }).appendTo(navigationContainer).click(nextEventsDate);
      }
    var prevEventsDate = function () {
        navigateDate('prev')
      }
    var nextEventsDate = function () {
        navigateDate('next')
      }
    var navigateDate = function (dir) {

        if (dir == 'next') {

          switch (currentDateType()) {
          case 'dag':
            currentDate.addDays(1);
            break;
          case 'week':
            currentDate.addWeeks(1)
            break;
          case 'maand':
            currentDate.addMonths(1);
            break;
          case 'jaar':
            currentDate.addYears(1);
            break;
          }
        } else if (dir == 'prev') {
          switch (currentDateType()) {
          case 'dag':
            currentDate.addDays(-1);
            break;
          case 'week':
            currentDate.addWeeks(-1);
            break;
          case 'maand':
            currentDate.addMonths(-1);
            break;
          case 'jaar':
            currentDate.addYears(-1);
            break;
          }
        }
        createNavigation();
        getEvents();
      }
    var enableEventFilters = function () {
        $(options.agendaEventTypes).click(function () {
          getEventTypes();
          getEvents();
        })
        $(options.agendaEventDisiplines).click(function () {
          getEventDisiplines();
          getEvents();
        })

        getEventTypes();
        getEventDisiplines();
      }
    var getEventTypes = function () {
        var eventTypes = [];

        $(options.agendaEventTypes + ':checked').not('input.chkAll').each(function (index, cb) {
          eventTypes.push(cb.value.trim());
        })
        activity = eventTypes.join(',');
      }
    var getEventDisiplines = function () {
        var eventDisiplines = [];

        $(options.agendaEventDisiplines + ':checked').not('input.chkAll').each(function (index, cb) {
          eventDisiplines.push(cb.value.trim());
        })
        disiplines = eventDisiplines.join(',');
      }
    var currentDateType = function () {
        return $('input:radio:checked').val();
      }
    if (options.agendaEventTypes || options.agendaEventDisiplines) enableEventFilters();

    createDateTypes();

  }


  /////////////////////////////
  $.fn.getPageAjax = function (extUrl, idArchive, idCategory, idType) {
    
		//if(this.find('.ItemDetails, .PortfolioItem. ItemTitle').length) return false;
		
		var view = this;
    var tagsString = '';
    var typesString = '';
    var dateString = '';
    var month = '';
    var year = '';

    var init = function () {
        if (view.length) {
          listner();
        }
      }

    var listner = function () {
        if (idCategory.length) {
          $(idCategory + ' input').change(function () {
            getTags();
            draw();
          })
        }

        if (idType.length) {
          $(idType + ' input').change(function () {
            getTypes();
            draw();
          })
        }

        if (idArchive.length) {
          $(idArchive + ' a').click(function (e) {
            e.preventDefault();

            var data = $(this).attr('rel').split('-');
            month = data[0];
            year = data[1];

            if (month.length > 0 && year.length > 0) {
              dateString = '&month=' + month + '&year=' + year;
            } else {
              dateString = '';
            }

            draw();
          });
        }

      }

    var getTags = function () {
        tags = [];
        $(idCategory + ' input:checked').each(function () {
          if ($(this).val() != 'on') {
            tags.push($(this).val());
          }
        });

        //eerste waarde deleten
        if (tags.length > 0) {
          tagsString = tags.join(',');
          tagsString = 'tagids=' + tagsString;
        } else {
          tagsString = '';
        }
      }

    var getTypes = function () {
        types = [];
        $(idType + ' input:checked').each(function () {
          if ($(this).val() != 'on') {
            types.push($(this).val());
          }
        });

        //eerste waarde deleten
        if (types.length > 0) {
          typesString = types.join(',');
          typesString = '&type=' + typesString;
        } else {
          typesString = '';
        }
      }

    var draw = function () {
        view.extLoad(extUrl + tagsString + typesString + dateString);
      }

    init();
  }

  ////////////////////////////////
  $.fn.getPageAjaxPortfolio = function (extUrl, idArchive, idCategory) {

		//if(this.find('.ItemDetails, .PortfolioItem, .ItemTitle').length) return false;

		var view = this;
    var tagsString = '';

    var init = function () {
        if (view.length) {
          listner();
        }
      }

    var listner = function () {
        $(idCategory + ' input').change(function () {
          getTags();
          draw();
        })

        $(idArchive + ' a').click(function (e) {
          e.preventDefault();
          extUrl = $(this).attr('href');
          draw();
        });
      }

    var getTags = function () {
        tags = [];
        $(idCategory + ' input:checked').each(function () {
          if ($(this).val() != 'on') {
            tags.push($(this).val());
          }
        });

        //eerste waarde deleten
        if (tags.length > 0) {
          tagsString = tags.join(',');
          tagsString = '&tagids=' + tagsString;
        } else {
          tagsString = '';
        }
      }

    var draw = function () {
        view.extLoad(extUrl + tagsString);
      }

    init();
  }

  /////////////////////////////
  $.fn.extLoad = function (url, callback) {

    var elm = $(this);

    $.get(
    url, function (data) {

      var result = '';
      // data tussen comments eruit halen
      var aData = data.split('<!--AjaxResponseStart-->');
      if (aData.length) {
        result = aData[1].split('<!--AjaxResponseEnd-->')[0];
      }
      // script tag toevoegen voor controle of javascript is uitgevoerd.
      result += '<script type="text/javascript">extLoadExecuted = true</script>';
      // huidig element vullen met inhoud van container
      elm.html(result);

      var t;
      var checkIfExecuted = function () {
          if (!extLoadExecuted) return;
          if (typeof callback == 'function') callback(result);
          clearInterval(t);
          extLoadExecuted = false;
        }
      t = setInterval(checkIfExecuted, 50);

    });

  }
  $.fn.shareButtons = function (shareUrl) {

    var container = $(this);

    if (!shareUrl) {
      alert('$.shareButtons(sharUrl): shareUrl is empty!');
      return;
    }

    if (shareUrl.substr(0, 7) != 'http://') {
      shareUrl = 'http://' + window.location.href.split('/')[2] + shareUrl;
    }

    if (container.children().length != 0) {
      return;
    }

    var createFacebookLike = function () {
        var likeLink = $('<iframe>', {
          'src': 'http://www.facebook.com/plugins/like.php?locale=nl_NL&href=' + encodeURIComponent(shareUrl) + '&layout=button_count&show_faces=true&width=20&action=like&colorscheme=light&height=65',
          'css': {
            'border': 'none',
            'overflow': 'hidden',
            'width': '120px',
            'height': '20px'
          },
          'allowTransparency': 'true',
          'scrolling': 'no',
          'frameborder': '0'
        }).appendTo(container);

      }
    var createTwitterTweet = function () {

        var tweetLink = $('<a>', {
          'data-count': "horizontal",
          'data-text': "Agendaitem",
          'data-url': shareUrl,
          'class': "twitter-share-button",
          'href': "http://twitter.com/share",
          'text': 'Tweet'
        }).appendTo(container);

        //var tweet_button = new twttr.TweetButton( tweetLink.get(0) );
        //tweet_button.render();
        $.getScript('http://platform.twitter.com/widgets.js');
      }
    createFacebookLike();
    createTwitterTweet();
  }


	$.fn.placeholder = function(placeholderText) {
	
		var elm = this;
		elm.addClass('hasPlaceholder');
		elm.attr('placeholder',placeholderText);
		elm.val(elm.attr('placeholder'));     
		
		elm.keyup( function(e) {
			elm.updatePlaceholder();
		})
		elm.focus( function(e) {
			if(elm.val() == elm.attr('placeholder')) {
				elm.val('');
			}
		})
		elm.blur( function(e) {
			if(elm.val() == '') {
				elm.val(elm.attr('placeholder'));
				elm.removeClass('Active');
			}
		})
	}
		
	$.fn.updatePlaceholder = function() {
		this.each(function(index,elm){
			elm = $(elm);
			if(elm.val() != elm.attr('placeholder')) {
				elm.addClass('Active');
			} else {
				elm.removeClass('Active');
			}
		})
	}

})(jQuery);

$(document).ready(function () {

	// nieuws, portfolio, agenda filter (rechts)		
	/*
	$('#newsArchive a').click(function () {
		$(this).parent().find('a').css('background', 'none');
		$(this).css('background', '#fbe327');
	});
	*/
	
	// nieuws
	$('#newsAjaxContent').getPageAjax('/nieuws/?', '#newsArchive', '#newsTags', '');

	// agenda
	$('#eventAjaxContent').getPageAjax('/agenda/?', '#eventArchive', '#agendaEventDisiplines', '#agendaEventTypes');
	//$('#eventAjaxContent').agenda({agendaEventTypes: '#agendaEventTypes input:checkbox', agendaEventDisiplines: '#agendaEventDisiplines input:checkbox'});

	// subsidie aanvraag
	$('#aanvragen').getPageAjax('/subsidies/toegekende-aanvragen/?', '', '#subsidieTags', '');

	//portfolio
	$('#portfolioAjaxContent').getPageAjaxPortfolio('/portfolio/?', '#eventArchive', '#portfolioTags');

	// search tekst
	$('.searchBoxInput').placeholder('zoeken in de hele site');

})


var extLoadExecuted = false;
