$( document ).ready( function() {
	yer.init();
} );

$( window ).load( function() {
	yer.load();
} );

var yer = {
	opacitylayer: null,
	currentPopover: null,
	navTimer: null,
	logCount: 0,
	
	/* Constructor */
	init: function() {
		this.pagenav = document.getElementById("page-nav");
		this.filters = $("ul.filter");
		this.boxes = $(".box-toggle");
		this.remoteTogglesOpen = $("a.remote-toggle-open");
		this.contentSelectNodes = $(".contentselect");
		this.enlargedReadmoreLists = $("ul.enlarge-readmore, ol.enlarge-readmore");
		this.imageboxes = $("div.imagebox, div.imagebox-left, div.imagebox-right");
		this.popovers = $("div.popover");
		this.popoverBtns = $("a.open-popover");
		this.pagecenter = $("div.page-center");
		this.redirectSearchBtns = $("a.redirectsearch");
		
		this.enhanceUI();
		this.bindEvents();
	},
	
	load: function() {
		this.fixImageboxText(this.imageboxes);
	},
	
	enhanceUI: function(){
		yer.popoverparent = document.body;
		var forms = $('form');
		if (forms.length > 0) {
			yer.popoverparent = forms[0];
		}
		this.opacitylayer = document.createElement("div");
		this.opacitylayer.id = "opacitylayer";
		$(yer.popoverparent).append(this.opacitylayer);
		for (var i=0; i<this.popovers.length; i++){
			$(this.popovers[i]).remove().appendTo(yer.popoverparent);
			if ($(this.popovers[i]).hasClass("openpopover") && this.currentPopover == null){
				var e = new Object();
				e.data = new Object();
				e.data.root = this;
				e.data.popoverid = this.popovers[i].id;
				this.openPopover(e);
			}
			else if($(this.popovers[i]).hasClass("openpopover")){
				$(this.popover[i]).removeClass("openpopover");
			}
		}
		$("div.form-item.layerlabel input, input.layerlabel").each(function(){
			if (this.value != "") {
				yer.hideLabel(this);
			}
			$(this).bind("blur",yer.blurLabel);
			$(this).bind("focus",yer.focusLabel);
		});
		var cmsPopovers = $("div.createpopover");
		for (var i=0; i<cmsPopovers.length; i++) {
			if (cmsPopovers[i].id && cmsPopovers[i].id != " ") {
				var popoverLinks = $("a[href='#"+cmsPopovers[i].id+"']");
				if(popoverLinks.length > 0){
					this.createPopover(cmsPopovers[i]);
					for (var j=0; j<popoverLinks.length; j++) {
						$(popoverLinks[j]).bind("click", {root: this}, this.openPopover);
					}
				}
			}
		}
		$("a.print-page").bind("click", yer.printPage);
	},
	
	printPage: function(e){
		if( e.preventDefault ) {
			e.preventDefault();
		} else {
			e.cancelBubble = true;
		}
		window.print();
		return false;
	},
	
	fixImageboxText:function(imageboxes){
		for (var i = 0; i < imageboxes.length; i++) {
			var image = $("img", imageboxes[i]);
			var paragraphs = $("p", imageboxes[i]);
			if (image.length > 0){
				for (var j = 0; j < paragraphs.length; j++) {
					paragraphs[j].style.width = image[0].offsetWidth.toString() + "px";
				}
			}
		}
	},
	
	focusLabel:function(e) {
		if (typeof(e.target)!="undefined") {
			yer.hideLabel(e.target);
		}
	},

	blurLabel:function(e) {
		if (typeof(e.target)!="undefined") {
			yer.updateLabel(e.target);
		}
	},
	
	hideLabel:function(field) {
		var label = this.getLabelByField(field);
		if (typeof(label)!="undefined") {
			$(label).hide();
		}
	},

	updateLabel:function(field) {
		var label = this.getLabelByField(field);
		if (typeof(label)!="undefined") {
			if ($(field).val() == "") {
				$(label).show();
			}
			else {
				$(label).hide();
			}
		}
	},
		
	getLabelByField:function(field) {
		return $("label[for=" + field.id + "]");
	},
	
	bindEvents: function() {
		this.bindNavEvents();
		this.bindFilterToggles();
		this.bindBoxToggles();
		this.bindContentSelect();
		this.bindEnlargedReadmoreLists();
		this.bindPopoverBtns();
		this.bindRedirectSearch();
	},
	
	bindNavEvents: function() {
		if(this.pagenav){
			var navitems = $(">li", this.pagenav);
			for (var i=0; i<navitems.length; i++){
				if ($(navitems[i]).hasClass("selected")){
					this.selectedSubNav = navitems[i];
				}
				var navspan = $(">span:first-child", navitems[i]);
				navspan.bind("mouseover", this.overNav);
				navspan.bind("mouseout", this.outNav);
				navspan.bind("click", this.clickNav);
				var subnavlists = $("ul", navitems[i]);
				for (var j=0; j<subnavlists.length; j++) {
					$(subnavlists[j]).bind( "mouseover", yer.clearNavTimer);
					$(subnavlists[j]).bind( "mouseout", yer.setNavTimer);
				}
			}
		}
	},
	
	overNav: function(e) {
		var targ = getEventTarget(e);
		if (targ) {
			targ.parentNode == yer.currentSubNav ? yer.clearNavTimer : $(targ.parentNode).addClass("hover");
		}
	},
	
	outNav: function(e) {
		yer.setNavTimer();
		var targ = getEventTarget(e);
		if (targ) {
			$(targ.parentNode).removeClass("hover");
		}
	},
	
	clickNav: function(e) {
		yer.clearNavTimer();
		var targ = getEventTarget(e);
		if (targ) {
			if (yer.selectedSubNav) {
				$(yer.selectedSubNav).addClass("selectedhidden");
			}
			if (yer.currentSubNav) {
				$(yer.currentSubNav).removeClass("opened");
			}
			$(targ.parentNode).removeClass("selectedhidden");
			$(targ.parentNode).removeClass("hover");
			$(targ.parentNode).addClass("opened");
			yer.currentSubNav = targ.parentNode;
		}
	},
	
	resetNav: function(){
		yer.navTimer = null;
		if (yer.currentSubNav) $(yer.currentSubNav).removeClass("opened");
		if (yer.selectedSubNav) $(yer.selectedSubNav).removeClass("selectedhidden");
	},
	
	setNavTimer: function() {
		if (!yer.navTimer) yer.navTimer = setTimeout("yer.resetNav()",1000);
	},
	
	clearNavTimer: function() {
		clearTimeout(yer.navTimer);
		yer.navTimer = null;
	},
	
	bindFilterToggles: function() {
		for (var i=0; i < this.filters.length; i++){
			var items = $(">li", this.filters[i]);
			for (var j=0; j < items.length; j++){
				var toggleSpan = $("span:first-child", items[j]);
				if (toggleSpan[0]){
					var tmpBtn = $("<span tabindex=\"0\">"+toggleSpan[0].innerHTML+"</span>");
					$(toggleSpan[0]).before(tmpBtn);
					$(toggleSpan[0]).remove();
					tmpBtn.bind( "click", {element: items[j], classname: "opened"}, this.toggle);
					tmpBtn.bind( "keydown", {element: items[j], classname: "opened"}, function(e){if (e.keyCode == 13) {yer.toggle(e);}});
				}
			}
		}
	},
	
	bindBoxToggles: function() {
		for (var i=0; i < this.boxes.length; i++){
			var toggles = $(".toggle", this.boxes[i]);
			var toggleContent = $(".toggle-content", this.boxes[i]);
			if(toggleContent.length > 0){
				for (var j=0; j < toggles.length; j++){
					$(toggles[j]).bind( "click", {element: this.boxes[i], classname: "box-toggle-opened"}, this.toggle);
					$(toggles[j]).bind( "keydown", {element: this.boxes[i], classname: "box-toggle-opened"}, function(e){if (e.keyCode == 13) {yer.toggle(e);}});
				}
			}
		}
		for (var i = 0; i < this.remoteTogglesOpen.length; i++) {
			var href = this.remoteTogglesOpen[i].href;
			if(href){
				var hrefSplit = href.split("#");
				if (hrefSplit.length > 0){
					var boxID = hrefSplit[hrefSplit.length-1];
					var box = document.getElementById(boxID);
					if(box){
						$(this.remoteTogglesOpen[i]).bind( "click", function(){$(box).addClass("box-toggle-opened")});
					}
				}
			}
		}
	},
	
	bindContentSelect: function(){
		for (var i = 0; i < this.contentSelectNodes.length; i++) {
			var contentSelect = new yer.contentSelect();
			contentSelect.init();
		}
	},
	
	bindEnlargedReadmoreLists: function() {
		for (var i=0; i < this.enlargedReadmoreLists.length; i++){
			var items = $(">li" ,this.enlargedReadmoreLists[i]);
			for (var j=0; j < items.length; j++){
				var readmore = $("a.read-more, a-read-more-bottom", items[j]);
				if (readmore.length > 0) {
					var href = readmore[0].href;
					if($(items[j]).hasClass("box-focusframe")){
						var itemheight = items[j].offsetHeight;
						if (itemheight && itemheight < 90) {
							$(items[j]).bind("mouseover", function(){$(this).addClass("box-focusframe-compacthover")});
							$(items[j]).bind("mouseout", function(){$(this).removeClass("box-focusframe-compacthover")});
						}
						else {
							$(items[j]).bind("mouseover", function(){$(this).addClass("box-focusframe-hover")});
							$(items[j]).bind("mouseout", function(){$(this).removeClass("box-focusframe-hover")});
						}
						$(items[j]).bind("click", {href: href}, function(e){window.location = e.data.href;});
					}
				}
			}
		}
	},
	
	bindPopoverBtns: function(){
		for (var i=0; i < this.popoverBtns.length; i++){
			$(this.popoverBtns[i]).bind("click", {root: this}, this.openPopover);
		}
	},
	
	createPopover: function(elmt){
		var popoverheaders = $("h1.popoverheader, h2.popoverheader, h3.popoverheader, h4.popoverheader, h5.popoverheader, h6.popoverheader");
		var popoverheadertext = popoverheaders[0] ? popoverheaders[0].innerHTML : null;
		$(popoverheaders[0]).remove();
		var popoverheader = "<div class=\"popovertop\">"
		if (popoverheadertext) { popoverheader += "<h2>" + popoverheadertext + "</h2>" };
		popoverheader += "<a href=\"\" class=\"close\">Sluit venster</a></div>";
		
		var elmtChildren = $(elmt).children();
		if (elmtChildren.length > 0){
			$(popoverheader).insertBefore($(elmt).children()[0]);
		}
		else {
			$(popoverheader).appendTo(elmt);
		}
		
		var elmtid = elmt.id;
		$(elmt).removeAttr("id");
		elmt.className = "generated-popovercontent";
		var outerdiv = document.createElement("div");
		outerdiv.className = "popover";
		outerdiv.id = elmtid;
		$(elmt).remove().appendTo(outerdiv);
		$(outerdiv).appendTo(yer.popoverparent);
		
		/*if ($(this.popovers[i]).hasClass("openpopover") && this.currentPopover == null){
			var e = new Object();
			e.data = new Object();
			e.data.root = this;
			e.data.popoverid = this.popovers[i].id;
			this.openPopover(e);
		}
		else if($(this.popovers[i]).hasClass("openpopover")){
			$(this.popover[i]).removeClass("openpopover");
		}*/
	},
	
	openPopover: function(e){
		if( e.preventDefault ) {
			e.preventDefault();
		} else {
			e.cancelBubble = true;
		}
		var popoverid = null;
		if (this.href){
			var split = this.href.split("#");
			var popoverid = split[split.length-1];
		}
		else if (e.data && e.data.popoverid){
			popoverid = e.data.popoverid;
		}
		var popover = document.getElementById(popoverid);
		if(popover && e.data && e.data.root){
			if (e.data.root.currentPopover){
				$(e.data.root.currentPopover).hide();
			}
			if(e.data.root.opacitylayer && e.data.root.currentPopover == null){
				yer.setOpacityLayer();
				
				var newtop = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
				newtop = newtop ? newtop : 0;
				$(popover).children()[0].style.marginTop = (newtop + 140) + "px";
				
				if (typeof(hideDropDowns) != 'undefined'){
					var pagecenter = $("div.page-center");
					if (pagecenter) {hideDropDowns(pagecenter[0])}
				}
				if ($(popover).hasClass("openpopover")){
					$(popover).removeClass("openpopover");
					$(popover).show();
					$(e.data.root.opacitylayer).show();
					$(e.data.root.opacitylayer).css("opacity","0.5");
					$(document).bind("click", {root: yer}, yer.closeCurrentPopover);
				}
				else {
					if (typeof(hideDropDowns) != 'undefined'){
						hideDropDowns(popover);
					}
					$(e.data.root.opacitylayer).css("opacity","0");
					$(e.data.root.opacitylayer).show();
					$(e.data.root.opacitylayer).fadeTo(500, 0.5);
					setTimeout(function(){$(popover).fadeIn(500, yer.setOpacityLayer(popover))},500);
					var imageboxes = $("div.imagebox, div.imagebox-left, div.imagebox-right", popover);
					setTimeout(function(){yer.fixImageboxText(imageboxes)},500);
					setTimeout(function(){$(document).bind("click", {root: yer}, yer.closeCurrentPopover)}, 1000);
					if (typeof(hideDropDowns) != 'undefined'){
						setTimeout(function(){hideDropDowns(popover, false)}, 1000);
					}
				}
				if (popoverid == "mailafriend" && this.href){
					var vacatureNode = this.parentNode.parentNode.parentNode;
					var vacatureIdInput = $("input.vacatureid", vacatureNode);
					if (vacatureIdInput.length > 0) {
						var vacatureselect = $(".mail-vacature", popover);
						if(vacatureselect.length > 0 ){
							for (var i=0; i < vacatureselect[0].length; i++) {
								if (vacatureselect[0][i].value == vacatureIdInput[0].value) {
									vacatureselect[0][i].selected = true;
									break;
								}
							}
						}
						//set mailafreind select
					}
				}
			}
			e.data.root.currentPopover = popover;
		}
		return false;
	},
	
	closeCurrentPopover: function(e){
		if (e.target) {
			targ = e.target;
		}
		else if (e.srcElement) {
			targ = e.srcElement;
		}
		if (targ.nodeType == 3) {
			targ = targ.parentNode;
		}
		if(e.data && e.data.root && e.data.root.currentPopover){
			if (!isChildOf(targ, e.data.root.currentPopover) || $(targ).hasClass("close")){
				if( e.preventDefault ) {
					e.preventDefault();
				} else {
					e.cancelBubble = true;
				}
				if (typeof(hideDropDowns) != 'undefined'){
					hideDropDowns(e.data.root.currentPopover);
				}
				$(document).unbind("click", yer.closeCurrentPopover);
				$(e.data.root.currentPopover).fadeOut(250);
				if(e.data.root.opacitylayer){
					setTimeout(
						function(){
							$(e.data.root.opacitylayer).fadeOut(500, function(){
								if (typeof(hideDropDowns) != 'undefined'){
									var pagecenter = $("div.page-center");
									if (pagecenter) {hideDropDowns(pagecenter[0], false)}
								}
							})
						},250);
				}
				if (typeof(hideDropDowns) != 'undefined'){
					setTimeout(function(){hideDropDowns(e.data.root.currentPopover, false)}, 500);
				}
				e.data.root.currentPopover = null;
				return false;
			}
		}
	},
	
	setOpacityLayer: function(compareElmt) {
		if(yer.opacitylayer) {
			var compareHeight = compareElmt ? $(compareElmt).height() : 0;
			var bodyHeight = $(document.body).height();
			yer.opacitylayer.style.height = (bodyHeight > compareHeight ? bodyHeight : compareHeight) + "px";
			//alert(yer.opacitylayer.style.height + " - " + $(yer.currentPopover).height());
		}
	},
	
	toggle: function(e) {
		if( e.preventDefault ) {
			e.preventDefault();
		} else {
			e.cancelBubble = true;
		}
		if (e.data && e.data.element) {
			var element = e.data.element;
			var classname = e.data.classname;
			$(element).hasClass(classname) ? $(element).removeClass(classname) : $(element).addClass(classname);
		}
		return false;
	},
	
	bindRedirectSearch: function() {
		for (var i = 0; i < this.redirectSearchBtns.length; i++) {
			var href = this.redirectSearchBtns[i].href;
			var hrefsplit = href.split("#");
			if (hrefsplit.length > 0) {
				var inputID = hrefsplit[hrefsplit.length - 1];
				var inputElmt = document.getElementById(inputID);
				if(inputElmt){
					$(inputElmt).bind("keydown", {inputElmt: inputElmt}, this.redirectSearch);
					$(this.redirectSearchBtns[i]).bind("click", {inputElmt: inputElmt}, this.redirectSearch);
				}
			}
		}
	},
	
	redirectSearch: function(e) {
		var targ = getEventTarget(e);
		if (targ != e.data.inputElmt){
			if( e.preventDefault ) {
				e.preventDefault();
			} else {
				e.cancelBubble = true;
			}
		}
		if (e.data.inputElmt && e.data.inputElmt.value != "" && ((targ == e.data.inputElmt && e.keyCode == 13) || targ != e.data.inputElmt)) {
			document.location='?search='+e.data.inputElmt.value;
			if( e.preventDefault ) {
				e.preventDefault();
			} else {
				e.cancelBubble = true;
			}
			return false;
		}
		if (targ != e.data.inputElmt){
			return false;
		}
	}
}

