var LAB = {}; //global var
var doc = $(document); //oft gebraucht
var win = $(window); //oft gebraucht
var dbg = G8.dbg; //oft gebraucht

//+++ JS Settings ++++++++++++++++++++++++++++++++++++++++
(function setLABSettings(){ 
	
	LAB.menuIsSwitching = false;
	LAB.origImgWidth = 750;
	LAB.currViewMode = "NORMAL";
	LAB.contentSaveframeNormal = 70; //abstand nach links und rechts für Texte (normal view)
	LAB.contentSaveframeRapport = 50; //abstand nach links und rechts für Bilder (rapport view)
	LAB.topOffset = 132;
	LAB.hideTextRatio = 0.6; //ab 60% bildgröße texte ausblenden
	LAB.siteIsScaled = false;
	LAB.currLang = false;
	LAB.currUrl = location.href;

	LAB.wordings = {};
	LAB.wordings["de"] = {
		changeView: "Ansicht wechseln",
		viewNormal: "Normal",
		viewMiniatur: "Miniatur"
	};
	
	LAB.wordings["en"] = {
		changeView: "change view",
		viewNormal: "normal",
		viewMiniatur: "mini"
	};

})();



/**
Class Static: 	ax_page

--- --- --- --- --- --- ---
provides:

	public methods:
		initPage()
		getMaxImgWidth()
		updateDisplay()

	private methods:
		_foc_removeLinkFocus
		_rsz_window(e)
		_handleWindowSizing()
		
*/

//--- class --- --- --- --- --- --- ---
var ax_page = (function ax_page(){	

	function initPage(){
	  //set global reference
  	LAB.DomMainColLeft = $("#frmMainColLeft"); 
  	LAB.DomMainColRight = $("#frmMainColRight"); 
		LAB.DomZoomPopup = $("#frmZoompop");
		
		//set curr Language
		LAB.currLang = location.href.indexOf("/de/")!=-1? "de" : "en";
		
	  //handle window resize
	  $(window).bind("resize", _rsz_window);

		updateDisplay();
	}
	
	function _handleWindowSizing(){
	  var newImgWidth = getMaxImgWidth();
	  LAB.siteIsScaled = newImgWidth!=LAB.origImgWidth;
	
	  //popup skalieren
	  LAB.DomZoomPopup.width($(window).width());
	
	  //evtl. content skalieren
	  if(LAB.currViewMode=="NORMAL") {
	  	//inhalte skalieren-------
	  	
	  	//bilder & spacer
	  	$(".idContentImg,.idSpacerContentMiddle,.js_spacerContentEnd",LAB.DomMainColRight).width(newImgWidth).show();//show: wg. idSpacerContentMiddle
	  	
	  	//texte
	  	if(newImgWidth/LAB.origImgWidth >= LAB.hideTextRatio)	{
	  		$(".idContentText",LAB.DomMainColRight).width(newImgWidth).show()
	  		.find(".idContentsAbove,.idContentsAboveAfterText,.idContentsBeneath").css("padding-left",newImgWidth/LAB.origImgWidth*LAB.contentSaveframeNormal+"px");
		  } else {
		  	$(".idContentText",LAB.DomMainColRight).hide(); //content zu klein: texte ausblenden
		  }
	    	
	    //flash contents
	    if(LAB.siteIsScaled){ //scaled: zeige alt bild, swf hide
	    	$(".idContentFlash",LAB.DomMainColRight).width(newImgWidth).find(".idContentFlashAltImg").show();
	    	$(".idContentFlashSwf",LAB.DomMainColRight).hide();
	    } else { //orig size: zeige flash, hide alt bild
	    	$(".idContentFlashAltImg",LAB.DomMainColRight).hide();
				$(".idContentFlash",LAB.DomMainColRight).width(LAB.origImgWidth)
				.find(".idContentFlashSwf").show();
	    }
	    
			//cursor handling
			if(LAB.siteIsScaled){
			  $(".idContentImg,.idContentFlashAltImg",LAB.DomMainColRight).removeClass("idLinkCursor").removeClass("idZoomOutCursor").addClass("idZoomInCursor");
			} else {
			  $(".idContentImg,.idContentFlashAltImg",LAB.DomMainColRight).removeClass("idLinkCursor").removeClass("idZoomOutCursor").removeClass("idZoomInCursor");
			}
	
	  }
	  
	}
	
	function _rsz_window(e){
		_handleWindowSizing();
	}
		
	function updateDisplay(){
		ax_rapport.tglRapportLink();
		
		//binds
	  $("a").bind("focus",_foc_removeLinkFocus);
  	$("a").bind("click",ax_smoothLinking.clk_anyLink);
  	$("#mailForm").bind("submit",ax_form.sbm_contactForm);
	  
	  _handleWindowSizing();

		//scrolle alle spalten an anfang
		LAB.DomMainColLeft.add($('html,body')).scrollTop(0); //info: rechte spalte: wird über $("html,body") gesteuert!
	}
	
	function _foc_removeLinkFocus(e){
		if(this.blur) this.blur();
	}
	
	function getMaxImgWidth(){
	  var divWidth = LAB.DomMainColRight.width();
	  divWidth += parseInt(LAB.DomMainColRight.css("padding-left")) + parseInt(LAB.DomMainColRight.css("padding-right"));
	
	  if (divWidth < LAB.origImgWidth) return (LAB.origImgWidth*(divWidth/LAB.origImgWidth))-20; //20 für scrollbar
	  else return LAB.origImgWidth;
	}
		
	
	//--- return public methods & properties --- --- --- --- --- --- ---
	return {
		initPage:initPage,
		getMaxImgWidth:getMaxImgWidth,
		updateDisplay:updateDisplay
	};

})();



