var markerArray = [];
var navSlideEffects = [];
var slideshowPlaying = false;
var controlImg;
var slideshowlinks;

window.addEvent('domready', function() {
	
	if ($('nav')) {
		var submenus = $('nav').getElements('li.hassubmenu');
		if (submenus.length > 0) {
			submenus.each( function( elem ){
				var list = elem.getElement('ul.submenu');
				if (list) {
					var myFx = new Fx.Slide(list).hide();
					elem.addEvents({
						'mouseenter' : function(){
							list.setStyles({
								'visibility': 'visible',
								'position':'relative'
							});
							myFx.cancel();
							myFx.slideIn();
						},
						'mouseleave' : function(){
							myFx.cancel();
							myFx.slideOut();
						}
					});
				}
			});
		}
	}	
	
	// Carousel
	if ($('sliderlist')) {
		var carousel1 = new iCarousel("sliderlist", {  
			animation: {   
				duration: 300
			},
			idPrevious: "previous",  
			idNext: "next",  
			idToggle: "undefined",  
			item: {  
				klass: "sl_item",  
				size: 630  
			}
		});
	}
	
	if ($('sliderlist2')) {		
		var carousel2 = new iCarousel("sliderlist2", {  
			animation: {   
				duration: 300
			},
			idPrevious: "previous",  
			idNext: "next",  
			idToggle: "undefined",  
			item: {  
				klass: "sb_item",  
				size: 419
			}
		});		
	}
	
	if ($('verticalSliderlist')) {
		var verticalCarousel = new iCarousel("verticalSliderlist", {
			animation: {
				type: "scroll",// fadeNscroll, scroll, fade
				direction: "top",// if type = scroll, set: top || left
				amount: 1,// if type = scroll, set the amount to scroll
				transition: Fx.Transitions.Cubic.easeInOut,
				duration: 1000,
				rotate: {
					type: "auto", // auto
					interval: 5000, // if type = auto, set the interval (ms)
					onMouseOver: "stop || proceed" // if type = auto, set the onmouseover behavior: stop || proceed
				}
			},			
			idPrevious: "undefined",  
			idNext: "undefined",  
			idToggle: "undefined",  
			item: {  
				klass: "s_item",  
				size: 146
			}		
		});
	}
	
	// Mobil am Handy
	if ($('sliderlist3')) {		
		var carousel3 = new iCarousel("sliderlist3", {  
			animation: {   
				duration: 600
			},
			idPrevious: "previous",  
			idNext: "next",  
			idToggle: "undefined",  
			item: {  
				klass: "sl_item",  
				size: 86
			},
			onNext : function() {
				// console.log("NEXT");
				setCenterImg(carousel3.atScreen + 2);
				dimImages();
			},
			onPrevious : function() {
				// console.log("PREVIOUS");
				setCenterImg(carousel3.atScreen + 2);
				dimImages();
			}
		});		
		carousel3.goTo(0);
		Mediabox.scanPage();	
		
		var myLinks = $A($$('#sliderlist3 li a'));	
		var slantImg;
		var innerTwo = [];
		var outerTwo = [];
		
		var setCenterImg = function(nr) {
			// console.log("atscreen: ", carousel3.atScreen);
			if (!$defined(nr)) {
				nr = carousel3.atScreen + 2;
			}
			// console.log("NR: ", nr);
			// console.log("ATSCREEN: ", carousel3.atScreen + 2);
			myLinks.each(function(lnk, index) {
				if (index == nr) {
					var myImg = myLinks[nr].getElement('img');
					// console.log("myImg: ", myImg);
					// console.log("slantImg: ", slantImg);
					
					if ($defined(slantImg)) {
						slantImg.src = slantImg.src.replace(/gs-mobile_schreg_/g, "gs-mobile_");
					}					
					myImg.src = myImg.src.replace(/gs-mobile_/g, "gs-mobile_schreg_");
					slantImg = myImg;
				}
			});		
		};
		
		var dimImages = function() {
			var myInnerTwo = [myLinks[carousel3.atScreen + 1], myLinks[carousel3.atScreen + 3]];
			// zurücksetzen
			if (innerTwo.length > 0 || outerTwo.length > 0) {
				innerTwo.extend(outerTwo).each(function(inner1) {
					var inImg = inner1.getElement('img');
					inImg.morph({ height: 127, opacity: 1, marginTop: '0px' });
				});
			}			
			myInnerTwo.each(function(inner) {
				var innerImg = inner.getElement('img');
				innerImg.morph({ height: 107, opacity: 0.6, marginTop: '20px' });
			});
			innerTwo = myInnerTwo;
						
			var myOuterTwo = [myLinks[carousel3.atScreen], myLinks[carousel3.atScreen + 4]];				
			 
			myOuterTwo.each(function(outer) {
				var outerImg = outer.getElement('img');
				outerImg.morph({ height: 95, opacity: 0.3, marginTop: '32px' });
			});
			outerTwo = myOuterTwo;			
			
		};
		setCenterImg();
		dimImages();
	}
	
	// iPhone App Carousel
	if ($('sliderlist5')) {		
		var carousel4 = new iCarousel("sliderlist5", {  
			animation: {   
				duration: 600
			},
			idPrevious: "previous2",  
			idNext: "next2",  
			idToggle: "undefined",  
			item: {  
				klass: "sl_item2",  
				size: 86
			},
			pagingDiv: "carouselpaging2",
			onNext : function() {
				setCenterImg2(carousel4.atScreen + 2);
				dimImages2();
			},
			onPrevious : function() {
				setCenterImg2(carousel4.atScreen + 2);
				dimImages2();
			}
		});
		carousel4.goTo(0);
		Mediabox.scanPage();	
		var myLinks2 = $A($$('#sliderlist5 li a'));	
		var slantImg2;
		var innerTwo2 = [];
		var outerTwo2 = [];
		var setCenterImg2 = function(nr) {
			if (!$defined(nr)) {
				nr = carousel4.atScreen + 2;
			}
			myLinks2.each(function(lnk, index) {
				if (index == nr) {
					var myImg2 = myLinks2[nr].getElement('img');
					if ($defined(slantImg2)) {
						slantImg2.src = slantImg2.src.replace(/iphone_schraeg_/g, "iphone_");
					}					
					myImg2.src = myImg2.src.replace(/iphone_/g, "iphone_schraeg_");
					slantImg2 = myImg2;
				}
			});		
		};
		var dimImages2 = function() {
			var myInnerTwo2 = [myLinks2[carousel4.atScreen + 1], myLinks2[carousel4.atScreen + 3]];
			// zurücksetzen
			if (innerTwo2.length > 0 || outerTwo2.length > 0) {
				innerTwo2.extend(outerTwo2).each(function(inner1) {
					var inImg = inner1.getElement('img');
					inImg.morph({ height: 127, opacity: 1, marginTop: '0px' });
				});
			}			
			myInnerTwo2.each(function(inner) {
				var innerImg = inner.getElement('img');
				innerImg.morph({ height: 107, opacity: 0.6, marginTop: '20px' });
			});
			innerTwo2 = myInnerTwo2;						
			var myOuterTwo2 = [myLinks2[carousel4.atScreen], myLinks2[carousel4.atScreen + 4]];			 
			myOuterTwo2.each(function(outer) {
				var outerImg = outer.getElement('img');
				outerImg.morph({ height: 95, opacity: 0.3, marginTop: '32px' });
			});
			outerTwo2 = myOuterTwo2;
		};
		setCenterImg2();
		dimImages2();
	}
	
	
	// Popup für Suchergebnis ausklappen
	if ($('tsearchsubmit') && $('searchresultpopup')) {
		$('tsearchsubmit').addEvent('click', function() {
			$('searchresultpopup').setStyle('display','block');
			var body = document.getElement('body').addEvent('click', function(evt) {
				// console.log(evt);
				if (Browser.Engine.trident) {
					var tar = $(evt.target);
				}
				else {
					var tar = evt.target;
				}				
				if (!tar.getParent('div#searchresultpopup') && tar != $('tsearchsubmit')) {
					$('searchresultpopup').setStyle('display','none');
				}
			});			
		});
	}
	
	// Slideshow Setup
	if ($('slideshow')) {		
		mySlideShow = new SlideShow('slideshow',{
	    delay: 5000,
	    transition: 'fadeThroughBackground',
	    duration: 500,
	    autoplay: true,
	    onShow: function(eventVars) {
	    	slideshowLinksHighLight(eventVars.nextIndex);
	    }
		});		
		slideshowPlaying = true;		
		var slideshowcontrol = $('slideshowpause');
		controlImg	= slideshowcontrol.getElement('img');
		
		slideshowcontrol.addEvent('click', function(evt) {
			evt.stop();
			if (slideshowPlaying) {
				slideshowPause();
			}
			else {
				slideshowPlay();
			}
		});
		slideshowlinks = $('slideshowlinklist').getElements('a');
		slideshowLinksHighLight(0);
		slideshowlinks.each(function(link) {
			link.addEvent('click', function(evt) {
				evt.stop();
				slideshowlinks.each(function(l) {
					if (l != link) {
						l.removeClass('active');
					}
					else {
						l.addClass('active');
					}
				});				
				var r = parseInt(link.get('rel').substr(link.get('rel').indexOf('[')+1, 1));
				mySlideShow.show(r);
				slideshowPause();
			})
		});		
	}
	
	var oeffnungszeiten = $('oezeiten');
	if (oeffnungszeiten) {
		// loadOptionalTimes();
	}
	
	
	var addrblock = $('lieferadressegast');
	if (addrblock) {
	  var cb = $('lieferadresse_chb');
	  var addrInputs = $$('#lieferadressegast input', '#lieferadressegast select');
	  addrblock.tween('opacity', 0.4);
	  addrInputs.each(function(el) {
	  	el.set('disabled', true);
	  });
  		
		cb.addEvent('click', function(evt) {
  		// console.log("CHECKED: ", cb.checked);
  		if (cb.checked == true) {
  			addrblock.tween('opacity', 1);
  			addrInputs.each(function(el) {
  				el.set('disabled', false);
  			});
  		}
  		else {
  			addrblock.tween('opacity', 0.4);
  			addrInputs.each(function(el) {
  				el.set('disabled', true);
  				el.value = "";
  			});
  		}
  	});
	}
	
	
	loadInputDefaultTexts();	 
	
	setupFormboxToggles();	
	
	setupPointyTips();
			
	initKlippklappBoxes();

	initNewsletterForms();	
	
	var myAccordion = new Accordion($('accordion'), '#accordion h4', '#accordion div.a_item', {
		opacity: false,
		trigger : 'mouseenter',
		initialDisplayFx : false
	});
	
	loadOptionalTimes();
	
	
	
}); // ende domready



