$(function() {

	// open images external links in new window
	$("a[href*='http://']:not([href*='" + location.hostname + "'])," +
		"a[href*='https://']:not([href*='" + location.hostname + "'])," +
		"a[href$='.jpg']," +
		"a[href$='.jpeg']," +
		"a[href$='.gif']," +
		"a[href$='.png']")
			.addClass('external')
			.attr('target', '_blank')
			.attr('title', 'Open in nieuw venster');

	// remove data-fiber-data from main menu
	$('#mainmenu ul, #mainmenu a').each(function(i, main_menu_item) {
		$(main_menu_item).removeAttr('data-fiber-data');
	});

	// prefill search field with label
	$('#search-input').search();

	// replace submit button in IE7 with a div, easier to style
	if ($('html').hasClass('ie7')) {
		$('#search-submit').replaceWith('<div id="search-submit" />');
	}

	// set main wrapper margin-top start position to avoid 'jumpy' behavior
	if (!$(document.body).hasClass('tpl-home') && !$(document.body).hasClass('tpl-project-list')) {
		$('#wpr-main').css('margin-top', 40);
	}

	// remove "current" markup for submenu
	$('#submenu').find('.current').slice(0, -1).removeClass('current');

	// scroll fade animation of callout content
	var calloutContent = $('#callout-content');
	if (calloutContent.length) {
		var changeOffset = 176;
		$(window).bind('scroll', function(event) {
			if ($(window).scrollTop() < changeOffset) {
				calloutContent.css('opacity', (changeOffset - $(window).scrollTop()) / changeOffset);
			} else {
				calloutContent.css('opacity', 0);
			}
		});
		$(window).trigger('scroll'); // trigger once, necessary when user reloads page
	}

	// remove margin on last content items for IE7/8
	if ($('html').hasClass('ie7') || $('html').hasClass('ie8')) {
		$('.tpl-newsitem-list .content .newsitem:last-child').css('margin-bottom', 0);
		$('.tpl-newsitem-detail #content .content p:last-child').css('margin-bottom', 0);
	}

	// print buttons
	$('.print a').css({
		visibility: 'visible'
	}).click(function(event) {
		event.preventDefault();
		window.print();
	});

	// complex styling for tpl-workarea-list
	if ($(document.body).hasClass('tpl-workarea-list')) {
		// truncate lines of workarea descriptions, so all boxes are equal height
		$('.workarea p:not(.read-more)').truncateLines({
			lines: 4
		});
	}

	// complex styling for tpl-workarea-detail
	if ($(document.body).hasClass('tpl-workarea-detail')) {
		// fix fonts
		$('#content .content p:first-child').addClass('intro');
		$('#content .content a').wrapInner('<span class="underline" />');

		// shorten main content text
		var contentParagraphs = $('#content .content p');
		if (contentParagraphs.length > 3) {
			var readMoreParagraph = $('<p class="read-more" /p>');
			var readMoreLink = $('<a href="#lees-meer"><span class="underline">Lees meer</span> +</a>');
			readMoreParagraph.append(readMoreLink);
			contentParagraphs.eq(2).after(readMoreParagraph);
			hiddenParagraphs = readMoreParagraph.nextAll().hide();
			readMoreLink.click(function(event) {
				event.preventDefault();
				readMoreLink.fadeOut(400, function() {
					hiddenParagraphs.fadeIn(1000);
				});
			});
		}

		// remove margin of related publications on the last row
		var relatedPublications = $('.related-publications .publication');
		if (relatedPublications.length % 2 === 0) {
			relatedPublications.slice(-2).css('margin-bottom', 0);
		} else {
			relatedPublications.slice(-1).css('margin-bottom', 0);
		}
	}

	// faceted navigation behaviour
	if ($('#faceted-navigation').length) {
		var facetedMenus = $('#faceted-navigation ul');
		facetedMenus.each(function(index, menu) {
			menu.items = $(menu).children('li');
			if (menu.items.length > 8) {
				menu.hidedItems = $(menu.items).slice(8);
				if ($(menu).find('li.active').length && $.inArray($(menu).find('li.active')[0], menu.items) > 7) {
					// do not collapse menu if there is an active filter below the top 8 items
				} else {
					menu.hidedItems.addClass('hide');
					var moreLink = $('<a href="#"><span>Toon alles</span> +</a>');
					moreLink.click(function(event) {
						event.preventDefault();
						menu.hidedItems.removeClass('hide');
						$(this).hide();
					});
					$(menu).after(moreLink);
				}
			}
		});
	}

	// complex styling for tpl-publication-list
	if ($(document.body).hasClass('tpl-publication-list')) {
		// set equal height of publication boxes for each "row"
		var publications = $('.publication'), subsetPubs;
		for (var i = 0; i < publications.length; i = i + 3) {
			if (publications[i + 3]) {
				subsetPubs = publications.slice(i, i + 3);
			} else {
				subsetPubs = publications.slice(i, publications.length);
			}
			subsetPubs.height(subsetPubs.getMaxHeight());
		}
		publications.find('.download, .link').css({
			position: 'absolute',
			bottom: 20
		});
		var anchorLink = window.location.hash;
		if (anchorLink) {
			anchorLink = anchorLink.slice(1, anchorLink.length);
			selectedPublication = publications.filter('.' + anchorLink);
			selectedPublication.effect('highlight', {}, 1000);
		}
	}

	// complex styling for tpl-project-detail
	if ($(document.body).hasClass('tpl-project-detail')) {
		// fix fonts
		$('#content .content p:first-child').addClass('intro');

        var MAX_PROJECTS = 6;
		var relatedProjectsLinks = $('.related-projects .faceted-navigation ul li a');
		var relatedProjectsLinksSelected = $('.related-projects .faceted-navigation ul li a.selected');
		var relatedProjectsGroups = $('.related-projects .project-group');
		var relatedProjects = $('.related-projects .project-group .project');
		var relatedProjectsMoreLinks = $('.related-projects .view-all');

		relatedProjectsLinks.each(function(index, elem) {
			$(elem).click(function(event) {
				var currentProjects;

				event.preventDefault();
				relatedProjectsGroups.hide();
				relatedProjects.hide();
				relatedProjectsMoreLinks.hide();

				if ($(this).hasClass('work_area-group')) {
				    $('.related-projects .project-group.workarea').show();
				    currentProjects = $('.related-projects .project-group .' + elem.id);
				    $('.related-projects .view-all.' + elem.id).show();
			    }

				if ($(this).hasClass('region-group')) {
				    $('.related-projects .project-group.region').show();
				    currentProjects = $('.related-projects .project-group.region .project');
				    $('.related-projects .view-all.region').show();
			    }

				currentProjects.show();
				if (currentProjects.length > MAX_PROJECTS) {
            		currentProjects.slice(MAX_PROJECTS).hide();
        		}

				relatedProjectsLinks.removeClass('selected');
				$(this).addClass('selected');
			});
		});

		$('.related-projects .wpr-faceted-navigation').show();

        if(relatedProjectsLinksSelected.length == 0) {
            relatedProjectsLinks.first().addClass('selected');
			$('.related-projects .project-group .project').hide();
    		$('.related-projects .project-group .' + relatedProjectsLinks.first().attr('id')).show();
    		$('.related-projects .project-group .' + relatedProjectsLinks.first().attr('id')).slice(MAX_PROJECTS).hide();
    		$('.related-projects .view-all.' + relatedProjectsLinks.first().attr('id')).show();
        }

		// remove margin of related publications on the last row
		var relatedPublications = $('.related-publications .publication');
		if (relatedPublications.length % 2 === 0) {
			relatedPublications.slice(-2).css('margin-bottom', 0);
		} else {
			relatedPublications.slice(-1).css('margin-bottom', 0);
		}
	}

	// complex styling for tpl-newsitem-detail
	if ($(document.body).hasClass('tpl-newsitem-detail')) {
		$('#content .content p:not(.meta)').eq(0).addClass('intro');
	}

    // change all position fixed to position absolute for iOS 5.x devices
	if (navigator.userAgent.match(/(iPad|iPhone);.*CPU.*OS 5_\d/i)) {
	    $('.fixed').css('position', 'absolute');
    }
});

