
/*google.load("prototype","1.6.1");
google.load("scriptaculous","1.8.3");
google.setOnLoadCallback(init);*/

document.observe("dom:loaded", init);

var timer, mod1;

function init() {
	collapsNavigation(); //Komplette Navigation wird per PHP ausgegeben und mit Javascript nur die aktiven Elemente angezeigt
	pufferFishNavigation('navi', 'pufferover');
	mirrorCover();
	shoppingCartHover(); //Wenn man über die Warenkorbbereich geht, soll sich sowas ausfahren
	if ($$('.shorten').length > 0) shortenText('.shorten', 300); //Textfelder, deren Inhalt gekürzt dargestellt werden soll	
//	if ($$('#chapters').length > 0) makeChaptersClickable(); //Kapiteldarstellung + Berechnung > Product View
//	if ($$('.shoppingcart .chapters' > 0)) makeChaptersDeletable(); //Kapitel hover + Löschen > Warenkorb
	//if ($$('#review').length > 0) loadReviews();
	//if ($$('ul.tabs').length > 0) myAccountTabs(); //Alte Tabs
	if ($$('ul.tabs').length > 0) myaccount_tab = new Tab('#content_main', {width: '700px', active: 0});
	//if ($$('.address_sticker').length > 0) addressSticker(); Wird jetzt im View Script aufgerufen

	if ($$('.recommend-book').length > 0) buildRecommendationDialog(); //Buch weiterempfehlen Link + Modales Fenster erstellen
	if ($$('#review_btn').length > 0) buildReviewDialog();
	if ($$('.left-column').length > 0) positionProductLinks();
	if ($$('.formdesc').length > 0) formDescriptions(); //Einblenden der Beschreibungen von Formularfeldern
	if ($$('ul.errors').length > 0) scrollToError(); //Wenn ein Formular nicht validiert werden konnte soll gleich zum Fehler gescrollt wernde
	if ($$('.displaynone').length > 0) formCleanUp(); //Formularelemente ausblenden und nur bei Bedarf einblenden
	if ($$('#address_billing').length > 0) checkoutAddresses(); //Adressauswahlformulare
	if ($$('.checkout').length > 0) checkoutButtons();
	if ($$('#forgot_password').length > 0) buildSendpasswordDialog();
	ajaxForms();
/*	$$('a[target="_blank"]').each( function(a) {
		a.writeAttribute( {onclick: 'window.open(this.href,"_blank"); this.href=""; return false;'} );
		if (a.href.search(/viewer/)>-1) {a.href = a.href.replace(/(http:\/\/e-cademic)/, 'http://www.e-cademic')}
//		a.observe('click', function(e){ e.stop();  //e.element().writeAttribute({target:''});  	} )
	} ); */
}

function update_list() {
	scroll_list.positionize(1);
	scroll_list.jump(window.location.hash.substr(1),1);
}

function collapsNavigation() {
	var i = 0;
	var allNavi = $$('#navi_side ul ul');
	if (allNavi.count == 0 || allNavi == '') return;
	(function(){
        if (allNavi[i].select('.active').length == 0 && !allNavi[i].previous().down().hasClassName('active')) 
            allNavi[i].hide();
		i++;
		if (i >= allNavi.count) return;
		else setTimeout( arguments.callee, 10);
	})();
/*    $$('#navi_side ul ul').each(function(el){
        if ($(el).select('.active').length == 0 && !$(el).previous().down().hasClassName('active')) 
            $(el).hide()
    }); */
}