// ####  Functions  #### //

var initNewsletterForms = function() {
	var btns = $$('.newsletterformsubmit');
	var requiredDivs = [];
	var fehlerDivs;
	
	if (btns.length > 0) {
		btns.each(function(btn) {
			btn.addEvent('click', function(evt) {
				evt.preventDefault();
				
				//var myForm = btn.form;
				var myForm = btn.getParent('form');
				//alert(myForm);
				
				// Hiddenfield mit dem zusammengesetzten Geburtsdatum erzeugen und einfügen
				var myBirthdate = myForm.getElement('select[name=tag]').value + "." + myForm.getElement('select[name=monat]').value + "." + myForm.getElement('select[name=jahr]').value;
				//console.log("birthdate: ", birthdate);
				var birthdayInput = new Element('input', {
					type : 'hidden',
					name : 'c_birth',
					value : myBirthdate
				}).inject(btn, "before");
				
				// Formular prüfung
				fehlerDivs = [];
				requiredDivs = myForm.getElements('div.required');
				var requiredInputs = myForm.getElements('div.required input');		
				
				if (requiredInputs.length > 0) {
					var f1 = 0;
					var f2 = 0;
					var alert_f = "";
					requiredInputs.each(function(input) {					
						//Inputs auf Eingabe prüfen
						//console.log("INPUTDEFAULTVALUE: ", input.retrieve('defaultValue'));
						if (input.value == "" || input.value == input.retrieve('defaultValue')) {							
							f1 += 1;
							var lbl = input.getPrevious('label').get('html');							
							var lbltext = lbl.substr(0, lbl.indexOf('<'));
							alert_f += (f1 == 1 ? " " : ", ");
							alert_f += lbltext;		
							fehlerDivs.push(input.getParent('div'));			
						}
						// E-Mail auf Gültigkeit prüfen
						if (input.name == "c_email" && !validEmail(input.value)) {
							f2 += 1;
							fehlerDivs.push(input.getParent('div'));
						}
					});
					
					//console.log("F1:", f1, "F2:", f2);				
					if (f1 > 0) {
						var alert_out = "Bitte füllen Sie ";
						alert_out += (f1 == 1 ? "das Feld" : "die Felder");
						alert_out += alert_f + " aus!";
						alert(alert_out);
						markErrors(fehlerDivs);
					}
					else if (f2 > 0) {
						alert("Bitte geben Sie eine gültige E-Mail Adresse an!");
						markErrors(fehlerDivs);
					}
					else {
						myForm.submit();
					}
				}
				else {
					myForm.submit();
				}
			});
			
			var markErrors = function(fehlerDivs) {
				//console.log("requiredDivs", requiredDivs);
				//console.log("fehlerDivs", fehlerDivs);
				requiredDivs.each(function(rd) {
					if (fehlerDivs.indexOf(rd) >= 0) {
						rd.addClass('error');
					}
					else {
						rd.removeClass('error');
					}
				});				
			};		
			
			var validEmail = function(email) {
  			var strReg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
				var regex = new RegExp(strReg);
				return(regex.test(email));
			};
		});
	}
};


