/*****************************************************************************************************************
 * Global Vars
 *****************************************************************************************************************/
	
	var homepage = 'mcon-marke';
	var isResizing = false;
	var isWorking = false;
	var isMobile = (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))||(navigator.userAgent.match(/Android/i));
	var $obj = [];
	var $var = [];
	var $pageOrder = Array(		'mcon-marke',
								'dzt-corporate',
								'dzt-broschueren',
								'dzt-creative',
								'mcon-autosymphonic',
								'lsg-corporate',
								'barutti-mode',
								'tiffi-mode',
								'mebelplast',
								'masterhand-mode',
								'prochnik-mode',
								'dzt-automobil',
								'luther',
								'mannheim-standort',
								'mad',
								'overview',
								'home',
								'agency',
								'agency-trust',
								'agency-20years',
								'references',
								'references2',
								'references3',
								'contact');
		


/*****************************************************************************************************************
 * DOM-Ready
 *****************************************************************************************************************/
 
	$(function(){
		initStaticComponents();
		initDynamicComponents();
		buttonHandler();
		$win.trigger('resize');
		SWFAddress.addEventListener(SWFAddressEvent.CHANGE, swfaddressChangeHandler);
	});
	
	
/***************************************************************************************************
 * Create static Components
 ***************************************************************************************************/

	function initStaticComponents(){
		$win = $(window).bind('resize',resizeHandler);
		$doc = $(document);
		
		$obj['body'] = $('body');
		$obj['master'] = $obj['body'].children('#master');
		$obj['header'] = $obj['master'].children('#header');
		$obj['header-navi'] = $obj['header'].children('.navi');
		$obj['header-navi-li'] = $obj['header-navi'].children('li');
		
		$obj['content'] = $obj['master'].children('#content');
		$obj['controls'] = $obj['content'].children('#controls');
		$obj['button-prev'] = $obj['controls'].children('.button-prev');
		$obj['button-next'] = $obj['controls'].children('.button-next');
		$obj['button-overview'] = $obj['controls'].children('.button-overview').click(toggleOverview);
		
		$obj['slider'] = $obj['content'].children('#slider');
		$obj['current-page'] = $obj['slider'].children('.page');

		$var['current-id'] = $obj['current-page'].attr('id');
		$var['current-pos'] = $pageOrder.findIndex($var['current-id'].substr(5));
		$var['current-overview'] = ($obj['current-page'].attr('data-overview'))?$obj['current-page'].attr('data-overview'):'true';
		
		$var['history'] = [];
		
		// Buttons
		buttonVisibility($var['current-pos']);
		
		// Keyboard
		$doc = $(document).bind('keydown', function(e) {
			if ((e.keyCode == 37 || e.keyCode == 38|| e.keyCode == 39|| e.keyCode == 40) && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
				e.preventDefault();
				
				if(e.keyCode == 37){
					prev();
				} else if(e.keyCode == 39){
					next();	
				} else{
					toggleOverview();	
				}
			}
		});
		
		// Touchpad
		$obj['content'].touchwipe({
			 wipeLeft: function() { next(); },
			 wipeRight: function() { prev(); },
			 wipeUp: function() { toggleOverview(); },
			 wipeDown: function() { toggleOverview(); },
			 min_move_x: 20,
			 min_move_y: 20,
			 preventDefaultEvents: false
		});
		
		// Homepage > Autoplay
		if(SWFAddress.getValue()=='/'){
			$var['history'].push(homepage);
			$var['autoplay'] = true;
			$var['interval'] = setTimeout(nextPage,5000);
		} else {
			$var['history'].push(SWFAddress.getValue());	
		}
		
	}