function pufferFishNavigation(n, c){
    $(n).select('li').each(function(el, count_li){
        var span = new Element('span', {
            className: c
        }).setStyle({
            position: 'absolute',
            width: '100%',
            height: '100%',
            left: 0,
            top: 0
        }).setOpacity(0);
        $(el).insert({
            bottom: span
        });
        $(el).select('a')[0].observe('mouseover', function(){
            $(span).visualEffect('Opacity', {
				from: 0,
				beforeStart: function() {Effect.Queues.get('pufferfish'+count_li).each(function(effect){effect.cancel();}); },				
				transition: Effect.Transitions.linear,
                duration: 0.5,
                queue: {
                    scope: 'pufferfish' + count_li
                }
            })
        });
        $(el).select('a')[0].observe('mouseout', function(){
            $(span).visualEffect('Opacity', {
				to: 0,
				beforeStart: function() {Effect.Queues.get('pufferfish'+count_li).each(function(effect){effect.cancel();}); },
				transition: Effect.Transitions.linear,
                duration: 0.5,
                queue: {
                    scope: 'pufferfish' + count_li
                }
            })
        });
    });
}

function mirrorCover() {
	if (Prototype.Browser.IE) return;
	var allCover = $$('canvas.mirror');
	if (allCover.length == 0) return;
	var j = 0;
	(function(){
		var el = allCover[j];
		var img = el.previous();		
		var width = $(img).getWidth()
		var height = el.getHeight()
		el.writeAttribute({ width: width, height: height});		
		var ctx = el.getContext('2d');
		ctx.translate(width ,height);
		ctx.rotate(Math.PI*2/2);
		var original_height = $(img).getHeight();
//		for (var i=1; i<width; i++) ctx.drawImage(img, i, 0, 1, original_height, width-i-1, -original_height+30, 2, original_height);		
		var verlauf = ctx.createLinearGradient(0,0,0,60);
		verlauf.addColorStop(0.15,'rgba(255,255,255,1)');
		verlauf.addColorStop(1,'rgba(255,255,255,0)');
		ctx.fillStyle = verlauf;		
		ctx.fillRect(0,0,width,30);
		j++;
		if (j >= allCover.length) return;
		else setTimeout( arguments.callee, 10);		
	})();
}

/*
 * Kapitel Titel und Beschreibung sollen highlighten wenn man hovert und wenn man drauf klickt
 * soll die Checkbox davor gemarkert werden
 * Der Gesamtpreis soll sich automatisch berechnen
 */
function makeChaptersClickable() {
	$$('#chapters span').each( function(el) {
		$(el).setStyle({cursor: 'pointer'}).observe('click', function() {
			if ($(el).previous().checked) $(el).previous().checked=false;
			else $(el).previous().checked=true;
		});
        $(el).observe('mouseover', function(){
            $(el).addClassName('highlight');
        });
        $(el).observe('mouseout', function(){
            $(el).removeClassName('highlight');
        });
	});
	$('chapters').observe('click', function() {
		calculateChapters();
	})
}
function calculateChapters() {
	var preise = $$('#chapters a.price');
	var gesamt = 0;
	for (var i=0; i < preise.length-1; i++) {
		if (preise[i].next().checked)
			gesamt += parseFloat( preise[i].down().innerHTML.replace(",",".").substr(0, preise[i].down().innerHTML.length-3) );
	}
	preise[preise.length-1].update(gesamt.toFixed(2).replace(".",",") + " &euro;");
}

function loadReviews() {
	var feld = $$('#review .reviews')[0];
    new Ajax.Request('/ajax/reviews/product_id/' + product_id , {
        onComplete: function(r){
            var q = r.responseJSON;
            for (var i = 0; i < q.length; i++) {
                var div = new Element('div', {className: 'review'});
                var stars = new Element('div', {className: 'stars'});
                var title = new Element('div', {className: 'title'}).update(q[i].title);
                var datum = new Element('div', {className: 'datum'}).update(q[i].date_added + " von ");
                var link = new Element('a', {href: '#'}).update(q[i].name);
                var text = new Element('p').update(q[i].review_text);
                $(div).insert(stars).insert(title).insert(datum).insert(link).insert(text);
                $(feld).insert(div);
            }
			if (q.length == 0) {
				var no_review = new Element('p').update('Keine Rezensionen zu diesem Bereich');
				$(feld).insert(no_review);
			}
        }
    });
}