var initKlippklappBoxes = function() {
	var kkToggles = $$('.klappbox_header a');
	if (kkToggles.length > 0) {
		kkToggles.each(function(tg) {
			var parentDiv = tg.getParent();
			box = parentDiv.getNext('div.klappbox');
			//console.log("box", box);
			if (!tg.hasClass('open')) {
				var boxFx = new Fx.Slide(box).hide();	
			}
			else {
				var boxFx = new Fx.Slide(box);
			}
			parentDiv.addClass('closed');
			tg.addEvent('click', function(evt) {
				evt.stop();
				if (!tg.hasClass('open')) {
					boxFx.cancel();
					boxFx.slideIn();
					tg.removeClass('closed');
					tg.addClass('open');
				}
				else {
					boxFx.cancel();
					boxFx.slideOut();
					tg.removeClass('open');
					tg.addClass('closed');
				}				
			});		
		});
	}
	
	var kkCheckboxes = $$('.klappbox_header input[type=checkbox]');
	if (kkCheckboxes.length > 0) {
		kkCheckboxes.each(function(cb) {
			var parentDiv = cb.getParent();
			box = parentDiv.getNext('div.klappbox');
			if (cb.get('checked') == false) {
				var boxFx = new Fx.Slide(box).hide();	
			} 
			else {
				var boxFx = new Fx.Slide(box);
			}
			cb.addEvent('click', function(evt) {
				if (cb.get('checked') == true) {
					boxFx.cancel();
					boxFx.slideIn();
				}
				else {
					boxFx.cancel();
					boxFx.slideOut();
				}
			});
		});
	}
	
	var kk2Toggles = $$('.klappbox_header2 a');
	if (kk2Toggles.length > 0) {
		kk2Toggles.each(function(tg) {
			var parentDiv = tg.getParent();
			box = parentDiv.getNext('div.klappbox2');
			if (box) {
				//console.log("box", box);
				if (!tg.hasClass('open')) {
					var boxFx = new Fx.Slide(box).hide();	
				}
				else {
					var boxFx = new Fx.Slide(box);
				}
				parentDiv.addClass('closed');
				tg.addEvent('click', function(evt) {
					evt.stop();
					if (!tg.hasClass('open')) {
						boxFx.cancel();
						boxFx.slideIn();
						tg.removeClass('closed');
						tg.addClass('open');
					}
					else {
						boxFx.cancel();
						boxFx.slideOut();
						tg.removeClass('open');
						tg.addClass('closed');
					}				
				});	
			}	
			else {
				tg.addEvent('click', function(evt) {
					evt.stop();
				});
			}
		});
	}
}

