/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getElementsByClassName/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

var _blocklinks = {
	special: ['external','anchor','download'],
	init: function () {
		var lists = getElementsByClassName('block-link');
		for (var i=0;i<lists.length;i++) {

			var ul = lists[i].parentNode;
			if (!ul.done) {
				ul.className += ' js-active';
				ul.done = true;
			}
			var classes = lists[i].className;
			var classesHover = classes + ' hover';
			for (var j=0;j<this.special.length;j++) {
				if (classes.indexOf(this.special[j]) != -1) {
					classesHover = classes.replace(this.special[j],this.special[j]+'hover');
					break;
				}
			}
			lists[i].origClass = classes;			
			lists[i].hoverClass = classesHover;
			lists[i].onmouseover = function () {
				this.className = this.hoverClass;
			}
			lists[i].onmouseout = function () {
				this.className = this.origClass;
			}
			lists[i].onclick = function () {
				//Use onclick code if available, otherwise, use the href
				if(this.getElementsByTagName('a')[0].onclick){
					this.getElementsByTagName('a')[0].onclick();
				}else{
					var href = this.getElementsByTagName('a')[0].href;
					location.href = href;
				}
				return false;
			}
		}
	}
}


var inits = [
	'blocklinks'
];

function initializeAll() {
	for (var i=0;i<inits.length;i++) {
		if (window[inits[i]])
			window[inits[i]].init();
	}
}


/* DOMCONTENTREADY */
function ContentReady() {
	// quit if this function has already been called
	if (arguments.callee.done) return;

	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;

	// kill the timer
	if (_timer) clearInterval(_timer);

	// do stuff
	initializeAll();
};

/* for Mozilla/Opera9 */
if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", ContentReady, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			ContentReady(); // call the onload handler
		}
	};
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
	var _timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			ContentReady(); // call the onload handler
		}
	}, 10);
}

/* for other browsers */
window.onload = ContentReady;

$(document).ready(function() {
	
	$(".hide-js").hide();
	$(".form-field-info-message").hide();
	$('a.form-field-info-message-hint').css({'display':'block'});
	$('a.form-field-info-message-close').show({'display':'block'});
	
	/* custom div-dialog */
	$(".open-dialog").click(function(event){
		event.preventDefault();
		$("#dialog").show();
		$(".dialog-bg").show();
	});
	
	$(".dialog-bg").click(function(){
		$("#dialog").hide();
		$(".dialog-bg").hide();
	});
	
	$(".close-dialog").click(function(event){
		event.preventDefault();
		$("#dialog").hide();
		$(".dialog-bg").hide();
	});
	
	// open links in new window for xhtml compliance
	$('a.new-window').click(function(){        
		window.open(this.href);        
		return false;    
	});
	
	// show hints for form
	$('a.form-field-info-message-hint').click(function(){        
		$(this).parent("div").next(".form-field-info-message").slideToggle();      
		return false;
	},
	function(){
			
			$(this).parent("div").next(".form-field-info-message").slideToggle();      
			return false;
			
	});
	
	// close hint box form
	$('a.form-field-info-message-close').click(function(){        
		$(this).parents(".form-field-info-message").slideToggle();      
		return false;    
	});
	
	if($('#banners-rotate .items li').length > 1) {
	
		// banner carousel
		var $controlsWidth = $(".controls").width();
		var $canvasWidth = $("#banners-rotate").width();
		var $marginLeft = ($canvasWidth/2) - ($controlsWidth/2);
		$(".controls").css({"marginLeft" : $marginLeft});
		
		/* carousel start */
		var slideBanners =  setInterval( "slideSwitch()", 6000 );
		
		$('#banners-rotate').hover(function() {
	    clearInterval(slideBanners);
		},
		function() {
	    	slideBanners =  setInterval( "slideSwitch()", 6000 );
		});
		
		$('.controls li').click(function() {
			if(!($(this).hasClass("active"))){
				$index = $(this).index();
				$('.controls li.active').removeClass('active');
				$(this).addClass("active");
				
				var $active 	= $('#banners-rotate ul.items li.active');
				$active.addClass('last-active');
				
				$('#banners-rotate .items li').eq($index).css({opacity: 0.0})
		        	.addClass('active')
		        	.animate({opacity: 1.0}, 500, function() {
		            	$active.removeClass('active last-active');
			    });
			}
			
		},
		function() {
	    	slideBanners =  setInterval( "slideSwitch()", 6000 );
		});
		
		$("#banners-rotate .next").click(function(){
			slideSwitch(null);
		});
		
		$("#banners-rotate .prev").click(function(){
			slideSwitch("prev");
		});
	
	}
		
	// projects gallery carousel
	var $gallControlsWidth = $(".image-controls").width();
	var $gallCanvasWidth = $("#project-gallery").width();
	var $gallMarginLeft = ($gallCanvasWidth/2) - ($gallControlsWidth/2);
	$(".image-controls").css({"marginLeft" : $gallMarginLeft});

	$('.image-controls li').click(function() {
		if(!($(this).hasClass("active"))){
			$index = $(this).index();
			$('.image-controls li.active').removeClass('active');
			$(this).addClass("active");
			
			var $active 	= $('#project-gallery ul.items li.active');
			$active.addClass('last-active');
			
			$('#project-gallery .items li').eq($index).css({opacity: 0.0})
	        	.addClass('active')
	        	.animate({opacity: 1.0}, 500, function() {
	            	$active.removeClass('active last-active');
		    });
		}
		
	});
	
	$("#project-gallery .next").click(function(){
		slideImages(null);
	});
	
	$("#project-gallery .prev").click(function(){
		slideImages("prev");
	}); 
	
	// accordion 
	$('#subsidy-links ul li').click(function(){ 
		$('#subsidy-links ul li').removeClass("expanded");
		$(this).addClass("expanded");
		$('#subsidy-links ul li').not(".expanded").children("ul").slideUp();
		$(this).children("ul").slideDown();
	 });
	
	// initiate accordion
	$('#subsidy-links ul li ul').hide();
	$('#subsidy-links ul li.expanded ul').slideDown();
	
	// teaser-list expanding
	$('.teaser-list li').hover(function(){
		$(this).addClass("animating");
		$(this).addClass("active");
		$(this).children('.intro').stop().animate({'height': '211px'});
		},
		function(){
			$(this).removeClass("active");
			$(this).children('.intro').hide();
			$(this).children('.intro').stop().animate({'height': '0px'},"fast", function(){
				$(this).parent("li").removeClass("animating");
		});
	});
	
	$(function() {
		   $('.menuItem').hover( function(){
		      $(this).css('background-color', '#F00');
		   },
		   function(){
		      $(this).css('background-color', '#000');
		   });
		});
	
	// teaser-list click
	$('.teaser-list li').click(function(){
		$url = $(this).children('h3').children('a').attr("href");
		window.open($url,'_parent');
	});
	
	// glossary
	$("a.glossary").hover(function(e){
		var offset = $(this).offset();	
		var left = offset.left;
		var top = offset.top;
		var width = $(this).width();
		var glossaryid = $(this).attr("rel"); 
		var href = $(this).attr("href"); 
		var urlArr = href.split("#glossary-");
		var url = urlArr[0]+"/ajax?index="+urlArr[1];
		
		$("#glossary-balloon").removeClass("hidden");
		
		// get ajax content
		$.getJSON(url, function(data) {
			var content;
			if (data.glossary.substr(-3) === "...") {
				content = data.glossary + "<span class='more'>Klik op woord voor uitgebreide beschrijving</span>";
			} else {
				content = data.glossary;
			}
			$("#glossary-balloon .content").html(content);
			
			// calculated position balloon
			var balloonHeight = $("#glossary-balloon").height();
			top = top - balloonHeight - 10;
			left = left + (width/2) - 18;
			
			// set balloon
			$("#glossary-balloon").css('left', left);
			$("#glossary-balloon").css('top', top);
			
			if($("#glossary-balloon.hidden").length == 0) {
				// show balloon
				$("#glossary-balloon").fadeIn(300);
			}
		});
		
	},
		function(){
		$("#glossary-balloon").addClass("hidden");
		$("#glossary-balloon").hide();
	});
	
	$("a.glossary").mouseout(function(e){
		$("#glossary-balloon").hide();
	});
	
	// append glossary balloon if links exists
	if($("a.glossary").length > 0) {
		$('body').append('<div id="glossary-balloon"><div class="footer"><div class="content">&nbsp;</div></div></div>');		
	}
	
	// submit form on select change
	$("#division").change(function() {
	    $("#contact-form").submit();
	});
	
	
});

