function slidemodulesup(stepping, end, paddingtop, paddingbottom, endpaddingtop, endpaddingbottom, number) {
	var modulesslidingArray = Core.getElementsByClass("sliding"+number);
	for (var i=0; i<modulesslidingArray.length; i++) {
		if (paddingbottom-endpaddingbottom > stepping) {
			paddingbottom = paddingbottom-stepping;
			modulesslidingArray[i].childNodes[1].style.paddingBottom = paddingbottom+"px";
			setTimeout("slidemodulesup("+stepping+", "+end+", "+paddingtop+", "+paddingbottom+", "+endpaddingtop+', '+endpaddingbottom+", "+number+")", 10);
		} else {
			var rest = stepping - (modulesslidingArray[i].childNodes[1].style.paddingBottom.substring(0, modulesslidingArray[i].childNodes[1].style.paddingBottom.length-2) - endpaddingbottom);
			modulesslidingArray[i].childNodes[1].style.paddingBottom = endpaddingbottom+"px";
			var curheight = modulesslidingArray[i].childNodes[1].style.height.substring(0, modulesslidingArray[i].childNodes[1].style.height.length-2);
			if (curheight-rest >= end) {
				modulesslidingArray[i].childNodes[1].style.height = curheight-rest+"px";
				setTimeout("slidemodulesup("+stepping+", "+end+", "+paddingtop+", "+paddingbottom+", "+endpaddingtop+', '+endpaddingbottom+", "+number+")", 10);
			} else {
				var rest = stepping - (curheight - end);
				modulesslidingArray[i].childNodes[1].style.height = end+"px";
				if ((paddingtop - endpaddingtop) >= rest) {
					paddingtop -= rest;
					modulesslidingArray[i].childNodes[1].style.paddingTop = paddingtop+"px";
					setTimeout("slidemodulesup("+stepping+", "+end+", "+paddingtop+", "+paddingbottom+", "+endpaddingtop+', '+endpaddingbottom+", "+number+")", 10);
				} else {
					modulesslidingArray[i].childNodes[1].style.paddingTop = endpaddingtop+"px";
					Core.removeClass(modulesslidingArray[i], "sliding"+number);
					Core.addClass(modulesslidingArray[i], "hide");
				}
			}
		}
	}
}

function slidemodulesdown(stepping, end, paddingtop, paddingbottom, endpaddingtop, endpaddingbottom, number) {
	var modulesslidingArray = Core.getElementsByClass("sliding"+number);
	for (var i=0; i<modulesslidingArray.length; i++) {
		if (paddingtop-endpaddingtop < stepping) {
			paddingtop = paddingtop-stepping;
			modulesslidingArray[i].childNodes[1].style.paddingTop = paddingtop+"px";
			setTimeout("slidemodulesdown("+stepping+", "+end+", "+paddingtop+", "+paddingbottom+", "+endpaddingtop+', '+endpaddingbottom+", "+number+")", 10);
		} else {
			var rest = stepping - (modulesslidingArray[i].childNodes[1].style.paddingTop.substring(0, modulesslidingArray[i].childNodes[1].style.paddingTop.length-2) - endpaddingtop);

			modulesslidingArray[i].childNodes[1].style.paddingTop = endpaddingtop+"px";
			var curheight = modulesslidingArray[i].childNodes[1].style.height.substring(0, modulesslidingArray[i].childNodes[1].style.height.length-2);
			if (curheight-rest <= end) {
				modulesslidingArray[i].childNodes[1].style.height = curheight-rest+"px";
				setTimeout("slidemodulesdown("+stepping+", "+end+", "+paddingtop+", "+paddingbottom+", "+endpaddingtop+', '+endpaddingbottom+", "+number+")", 10);
			} else {
				var rest = (curheight - end) - stepping;
				modulesslidingArray[i].childNodes[1].style.height = end+"px";
				if ((endpaddingbottom - paddingbottom) >= rest) {
					paddingbottom += rest;
					modulesslidingArray[i].childNodes[1].style.paddingBottom = paddingbottom+"px";
					setTimeout("slidemodulesdown("+stepping+", "+end+", "+paddingtop+", "+paddingbottom+", "+endpaddingtop+', '+endpaddingbottom+", "+number+")", 10);
				} else {
					modulesslidingArray[i].childNodes[1].style.paddingBottom = endpaddingbottom-1+"px";
					Core.removeClass(modulesslidingArray[i], "sliding"+number);
					modulesslidingArray[i].childNodes[1].style.height = "auto";
					Core.addClass(modulesslidingArray[i], "show");
				}
			}
		}
	}
}

function writetocookie(key, value) {
	var date=new Date();
	date.setYear(date.getYear()+1);
	document.cookie = key+"="+value+";expires="+date.toGMTString()+";path=/";
}

function readfromcookie(key) {
	var nameEQ = key+"=";
	var ca = document.cookie.split(';');
	for (var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') {
			c = c.substring(1,c.length);
		}
		if (c.indexOf(nameEQ) == 0) {
			return c.substring(nameEQ.length,c.length);
		}
	}
	return "not found";
}