var loadInputDefaultTexts = function() {
	var codeno = $('codeno');
	if (codeno) {
		var myCodeno = new InputWithDefaultText(codeno, 'Code eingeben');
	}	
	var suchbegriff = $('suchbegriff');
	if (suchbegriff) {
		var mySuchbegriff = new InputWithDefaultText(suchbegriff, 'Suchbegriff');
	}	
	var appnews = $('mobilegs_appnews');
	if (appnews) {
		var myAppnews = new InputWithDefaultText(appnews, 'Ihre E-Mail');
	}
	var seriennr = document.getElement('input[name=premium_seriennr]');
	if (seriennr) {
		var mySeriennr = new InputWithDefaultText(seriennr, 'z.B. 1231234577EDF');
	}
	var newsletterEmailInputs = document.getElements('input[name=c_email]');
	if (newsletterEmailInputs.length > 0) {
		newsletterEmailInputs.each(function(newsletterEmailInput){
			var myNewsletterEmailInput = new InputWithDefaultText(newsletterEmailInput, 'max.muster@gutscheinbuch.de');
		});		
	}	
	var emailInputs = $$('input[name=email]', 'input[name=EMail]');
	if (emailInputs.length > 0) {
		emailInputs.each(function(emailInput){
			var myEmailInput = new InputWithDefaultText(emailInput, 'max@musterland.de');
		});		
	}	
	var msgTextarea = document.getElement('textarea[name=nachricht]');
	if (msgTextarea) {
		var myMsgTextarea = new InputWithDefaultText(msgTextarea, 'Bitte geben Sie Ihr Anliegen ein');
	}
	var msgTextarea2 = document.getElement('textarea[name=Nachricht]');
	if (msgTextarea2) {
		var myMsgTextarea2 = new InputWithDefaultText(msgTextarea2, 'Bitte geben Sie Ihr Anliegen ein');
	}
	var nosInputs = $$('input.nur_onlineshops');
	if (nosInputs.length > 0) {
		nosInputs.each(function(input) {
			var myNosInput = new InputWithDefaultText(input, 'nur bei Onlineshops');
		});
	}
	var kurztitelInput = document.getElement('form.anbregformgs input[name=kurztitel]');
	if (kurztitelInput) {
		var mykurztitelInput = new InputWithDefaultText(kurztitelInput, 'z.B. 2für1 Hauptgericht	');
	}
	var beschreibungInput = document.getElement('form.anbregformgs input[name=beschreibung]');
	if (beschreibungInput) {
		var mybeschreibungInput = new InputWithDefaultText(beschreibungInput, 'z.B. Das zweite (günstigere oder...');
	}
	var strichcodeInput = document.getElement('form.anbregformgs input[name=strichcode]');
	if (strichcodeInput) {
		var mystrichcodeInput = new InputWithDefaultText(strichcodeInput, 'Nr. eingeben');
	}
	var gscodesTextarea = $('gscodes');
	if (gscodesTextarea) {
		var mygscodesTextarea = new InputWithDefaultText(gscodesTextarea, 'Code(s) eingeben');
	}
	var gutscheinlinkInput = document.getElement('form.anbregformgs input#gutscheinlink');
	if (gutscheinlinkInput) {
		var mygutscheinlinkInput = new InputWithDefaultText(gutscheinlinkInput, 'Link eingeben');
	}
	var videolinkurlInput = document.getElement('form.anbregformgs input#videolinkurl');
	if (videolinkurlInput) {
		var myvideolinkurlInput = new InputWithDefaultText(videolinkurlInput, 'Link eingeben');
	}
	var bezeichnungInput = document.getElement('div#oezeiten input#bezeichnung');
	if (bezeichnungInput) {
		var mybezeichnungInput = new InputWithDefaultText(bezeichnungInput, 'z.B. Frühjahr, Mai...');
	}
	var bemerkungInput = document.getElement('form.anbieterwerden textarea#bemerkung');
	if (bemerkungInput) {
		var mybemerkungInput = new InputWithDefaultText(bemerkungInput, 'Ihre Nachricht an uns...');
	}
	var ortsuche = document.getElement('input[name=zipCity]');
	if (ortsuche) {
		var myOrtsuche = new InputWithDefaultText(ortsuche, 'Ort/PLZ eingeben');
	}
};