/**
Class Static: 	ax_smoothLinking

--- --- --- --- --- --- ---
provides:

	public methods:
		clk_anyLink(e)
		
	private methods:
		_smoothLoad(linkUrl)
		_qualifyUri(linkUrl)
		
*/

//--- class --- --- --- --- --- --- ---
var ax_smoothLinking = (function ax_smoothLinking(){	

	function clk_anyLink(e){ /*
		wenn link nicht class="js_directLink" oder target="_blank" hat, wird content per ajax geladen */
		
		var linkObj = $(this);
		var linkUrl = linkObj.attr("href");
		if(!linkObj.hasClass("js_directLink") && linkObj.attr("target")!="_blank" && linkUrl!="" && linkUrl!="#"){
			_smoothLoad(linkUrl);
			return false; //prevent link
		}
	}
	
	function _qualifyUri(linkUrl){
		var a = document.createElement('a');
    a.href = linkUrl;
    var newUrl = a.href;
		return newUrl;
	}
	
	function _smoothLoad(linkUrl){
		linkUrl = _qualifyUri(linkUrl);
		
		if(LAB.currUrl!=linkUrl && !LAB.menuIsSwitching){
			LAB.menuIsSwitching = true;

			//falls url nicht gefunden wird: timeout, damit wieder neue page gerufen werden kann			
			var timeout404 = setTimeout(function(){
				LAB.menuIsSwitching=false;
			},10000); 
			
			LAB.currUrl = linkUrl; //save
			$.get(linkUrl, {},
		  	function(data){
		  		clearTimeout(timeout404);
		  		LAB.currViewMode = "NORMAL"; //reset
					_changeTitle(data);
					_changeNavigation(data);
					_changeContents(data);
					ax_page.updateDisplay();
		  	},
		  	"html");
		}
		
		function _changeTitle(data){
			//info: man kann nicht DATA so traversen wie DOM (z.b. hat data kein $(document) usw.
			var newDocTitle = data.match(/[^>]*(?=<\/title>)/); //find <title>MATCH</title>
			document.title = newDocTitle; //write new doc title
			
		}
		
		function _changeNavigation(data){
			
			function inc_readSubNavIndex(){ /*
			  info:   newSubNavIndex = newSubNav.index(newSubNavItem); 
				geht nicht, weil nicht im DOM, sondern in ajax-data */
				
				var newSubNavIndex;
				newSubNavBox.find(".subNav").each(function(i){
					if($(this).hasClass(".subNavAct")) {
						newSubNavIndex = i;
						return false;
					}
				});
				return newSubNavIndex;
			}
			
			function inc_readMainNavIndex(){ /*
			  info:   newMainNavIndex = newNavBox.index(newMainNavItem); 
				geht nicht, weil nicht im DOM, sondern in ajax-data */
				
				var newMainNavIndex;
				newNavBox.find(".mainNav").each(function(i){
					if($(this).hasClass(".mainNavAct")) {
						newMainNavIndex = i;
						return false;
					}
				});
				return newMainNavIndex;				
			}
			
			function inc_resetSwitchFlag(){
				LAB.menuIsSwitching = false; //reset
			}

			//--- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
			
			//change language-link
			var newSamePageOtherLangUrl = LAB.currUrl.indexOf("/de/")!=-1? LAB.currUrl.replace("/de/","/en/") : LAB.currUrl.replace("/en/","/de/");
			$(".boxLangBtns").find("a").attr("href",newSamePageOtherLangUrl);
			
			
			var dataParseable = $("<div>"+data+"</div>");
			
			var currNavBox = $("#boxNavi");
			var currMainNavItem = currNavBox.find(".mainNavAct");
			var currSubNavBox = currNavBox.find(".boxSubNavAct");
			var currSubNavItem = currNavBox.find(".subNavAct");
			
			var newNavBox = $("#boxNavi",dataParseable);
			var newMainNavItem = newNavBox.find(".mainNavAct");
			var newSubNavBox = newNavBox.find(".boxSubNavAct");
			var newSubNavItem = newNavBox.find(".subNavAct");

			//--- alte ist home
			if(!currMainNavItem.length) {
				var newMainNavIndex = inc_readMainNavIndex();
				var newSubNavIndex = inc_readSubNavIndex();
						
				$(".mainNav").eq(newMainNavIndex).addClass("mainNavAct");
						
				$(".boxSubNav").eq(newMainNavIndex).slideDown(400,inc_resetSwitchFlag).addClass("boxSubNavAct")
				.find(".subNav").eq(newSubNavIndex).addClass("subNavAct");
			}
			
			//--- alte ist !=home
			else {
				//--- neue ist home
				if(!newMainNavItem.length){
					currSubNavBox.slideUp(400,inc_resetSwitchFlag).removeClass("boxSubNavAct");
					currSubNavItem.removeClass("subNavAct");
					currMainNavItem.removeClass("mainNavAct");
				}
				
				//--- neue ist !=home
				else{
					//--- neue ist gleiche mainnav
					if(currMainNavItem.html()==newMainNavItem.html()){
						var newSubNavIndex = inc_readSubNavIndex();

						$(".subNav",currSubNavBox).removeClass("subNavAct")
						.eq(newSubNavIndex).addClass("subNavAct");
						
						inc_resetSwitchFlag();
					}
					
					//--- neue ist ungleiche mainnav
					else {
						currMainNavItem.removeClass("mainNavAct");
						currSubNavItem.removeClass("subNavAct");
						currSubNavBox.slideUp(400);
						
						var newMainNavIndex = inc_readMainNavIndex();
						var newSubNavIndex = inc_readSubNavIndex();
						
						$(".mainNav").eq(newMainNavIndex).addClass("mainNavAct");
						
						$(".boxSubNav").eq(newMainNavIndex).slideDown(400,inc_resetSwitchFlag).addClass("boxSubNavAct")
						.find(".subNav").eq(newSubNavIndex).addClass("subNavAct");
					}
					
				}
			}
 		
		}

		function _changeContents(data){
			var dataParseable = $("<div>"+data+"</div>");
			
			//update left col
			var newColLeftInner = $("#frmMainColLeft",dataParseable).find(".idContainer");
			LAB.DomMainColLeft.find(".idContainer")
			.html(newColLeftInner.html())
			.tglClass("js_hasRapportLink",newColLeftInner.hasClass("js_hasRapportLink"));
			
			//update right col
			LAB.DomMainColRight.html($("#frmMainColRight",dataParseable).html());
		}

	}
	
	//--- return public methods & properties --- --- --- --- --- --- ---
	return {
		clk_anyLink:clk_anyLink
	};

})();