function makeChaptersDeletable(){
	$$('.shoppingcart .chapter').each( function(el) {
		$(el).observe('mouseover', function() {
			$(el).addClassName('highlight');
		} );
		$(el).observe('mouseout', function() {
			$(el).removeClassName('highlight');
		})
	});
}

function shoppingCartHover() {
	$('warenkorb').observe('mouseover', function() {
		clearTimeout(timer);
		timer = setTimeout(function() {
			$('warenkorb').setStyle({backgroundColor: '#ffebd2'}).setOpacity(0.8);
			if ($$('#main .cartcontent').length > 0 && $$('#main .cartcontent')[0].visible()) return;

			if ($$('#main .cartcontent').length > 0) $$('#main .cartcontent')[0].remove();
			
			var div = new Element('div', {className: 'cartcontent'}).update('<div class="author">Wird geladen...</div>').hide();
			
			$(div).observe('mousemove', function(){
				clearTimeout(timer);
			});
			$(div).observe('mouseout', function() {
				clearTimeout(timer);
				timer = setTimeout(hideQuickcart, 500);				
			});

			$('main').insert(div);
			$(div).appear({duration:0.2, queue: 'end', to: 0.9});
			
			new Ajax.Request('/ajax/quickcart', {onComplete: function(r){
				var q = r.responseJSON;
				var new_div = new Element('div').hide();
				if (q.titles.length == 0) { //Wenn keine Artikel im Warenkorb sind, dann soll das DIV wieder verschwinden
					$(div).fade({duration: 0.2, queue: 'end', afterFinish: function() {
						$(div).remove();
					}});
				}
				for (var i=0; i<q.titles.length; i++) {
					var author = new Element('div', {className: 'author'}).update( q.titles[i].author );
					var title = new Element('div', {className: 'title'}).update( q.titles[i].name );
					var price = new Element('div', {className: 'price'}).update( q.titles[i].price );
					$(new_div).insert(author).insert(title).insert(price);
				}
				var gesamt = new Element('div', {className: 'sum'}).update( q.insgesamt );
				var btn_cart = new Element('a', {className: 'btn', href: '/shop/shoppingcart'}).update('Warenkorb').setStyle({margin: '0 10px 10px 10px'});
				var btn_cashier = new Element('a', {className: 'btn', href: '/shop/showcheckout'}).update('Kasse').setStyle({margin: '0 0 10px 0'});
				$(new_div).insert(gesamt).insert(btn_cart).insert(btn_cashier);
				$(div).insert(new_div);
				$(div).select('div')[0].blindUp({duration:0.1, queue: 'end'});
				$(new_div).blindDown({duration:0.2, queue: 'end'});

			}})
		}, 500);
	});
	$('warenkorb').observe('mouseout', function(){
		clearTimeout(timer);
		timer = setTimeout( hideQuickcart, 750);
	});
	function hideQuickcart() {
		if ($$('#main .cartcontent').length > 0)
			$$('#main .cartcontent')[0].slideUp({duration: 0.2});		
		$('warenkorb').setStyle({backgroundColor: 'transparent'}).setOpacity(1);
	}
}


function myAccountTabs() {
	$$('div.tabs .tab').each(function(el, n) {
		if (n!=0) $(el).hide();
	});
	$$('ul.tabs li').each(function(el, n) {
		$(el).observe('click', showTab.bind(this, n));
	});
	function showTab(n, e) {
		var old = $$('div.tabs .tab').find(function(n){return $(n).visible()});
		var neu = $$('div.tabs .tab')[n];
		new Effect.Parallel([
		  new Effect.Fade(old, { sync: true, duration: 0.5 }), 
		  new Effect.Appear(neu, { sync: true, duration: 0.5 }) 
		], { duration: 0.5 });
		$$('ul.tabs li').invoke('removeClassName','active');
		e.element().addClassName('active');
	}
	//Tab Größe machen
	var height = $$('div.tabs .tab').invoke('getHeight').max();
	$$('div.tabs')[0].setStyle({height: height + "px" });
	$$('div.tabs .tab').invoke('setStyle', {height: height + "px" });
}