yer.contentSelect = function(node){
	this.node = node;
	this.current = null;
	return this;
}

yer.contentSelect.prototype.init = function(){
	this.options = $(".contentselect-options a", this.node);
	if(this.options.length > 0){
		for (var i = 0; i < this.options.length; i++) {
			var href = this.options[i].href;
			var hrefsplit = href.split("#");
			if (hrefsplit.length > 0) {
				var contentID = hrefsplit[hrefsplit.length - 1];
				var contentNode = document.getElementById(contentID);
				if(contentNode){
					$(this.options[i]).bind("click", {root: this, contentNode: contentNode}, this.openContent);
				}			
			}
		}
	}
}

yer.contentSelect.prototype.openContent = function(e){
	if( e.preventDefault ) {
		e.preventDefault();
	} else {
		e.cancelBubble = true;
	}
	if(e.data.root.current){
		$(e.data.root.current).hide();
	}
	$(e.data.contentNode).show();
	e.data.root.current = e.data.contentNode;
	return false;
}

function isChildOf(childNode, parentNode) {
	if (parentNode && parentNode.childNodes) {
		for (var i=0; i<parentNode.childNodes.length; ++i) {
			if (parentNode.childNodes[i] == childNode) {
				return true;
			}
			else if(isChildOf(childNode, parentNode.childNodes[i])){
				return true;
			}
		}
	}	
	return false;
}

function getEventTarget(e){
	if (e.target) {
		return e.target;
	}
	else if (e.srcElement) {
		return e.srcElement;
	}
	if (targ.nodeType == 3) {
		return targ.parentNode;
	}
	return null;
}