/**
Class Static: 	ax_rapport

--- --- --- --- --- --- ---
provides:

	public methods:
		tglRapportLink
		
	private methods:
		_clk_rapportBtn(e)
		
*/

//--- class --- --- --- --- --- --- ---
var ax_rapport = (function ax_rapport(){	

	function tglRapportLink(){
		var rapportLinkObj = $("#RapportLink");
		var leftColInner = LAB.DomMainColLeft.find(".idContainer");
		if(leftColInner.hasClass("js_hasRapportLink")){
			if(!rapportLinkObj.length) {
				rapportLinkObj = $('<div id="RapportLink">'+LAB.wordings[LAB.currLang]["changeView"]+'<img src="../../img/icon_viewrapport.gif" id="ImgRapportLink" class="idLinkCursor" alt="'+LAB.wordings[LAB.currLang]["viewMiniatur"]+'" title="'+LAB.wordings[LAB.currLang]["viewMiniatur"]+'"></div>');
				leftColInner.append(rapportLinkObj);
			}
		} else {
			if(rapportLinkObj.length) rapportLinkObj.remove();
		}
		
		$("#ImgRapportLink").bind("click",_clk_rapportBtn);
		$(".idContentImg,.idContentFlashAltImg",LAB.DomMainColRight).bind("click",_clk_contentImg);
		
	}
	
	function _clk_rapportBtn(e){
		
		var scaleFactor = 0.2;
		
		var rapportLinkObj = $("#RapportLink");
		var rapportImgObj = $("#ImgRapportLink");
	  
	  
	  //--- zeige rapport----------------------
	  if(LAB.currViewMode=="NORMAL"){
	 
	  	$('html,body').scrollTop(0); //nicht animieren, sonst flackerts
		  
	  	$(".idContentText,.idSpacerContentMiddle,.idContentFlashSwf",LAB.DomMainColRight).hide();
		  
		  $(".idContentImg,.js_spacerContentEnd,.idContentFlash",LAB.DomMainColRight).animate({width:LAB.origImgWidth*scaleFactor}, 500)
		  .find(".idContentFlashAltImg").show();
		  
		  LAB.DomMainColRight.animate({paddingLeft:LAB.contentSaveframeRapport+"px", paddingRight:LAB.contentSaveframeRapport+"px"}, 500);
	  	
		  //cursor handling
		  $(".idContentImg,.idContentFlashAltImg",LAB.DomMainColRight).addClass("idLinkCursor").removeClass("idZoomOutCursor").removeClass("idZoomInCursor");
	
		  //change rapport switcher
		  rapportImgObj
		  .attr("src","../../img/icon_viewnormal.gif")
		  .attr("alt",LAB.wordings[LAB.currLang]["viewNormal"])
		  .attr("title",LAB.wordings[LAB.currLang]["viewNormal"]);
		  
		  LAB.currViewMode = "RAPPORT";
	
		//--- zeige normal----------------------
		} else {
	
			var newImgWidth = ax_page.getMaxImgWidth();
	
			//bilder
			$(".idContentImg,.js_spacerContentEnd,.idSpacerContentMiddle",LAB.DomMainColRight).show().animate({width:newImgWidth},500);//show: falls idSpacerContentMiddle ausgeblendet war
			
			//texte
			if(newImgWidth/LAB.origImgWidth >= LAB.hideTextRatio) {
				$(".idContentText",LAB.DomMainColRight).width(newImgWidth).show()
				.find(".idContentsAbove,.idContentsAboveAfterText,.idContentsBeneath").css("padding-left",newImgWidth/LAB.origImgWidth*LAB.contentSaveframeNormal+"px");
			}
			
			//flash
			if(LAB.siteIsScaled) { //scaled
				$(".idContentFlash",LAB.DomMainColRight).width(newImgWidth)
				.find(".idContentFlashAltImg").show();
				$(".idContentFlashSwf",LAB.DomMainColRight).hide();
			} else {
				$(".idContentFlashAltImg",LAB.DomMainColRight).hide();
				$(".idContentFlash",LAB.DomMainColRight).width(LAB.origImgWidth)
				.find(".idContentFlashSwf").show();
			}
	
			LAB.DomMainColRight.animate({paddingLeft:0, paddingRight:0}, 500);
			
			//cursor handling
			if(LAB.siteIsScaled){
			  $(".idContentImg,.idContentFlashAltImg",LAB.DomMainColRight).removeClass("idLinkCursor").removeClass("idZoomOutCursor").addClass("idZoomInCursor");
			} else {
			  $(".idContentImg,.idContentFlashAltImg",LAB.DomMainColRight).removeClass("idLinkCursor").removeClass("idZoomOutCursor");
			}
			
			//change rapport switcher
			rapportImgObj
			.attr("src","../../img/icon_viewrapport.gif")
			.attr("alt",LAB.wordings[LAB.currLang]["viewMiniatur"])
			.attr("title",LAB.wordings[LAB.currLang]["viewMiniatur"]);
			
			LAB.currViewMode = "NORMAL";
		}
		
	}
		
	function _clk_contentImg(e){
		var clickedObj = $(this);
		
		//--- Rapport View-----------
		if(LAB.currViewMode=="RAPPORT"){
			var rapportImgObj = $("#ImgRapportLink");
			rapportImgObj.trigger("click");
			
	    //jump to content
	    setTimeout(function(){
	    	//klick auf alt-gif muss zum flash springen (wenn flash gezeigt wird)
	    	if(clickedObj.hasClass("idContentFlashAltImg") && !LAB.siteIsScaled) clickedObj = clickedObj.parent().find(".idContentFlashSwf"); 
	      $('html,body').animate({scrollTop: clickedObj.top() - LAB.topOffset}, 500);
	    }, 500);
	
		//--- Normal View-----------
		} else {
			if(LAB.siteIsScaled) ax_zoom.showZoomed(clickedObj);
		}
		
	}
		
	
	//--- return public methods & properties --- --- --- --- --- --- ---
	return {
		tglRapportLink:tglRapportLink
	};

})();