function shortenText(selectorText, lengthText){
	/*$$(selectorText).each(function(el){
		$(el).update($(el).innerHTML.substring(0, lengthText)+"...");
	});
	return;*/	
    $$(selectorText).each(function(el){
        var togel = new Element('span', {
            "style": "display:none"
        });
        var text_anfang = $(el).innerHTML.substring(0, lengthText);
        var text_rest = $(el).innerHTML.substr(lengthText);
        if (text_rest.length > 0) {
            $(togel).update(text_rest);
            var togel_link = new Element('a', {
                "style": "cursor:pointer;"
            });
            var togel_link_back = new Element('a', {
                "style": "cursor:pointer;"
            });
            $(togel_link_back).update(' &laquo; weniger');
            $(togel_link_back).observe("click", function(e){
                var el = Event.element(e);
                $(el).up().toggle();
                $(el).up().previous().toggle();
				if (scroll_list) scroll_list.changeContent();
            })
            $(togel_link).update('... mehr &raquo;');
            $(togel_link).observe("click", function(e){
                var el = Event.element(e);
                $(el).next().toggle();
                $(el).hide();
				if (scroll_list) scroll_list.changeContent(1);
            })
            $(el).update(text_anfang);
            $(togel).insert({
                bottom: togel_link_back
            });
            $(el).insert({
                bottom: togel_link
            });
            $(el).insert({
                bottom: togel
            });
        }
    });
}

function buildRecommendationDialog() {
	var script = new Element('script', {src: '/data/scripts/cms/modal_window.js', type: 'text/javascript'});
	$$('body')[0].insert({bottom: script});
	$$('.recommend-book').invoke("observe","click", function(e) {
			e.stop();
			new Ajax.Request('/ajax/recommend', {onComplete: function(r){
				mod1 = new ModalWindow({	width:'600px', content: r.responseText});
				mod1.show()
			}});
	});
}

function buildReviewDialog() { 
	$$('body')[0].insert({bottom: new Element('script', {src: '/data/scripts/cms/modal_window.js', type: 'text/javascript'}) });
	$('review_btn').observe("click", function(e) {
			e.stop();
			new Ajax.Request('/ajax/review', {onComplete: function(r){
				mod1 = new ModalWindow({	width:'600px', content: r.responseText});
				mod1.show()
			}});
	});
}

function buildSendpasswordDialog() { 
	$$('body')[0].insert({bottom: new Element('script', {src: '/data/scripts/cms/modal_window.js', type: 'text/javascript'}) });
	$('forgot_password').observe("click", function(e) {
			e.stop();
			new Ajax.Request('/ajax/sendpassword', {onComplete: function(r){
				mod1 = new ModalWindow({	width:'600px', content: r.responseText});
				mod1.show()
			}});
	});
}


function positionProductLinks() {	
/*	if ($$('.product-links').length > 0) {
		var top = $$('.left-column')[0].select('div')[0].positionedOffset().top;
		$$('.product-links')[0].setStyle({top: top+"px"});
	} */
}

/**
 * Allgemeine Hilfefunktionen für Formulare :)
 */
