﻿
//------------------------------------------------------------------------------------------------------------------
// Wp.Slideshow
//------------------------------------------------------------------------------------------------------------------
var menu_heights = {};
var menu_scroll = {};
Wp.SlideMenu = function(menu, cookieName) {
	var me = this;
	
	this.cookieName = cookieName;
	this.menu = menu;
	
	Wp.General.RegisterEvent(window, "load", function() {me.initMenu();} );
}

Wp.SlideMenu.prototype.SubmenuFromBullet = function(bullet) {
	var trBullet = bullet.parentNode.parentNode;
	if (trBullet) { 
		trBullet = trBullet.nextSibling.nodeType==1 ? trBullet.nextSibling : trBullet.nextSibling.nextSibling; 
	}
	if (trBullet) {
		return trBullet.getElementsByTagName("div")[0];		
	}
	return undefined;
}

Wp.SlideMenu.prototype.TitleFromBullet = function(bullet) {
	var trBullet = bullet.parentNode;
	if (trBullet) { 
		trBullet = trBullet.nextSibling.nodeType==1 ? trBullet.nextSibling : trBullet.nextSibling.nextSibling; 
	}
	if (trBullet) {
		return trBullet.getElementsByTagName("a")[0];		
	}
	return undefined;
}

Wp.SlideMenu.prototype.BulletFromTitle = function(title) {
	var trTitle = title.parentNode;
	if (trTitle) { 
		trTitle = trTitle.previousSibling.nodeType==1 ? trTitle.previousSibling : trTitle.previousSibling.previousSibling; 
	}
	if (trTitle) {
		return trTitle.getElementsByTagName("img")[0];		
	}
	return undefined;
}

Wp.SlideMenu.prototype.initMenu = function() {
	var me = this;
	this.menu = $(this.menu);
	var cookies = document.cookie.split(";");
	var cookieValue = "";
	var bullets = Wp.General.GetElementsByClass(this.menu, "menu_bullet");

	var selectedMenu = "";

	for (var i = 0; i < bullets.length; i++) {
		bullets[i].id = this.menu.id + "_" + i + "_control";
		this.SubmenuFromBullet(bullets[i]).id = this.menu.id + "_" + i;
		if (this.TitleFromBullet(bullets[i])) {
			if (Wp.General.HasClass(this.TitleFromBullet(bullets[i]).parentNode, "selected")) {
				var p = this.SubmenuFromBullet(bullets[i]);
				selectedMenu = p.id;
			}
		}
	}

	// Het juiste cookie zoeken
	for (var i = 0; i < cookies.length; i++) {
		if (cookies[i].indexOf(this.cookieName + "=") != -1) {
			cookieValue = cookies[i].split("=")[1];
			break;
		}
	}

	var cookieArr = [];

	if (cookieValue != "") {
		// Indien het cookie bestaat, splitsen op menu
		var menus = cookieValue.split(".");
		for (var i = 0; i < menus.length - 1; i++) {
			// Voor elk menu de status ophalen
			var menuId = menus[i].split(":")[0];
			var menuUp = menus[i].split(":")[1];
			cookieArr[menuId] = menuUp;
		}
	}

	for (var i = 0; i < bullets.length; i++) {
		Wp.General.RegisterEvent(bullets[i], "click", function(e) { me.BulletClick(e); });
		var selected = Wp.General.HasClass(this.SubmenuFromBullet(bullets[i]), "selected");
		with (this.SubmenuFromBullet(bullets[i])) {
			var currentMenu = this.menu.id + "_" + i;
			style.display = "block";
			menu_heights[this.SubmenuFromBullet(bullets[i]).id] = offsetHeight;
			style.overflow = "hidden";
			if ((cookieArr[currentMenu] == 1) || (selectedMenu == currentMenu)) {
				// menu openklappen
				style.height = menu_heights[currentMenu];
				bullets[i].src = "/img/images/bullet_up.gif";
				bullets[i].alt = "Menu verbergen";
			} else {
				// menu dichtklappen
				style.height = "0px";
				bullets[i].src = "/img/images/bullet_down.gif";
				bullets[i].alt = "Menu tonen";
			}
		}

		// onclick hoofdmenu-titles defineren
		Wp.General.RegisterEvent(this.TitleFromBullet(bullets[i]), "click", function(e) { me.TitleClick(e);return false; });
	}
}

