var Eleven = {

	basePath : getBasePath(),
	currentPage : null,
	reactToDispatch : false,
	tweenModifier : 1.25,
	contactsLoaded : false,
	totalContactPages : Math.ceil( numContacts / 3 ),
	currentContactPage : 1,
	currentContactUl : null,
	videoBlock : null,
	minwidth : 1000,
	minheight : 800,
	dw : 0,
	dh : 0,
	
	initialize : function()
	{
		$.localScroll.defaults.axis = 'xy';
		$.localScroll.defaults.lazy = true;
		
		Eleven.initGridNavigation();
		Eleven.initBlocks();
		Eleven.initListeners();
		
		$('a#close-button').click(function(){
			Eleven.hideCaseContent();
			return false;
		});
		
		$('#arrow-left').click(function(){
			$('#grid').gridnavi('prev');
			return false;
		});
		
		$('#arrow-right').click(function(){
			$('#grid').gridnavi('next');
			return false;
		});
		
		$('.block a').live('click', function(){
			if( $(this).attr('target') == "_blank" ) return false;
			var compareUrl = $(this).attr('href');
			if( Eleven.isExternal( compareUrl ) )
			{
				window.location.href = compareUrl;
			}
			else
			{
				if( compareUrl.indexOf( Eleven.basePath ) == -1 )
				{
					if( compareUrl.charAt(0) == "/" ) compareUrl = compareUrl.substring(1);
					var locationArray = compareUrl.split('/');
					if( locationArray[0] == "fi" || locationArray[0] == "en" )
					{
						compareUrl = locationArray.slice(1).join("/");
					}
					compareUrl = Eleven.basePath + compareUrl;
				}
				
				for( var page in pages )
				{
					if( pages[page].content == compareUrl )
					{
						Eleven.reactToDispatch = true;
						$('#grid').gridnavi('selectByPage', page);
						break;
					}
				}
			}
		});
	  	
	  	$.htmlhistory.init();
		$(window).bind('htmlhistory', Eleven.respondToUrl);
	    
	    $('a.nointercept').click(function(){
	    	window.location.href = $(this).attr('href');
	    });
	   
		$('a[target="_blank"]').live('click', function() {
			window.open(this.href);
			return false;
		});
	    
	    Eleven.handleScroll();
	    Eleven.handleResize();
	    
	    var locationParsed;
	    if( location.href.indexOf( Eleven.basePath ) > -1 )
	    {
	    	locationParsed = location.href.replace( Eleven.basePath, '' );
	    }
	    else
	    {
	    	locationParsed = "";
	    }
  		var locationArray = locationParsed.split('/');
  		if( !$('html').hasClass('ie8') )
  		{
	  		if( locationArray.indexOf('fi') > -1 ) locationArray.splice( locationArray.indexOf('fi'), 1);
  			if( locationArray.indexOf('en') > -1 ) locationArray.splice( locationArray.indexOf('en'), 1);
  		}
  		if( locationArray[locationArray.length-1] == "" ) locationArray.pop();
  		if( locationArray.length > 0 )
  		{
  			Eleven.reactToDispatch = true;
  			$('#grid').gridnavi('selectByPage', locationArray[locationArray.length-1]);
  		}
  		else
  		{
  			if( defaultPage && defaultPage !== "" )
  			{
  				$('#grid').gridnavi('selectByPage', defaultPage);
  			}
  		}
  		
		$('#logo a').click(function(){
			Eleven.reactToDispatch = true;
			$('#grid').gridnavi('selectByPage', defaultPage ? defaultPage : grid[0][0].rel );
			return false;
		})
	  	
		jQuery.fx.interval = 1000/30;
	},
	
	initGridNavigation : function()
	{
		var i = 0;
		var l = grid.length;
		for( i; i<l; i++ )
		{
			var m = 0;
			var n = grid[i].length;
			var gridTargetRow = $('#grid ul:eq('+i+')');
			var contentTargetRow = $('#rowcontainer .row:eq('+i+') .rowcontent');
			var rowClass = i == 0 ? "tablet" : i == 1 ? "second_row" : "floor";
			for( m; m<n; m++ )
			{
				gridTargetRow.append( '<li><a href="'+grid[i][m].content+'" rel="'+grid[i][m].rel+'"><img src="'+grid[i][m].thumb+'" /></a></li>' );
				if( i == 0 )
				{
					contentTargetRow.append('<div id="'+grid[i][m].rel+'" class="block rowblock' + " " + rowClass + '"><div class="blockcontent"><div class="overlay"><div class="videocontainer"></div><div class="content"></div><div class="overlay-top"></div><div class="overlay-left"></div><div class="overlay-right"></div><div class="overlay-bottom"></div></div></div></div>');
				}
				else
				{
					contentTargetRow.append('<div id="'+grid[i][m].rel+'" class="block rowblock' + " " + rowClass + '"><div class="blockcontent"><div class="content"></div></div></div>');
				}
			}
		}
		$('.content').hide();
		
		$('#grid ul li a').each(function(){
	  		$(this).click(function(){
	  			Eleven.reactToDispatch = true;
	  		});
		});

		$('#grid').gridnavi();
		$('#grid').bind('itemSelected', function(evt){
			
			if( pages[evt.page] ) document.title = pages[evt.page].title;

	  		Eleven.currentPage = evt.page;
			Eleven.hideCaseContent();
			Eleven.hideCaseIntro();
			
			var targetId = evt.targetId;
			if( Eleven.reactToDispatch )
			{
				Eleven.reactToDispatch = false;
				var duration = 300;
				
				var targetRow = $('.row:eq('+(evt.row)+')').find('.rowcontent');
				
				if( targetRow.parent().offset().left == 0 )
				{
					duration += 200;
					duration += 100 * Math.abs( $(window).scrollTop() - $('.row:eq('+(evt.row)+')').position().top ) / $(window).height();
				}
				
				if( $(targetId).gridblock('getLoadStatus') == false )
				{
					$(targetId).gridblock('startLoading');
				}
				
				var dx = -targetRow.offset().left / ( targetRow.width() - Eleven.dw );
				if( !dx ) dx = 0;
				prevIndex = ( Math.round(dx * (targetRow.find('.block').length-1)) );
				nextIndex = (evt.item);
				
				if( nextIndex !== prevIndex )
				{
						
					Eleven.doParallax( nextIndex - prevIndex );
					$('html,body').stop().animate( { 'scrollTop':$(targetId).offset().top, useTranslate3d:true, leaveTransforms:true }, duration*Eleven.tweenModifier, 'easeInOutQuint' );
					targetRow.parent().stop().scrollTo( $(targetId), 1000*Eleven.tweenModifier, { easing:'easeInOutQuint', onAfter:function(){
						if( $(targetId).gridblock('getLoadStatus') == false )
						{
							$(targetId).bind( 'blockLoaded', Eleven.handleBlockLoaded );
							$(targetId).gridblock('setLoadStatus', true, pages[evt.page] ? pages[evt.page].content : '' );
						}
						else
						{
							Eleven.showBlockContent( targetId );
						}		
					} } );

				}
				else
				{
					$('html,body').stop().animate( { 'scrollTop':$(targetId).offset().top, useTranslate3d:true, leaveTransforms:true }, duration*Eleven.tweenModifier, 'easeInOutQuint', function(){
						if( $(targetId).gridblock('getLoadStatus') == false )
						{
							$(targetId).bind( 'blockLoaded', Eleven.handleBlockLoaded );
							$(targetId).gridblock('setLoadStatus', true, pages[evt.page] ? pages[evt.page].content : '' );
						}
						else
						{
							Eleven.showBlockContent( targetId );
						}
					} );
				}
			}
			else
			{
				if( $(targetId).gridblock('getLoadStatus') == false )
				{
					$(targetId).bind( 'blockLoaded', Eleven.handleBlockLoaded );
					$(targetId).gridblock('setLoadStatus', true, pages[evt.page] ? pages[evt.page].content : '' );
				}
				else
				{
					Eleven.showBlockContent( targetId );
				}
			}
		});
	},

	initBlocks : function()
	{
		$('.block').gridblock();
	},

	initListeners : function()
	{
	  	$(window).scroll(function()
	  	{
	  		Eleven.handleScroll();
	  		Eleven.moveIt();
	  	});
	  	
	  	$(window).resize(function()
	  	{
	  		Eleven.handleResize();
	  	});
	  	
	  	$(window).keydown(function(event){
	  		switch( event.keyCode )
	  		{
	  			case 37 :
	  			case 38 :
	  			case 39 :
	  			case 40 :
	  				event.preventDefault();
	  				break;
	  		}
	  	});
	  	$(window).keyup(function(event){
	  		switch( event.keyCode )
	  		{
	  			case 37 :
	  				if( $('body').is(':animated') || $('.row').is(':animated') ) return;
	  				$('#grid').gridnavi('prev');
	  				break;
	  			case 38 :
	  				if( $('body').is(':animated') || $('.row').is(':animated') ) return;
	  				$('#grid').gridnavi('prevRow');
	  				break;
	  			case 39 :
	  				if( $('body').is(':animated') || $('.row').is(':animated') ) return;
	  				$('#grid').gridnavi('next');
	  				break;
	  			case 40 :
	  				if( $('body').is(':animated') || $('.row').is(':animated') ) return;
	  				$('#grid').gridnavi('nextRow');
	  				break;
	  		}
	  		event.preventDefault();
	  	});
	},
	
	doParallax : function( offset )
	{
  		$('#windows').stop().animate( { backgroundPositionX : $('#windows').css('backgroundPosition').split(' ')[0].replace('px','') - ( offset * Eleven.dw * .3 ) }, 1000*Eleven.tweenModifier, 'easeInOutQuint' );
  		$('#basement').stop().animate( { backgroundPositionX : $('#basement').css('backgroundPosition').split(' ')[0].replace('px','') - ( offset * Eleven.dw * .3 ) }, 1000*Eleven.tweenModifier, 'easeInOutQuint' );
  		$('#floor').stop().animate( { backgroundPositionX : $('#floor').css('backgroundPosition').split(' ')[0].replace('px','') - ( offset * Eleven.dw ) }, 1000*Eleven.tweenModifier, 'easeInOutQuint' );
  		$('#ceiling').stop().animate( { backgroundPositionX : $('#ceiling').css('backgroundPosition').split(' ')[0].replace('px','') - ( offset * Eleven.dw * .7 ) }, 1000*Eleven.tweenModifier, 'easeInOutQuint' );
	},
	
	moveIt : function()
  	{
  		var dy =  $(window).scrollTop() / ( $(window).height()*2 );
  		dy2 = dy * ( $('#bg').height() - $(window).height() );
  		
  		var wdy = 180 + ( ( $('#bg').height() - ($('#windows').height() ) - 580 ) * dy );
  		
  		$('#bg').css( {'top':-dy2+'px', useTranslate3d:true, leaveTransforms:true} );
  		$('#windows').css({ 'top' : wdy, useTranslate3d:true, leaveTransforms:true });
  	},
  	
  	handleScroll : function()
  	{
		if( $('body:animated').length === 0 && $('.row:animated').length === 0 )
		{
			var dy =  $(window).scrollTop() / ( $(window).height()*3 );
			var targetRow = $('.row:eq('+(Math.round(dy*3))+')').find('.rowcontent');
			if( targetRow.length == 0 ) return;
			
			var dx = -targetRow.offset().left / ( targetRow.width() - Eleven.dw );
			if( !dx ) dx = 0;
			
			$('#grid').gridnavi('select', Math.round( dy * 3 ), Math.round(dx * (targetRow.find('.block').length-1)));
		}
  	},
  	
  	handleResize : function()
  	{
  		var minwidth = Eleven.minwidth;
  		var minheight = Eleven.minheight;
  		var dw = Eleven.dw = Math.max( minwidth, $(window).width() );
  		var dh = Eleven.dh = Math.max( minheight, $(window).height() );
  		
  		$('.block').each(function(){
  			$(this).width(dw);
  			$(this).height(dh);
  			var bc = $(this).find('.blockcontent');
  			bc.css({'marginTop':(dh*.5)-(bc.height() *.5)});
  		});
  		
  		$('.row').each(function(){
  			$(this).width( dw );
  			$(this).height(dh);
  			$(this).find('.rowcontent').width(dw*$(this).find('.rowcontent').children().length);
  			$(this).find('.rowcontent').height(dh);
  		});
  		
  	  	$('#bg').width( dw );
		$('#bg').height( Math.max( $(window).height() * 2, 1500) );
  	  	
  		var rch = $('#rowcontainer').height();
  		$('#basement').css({ 'height' : dh });
  		$('#basement').css({ 'top' : rch - $('#basement').height() });
  		$('#floor').css({ 'top' : rch - $('#floor').height() - $('#basement').height() });
  		
  		var dx = ( Eleven.dw * .5 ) - 424;
  		var dy = $(window).scrollTop() + ( ( $(window).height() * .5 ) - 290 );
  		$('#case').css( { top:dy, left:dx } );
  		
		$('.rowcontent').each(function(){
			if( $(this).parent().is(':animated') ) return;
			
			var dx2 = -$(this).offset().left / ( $(this).width() - Eleven.dw );
			if( !dx2 ) dx2 = 0;
			var scrollTarget = $(this).find( '.block:eq(' + Math.round(dx2 * ($(this).find('.block').length-1) ) + ')' );
			$(this).parent().scrollTo( scrollTarget, 1 );
		});
  		
  		Eleven.moveIt();
  	},
  	
  	handleBlockLoaded : function( event )
  	{
  		$( event.target ).unbind( 'blockLoaded', Eleven.handleBlockLoaded );

  		if( Eleven.currentPage == $(event.target).attr('id') ) Eleven.showBlockContent( event.target );
  		$(event.target).find('.content').fadeIn();
  	},
  	
  	showBlockContent : function( block )
  	{
  		//$( block ).unbind( 'blockLoaded', Eleven.handleBlockLoaded );
  		switch( Eleven.currentPage )
  		{
  			case "about" :
  				Eleven.showBlockContentAbout(block);
  				break;
  			case "contact" :
  				Eleven.showBlockContentContact(block);
  				break;
  			case "news" :
  				Eleven.showBlockContentNews(block);
  				break;
  			default :
  				Eleven.showBlockContentCase(block);
  				break;
  		}
  	},
  	
  	showBlockContentCase : function( block )
  	{
  		Eleven.hideCaseVideo();
  		Eleven.closeNews();
  		
  		$(block).find('.case_screenshot').insertBefore($(block).find('.visuallyhidden'));
  		$(block).find('.case_productshot').insertBefore($(block).find('.visuallyhidden'));
  		$(block).find('.case_x-productshot').insertBefore($(block).find('.visuallyhidden'));
  		$(block).find('.view-video').click(function(){
  			Eleven.showCaseVideo( $(block) );
  			$(this).hide();
  			return false;
  		});
		$('div#case-intro').html($(block).find('div.intro').clone().html() );
		$('#case div.case').html($(block).find('div.case').clone().html() )
		
		var readmore = $('div#case-intro a.intro_read-more');
		readmore.click(function(){
			Eleven.showCaseContent();
			return false;
		});
		Eleven.showCaseIntro();
  	},

  	showBlockContentAbout : function( block )
  	{
 		Eleven.hideCaseVideo();
  		Eleven.closeNews();
  	},
  	
  	showBlockContentContact : function( block )
  	{
  		var dm = ( 54 - $('.map-below-container a').actual('height') ) * .5;
  		$('.map-below-container a').css({ 'marginTop' : dm + "px" });
  		if( $('.map-below-container a').length > 0 )
  		{
	  		$('.map-below-container').css({ 'cursor' : 'pointer' });
	  		$('.map-below-container, .map-below-container a').click(function(event){ location.href = $('.map-below-container a').attr('href'); });
	  	}
  		Eleven.hideCaseVideo();
  		Eleven.closeNews();
  		Eleven.refreshContacts();
  	},
  	
  	showBlockContentNews : function( block )
  	{
  		Eleven.hideCaseVideo();
  		$('a.news-title').live('click', function(){
  			var link = $(this);
  			$.ajax(
  			{
  				url: Eleven.basePath+"news/"+$(this).attr('rel'),
  				async: false,
  				success: function(data){
//  					link.parents('div.newsitem').html( data );
  					link.parents('div.newsitem div.article').after( data );
  					link.parents('div.newsitem div.article.intro').hide();
  					Eleven.openNews();
  				}
  			});
  			return false;
  		});
  		$('a.news-close').live('click', function(){
  			var link = $(this);
  			console.log( 			link.parents('div.newsitem').find('div.article.intro') );
			link.parents('div.newsitem').find('div.article.intro').show();
			link.parents('div.newsitem').find('div.photo_container').remove();
			link.parents('div.newsitem div.article').not('.intro').remove();
			Eleven.openNews();
  			return false;
  		});
  		Eleven.openNews();
  	},
  	
  	openNews : function()
  	{
  		var containerHeight = $('#newscontainer').actual( 'height' );

  		var dh = Math.ceil( ( containerHeight + 200 - 583 ) / 278 ) * 278;
  		$('.paper-middle').height(dh);
  		var dh2 = dh + 100 + 100 + 583;
  		$('.row:eq(3)').height(dh2);
  		$('#news').height(dh2);
  		$('#papercontainer').height(dh2);
  	},
  	
  	closeNews : function()
  	{
  		Eleven.handleResize();
  	},
  	
  	refreshContacts : function()
  	{
  		if( Eleven.contactsLoaded ) return;
  		
  		if( Eleven.totalContactPages > 1 )
  		{
  			var prevLink = $('<li><a id="contact-nav-prev"></a></li>');
  			prevLink.click(function(){
  				if( Eleven.currentContactPage > 1 )
  				{
  					Eleven.currentContactPage--;
  					Eleven.showContactsPage();
  				}
  				return false;
  			});
  			
  			var nextLink = $('<li><a id="contact-nav-next"></a></li>');
  			nextLink.click(function(){
  				if( Eleven.currentContactPage < Eleven.totalContactPages )
  				{
  					Eleven.currentContactPage++;
  					Eleven.showContactsPage();
  				}
  				return false;
  			});
  			
  			$('#contact-nav').append(prevLink);
  		}
  		
  		var i = 0;
  		var l = Eleven.totalContactPages;
  		for( i; i<l; i++ )
  		{
  			var p = i+1;
  			$.ajax(
  			{
  				url: Eleven.basePath+"contact/contacts/"+(i*3),
  				async: false,
  				success: function(data){
  					var ul = $(data);
  					ul.addClass("contactPage_"+p);
  					$('#contact-people-container').append( ul );
  				}
  			});
  			if( l > 1 )
  			{
  	  			var pageLink = $('<li><a class="contact-nav-pagelink" rel="contactPage_'+p+'">'+p+'</a></li>');
  	  			if( i==0 ) pageLink.find('a').addClass('active');
  	  			pageLink.click(function(){
  					Eleven.currentContactPage = $(this).find('a').html();
  					Eleven.showContactsPage();
  	  				return false;
  				});
  	  			$('#contact-nav').append(pageLink);
  			}
  		}
  		if( nextLink ) $('#contact-nav').append(nextLink);
  		
  		Eleven.contactsLoaded = true;
  	},
  	
  	showContactsPage : function()
  	{
  		$('a.contact-nav-pagelink.active').removeClass('active');
  		if( !Eleven.currentContactUl ) Eleven.currentContactUl = $('ul.contactPage_1');
  		Eleven.currentContactUl.stop().fadeOut();
  		Eleven.currentContactUl = $('ul.contactPage_'+Eleven.currentContactPage);
  		$('a.contact-nav-pagelink[rel="contactPage_'+Eleven.currentContactPage+'"]').addClass('active');
  		Eleven.currentContactUl.stop().fadeIn();
  	},
  	
  	hideCaseIntro : function()
  	{
		$('div#case-intro').stop().hide();
  	},
  	
  	showCaseIntro : function()
  	{
  		$('div#case-intro').fadeIn(100);
  	},
  	
  	hideCaseContent: function()
  	{
  	  	if( $('html').hasClass('ie8') )
  		{
	  		$('#case').hide();
  		}
  		else
  		{
	  		$('#case').css({transform:'scaleX(0) scaleY(0)'});
	  	}
  	},
  	
  	showCaseContent: function()
  	{
  		var dx = ( Eleven.dw * .5 ) - 424;
  		var dy = $(window).scrollTop() + ( ( $(window).height() * .5 ) - 290 );
  		$('#case').css( { top:dy, left:dx } );
  		if( $('html').hasClass('ie8') )
  		{
	  		$('#case').show();
  		}
  		else
  		{
	  		$('#case').animate({transform:'scaleX(1) scaleY(1)'}, 300, 'easeOutQuint');
	  	}
  	},
  	
  	showCaseVideo : function( block )
  	{
  		var videoId = $(block).find('.vidid').html();
  		var vidFrame = '<iframe width="640" height="480" src="http://www.youtube.com/embed/'+videoId+'?rel=0&amp;wmode=Opaque" frameborder="0" allowfullscreen></iframe>';
  		$(block).find('.videocontainer').html( vidFrame );
  		Eleven.videoBlock = block;
  		$(block).find('.videocontainer').show();
  	},
  	
  	hideCaseVideo : function()
  	{
  		if( Eleven.videoBlock )
  		{
  			var frame = Eleven.videoBlock.find( 'iframe' );
  			frame.parent().hide();
  			frame.remove();
  			Eleven.videoBlock.find('.view-video').show();
  			Eleven.videoBlock = null;
  		}
  	},
  	
  	scrollComplete : function()
  	{
  	},
  	
  	respondToUrl : function()
  	{
  	},
  	
  	isExternal : function (url)
  	{
    	var match = url.match(/^([^:\/?#]+:)?(?:\/\/([^\/?#]*))?([^?#]+)?(\?[^#]*)?(#.*)?/);
	    if (typeof match[1] === "string" && match[1].length > 0 && match[1].toLowerCase() !== location.protocol) return true;
	    if (typeof match[2] === "string" && match[2].length > 0 && match[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"), "") !== location.host) return true;
   		return false;
	}
  	
};

$(function(){
	Eleven.initialize();
});