/***************************************************************************************************
 * SWFAddress Handler
 ***************************************************************************************************/
	
 	function swfaddressChangeHandler(event){
		trace(event);
		trace('-------------------------------------------------');
		if(isWorking) return;
		isWorking = true;
		
		// First Request
		if(!$obj['master'].hasClass('ajax')) $obj['master'].addClass('ajax');
		
		// Event
		var index, rel, parameters='', path=event.path;
		if (path.substr(0,1)=='/') path = path.substr(1);
		if (path=='') path = homepage;
		for (var p in event.parameters) parameters += '&' + p + '=' + event.parameters[p];
		
		// Return same Request
		if($var['current-id']=='page-'+path){
			isWorking = false;
			return;
		}
		
		// Reset
		$obj['button-overview'].removeClass('open');
		
		// History	
		$var['history'].push(path);
		
		// Stop Autoplay?
		if($var['interval']) checkInterval();
		
		// AJAX Request 
		$.ajax({
			url: 'data.php?swfaddress=' + path + parameters,
			success: function(data, textStatus, XMLHttpRequest){
				initPage(data);
			}
		});
		
	}
	
	function initPage(data){
		
		var $page = $(data);
		var id = $page.attr('id');
		var pos = $pageOrder.findIndex(id.substr(5));
		var w = $win.width()-20; if(w<980)w=980;
		$var['current-overview'] = ($page.attr('data-overview'))?$page.attr('data-overview'):'true';
		$var['current-category'] = ($page.attr('data-cat'))?$page.attr('data-cat'):'default';
		
		var slideFromRightToLeft = true;
		if(pos<$var['current-pos']) slideFromRightToLeft=false;
		if($var['current-pos']==0&&pos==$pageOrder.length-1) slideFromRightToLeft = false;
		if($var['current-pos']==$pageOrder.length-1&&pos==0) slideFromRightToLeft = true;
		
		// Show/Hide Buttons
		buttonVisibility(pos);
		
		$obj['master'].addClass('ajax-loading');
		if(slideFromRightToLeft) // nach links sliden
		{
			$obj['slider'].append($page);
			$var['tmp-page'] = $page;
			$var['tmp-pos'] = pos;
			$var['tmp-id'] = id;
			$var['tmp-w'] = w;
			$page.imagesLoaded(animateAfterLoadingRightToLeft);
			
		}
		else // nach rechts sliden
		{
			$obj['slider'].css({marginLeft:-w}).prepend($page);
			$var['tmp-page'] = $page;
			$var['tmp-pos'] = pos;
			$var['tmp-id'] = id;
			$var['tmp-w'] = w;
			$page.imagesLoaded(animateAfterLoadingLeftToRight);
		}
		
		initDynamicComponents();
		resizeHandler();
	}
	
	function animateAfterLoadingRightToLeft(){
		$obj['slider'].stop().animate({marginLeft:-$var['tmp-w']},{duration:700,easing:'easeOutExpo',complete:function(){
			savePage($var['tmp-page'],$var['tmp-pos'],$var['tmp-id']);
		}});
	}
	
	function animateAfterLoadingLeftToRight(){
		$obj['slider'].stop().animate({marginLeft:0},{duration:700,easing:'easeOutExpo',complete:function(){
			savePage($var['tmp-page'],$var['tmp-pos'],$var['tmp-id']);
		}});
	}
	
	function savePage($page,pos,id){
		
		$obj['slider'].css({marginLeft:0});
		$obj['current-page'].remove();
		$obj['current-page'] = $page;		
		$var['current-pos'] = pos;
		$var['current-id'] = id;
		$var['current-title'] = $obj['current-page'].attr('data-title');

		buttonHandler();
		SWFAddress.setTitle($var['current-title']);
		$obj['master'].removeClass('ajax-loading');
		
		if($var['autoplay']) $var['interval'] = setTimeout(nextPage,5000);
		isWorking = false;
	}
	


