/* 
	goin.quicklook.js version 009
	Bietet Filtermethoden um schnell Produkte zu finden.
*/
if(jQuery) (function($){
	// public variables and methods
	$.extend({
		// die schnellauswahl der goin seite
		quicklook: {
			
			defaults: {
				useClass:'.quicklook', // css class für das panel
				qlToggle:'#bar' // css class für den button
			},
			
			
			// schnellauswahl initialisieren
			init: function(options) {
				
				var options = $.extend( {}, $.quicklook.defaults, options );
				var $target = $(options.useClass);
				var $ROW = $target.find('DIV.property');
				var $close = $target.find('A.close');
				var $selectlink = $ROW.find('DIV.content A');
				var $selectall = $ROW.find('DIV.options A.all');
				var $reset = $ROW.find('DIV.options A.reset');
				var $open = $(options.qlToggle);
				
				
				// global ajax loading indicator
				$('DIV.quickresult .title')
					.before('<div id="loader" style="background:#FFF;display:block;float:left;position:relative;left:0;padding-right:10px;vertical-align:bottom;width:16px;z-index:10;"><img src="' + $.goin.defaults.ajaxLoadingImage + '" alt="Loading …" /></div>');
				var $loader = $('#loader');
				$loader.find('IMG')
					.ajaxStart(function() {$(this).show();})
					.ajaxStop(function() {$(this).hide();})
				.end();
				
				
				// panel schliessen button
				$close.click($.quicklook.toggle);
				
				
				// verhalten und konfiguration der zeilen
				$ROW.each(function() {
					var $this = $(this);
					$this
						// html validen title tag in rel tag konvertieren
						.attr('rel', $this.attr('title'))
						// dann titel zurücksetzen um hover zu vermeiden
						.attr('title','')
						// hover support für IE6
						.hover(function(){
							$(this).addClass('hover')
								.find('.options').css('visibility','visible');
						},function(){
							$(this).removeClass('hover')
								.find('.options').css('visibility','hidden');
						});
				});
				
				
				// toggle verhalten für alle auswahl links
				$selectlink.click(function(event){
					event.preventDefault();
					var $A = $(this);
					$A.toggleClass('active');
					// titel der reihe ebenfalls markieren
					var hasActiveElement = false;
					var $ROW = $A.parent().parent();
					var $All = $ROW.find('.content A');
					$All.each(function(){
						if ($(this).hasClass('active')) hasActiveElement = true;
						if (hasActiveElement) $ROW.find('strong').addClass('active');
						else $ROW.find('strong').removeClass('active');
					});
				});
				
				
				// alle in einer zeile selektieren
				$selectall.click(function(event){
					event.preventDefault();
					var $ROW = $(this).parent().parent().parent().parent();
					var $All = $ROW.find('.content A');
					$All.each(function(){
						if (!$(this).hasClass('active')) $(this).addClass('active');
					});
					// titel der reihe ebenfalls als aktiv markieren
					$ROW.find('strong').addClass('active');
				});
				
				
				// selektion einer zeile zurücksetzen
				$reset.click(function(event){
					event.preventDefault();
					var $ROW = $(this).parent().parent().parent().parent();
					var $All = $ROW.find('.content A');
					$All.each(function(){
						if ($(this).hasClass('active')) $(this).removeClass('active');
					});
					// titel der reihe ebenfalls als inaktiv markieren
					$ROW.find('strong').removeClass('active');
				});
				
				
				// position initialisieren
				$.quicklook.position(options);
			},
			
			// html format des popups
			format: function(data) {
				return '<div class="jq-box jq-qbx quicklook" style="float:left; display:none;">'
					+'<table cellpadding="0" cellspacing="0" border="0"><tbody>'
					+'<tr><td class="tl"></td><td class="t"></td><td class="tr"></td></tr>'
					+'<tr><td class="l"></td>'
					+'<td class="c"><a class="close"></a>'
					+'<p>'+data+'</p>'
					+''
					+'</td>'
					+'<td class="r"></td></tr>'
					+'<tr><td class="bl"></td><td class="b"></td><td class="br"></td></tr>'
					+'</tbody></table></div>';
			},
			
			// position des popups berechnen
			position: function(options) {
				if ($(options.qlToggle).length > 0) {
					var top = $(options.qlToggle).offset().top;
					$(options.useClass).css('top', 130);
				}
			},
			
			// ergebniss der aktuellen selektion über ajax laden
			load: function(options) {
				// selektierte zeilen auswerten
				$.quicklook.selectRows();
				// ajax aufruf abschicken
				$.quicklook.apply();
			},
			
			// anhand der aktiven links entsprechende zeilen ebenfalls aktiv setzen
			selectRows: function(options) {
				var options = $.extend( {}, $.quicklook.defaults, options );
				// wenn ein element aktiv ist titel der einzelenen zeilen markieren
				var $ROW = $(options.useClass).find('DIV.property');
				$ROW.each(function(index, element) {
					var hasActiveElement = false;
					var $All = $(element).find('.content A');
					$All.each(function() {
						if ($(this).hasClass('active')) {
							$(element).find('strong').addClass('active');
							return;
						}
					});
				});
			},
			
			// ajax anfrage erstellen, abschicken und ergebnis anzeigen
			apply: function(options) {
				var options = $.extend( {}, $.quicklook.defaults, options );
				//$.quicklook.toggle();
				// AJAX
				var AJAXQUERY = $.goin.defaults.ajaxQuicklookServiceUrl; // AJAXQUERY 
				// auswahl anzeigen
				var result = "";
				var $ROW = $(options.useClass).find('div.property');
				// alle zeilen durchlaufen
				$ROW.each(function() {
					var $title = $(this).find('strong');
					if ($title.hasClass('active')) {
						var ROWKEY = $(this).attr('rel'); // AJAXQUERY 
						var ROWVALUES = ""; // AJAXQUERY 
						var first = "";
						result += '<div class="property clear-block"><strong>'+$title.html()+'</strong><div class="content">';
						var $All = $(this).find('.content A');
						$All.each(function(index) {
							if ($(this).hasClass('active')) {
								result += '<span>'+$(this).html()+'</span>';
								ROWVALUES += first + this.rel; // AJAXQUERY 
								// kein dash für den ersten eintrag
								first = '|';
							}
						});
						result += '</div></div>';
						AJAXQUERY += '&' + ROWKEY + '=' + ROWVALUES; // AJAXQUERY 
					}
				});
				
				// markierung ob ein redirect nötig ist
				var redirect;
				// wir befinden uns bereits auf der schnellauswahl seite
				if ($('BODY').hasClass('page-property')) {
					redirect = false;
					AJAXQUERY += '&load=false';
				} else {
					redirect = true;
					AJAXQUERY += '&load=true';
				}
				
				// auswahl in die ergebnisbox einfügen
				$('DIV.c-result').html(result);
				var url = AJAXQUERY;
				// ergebnisse anhand der auswahl laden
				$.get(url, function(data) {
					// wenn ein redirekt nötig ist zielseite abfragen
					if (redirect) {
						window.location.href = $(options.qlToggle).find('A').attr('href');
						return;
					}
					
					var count = $('<p></p>').html(data).find('LI').length;
					// CUFON
					if (!$('.quickresult .title SPAN.count').length > 0)
						$('.quickresult .title').prepend('<span class="count"></span>');
					$('.quickresult .title SPAN.count').html(count + ' ');
					Cufon.refresh('h2,h3');
					
					// ergebnis anzeigen und animieren
					$(".product-matrix").slideUp('fast',function(){
						$(this).html(data).slideDown('slow');
						$(".product-matrix LI A").tooltip();
					});
				});
				
			},
			
			// auswahl anzeigen schaltfläche
			submit: function(options) {
				var options = $.extend( {}, $.quicklook.defaults, options );
				$.quicklook.toggle();
				// änderung von apply to load
				$.quicklook.load();
			},
			
			// alle selektieren zurücksetzen
			reset: function(options) {
				var options = $.extend( {}, $.quicklook.defaults, options );
				var $All = $(options.useClass).find('.property .content A');
				$All.each(function() {
					if ($(this).hasClass('active')) $(this).removeClass('active');
				});
				// titel der reihe ebenfalls als inaktiv markieren
				$(options.useClass).find('.property strong').removeClass('active');
			},
			
			// auswahl panel toggle
			toggle: function(options) {
				var options = $.extend( {}, $.quicklook.defaults, options );
				//$(options.qlToggle).toggleClass('active');
				//$(options.useClass).slideToggle('fast');
				
				var layer = $('.quicklook').expose({
					onBeforeLoad:function(){
						$(options.useClass).show('fast');
					},
					onLoad:function(){ },
					onBeforeClose:function(){$(options.useClass).hide('fast');},
					loadSpeed:0,//'fast',
					color:'#333',
					opacity:0.0,
					api:true
				});
				if (layer.isLoaded())
					layer.close();
				else 
					layer.load();
				
				return false;
			}
		}
	});
	// caching des popup inhaltes
	var loaded = false;
	// jquery prototypes
	$.fn.extend({
		// jquery plugin implementation
		quicklook: function(options) {
			// popup html generieren
			if ($('.quicklook').length == 0) $('DIV.container').prepend($.quicklook.format());
			// referenz auf das popup
			var $target = $('.quicklook');
			// alle elemente durchlaufen
			return this.each(function() {
				// klick event um die schnellauswahl zu öffnen
				$(this).click(function() {
					// wenn der inhalt noch nicht geladen wurde
					if (!loaded) {
						// markierung setzen
						loaded = true;
						// pfad zum inhalt der schnellauswahl
						var url = $.goin.defaults.quicklookContentUrl;
						// schnellauswahl inhalte über ajax laden
						$.ajaxSetup({global:false});
						$.get(url, function(data) {
							// ergebnis daten in popup einfügen
							$target.find('.c p').html(data);
							// font replacemnts aktualisieren
							Cufon.refresh("DIV.quickresult .submit A");
							Cufon.refresh("DIV.quicklook .options A");
							Cufon.refresh("DIV.quicklook .submit A");
							// verhalten initialisieren
							$.quicklook.init();
							// popup anzeigen
							$.quicklook.toggle();
						});
						$.ajaxSetup({global:true});
					} else $.quicklook.toggle();
					return false;
				});
				
				// wenn wir uns bereits auf der schnellauswahl seite befinden
				if ($('BODY.page-property').length > 0) {
					// wenn der inhalt noch nicht geladen wurde
					if (!loaded) {
						// markierung setzen
						loaded = true;
						// pfad zum inhalt der schnellauswahl
						var url = $.goin.defaults.quicklookContentUrl;
						// schnellauswahl inhalte über ajax laden
						$.get(url, function(data) {
							// ergebnis daten in popup einfügen
							$target.find('.c p').html(data);
							// font replacemnts aktualisieren
							Cufon.refresh("DIV.quickresult .submit A");
							Cufon.refresh("DIV.quicklook .options A");
							Cufon.refresh("DIV.quicklook .submit A");
							// verhalten initialisieren
							$.quicklook.init();
							// ergebnisse laden
							$.quicklook.load();
						});
					}
				}
			});
		}
	});
	$(function() { 
		// verhalten initialisieren
		//if ($('.quicklook').length > 0) 
		//$.quicklook.init();
		$('#bar').quicklook();
		//$('#ql-link').quicklook();
		$('.quickresult .submit','BODY.page-property').quicklook();
		
		
		/*
		$('#ql-link').click(function(event){
			event.preventDefault();
			return false;
		});*/
	});
})(jQuery);