function formDescriptions() { 
	$$('.formdesc').invoke('hide').invoke('setStyle',{position:'absolute'}).each(function(el,n){

		if (el.previous().down('input')) var element = 'input';
		else if (el.previous().down('select')) var element = 'select';
		else if (el.previous().down('textarea')) var element = 'textarea';
		
		el.previous().observe('mouseover', toggleHint.bind(this,1));
		el.previous().observe('mouseout', toggleHint.bind(this,0));
		
		el.previous().down(element).observe('focus', toggleHint.bind(this, 1));
		el.previous().down(element).observe('blur', toggleHint.bind(this, 0));
		
		function toggleHint(show, e) {
			//if (e.toElement==el.previous() || el.previous().descendants().include(e.relatedTarget)) return; //!!!!!! Damit ein MOUSEIN MOUSEOUT funktioniert
			if (!show) el.fade({duration: 0.2, queue: {scope:'_desc'+n,position:'end'}, beforeStart: function() {Effect.Queues.get('_desc'+n).each(function(effect){effect.cancel();}); }});
			else 	   el.appear({duration: 0.2, queue: {scope:'_desc'+n,position:'end'}, beforeStart: function() {Effect.Queues.get('_desc'+n).each(function(effect){effect.cancel();}); }});
			Event.stop(e);
		}
		
		var left = el.previous().down(element).getWidth();
		var top = el.previous().down(element).positionedOffset().top - 3;
		var rest = el.getOffsetParent().getWidth() - left;
		var width = (rest<el.getWidth()) ? rest - 20 - 20 : el.getWidth();
		var arrow = new Element('div', {className: 'arrow'});
		el.setStyle({left: left + 20 + "px", top: top + "px", width: width + "px"}).insert(arrow);
	});
	/*$$('form').each(function(form){
		form.getInputs().invoke('observe','focus',function(e){Effect.ScrollTo(e.element(),{duration:0.2});})
	});*/
}

function scrollToError() {
	var el = $$('ul.errors')[0].up('.row');
	if (el.down('input')) var element = 'input';
	else if (el.down('select')) var element = 'select';
	else if (el.down('textarea')) var element = 'textarea';
	
	Effect.ScrollTo($$('ul.errors')[0].up('.myform'),{duration:0.5});
	el.down(element).focus();
}

//Formularelemente die nur bei bestimmten Auswahlen angezeigt werden sollen ausblenden
function formCleanUp() {
	$$('.displaynone').each(function(el){
		$(el).up('.row').hide();
		var listen = $(el).readAttribute('rel').split('=')[0];
		var listen_value = $(el).readAttribute('rel').split('=')[1];
		$(listen).observe('change', valueChanged);
		valueChanged();
		function valueChanged() {
			if ($F(listen) == listen_value && !$(el).up('.row').visible() ) $(el).up('.row').slideDown({duration: 0.5, queue: {scope:'_displaynone',position:'end'}});
			else if ($(el).up('.row').visible()) $(el).up('.row').slideUp({duration: 0.5, queue: {scope:'_displaynone',position:'end'}});
		}
	});	
}

//Die Buttons von den Adressaufklebern brauchen funktion
function addressSticker() {
	var script = new Element('script', {src: '/data/scripts/cms/modal_window.js', type: 'text/javascript'});
	$$('body')[0].insert({bottom: script});
	
	$$('.address_sticker').each(function(el) {
		var id = $(el).readAttribute('rel');
		if ($(el).select('.btns a').length == 0) return;
		//Standard festlegen
		$(el).select('.btns a')[0].observe('click', function(e) {
				new Ajax.Request('/ajax/setdefaultaddress/id/' + id, {onComplete: function(r){
					$$('.tabs .myaccountaddresses')[0].update(r.responseText);
				}});
		});
		//Adresse Löschen
		$(el).select('.btns a')[2].observe('click', function(e) {
			if (confirm('Sind Sie sicher, dass Sie die angeklickte Adresse aus Ihren gespeicherten Adressen entfernen wollen?')) {
				new Ajax.Request('/ajax/deleteaddress/id/' + id, {
					onComplete: function(r){
						$$('.tabs .myaccountaddresses')[0].update(r.responseText);
					}
				});
			}
		});
		//Adresse bearbeiten
		$(el).select('.btns a')[1].observe('click', showWindow.curry(id));
	});
	$('addnewaddress').observe('click', showWindow.curry(''));
	
	function showWindow(id, e) {
			new Ajax.Request('/ajax/addressform/id/' + id, {onComplete: function(r){
					var fe = new ModalWindow({
						width:'785px',
						content: r.responseText
					});
					fe.show();
					$('address_form').observe('submit', function(e){
						var post = $('address_form').serialize() + "&id=" + id;
						new Ajax.Request('/ajax/addressformsave', {
							postBody: post,
							onComplete: function(r) {
								var q = r.responseJSON;
								if (!q.success) {
									for(eig in q) {
										var error = new Element('ul', {className: 'errors'}).hide();
										for (msg in q[eig]) var li = new Element('li').update( q[eig][msg] );
										error.insert(li);
										$(eig).highlight({duration: 0.5}).insert({after: error});
										error.slideDown({duration:0.2}).slideUp({duration:0.2,delay:4});
									}
								}
								else {
									new Ajax.Request('/shop/myaccountaddresses', {onComplete: function(r){
										$$('.tabs .myaccountaddresses')[0].update(r.responseText);
									}});
									fe.close();
								}
							}
						});
						e.stop();
					});
			}})
	}	
}