var slideshowPause = function() {
	mySlideShow.pause();
	slideshowPlaying = false;
	controlImg.set({
		'src': '/gb/images/icon_play.gif',
		'title': 'Slideshow play'
	});
};
var slideshowPlay = function() {
	mySlideShow.play();
	slideshowPlaying = true;
	controlImg.set({
		'src': '/gb/images/icon_stop.gif',
		'title': 'Slideshow pause'
	});
	$('slideshowlinklist').getElements('a').each(function(link) {
		link.removeClass('active');
	});
};

var slideshowLinksHighLight = function(n) {
	slideshowlinks.each(function(l, index) {
		if (n != index) {
			l.removeClass('active');
		}
		else {
			l.addClass('active');
		}
	});		
}

var setupFormboxToggles = function() {
	var boxes = [];
	var myBox;
	var toggles = $$('.formboxtoggle');
	if (toggles.length > 0) {
		toggles.each(function(tg) {			
			var box = $(tg.get("rel"));
			if (!$chk(box)) {
				// console.log("LEER");
				box = tg.getNext('div.formbox');
			}
			if (!$chk(box)) {
				// console.log("IMMER NOCH LEER");
				box = tg.getParent().getNext('div.formbox');
			}			
			// console.log("BOX: ", box);		
			boxes.push(box);
			//console.log("tg.checked: ", tg.checked);
			
			if (tg.checked == true) {
				var boxFx = new Fx.Slide(box);	
			}
			else {
				var boxFx = new Fx.Slide(box).hide();	
			}
			tg.store('box', box);
			tg.store('fx', boxFx);			
			
			if (tg.get('type') == "radio") {
				var match = 'input[name=' + tg.get('name') + ']';
				// console.log("MATCH: ", match);				
				document.getElements(match).each(function(radio) {
					radio.addEvent('click', function(evt) {						
						if (radio == tg) {
							var fx = tg.retrieve('fx');
							myBox = tg.retrieve('box');
							fx.cancel();
							fx.slideIn();
						}
						else {
							if (boxes.length > 1) {
								boxes.each(function(bx) {
									if (bx != myBox) {
										boxFx.cancel();
										boxFx.slideOut();
									}
								});
							}
							else {
								boxFx.cancel();
								boxFx.slideOut();
							}							
						}						
					});
				});				
			}		
		});
	}
}

