var j = jQuery.noConflict();

// Alles was beim Laden der Seite ausgeführt werden soll
j(function(){
	
	/*
		Wenn JavaScript aktiv ist, kann über die body-Class "js"
		spezielles CSS geliefert werden
	*/
	j('body').addClass('js');
	
});

// Alles was nach dem Laden ausgeführt werden soll
// Der Großteil sollte hier hinein
j(window).load(function(){
	
	/************************************************
	* DOM-Objekte									*
	************************************************/

	/*
		Häufig benutzte DOM-Objekte in Variablen speichern um schnelleren Zugriff zu ermöglichen.
		(Objekte müssen nur einmal von jQuery im DOM gesucht werden.)
	*/
	var $seminarNav = j('#seminarNav'),				// linke Nav
		$identityNav = j('#identityNav'),			// rechte Nav
		$sideNav = j('#seminarNav, #identityNav'),	// beide Nav
		$search = j('#search'),						// Suchmaske
		$content = j('#content'),					// Inhaltsspalte
		$XMLFetch = j('.tx-xmlfetch2-pi1', $content),// XML Fetch Plugin Container
		$printlink = j('#printlink a'),				// Print-Link am Ende der Seite
		$tipafriend = j('#tipafriend a'),			// Empfehlungs-Link " " "
		$pdflink = j('#pdflink a');					// Druck-Link " " "
		
	var scrollingAllowed = true,
		scrollingIE8 = false,
		browserVersion = parseInt(j.browser.version, 10);
		
	// Browser ist IE (Legacy)
	if (j.browser.msie) {
		
		// $body
		// .addClass('ie')
		// .addClass('ie' + browserVersion);
		
		if (browserVersion < 8) {
			scrollingAllowed = false;
		}
		if (browserVersion === 8) {
			scrollingIE8 = true;
		}
		else if (browserVersion === 6) {
			// "Bitte Browser upgraden!" - Nachricht
			/*$body
				.children()
					.not('script')
					.remove()
					.end()
				.end()
			.html('<div id="main"><div id="logo"></div><h1>Ihr Browser wird nicht mehr unterstützt</h1><p>Bitte aktualisieren Sie Ihren Browser oder laden Sie einen der folgenden alternativen Browser herunter:</p><ul><li><a href="http://www.mozilla.com/de/firefox/">Mozilla Firefox (empfohlen)</a></li><li><a href="http://www.google.com/chrome/intl/de/landing_tv.html">Google Chrome</a></li><li><a href="http://www.apple.com/de/safari/">Apple Safari</a></li></ul></div>');*/
		}
		
	}
	
	
	/************************************************
	* Funktionen									*
	************************************************/
	
	/** updateContentHeight
	 *	Falls die mittlere Inhaltsspalte kleiner ist als eine der beiden
	 *	seitlichen Menüs, muss diese in der Höhe angepasst werden.
	 */
	//console.time('updateContentHeight');
	/* Höhen der drei Spalten auslesen und in Variable speichern */
	var seminarNavHeight = 0,
		identityNavHeight = 0,
		contentColumnHeight = 0,
		newContentColumnHeight = 0;	// Neue Höhe der Inhaltsspalte
	
	/* Funktion erstellen */	
	function updateContentHeight (oldContentColumnHeight) {
		
		seminarNavHeight = 0,
		identityNavHeight = 0,
		contentColumnHeight = 0;
		
		$seminarNav.children().each(function(){ seminarNavHeight += j(this).height(); });		// Höhe der Spalte aktualisieren
		$identityNav.children().each(function(){ identityNavHeight += j(this).height(); });		// Höhe der Spalte aktualisieren
		//$content.children().each(function(){ contentColumnHeight += j(this).innerHeight(); });		// Höhe der Spalte aktualisieren
		contentColumnHeight += j('#content').height();
		
		newContentColumnHeight = seminarNavHeight > contentColumnHeight ? (seminarNavHeight > identityNavHeight ? seminarNavHeight : (identityNavHeight > contentColumnHeight ? identityNavHeight : 'auto')) : (identityNavHeight > contentColumnHeight ? identityNavHeight : 'auto');
		
		//alert('new: '+newContentColumnHeight+', sem: '+seminarNavHeight+', ide: '+identityNavHeight+', con: '+contentColumnHeight);
		
		if (newContentColumnHeight != 'auto' && newContentColumnHeight > 0) { newContentColumnHeight += 'px'; }
		
		$content.css({'height': newContentColumnHeight});	// CSS der Inhaltsspalte aktualisieren
		
		
	}
	
	/* Funktion nach Laden der Seite ausführen (initial)*/
	updateContentHeight();
	//console.timeEnd('updateContentHeight');	
	
	// make form/select/option printable
	j("select").each(function(i){
			 var $el = j(this);
			 var $options = $el.find("option");
			 $el.after("<div class='print-select'><ul id=sel"+i+"></ul></div>");
			 var $curPrintBox = j("#sel"+i);
			 $options.each(function() {
			 if (j(this).text()!="--------"){
				 $curPrintBox.append("<li>"+j(this).text()+"</li>");
				 }
			 });    
		 });
	
	
	/************************************************
	* AJAX											*
	************************************************/
	
	/*
		Per Ajax sollen Kursinhalte nach Klick auf den Detaillink geladen werden und in den
		Container des jeweiligen Kurses geladen werden, welcher danach nach unten ausfährt um
		die Inhalte sichtbar zu machen.
	*/
	
	/** Seminarangebote
	 *	Details bei den Kursangeboten ein und ausblenden.
	 *	Hover-Effekt (Kurzinfo einblenden)
	 */
	//console.time('xmlFetchAJAX');
	//j('.seminarDetails, .seminarShort', $XMLFetch).css('display', 'none');
	//var $seminarDetailsToggle = j('.seminarDetailsToggle', $XMLFetch);
	
	$XMLFetch.bind('click', function(e){
		
		if (e.target.nodeName == 'A') {
			var $this = j(e.target);
			
			if ($this.attr('class') == 'toTop') {
				
				j('html').animate({scrollTop: 0}, 1000);
				//return false;
				
			} 
			else if ($this.parents('div').attr('class') == 'seminarDetailsToggle') {
				
				var $seminarDetails = $this.parent('div').siblings('.seminarDetails');
					
				if ($this.hasClass('open')) {
					
					$seminarDetails
					.slideUp(500, function(){ updateContentHeight(); });
					
					$this
					.removeClass('open')
					.addClass('closed')
					.text('Details anzeigen')
						.parents('div')
							.parents('.seminar')
							.removeClass('open')
								.parents('.tx-xmlfetch2-pi1')
								.removeClass('somethingisopen');
					
				}
				else if ($this.hasClass('closed')) {
					
					$seminarDetails
					.slideDown(500, function(){
						
						updateContentHeight();
						
						var offset = j(this).parents('.seminar').offset();
						
						j('html').animate({ scrollTop: Math.ceil(offset.top - 10) + 'px' }, 1000);
						
					})
					
					$this
					.removeClass('closed')
					.addClass('open')
					.text('Details schließen')
						.parents('div')
							.parents('.seminar')
							.addClass('open')
								.parents('.tx-xmlfetch2-pi1')
								.addClass('somethingisopen')
							.end()
							.siblings('.seminar')
							.removeClass('open')
							.addClass('closed')
								.children('.seminarDetails')
								.slideUp(500, function(){ updateContentHeight(); })
								.siblings('.seminarDetailsToggle')
									.children('a')
									.text('Details anzeigen');
					
				}
				else {
					
					var seminarLink = $this.attr('href')+"?type=101";	
					var seminarLinkMenu = $this.attr('href');						
					//seminarLink = seminarLink.replace(/lehrgang/, 'details_ajax');
					
					var seitenTitle = $this.parents('div').parents('.seminar').find('h3').text();
					
					j.get(seminarLink, function(data) {
					
						var seminarDetailsRegExp = /<!--seminarDetails begin-->([\s\S]*)<!--seminarDetails end-->/,
							seminarDetailsData = seminarDetailsRegExp.exec(data),
							tipprintRegExp = /<!--tipprint begin-->([\s\S]*)<!--tipprint end-->/,
							tipprintTemp = tipprintRegExp.exec(data),
							tipprintData = tipprintTemp[0].replace(/details-ajax/, 'lehrgang');
							
							//console.log(tipprintData);
							
							/*if (tipprintTemp !== null) {
								var tipprintHtml = tipprintData;
							}
							else {
								var tipprintHtml = '';
							}*/
						
						var tipurl = encodeURI(seminarLinkMenu);
						tipurl = tipurl.replace(/details_ajax/, 'lehrgang');
						
						var tipprintHtml = '<div class="ajaxTipAndPrint"><ul><li id="tipafriend"><a href="servicemenue/seite-weiterempfehlen.html?rp=http%3A%2F%2Fwww.bfe.de%2F'+tipurl+'&rptitle='+seitenTitle+'">Seite empfehlen</a></li><li id="printlink"><a href="javascript:window.print()">Seite drucken</a></li><li id="pdflink"><a target="_blank" href="pdfanzeigen/'+seminarLinkMenu+'">Seite als PDF herunterladen</a></li></ul></div>';
							
						$seminarDetails
						.html(seminarDetailsData[0] + tipprintHtml)
						.slideDown(500, function(){
												 
							updateContentHeight();
							
							var offset = j(this).parents('.seminar').offset();
							
							j('html').animate({ scrollTop: Math.ceil(offset.top - 10) + 'px' }, 1000);
							
						});
						
						$this
						.addClass('open')
						.text('Details schließen')
							.parents('div')
								.parents('.seminar')
								.addClass('open')
									.parents('.tx-xmlfetch2-pi1')
									.addClass('somethingisopen')
								.end()
								.siblings('.seminar')
								.removeClass('open')
								.addClass('closed')
									.children('.seminarDetails')
									.slideUp(500, function(){ updateContentHeight(); })
									.siblings('.seminarDetailsToggle')
										.children('a')
										.text('Details anzeigen');
						
					}, 'html');
					
					$this.text('Lade Details ...');
					
					      
					/*	2010-10-27 Stefan: den Print Link anpassen bei Klick auf 'Details anzeigen' (wegen Ajax) 
					 *	(aktueller Wert würde in $printlink.attr('href') liegen
					 *	2010-10-28 Philipp: Code etwas verkürzt und aufgeräumt
					 **/
					/*$printlink.each(
						function(){
							var newHREF = 'druckversion/' + encodeURI(seminarLink);
							$printlink.attr('href', newHREF);
						}
					);*/
					
					$pdflink.each(
						function(){
							var newHREF = 'pdfanzeigen/' + seminarLink;
							$pdflink.attr('href', newHREF);
						}
					);
					
					$tipafriend.each(
						function(){
							var newHREF = 'servicemenue/seite-weiterempfehlen.html?rp=http%3A%2F%2Fwww.bfe.de%2F' + encodeURI(seminarLink) + '&rptitle=' + seitenTitle;
							newHREF = newHREF.replace(/details_ajax/, 'lehrgang');
							$tipafriend.attr('href', newHREF);
						}
					);
					
				}
				
			}
			else {
				return true;
			}	
			
		} /* else alert('not a link'); */
		
		return false;
		
	});

	 // Wird ein anderes Seminar-Datum ausgewählt, muss der Detail-Link geändert,
	 // bzw. der angezeigte Content aktualisiert werden.
	 j('body').bind('change', function(e){
		
		 // Informationen über das Event-Ziel speichern
		 var target = e.target,
			 attributes = target.attributes,
			 isSeminarSelect = false;
		
		 // Überprüfen ob das Event-Ziel zur Seminar-Auswahl gehört
		 for (var i = 0; i < attributes.length; i++) {
			 if (attributes[i].nodeName	=== 'class' && 
				 attributes[i].nodeValue	=== 'seminarSelect') {
				
				 isSeminarSelect = true;
			 }
		 }
		
		 // Wenn das Event-Ziel zur Seminar-Auswahl gehört, wird der aktuelle Wert
		 // des option-Elements ausgelesen und via RegExp nach der Seminar-ID durchsucht.
		 // Das Ergebnis wird dann weiterbenutzt für den Detail-Link bzw. für den AJAX-Aufruf.
		 if (isSeminarSelect) {
		
			 var optionVal = target.options[target.selectedIndex].value,
				 regExp = /schedule_id=([0-9]*)\&/
				 regExpReturn = optionVal !== '' ? regExp.exec(optionVal) : false;
			
			 // An dieser Stelle sollte der Wert nicht false sein, zur Sicherheit wird's aber geprüft.
			 // Wenn alles in Ordnung ist, wird der Link aktualisiert.
			 if (regExpReturn) {
				
				 // Link suchen und benötigte Attribute speichern
				 var $target = j(target),	// javascript Objekt "target" in jQuery Objekt $target umwandeln
					 $toggleLink = $target.parents('.seminar').children('.seminarDetailsToggle').children('a'),	// Detaillink suchen
					 toggleLinkName = $toggleLink.attr('name'),		// Link Attribut: name
					 toggleLinkTarget = $toggleLink.attr('href');	// Link Attribut: href
				
				 // Attribute via .replace ändern
				 var newLinkName = toggleLinkName.replace(/seminar-.*/, "seminar-" + regExpReturn[1]),
					 newLinkTarget = toggleLinkTarget.replace(/\/kurs\/.*\//, "/kurs/" + regExpReturn[1] + "/");
				
				 // Neue Attribute zum Link hinzufügen
				 $toggleLink.attr('name', newLinkName).attr('href', newLinkTarget);
				
				 // Events Triggern zum Aktualisieren des Inhalts wenn Details geöffnet sind
				 if ($toggleLink.attr('class') === 'open') {
					
					 $toggleLink.trigger('click').removeAttr('class').trigger('click');
					
				 }
				 // Class-Attribut löschen, dass beim nächsten Aufruf der Inhalt (neu) geladen wird
				 else if ($toggleLink.attr('class') === 'closed') {
					 $toggleLink.removeAttr('class');
				 }
				
			 }
			
		 }
		
	 });
	
	/* für Detailseite */
	var $tipafriendDetail = j('#uid74 #tipafriend a'),
		$pdflinkDetail = j('#uid74 #pdflink a');	
	
	var seminarLinkDetail = $tipafriendDetail.attr('href');
	var path = window.location.pathname;
	var seitenTitle = j('title').text();
	
	$tipafriendDetail.each(
						function(){
							var newHREF = 'servicemenue/seite-weiterempfehlen.html?rp=http%3A%2F%2Fwww.bfe.de' + encodeURI(path) + '&rptitle=' + seitenTitle;
							newHREF = newHREF.replace(/details_ajax/, 'lehrgang');
							$tipafriendDetail.attr('href', newHREF);
						}
					);
	$pdflinkDetail.each(
						function(){
							var newHREF = 'pdfanzeigen' + path;
							//newHREF = newHREF.replace(/details_ajax/, 'lehrgang');
							$pdflinkDetail.attr('href', newHREF);
						}
					);


	//console.timeEnd('xmlFetchAJAX');

	
	/************************************************
	* Animationen / etc.							*
	************************************************/
	/** Suchmaske
	 *	Beim Klicken in die Suchmaske soll der Text darin gelöscht werden
	 *	und falls keine Eingabe erfolgte, wieder einblenden
	 */
	//console.time('search');
	var $searchInput = j('#searchInputField');
	var searchInputVal = $searchInput.val();
	
	$searchInput
	.bind('focus', function(){
		if(j(this).val() == searchInputVal) {
			j(this).val('').css('color', 'rgb(32, 32, 32)');
		}
	});
	
	$searchInput
	.bind('blur', function(){
		var thisVal = j(this).val();
		if (thisVal == '') {
			j(this).val(searchInputVal).css('color', 'rgb(128, 128, 128)');
		} else {
			j(this).css('color', 'rgb(32, 32, 32)');
		}
	});
	//console.timeEnd('search');
	
	/** FancyBox
	 *	FancyBox initialisieren für jeweils bestimmte Bereiche
	 */
	//console.time('fancybox');
	var $fancyboxItems = j('a.fancybox', j('#content'));
	$fancyboxItems
	.animate({'opacity': 1}, 0, function(){
		var imgWidth = j(this).children('img').width();
		var imgHeight = j(this).children('img').height();
		
		var cssObj = {
			'display': 'block',
			'width': imgWidth + 'px',
			'height': imgHeight + 'px',
			//'margin': '0.525em 1em 0.525em 0',
			'border': 'none',
			'position': 'relative',
			'float': 'left'
		}
		
		j(this).css(cssObj);
	})
	.prepend('<span class="fancyboxZoomIcon"></span>')
	.fancybox({
		titlePosition: 'over',
		transitionIn: 'fade',
		transitionOut: 'fade',
		speedIn: 500,
		speedOut: 300
	})
	.children('img').css({
		'width': '100%',
		'margin': '0',
		'float': 'none'
	});
	//console.timeEnd('fancybox');
	
	/* Partnerlogos */
	var $partnerItems = j('.partnerlogos img');
	$partnerItems
	.each(function(){
		j(this)
		.css({
			'margin': (135 - j(this).height()) / 2 + 'px auto',
			'border': '0px',
			'display': 'block',
			'max-height': '125px',
			'max-width': '125px',
			'padding': '0px'
		});
	});
	
	/*.animate({'opacity': 1}, 500, function(){
		var imgHeight = j(this).height(),
			imgHeight = 135 - imgHeight,
			imgHeight = imgHeight/2;
		
		var cssObj = {
			'margin': imgHeight + 'px auto',
			'border': '0px',
			'display': 'block',
			'max-height': '125px',
			'max-width': '125px',
			'padding': '0px'
		}
		
		j(this).css(cssObj);
	})*/
	

	/** seitliche Navigationen: Vertikales Nachfolgen
	 *	Die Navigationen sollen dem Benutzer beim Scrollen nach unten folgen
	 */
	//console.time('navigation_v');
	var $headlineBox = $sideNav.children('.headlineBox'),
		headlineBoxOffset = $headlineBox.offset().top,
		documentHeight = j(document).height(),
		usrPosition = j(window).scrollTop();
	
	if (usrPosition > headlineBoxOffset) { $headlineBox.css({ 'margin-top': usrPosition - headlineBoxOffset + 20 + 'px' }); }
	
	j(window).scroll(function(){
		
		
	if(scrollingAllowed){
		
		documentHeight = j(document).height(),
		usrPosition = j(window).scrollTop();
		
		var seminarNavHeight = $seminarNav.find('ul').innerHeight(),
			identityNavHeight = $identityNav.find('ul').innerHeight(),
			navHeight = seminarNavHeight > identityNavHeight ? seminarNavHeight : identityNavHeight;
		
		if ((usrPosition + 20 + navHeight + 150) < documentHeight && usrPosition > headlineBoxOffset) {
			//$headlineBox.stop().animate({ 'margin-top': usrPosition - headlineBoxOffset + 20 + 'px' }, 250, 'linear');
			$seminarNav.css({ 'position': 'fixed',
								'margin': '0 0 0 -250px',
								'right': 'auto',
								'top': '15px'
								});
			$identityNav.css({ 'position': 'fixed',
								'margin': '0 0 0 480px',
								'top': '15px'
								});
		} else if (usrPosition < headlineBoxOffset) {
			//$headlineBox.stop().animate({ 'margin-top': '0px' }, 250, 'linear');
			$seminarNav.css({ 'position': 'relative',
								 'margin': '-50px 0 0 -480px',
								 'right': '250px',
								 'top': 'auto'
							  });
			$identityNav.css({ 'position': 'relative',
								 'margin': '-50px -250px 0 0',
								 'top': 'auto'
							  });
		}
		
		//console.log('usr: ' + usrPosition);
		//console.log('end: ' + endPosition);
		//console.log('diffDoc: ' + diffDocHeight);
	
	}
		
	});
	//console.timeEnd('navigation_v');
	
	/* nicht gesetzte Links ausgrauen (nicht klickbar machen) */
	// $sideNav.find('ul li:has(ul) ul li a[href=#]').css('color', 'rgb(192, 192, 192)').click(function(){ return false; });

	
	/** Validation im Shop Warenkorb, 
	 *	entweder muss Firma oder Geb.datum ausgefuellt sein.
	 */
	
	errornotice = j("#error");
	emptyerror = "Bitte eines der Felder ausfuellen.";

	j("#theform").submit(function(){	
		//Validate required fields
			var billing_company = j('#billing_company');
			var billing_date_of_birth = j('#billing_date_of_birth');
			
			if ((billing_company.val() == "") || (billing_company.val() == emptyerror)) {
				if ((billing_date_of_birth.val() == "") || (billing_date_of_birth.val() == emptyerror)) {
					billing_company.addClass("needsfilled");
					billing_date_of_birth.addClass("needsfilled");
					billing_company.val(emptyerror);
					billing_date_of_birth.val(emptyerror);
					errornotice.fadeIn(750);
				}
			} else {
				input.removeClass("needsfilled");
			}
		
		//if any inputs on the page have the class 'needsfilled' the form will not submit
		if (j(":input").hasClass("needsfilled")) {
			return false;
		} else {
			errornotice.hide();
			return true;
		}
	});
	
	// Clears any fields in the form when the user clicks on them
	j(":input").focus(function(){		
	   if (j(this).hasClass("needsfilled") ) {
			j(this).val("");
			j(this).removeClass("needsfilled");
	   }
	});
	
});

// Typo3 Default JS
var browserName=navigator.appName;var browserVer=parseInt(navigator.appVersion);var version="";var msie4=(browserName=="Microsoft Internet Explorer"&&browserVer>=4);if((browserName=="Netscape"&&browserVer>=3)||msie4||browserName=="Konqueror"||browserName=="Opera"){version="n3";}else{version="n2";}
function blurLink(theObject){if(msie4){theObject.blur();}}
function decryptCharcode(n,start,end,offset){n=n+offset;if(offset>0&&n>end){n=start+(n-end-1);}else if(offset<0&&n<start){n=end-(start-n-1);}
return String.fromCharCode(n);}
function decryptString(enc,offset){var dec="";var len=enc.length;for(var i=0;i<len;i++){var n=enc.charCodeAt(i);if(n>=0x2B&&n<=0x3A){dec+=decryptCharcode(n,0x2B,0x3A,offset);}else if(n>=0x40&&n<=0x5A){dec+=decryptCharcode(n,0x40,0x5A,offset);}else if(n>=0x61&&n<=0x7A){dec+=decryptCharcode(n,0x61,0x7A,offset);}else{dec+=enc.charAt(i);}}
return dec;}
function linkTo_UnCryptMailto(s){location.href=decryptString(s,-1);}
