var DEBUG = (Browser.Engine.gecko && typeof console != 'undefined'); // console ein bei firefoxen
DEBUG = false;

var IE = {
	v6: false,
	v7: false,
	v8: false
}

/*
 * Javascript User bekommen weitere Styles geliefert
 */
var JSCSS = new Asset.css('/_inc/css/js-activated.css'); 

/*
 * User mit Auflösung über 1024 bekommen großzügigeres Layout geliefert
 */
var WIDECSS = (screen.width > 1024) ? new Asset.css('/_inc/css/layout_wide.css') : false;

var HC = {
	initialize: function(lang){
		this.lang = (lang) ? lang : 'de';
		this.zitatBox = $('zitat');
		this.zitatCookie = Cookie.read('HatjeCantz');
		this.elNavigation = $('navigation');
		this.slideShows = $$('.slideShow'); 	  // z.B. Startseite
		this.scrollShows = $$('.scrollShow');     // z.B. Startseite
		this.fadeShows = $$('.fadeShow'); 		  // z.B CE Detailseite
		this.alphaNavis = $$('.alphaNavi'); 	  // z.B. CE Übersicht
		this.fadeShowInterval = 5000;			  // autoFadeshow interval [ms]
		this.fadeShowGoto = $$('.fadeShowGoto');  // direkt auf bild faden (CE)
		this.ceDetails = $$('.ceDetails');		  // z.B. Bibl.Angaben CE-Detail
		this.bookSlideShow = $$('.bookSlideShow');
		this.toolTips = $$('.showTooltip');
		this.artinfoTips = $$('.showArtinfoTip');
		this.tipContainers = $$('.tipContainer');
		this.elsToClearOnFocus = $$('.clearOnFocus');
		this.elsToToggle = $$('.toggleItems');
		this.elsToOpenInNewWin = $$('.targetBlank');
		this.elsToGotoHref = $$('.gotoHref');
		this.elsToShowOnClick = $$('.showOnClick'); // z.B. Interview Portait ein/ausblenden
		this.elsToHideOnLoad = $$('.hideOnLoad');   // Elemente die nach onload ausgeblendet werden sollen.
		this.elsToAddHover = $$('.addHover');	    // z.B. Confirm Order-Btn
		this.elsToRemoveHighights = $$('.removeHighlights'); // klick auf 'Links' soll Navihiglights reseten
		this.shoppingCart = $('shoppingCart');
		this.shoppingWrapper = (this.shoppingCart) ? this.shoppingCart.getElement('DIV.wrapper') : false;
		this.elsToAddToCard = $$('.addToCard');
		this.elsToRemoveFromCart = $$('.removeFromCart');
		this.noteCart = $('noteCart');
		this.noteWrapper = (this.noteCart) ? this.noteCart.getElement('DIV.wrapper') : false;
		this.elsToAddToNote = $$('.addToNote');
		this.elsToRemoveFromNote = $$('.removeFromNote');
		this.elsToMaximizeCover = $$('.maximizeCover');
		this.elsToOpenNewWin = $$('.openWin');
		this.lightBox = $('lightBox');
		this.footer = $('footer');
		this.tweets = $('tweets');
		
		this.checkViewPort();
		this.addEvents();
		this.createFooter();
		this.preloadAssets();
		if (IE.v6) this.ie6hookups();
	},
	checkViewPort: function() {
		/* OnDomReady und Resize überprüfen ob genügen Platz für die fixierte Navi ist */
		if (IE.v6) return; // IE6 hat sowieso absolute Navi
		var winH 	 = $(document.body).getHeight().toInt();
		var winW 	 = $(document.body).getWidth().toInt();
		var naviH 	 = this.elNavigation.getElement('UL').getHeight().toInt();
		var contentH = $('content').getScrollSize().y + 45; // +45 wg. Footer
		if (naviH > winH) {
			this.elNavigation.addClass('fallback');
			this.elNavigation.setStyles({
				'height': contentH
			})
		} else {
			this.elNavigation.setStyles({
				'height': 'auto'
			})
			this.elNavigation.removeClass('fallback');
		}
	},
	addEvents: function(){
		var $this = this;
		
		/**
		 * Warenkorb Events attachen/aktualisieren
		 */
		if (this.elsToRemoveFromCart) this.addCardEvents(this.shoppingCart);
		
		/**
		 * Merkzettel Events attachen/aktualisieren
		 */
		if (this.elsToRemoveFromNote) this.addNoteEvents(this.noteCart);
		
		/**
		 * Lightbox vorbereiten
		 */
		if (this.lightBox) this.prepareLightBox();
		
		/**
		 * Artikel-zum-Warenkorb-hinzufügen-Event anhängen
		 */
		this.elsToAddToCard.each(function(item,index){
			var newHref = item.href.replace(/cart_add/g, "cart_add_ajax");
			if (item.hasClass('signedBook')) {
				var btnText = (LANG == 'de') ? 'Signiertes Buch bestellen' : 'Order Signed Book';
			} else {
				var btnText = (LANG == 'de') ? 'In den Warenkorb' : 'To Shopping Cart';
			}
			item.set('html','<span>' + btnText + '</span>');
			item.wrapper = $this.shoppingWrapper;
			item.addEvents({
				'click':function(e){
					var ev = new Event(e).stop();
					if (this.hasClass('confirmSignedBook')) {
						var confirmText = (LANG == 'de') ? 'Dieses Buch ist auch vom Autor signiert erhältlich, wollen Sie die signierte Ausgabe bestellen?' : 'ENGL. ÜBERSETZUNG';
						var orderSigned = confirm(confirmText);
						if (orderSigned) {
							newHref += '&signed=true';
						}
					}
					this.wrapper.set('load', {
						encoding: 'iso-8859-1',
						onComplete: function(){
							$this.refreshAddToCardButton(item);
							$this.refreshCartHeight($this.shoppingCart);
							$this.addCardEvents();
						}
					}).load(newHref);
				}
			});
		});
		
		/**
		 * Artikel-zum-Merkzettel-hinzufügen-Event anhängen
		 */
		this.elsToAddToNote.each(function(item,index){
			var newHref = item.href.replace(/note_add/g, "note_add_ajax");
			item.wrapper = $this.noteWrapper;
			item.addEvents({
				'click':function(e){
					var ev = new Event(e).stop();
					this.wrapper.set('load', {
						encoding: 'iso-8859-1',
						onComplete: function(){
							$this.refreshCartHeight($this.noteCart);
							$this.addNoteEvents();
						}
					}).load(newHref);
				}
			});
		});
		
		/**
		 * Slideshows initalizieren
		 */
		this.slideShows.each(function(item,index){
			item.naviItems = item.getElements('.headNavi a[rel]'); // Navipunkte mit rel
			item.naviTitle = item.getElements('.headCrumb'); // Slideshow Titel
			item.slideItems = item.getElements('.slide');
			item.naviItems.each(function(naviItem,naviIndex){
				if (naviItem.hasClass('selected')) {
					$(naviItem.rel).fade(1);
					$(naviItem.rel).setStyle('z-index',10);
				} else {
					$(naviItem.rel).set('opacity',0);
					$(naviItem.rel).setStyle('z-index',0);
				}
				naviItem.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						item.slideItems.setStyle('z-index',0);
						item.slideItems.fade(0);
						$(this.rel).setStyle('z-index',10);
						$(this.rel).fade(1);
						item.naviItems.removeClass('selected');
						this.addClass('selected');
						if (this.title && item.naviTitle) {
							item.naviTitle.set({
								'html':this.title				   
							})
						}
					}
				});		
			});
		});
		
		/**
		 * ScrollContents initialisieren
		 */
		this.scrollShows.each(function(item,index){
			item.name = 'scroller'+index;
			item.handleLeft = item.getElement('.handleLeft');
			item.handleRight = item.getElement('.handleRight');
			item.scrollWrapper = item.getElement('.scrollWrapper');
			item.scrollContent = item.getElement('.scrollContent');
			item.minScroll = item.scrollContent.getWidth().toInt();
			item.wrapperWidth = item.scrollWrapper.getWidth().toInt();
			item.scrollPos = 0;
			item.maxScroll = (0 - item.wrapperWidth) + item.minScroll;
			// weniger als drei cover sollen links positioniert werden
			item.items = item.scrollWrapper.getElements('a');
			if (item.items.length < 3 && item.scrollWrapper.getElement('table')) {
				item.scrollWrapper.getElement('table').addClass('singleCover');
			}
			if (item.wrapperWidth > item.minScroll) { // handles einblenden falls gescrollt werden kann 
				item.handleRight.setStyle('display','block');
				item.handleLeft.setStyles({
					'opacity':0,
					'display':'block'
				});
				item.handleLeft.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						$this.doScrollShow(item,-1);
						//if (DEBUG) console.log(item.name);
					}
				});
				item.handleRight.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						$this.doScrollShow(item,1);
						//if (DEBUG) console.log(item.name);
					}
				});
			}			
		});
		
		/**
		 * Tooltipps initialisieren
		 */
		this.toolTips.each(function(item,index){ 				
			var tooltip = $(item.rel);
			//if (DEBUG) console.log(tooltip);
			if (tooltip) {
				tooltip.setStyles({
					'opacity':0,
					'display':'block'
				});
				
				item.tooltip = tooltip;
				if (tooltip.getParent('div').hasClass('scrollWrapper')) {
					// tooltipp innerhalb einer scrollShow
					// wir positionieren abhängig von der containermitte
					var parentTable = item.getParent('table');
					var parentWidth = parentTable.getWidth().toInt();
					var itemWidth   = item.getWidth().toInt();
					var toolWidth   = tooltip.getWidth().toInt();
					var itemX       = item.getPosition(parentTable).x;
					var tableOffset = parentTable.getPosition(tooltip.getParent('div.scrollWrapper')).x;
					
					
					if(itemX + (itemWidth/2) <= (parentWidth / 2) ) {
						// Tooltip steht rechts vom Item
						itemX += (itemWidth).toInt();
						item.tooltip.addClass('tooltipRight');
						//console.log((itemX + tableOffset) + ' | ' + '');
						itemX = (itemX + tableOffset + toolWidth > tableOffset + parentWidth) ? tableOffset + parentWidth - toolWidth : itemX + tableOffset;
						if (itemX < 0) itemX = itemWidth; // wg. umbau auf linksbuendig bei weniger als zwei cover... dreckig.
					} else {
						// Tooltip steht links vom Item
						itemX -= (toolWidth).toInt();
						if(IE.v6 || IE.v7) {
							itemX += 7; // Deppen-IE rechnet falsch
						}
						item.tooltip.addClass('tooltipLeft');
						itemX = (itemX < 0) ? 0 + tableOffset : itemX + tableOffset;
					}
					
					item.tooltip.setStyles({
						'left':	itemX
					});
					// Wrapper vertikal ausmitteln
					var innerWrapper = tooltip.getElement('div.wrapper');
					if (innerWrapper) {
						var toolHeight = tooltip.getHeight().toInt();
						var innerHeight = innerWrapper.getHeight().toInt();
						var innerPaddingTop    = innerWrapper.getStyle('padding-top').toInt();
						var innerPaddingBottom = innerWrapper.getStyle('padding-bottom').toInt();
						var topOffset = ((toolHeight-innerHeight)/2).toInt();
						item.tooltip.setStyles({
							'top':topOffset,
							'height':innerHeight
						});
					}
					item.fx = new Fx.Tween(item.tooltip,{
						'duration':'short',
						'link':'cancel'
					});
					item.tooltip.addEvent('mouseover',function(e){
						item.fx.start('opacity', 0);
					});
					
				}
				item.addEvents({
					'mouseover':function(e){
						if (IE.v8) {
							this.tooltip.setStyle('opacity', 1);
						} else {
							this.fx.start('opacity', 1);
						}
					},
					'mouseout':function(){
						if (IE.v8) {
							this.tooltip.setStyle('opacity', 0);
						} else {
							this.fx.start('opacity', 0);
						}
					}
				});	
			};
		});
		
		
		/**
		 * ArtinfoTips initialisieren
		 */
		this.tipContainers.set({
			'styles':{
				'opacity':0,
				'display':'block'
			}					
		});
		this.artinfoTips.each(function(item,index){	
			var tipZone = $(item.rev);
			var tipWrapper = tipZone.getElement('div.wrapper');
			var tipImage = item.getElement('img');
			var tipText  = (tipImage.alt != '') ? tipImage.alt : false;
			if(!tipText) return;
			var showArtinfoTip = function(tipText,elClass,elPos) {
				tipWrapper.set({
					'html':tipText,
					'class': 'wrapper '+elClass
				});
				var top = elPos - (tipZone.getHeight().toInt() - 33);
				tipZone.set({
					'styles':{
						'top': top
					}
				});
				tipZone.fade(1);
			}
			var hideArtinfoTip = function() {
				tipZone.fade(0);
			}
			item.relativeTo  = (item.rel) ? item.getParent($(item.rel)) : '';
			item.relativePos = 8;
			item.addEvents({
				'mouseover':function(){
					if(this.relativeTo) {
						var pos = this.getPosition(this.relativeTo).y;
					} else {
						var pos = this.relativePos;
					}
					var elClass = 'tooltipMiddle';
					if(this.hasClass('tooltipRight')) elClass = 'tooltipRight';
					else if(this.hasClass('tooltipLeft')) elClass = 'tooltipLeft';
					showArtinfoTip(tipText,elClass,pos);
				},
				'mouseout':function(){
					hideArtinfoTip();
				}
			});
		});
		
		
		/**
		 * Alphanavi (CE-Übersicht)
		 */
		this.alphaNavis.each(function(item,index) {
			var targets = $$('.alphaItem'); // modifizeren wenn mehrere
			var letters = item.getElements('a');
			letters.each(function(letter,ix){
				letter.target = $(letter.rel);
				letter.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						letters.removeClass('selected');
						this.addClass('selected');
						targets.setStyle('display','none');
						if(this.rel) $(this.rel).setStyle('display','block');
					}	
				});
			});
		});
		
		/**
		 * Fadeshows initialisieren
		 */
		this.fadeShows.each(function(item,index) {
			item.currentImg = 0; // das erste Bild ist das momentan angezeigte
			item.items = item.getElements('DIV.item'); // die einzelen Div-Items
			item.maxImg = item.items.length - 1; 
			if (item.items.length > 1) { // wenn mehr als ein bild -> buttons dazu
				item.handleLeft  = item.getElement('A.handleLeft').setStyles({
					'display':'block',
					'height':item.getHeight()
				}); // das pfeil icon links
				item.handleRight  = item.getElement('A.handleRight').setStyles({
					'display':'block',
					'height':item.getHeight()
				}); // das pfeil icon links
				item.handleLeft.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						if (item.interval) {
							$clear(item.interval); // user steuert - interval remove
							item.autoShow = function(){};
						}
						$this.fadeImage(item,-1);
					}
				});
				item.handleRight.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						if (item.interval) {
							$clear(item.interval); // user steuert - interval remove
							item.autoShow = function(){};
						}
						$this.fadeImage(item,1);
					}
				});
			}
			// der fadeshow höhe des ersten Bild geben
			item.setStyles({
				'height':item.getHeight()		   
			});
			
			item.items.each(function(imgItem,imgIndex){
				// das bild
				imgItem.image   = imgItem.getElement('IMG');
				imgItem.setStyles({
					'position':'absolute',
					'display':'block',
					'z-index': (imgIndex>0) ? 0 : 1,
					'opacity': (imgIndex>0) ? 0 : 1
				});
				// die motivbox (Titel mit kaufenbtn)
				//alert(imgItem.className);
				imgItem.motivBox = ($chk('ceMotiv'+imgIndex)) ? $('ceMotiv'+imgIndex) : false;
				//alert(imgItem.motivBox);
				imgItem.motivBoxen = $$('.bookColumnLeft .wrapper');
				imgItem.motivHighlight = function() {
					// alle highlights weg - statisch
					imgItem.motivBoxen.removeClass('selected');
					// zugehörigen highlighten
					imgItem.motivBox.addClass('selected');
				}
				// ie hookup -> über fx.tween -> opacity problem
				imgItem.fx = new Fx.Tween(imgItem,{
					'property':'opacity',
					'onComplete':function(){
						//alert('fertisch');
						if (imgItem.tooltip) imgItem.tooltip.setStyle('display','block');
						if (imgItem.motivBox) imgItem.motivHighlight();
					}
				});
				if(imgIndex == 0) imgItem.motivHighlight(); // erste motivBox highlighten
				// Tooltipps dazu
				imgItem.tooltip = imgItem.getElement('DIV.tooltip');
				if (imgItem.tooltip) { // falls tooltip vorhanden -> events dazu
					imgItem.tooltip.setStyles({
						'display':'block',
						'opacity':0.01,
						'z-index':3
					});
					imgItem.addEvents({
						'mouseover':function(){
							if(item.interval) $clear(item.interval);
							this.tooltip.fade(1);
						},
						'mouseout':function(){
							if (item.autoShow) {
								item.interval = item.autoShow.periodical($this.fadeShowInterval);  // interval go again
							}
							this.tooltip.fade(0.01);
						}
					});
				};
				// von 'außen' direkt auf ein bild faden
				item.showImage = function(which,showTooltip) {
					if (!this.items[which]) return; // bild gibts nicht -> return
					if (this.interval) $clear(this.interval); // falls Intervall -> removen
					$this.fadeImage(item,0,which);					
					if (showTooltip && this.items[which].tooltip) { // tooltip einblenden
						this.items[which].tooltip.setStyle('display','block');
						this.items[which].tooltip.fade(1);
					};
				};
			});
			
			// wenn wir mehrere Bilder haben -> fadeShow via Interval starten
			if (item.items.length > 1) {
				item.autoShow = function() {
					$this.fadeImage(item,1);
				};
				item.interval = item.autoShow.periodical($this.fadeShowInterval);
			} else {
				item.interval = false;	
			}
		});
		
		/**
		 * FadeShow-Links auf der CE-Detail ('Mehr Information zu Titel')
		 */
		this.fadeShowGoto.each(function(item,index){				
			if(!item.rel) return; // kein kennzeichner -> return
			var itemToShow = item.rel.substr(6).toInt();
			//alert('itemToShow'+itemToShow);
			if (itemToShow == 'NaN') return; // falscher kennzeichner -> return
			item.setStyles({
				'display':'block'
			});
			item.wrapper = item.getParent('.wrapper');
			item.addEvent('click',function(e){
				var ev = new Event(e).stop();
				//zugehöriges bild einfaden
				$this.fadeShows[0].showImage(itemToShow,true);
			});
		});
		 
		/**
		 * Elemente die onFocus geleert werden sollen
		 */
		this.elsToClearOnFocus.each(function(item,index){
			item.addEvents({
				'focus':function(){
					this.value='';
				}
			})
		});
		
		/**
		 * Elemente die onClick in neuem Fenster geöffnet werden sollen
		 */
		this.elsToOpenInNewWin.addEvent('click',function(e){
			var ev = new Event(e).stop();
			var newWin = window.open(this.href);
			if (newWin) newWin.focus();
		});
		
		/**
		 * Elemente die onClick aufgetoggelt werden sollen
		 */
		this.elsToToggle.each(function(item,index){
			var parent = item.getParent('div');
			item.wrapper = parent.getElement('DIV.wrapper');
			//if (DEBUG) console.log('wrapper'+item.wrapper.className);
			item.items = parent.getElement('UL.items');
			if (item.wrapper && item.items) {
				item.fx = new Fx.Morph(item.wrapper, {
					duration: 'short', 
					transition: Fx.Transitions.Quint.easeOut
				});
				item.addEvents({
					'click':function(e){
						var ev = new Event(e).stop();
						var itemsHeight = this.items.getHeight().toInt();
						var wrapperHeight = this.wrapper.getHeight().toInt();
						if (wrapperHeight > 0) {
							this.fx.start({
								'height': [wrapperHeight, 0]
							});
						} else {
							this.fx.start({
								'height': [0, itemsHeight]
							});
						}
					}
				});	
			}			
		});
		
		/**
		 * Elemente die onClick vergrößert werden sollen
		 */
		this.elsToMaximizeCover.each(function(item,index){
			if (item.getElement('.tooltip')) {
				// z.B. Cover auf Detailseite
				item.tooltip = item.getElement('.tooltip');
			} else {
				item.tooltip = false;
			}
			
			if (item.tooltip) {
				item.tooltip.set({
					'styles':{
						'opacity':0,
						'display':'block'
					}			 
				});
			} else {
				item.tooltip = false;
			}
			item.addEvents({
				'mouseover':function(){
					if (this.tooltip) this.tooltip.fade(1);
				},
				'mouseout':function(){
					if (this.tooltip) this.tooltip.fade(0);
				},
				'click':function(e){
					var ev = new Event(e).stop();
					$this.lightBoxCurrentImg = (this.rel) ? this.rel.toInt() : 1;
					$this.doMaximizeCover(this);
					//alert('current:' + $this.lightBoxCurrentImg);
				}		   
			});
		});
		
		/**
		 * Auf der Detailseite die Scrollshow 
		 */
		this.bookSlideShow.each(function(item,index){
			item.tooltip = item.getElement('.tooltip');
			item.tooltip.set({
				'styles':{
					'opacity':0,
					'display':'block'
				}			 
			});
			item.addEvents({
				'mouseover':function(){
					this.tooltip.fade(1);
				},
				'mouseleave':function(){
					this.tooltip.fade(0);	
				}		   
			});
		});
		
		/**
		 * Elemente die onClick ein neues Fenster öffnen 
		 * (Attribut rel="500x400" bestimmt Größe)
		 */
		this.elsToOpenNewWin.each(function(item,index){
			item.addEvents({
				'click':function(e){
					var ev = new Event(e).stop();
					$this.openWin(this);
					return false;
				}
			});
		});
		
		/**
		 * Elemente die onChange eine Href aufrufen sollen
		 */
		this.elsToGotoHref.each(function(item,index){
			item.setStyle('display','block');
			item.addEvents({
				'change':function(){
					//alert(this.options[this.selectedIndex].value);
					self.location.href = this.options[this.selectedIndex].value;
				}			   
			});
		});
		
		/**
		 * Elemente die onClick eingeblendet werden sollen -> attrb. rel ist ID des targets
		 */
		this.elsToShowOnClick.each(function(item,index){
			if (item.rel && $chk(item.rel)) {
				var targetEl = $(item.rel);
				item.setStyle('display','inline');
				item.addEvents({
					'click':function(e) {
						var ev = new Event(e).stop();
						targetEl.toggleClass('hidden');
					}			   
				});					
			} 
			// ArtinfoErweiterung -> Texttoogle
			if (item.rev && $chk(item.rev)) {
				var targetEl = $(item.rev);
				if(!targetEl) return;
				item.setStyle('display','inline');
				item.slideshow = item.getParent('.slideShow').getElement('.slideContent');
				item.addEvents({
					'click':function(e) {
						var ev = new Event(e).stop();
						targetEl.toggleClass('hidden');
						if(this.slideshow) this.slideshow.toggleClass('hidden');
						if(targetEl.hasClass('hidden')) {
							if (this.lang && this.lang=='en') this.set('text','Show all');
							else if (this.lang && this.lang=='de') this.set('text','Alle anzeigen');
						} else {
							if (this.lang && this.lang=='en') this.set('text','Close Overview');
							else if (this.lang && this.lang=='de') this.set('text','Übersicht schließen');
						};
					}			   
				});					
			} 			
		});
		this.elsToHideOnLoad.each(function(item,index){
			item.addClass('hidden');
		});
		
		/**
		 * Elemente die onMouseover einen Hover bekommen
		 */
		this.elsToAddHover.each(function(item,index) {
			if(!item.src) return; // kein src-attribut -> return
			var normalImg = item.src;
			var suffix = item.src.substr(item.src.length-4,item.src.length);
			var hoverImg = item.src.substr(0,(item.src.length-suffix.length))+'_h'+suffix;
			//alert(hoverImg);
			item.addEvents({
				'mouseover':function() {
					this.src = hoverImg;
				},
				'mouseout':function() {
					this.src = normalImg;
				}
			})						 
		});
		
		/**
		 * Elemente die onClick die Highlights der Navi entfernen soll
		 */
		this.elsToRemoveHighights.each(function(item,index) {						
			var selectedLinks = $('navigation').getElements('.selected');
			item.getElement('a').addEvents({
				'click':function() {
					selectedLinks.removeClass('selected').setStyle('color','#c3c3c3');
				}
			})						 
		});
		
		/**
		 * Zitatbox bekommt wenn vorhanden onClick->fadeOut-Event und timeOut
		 */
		if (this.zitatBox && this.zitatCookie == null) {
			this.zitatCookie = Cookie.write('HatjeCantz', 'Intro', {duration: 1});
			this.zitatBox.fadeOut = function(){
				$this.zitatBox.fade(0);
			};
			this.zitatBox.addEvents({
				'click':function(e){
					var ev = new Event(e).stop();
					this.fadeOut();
				}
			});
			this.zitatBox.fadeOut.delay(2500); // fadeout nach 7sec
		} else if (this.zitatBox) {
			this.zitatBox.setStyle('display','none');
		}
		
		/**
		 * Wenn Tweets dargestellt werden sollen
		 * TwitterGitter-Class in twitter.js
		 */
		if (this.tweets && $chk(TwitterGitter)) {
			var howMany		 = this.tweets.className.split('-')[1].toInt(); // wieviele Einträge
			var whichChannel = this.tweets.className.split('-')[0];			// welcher Kanal (HatjeCantz oder HatjeCantzPress)
			//alert(whichChannel);
			howMany = (howMany) ? howMany : 5;
			this.twitterGitter = new TwitterGitter(whichChannel,{
				count: howMany,
				onComplete:function(tweets,user) {
					tweets.each(function(tweet,i) {
						/*
							<img src="%27%20+%20user.profile_image_url.replace%28" \\="" ,="" )="" +="" 
							user.name, tweet.text, tweet.created_at, tweet.source.replace("\\",'')
						*/
						new Element('div', {
							//'html': '<p>' + tweet.text + '<br /><span>' + tweet.created_at + ' ' + tweet.source.replace("\\",'') + '</span></p>',
							'html': '<p>' + tweet.text + '<br /><span>' + tweet.created_at + '</span></p>',
							'class': 'item'
						}).inject($this.tweets);
					});	
				}
			}).retrieve();	
		}
		
		/**
		 * Wenn Seite nach onload gedruckt werden soll -> ?print dranhängen
		 */
		if (HC.printThisOnLoad) {
			self.print();
		}
	},
	fadeImage: function(el,direction,showDirect) {
		
		if (showDirect && showDirect == el.currentImg) return; // bild wird schon anzeigt -> return
		// welches Bild anzeigen/Richtung?
		if (direction == -1) { // rückwärts
			el.currentImg = (el.currentImg > 0) ? el.currentImg - 1 : el.items.length-1;
		} else if (direction == 1) { // vorwärts
			el.currentImg = (el.currentImg >= el.items.length-1) ? 0 : el.currentImg + 1;
		} else if (direction == 0) {
			el.currentImg = showDirect;
			//console.log('showDirect:'+showDirect);
		}
		// console.log(el.currentImg + '|' + el.maxImg);
		// Bild nach vorne und fadeIn
		el.items.each(function(item,index){
			// alle tooltipps ausfaden wenn nötig
			if (item.tooltip && item.tooltip.getStyle('opacity') > 0.1) {
				item.tooltip.fade(0.01);
			} else if (item.tooltip) {
				item.tooltip.setStyle('display','none');
			}
			if (index == el.currentImg) { // dieses nach vorne
				//alert('nachvorne'+index);
				item.setStyles({
					'opacity':0.01,
					'z-index':2
				});
				item.fx.start(1);
			} else if ((direction == 1 && index == el.currentImg-1) ||
					   (direction == -1 && index == el.currentImg+1) ||
					   (direction == 1 && el.currentImg == 0 && index == el.maxImg) || 
					   (direction == -1 && el.currentImg == el.maxImg && index == 0)) {
				// das vorhergehende einen z-index niedriger
				//alert('vorheriges'+index);
				item.setStyles({
					'opacity':1,
					'z-index':1
				});	
			}  else {
				// alle anderen nach hinten - reihenfolge wurscht.
				item.setStyles({
					'opacity':0.01,
					'z-index':0
				});	
			}
			//console.log('Bild '+index+'--->'+item.getStyle('z-index')+'|aktiv:'+el.currentImg);
		});
	},
	doMaximizeCover:function(el){
		var pageFlip = (el.rel) ? el.rel : false;
		var imgSize  = (el.rev) ? el.rev : false; // ie6 hookup
		this.loadIntoLightBox(el.href,el.title,pageFlip,imgSize);
	},
	doScrollShow:function(el,direction){
		/**
		 * ScrollContent Scrollen
		 */
		if (direction == -1 && el.scrollPos < 0) { // zurückscrollen
			el.scrollPos += el.minScroll;
		} else if (direction == 1 && el.scrollPos > el.maxScroll) { // vorwärtsscrollen
			el.scrollPos -= el.minScroll;
		}
		el.scrollWrapper.tween('left', el.scrollPos + 'px');
		//if (DEBUG) console.log(el.scrollPos+'|'+el.maxScroll);
		if (el.scrollPos == el.maxScroll) { // max erreicht - pfeil ausblenden
			el.handleRight.fade('out');
		} else {
			el.handleRight.fade('in');
		}
		if (el.scrollPos == 0) { // min erreicht - pfeil ausblenden
			el.handleLeft.fade('out');
		} else {
			el.handleLeft.fade('in');
		}
	},
	addCardEvents: function() {
		var $this = this;
		/**
		 * Artikel-vom-Warenkorb-entfernen-Event anhängen
		 */
		this.elsToRemoveFromCart = $$('.removeFromCart');
		this.elsToRemoveFromCart.each(function(item,index){
			var newHref = item.href.replace(/cart_remove/g, "cart_remove_ajax");
			item.wrapper = $this.shoppingWrapper;
			item.addEvents({
				'click':function(e){
					var ev = new Event(e).stop();
					this.wrapper.set('load', {
						encoding: 'iso-8859-1',
						onComplete: function(){
							$this.refreshCartHeight($this.shoppingCart);
							$this.addCardEvents();
						}
					}).load(newHref);
				}
			});
		});
	},
	addNoteEvents: function() {
		var $this = this;
		/**
		 * Artikel-vom-Merkzettel-entfernen-Event anhängen
		 */
		this.elsToRemoveFromNote = $$('.removeFromNote');
		this.elsToRemoveFromNote.each(function(item,index){
			var newHref = item.href.replace(/note_remove/g, "note_remove_ajax");
			item.wrapper = $this.noteWrapper;
			item.addEvents({
				'click':function(e){
					var ev = new Event(e).stop();
					this.wrapper.set('load', {
						encoding: 'iso-8859-1',
						onComplete: function(){
							//alert('Merkzettel neu geladen ');
							$this.refreshCartHeight($this.noteCart);
							$this.addNoteEvents();
						}
					}).load(newHref);
				}
			});
		});
	},
	refreshAddToCardButton: function(el) {
		/*
		 * User hat auf 'Jetzt kaufen geklickt' - Events/Beschriftung ändern
		 */
		var btnText = (LANG == 'de') ? 'Jetzt bestellen' : 'Order now';
		el.set('html','<span>'+btnText+'</span>');
		el.set('href','/' + this.lang + '/storefront/index.php');
		el.removeEvents();
	},
	refreshCartHeight: function(el) {
		/**
		 * Warenkorb/Merkzettel-Höhe refreshen (fx hängt schon am A.toogleItems)
		 */
		var button  = el.getElement('A.toggleItems');
		button.items   = el.getElement('UL.items');
		button.wrapper = el.getElement('DIV.wrapper');
		 //alert(button.fx);
		if (button && button.fx && button.items && button.wrapper) {
			var oldHeight = button.wrapper.getHeight().toInt();
			var newHeight = button.items.getHeight().toInt();
			button.fx.start({
				'height': [oldHeight, newHeight]
			});
		}
	},
	prepareLightBox: function(){
		/**
		 * LightBox vorbereiten, Loader anhängen
		 */
		var $this = this;
		this.lightBox.setStyles({
			'opacity':0
		});
		// event zum ausfaden
		this.lightBox.fx = new Fx.Morph(this.lightBox, {
			duration: 'normal',
			onComplete:function(){
				$this.lightBox.setStyle('z-index',0);
				if (!IE.v7 && !IE.v6) $(document.body).setStyle('overflow','auto');
			}
		});
		if (IE.v6) {
			// deppen ie6 kennt kein trbl-positionierung
			this.lightBox.setStyles({
				'height':document.getSize().y,
				'width':document.getSize().x
			});	
		}
	},
	checkLightBoxDimensions: function(imgSize){
		/**
		 * Maximal-Größe der Bilder festlegen
		 */
		this.lightBox.maxWidth  = document.getSize().x - 125; // -125 = ränder rechts/links
		this.lightBox.maxHeight = document.getSize().y - 125;
		var img = this.lightBox.getElement('IMG');
		img.setStyles({
			'max-height': this.lightBox.maxHeight,
			'max-width': this.lightBox.maxWidth
		});
		
		// ie6 hookup - braucht unbedingt die höhe (kommt aus rev-attribut des ahrefs)
		if (IE.v6) {
			if (imgSize) {
				var imgS = imgSize.split('x');
				var imgW = imgS[0].toInt();
				var imgH = imgS[1].toInt();
				if (imgW > this.lightBox.maxWidth) {
					img.width = this.lightBox.maxWidth;
				} else if (imgH > this.lightBox.maxHeight) {
					img.height = this.lightBox.maxHeight;
				} else {
					img.width = imgW;
					img.height = imgH;
				}
			} else {
				img.setStyles({
					'width': 'auto',
					'height': 'auto'
				});
			}
		}
	},
	loadIntoLightBox: function(url,altText,flipPage,imgSize){
		/**
		 * Etwas in LightBox laden
		 */
		var $this = this;
		var loaderUrl = "/_inc/php/"+this.lang+"/html.light-box.inc.php";
		var loaderData = "id="+escape(url);
		loaderData += (flipPage) ? '&flipPage=true' : '';
		
		this.lightBox.set('load', {
			encoding: 'iso-8859-1',
			data: loaderData,
			'onRequest': function() {
				// wg. dummdämlichem ie6
				$this.lightBox.setStyles({
					'display': 'block'
				});
			},
			'onComplete': function(){
				$this.checkLightBoxDimensions(imgSize);
				$this.lightBox.setStyles({
					'z-index': 1000
				});
				$this.lightBox.fade(1);
				if (!IE.v7 && !IE.v6) $(document.body).setStyle('overflow','hidden');
			}
		}).load(loaderUrl);
	},
	loadNextPageIntoLightBox: function(direction){
		
		if (direction == 'next') {
			this.lightBoxCurrentImg = (this.lightBoxImages.length-1 > this.lightBoxCurrentImg) ? this.lightBoxCurrentImg + 1 : 1; 
		} else if (direction == 'prev') {
			this.lightBoxCurrentImg = (this.lightBoxCurrentImg > 1) ? this.lightBoxCurrentImg - 1 : this.lightBoxImages.length-1; 
		}
		//alert('next' + this.lightBoxCurrentImg);
		$('lightBoxImg').src = this.lightBoxImages[this.lightBoxCurrentImg];
		$('lightBoxImg').setStyles({
			'width':this.lightBoxImages[this.lightBoxCurrentImg].width,
			'height':this.lightBoxImages[this.lightBoxCurrentImg].height
		});
	},
	closeLightBox: function(){
		/**
		 * LightBox ausblenden, hier über den fx wg. oncomplete callback
		 */
		this.lightBoxCurrentImg = 0;
		this.lightBox.fx.start({
			'opacity': 0,
			'display': 'block'
		});
	},
	openWin: function(el) {
		var winSize = (el.rel) ? el.rel.split("x") : false;
		var winTitle = (el.title) ? el.title : 'popup';
		var winFeatures = 'scrollbars=no';
		winFeatures += (winSize) ? ',width='+winSize[0] : '';
		winFeatures += (winSize) ? ',height='+winSize[1] : '';
		winFeatures += (winSize) ? ',left='+((screen.width/2)-(winSize[0].toInt()/2)) : '';
		winFeatures += (winSize) ? ',top='+((screen.height/2)-(winSize[1].toInt()/2)) : '';
		//alert('$this.openWin("'+el.href+'","'+winTitle+'","'+winFeatures+'")');
		var newWin = window.open(el.href,winTitle,winFeatures);
		if (newWin) newWin.focus();
	},
	jumpToLocation: function(el) {
		var uri = el.options[el.selectedIndex].value;
		document.location.href = uri;
	},
	preloadAssets: function(){
		var preloadArray = new Array();
		if (this.lightBoxImages) {
			// this.lightBoxImages geht bei 1 los! naja hätte man besser machen können
			for(var i=1;i<this.lightBoxImages.length;i++) {
				preloadArray.push(this.lightBoxImages[i]);
			}
		}
		if (this.fadeShowImages) {
			// this.fadeShowImages geht bei 0 los! 
			for(var i=0;i<this.fadeShowImages.length;i++) {
				preloadArray.push(this.fadeShowImages[i]);
			}
		}
		if (preloadArray) {
			var preloads = new Asset.images(preloadArray,{
				onComplete: function(){
					//alert('all Images are loaded: ' + preloadArray);
				}			
			});	
		}
	},
	recommendPage: function(el) {
		el.href += (!el.href.contains('?loc=')) ? '?loc='+escape(document.location.href) : '';
		this.openWin(el);
	},
	createFooter: function() {
		if (!this.footer) return;
		var $this = this;
		var printLinkLi = this.footer.getElement('.linkPrint');
		printLinkLi.getElement('a').addEvent('click',function(e){
			var ev = new Event(e).stop();
			self.print();
		});
		printLinkLi.setStyle('display','block');
		
		var recommendLinkLi = this.footer.getElement('.linkRecommend');
		recommendLinkLi.getElement('a').addEvent('click',function(e){
			var ev = new Event(e).stop();
			$this.recommendPage(this);
		});
		recommendLinkLi.setStyle('display','block');
	},
	ie6hookups: function(){
		var wideIe6Css = (screen.width > 1024) ? new Asset.css('/_inc/ie/ielt7_wide.css') : false;
		/**
		 * IE6 bekommt PNGFix
		 */
		DD_belatedPNG.fix('div.tooltip div.wrapper'); // tooltipps new books teaser
		DD_belatedPNG.fix('div.tooltip'); // detailseite cover hover
	},
	unCryptMailto: function(s) {
		var n=0;
		var r="";
		for(var i=0;i<s.length;i++) {
			n=s.charCodeAt(i);
			if (n>=8364) {n = 128;}
			r += String.fromCharCode(n-3);
		}
		return r;
	}
}
/* crypt-mailto */
var linkTo_UnCryptMailto = function(s)	{
	location.href = HC.unCryptMailto(s);
}

window.addEvents({
	'domready':function(){
		HC.initialize(LANG);
	},
	'resize':function(){
		HC.checkViewPort();	
	}
});