var setupPointyTips = function() {
	var myFormTips = new Tips('.pointytip',{
		text : 'rel',
		className: 'formtip',
		fixed: true,
		offset: {'x': 33, 'y': -16}
	});		

	
	var tipsWithTitle = $$('.pointytipdown');
	if (tipsWithTitle.length > 0) {
		tipsWithTitle.each(function(element,index) {
			var title = element.get("title");
			if ($chk(title)) {
				var content = title.split('::');
				element.store('tip:title', content[0]);
				element.store('tip:text', content[1]);
			}			
		});			
	}	
	var myTipsPointDown = new Tips('.pointytipdown',{
		text : 'rel',
		className: 'tipdown',
		//fixed: true,
		offset: {'x': -115, 'y': -150}
	});	
	
	
	var tipsWithTitle = $$('.pointytiponlink');
	if (tipsWithTitle.length > 0) {
		tipsWithTitle.each(function(element,index) {
			var title = element.get("title");
			if ($chk(title)) {
				var content = title.split('::');
				element.store('tip:title', content[0]);
				element.store('tip:text', content[1]);
			}			
		});			
	}	
	var myTipsPointDown = new Tips('.pointytiponlink',{
		text : 'rel',
		className: 'tipdown',
		//fixed: true,
		offset: {'x': -115, 'y': -80}
	});	
	
	
	var htmlTips = $$('.htmltip', '.csvtip');
	if (htmlTips.length > 0) {
		htmlTips.each(function(element,index) {
			var html = element.getElement('div.htmltipcontent').get('html');
			if ($chk(html)) {
				element.store('tip:text', html);
			}
		});
	}	
	var myhtmlTips = new Tips('.htmltip', {
		className : 'htmltipdown',
		fixed: true,
		hideDelay: 2000,
		offset: {'x': -70, 'y': -80}
	});
	
	var priceTips = $$('.pricetip');	
	if (priceTips.length > 0) {
		priceTips.each(function(element,index) {
			var container = element.getElement('div.pricetipcontent');
			if (container) {				
				var size = container.getSize();
				container.setStyles({
					'display':'none',
					'visibility':'visible'
				});
				var myOffset = new Object();
				myOffset['x'] = 0-(size.x/2);
				myOffset['y'] = 0-(size.y + 15);	
				var html = container.get('html');
				if ($chk(html)) {
					element.store('tip:text', html);
					element.store('tip:offset', myOffset);
				}
			}
		});
	}	
	var myPriceTips = new SDTips('.pricetip', {
		className : 'pricetipdown',
		fixed: true,
		showDelay: 0
	});
	
	
	
	var myCSVTips = new Tips('.csvtip', {
		className : 'htmltipdown',
		fixed: true,
		hideDelay: 4000,
		offset: {'x': -110, 'y': -125}
	});
	
	var htmlTips = $$('.shoppingcarttip');
	if (htmlTips.length > 0) {
		htmlTips.each(function(element,index) {
			var container = element.getElement('div.shoppingcarttipcontent');
			if (container) {				
				var size = container.getSize();
				container.setStyles({
					'display':'none',
					'visibility':'visible'
				});
				var myOffset = new Object();
				myOffset['x'] = 0-(size.x/2)-40;
				myOffset['y'] = 0-(size.y + 65);	
				var html = container.get('html');
				if ($chk(html)) {
					element.store('tip:text', html);
					element.store('tip:offset', myOffset);
				}
			}
		});
		var myShoppingCartTips = new SDTips('.shoppingcarttip', {
			className : 'htmltipdown'
		});
	}
};