/***************************************************************************************************
 * Tour
 ***************************************************************************************************/
 
	function nextPage(){
		var current = SWFAddress.getValue().replace('/','');
		var pos = $pageOrder.findIndex(current);
			if(pos<=0)pos=0;
		var limit = $pageOrder.findIndex('overview');
		
		if(pos<limit){
			pos++;
			trace($pageOrder[pos]);
			$var['autoplay-page'] = $pageOrder[pos];
			SWFAddress.setValue($pageOrder[pos]);	
		}else{
			stopInterval();	
		}
	}
	
	function checkInterval(){
		var current = SWFAddress.getValue();
			current = current.replace('/','');
		if($var['autoplay-page']!=current) stopInterval();
	}
	
	function stopInterval(){
		$var['autoplay'] = false;
		if($var['interval']) clearInterval($var['interval']);
	}
 
	
/***************************************************************************************************
 * Button Handler
 ***************************************************************************************************/
	
	function buttonHandler(){
		$var['prev-page'] = ($var['current-pos']>0) ? $var['current-pos']-1 : $pageOrder.length-1;
		$var['next-page'] = ($var['current-pos']<$pageOrder.length-1) ? $var['current-pos']+1 : 0;
		
		$obj['button-prev'].attr('href','javascript://').unbind('click').bind('click',function(){
			prev();																			   
		});
		$obj['button-next'].attr('href','javascript://').unbind('click').bind('click',function(){
			next();																	   
		});
	}
	
	function buttonVisibility(pos){
		(pos==0) ? $obj['master'].addClass('first-page') : $obj['master'].removeClass('first-page');
		(pos==$pageOrder.length-1) ? $obj['master'].addClass('last-page') : $obj['master'].removeClass('last-page');
		
		($var['current-overview']=='false') ? $obj['button-overview'].hide() : $obj['button-overview'].show();
		
		$obj['header-navi-li'].removeClass('active');
		trace('cat:'+$var['current-category']);
		if($var['current-category']!='default')$obj['header-navi-li'].filter(':[data-cat$="'+$var['current-category']+'"]').addClass('active');
		
		$('#tiptip_holder').hide();
	}
	
	function prev(){
		if($var['current-pos']==0)return;
		SWFAddress.setValue($pageOrder[$var['prev-page']]);	
	}
	
	function next(){
		if($var['current-pos']==$pageOrder.length-1)return;
		SWFAddress.setValue($pageOrder[$var['next-page']]);	
	}
	
	
	


/***************************************************************************************************
 * Toggle Overview
 ***************************************************************************************************/
 
	function toggleOverview(){
		if(isWorking||$var['current-overview']=='false')return;
		stopInterval();
		
		var h = $win.height();
		var half = h/2;
		var $blur = $obj['current-page'].children('.blur');
		var $overview = $obj['current-page'].children('.overview');
		
		if(!$obj['button-overview'].hasClass('open')){
			$obj['button-overview'].addClass('open');
			$blur.stop().hide().css({opacity:0,display:'block'}).animate({opacity:1},700);
			$overview.stop().css({top:-h}).animate({top:h/2},{duration:800,easing:'easeOutBack',complete:function(){
				$overview.css({top:'50%'})																									   
			}});
		}
		else
		{
			$obj['button-overview'].removeClass('open');
			$blur.stop().animate({opacity:0},700);
			$overview.stop().css({top:half}).animate({top:-h},{duration:500,easing:'linear',complete:function(){
				$overview.css({top:'-100%'})																									   
			}});
		}
	}