/* carousel transitions based on JQuery */
function slideSwitch(action) {

	var $listitem 	= $('#banners-rotate .nav-banners li.active');
	var $active 	= $('#banners-rotate ul.items li.active');
	
	if ( action == "prev" ) {
		
		var $prev =  $active.prev().length ? $active.prev() : $('#banners-rotate ul.items li:last');
		var $prevlist =  $listitem.prev().length ? $listitem.prev() : $('#banners-rotate .nav-banners li:last');
	
		$active.addClass('last-active');
		
		$prev.css({opacity: 0.0})
        	.addClass('active')
        	.animate({opacity: 1.0}, 500, function() {
            	$active.removeClass('active last-active');
	    });
		
		$prevlist.addClass('active');
		$listitem.removeClass('active');
		
	}
	
	else {
		
		if ( $active.length == 0 ) $active = $('#banners-rotate ul.items li:last');

    	var $next =  $active.next().length ? $active.next() : $('#banners-rotate ul.items li:first');	
		var $nextlist =  $listitem.next().length ? $listitem.next() : $('#banners-rotate .nav-banners li:first');

    	$active.addClass('last-active');

		$next.css({opacity: 0.0})
			.addClass('active')
			.animate({opacity: 1.0}, 500, function() {
				$active.removeClass('active last-active');
		});
		
		$nextlist.addClass('active');
		$listitem.removeClass('active');
		
	}
}

/* carousel transitions based on JQuery */
function slideImages(action) {

	var $listitem 	= $('#project-gallery .nav-images li.active');
	var $active 	= $('#project-gallery ul.items li.active');
	
	if ( action == "prev" ) {
		
		var $prev =  $active.prev().length ? $active.prev() : $('#project-gallery ul.items li:last');
		var $prevlist =  $listitem.prev().length ? $listitem.prev() : $('#project-gallery .nav-images li:last');
	
		$active.addClass('last-active');
		
		$prev.css({opacity: 0.0})
        	.addClass('active')
        	.animate({opacity: 1.0}, 500, function() {
            	$active.removeClass('active last-active');
	    });
		
		$prevlist.addClass('active');
		$listitem.removeClass('active');
		
	}
	
	else {
		
		if ( $active.length == 0 ) $active = $('#project-gallery ul.items li:last');

    	var $next =  $active.next().length ? $active.next() : $('#project-gallery ul.items li:first');	
		var $nextlist =  $listitem.next().length ? $listitem.next() : $('#project-gallery .nav-images li:first');

    	$active.addClass('last-active');

		$next.css({opacity: 0.0})
			.addClass('active')
			.animate({opacity: 1.0}, 500, function() {
				$active.removeClass('active last-active');
		});
		
		$nextlist.addClass('active');
		$listitem.removeClass('active');
		
	}
}