var loadOptionalTimes = function() {
	var optionals = $$('td.optional');
	var optionalths = $$('td.optionalth');
	var addBtns = $$('a.add_times');
	var optHasValue = false;

	if (optionals.length > 0) {
		optionals.each(function(opt) {
			var optInputs = opt.getElements('input');
			var valueThere = false;
			optInputs.each(function(inp) {
				if ($chk(inp.value)) {
					optHasValue = true;
					valueThere = true;
					opt.getParent('tr').getElement('a.add_times').tween('opacity', 0.3);
				}
			});
			if (valueThere === false) {
				opt.tween('opacity', 0.4);
				optInputs.each(function(inp) {
					inp.set("disabled", true);
				});
			}
		});	
	}
	
	if (addBtns.length > 0) {
		addBtns.each(function(btn) {
			btn.addEvent('click', function(evt) {
				evt.stop();
				btn.getParent('tr').getElements('td.optional').each(function(opt) {
					opt.tween('opacity', 1);
					opt.getElements('input').each(function(inp) {
						inp.set("disabled", false);
					});
					optionalths.each(function(optth) {
						optth.tween('opacity', 1);
					});
					optHasValue = true;
					btn.tween('opacity', 0.3);
					btn.setStyle('cursor', 'default');
				});
			});
		});
	}
	
	if (optHasValue === false) {
		optionalths.each(function(opt) {
			opt.tween('opacity', 0.4);
		});	
	}
};

var getInternetExplorerVersion = function () {
	// Returns the version of Internet Explorer or a -1
	// (indicating the use of another browser).
  	var rv = -1; // Return value assumes failure.
  	if (navigator.appName == 'Microsoft Internet Explorer') {
    	var ua = navigator.userAgent;
    	var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    	if (re.exec(ua) != null)
      		rv = parseFloat( RegExp.$1 );
  		}
  	return rv;
};

// ####  Classes  #### //


// Class fuer Inputfelder und Textareas die einen Defaultwert erhalten sollen
var InputWithDefaultText = new Class({
	initialize: function(element, text) {
		//console.log('ELEMENT: ', element, " TEXT: ", text);
		this.el = $(element);
		this.defaultTextColor = '#c8c8c8';
		this.normalTextColor = '#333333';
		this.defaultValue = text;
		this.el.store('defaultValue', this.defaultValue);
		if (this.el.value == "") {
			this.attachDefaultText();
		}
	},	
	attachDefaultText: function() {
		//console.log(this.el);
		this.el.setStyle('color', this.defaultTextColor);
		this.el.value = this.defaultValue;
		this.el.addEvent('focus', function(evt) {
			if (this.el.value == this.defaultValue) {
				this.el.value = '';
				this.el.setStyle('color', this.normalTextColor);
			}			
		}.bind(this));
		this.el.addEvent('blur', function(evt) {
			if (this.el.value == '') {
				this.el.setStyle('color', this.defaultTextColor);
				this.el.value = this.defaultValue;
			}
		}.bind(this));
	}
});

var clearDefaultTextsBeforeSubmit = function(f) {
	//alert(f);
	allInputs = $(f).getElements('input[type=text], textarea, input[type=image]');
	//alert(allInputs.length);
	
	allInputs.each(function(inp) {
		//alert("INP: ", inp);
		//console.log("INP: ", inp);
		var dVal = inp.retrieve('defaultValue');
		if ($chk(dVal) && inp.value == dVal) {
			//console.log("INP: ", inp);
			inp.value = "";
		}
	});
	// f.submit();
};

var setScrolly = function() {
	var scrl;
	if (document.all) {
		if (document.documentElement.scrollTop) {
			scrl = document.documentElement.scrollTop;
		} else {
			scrl = document.body.scrollTop;	
		}
	} else {
		scrl = pageYOffset;
	}
  if ($("scrolly"))	$("scrolly").value = scrl;
};

var scrollVal = function() {
	var scrl;
	if (document.all) {
		if (document.documentElement.scrollTop) {
			scrl = document.documentElement.scrollTop;
		} else {
			scrl = document.body.scrollTop;	
		}
	} else {
		scrl = pageYOffset;
	}
	return scrl;
};




/*
---

SDTips

...
*/

