var KatatalogEntries = Class.create({
	kataloge: new Array(),
	initialize: function(){
		var kataloge = $$(".katalog-root");
		for(var i = 0; i < kataloge.length; i++){
			this.kataloge[i] = new KatalogEntry(this, kataloge[i]);
		}
	},
	setKatalogSize: function(){
		var kSize = 0;
		var kElemente = 0;
		for(var i = 0; i < this.kataloge.length; i++){
			kSize += this.kataloge[i].getSelectedSize();
			kElemente += this.kataloge[i].getSelectedElemente();
		}
		this.updateKatalogInfo(kSize, kElemente);
	},
	updateKatalogInfo: function(size, elemente){
		if(size == 0){
			$("elemente").update("0 Elemente ausgew&auml;hlt<br />");
		}else if(size == 1 || elemente == 1){
			var size = (1000 + size) / 1024;
			$("elemente").update("1 Element ausgew&auml;hlt<br />");
		}else{
			var size = (1000 + size) / 1024;
			$("elemente").update(elemente + " Elemente ausgew&auml;hlt<br />");
		}
		$("downloadsize").update("Errechnete Gr&ouml;&szlig;e: " + size.toFixed(2) + " MB");
	}
});
var KatalogEntry = Class.create({
	katalogSize: 0,
	aktivPart: "no",
	switchNode: false,
	showSelectNodes: false,
	katalogInstance: false,
	katalogNodes: new Array(),
	initialize: function(instance, rootNode){
		this.katalogInstance = instance;
		this.switchNode = rootNode.select(".switchNodes")[0];
		var katalogBlock = rootNode.select(".katalogNodes")[0];
		try{
			if(katalogBlock.visible()){
				this.aktivPart = "custom";
				this.switchNode.addClassName("preisMinus");
				this.switchNode.removeClassName("preisPlus");
			}else{
				this.switchNode.removeClassName("preisMinus");
				this.switchNode.addClassName("preisPlus");
			}
		}catch(e){}
		this.katalogSize = parseInt(katalogBlock.readAttribute("size"));
		this.katalogNodes = katalogBlock.select("input");
		this.showSelectNodes = rootNode.select(".show-custom-katalog")[0];
		this.setObserver(rootNode);
	},
	setObserver: function(rootNode){
		var nodeNoEntries = rootNode.select(".no-katalog")[0];
		nodeNoEntries.checked = false;
		nodeNoEntries.observe("click", this.onClickNoEntries.bind(this));
		var tmp = nodeNoEntries.next("a");
		tmp.observe("click", this.onClickNoEntries.bind(this));
		tmp.removeAttribute("href");

		var nodeAllEntires = rootNode.select(".all-katalog")[0];
		nodeAllEntires.checked = false;
		nodeAllEntires.observe("click", this.onClickAllEntries.bind(this));
		tmp = nodeAllEntires.next("a");
		tmp.observe("click", this.onClickAllEntries.bind(this));
		tmp.removeAttribute("href");

		var nodeCustomEntries = rootNode.select(".custom-katalog")[0];
		nodeCustomEntries.observe("click", this.onClickCustomEntries.bind(this));
		nodeCustomEntries.checked = false;
		tmp = nodeCustomEntries.next("a");
		tmp.observe("click", this.onClickCustomEntries.bind(this));
		tmp.removeAttribute("href");
		try{
			if(this.aktivPart == "custom"){
				nodeCustomEntries.checked = true;
			}else{
				nodeNoEntries.checked = true;
				nodeCustomEntries.checked = false;
			}
		}catch(e){}

		for(var i = 0; i < this.katalogNodes.length; i++){
			this.katalogNodes[i].observe("click", this.onClickEntry.bind(this));
			this.katalogNodes[i].checked = false;
		}
		this.showSelectNodes.update("");
	},
	onClickNoEntries: function(event){
		var element = event.element();
		try{
		if(element.tagName.toUpperCase() != "INPUT"){
			element.previous("input").checked = true;
		}
		}catch(e){}
		this.closeEntry();
		this.aktivPart = "no";
		this.disableElements();
		this.showSelectNodes.update("");
		this.katalogInstance.setKatalogSize();
	},
	onClickAllEntries: function(event){
		try{
			var element = event.element();
			if(element.tagName.toUpperCase() != "INPUT"){
				element.previous("input").checked = true;
			}
		}catch(e){}
		this.closeEntry();
		this.aktivPart = "all";
		this.enableElements();
		this.showSelectNodes.update("");
		this.katalogInstance.setKatalogSize();
	},
	onClickCustomEntries: function(event){
		try{
			var element = event.element();
			if(element.tagName.toUpperCase() == "A"){
				element.previous("input").checked = true;
			}
		}catch(e){}
		if(this.aktivPart != "custom"){
			this.aktivPart = "custom";
			this.disableElements();
			this.katalogInstance.setKatalogSize();
			this.openEntry();
		}else if(this.switchNode.hasClassName("preisMinus")){
			this.closeEntry();
		}else{
			this.openEntry();
		}
	},
	onClickEntry: function(event){
		try{
			var element = event.element();
			var name = element.readAttribute("name");
			if(name.match(/^katalog\[\d+\]\[\d+\]$/g)){
				var entries = element.up("p").next("ul").select("input");
				for(var i = 0; i < entries.length; i++){
					entries[i].checked = element.checked;
				}
			}else{
				if(!element.checked){
					element.up("ul").previous("p").down("input").checked = element.checked;
				}
			}
		}catch(e){}
		var count = this.getSelectedElemente();
		if(count == 0){
			this.showSelectNodes.update("");
		}else if(count == 1){
			this.showSelectNodes.update("1 Element ausgew&auml;hlt");
		}else{
			this.showSelectNodes.update(count + " Elemente ausgew&auml;hlt");
		}
		this.katalogInstance.setKatalogSize();
	},
	getSelectedSize: function(){
		var size = 0;
		for(var i = 0; i < this.katalogNodes.length; i++){
			if(this.katalogNodes[i].checked){
				size += parseInt(this.katalogNodes[i].readAttribute("size"));
			}
		}
		if(size > 0){
			return size + this.katalogSize;
		}
		return 0;
	},
	getSelectedElemente: function(){
		var elemente = 0;
		for(var i = 0; i < this.katalogNodes.length; i++){
			if(this.katalogNodes[i].checked){
				elemente++;
			}
		}
		return elemente;
	},
	openEntry: function(){
		this.switchNode.addClassName("preisMinus");
		this.switchNode.removeClassName("preisPlus");
		var node = this.switchNode.next("div");
		node.show();
	},
	closeEntry: function(){
		this.switchNode.addClassName("preisPlus");
		this.switchNode.removeClassName("preisMinus");
		var node = this.switchNode.next("div");
		node.hide();
	},
	enableElements: function(){
		for(var i = 0; i < this.katalogNodes.length; i++){
			this.katalogNodes[i].checked = true;
		}
	},
	disableElements: function(){
		for(var i = 0; i < this.katalogNodes.length; i++){
			this.katalogNodes[i].checked = false;
		}
	}
});
Event.observe(window, "load", function(){
	new KatatalogEntries();
});
