(function() {

	String.prototype.get_params = function (param_name){
		// extracts meta data from a given string
		// values are set like "[key:value]" where value can be a string or a number
		// to assign an array use "[key:value1|value2|value3]"
		//
		// keys: [a-zA-Z_]+
		// values: [a-zA-Z0-9\.\| _#\-]+   ... with "|" as array delimiter
		// 
		// returns an object, an empty one if no machtes found
		//
		// examples:
		// "[a:bfhjsdk] [b:32576258]" returns {a:"bfhjsdk",b:32576258}
		// "[a:bfhjsdk|32576258]" returns {a:["bfhjsdk",32576258]}
		
		definition_regexp = /\[([a-zA-Z_]+):([a-zA-Z0-9\.\| _#\-\/:]+)\]/ig;
		definitions = this.match(definition_regexp);
		res = {};
		if (definitions==undefined || !definitions.length) return res;
		for (i=0; i<definitions.length; i++){
			definitions[i] = definitions[i].replace(/[\[\]]/g,"");
			definition = definitions[i].split(":");
			name = definition[0];
			definition.shift();
			val = definition.join(":").split("|");

			res[name] = val.length>1 ? val.parse_correctly() : val[0].parse_correctly();
		}
		if (param_name!=undefined && res[param_name]!=undefined) return res[param_name];
		return res;
	};

	String.prototype.parse_correctly = function (){
		integer_regexp = /^[0-9]+$/;
		float_regexp = /^[0-9]+\.[0-9]$/;
		if (this.match(integer_regexp)) return parseInt(this);
		if (this.match(float_regexp)) return parseFloat(this);
		return this.toString();
	};

	Array.prototype.parse_correctly = function (){
		for (var i=0; i<this.length; i++){
			this[i] = this[i].parse_correctly();
		}
		return this;
	};
	
	
	Element.addMethods({
		implement: function(element,content,options) {
			element = $(element);
			if (options != undefined && options.is_url===true){
				asynchronous = options.asynchronous===true? true : false;
				method = options.method=="post" || options.postBody!=undefined ? "post" : "get";
				postBody = options.postBody!=undefined ? options.postBody : "";
				encoding = options.encoding!=undefined ? options.encoding : "";
				new Ajax.Request(content, {    
				method:method,
				asynchronous: asynchronous,		
				postBody:postBody,				
				encoding:encoding,				
				onSuccess: function(transport){ 
					try{
						element.innerHTML = transport.responseText;
					} catch(e) {}
				},
				onFailure: function(){
					element.innerHTML = "Ajax request implementation failed!";
				} 
				});
			}
			else{
				element.innerHTML=content;
			}
			return Element.extend(element);
		},
		stopEvent: function(element,eventName) {
			element = $(element);
			Event.observe(element, eventName, function(event){
				Event.stop(event);
			});
			return Element.extend(element);
		},
		remove: function(element) {
			element = $(element);
			element.parentNode.removeChild(element)
			return Element.extend(element);
		}
	});


	var Translator = Class.create({
		initialize: function(obj) {
			var THAT = this;
			this.obj  = obj;
			this.params = this.obj.className.get_params();
			this.ns = this.params.ns!=undefined ? this.params.ns : false;
			this.key = this.params.key!=undefined ? this.params.key : false;
			this.lang = this.params.lang!=undefined ? this.params.lang : false;
			position = this.obj.cumulativeOffset();
			this.left = position[0];
			this.top = position[1];

				this.body = document.getElementsByTagName("body")[0];
			if (this.ns && this.key && this.lang){
				this.body.appendChild(this.obj);
				this.obj.setStyle({left:(this.left-10)+"px",top:(this.top-10)+"px"});
				this.obj.addClassName("initialized");
				
				Event.observe(this.obj, "click", function(event){
					THAT.display();return false;
					Event.stop(event);
				});
			}
		},

		display: function() {
			var THAT = this;
			
			$B.booya_edit_popup();
			$('booya_edit_area').implement(site_base_dir+'ajax/edit-translation/'+ this.key + '/' + this.ns, {is_url:true});
			
			$$(".translation_submit_button").each(function(obj){
				Event.observe(obj, "click", function(){
					THAT.submit(obj);
				});
			});
		},
		submit: function(obj){
			langs = obj.className.get_params("langs");
			
			if ($B.isArray(langs)){
				postBody = "";
				langs.each(function(lang){
					if (postBody.length) postBody += "&";
					postBody += lang + "=" + escape($F("translation_" + lang));
				});
			}
			else{
				postBody = langs + "=" + escape($F("translation_" + langs));
			}
			$('booya_edit_area').implement(site_base_dir+'ajax/set-translation/'+ this.key + '/' + this.ns, {is_url:true, method:"post", postBody:postBody});
		}
	});
	this.Translator = Translator;
	
	
	
	var BooYa = function(){};
	
	BooYa.prototype = {
		booya_edit_popup:function(content){
			//content = content.length ? content : "";
			var element = Builder.node('div', { id: 'booya_blocker' }, [
				Builder.node('div', { id: 'booya_edit_area_wrapper' },[
					Builder.node('div', { id: 'booya_edit_area' })
				])
			]);
			this.body = document.getElementsByTagName("body")[0];
			this.body.appendChild(element);
			height = $('booya_edit_area_wrapper').getHeight();
			$('booya_edit_area_wrapper').setStyle({marginTop:Math.floor((document.viewport.getHeight()-height)/2)+"px"});
			Event.observe(element,"click",function(){$B.booya_edit_destroy();});
			//$(element).observe({click:function(){$B.booya_edit_destroy();}});
			
			
			$('booya_edit_area_wrapper').stopEvent("click");
		},
		booya_popup:function(content){
			//content = content.length ? content : "";
			var element = Builder.node('div', { id: 'booya_blocker' }, [
				Builder.node('div', { id: 'booya_popup_wrapper' },[
					Builder.node('div', { id: 'booya_popup_area' })
				])
			]);
			this.body = document.getElementsByTagName("body")[0];
			this.body.appendChild(element);
			$('booya_popup_wrapper').setStyle({marginTop:Math.floor(document.viewport.getHeight()*0.45)-($('booya_popup_wrapper').offsetHeight/2)+"px"});
			Event.observe(element,"click",function(){$B.booya_popup_destroy();});
			//$(element).observe({click:function(){$B.booya_edit_destroy();}});
			
			
			$('booya_popup_wrapper').stopEvent("click");
		},
		booya_edit_destroy:function(){
			($('booya_blocker')).remove();
		},
		booya_popup_destroy:function(){
			($('booya_blocker')).remove();
		},
		remove:function(obj){
			obj.parentNode.removeChild(obj);
		},
		isArray:function(obj){
			return  obj instanceof Array;
		},
		remote_higlight: function(obj){
			var id, remote_obj, suffix;
			var target_list = new Array();
			var params = obj.className.get_params();
			if (!params || params==={} || params.highlightSuffix===undefined || params.highlightPrefix===undefined){
				return false;
			}
			suffix = params.highlightSuffix;
			if (!$B.isArray(params.highlightSuffix)){
				suffix = new Array();
				suffix.push(params.highlightSuffix)
			}
			for (var i=0; i<suffix.length; i++){
				id = params.highlightPrefix + suffix[i];
				target_list.push($(id));
			}
			Event.observe(obj, "mouseover", function(){
				target_list.each(function(obj){if (obj) obj.addClassName('highlight');});
			});
			Event.observe(obj, "mouseout", function(){
				target_list.each(function(obj){if (obj) obj.removeClassName('highlight');});
			});
		},
		tool_tip: function(obj){
			var id, remote_obj, suffix;
			var target_list = new Array();
			var params = obj.className.get_params();
			var params = obj.className.get_params();
			if (!params || params==={} || params.tooltipUrl===undefined){
				return false;
			}
			Event.observe(obj, "mouseover", function(){
				var position = obj.cumulativeOffset();
				var left = position[0];
				var top = position[1];
				var element = Builder.node('div', { id: 'tool_tip' });
				var body = document.getElementsByTagName("body")[0];
				body.appendChild(element);
				element.implement(params.tooltipUrl,{is_url:true});
				left -= element.getWidth();
				top -= element.getHeight();
				element.setStyle({left:left+"px",top:top+"px",visibility:"visible"});
			});
			Event.observe(obj, "mouseout", function(){
				
				if ($("tool_tip")) $("tool_tip").remove();
			});
		}
		
	};
	this.BooYa = BooYa;
	
	
	
}());var $B = new BooYa();
Event.observe(window,"load",function(){
	$$(".booya_translations_edit_button").each(function(obj){
		new Translator(obj);
	});
	
	$$(".booya_instant_upload").each(function(obj){
		target = obj.getElementsByTagName("input")[0];
		//target.hide();alert(1);
		Event.observe(target,"change",function(){
			target.parentNode.submit();
		});
	});
	
	if ($("current-rss-feeds")){
		$("current-rss-feeds").implement(site_base_dir+"ajax/rss/editfeedlist",{is_url:true});
	}
	
	
	
	if ($("add-rss-feed")){
		default_values = {
			"add_rss_provider" : $F("add_rss_provider"),
			"add_rss_provider_url" : $F("add_rss_provider_url"),
			"add_rss_feed_url" : $F("add_rss_feed_url")
		};
		
		
		Event.observe($("add_rss_feed_submit"),"click",function(){
			really = true;
			if (default_values.add_rss_provider==$F("add_rss_provider") || default_values.add_rss_provider_url==$F("add_rss_provider_url") || default_values.add_rss_feed_url==$F("add_rss_feed_url")){
				really = confirm('Ein oder mehrere Werte scheinen nicht korrekt eingegeben zu sein. Sind Sie sicher?'); 
			}
			if(!really) return false;
			
			$("current-rss-feeds").implement(
				site_base_dir+"ajax/rss/editfeedlist/-/content_admin/add_feed",
				{
					is_url:true,
					postBody: 'provider='+$F('add_rss_provider')+'&provider_url='+$F('add_rss_provider_url')+'&feed_url='+$F('add_rss_feed_url')
				}
			
			);
			
			$("add_rss_provider").value = default_values.add_rss_provider;
			$("add_rss_provider_url").value = default_values.add_rss_provider_url;
			$("add_rss_feed_url").value = default_values.add_rss_feed_url;
			
			return false;
		});
	}
	
	if ($("current-links")){
		$("current-links").implement(site_base_dir+"ajax/links/editlinklist",{is_url:true});
	}
	
	if ($("add_new_link")){
		default_values = {
			"add_link_label" : $F("add_link_label"),
			"add_link_url" : $F("add_link_url")
		};
		Event.observe($("add_new_link_submit"),"click",function(){
			really = true;
			if (default_values.add_link_label==$F("add_link_label") || default_values.add_link_url==$F("add_link_url")){
				really = confirm('Ein oder mehrere Werte scheinen nicht korrekt eingegeben zu sein. Sind Sie sicher?'); 
			}
			if(!really) return false;
			
			$("current-links").implement(
				site_base_dir+"ajax/links/editlinklist/-/content_admin/add_link",
				{
					is_url:true,
					postBody: 'label='+$F('add_link_label')+'&url='+$F('add_link_url')
				}
			
			);
			
			$("add_link_label").value = default_values.add_link_label;
			$("add_link_url").value = default_values.add_link_url;
			
			return false;
		});
	}
	
	if ($("community-admin-leistungen")){
		$("community-admin-leistungen").implement(site_base_dir+"ajax/community-admin/editleistungen",{is_url:true});
	}
	
	if ($("edit_leistungen")){
		default_values = {
			"add_leistung_label" : $F("add_leistung_label")
		};
		Event.observe($("add_new_link_submit"),"click",function(){
			really = true;
			if (default_values.add_leistung_label==$F("add_leistung_label")){
				really = confirm('Ein oder mehrere Werte scheinen nicht korrekt eingegeben zu sein. Sind Sie sicher?'); 
			}
			if(!really) return false;
			
			$("community-admin-leistungen").implement(
				site_base_dir+"ajax/community-admin/editleistungen/-/community_admin/add_leistung",
				{
					is_url:true,
					postBody: 'leistung='+$F('add_leistung_label')
				}
			
			);
			
			$("add_leistung_label").value = default_values.add_leistung_label;
			
			return false;
		});
	}
	
	if ($("meine_leistungen")){
		$$("#meine_leistungen input").each(function(obj){
			Event.observe(obj,"change",function(){
				count = 0;
				$$("#meine_leistungen input").each(function(obj){
					count += obj.checked ? 1 :0;
				});
				if (count>7){
					obj.checked = false;
				}
				else{
					$("meine_leistungen").addClassName("processing");
					id = obj.id.replace(/leistung--/,"");
					action = obj.checked ? "add_leistung" : "remove_leistung";
					url = site_base_dir + "startseite/-/member/" + action + "/" + id;
					new Ajax.Request(url, {    
						method:"get",
						asynchronous: false,			
						onSuccess: function(transport){ 
							try{
								//alert(transport.responseText);
							} catch(e) {}
							$("meine_leistungen").removeClassName("processing");
						},
						onFailure: function(){
							alert("3Es ist ein Fehler aufgetreten. Die Änderungen konnten nicht übernommen werden.");
							$("meine_leistungen").removeClassName("processing");
						} 
						});
				}
				return false;
			});
		});
	}
	
	if ($("edit_profile")){
	
		$A($("edit_profile").getElementsByTagName("input")).each(function(obj){
			if (obj.type=="file" || obj.type=="submit" || obj.hasClassName && obj.hasClassName("no_instant_update")) return;
			Event.observe(obj,"blur",function(){
				params = obj.className.get_params();
				if (!obj.value.length && !params.allow_empty) return;
				profile_update_input(obj);
			});
			
			Event.observe(obj,"keypress",function(event){
				params = obj.className.get_params();
				if (!obj.value.length && !params.allow_empty || event.keyCode != Event.KEY_RETURN) return;
				profile_update_input(obj);
				obj.blur();
			});
		});
		$A($("edit_profile").getElementsByTagName("select")).each(function(obj){
		
			Event.observe(obj,"change",function(){
				if (!obj.value.length) return;
				profile_update_input(obj);
			});
		});
		
		
	}
	
	
});

function profile_update_input(obj){
	obj.addClassName("processing");
	obj.removeClassName("updated");
	context = obj.id.replace(/profile_set_/,"");
	value = escape($F(obj));
	
	url = site_base_dir + "startseite/-/member/change_profile";
	params = obj.className.get_params();
	if (params.adress_id) url += "/" + params.adress_id;
	new Ajax.Request(url, {    
		method:"post",
		asynchronous: false,
		postBody:"context="+context+"&value="+value,					
		onSuccess: function(transport){ 
			try{
				if(transport.responseText=="fail"){
					alert("1Es ist ein Fehler aufgetreten. Die Änderungen konnten nicht übernommen werden.");
					obj.removeClassName("processing");
					obj.removeClassName("updated");
				}
				else{
					obj.removeClassName("processing");
					obj.addClassName("updated");
					remove_updated(obj);
				}
			} catch(e) {
				alert("Es ist ein Fehler aufgetreten. Die Änderungen konnten nicht übernommen werden.");
				obj.removeClassName("processing");
				obj.removeClassName("updated");
			}
		},
		onFailure: function(){
			alert("Es ist ein Fehler aufgetreten. Die Änderungen konnten nicht übernommen werden.");
			obj.removeClassName("processing");
			obj.removeClassName("updated");
		} 
	});
}

function remove_updated(obj){
	window.setTimeout(function(){obj.removeClassName("updated");},3000);
}

function booya_popup(obj,attach){
		if (!$(obj)) return;
		params = obj.className.get_params();
		url = params.url!=undefined? params.url : false;
		txt = params.txt!=undefined? params.txt : false;
		
		if (!url && !txt && !attach) return false;
		
		$B.booya_popup();
		
		if (attach){
			$('booya_popup_area').appendChild(attach);
			return;
		}
		
		if (url){
			content = url;
			is_url = true;
		}
		else{
			content = txt;
			is_url = false;
		}
		
		//$('booya_popup_area').implement(content, {is_url:is_url});
	}