(function(){

var read = function(option, element){
	return (option) ? ($type(option) == 'function' ? option(element) : element.get(option)) : '';
};

this.SDTips = new Class({

	Implements: [Events, Options],

	options: {
		/*
		onAttach: $empty(element),
		onDetach: $empty(element),
		*/
		onShow: function(){
			this.tip.setStyle('display', 'block');
		},
		onHide: function(){
			this.tip.setStyle('display', 'none');
		},
		title: 'title',
		text: function(element){
			return element.get('rel') || element.get('href');
		},
		showDelay: 100,
		hideDelay: 100,
		className: 'tip-wrap',
		offset: {x: 16, y: 16},
		windowPadding: {x:0, y:0},
		fixed: false
	},

	initialize: function(){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		this.setOptions(params.options);
		if (params.elements) this.attach(params.elements);
		this.container = new Element('div', {'class': 'tip'});
	},

	toElement: function(){
		if (this.tip) return this.tip;

		return this.tip = new Element('div', {
			'class': this.options.className,
			styles: {
				position: 'absolute',
				top: 0,
				left: 0
			}
		}).adopt(
			new Element('div', {'class': 'tip-top'}),
			this.container,
			new Element('div', {'class': 'tip-bottom'})
		).inject(document.body);
	},

	attach: function(elements){
		$$(elements).each(function(element){
			var title = read(this.options.title, element),
				text = read(this.options.text, element);
			
			element.erase('title').store('tip:native', title).retrieve('tip:title', title);
			element.retrieve('tip:text', text);
			this.fireEvent('attach', [element]);
			
			var events = ['enter', 'leave'];
			if (!this.options.fixed) events.push('move');
			
			events.each(function(value){
				var event = element.retrieve('tip:' + value);
				if (!event) event = this['element' + value.capitalize()].bindWithEvent(this, element);
				
				element.store('tip:' + value, event).addEvent('mouse' + value, event);
			}, this);
		}, this);
		
		return this;
	},

	detach: function(elements){
		$$(elements).each(function(element){
			['enter', 'leave', 'move'].each(function(value){
				element.removeEvent('mouse' + value, element.retrieve('tip:' + value)).eliminate('tip:' + value);
			});
			
			this.fireEvent('detach', [element]);
			
			if (this.options.title == 'title'){ // This is necessary to check if we can revert the title
				var original = element.retrieve('tip:native');
				if (original) element.set('title', original);
			}
		}, this);
		
		return this;
	},

	elementEnter: function(event, element){
		this.container.empty();
		
		['title', 'text'].each(function(value){
			var content = element.retrieve('tip:' + value);
			if (content) this.fill(new Element('div', {'class': 'tip-' + value}).inject(this.container), content);
		}, this);
		
		var pOffset = element.retrieve('tip:offset');
		if (pOffset) this.options.offset = pOffset;
		
		$clear(this.timer);
		this.timer = (function(){
			this.show(this, element);
			this.position((this.options.fixed) ? {page: element.getPosition()} : event);
		}).delay(this.options.showDelay, this);
	},

	elementLeave: function(event, element){
		$clear(this.timer);
		this.timer = this.hide.delay(this.options.hideDelay, this, element);
		this.fireForParent(event, element);
	},

	fireForParent: function(event, element){
		element = element.getParent();
		if (!element || element == document.body) return;
		if (element.retrieve('tip:enter')) element.fireEvent('mouseenter', event);
		else this.fireForParent(event, element);
	},

	elementMove: function(event, element){
		this.position(event);
	},

	position: function(event){
		if (!this.tip) document.id(this);

		var size = window.getSize(), scroll = window.getScroll(),
			tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight},
			props = {x: 'left', y: 'top'},
			obj = {};
			//console.log("Position OFFSET: ", this.options.offset);
		
		for (var z in props){
			obj[props[z]] = event.page[z] + this.options.offset[z];
			if ((obj[props[z]] + tip[z] - scroll[z]) > size[z] - this.options.windowPadding[z]) obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
		}
		
		this.tip.setStyles(obj);
	},

	fill: function(element, contents){
		if(typeof contents == 'string') element.set('html', contents);
		else element.adopt(contents);
	},

	show: function(element){
		if (!this.tip) document.id(this);
		this.fireEvent('show', [this.tip, element]);
	},

	hide: function(element){
		if (!this.tip) document.id(this);
		this.fireEvent('hide', [this.tip, element]);
	}

});

})();