function checkoutAddresses() {
	var billing = $$('#address_billing')[0];
	if ($(billing).previous('select') != undefined && $F($(billing).previous('select'))!='other') {
		$('address_billing').hide();
	}
	else {
		if ($('address_billing').previous('.address_sticker') != undefined)
			$('address_billing').previous('.address_sticker').hide();
	}
	if ($('address_invoice').previous('select') != undefined && $F($('address_invoice').previous('select'))!='other') {
		$('address_invoice').hide();
	}
	else {
		if ($('address_invoice').previous('.address_sticker') != undefined)
			$('address_invoice').previous('.address_sticker').hide();
	}
	
	if ( $$('#billing').length == 0 ) return;
	$('billing').observe('change', function() {
		if ($F(this) == 'other') {
			$('address_billing').previous().hide();
			$('address_billing').show();
		}
		else {
			$('address_billing').previous().show();
			var id = $F('billing');
			var login = $('billing').readAttribute('rel');
			new Ajax.Request('/ajax/getaddressinformation/login/' + login + '/id/' + id, {onComplete: function(r) {
				$('billing').next().replace( r.responseText );
			}});
			$('address_billing').hide();
		}
	});
	$('invoice').observe('change', function() {
		if ($F(this) == 'other') {
			$('address_invoice').previous().hide();
			$('address_invoice').show();
		}
		else {
			$('address_invoice').previous().show();
			var id = $F('invoice');
			var login = $('invoice').readAttribute('rel');
			new Ajax.Request('/ajax/getaddressinformation/login/' + login + '/id/' + id, {onComplete: function(r) {
				$('invoice').next().replace( r.responseText );
			}});
			$('address_invoice').hide();
		}
	});
	
}

function saveCheckoutToSession(nexttab, btn, dir) {
	var tabtext = $(btn).innerHTML;
	$(btn).update('Warten...'); //Buttontext ändern
	var billing = ($$('#billing').length>0)?$F('billing'):'';
	var invoice = ($$('#invoice').length>0)?$F('invoice'):'';
	
	var forms = $$('.tabs form').invoke('serialize', true);
	var formid = $$('.tabs form').pluck('id').zip(forms).toJSON().toString();
	
	var activeTab = nexttab;
	
	var post = "billing=" + billing + "&invoice=" + invoice + "&forms=" + formid + "&tab=" + activeTab;
	
	new Ajax.Request('/ajax/checkoutsession', {postBody: post, onComplete: function(r){
		//Wenn activeTab 4 also Prüfen, dann soll checkorder aktualisiert werden
		new Ajax.Updater('checkorder', '/shop/checkorder'); //DIe JSON rückgabe der Session speichern Funktion aktualisiert nichts außer falsche Formulare. Deswegen muss hier nochmal das letzte Tab (Prüfen) aktualisiert werden
		var q = r.responseJSON; var errorfound=0;
		if (dir && nexttab==2) {
			$('shipping_art').update(q.shipping_form);
			$('payment_art').update(q.payment_form);
			for (eig in q) {
				if (eig=='ship_art' || q[eig].success || eig=='shipping' || eig=='shipping_form' || eig=="payment_form") 
					continue;
				for (feld in q[eig]) {
					var error = new Element('div', {
						className: 'error'
					});
					//alert(feld);
					for (err in q[eig][feld]) 
						error.update(q[eig][feld][err]).hide();
					$(feld).insert({
						after: error
					});
					error.blindDown({
						duration: 0.5
					});
					error.blindUp({
						delay: 3,
						duration: 0.5,
						afterFinish: function(e){
							e.element.remove()
						}
					});
					errorfound++;
				}
			}
		}
		if (errorfound==0) myaccount_tab.jump(nexttab);
		$(btn).update(tabtext);
	}});
	
	
}