/* 
	goin.basket.js version 003
	Aktualisiert die Mengenangabe des Warenkorbes im Hauptmenü.
*/
(function($) {
	// public variables and methods
	$.extend({
		// produkt warenkorb
		basket: {
			// plugin defaults
			defaults: {
				addUrl: $.goin.defaults.ajaxSubmitToCartUrl,
				removeUrl: $.goin.defaults.ajaxSubmitToCartUrl,
				updateUrl: $.goin.defaults.ajaxSubmitToCartUrl
			},
			
			// initialisieren
			init: function(options) {
				var options = $.extend( {}, $.basket.defaults, options );
				$.basket.update($.basket.defaults.updateUrl);
			},
			
			// warenkorb eintrag hinzufügen
			add: function(value) {
				$.basket.update($.basket.defaults.addUrl + value);
			},
			
			// warenkorb eintrag löschen
			remove: function(value) {
				$.basket.update($.basket.defaults.removeUrl + value);
			},
			
			// menge des warenkorb menüeintrags aktualisieren
			update: function(url) {
				$.ajaxSettings.global = false;
				$.get(url, function(data) {
					$.basket.updateText(data);
				});
				$.ajaxSettings.global = true;
			},
			
			// text im menü aktualisieren
			updateText: function(data) {
				// zeiger auf den richtigen menüeintrag ermitteln
				var id = $('<div />').html(data).find('SPAN').attr('class');
				// wenn kein zeiger zu finden ist abbrechen
				if (id == null) return; 
				 // als zeiger wird ein class selektor verwendet!
				var $item = $('.' + id);
				// wenn der tag noch nicht existiert 
				if (!$item.find('SPAN.red').length > 0) 
					// wird er neu angelegt
					$item.find('A').append(' / <span class="red"></span>');
				// tag mit dem geladenen ergebniss füllen
				$item.find('SPAN.red').html(data);
				// font replacement aktualisieren
				Cufon.refresh('DIV.navigation LI');
			}
			
		}
	});
	// verhalten initialisieren
	$(function() { 
		//$.basket.init();
	});
})(jQuery);