Wp.SlideMenu.prototype.BulletClick = function(e) {
	var targ = Wp.General.EventSrv(e);
	var element = targ.id.split("_control")[0];

	// Niet sliden als er al geslide wordt
	if (menu_scroll[element]) return;

	// Indien huidige grootte van menu niet bekend deze ophalen
	if (!menu_heights[element]) {
		menu_heights[element] = $(element).offsetHeight;
		$(element).style.height = menu_heights[element] + "px";
		$(element).style.overflow = "hidden";
	}
	// Sliden locken
	menu_scroll[element] = true;

	// Menu open of dicht klappen
	if ($(element).offsetHeight > 0) {
		targ.src = "/img/images/bullet_down.gif";
		targ.alt = "Menu tonen";
		this.slideElement(element, 0, true);
	}
	else {
		targ.src = "/img/images/bullet_up.gif";
		targ.alt = "Menu verbergen";
		this.slideElement(element, menu_heights[element], false);
	}
}

Wp.SlideMenu.prototype.TitleClick = function(e) {
	var targ = Wp.General.EventSrv(e);
	var closeAll = (targ && Wp.General.HasClass(targ.parentNode, "closeall"));
	//var element = this.SubmenuFromBullet(this.BulletFromTitle(targ)).id;
	targ = this.BulletFromTitle(targ);
	var element = targ.id.split("_control")[0];

	// Niet sliden als er al geslide wordt
	if (menu_scroll[element]) return;

	// Indien huidige grootte van menu niet bekend deze ophalen
	if (!menu_heights[element]) {
		menu_heights[element] = $(element).offsetHeight;
		$(element).style.height = menu_heights[element] + "px";
		$(element).style.overflow = "hidden";
	}
	// Sliden locken
	menu_scroll[element] = true;

	// Menu open of dicht klappen
	if ($(element).offsetHeight > 0) {
		targ.src = "/img/images/bullet_down.gif";
		targ.alt = "Menu tonen";
		this.slideElement(element, 0, true);
	}
	else {
		targ.src = "/img/images/bullet_up.gif";
		targ.alt = "Menu verbergen";
		this.slideElement(element, menu_heights[element], false);
	}
}

Wp.SlideMenu.prototype.slideElement = function(element, to, up){
	var size = $(element).offsetHeight;
	var me=this;
	
	if (up) {
		// Menu dichtklappen
		if (size > menu_heights[element] * .25) {
			size -= 10;
		} else if (size > menu_heights[element] * .1) {
			size -= 5;
		} else {
			size --;
		}
	} else {
		// Menu open klappen
		if (size < menu_heights[element] * .75) {
			size += 10;
		} else if (size < menu_heights[element] * .9) {
			size += 5;
		} else {
			size ++;
		}
	}
	
	// Nieuwe grootte instellen
	$(element).style.height = size + "px";
	
	if ((up && size > to) || (!up && size < to)) { 
		// Doorgaan met sliden tot maximum berijkt is
		setTimeout (function(){me.slideElement (element,to,up);}, 10);
	} else {
		menu_scroll[element] = false;
		this.updateMenuCookie ();
	}
}

Wp.SlideMenu.prototype.updateMenuCookie = function(){
	var value = "";

	var bullets = Wp.General.GetElementsByClass(this.menu, "menu_bullet");
	for(var i = 0; i < bullets.length; i++){
		var menuId = this.SubmenuFromBullet(bullets[i]).id;
			
		value += menuId + ":";
		if (this.SubmenuFromBullet(bullets[i]).offsetHeight == 0) {
			// Menu is ingeklapt
			value += "0.";
		} else {
			// Menu is uitgeklapt
			value += "1.";
		}
	}
	document.cookie = this.cookieName + "=" + value + ";;path=/" 
}

Wp.SlideMenu.prototype.resetCookie = function(){
	var value = "";

	var bullets = Wp.General.GetElementsByClass(this.menu, "menu_bullet");
	for(var i = 0; i < bullets.length; i++){
		var menuId = this.SubmenuFromBullet(bullets[i]).id;
			
		value += menuId + ":";
		value += "0.";
	}
	document.cookie = this.cookieName + "=" + value + ";;path=/" 
}