// clear search inputs
$.fn.search = function() {
	return this.each(function() {
		var saved_value = this.value;
		this.defaultValue = 'zoek';
		this.value = saved_value ? saved_value : this.defaultValue;

		$(this)
			.focus(function() {
				if (this.value == this.defaultValue) {
					this.value = '';
				}
			})
			.blur(function() {
				if (this.value === '') {
					this.value = this.defaultValue;
				}
			})
			.parents('form').submit(function(event) {
				if (this.q.value === '' || this.q.value == this.q.defaultValue) {
					event.preventDefault();
				}
			});
	});
};

// return max height of matched elements
$.fn.getMaxHeight = function() {
	var maxHeight = 0;
	this.each(function(index, elem) {
		if ($(elem).height() > maxHeight) {
			maxHeight = $(elem).height();
		}
	});
	return maxHeight;
};

// truncate lines
$.fn.truncateLines = function(options) {
	options = $.extend($.fn.truncateLines.defaults, options);

	return this.each(function(index, container) {
		container = $(container);
		var containerLineHeight = parseInt(container.css('line-height'), 10);
		var maxHeight = options.lines * containerLineHeight;
		var truncated = false;
		var truncatedText = $.trim(container.text());
		var overflowRatio = container.height() / maxHeight;
		if (overflowRatio > 2) {
			truncatedText = truncatedText.substr(0, parseInt(truncatedText.length / (overflowRatio - 1), 10) + 1); // slice string based on how much text is overflowing
			container.text(truncatedText);
			truncated = true;
		}
		var oldTruncatedText; // verify that the text has been truncated, otherwise you'll get an endless loop
		while (container.height() > maxHeight && oldTruncatedText != truncatedText) {
			oldTruncatedText = truncatedText;
			truncatedText = truncatedText.replace(/\s.[^\s]*\s?$/, ''); // remove last word
			container.text(truncatedText);
			truncated = true;
		}
		if (truncated) {
			truncatedText = options.ellipsis ? truncatedText + ' ' + options.ellipsis : truncatedText;
			container.text(truncatedText);
			if (container.height() > maxHeight) {
				truncatedText = truncatedText.replace(/\s.[^\s]*\s?...$/, ''); // remove last word and ellipsis
				truncatedText = options.ellipsis ? truncatedText + ' ' + options.ellipsis : truncatedText;
				container.text(truncatedText);
			}
		}
	});
};

$.fn.truncateLines.defaults = {
	lines: 8,
	ellipsis: '...'
};

$(window).load(function () {
	// set main wrapper margin-top, except on pages with content sliders
	if (!$(document.body).hasClass('tpl-home') && !$(document.body).hasClass('tpl-project-list')) {
		$('#wpr-main').css('margin-top', parseInt($('#header .content').css('margin-top'), 10) + $('#header h1').height() - 22);
	}
});