/* 
	goin.fastlogin.js version 003
	Bestimmt das Verhalten des Login Formulares der Seite.
*/
(function($) {
	$.fn.fastLogout = function() {
		$(this).click(function() {
			$.get(this.href, function(data) {
				$("SPAN.wellcome-message").replaceWith(data);
				$("DIV#login").fastLogin();
				Cufon.refresh("DIV#login LABEL");
				Cufon.refresh("DIV#login A");
			});
			return false;
		});
	};
	$.fn.fastLogin = function(options) {
		// plugin konfigurations parammeter
		var options = $.extend({}, $.fn.fastLogin.defaults, options);
		var $target = $(this); // referenz auf den login form container
		var $inputs = $("INPUT:not(.form-submit),A", $target); // refernez auf die eingabefelder
		var numb = $("INPUT:eq(0)", $target).val(); // standard wert des nummern feldes
		var pass = $("INPUT:eq(1)", $target).val(); // standard wert des passwort feldes
		var password = ""; // passwort eingabe das benutzers
		var clientid = ""; // kundennummer eingabe des benutzers
		// ajax loading indicator
		var $loader = $('<div id="login-loader" style="background:#FFF;display:block;float:right;position:relative;left:0;padding:5px 0 0 10px;vertical-align:bottom;width:16px;z-index:10;"><img src="' + $.goin.defaults.ajaxLoadingImage + '" alt="Loading …" /></div>');
		
		
		$("INPUT.form-submit", $target).hide();
		$("INPUT:eq(2)", $target).val(""); // no javascript standard wert löschen
		$target.addClass("js"); // markierung für die javascript fähige eingabemaske
		$inputs.hide().eq(0).show(); // alle eingabefelder bis auf das erste verstecken
		
		// verhalten für das nummern eingabefeld
		$("INPUT:eq(0)", $target)
		.focus(function(){
			$inputs.fadeIn("fast").eq(2).hide(); // sichtbarkeit der felder setzen
			// wenn das passwort gesetzt wurde das fake feld verstecken
			if (password != "") $inputs.show().eq(1).hide();
			if ($(this).val() == numb) $(this).val(""); // standard wert löschen
		})
		.blur(function() {
			clientid = $(this).val();
			if ($(this).val() == "") { // nur wenn kein text eingegeben wurde
				$inputs.hide().eq(0).show(); // sichtbarkeit der felder setzen
				$(this).val(numb); // das feld auf standard wert zurücksetzen
			}
		});
		
		// verhalten für das fake passwort eingabefeld
		$("INPUT:eq(1)", $target)
		.blur(function() { $(this).hide(); })
		.focus(function(){
			$inputs.show().eq(1).hide(); // das fake eingabefeld verstecken
			$inputs.eq(2).focus(); // das passwort eingabefeld fokusieren
		});
		
		// verhalten für das passwort eingabefeld
		$("INPUT:eq(2)", $target).blur(function() {
			password = $(this).val(); // die passwort eingabe speichern
			// wenn kein passwort gesetzt wurde das feld verstecken
			if (password == "") $inputs.show().eq(2).hide();
			if (password == "" && clientid == "") $inputs.hide().eq(0).show();
		});
		
		$("A.login-submit").click(function() {
			//$(this).parent().submit();
			/* */
			var url = this.href;
			url += '&user=' + $("INPUT:eq(0)", $target).val();
			url += '&pass=' + $.md5( $("INPUT:eq(2)", $target).val() );
			$(this).append($loader);
			$.ajaxSettings.global = false;
			$.get(url, function(data) {
				$loader.remove();
				var $result = $('<span />').html(data);
				if ($result.find('.error-message').length) {
					if ($('BODY').find('.error-message').length) $('BODY').find('.error-message').replaceWith("");
					$target.after(data);
				} else {
					$target.replaceWith(data);
					Cufon.refresh('DIV.footer SPAN.wellcome-message SPAN.logout');
					$('SPAN.logout A','DIV.footer').fastLogout();
					/*
					$('SPAN.logout A','DIV.footer').click(function() {
						$.get(this.href, function(data) {
							//if (data == "") return;
							$target.replaceWith(data);
							$("DIV#login").fastLogin();
							Cufon.refresh("DIV#login LABEL");
							Cufon.refresh("DIV#login A");
						});
						return false;
					});*/
				}
			});
			$.ajaxSettings.global = true;
			return false;
		});
		
		$('#login-number, #login-password','DIV#login').keydown(function(event) {
			if (event.keyCode == 13) { 
				if ($('BODY').find('.error-message').length) $('BODY').find('.error-message').replaceWith("");
				$("A.login-submit").click();
				return false;
			}
		});
		
	};
	// plugin defaults
	$.fn.fastLogin.defaults = {
		color:'red'
	};
	$(function() { 
		$("DIV#login").fastLogin();
		$('SPAN.logout A','DIV.footer').fastLogout();
	});
})(jQuery);




