Event.observe(window, 'load', globalInit);

function globalInit(){	
	zoomer.init();
}

var zoomer = {
	objects : [],
	settings:{
		empty_pic: "http://www.kindervereinigung-ffo.de/zoomer/empty.png",
		prev_next: false,
		base_url: "http://www.kindervereinigung-ffo.de/"
	},
	init: function(){
		$$(".zoomer").each(function(obj){var x = zoomer.initialize(obj);});
		
	},
	preload: function (i){
		var that = this;
		var array_length = this.objects.length;
		
		if (i>=array_length) return;
		
		var preload_img = new Image();
		preload_img.src = this.objects[i];
		preload_img.onload = function (){that.preload(i+1);};
	},
	initialize : function (obj){
		var that = this;
		
		Event.observe(obj, 'click', function(){that.show(obj.title);});
		this.objects.push(obj.title);
		return obj.title;
		
	},
	show : function (url){
		var that = this;
		var popup = Builder.node('div', {id:"zoomer-popup",style:"display:none;"}, [Builder.node('img',{id:"zoomer-image",src:this.settings.empty_pic})]);
		document.body.appendChild(popup);
		Event.observe($("zoomer-popup"), 'click', function(){that.hide();});
		
		var preload_img = new Image();
		preload_img.src = url;
		preload_img.onload = function (){that.present(preload_img);};
		popup.appear();
	},
	present : function (preload_img){
		var button_next_delete = $("zoomer-button-next");
		if (button_next_delete!=undefined){
			button_next_delete.parentNode.removeChild(button_next_delete);
		}
		var button_last_delete = $("zoomer-button-last");
		if (button_last_delete!=undefined){
			button_last_delete.parentNode.removeChild(button_last_delete);
		}
		var that = this;
		var img_obj = $("zoomer-image");
		img_obj.src = preload_img.src;
		
		var max_width = Math.floor($("zoomer-popup").offsetWidth*0.8);
		var max_height = Math.floor($("zoomer-popup").offsetHeight*0.8);
		
		var width = preload_img.width;
		var height = preload_img.height;
		
		var new_width;
		var new_height;
		
		if (width/height>max_width/max_height){
			new_width = max_width;
			new_height = Math.floor(new_width*height/width);
		}
		else{
			new_height = max_height;
			new_width = Math.floor(new_height*width/height);
		}
		
		var new_left = Math.floor(($("zoomer-popup").offsetWidth-new_width-40)/2);
		var new_top = Math.floor(($("zoomer-popup").offsetHeight-new_height-40)/2);
		
		img_obj.morph('width:' + new_width + 'px;height:' + new_height + 'px;left:' + new_left + 'px;top:' + new_top + 'px;',{afterFinish: function() {
			var button_width = Math.floor(new_width/3);
			var button_height = $("zoomer-image").offsetHeight;
			var button_left = new_left+20;
			
			var button_next = Builder.node('div', {style:"right:" + button_left + "px;top:" + new_top + "px;width:" + button_width + "px;height:" + button_height + "px;",id:"zoomer-button-next"});
			var button_last = Builder.node('div', {style:"left:" + button_left + "px;top:" + new_top + "px;width:" + button_width + "px;height:" + button_height + "px;",id:"zoomer-button-last"});
			
			$("zoomer-popup").appendChild(button_next);
			$("zoomer-popup").appendChild(button_last);
			
			Event.observe(button_next, 'click', function(){that.settings.prev_next=true; that.move(img_obj.src,1);});
			Event.observe(button_last, 'click', function(){that.settings.prev_next=true; that.move(img_obj.src,-1);});
		}});
	},
	move : function (url,step){
		var that = this;
		var current_index = -1;
		var zoomer_array = this.objects;
		var array_length = zoomer_array.length;
		for (var i = 0; i<array_length; i++){
			if (zoomer_array[i]==url || this.settings.base_url + zoomer_array[i]==url){
				current_index = i;
				break;
			}
		}
		if (current_index<0) return;
		
		var next_index = current_index + step;
		if (next_index<0) next_index = array_length - 1;
		if (next_index>=array_length) next_index = 0;
		
		var next_url = zoomer_array[next_index];
		
		var preload_img = new Image();
		preload_img.src = next_url;
		preload_img.onload = function (){that.present(preload_img)};
	},
	hide : function (){
		if (this.settings.prev_next==true){
			this.settings.prev_next=false;
			return;
		};
		var popup = $("zoomer-popup");
		if (popup==undefined) return;
		
		popup.fade({afterFinish:function(){popup.parentNode.removeChild(popup);}});
	}
};

var addUtils = {
		getParams : function (element,attribute){
			var obj = $(element);
			var data = obj[attribute].match(/\[[a-zA-Z ]+:[a-zA-Z0-9\-_\|:]+\]/g);
			var tmp = [];
			var keys = [];
			var params = {};
			for (var i=0; i<data.length; i++){
				tmp = data[i].replace(/[\[\]]/g,"").split(":");
				if (params[tmp[0]] == undefined) params[tmp[0]] = new Array();
				if (tmp.length==2){
					params[tmp[0]].push(tmp[1]);
				}
				else{
					if (tmp[0] == "form"){
						var form = {};
						form.name = tmp[1];
						form.type = tmp[2];
						form.options = new Array();
						if (form.type == "select"){
							if (tmp[3]!=undefined){
								form.options = tmp[3].split("|");
							}
							else{
								var select_default = new Array("yes","no");
								form.options = select_default;
							}
						}
						
						params[tmp[0]].push(form);
					}
				}
				if (!keys.inArray(tmp[0])) keys.push(tmp[0]);
			}
			
			for (i=0; i<keys.length; i++){
				if (params[keys[i]].length == 1 && keys[i]!="form") params[keys[i]] = params[keys[i]][0];
			}
			
			return params;
		}
	};
	Element.addMethods(addUtils);
	
	Array.prototype.inArray = function (value){
		for (var i=0; i < this.length; i++)if (this[i] === value)return true;// Matches identical (===), not just similar (==).
		return false;
	};
	
	function getWindowSize (w) {
		var width, height;
		w = w ? w : window;
		width = w.innerWidth || (w.document.documentElement.clientWidth || w.document.body.clientWidth);
		height = w.innerHeight || (w.document.documentElement.clientHeight || w.document.body.clientHeight);
		return { width: width, height: height };
	}