function checkoutButtons() {
	$$('.tabs div.tab').each( function(el,m) {
        el.select('.control').each(function(el2,n){
			el2.stopObserving('click').observe('click', function(e){
				e.stop();
				if ($$('.tabs div.tab').length - 2 == m && n != 0) { //Abschickenbutton
					if ( !$('agb_checkbox').checked ) { //Wenn die AGB nicht bestätigt sind, dann schlecht
						
						alert('Bitte akzeptieren Sie die Allgemeinen Geschäftsbedingungen!');
						$('agb_checkbox').previous('label').highlight();
						return;
					}
					new Ajax.Request('/ajax/processorder', {onComplete: function(r) {
						var q = r.responseJSON;
						var form = new Element('form', {method: q.form.method, action: q.form.url});
						for (eig in q.form) {
							if (eig=='method'||eig=='url') continue;
							var input = new Element('input', {type:'hidden',name:eig,value:q.form[eig]});
							form.insert(input);
						}
						$$('body')[0].insert(form);
						form.submit();
					}});
				}
				else {
					if (n == 0 && el.select('.control').length > 1) 
						saveCheckoutToSession(m - 1, e.element(), 0);
					else 
						saveCheckoutToSession(m + 1, e.element(), 1);
				}
			})
		});
	});
	//Deaktivieren der Tabsteuerung
	$$(myaccount_tab.reiter).invoke('stopObserving','click').invoke('setStyle',{cursor:'default'});
}

function ajaxForms() {
	$$('form').pluck('id').grep(/_ajax/).each(function(id){
		$(id).observe('submit', function(e){
			e.stop(); var url=e.element().readAttribute('action');
			var post = e.element().serialize();
			new Ajax.Request(url, {postBody: post, onComplete: function(r){
				var q = r.responseJSON;
				if (q.success) { alert( q.msg );e.element().reset();
					var funci=e.element().readAttribute('data-submit'); //Übergibt eine Funktion die nach erfolgreicher Übergabe des Formulars aufgerufen wird
					if (funci!=null)window[funci](q);return}
				for (feld in q) {
					var error = new Element('div', {className: 'error'}).hide();
					for (err in q[feld]) error.update(q[feld][err]);
					$(feld).insert({	after: error	});
					error.blindDown({duration: 0.5}).blindUp({delay: 3,	duration: 0.5,afterFinish: function(e){e.element.remove()}});
				}
			}});
		});
	});
}

//Funktion für das direkte Suchen in select feldern
function searchList(in1, out) {
	var w = $F(in1);
	if (w.length==0){$(out).select('option').each(function(el){el.removeAttribute('disabled');$(out).insert(el)});$(out).select('optgroup').invoke('remove');return;}
	var m = new RegExp(w.split(' ').join('|'), 'gi');
	if ($(out).select('optgroup').length==0)$(out).insert(new Element('optgroup', {label:'Suchergebnis'})).insert(new Element('optgroup', {label: 'Keine Treffer'}));
	$(out).select('option').each(function(el){if ($(el).innerHTML.match(m)) {$(el).removeAttribute('disabled');$(out).down('optgroup').insert( el );}else $(out).down('optgroup', 1).insert( $(el).writeAttribute('disabled','disabled') );});
}