/* 
	goin.fastsearch.js version 002
	Bestimmt das Verhalten des Suchbox Formulares der Seite.
*/
(function($) {
	$.extend({
		fastSearch: {
			init: function(data) {
				var isSearchpage = $('BODY').hasClass('page-search');
				var $search = $("DIV.search");
				$('LABEL',$search).after('<a class="reset" href="#"></a>');
				$('.reset',$search)
					.css('display','none')
					.click(function() {
						$('INPUT',$search).val("").focus().change();
						return false;
					});
				$('INPUT',$search).typeWatch({
					callback:function(){ $('INPUT',$search).change(); },
					wait:0,
					highlight:false,
					captureLength:0
				}).change(function() {
					//var cond = ($(this).val() != "");
					//$search.find('LABEL')[cond ? 'fadeIn' : 'fadeOut']('fast');
					if ($(this).val() != "") {
						$search.find('.reset:hidden').fadeIn('fast');
					} else {
						$search.find('.reset:visible').fadeOut('fast');
					}
				}).blur(function() {
					if (isSearchpage) return;
					if ($(this).val() == "") {
						$search.removeClass('focus').find('LABEL').css('color','#999');
						Cufon.refresh('DIV.search LABEL');
					}
				}).focus(function() {
					if (isSearchpage) return;
					$search.addClass('focus').find('LABEL').css('color','#FFF');
					Cufon.refresh('DIV.search LABEL');
				})
				.change();
				if (isSearchpage) $search.find('.reset:hidden').fadeIn('fast');
			}
		}
	});
	$(function() { 
		$.fastSearch.init();
	});
})(jQuery);