function slidingmodules() {
	var moduleheights = new Array();
	var moduleheights2 = new Array();
	var modulesArray = Core.getElementsByClass("moduletable");
	modulesArray = modulesArray.concat(Core.getElementsByClass("moduletable_menu"));
	modulesArray = modulesArray.concat(Core.getElementsByClass("moduletable_text"));
	var hidemodulesArray = Core.getElementsByClass("hidemodules");
	var paddingtop = 12;
	var paddingbottom = 2;
	var heightwhenhidden = 0;

	for (var i=0; i<modulesArray.length; i++) {
		if (modulesArray[i].parentNode.id == "left" || modulesArray[i].parentNode.id == "right") {
			if (typeof(modulesArray[i].childNodes[1]) != "undefined") {
				moduleheights[i] = modulesArray[i].childNodes[1].offsetHeight-(paddingtop+paddingbottom);
				moduleheights2[i] = modulesArray[i].childNodes[1];
				modulesArray[i].childNodes[1].style.overflow = "hidden";
				if (readfromcookie(modulesArray[i].className.substring(modulesArray[i].className.indexOf(" ")+1)) == "show") {
					modulesArray[i].childNodes[1].style.height = "auto";
					Core.addClass(modulesArray[i], "show");
				} else if (readfromcookie(modulesArray[i].className.substring(modulesArray[i].className.indexOf(" ")+1)) == "hide" || hidemodulesArray != "") {
					modulesArray[i].childNodes[1].style.height = 0;
					Core.addClass(modulesArray[i], "hide");
				} else {
					modulesArray[i].childNodes[1].style.height = "auto";
					Core.addClass(modulesArray[i], "show");
				}
			}
			modulesArray[i].childNodes[0].onclick = function() {
				if (typeof(this.parentNode.childNodes[1]) != "undefined") {
					if (Core.hasClass(this.parentNode, "hide")) {
						for (var i=0; i<moduleheights.length; i++) {
							if (moduleheights2[i] == this.parentNode.childNodes[1]) {
								if (heightwhenhidden<moduleheights[i]) {
									writetocookie(this.parentNode.className.substring(modulesArray[i].className.indexOf(" ")+1, modulesArray[i].className.indexOf(" hide")), "show");
									Core.addClass(this.parentNode, "sliding"+i);
									Core.removeClass(this.parentNode, "hide");
									slidemodulesdown(Math.round(-(moduleheights[i]+(paddingtop+paddingbottom))/50)-1, moduleheights[i], 0, 0, paddingtop, paddingbottom, i);
								}
							}
						}
					} else if (Core.hasClass(this.parentNode, "show")) {
						for (var i=0; i<moduleheights.length; i++) {
							if (moduleheights2[i] == this.parentNode.childNodes[1]) {
								if (heightwhenhidden<moduleheights[i]) {
									writetocookie(this.parentNode.className.substring(modulesArray[i].className.indexOf(" ")+1, modulesArray[i].className.indexOf(" show")), "hide");
									Core.addClass(this.parentNode, "sliding"+i);
									Core.removeClass(this.parentNode, "show");
									this.parentNode.childNodes[1].style.height = moduleheights[i]-(paddingtop+paddingbottom)+"px";
									slidemodulesup(Math.round((moduleheights[i]+(paddingtop+paddingbottom))/50)+1, heightwhenhidden, paddingtop, paddingbottom, 0, 0, i);
								}
							}
						}
					}
				}
			};
		}
	}
}

function findmenus(chunk, nodes) {
	for (var i=0; i<chunk.childNodes.length; i++) {
		if (chunk.childNodes[i].nodeName=="LI") {
			nodes[nodes.length] = chunk.childNodes[i];
		} else { // don't go deeper, we just need the main menu's
			findmenus(chunk.childNodes[i], nodes);
		}
	}
	return nodes;
}

function addevents(targetmenu, nodes, changed) {
	for (var i=0; i<nodes.length; i++) {
		nodes[i].onmouseover = function () {
			if (typeof(targetmenu.childNodes[0])!="undefined") {
				nodes[changed].appendChild(targetmenu.childNodes[0]);
			}
			for (var j=0; j<this.childNodes.length; j++) {
				if (this.childNodes[j].nodeName=="UL") {
					if (typeof(this.childNodes[j])!="undefined") {
						for (var i=0; i<nodes.length; i++) {
							if (this==nodes[i]) {
								changed=i;
							}
						}
						targetmenu.appendChild(this.childNodes[j]);
					}
				}
			}
		}
		if (Core.hasClass(nodes[i], "active")) {
			if (typeof(targetmenu.childNodes[0])!="undefined") {
				nodes[i].appendChild(targetmenu.childNodes[0]);
			}
			for (var j=0; j<nodes[i].childNodes.length; j++) {
				if (nodes[i].childNodes[j].nodeName=="UL") {
					if (typeof(nodes[i].childNodes[j])!="undefined") {
						changed=i;
						targetmenu.appendChild(nodes[i].childNodes[j]);
					}
				}
			}
		}
	}
	return changed;
}

function splittingmenu(firstrun) {
	var targetmenu = document.getElementById("menu2");
	targetmenu.removeChild(targetmenu.childNodes[0]);
	var changed = addevents(targetmenu, findmenus(document.getElementById("menu1"), []));
}

function changecolor(color) {
	if (Core.hasClass(document.body, "colorblue")) {
		Core.removeClass(document.body, "colorblue");
	}
	if (Core.hasClass(document.body, "colorgreen")) {
		Core.removeClass(document.body, "colorgreen");
	}
	if (Core.hasClass(document.body, "colorred")) {
		Core.removeClass(document.body, "colorred");
	}
	Core.addClass(document.body, color);
	writetocookie("color", color);
}

var scripts = {
	init: function() {
		slidingmodules(); // modules slide in and out
		splittingmenu(); // split top menu in parts
	}
};

Core.start(scripts);