/* Author: Peteris Bikis, Asketic

*/
var frameCount = 0;
var BFS = {
	
	dom: {
		body: false,
		scrollable: false,
		menu: false,
		map: false,
		project: false,
		media: false,
		bg: false
	},
	
	settings: {
		hasNext: true,
		hasPrevious: true,
		
		isProjectOpen: false,
		currentProject: ''
	},
	
	init: function() {
		
		BFS.dom.body = $('body');
		BFS.dom.scrollable = $('html,body');
		BFS.dom.menu = $('#menu-main, h1#logo');
		BFS.dom.projects = $('#filmstrip ul');
		
		if( BFS.isSafari() )
			$('html').addClass('safari');
			
		if( BFS.isiPhone() )
			$('html').addClass('iphone');
			
		// Add last-child class for IE7
		$('#main section .content > p:last-child, header.header ul#menu-main li:last-child, #main section:last-child').addClass('last-child');
		
		// Add horizontal sliders
		BFS.initSlider( '.bfs-slider' );
		
		// Replace email links
		$('a.email').each(function(){
			e = this.rel.replace('/','@');
			this.href = 'mailto:' + e;
			$(this).text(e);
		});
		
		// Bind resize, click events
		BFS.bindEvents();
		
		// Init forms
		BFS.initForms();
		
		// Init background
		if( 'undefined' !== typeof bfsBackgroundSlides )
			BFS.initBackground( bfsBackgroundSlides );
			
		// Add fancybox
		$('a.fancybox').fancybox({
			padding: 0,
			changeSpeed: 250,
			overlayColor: '#000',
			cyclic: true,
			autoDimensions: false,
			transitionIn: 'elastic'
		});
			
		BFS.initWork();
		
		// Handle hash
		BFS.onHashChange();
	},              
	
	initWork: function() {
		
		if( BFS.dom.body.hasClass('single-project') )
		{
			BFS.dom.media = $('.media'); // #work-detail .media
				
			BFS.dom.media.cycle({
				nowrap: true,
				fx: 'scrollHorz',
				timeout: 0,
				speed: 400,
				easing: 'easeOutCubic',
				// next: '#arrow-next',
				// prev: '#arrow-prev',
				pager: '.work-detail .nav', // #work-detail .nav
				after: function( currSlideElement, nextSlideElement, options ) {
					$(this).parent().data('current', options.currSlide );
				}
			}).data('slides', BFS.dom.media.children().length )
			.data('current', 0);
		}
	},

	gotoPrevProject: function() {
		
		if( BFS.dom.projects.find('li.active').prev().length > 0 )
			BFS.dom.projects.find('li.active').prev().find('a').trigger('click');
		else
			BFS.dom.projects.find('li:last').find('a').trigger('click');
	},
	
	gotoNextProject: function() {

		if( BFS.dom.projects.find('li.active').next().length > 0 )
			BFS.dom.projects.find('li.active').next().find('a').trigger('click');
		else
			BFS.dom.projects.find('li:first').find('a').trigger('click');

	},
	
	initBackground: function( slides ) {

		$.supersized({
		
			//Functionality
			slideshow               :   1,		//Slideshow on/off
			autoplay				:	1,		//Slideshow starts playing automatically
			start_slide             :   1,		//Start slide (0 is random)
			random					: 	0,		//Randomize slide order (Ignores start slide)
			slide_interval          :   3000,	//Length between transitions
			transition              :   1, 		//0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left
			transition_speed		:	500,	//Speed of transition
			new_window				:	1,		//Image links open in new window/tab
			pause_hover             :   0,		//Pause slideshow on hover
			keyboard_nav            :   0,		//Keyboard navigation on/off
			performance				:	1,		//0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)
			image_protect			:	1,		//Disables image dragging and right click with Javascript
			image_path				:	'img/', //Default image path

			//Size & Position
			min_width		        :   1140,		//Min width allowed (in pixels)
			min_height		        :   0,		//Min height allowed (in pixels)
			vertical_center         :   0,		//Vertically center background
			horizontal_center       :   1,		//Horizontally center background
			fit_portrait         	:   0,		//Portrait images will not exceed browser height
			fit_landscape			:   1,		//Landscape images will not exceed browser width
			
			//Components
			navigation              :   0,		//Slideshow controls on/off
			thumbnail_navigation    :   0,		//Thumbnail navigation
			slide_counter           :   0,		//Display slide numbers
			slide_captions          :   0,		//Slide caption (Pull from "title" in slides array)
			slides 					:  	slides
			
		}); 
		
		BFS.dom.bg = $('#supersized');
	},
	
	initSlider: function( selector ) {
		
		$( selector ).each( function() {

			var container = $( this )
				.append( $('<div class="slider"><div class="handle"></div></div>'))
				.data('target', $( this ).find('ul') );

			var itemsWidth = container.data('target').innerWidth() - container.outerWidth();
			var api = container.find('.slider').slider({

				min: 0,
				max: itemsWidth,

				slide: function(event, ui) {
					$(this).parent().data('target').css('left', ui.value * -1);
				}
			});

			container.bind('mousewheel.location', function (e, delta, deltaX, deltaY) {
				
				// Increase delta on Chrome and Firefox
				if( jQuery.browser.mozilla )
					deltaX *= 40;
				
				if( BFS.isChrome() )
					deltaX *= 80;
				
				var val = container.find('.slider').slider('value');
				val += deltaX;// * .4;
				
				val = Math.max( 0, val );
				val = Math.min( itemsWidth, val );

				container.find('.slider').slider('value', val );
				container.data('target').css('left', val * -1);
			});
			
		})
	},
	
	bindEvents: function() {
		
		if( !BFS.isiOS() )
		{
			$(window).bind('scroll.parallax', BFS.onScroll );

			// Section hover
			$('#main section').hover(function() {
				$(this).prev('section:not(.nohighlight)').addClass('nobackground');
			}, function() {
				$(this).prev('section:not(.nohighlight)').removeClass('nobackground');
			});
		}

		// Add Toggle links
		BFS.dom.body.find('section .content.header').each( function() {
			
			var toggle = $('<a href="#" class="toggle">Hide</a>').bind('click', BFS.onToggleSection );
			$(this).append( toggle )
				.find('h2').wrapInner('<a href="#" />').bind('click', BFS.onToggleSection );
				
			// $(this).next().find('p').first().appendTo( $(this) );
			
			BFS.onToggleSection( $(this), '0' );
			
		});
		
		// Add footer links
		BFS.dom.body.find('footer a.map')
			.bind('click', BFS.onToggleMap );
 			// .hover( BFS.onHoverFooter );
			
		// Add hover to map LI's
		BFS.dom.body.find('footer li.office').hover( BFS.onHoverFooter );
		
		// Map close buttons
		$('#map-container a.close').live('click', BFS.hideMap );
		
		// Work ajax
		$('#filmstrip li a').live('click', BFS.showProject );
		
		// Work images
		$('#filmstrip').preloadImages();
		
		$('.arrow-next, .work-detail .media .photo img').live('click', function(e) {
			
			e.preventDefault();

			if( BFS.dom.media.data('current') >= BFS.dom.media.data('slides') - 1 )
			{   
				BFS.gotoNextProject();
			} else {
				
				// BFS.dom.project.find('#arrow-next').show();
				
				players = $('iframe');
				players.each( function() {
					var player = $f( $(this)[0] );
					player.api('pause');
				});
				
				BFS.dom.media.data('current', BFS.dom.media.data('current') + 1 );
				BFS.dom.media.cycle( BFS.dom.media.data('current') );
				
				// See if arrows need to be hidden
				if( BFS.dom.media.data('current') == BFS.dom.media.data('slides') - 1 )
				{
					// if( !BFS.settings.hasNext )
					// 	BFS.dom.project.find('#arrow-next').hide();
				}
			}
		});

		$('.arrow-prev').live('click', function(e) {
			
			e.preventDefault();

			if( BFS.dom.media.data('current') <= 0 )
			{
				BFS.gotoPrevProject();
			} else {
				BFS.dom.media.data('current', BFS.dom.media.data('current') - 1 );
				BFS.dom.media.cycle( BFS.dom.media.data('current') );
			}
		});
		
		$('.title a.back').live('click', BFS.hideProject );
		$('.work-detail a.close').live('click', BFS.hideProject ); // #work-detail a.close
		
		// Location images
		// $('.bfs-slider img')
		
		// Observe hash changes
		jQuery(window).hashchange( BFS.onHashChange );
		
	},
	
	initForms: function() {
		$('#client-area form input').live('focusin', function() {
			$(this).parent().find('label').hide();
		});
		
		$('#client-area form input').live('focusout', function() {
			if( $(this).val() == '' ) $(this).parent().find('label').show();
		});
		
		$('#client-area form label').live('click', function() {
			$(this).hide().parent().find('input').focus();
		});
		
		// Clear values
		$('#client-area form input[type=text]').val('');
	},
	
	onHashChange: function() {
		var hash = window.location.hash.replace('#/', '');

		if( hash == '' ) {
			if( BFS.settings.isProjectOpen )
				BFS.hideProject();
		} else {
			
			$( 'a.project[rel=' + hash + ']' ).click();
		}
	},
	
	onResizeMap: function() 
	{
		if( $(document).height() <= 670 )
		{

			$('#container').height( 670 );
			
		} else {
			
			$('#container').css('height', '');
			
		}
	},
	
	onScroll: function() {
		
		var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
		var offsetMenu = Math.round( scrollTop * .7 );
		
		
		if( BFS.isSafari() ) {

			if( offsetMenu < 300 ) {

				var offsetBg = - scrollTop * .15;

				BFS.dom.body.css('background-position', '50% ' + offsetBg + 'px');

				if( BFS.dom.bg )
					BFS.dom.bg.css({marginTop: offsetBg});

				BFS.dom.menu.css({marginTop: offsetMenu, display: 'block'});

			} else {
				BFS.dom.menu.css({display: 'none'});
			}
			
		} else {
			if( scrollTop < 275 ) {
		
				var offsetBg = - scrollTop * .15;

				BFS.dom.body.css('background-position', '50% ' + offsetBg + 'px');

				if( BFS.dom.bg )
					BFS.dom.bg.css({marginTop: offsetBg});
			
				// BFS.isChrome() ? BFS.dom.menu.animate({marginTop: offsetMenu }, 5, 'linear' ) : BFS.dom.menu.css('margin-top', offsetMenu );
				if( !BFS.isiOS() )
					BFS.dom.menu.addClass('fixed')

			} else {

				if( !BFS.isiOS() )
					BFS.dom.menu.removeClass('fixed');
			}
		}
	},
	
	isSafari: function() {
		var browser = navigator.userAgent.toLowerCase();
		return (browser.indexOf('safari') > -1 && browser.indexOf('chrome') == -1 && browser.indexOf('mobile') == -1 )
	},
	
	isChrome: function() {
		return navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	},
	
	isiPhone: function() {
		return navigator.userAgent.toLowerCase().indexOf('iphone') > -1;
	},
	
	onToggleSection: function(e, speed) {
		
		var t;
		if( !speed )
		{
			e.preventDefault();
			speed = 'slow';
			t = $(this).parent();
		}
		else
		{
			speed = 0;
			t = e;
		}

		var btn = t.find('a.toggle');
		var state = btn.text() == 'Hide';

		btn.text( state ? 'Show' : 'Hide' );
		state ? btn.addClass('collapsed') : btn.removeClass('collapsed');
		
		var target = btn.parent().next().not('header');
		
		if( !target.is(':visible') )
		{

			$('html, body').animate({
			    scrollTop: target.parent().offset().top
			}, 1000, 'easeOutCubic');
		}
		
		target.is(':visible') ? target.fadeOut( speed ) : target.fadeIn( speed );
	},
	
	onHoverFooter: function(e) {
		
		var li = $(this)[0].nodeName == 'A' ? $(this).parent().parent().parent() : $(this);
		if( !li.hasClass('open') ) 
			li.toggleClass('active');
	},
	
	onToggleMap: function(e) {
		
		e.preventDefault();
		
		var btn = $(this);
		var parent = btn.parent().parent().parent();
		var state = btn.text() == 'View Map';
		
		state ? BFS.showMap( parent, btn.attr('href') ) : BFS.hideMap();
	},
	
	showMap: function( target, href ) {
		
		// Hide any other visible maps
		BFS.hideMap();
		
		// Change button text
		target.find('a.map').text('Hide Map');
		
		// Add active class to element
		target.addClass('active').addClass('open');
		
		$.get( href, { ajax: true }, function( data ) {

			if( !BFS.dom.map )
				BFS.dom.map = $('<div />').attr('id', 'map-container').appendTo('#main');
			
			BFS.dom.map.stop( true, true ).hide().html( data ).fadeIn( 300 );
			
			if( !BFS.isiOS() ) {

				if( $(document).height() < 700 )
				{
					// Bind resize listener on IE
					if( $('html').hasClass('ie7') || $('html').hasClass('ie8') )
					{
						$(window).bind('resize.map', BFS.onResizeMap );
						BFS.onResizeMap();
					}

					BFS.dom.body.addClass('map');
				}
				
			} else {

				if( $('body').hasClass('home') )
				{
					BFS.dom.body.addClass('map');
				}

			}
		} );
		
	},
	
	hideMap: function( e ) {
		
		if( e )
			e.preventDefault();
			
		// Clear active state
		BFS.dom.body.find('footer li.active').removeClass('active').removeClass('open').find('a.map').text('View Map');
		
		if( BFS.dom.map ) {
			BFS.dom.map.fadeOut( 500, function() {
				BFS.dom.map.empty();
				
				BFS.dom.body.removeClass('map').find('#container').css('height', '');
				
				// Remove onResize listener on IE
				$(window).unbind('resize.map', BFS.onResizeMap );
			});
		}
		
	},

	showProject: function( e ) {

		
		if( e )
			e.preventDefault();

		project = $(this);

		// Prevent double-click
		if( BFS.settings.currentProject == project.attr('rel') )
			return;
			
		// Register current project
		BFS.settings.currentProject = project.attr('rel');
			
		window.location.hash = '/' + project.attr('rel');
		
		BFS.settings.isProjectOpen = true;

		project.parent().parent().find('.active').removeClass('active');
		project.parent().addClass('active');
		
		// Show Next / Prev arrows as needed
		BFS.settings.hasNext = ( $('#filmstrip ul li.active').next().length > 0 );
		BFS.settings.hasPrevious = ( $('#filmstrip ul li.active').prev().length > 0 );
			
		$('#main').css('min-height', $('#main').height() );
		$('#title, #work').fadeOut();
		
		BFS.dom.body.addClass('single-project');
		BFS.dom.scrollable.animate({ scrollTop: $('#main').offset().top + 40 } );;

		$.get( project.attr('href'), { ajax: true }, function( data ) {
			
			if( !BFS.dom.project )
				BFS.dom.project = $('<section />').attr('id', 'project-container').addClass('nohighlight').appendTo('#main');
			
			BFS.dom.project.stop( true, true ).hide().html( data ).delay( 500 ).preloadImages().fadeIn( 300 );
			
			// if( !BFS.settings.hasNext )
			// 	BFS.dom.project.find('#arrow-next').hide();

			// if( !BFS.settings.hasPrevious )
			// 	BFS.dom.project.find('#arrow-prev').hide();
			
			BFS.initWork();

		} );
		
	},
	
	hideProject: function( e ) {
		
		if( typeof(e) == 'object' )
			e.preventDefault();
			
		BFS.settings.isProjectOpen = false;
		BFS.settings.currentProject = '';
			
		if( BFS.dom.project ) {
			
			window.location.hash = '/';
			BFS.dom.project.fadeOut( 500, function() {
				BFS.dom.project.empty();
				$('#main').animate({ minHeight: 0 } );
				$('#title, #work').fadeIn();
			});
		}
		
	},
	
	// Utility method: detect IOS
	isiOS: function() {
		var deviceAgent = navigator.userAgent.toLowerCase();
		var agentID = deviceAgent.match(/(iphone|ipod|ipad)/);

		return agentID;
	}
}

$(document).ready( BFS.init );