/**
Class Static: 	ax_zoom

--- --- --- --- --- --- ---
provides:

	public methods:
		showZoomed(clickedObj)
		
	private methods:
		_hideZoomed(clickedObj)
		
*/

//--- class --- --- --- --- --- --- ---
var ax_zoom = (function ax_zoom(){	

	function showZoomed(clickedObj){
	
		var closeButtonCode = '<div class="idClosePopupLink idLinkCursor">'+LAB.wordings[LAB.currLang]["changeView"]+':<img class="idClosePopup" src="../../img/icon_viewback.gif" alt="'+LAB.wordings[LAB.currLang]["viewNormal"]+'" title="'+LAB.wordings[LAB.currLang]["viewNormal"]+'"></div>';
		
		LAB.DomZoomPopup.find(".idContainer").html(LAB.DomMainColRight.html())
		.prepend(closeButtonCode).find(".js_spacerContentEnd").before(closeButtonCode) //insert close buttons
		.end().find(".idClosePopupLink").bind("click",function(){_hideZoomed($(LAB.DomZoomPopup.find(".idContentImg,.idContentFlash").eq(0)));}) //bind click to top
		.end().find(".idContentImg,.idSpacerContentMiddle,.js_spacerContentEnd,.idContentFlash").width(LAB.origImgWidth)
		.end().find(".idContentText,.idSpacerContentMiddle,.idContentFlashSwf,.idContentFlash").show()
		.end().find(".idContentFlashAltImg").hide()
		.end().find(".idContentsAbove,.idContentsAboveAfterText,.idContentsBeneath").css("padding-left",LAB.contentSaveframeNormal+"px")
		.end().find(".idContentImg,.idContentFlashAltImg").removeClass("idLinkCursor").removeClass("idZoomInCursor").addClass("idZoomOutCursor");
		
		LAB.DomZoomPopup.left(0).top(0).fadeIn(400,function(){
			//suche im popup das clicked-obj (z.b. anhand von content...)
			LAB.DomZoomPopup.find(".idContentImg,.idContentFlashAltImg").each(function(){
			  obj = $(this);
			  if(obj.html()==clickedObj.html()) {
			  	if(obj.hasClass("idContentFlashAltImg")) obj=obj.parent().find(".idContentFlashSwf"); //muss auf swf springen, da alt-bild ja ausgeblendet
			  	$('html,body').animate({scrollTop:obj.top() - 10}, 500); //10 top padding optisch
			  }
			});
		})
		.find(".idContentImg").one("click",function(){_hideZoomed($(this));}); 
	}
	
	function _hideZoomed(clickedObj){
		LAB.DomZoomPopup.fadeOut(400,function(){
			//suche im maincontent das clicked-obj (z.b. anhand von content...)
			LAB.DomMainColRight.find(".idContentImg").each(function(){
			  obj = $(this);
			  if(obj.html()==clickedObj.html()) {
			  	var objToScroll = $('html,body');
			  	objToScroll.animate({scrollTop:obj.top() - LAB.topOffset}, 500);
			  }
			});
			LAB.DomZoomPopup.find(".idContainer").html(""); //leeren
		});
	}
	
	
	//--- return public methods & properties --- --- --- --- --- --- ---
	return {
		showZoomed:showZoomed
	};

})();



/**
Class Static: 	ax_form

--- --- --- --- --- --- ---
provides:

	public methods:
		sbm_contactForm(e)
		
	private methods:
		_getFormSerialized(formObj)
*/

//--- class --- --- --- --- --- --- ---
var ax_form = (function ax_form(){	
	
	function _getFormSerialized(formObj){
		var retVal = {};
		var inputs = formObj.find("input,textarea,select");
		inputs.each(function(){
			var input = $(this);
			if(input.attr("name")){ //prevent error
				var inpName = input.attr("name"); 
				var inpVal = input.val();
				retVal[inpName] = inpVal;
			}
		});
		return retVal;
	}

	function sbm_contactForm(e){
		
		var formObj = $("#mailForm");
		var formVals = _getFormSerialized(formObj);
		
		$.post("../../php/mailsend.php", formVals,
			function(data){
				formObj.hide();
				data=="OK"? $("#contactFormSuccess").show(300) : $("#contactFormError").show(300) 
		});
		
		return false;
	}
	

	//--- return public methods & properties --- --- --- --- --- --- ---
	return {
		sbm_contactForm:sbm_contactForm
	};

})();


$(function(){
	ax_page.initPage();
});