/***************************************************************************************************
 * Create dynamic Components
 ***************************************************************************************************/
	
	function initDynamicComponents(){
		$obj['js-resize'] = $('.js-resize');
		
		(isMobile) ? $(".overview .tooltip").tipTip({defaultPosition:'top',delay:0,activation:'click'}) : $(".tooltip").tipTip({defaultPosition:'top',delay:0,activation:'hover'});
		
		$obj['master'].find('a.swfaddress').click(function(){
			SWFAddress.setValue($(this).attr('rel')); this.blur(); return false;				   
		}).attr('href','javascript://').removeClass('swfaddress');
		
		if($obj['slider'].find('.neosmart-gmap').length) initGMap();
	}
	
	function initGMap(){
		$('.neosmart-gmap').each(function(index){
			var $this = $(this);
			var id = (this.id) ? this.id : 'neosmart-gmap-'+Math.floor(Math.random()*1000000);
			this.id = id;
			var lat = parseFloat($this.attr('data-lat'));
			var lng = parseFloat($this.attr('data-lng'));
			var zoom = parseInt($this.attr('data-zoom'));
			var title = $this.attr('data-title');
			var width = parseInt($this.attr('data-width'));
			var height = parseInt($this.attr('data-height'));
			var mapTypeControl = ($this.attr('data-map-type-control')=='false')?false:true;
			if(isNaN(zoom)) zoom=11;
			
			var myLatlng = new google.maps.LatLng(lat,lng);
			var myOptions = {
			  zoom: zoom,
			  center: myLatlng,
			  mapTypeControl:mapTypeControl,
			  mapTypeId: google.maps.MapTypeId.ROADMAP
			}
			
			if(width&&height) $this.css({width:width,height:height});
			
			var map = new google.maps.Map(this, myOptions);
			var marker = new google.maps.Marker({
				position: myLatlng, 
				map: map,
				title:title
			});
		});
	}
	

/***************************************************************************************************
 * Resize Handler
 ***************************************************************************************************/
 
 	function resizeHandler(){
		if(!isResizing){
			isResizing=true;
				
				var winRatio = $win.width()/$win.height();
				var imgRatio = 1280/765;
				var imageHeight = $win.height()-80;				if(imageHeight<586)imageHeight=586;
				var imageWidth = imageHeight*imgRatio;
				var marginLeft = -(imageWidth-$win.width())/2;	if(marginLeft>0)marginLeft=0;
		
				$obj['js-resize'].each(function(index){
					$this = $(this);
					if(winRatio<1.52){
						$this.width(imageWidth).height(imageHeight).css({marginLeft:marginLeft});
					} else{
						$this.width('100%').height('').css({marginLeft:0});
					}
				});
			
		
			isResizing=false;
		}
	}
	
	
/***************************************************************************************************
 * Helper functions
 ***************************************************************************************************/
			
	function trace(msg){try{console.log(msg);}catch(e){}}
	Array.prototype.findIndex = function(value){for(var i=0;i<this.length;i++){if(this[i]==value){return i;}}return -1;};
	
	// $('img.photo',this).imagesLoaded(myFunction)
	$.fn.imagesLoaded = function(callback){
		
	  var elems = this.find('img'),
		  loadMax = elems.length,
		  imagesLoaded = [],
		  imagesTimeout = 0;
		  //trace('... starte Ladevorgang für '+loadMax+' Bilder ...');
		  
	 if (loadMax < 1) {
		 	//trace('... 0 Bilder wurden geladen ...');
			timeoutCall();
		}

	  elems.bind('load',function(){
			if(imagesLoaded.findIndex(this.src)==-1){
				imagesLoaded.push(this.src);
				//trace('...... Bild geladen: '+this.src);
				if(imagesLoaded.length==loadMax){
					//trace('... '+loadMax+' Bilder wurden geladen ...');
					timeoutCall();
					//callback.call(elems,this);
				}
			}
			
	  }).each(function(){
		 // cached images don't fire load sometimes, so we reset src.
		 if (this.complete || this.complete === undefined){
			var src = this.src;
			// webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
			// data uri bypasses webkit log warning (thx doug jones)
			this.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
			this.src = src;
		 }  
	  }); 
	  
	  imagesTimeout = setTimeout(timeoutCall,5000);
	  
	  function timeoutCall(){
		  clearTimeout(imagesTimeout);
		  callback.call(elems,this);
		  return this;
		}
	
	  return this;
	};

	
