var ADE = ADE ? ADE : function() {
	var numProjects = 0;
	var projects = [];
	var info;
	var done = 0;
	var slide = 0;
	var timer;

	return {
		Init: function() {
			Utils.XHR("projects.xml", "get", function(r) {
				info = Utils.Objectify(r.responseXML.getElementsByTagName("projects")[0].getElementsByTagName("info")[0]);

				var xml = r.responseXML.getElementsByTagName("projects")[0].getElementsByTagName("project");
				numProjects = xml.length;

				for (var i = 0; i < numProjects; i++) {
					var project = Utils.Objectify(xml[i]);

					$("projects").appendChild(Utils.MakeNode("a", {
						href: "javascript:ADE.ShowProject('" + project.folder + "')",
						onfocus: "this.blur()"
					}, Utils.MakeText(project.title)));

					project.images = [];
					projects[project.folder] = project;

					Utils.XHR("listdir.php?dir=" + project.folder, "get", function(r) {
						eval(r.responseText);
						var project = imgs[0].split("/")[0];
						projects[project].images = imgs;
						ADE.Progress(1);
					});
				}
			});
		},

		ShowInfo: function() {
			$("content").innerHTML = "";
			
			$("content").appendChild(Utils.MakeNode("p", {}, Utils.MakeText(info.text)));

			$("content").appendChild(Utils.MakeNode("p", {}, [
				Utils.MakeText(info.company), Utils.MakeNode("br"),
				Utils.MakeText(info.address), Utils.MakeNode("br"),
				Utils.MakeText(info.postal + " "), Utils.MakeText(info.city), Utils.MakeNode("br"), Utils.MakeNode("br"),
				Utils.MakeText("KvK-nummer: " + info.kvk), Utils.MakeNode("br"),
				Utils.MakeText("BTW-nummer: " + info.btw)
			]));
		},

		Progress: function(n) {
			done += n;
			if (projects[Utils.Get().p]) ADE.ShowProject(Utils.Get().p);
			$("progress").style.width = 100*(numProjects ? done/numProjects : 0) + "%";
		},

		ShowProject: function(p) {
			if (done !== 0 && done == numProjects) {
				$("content").style.background = "#fff url(loading.gif) no-repeat 300px 70px";
				$("content").innerHTML = "";

				var e = Utils.MakeNode("div");

				for (var i = 0; i < projects[p].images.length; i++) {
					if (typeof projects[p].images[i] == "string") {
						var src = "projects/" + projects[p].images[i];
						projects[p].images[i] = new Image();
						projects[p].images[i].onload = function() {this.loaded = true;}
						projects[p].images[i].src = src;
					}

					var img = Utils.MakeNode("img");
					img.src = projects[p].images[i].src;
					img.onclick = function() {
						for (var i = 0; i < $("content").childNodes[1].childNodes.length; i++)
							$("content").childNodes[1].childNodes[i].style.cursor = "pointer";
						this.style.cursor = "auto";

						ADE.ClearTimer();
						ADE.SlideTo(-this.offsetLeft);
					}
					img.style.cursor = (i === 0) ? "auto" : "pointer";
					e.appendChild(img);
				}

				$("content").appendChild(Utils.MakeNode("h1", {}, [
					Utils.MakeText(projects[p].title + " "),
					Utils.MakeNode("span", {}, Utils.MakeText(projects[p].year))
				]));
				$("content").appendChild(e);
				$("content").appendChild(Utils.MakeNode("p", {}, Utils.MakeText(projects[p].text)));
				if (typeof projects[p].link == "string")
					$("content").appendChild(Utils.MakeNode("a", {href: projects[p].link, target: "_blank"}, Utils.MakeText(projects[p].link)));

				slide = document.all ? document.body.clientWidth : window.innerWidth; 
				$("content").childNodes[1].style.left = slide + "px";
				ADE.ClearTimer();
				ADE.Load(p);
			}
		},

		Load: function(p) {
			for (var i = 0, load = 0; i < projects[p].images.length; load += projects[p].images[i++].loaded ? 1 : 0) {}
			if (load == projects[p].images.length) {
				$("content").style.background = "#fff";
				ADE.SlideTo(0);
			}
			else setTimeout("ADE.Load('" + p + "')", 10);
		},

		SlideTo: function(x) {
			if (Math.abs(x - slide) > 1) {
				slide += (x - slide)/2;
				timer = setTimeout("ADE.SlideTo(" + x + ")", 20);
			} else slide = x;
			$("content").childNodes[1].style.left = slide + "px";
		},

		ClearTimer: function() {
			clearTimeout(timer);
		}
	}
}();
