/**
 * Orion
 */

// forcing html5 videos for easy use in slideshows
Cargo.Core.Video.ForceHTML5 = true;

var Design = {

	// options for navigating between projects
	project_slide_options: {},

	// options for navigating inside projects
	slide_options: {},

	status: {
		autoplay_active: false,
		project_in_transition: false,
		project_slideshow_needs_cleanup: false,
		slide_in_transition: false,
		waiting_on_transition: false,
		waiting_on_transition_index: false,
		columnizer_inited: false,
		document_ready: false,
		slide_motion_direction: 'from_index', // next, prev
		yt_loaded: false,
		init_start: false,
		init_complete: false,
		attempted_project_load: false,
		slick_inited: false,
		project_slick_inited: false,
		inspector_open: false,
		swipe_active: false,
		project_nav_dismissed: false,
		force_temp_project_nav: false,
		force_temp_swipe: false,
		mobile_active: false,
		mobile_menu_active: false,
		variables_loaded: false,
		mouse_over_window: true,
		mouse_fadeout_canceled: false,
		project_nav_animation_run: false
	},

	data: {

		current_project: {
			pid: null,
			has_multiple_slides: false,
			has_slides: false,
			has_text: false,
			slides: 0,
			project_text: null,
			last_slide_index: -1,
		},

		mouse_position: {
			last_x: -1,
			last_y: -1,
			x: -1,
			y: -1,
			max_x: -1,
			min_x: -1
		},

		preloaded_urls: [],
		header_breakpoint: 0,
		header_width: 0,
		$inner_slideshow: null,
		mobile_breakpoint: 600,
		navigation_width: 600,
		use_mobile_design: true,
		use_mobile_menu: true,
		click_event: 'click',
		preload_queue: [],
	},

	youtube_vid: false,

	init: function(){
		// prevent double-running of init function
		if ( Design.status.init_start ){
			return
		}

		Design.status.init_start = true;

		$('body').css('visibility', 'hidden');

		if ( Cargo.Helper.IsSololink() ){
			$('body').addClass('solo_link')
		}

		Cargo.Helper.ScrollToTop = function(){
			// overwrite function
		}

		Design.$project_media = $('#project_media');
		Design.loadVariables();
		Design.bindCallbacks();
		Design.updateMetaNav();
		Design.keybindings();

		Design.data.use_mobile_design = window.use_mobile_design !== undefined ? window.use_mobile_design : Cargo.Model.DisplayOptions.get('use_mobile_mode');
		Design.data.use_mobile_menu = window.use_mobile_menu !== undefined ? window.use_mobile_menu : Cargo.Model.DisplayOptions.get('use_mobile_menu');

		Design.updateMenuOptions();
		Design.calcMobileBreakpoint();
		Design.calcNavigationWidth();
		Design.testMobileBreakpoint();
		Design.testSwipeMode();
		Design.bindProjectMedia();
		Design.bindPageOverlay();

		Design.formatNavigation();
		$('body').css('visibility', '');

		if ( !Cargo.Helper.IsSearch() ) {

			Design.formatThumbnails();
			Design.loadLazyThumbnails();

		}

		if ( !Cargo.Helper.GetCurrentPageType() ){
			$('#thumbnails').removeClass('inactive')
		}

		Design.status.init_complete = true;

		Cargo.Event.trigger('orion_init_complete');

		if ( Design.status.attempted_project_load ){
			Cargo.Event.trigger('project_load_complete', Cargo.Helper.GetCurrentProjectId() );
		}
	},

	bindMobileMenu: function(){

		$('.navigation_toggle').bind('click.mobile dblclick.mobile', function(event){
			if ( event.type == Design.data.click_event ){
				Design.toggleNav();
			}
		});

		$(window).bind('scroll.mobile', function(){

			Design.toggleNav(true);

		});

		// hack to make click behavior work on IOS
		if ( Cargo.Helper.isIOS() ){
			$('body').css('cursor', 'pointer')
		}

	},

	unbindMobileMenu: function(){

		$('.navigation_toggle').unbind('click.mobile dblclick.mobile');
		$('body').unbind('click.mobile');
		$('body').unbind('scroll.mobile');

	},

	toggleNav: function(closeNav){

		if ( $('.navigation_toggle').is('.active') || closeNav ){

			$('.navigation, .navigation_toggle').removeClass('active');
			$('body').removeClass('mobile_menu_active')
			$('body').unbind('click.mobile');

		} else {

			$('.navigation, .navigation_toggle').addClass('active');
			$('body').addClass('mobile_menu_active')

			$('body').bind('click.mobile', function(event){

				var touch_target = $(event.target);

				if ( !touch_target.is('.navigation, .navigation *, .mobile_site_header, .mobile_site_header *') ) {

					Design.toggleNav(true);

				}

			});

		}

	},

	initSlick: function(){

		Design.$project_media.slick(Design.project_slide_options)
		Design.$project_media.slick('slickAdd', '<div class="outer"></div>');
		Design.status.slick_inited = true;
		Design.$project_media.on('beforeChange', function(event, slick, direction){

			Design.status.project_in_transition = true;
			Design.startProjectInterstitial();

			event.stopImmediatePropagation();
			event.stopPropagation();
			event.preventDefault();

		});

		Design.$project_media.on('afterChange', function(event){

			Cargo.Event.trigger('orion_project_transition')
			Design.status.project_in_transition = false;
			Design.cleanUpSlides();
			$('#project_nav').removeClass('animation');

			if ( !Design.status.project_nav_animation_run && Design.status.swipe_active && Design.data.current_project.has_slides ){

				$('#project_nav').addClass('animation');
				Design.status.project_nav_animation_run = true;

			}

			event.stopImmediatePropagation();
			event.stopPropagation();
			event.preventDefault();

		})

	},

	startProjectInterstitial: function(){

		window.clearTimeout(Design.projectInterstitialTimeoutID);

		if ( Design.status.slide_motion_direction != "from_index"){

			$('body').addClass('between_projects');

			Design.projectInterstitialTimeoutID = window.setTimeout(function(){

				Design.endProjectInterstitial();

			}, 400)

		}

	},

	endProjectInterstitial: function(){

		$('body').removeClass('between_projects');

	},

	calcTransitionDuration: function($element){

		if (!$element){

			return 0

		}

		var duration_string = window.getComputedStyle($element[0]).transitionDuration || "0s"
		var duration_ms = 0;

		if (duration_string.indexOf('ms') > -1 ){

			duration_ms = parseFloat(duration_string);

		} else if ( duration_string.indexOf('s') > -1) {

			duration_ms = parseFloat(duration_string) * 1000;

		} else {

			duration_ms = parseFloat(duration_string);

		}

		return duration_ms
	},

	listenToPageContentTransition: function(){

		var self = this;

		if ( $('#page').length == 0){

			return

		}

		var page_transition = Design.calcTransitionDuration($('#page'));

		// if no transition, we immediately proceed to hiding the thumbnails
		if ( page_transition == 0 ){

			Design.pageContentTransitionEnd();

		} else {

			$('#page')[0].removeEventListener('transitionend', this.pageTransitionCallback);
			$('#page')[0].addEventListener('transitionend',this.pageTransitionCallback);

		}

		Design.pageTransitionTimeout = window.setTimeout(Design.pageTransitionCallback, page_transition + 120)

	},

	pageContentTransitionEnd: function(event){

		var self = this;

		if (  event && !$(event.target).is('#page') ){

			return;

		}

		window.clearTimeout(Design.pageTransitionTimeout);

		var page_hidden = $('#page').css('opacity') == 0 || $('#page').css('visibility') == 'hidden' || $('#page').css('display') == 'none';

		if ( page_hidden ) {

			$('#page').hide().addClass("inactive")

		}

		$('#page')[0].removeEventListener('transitionend', this.pageTransitionCallback);

	},

	listenToProjectContentTransition: function(){

		var self = this;

		if ( $('#project').length == 0){

			return

		}

		var project_content_transition = Design.calcTransitionDuration($('#project'));

		// if no transition, we immediately proceed to hiding the thumbnails
		if ( project_content_transition == 0 ){

			Design.projectContentTransitionEnd();

		} else {

			$('#project')[0].removeEventListener('transitionend', this.projectContentTransitionCallback);
			$('#project')[0].addEventListener('transitionend',this.projectContentTransitionCallback);

		}

		Design.projectContentTransitionTimeout = window.setTimeout(Design.projectContentTransitionEnd, project_content_transition + 120)

	},

	projectContentTransitionEnd: function(event){

		var self = this;

		if (  event && !$(event.target).is('#project') ){

			return;

		}

		window.clearTimeout(Design.projectContentTransitionTimeout);

		var project_hidden = $('#project').css('opacity') == 0 || $('#project').css('visibility') == 'hidden' || $('#project').css('display') == 'none';

		if ( project_hidden ) {

			$('#project').hide().addClass("inactive")

		}

		if ( Design.status.waiting_on_transition ){

			Design.status.waiting_on_transition = false;

			Cargo.Event.ProjectTransition.resolve();

		} else if ( Design.status.waiting_on_transition_index ){
			Design.status.waiting_on_transition_index = false;
			Cargo.Event.IndexTransition.resolve();
		}

		$('#project')[0].removeEventListener('transitionend', this.projectContentTransitionCallback);


	},


	listenToThumbIndexTransition: function(){

		if ( $('#thumbnails').length < 1){
			return
		}

		var thumb_index_transition_transition = Design.calcTransitionDuration($('#thumbnails'));

		$('#thumbnails')[0].addEventListener('transitionend', this.thumbTransitionCallback);

		Design.thumbIndexTransitionTimeout = window.setTimeout(Design.thumbIndexTransitionEnd, thumb_index_transition_transition + 120)

	},

	thumbIndexTransitionEnd: function(event){
		var self = this;

		if (  event && !$(event.target).is('#thumbnails') ){
			return;
		}

		window.clearTimeout(Design.thumbIndexTransitionTimeout);

		var thumbs_hidden = $('#thumbnails').css('opacity') == 0 || $('#thumbnails').css('visibility') == 'hidden' || $('#thumbnails').css('display') == 'none';

		if ( thumbs_hidden && $('#thumbnails').is('.inactive')  ) {

			$('#thumbnails').hide();

		}

		$('#thumbnails')[0].removeEventListener('transitionend', this.thumbTransitionCallback);

	},

	bindCallbacks: function(){
		this.projectContentTransitionCallback = this.projectContentTransitionEnd.bind(this)
		this.pageTransitionCallback = this.pageContentTransitionEnd.bind(this)
		this.thumbTransitionCallback = this.thumbIndexTransitionEnd.bind(this)
		this.projectMediaTransitionCallback = this.projectMediaTransitionEnd.bind(this)
	},

	listenToProjectMediaTransition: function(){

		var project_media_transition = Design.calcTransitionDuration(Design.$project_media);

		// if no transition, we immediately proceed to hiding the thumbnails
		if ( project_media_transition == 0 ){

			Design.projectMediaTransitionEnd();

		} else {
			Design.$project_media[0].addEventListener('transitionend', this.projectMediaTransitionCallback);

		}

		Design.projectMediaTransitionTimeout = window.setTimeout(Design.projectMediaTransitionEnd, project_media_transition + 120)

	},

	projectMediaTransitionEnd: function(event){

		var self = this;

		window.clearTimeout(Design.projectMediaTransitionTimeout)


		if (  event && !$(event.target).is('#project_media') ){
			return;
		}

		var media_hidden = Design.$project_media.css('opacity') == 0 || Design.$project_media.css('visibility') == 'hidden' || Design.$project_media.css('display') == 'none';

		if ( media_hidden ) {

			Design.$project_media.hide();
			Design.tearDownSlick();

		}

		Design.$project_media[0].removeEventListener('transitionend', this.projectMediaTransitionCallback);

	},


	tearDownSlick: function(){
		// teardown process

		if ( Design.status.slick_inited){

			Design.tearDownMediaPlayers(Design.data.current_project.last_slide_index)
			Design.unbindMediaAndCaption();
			Design.$project_media.slick('unslick');
			Design.$project_media.empty();
			Design.status.project_slick_inited = false;
			Design.status.slick_inited = false;

		}

		Design.data.current_project.last_slide_index = -1;
		Design.status.slide_motion_direction = "from_index";

	},

	setOptions: function(){

		// options for navigating between projects
		Design.project_slide_options = window.project_slide_options ? window.project_slide_options : {
		    cssEase: 'ease-in-out',
		    useCSS: true,
		    fade: (Cargo.Model.DisplayOptions.get('slide_transition') == 'fade' || Cargo.Model.DisplayOptions.get('slide_transition') == 'none'),
			infinite: false, // always set to false, infinite behavior handled elsewhere
			speed: (Cargo.Model.DisplayOptions.get('slide_transition') == 'none') ? 0 : Cargo.Model.DisplayOptions.get('slide_transition_duration') * 1000,
			autoplay: false, // always set to false, autoplay behavior handled elsewhere
		    pauseOnHover: false,
		    dots: false,
		    swipeToSlide: false,
		    swipe: false,
		    touchMove: false,
		    useTransform: true,
		    arrows: false,
		    dots: false
	    };

		// options for navigating inside projects
		Design.slide_options = window.slide_options ? window.slide_options : {
		    cssEase: 'ease-in-out',
		    lazyLoad: false, // always set to false, lazyload behavior handled elsewhere
		    useCSS: true,
		    fade: (Cargo.Model.DisplayOptions.get('slide_transition') == 'fade' || Cargo.Model.DisplayOptions.get('slide_transition') == 'none'),
			infinite: false, // always set to false, infinite behavior handled elsewhere
			speed: (Cargo.Model.DisplayOptions.get('slide_transition') == 'none') ? 0 : Cargo.Model.DisplayOptions.get('slide_transition_duration') * 1000,
			autoplay: false, // always set to false, autoplay behavior handled elsewhere
		    pauseOnHover: false,
		    dots: false,
		    swipeToSlide: false,
		    swipe: Design.data.swipe_active || Design.status.force_temp_swipe || Cargo.Model.DisplayOptions.get('force_swipe_mode'), // determined through testSwipeMode method
		    touchMove: Design.data.swipe_active || Design.status.force_temp_swipe || Cargo.Model.DisplayOptions.get('force_swipe_mode'),  // determined through testSwipeMode method
		    useTransform: true,
		    arrows: false,
		    dots: false
	    };

	},

	preLoad: function(){


		// if the native dom parser exists, we use it
		// Otherwise, there's simply no preloading
		if (! (new DOMParser()).parseFromString('', 'text/html')) {
			// if that doesnt return anything, we return
			return
		}

		// If we are possibly in a low-bandwidth situation, no preloading
		if ( Cargo.Helper.isMobile() ){
			return
		}


		setTimeout(function(){

			Design.data.preload_queue = [];

			var parser = new DOMParser();

			var next_content = parser.parseFromString(Cargo.Helper.GetNextProjectModel().get('content'), 'text/html').getElementsByTagName('img');

			var image_list = [];
			var image;
			var src;


			for (var i=0; i<next_content.length && i< 2; i++){

				image = next_content[i];
				src = image.getAttribute('src');
				image.setAttribute('data-src', src);
				image.setAttribute('src', '/_gfx/spacer.gif');

				image_list.push(image);

			}

			// for sites with two projects, we do not want to double-fill the preload queue
			if ( Cargo.Helper.GetNextProjectModel().get('id') != Cargo.Helper.GetPrevProjectModel().get('id') ){

				var prev_content = parser.parseFromString(Cargo.Helper.GetPrevProjectModel().get('content'), 'text/html').getElementsByTagName('img');

				for (var i=0; i<prev_content.length && i< 2; i++){
					image = prev_content[i];
					src = image.getAttribute('src');
					image.setAttribute('data-src', src);
					image.setAttribute('src', '/_gfx/spacer.gif');

					image_list.push(image);
				}

			}

			if ( image_list.length > 0){
				var imageload = mbl(image_list);

				imageload.on('success', function(data){
					Design.data.preload_queue.push(data.element);
				})

				// start!
				imageload.start()
			}


		}, 200)

	},

	autoPlaySlideshow: function(){

		var autoplay;
		var project_option;

		window.clearTimeout(Design.autoplayTimeoutID);

		if ( !Design.status.variables_loaded ){
			return
		}

		if ( typeof Design.data.project_options[Design.data.current_project.pid] !== 'undefined'){

			project_option = Design.data.project_options[Design.data.current_project.pid]['autoplay'];

			if (project_option == false){
				autoplay = false
			} else if ( project_option == true){
				autoplay = true
			} else {
				autoplay = Design.data.project_options.defaults.autoplay
			}

		} else {
			autoplay = Design.data.project_options.defaults.autoplay;
		}

		if ( autoplay ){
			Design.status.autoplay_active = true;
		} else {
			Design.status.autoplay_active = false;
		}

		if ( autoplay && Design.data.current_project.has_slides ){

			Design.autoplayTimeoutID = window.setTimeout(function(){

				if ( Cargo.Model.DisplayOptions.get('slideshow_nav_navigates_projects') ){
					Design.clickNext();
				} else {
					Design.nextSlide();
				}


			}, (Cargo.Model.DisplayOptions.get('slide_autoplay_delay') + Cargo.Model.DisplayOptions.get('slide_transition_duration')) * 1000 + 50 );

		}
	},

	showThumbnails: function(){

		if ( $('#thumbnails').length < 1){
			return
		}

		// show thumbs and remove inactive class
		$('#thumbnails').show(0, function(){

			if ( Design.status.columnizer_inited){
				Cargo.Plugins.columnizer.updateTargets();
			}

			var thumbs_transition = Design.calcTransitionDuration($('#thumbnails'));

			// if no transition, we immediately proceed to showing the thumbnails
			if ( thumbs_transition == 0 ){

				$('#thumbnails').removeClass('inactive');
				Design.thumbIndexTransitionEnd();

			} else {

				Design.listenToThumbIndexTransition();
				$('#thumbnails').removeClass('inactive');

			}
			$('#thumbnails').css('display','')

		})
	},

	hideThumbnails: function(){

		if ( $('#thumbnails').length < 1){
			return
		}

		var thumbs_transition = Design.calcTransitionDuration($('#thumbnails'));

		// if no transition, we immediately proceed to showing the thumbnails
		if ( thumbs_transition == 0 ){

			$('#thumbnails').addClass('inactive')
			Design.thumbIndexTransitionEnd();

		} else {

			Design.listenToThumbIndexTransition();
			$('#thumbnails').addClass('inactive')

		}

	},

	restoreProjectContentTransition: _.debounce(function(e) {

		$('#project, #page').css("transition-duration", "")

	}, 100),

	removeProjectContentTransiton: _.debounce(function(event) {

		$('#project, #page').css("transition-duration", "0s")

	}, 100, true),

	loadPage: function(pid, from_project){

		window.clearTimeout(Design.autoplayTimeoutID);

		Design.splitPageContent(pid, from_project);
		Design.showPageContent();
		$('.navigation .page_link').removeClass('active')
		$('.navigation #menu_'+pid).addClass('active')

		if ( Cargo.Model.DisplayOptions.get('photoswipe_view') ){
			Design.initPageLightBox()
		}
		Design.initPageFullScreen();

	},


	showPageContent: function(){

		Design.toggleNav(true)
		$('#page').show(0, function(){

			$('body').addClass('page_text_visible');

			var page_transition = Design.calcTransitionDuration($('#page'));
			$('body').attr('data-cancel-fade', '')

			// if no transition, we immediately proceed to showing the thumbnails
			if ( page_transition == 0 ){

				$('#page').removeClass('inactive');
				Design.pageContentTransitionEnd();

			} else {

				Design.listenToPageContentTransition();
				$('#page').removeClass('inactive');

			}

			Cargo.Plugins.elementResizer.refresh();
			$('#page').css('display','')

		})

	},

	hidePageContent: function(){

		if ( Design.data.mobile_active || $('#page').is('.inactive') || Cargo.Helper.IsSearch() ){
			return
		}

		$('body').removeClass('page_text_visible');
		var pid = $('#page .entry').attr('data-id')
		$('.navigation #menu_'+pid).removeClass('active')

		var page_transition = Design.calcTransitionDuration($('#page'));

		var scroll_distance = $(window).scrollTop();
		var scroll_time = 0;
		var delay_time = 0

		if ( scroll_distance == 0 ){
			scroll_time = 0;
		} else if ( scroll_distance < 400 ) {
			scroll_time = Math.min(scroll_distance, 300);
			delay_time = 100;
		} else {
			scroll_time = 300;
			delay_time = 100;
			$(window).scrollTop(400)
		}

		// if no transition, we immediately proceed to showing the thumbnails
		if ( page_transition == 0 ){

			Design.scrollToTop(scroll_time, function(){

				_.delay(function(){

					if ( Design.data.mobile_active){

						return;
					}

					$('#page').addClass('inactive')
					Design.pageContentTransitionEnd();

					if ( !$('body').is('.project_text_visible') ){
						$('body').removeAttr('data-cancel-fade')
					}


					if ( Cargo.Helper.GetCurrentPageType() =="page"){
						Action.Project.Close();
					} else if ( Cargo.Helper.GetCurrentPageType() == "project"){

						if ( Cargo.Helper.IsOnStartProject() ){
							history.pushState(null, null, Cargo.Helper.GetActiveIndex());
							$('#page .entry').attr('data-id', Cargo.Helper.GetStartProjectId() )
						} else {
							history.pushState(null, null, Cargo.Helper.GetCurrentProjectUrl());
							$('#page .entry').attr('data-id', Cargo.Helper.GetCurrentProjectId() )
						}

					} else {
						history.pushState(null, null, Cargo.Helper.GetActiveIndex());
						$('#page .entry').attr('data-id', '' )

					}


					if ( !Design.data.current_project.has_slides && Design.data.current_project.has_text){
						Design.showProjectContent()
					}

					Design.updateMetaNav();

					$('a[rel="toggle_text"]').text( Cargo.Model.DisplayOptions.get('show_more_info').show )


				}, delay_time)

			});

		} else {

			Design.scrollToTop(scroll_time, function(){

				_.delay(function(){

					if ( Design.data.mobile_active){

						return;
					}

					if ( Cargo.Helper.GetCurrentPageType() =="page"){
						Action.Project.Close();
					} else if ( Cargo.Helper.GetCurrentPageType() == "project"){

						if ( Cargo.Helper.IsOnStartProject() ){
							history.pushState(null, null, Cargo.Helper.GetActiveIndex());
							$('#page .entry').attr('data-id', Cargo.Helper.GetStartProjectId() )

						} else {
							history.pushState(null, null, Cargo.Helper.GetCurrentProjectUrl())
							$('#page .entry').attr('data-id', Cargo.Helper.GetCurrentProjectId() )

						}

					} else {
						history.pushState(null, null, Cargo.Helper.GetActiveIndex());
						$('#page .entry').attr('data-id', '' )
					}


					if ( !Design.data.current_project.has_slides && Design.data.current_project.has_text){
						Design.showProjectContent()
					}

					Design.listenToPageContentTransition();
					$('#page').addClass('inactive')

					if ( !$('body').is('.project_text_visible') ){
						$('body').removeAttr('data-cancel-fade')
					}
					Design.updateMetaNav();


				}, delay_time)

			});
		}

	},

	showProjectContent:function(){

		$('#project').show(0, function(){

			var project_transition = Design.calcTransitionDuration($('#project'));

			// if no transition, we immediately proceed to showing the thumbnails
			if ( project_transition == 0 ){

				$('#project').removeClass('inactive');
				Design.projectContentTransitionEnd();

			} else {

				Design.listenToProjectContentTransition();
				$('#project').removeClass('inactive');

			}

			Cargo.Plugins.elementResizer.refresh();
			$('#project').css('display','')

		})

		$('body').addClass('project_text_visible').attr('data-cancel-fade', '')

		Design.mouseIn();
		$('a[rel="toggle_text"]').text( Cargo.Model.DisplayOptions.get('show_more_info').hide )

	},

	hideProjectContent: function(){

		if ( Design.data.mobile_active || $('#project').is('.inactive') || Cargo.Helper.IsSearch()  ){
			return
		}

		var project_transition = Design.calcTransitionDuration($('#project'));

		var scroll_distance = $(window).scrollTop();
		var scroll_time = 0;
		var delay_time = 0

		if ( scroll_distance == 0 ){
			scroll_time = 0;
		} else if ( scroll_distance < 400 ) {
			scroll_time = Math.min(scroll_distance, 300);
			delay_time = 100;
		} else {
			scroll_time = 300;
			delay_time = 100;
			$(window).scrollTop(400)
		}

		// if no transition, we immediately proceed to showing the thumbnails
		if ( project_transition == 0 ){

			Design.scrollToTop(scroll_time, function(){

				_.delay(function(){

					if ( Design.data.mobile_active){

						return;
					}

					$('#project').addClass('inactive')
					Design.projectContentTransitionEnd();

					$('body').removeClass('project_text_visible').removeAttr('data-cancel-fade')
					$('a[rel="toggle_text"]').text( Cargo.Model.DisplayOptions.get('show_more_info').show )


				}, delay_time)

			});

		} else {

			Design.scrollToTop(scroll_time, function(){

				_.delay(function(){

					if ( Design.data.mobile_active){

						return;
					}

					Design.listenToProjectContentTransition();
					$('#project').addClass('inactive')

					$('body').removeClass('project_text_visible').removeAttr('data-cancel-fade')
					$('a[rel="toggle_text"]').text( Cargo.Model.DisplayOptions.get('show_more_info').show )


				}, delay_time)

			});
		}

// 		restart the timeout
		Design.setMouseAwayTimeout();
		Design.autoPlaySlideshow();

	},

	scrollToTop: function(scroll_time, callback){

		if ( !scroll_time ){
			var scroll_time = 0;
		}

		var scroll_callback_executed = false;
		$('body, html').animate({'scrollTop': 0}, scroll_time, 'easeOutExpo', function(){

			if ( scroll_callback_executed ){
				return;
			}

			scroll_callback_executed = true;

			if ( callback ){
				callback();
			}

		})

	},

	showProjectMedia: function(){

		Design.$project_media.show(0, function(){

			var project_media_transition = Design.calcTransitionDuration(Design.$project_media);

			if ( project_media_transition == 0 ){

				Design.$project_media.removeClass('inactive')
				Design.projectMediaTransitionEnd();

			} else {

				Design.listenToProjectMediaTransition();
				Design.$project_media.removeClass('inactive')

			}

		});

	},

	hideProjectMedia: function(){

		var project_media_transition = Design.calcTransitionDuration(Design.$project_media);

		if ( project_media_transition == 0 ){

			Design.$project_media.addClass('inactive')
			Design.projectMediaTransitionEnd();

		} else {

			Design.listenToProjectMediaTransition();
			Design.$project_media.addClass('inactive')

		}

		$('.media_footer').removeClass('active')
	},

	splitPageContent: function(pid, from_project){

		var image_list = [];

		var page_content;
		var url;

		if ( from_project ){
			page_content = $($.parseHTML(Cargo.Model.Project.GetContent(), true));
			$('#page .project_title').html(Cargo.Model.Project.GetTitle());
			if ( Cargo.Model.Project.GetShowTitle() ){
				$('#page .project_title').html(Cargo.Model.Project.GetTitle()).css('display','');
			} else {
				$('#page .project_title').html('').hide();
			}

		} else {
			page_content = $($.parseHTML(Cargo.Collection.Pages.get(pid).get('content'), true));
			if ( Cargo.Collection.Pages.get(pid).get('show_title') ){
				$('#page .project_title').html(Cargo.Collection.Pages.get(pid).get('title')).css('display','');
			} else {
				$('#page .project_title').html('').hide();
			}

		}

		$('#page .edit_site a').attr('href', document.location.protocol + "//" + Cargo.Helper.GetBaseCargoDomain()+"/"+ Cargo.Helper.GetUrl() +"/admin/" + pid);

		$('#page .entry').attr('data-id', pid);

		var page_text = $('<div></div>');

		page_content.each(function(i){

			if ( $(this).is('img')){

				if ( Cargo.Model.DisplayOptions.get('lazyload_images') ){

					$(this).addClass('loading');
					var image_tag = $(this)[0];
					var image_src = $(this).attr('src');

					// slick slider's lazyloading uses data-lazy
					// data-src used by mbl
					image_tag.setAttribute('data-src', image_src );
					image_tag.setAttribute('src', '/_gfx/spacer.gif');

					image_list.push(image_tag);

					page_text.append(image_tag);

				}


			} else if ( $(this).is('style, script') ) {

				page_text.append( $(this).html($(this).html().replace(/(<|&lt;)br\s*\/*(>|&gt;)/g,' ')) );

			} else {

				page_text.append( $(this) );

			}

		});

		// Place project text in area
		$('#page').find('.project_content').html(page_text.contents());

		if ( $('#page .slideshow_container').length > 0){
			$('.slideshow_thumbnails').remove()
			Cargo.Core.Slideshow.InitSlideshow()
		}

		// begin lazy load if it's active
		if ( image_list.length > 0){

			var imageload = mbl(image_list, {
				sequential: true
			});

			imageload.on('success', function(data) {
				$(data.element)
					.removeClass('loading')
					.removeAttr('data-src')

			})

			imageload.start();

		}

	},


	splitProjectContent: function(){
		var _this = this;

		var pid = Design.data.current_project.pid;
		var image_list = [];
		var is_project_editing_or_solo = Cargo.Helper.IsAdminEditProject() || Cargo.Helper.IsSololink();

		var project_content = $($.parseHTML(Cargo.Model.Project.GetContent(), true));
		var project_text = $('<div></div>');
		var project_media = $('<div></div>');


		project_content.each(function(index){


			if ( $(this).is('iframe, img, video, .custom_slide') ) {

				// setup for vimeo api
				if ($(this).attr('src').indexOf('player.vimeo.com') > -1 ){

					if ( !$(this)[0].hasAttribute('id') ){
						$(this).attr('id', 'vimeoplayer_'+index)
					}

					$(this).attr({
						'src': $(this).attr('src') + '?api=1&player_id=' + $(this).attr('id'),
						'data-vimeo': ''
					});

					if ( Cargo.Model.DisplayOptions.get('lazyload_images')){
						$(this).addClass('loading');
					}

					project_media.append($(this));

				//setup for youtube api
				} else if ($(this).attr('src').indexOf('youtube.com/embed') > -1 ){


					if ( !$(this)[0].hasAttribute('id') ){
						$(this).attr('id', 'youtube_' +index);
					}

					// reset iframe

					var ytSrc = $(this).attr('src')
					if ( ytSrc.indexOf('?') > 0 ){
						ytSrc = ytSrc + '&enablejsapi=1&origin=' +window.location.origin
					} else {
						ytSrc = ytSrc + '?enablejsapi=1&origin=' +window.location.origin
					}

					if ( ytSrc.indexOf('loop=1')  > 0 ){
						if ( ytSrc.indexOf('playlist=') < 0) {

							var ytId = ytSrc.split('/embed/')[1]
							ytId = ytId.split('?')[0]
							ytSrc = ytSrc + '&playlist='+ytId

						}
					}

					$(this).attr({
						'src': ytSrc,
						'data-youtube': ''
					});

					if ( Cargo.Model.DisplayOptions.get('lazyload_images')){
						$(this).addClass('loading');
					}

					project_media.append($(this));

				// setup for normal video tags
				} else if ( $(this).is('video') ) {
					$(this).attr('data-video', '');

					if ( Cargo.Model.DisplayOptions.get('lazyload_images')){
						$(this).addClass('loading');
					}
					project_media.append($(this));


				} else if ( $(this).attr('src').indexOf('soundcloud.com/player') > -1 ) {

					$(this).attr('data-soundcloud', '');

					if ( Cargo.Model.DisplayOptions.get('lazyload_images')){
						$(this).addClass('loading');
					}

					project_media.append($(this));

				// if the image has an mid, unbind it
				// also check for matches in the queue
				} else if ($(this).is('img[data-mid]') ){

					var img_added = false;

					if ( Design.data.preload_queue.length > 0){

						for ( var i = 0; i < Design.data.preload_queue.length; i++){

							if ( this.getAttribute('data-mid') == Design.data.preload_queue[i].getAttribute('data-mid') ){

								// preload_queue exists in document parser's created fragment
								var image = document.importNode(Design.data.preload_queue[i], false)

								project_media.append($(image));
								img_added = true;

								// break loop after image found
								break;
							}

						}

					}

					if ( !img_added ){
						project_media.append($(this));
					}

				} else {
				// No API available
					project_media.append($(this));

				}

			// grab contents from video
			} else if ( $(this).is('.video_component') ){

				$('video', this).attr('data-video', 'data-video');

				if ( Cargo.Model.DisplayOptions.get('lazyload_images')){
					$('video', this).addClass('loading');
				}

				project_media.append( $('video', this) );


			// search for preloaded images inside slideshow
			} else if ( $(this).is('.slideshow') ){

				if ( Design.data.preload_queue.length > 0){

					$('.slideshow_container img', this).each(function(){

						var img_added = false;
						for ( var i = 0; i < Design.data.preload_queue.length; i++){

							if ( this.getAttribute('data-mid') == Design.data.preload_queue[i].getAttribute('data-mid') ){

								// preload_queue exists in document parser's created fragment
								var image = document.importNode(Design.data.preload_queue[i], false)

								project_media.append($(image));
								img_added = true;

							}

						}

						if ( !img_added ){
							project_media.append( $(this));

						}

					})

				} else {

					project_media.append( $('.slideshow_container img', this) );

				}

			} else if ( $(this).is('style, script') ) {

				project_text.append( $(this).html($(this).html().replace(/(<|&lt;)br\s*\/*(>|&gt;)/g,' ')) );

			} else {

				// remove slideshows from projects
				if ( $('.slideshow', this).length > 0 ){
					$('.slideshow', this).remove();
				}

				// setup lazyloading for images inside projects
				if ( Cargo.Model.DisplayOptions.get('lazyload_images')){
					$('img', this).each(function(){

						$(this).addClass('loading');
						var image_src = $(this).attr('src');

						// slick slider's lazyloading uses data-lazy
						// data-src used by mbl
						$(this).attr('data-src', image_src );
						$(this).attr('src', '/_gfx/spacer.gif');

						image_list.push($(this)[0]);

					})
				}

				project_text.append( $(this) );

			}

		});

		// init lazyloading for images inside the project text area
		if ( image_list.length > 0){

			var imageload = mbl(image_list, {
				sequential: true
			});

			imageload.on('success', function(data) {
				$(data.element)
					.removeClass('loading')
					.removeAttr('data-src')

			})

			imageload.start();

		}

		var only_br = true;
		project_text.contents().each(function(){

			if ( this.nodeName == 'BR' || (this.nodeType == Node.TEXT_NODE && this.data.trim() == '') ){

			} else {
				only_br = false;
			}

		})

		if ( project_text.contents().length == 0 || only_br){
			Design.data.current_project.has_text = false;
		} else {
			Design.data.current_project.has_text = true;
		}

		if ( project_media.contents().length == 0){

			Design.data.current_project.has_slides = false;
		} else {
			Design.data.current_project.has_slides = true;
		}

		var direction = Design.status.slide_motion_direction;
		var container_slick_obj = Design.$project_media.slick('getSlick');

		Design.data.current_project.has_multiple_slides = project_media.contents().length > 1;
		Design.data.current_project.slides = project_media.contents().length;

		// Place project text in area
		Cargo.View.ProjectDetail.$el.find('.project_content').html(project_text.contents());

		var $outer_slide = $('<div data-id="slide_'+pid+'" class="outer" style="overflow:hidden"><div class="inner"></div></div>');
		var $inner_media;

		if ( direction == 'prev') {
			Design.$project_media.slick('slickAdd', $outer_slide, 0, true);
			$inner_media = Design.$project_media.find('[data-id="slide_'+pid+'"] .inner').first();
		} else {
			Design.$project_media.slick('slickAdd', $outer_slide);
			$inner_media = Design.$project_media.find('[data-id="slide_'+pid+'"] .inner').last();
		}

		// init slick with empty slideshow
		$inner_media.slick(Design.slide_options);

		//unbind previous slideshow's media if it exists
		if ( Design.data.$inner_slideshow ){
			Design.tearDownMediaPlayers(Design.data.current_project.last_slide_index)
			Design.unbindMediaAndCaption();
		}

	    Design.data.$inner_slideshow = $inner_media;

		// then place media into the slideshow one by one
		project_media.contents().each(function(index){

				if ( $(this).is('img') && Cargo.Model.DisplayOptions.get('lazyload_images') ){

					$(this).addClass('loading')

					var image_tag = $(this)[0];
					var image_src = $(this).attr('src');

					// slick slider's lazyloading uses data-lazy
					// data-src used by mbl
					image_tag.setAttribute('data-src', image_src );
					image_tag.setAttribute('src', '/_gfx/spacer.gif');

					$inner_media.slick('slickAdd', $('<div style="overflow:hidden"></div>').append(image_tag)[0]);

				} else if( Cargo.Model.DisplayOptions.get('lazyload_images') ){

					$(this).addClass('loading')
					$inner_media.slick('slickAdd', $('<div style="overflow:hidden"></div>').append($(this))[0]);

				} else {

					$inner_media.slick('slickAdd', $('<div style="overflow:hidden"></div>').append($(this))[0]);

				}

		});

		$inner_media.slick('getSlick').$slides.each(function(index){
			$(this).attr("data-slide_number", index+1);
		})

		$inner_media.slick('getSlick').$slides.first().addClass('first_slide');
		$inner_media.slick('getSlick').$slides.last().addClass('last_slide');

		var availableProjects = Math.max( Math.max(Cargo.Helper.GetTotalProjectsInMemory(), parseInt(Cargo.API.Config.total_projects)), $('#thumbnails .thumbnail').length)

		Design.data.looping_slides = (Design.data.current_project.has_multiple_slides && (!Cargo.Model.DisplayOptions.get('slideshow_nav_navigates_projects') ) || availableProjects < 2 || is_project_editing_or_solo);

		// if we need to have loopable slides
		if ( Design.data.looping_slides ){

			var first_slide = $inner_media.slick('getSlick').$slides.first().clone().attr('data-cloned', 'true');

			if ( first_slide.find('iframe').length > 0){
				first_slide.find('iframe').attr('id', '')
				first_slide.find('.loading').removeClass('loading')
			}

			var last_slide = $inner_media.slick('getSlick').$slides.last().clone().attr('data-cloned', 'true');
			if ( last_slide.find('iframe').length > 0){
				last_slide.find('iframe').attr('id', '')
				last_slide.find('.loading').removeClass('loading')
			}

			$inner_media.slick('slickAdd', first_slide );
			$inner_media.slick('slickAdd', last_slide, 0, true );
			$inner_media.slick('slickGoTo', 1, true);

		}


		// if navigating backwards, start at the final slide instead of the first
		if ( Cargo.Model.DisplayOptions.get('slideshow_nav_navigates_projects') &&  direction == 'prev' ){

			$inner_media.slick('slickGoTo', $inner_media.slick('getSlick').slideCount-1, true);

		}


		// Binding slidehow elements
		// whenever the slideshow stops its transition
		$inner_media.on('afterChange', function(event, slick, currentSlide){

			Design.tearDownMediaPlayers(Design.data.current_project.last_slide_index)

			// prevent event from propagating to parent slide
			event.stopPropagation()
			Design.status.slide_in_transition = false;
			Design.bindMediaAndCaption(currentSlide);

			if ( Design.status.force_temp_project_nav ){

				$('#project_nav').removeClass('dismissed');

			} else if ( Design.status.project_nav_dismissed ) {

				$('#project_nav').addClass('dismissed')

			} else if ( !Design.status.swipe_active ){

				$('#project_nav').removeClass('dismissed');

			}

			Design.testSwipeMode()
			Design.loadLazy(currentSlide);
			Design.autoPlaySlideshow();
			Design.updateSlideNumber(currentSlide);

			if ( Design.data.looping_slides ){
				Design.detectLoop(currentSlide);
			}

			// Used to unbind media on last slide
			Design.data.current_project.last_slide_index = currentSlide;

			event.stopImmediatePropagation();
			event.stopPropagation();
			event.preventDefault();

		});

		// whenever the slideshow starts its transition
		$inner_media.on('beforeChange', function(event, slick, currentSlide){

			Design.unbindMediaAndCaption();
			Design.status.slide_in_transition = true;

			event.stopImmediatePropagation();
			event.stopPropagation();
			event.preventDefault();

		});

		$inner_media.on('swipe', function(event, slick, currentSlide){

			if ( Design.status.swipe_active ){
				Design.status.project_nav_dismissed = true;
			}

			event.stopPropagation();

		});


		$inner_media.on('edge', function(event, slick, direction){


			if ( direction == "right"){
				Design.clickPrev()
			} else {
				Design.clickNext()
			}
			event.stopImmediatePropagation();
			event.stopPropagation();
		})


		var initial_slide = $inner_media.slick('getSlick').currentSlide;

		// do any formatting or binding we need to for the initial slide
		Design.data.current_project.last_slide_index = initial_slide;
		Design.bindMediaAndCaption(initial_slide);
		Design.updateSlideNumber(initial_slide);
		Design.loadLazy(initial_slide);

		if ( Design.status.force_temp_project_nav || !Design.data.current_project.has_slides ){

			$('#project_nav').removeClass('dismissed');

		} else if ( Design.status.project_nav_dismissed ) {

			$('#project_nav').addClass('dismissed')

		} else if ( !Design.status.swipe_active ){

			$('#project_nav').removeClass('dismissed');

		}


		Design.status.project_slideshow_needs_cleanup = true;


		// transition the larger project-to-project slideshow
		if ( container_slick_obj.slideCount > 0 ){

			if ( direction == 'prev') {

				Design.$project_media.slick('slickGoTo', 0);

			} else if ( direction == 'next') {

				Design.$project_media.slick('slickGoTo', 1);

			} else if ( direction == 'from_index'){

				Design.$project_media.slick('slickSetOption', 'speed', 0)
				Design.$project_media.slick('slickGoTo', 1);
				Design.$project_media.slick('slickSetOption', 'speed', Design.project_slide_options.speed)

			}

		}

		Design.status.project_slick_inited = true;
		Design.autoPlaySlideshow();

	},

	initLightBox: function(){
		$('#project img').css({
			"cursor": "-webkit-zoom-in",
			"cursor": "zoom-in"
		});

		$('#project img[data-mid]').bind('click dblclick', function(event){

			if ( event.type != Design.data.click_event){
				return;
			}

			lightbox.openImageArray($('#project')[0].querySelectorAll('[data-mid]'), event.target);

		});

	},

	initProjectFullScreen: function(){

		$('a#fullscreen').unbind('click dblclick')
		$('a#fullscreen').bind('click dblclick', function(event){
			if ( event.type != Design.data.click_event){
				return;
			}
			event.preventDefault();

			lightbox.openImageArray($('#project, #project_media')[0].querySelectorAll('[data-mid]'));

		})
	},

	initPageLightBox: function(){

		$('#page img').css({
			"cursor": "-webkit-zoom-in",
			"cursor": "zoom-in"
		});

		$('#page img[data-mid]').bind('click dblclick', function(event){
			if ( event.type != Design.data.click_event){
				return;
			}
			event.preventDefault();

			lightbox.openImageArray($('#page')[0].querySelectorAll('[data-mid]'), event.target);

		});
	},

	initPageFullScreen: function(){
		$('a#fullscreen').unbind('click dblclick')
		$('a#fullscreen').bind('click dblclick', function(event){
			event.preventDefault();
			if ( event.type != Design.data.click_event){
				return;
			}

			lightbox.openImageArray($('#page')[0].querySelectorAll('[data-mid]'));

		})
	},


	bindMediaAndCaption: function(currentSlide){

		var $inner_media = Design.data.$inner_slideshow;
		var $footer = Cargo.View.Main.$el.find('.media_footer');
		var $current_slide_content = Design.data.$inner_slideshow.slick('getSlick').$slides.eq(currentSlide).find('iframe, video, [caption]');
		var show_media_controls = Cargo.Model.DisplayOptions.get('media_controls');
			Design.status.force_temp_swipe = false;
			Design.status.force_temp_project_nav = false;

		// only bind media controls or read captions
		if ( $current_slide_content.length > 0 && !$current_slide_content.parent().is('[data-cloned]') ){

			if ( $current_slide_content.is('[caption]')  && Cargo.Model.DisplayOptions.get('image_captions')) {

				$footer.addClass('caption active')
				$footer.find('.caption').html($current_slide_content.attr('caption'));

			} else {

				$footer.removeClass('caption')
				$footer.find('.caption').html('');

			}

			// If we have media that can only be played in mobile through iframe interaction / takeover mode
			// show the nav and reset its position so that we can navigate
			// media controls not possible in iOS etc
			if ( Cargo.Helper.isMobile() && $current_slide_content.is('iframe, video') ){

				$current_slide_content.removeClass('loading')
				show_media_controls = false;
				Design.status.force_temp_project_nav = true;

			// if we have media that can only be played through interaction (show_media_controls turned off & no autoplay)
			// force swipe mode temporarily, then show project nav & reset its position so that we can navigate
			} else if ( (!show_media_controls && $current_slide_content.is('[data-vimeo], [data-youtube], [data-video]') && !Cargo.Model.DisplayOptions.get('autoplay_media') ) || $current_slide_content.is('iframe:not([data-vimeo], [data-youtube], [data-video])') ){

				$current_slide_content.removeClass('loading')
				Design.$project_media.removeClass('hide_cursor')
				Design.status.force_temp_swipe = true;
				Design.status.force_temp_project_nav = true;
				show_media_controls = false;

			}

			Design.testSwipeMode();

			// BIND VIMEO
			if ( $current_slide_content.is('[data-vimeo]') && !Cargo.Helper.isMobile() ){

				// start autoplay & bind controls
				$current_slide_content.vimeoLoad();

				// double test vimeo videos since this event does not fire consistently
				$current_slide_content.on('ready', function(){

					if ( Cargo.Model.DisplayOptions.get('autoplay_media') ){

						$current_slide_content.vimeo('play');

					} else {

						$footer.removeClass('playing').addClass('paused');

					}


					$current_slide_content.removeClass('loading');

				})


				if ( Cargo.Model.DisplayOptions.get('autoplay_media') ){

					$current_slide_content.vimeo('play');
					$current_slide_content.removeClass('loading');

				} else {

					$footer.removeClass('playing').addClass('paused');
					$current_slide_content.removeClass('loading');
				}


				$current_slide_content.on('pause finish', function(){
					$footer.removeClass('playing').addClass('paused');
				})

				$current_slide_content.on('play', function(){
					$footer.removeClass('paused').addClass('playing');
				})

				$('a[rel="play_media"]').bind('click dblclick', function(event){
					if ( event.type != Design.data.click_event){
						return;
					}

					event.preventDefault();
					$current_slide_content.vimeo('play');
				});

				$('a[rel="pause_media"]').bind('click dblclick', function(event){
					if ( event.type != Design.data.click_event){
						return;
					}

					event.preventDefault();
					$current_slide_content.vimeo('pause');
				});

			// BIND SOUNDCLOUD
			} else if ($current_slide_content.is('[data-soundcloud]') && !Cargo.Helper.isMobile() ){


				if ( Cargo.Model.DisplayOptions.get('autoplay_media') && $current_slide_content.attr('src').indexOf('auto_play=false') > -1 ){
					$current_slide_content.attr('src', $current_slide_content.attr('src').replace('auto_play=false', 'auto_play=true') );
				}

				setTimeout(function(){
					$current_slide_content.removeClass('loading')
				}, 100)


			// BIND YOUTUBE
			} else if ( $current_slide_content.is('[data-youtube]')  && !Cargo.Helper.isMobile() ){

				// get youtube id from iframe src
				var id = false;
				var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
				var match = $current_slide_content.attr('src').match(regExp);
				if (match && match[7].length==11){
					id = match[7];
				}

				if ( id && Design.status.yt_loaded){

				} else {
					// youtube api not yet loaded, we'll rebind after it does
					return;
				}

				if ( Design.youtube_vid ){
					Design.youtube_vid.destroy();
				}				

				Design.youtube_vid = false;

				Design.youtube_vid = new YT.Player($current_slide_content.get(0), {
					videoId: id,

					events: {
						'onReady': function(event){

							if ( !$current_slide_content.parents().is('body')){
								return
							}

							Design.youtube_vid.unMute();
							Design.youtube_vid.setVolume(100);

							if ( Cargo.Model.DisplayOptions.get('autoplay_media') ){
								$footer.removeClass('paused').addClass('playing');
								Design.youtube_vid.playVideo();
							} else {
								$current_slide_content.removeClass('loading');
								$footer.removeClass('playing').addClass('paused');
							}
						},
						'onStateChange': function(event){

						    // if paused or ended
						    if ( event.data == 2 || event.data == 0){
								$footer.removeClass('playing').addClass('paused');

							// if playing
						    } else if ( event.data == 1 ) {

							    if ( Cargo.Model.DisplayOptions.get('autoplay_media') ){
									$current_slide_content.removeClass('loading');
							    }
								$footer.removeClass('paused').addClass('playing');
						    }

						}
					}
		        });

				// Bind controls for youtube
				$('a[rel="play_media"]').bind('click dblclick', function(event){
					if ( event.type != Design.data.click_event){
						return;
					}

					event.preventDefault();
					Design.youtube_vid.playVideo();
				});

				$('a[rel="pause_media"]').bind('click dblclick', function(event){
					if ( event.type != Design.data.click_event){
						return;
					}

					event.preventDefault();
					Design.youtube_vid.pauseVideo();
				});

			// BIND VIDEO
			} else if ( $current_slide_content.is('[data-video]')  && !Cargo.Helper.isMobile() ){

				if ( Design.status.force_temp_swipe ){
					$current_slide_content.attr('controls','')
				} else {
					$current_slide_content.removeAttr('controls')
				}

				if ( $current_slide_content.is('[data-vid-src]')){
					$current_slide_content.attr('src', $current_slide_content.attr('data-vid-src') )
				}


				$current_slide_content[0].onpause = function(event){
					event.stopPropagation();
					$footer.removeClass('playing').addClass('paused');
				};

				$current_slide_content[0].onplay = function(event){
					event.stopPropagation();
					$footer.removeClass('paused').addClass('playing');
				}

				$('a[rel="play_media"]').bind('click dblclick', function(event){

					if ( event.type != Design.data.click_event){
						return;
					}

					event.preventDefault();
					$current_slide_content[0].play();
				});

				$('a[rel="pause_media"]').bind('click dblclick', function(event){
					if ( event.type != Design.data.click_event){
						return;
					}

					event.preventDefault();
					$current_slide_content[0].pause();
				});


				// if already loaded, we start autoplay
				if ( $current_slide_content.is('[data-loaded]') ){

					if ( Cargo.Model.DisplayOptions.get('autoplay_media') ){
						$current_slide_content[0].currentTime = 0;
						$current_slide_content[0].play();
						$footer.removeClass('paused').addClass('playing');

					} else {

						$footer.removeClass('playing').addClass('paused');
					}
				} else {
					// if not already loaded, we wait for load
					$current_slide_content[0].oncanplay = function(){
						if ( !$current_slide_content.parents().is('body')){
							return
						}

						$current_slide_content.attr('data-loaded','');

						if ( Cargo.Model.DisplayOptions.get('autoplay_media') ){

							$current_slide_content[0].play();
							$footer.removeClass('paused').addClass('playing');

						} else {

							$footer.removeClass('playing').addClass('paused');
						}

						$current_slide_content.removeClass('loading');

					}

					$current_slide_content[0].load();
				}



			// if no bindable controls, keep media controls hidden
			} else {

				show_media_controls = false;
			}

			if ( show_media_controls || (Cargo.Model.DisplayOptions.get('autoplay_media') && $current_slide_content.is('[data-youtube], [data-vimeo], [data-video]') && !Design.status.mobile_active)){
				// make iframes unclickable
				$current_slide_content.filter('iframe').css({
					'pointer-events': 'none'
				})
			}

			if ( show_media_controls ){

				$footer.addClass('media active');

			// Only remove media in case captions are active
			} else {

				$footer.removeClass('media');

			}

		} else {
			$footer.removeClass('media caption active paused playing')
		}

	},

	unbindMediaAndCaption: function(){

		var $footer = Cargo.View.Main.$el.find('.media_footer');
		$('a[rel="play_media"], a[rel="pause_media"]').unbind('click dblclick');
		$footer.removeClass('media caption active paused playing').find('.caption').text('');

	},

	tearDownMediaPlayers: function(last_slide){

		if ( !Design.status.project_slick_inited || last_slide < 0){
			return
		}

		$('a[rel="play_media"], a[rel="pause_media"]').unbind('click dblclick')
		var current_slick_obj = Design.data.$inner_slideshow.slick('getSlick');
		var $current_slide_content = current_slick_obj.$slides.eq(last_slide);


		$current_slide_content.find('[data-youtube]').first().each(function(){


			if ( Design.youtube_vid != false ){

				var replace_iframe = $(this);
				Design.youtube_vid.destroy();
				Design.youtube_vid = false;
				$current_slide_content.append(replace_iframe);

			}


		})

		$current_slide_content.find('[data-video]').each(function(){

			$(this)[0].pause();
			$(this).attr('data-vid-src', $(this)[0].currentSrc )
			$(this)[0].src = '';

		});

		$current_slide_content.find('[data-vimeo]').vimeo('pause');

		$current_slide_content.find('[data-soundcloud]').each(function(){

			var replace_soundcloud_iframe = $(this);
			var soundcloud_src = $(this).attr('src').replace('auto_play=true', 'auto_play=false')
			$(this).attr('src', soundcloud_src)

		});


	},


	updateMetaNav: function(){

		var information_header_in_use = false;

		if ( Cargo.Model.DisplayOptions.get('title_in_project') && Cargo.Model.Project.GetShowTitle() && Cargo.Helper.GetCurrentPageType()=="project" ){

			$('.information_header .project_title').text(Cargo.Model.Project.GetTitleNoHtml());
			$('.information_header .project_title').removeClass('inactive')
			information_header_in_use = true;

		} else {

			$('.information_header .project_title').addClass('inactive')
			$('.information_header .project_title').text('');

		}


		if ( Design.data.current_project.has_multiple_slides && Cargo.Model.DisplayOptions.get('slideshow_navigation_numbers').enabled && Cargo.Helper.GetCurrentPageType()=="project"){

			$('.information_header .slide_numbers.divider').text(Cargo.Model.DisplayOptions.get('slideshow_navigation_numbers').slash)
			$('.information_header .slide_numbers.last').text(Design.data.current_project.slides)
			$('.information_header .slide_numbers').removeClass('inactive')
			information_header_in_use = true;

		} else {

			$('.information_header .slide_numbers').addClass('inactive')
		}


		if ( Design.data.current_project.has_text && information_header_in_use && Design.data.current_project.has_slides && Cargo.Helper.GetCurrentPageType()){

			$('.information_header .separator').removeClass('inactive')

		} else {

			$('.information_header .separator').addClass('inactive')

		}

		if (Cargo.Helper.GetCurrentPageType()=="page" ){
			information_header_in_use = false;
		}

		if ( information_header_in_use ){

			$('.information_header').removeClass('inactive')

		} else {

			$('.information_header').addClass('inactive')

		}

	},

	updateSlideNumber: function(currentSlide){

		var slide_number = Design.data.$inner_slideshow.slick("getSlick").$slides.eq(currentSlide).attr("data-slide_number");

		$('.information_header .slide_numbers.first').text( slide_number)

	},

	detectLoop: function(currentSlide){

		var $inner_media = Design.data.$inner_slideshow;
		var slide_count = $inner_media.slick('getSlick').slideCount;

		if ( currentSlide == 0){
			// Rather than bypassing animation, we set transition time to 0
			$inner_media.slick('slickSetOption', 'speed', 0)
			$inner_media.slick('slickGoTo', slide_count-2 )
			$inner_media.slick('slickSetOption', 'speed', Design.slide_options.speed)

		}

		if ( currentSlide == slide_count-1){
			// Rather than bypassing animation, we set transition time to 0
			$inner_media.slick('slickSetOption', 'speed', 0)
			$inner_media.slick('slickGoTo', 1);
			$inner_media.slick('slickSetOption', 'speed', Design.slide_options.speed)

		}

	},

	loadLazy: function(currentSlide){

		if ( !Cargo.Model.DisplayOptions.get('lazyload_images')){
			return
		}
		var $inner_media = Design.data.$inner_slideshow;

		var inner_media_obj = Design.data.$inner_slideshow.slick('getSlick');
		var image_list = [];

		// lazyload 3 adjacent slides
		var adjacent_slides = inner_media_obj.$slides
			.slice(
				Math.max(currentSlide-3, 0),
				Math.min(currentSlide+3, inner_media_obj.slideCount)
			)

		// setup lazyload for images
		// include cloned images for completion
		// include last slide for looping backwards
		adjacent_slides.add('[data-cloned], .last_slide').find('img[data-src]').each(function(){
			image_list.push($(this)[0]);
		});

		if ( image_list.length > 0){

			var imageload = mbl(image_list);

			imageload.on('success', function(data) {
				$(data.element)
					.removeClass('loading')
					.removeAttr('data-src')

			})

			imageload.start();

		}

		// automatically show stuff without loaders
		// we let youtube/vimeo slides get handled through their binding stage
		adjacent_slides.find('.loading').not('img[data-src], [data-youtube], [data-vimeo], [data-video], [data-soundcloud]').removeClass('loading');

	},

	cleanUpSlides: function(){

		var pid = Design.data.current_project.pid;
		var container_slick_obj = Design.$project_media.slick('getSlick');

		var array_to_remove = []

		if ( Design.status.project_slideshow_needs_cleanup ){
			Design.status.project_slideshow_needs_cleanup = false;

			Design.$project_media.find('.outer').not('[data-id="slide_'+pid+'"]').each(function(index){

				array_to_remove.unshift(parseInt($(this).attr('data-slick-index')));
				$(this).hide().find('.inner').slick('unslick');

			});

			for (var i = 0; i < array_to_remove.length; i++){

				Design.$project_media.slick('slickRemove', array_to_remove[i])

			}

		}

	},

	unbindButtons: function(){

		$('a[rel="next_slide"], a[rel="prev_slide"], a[rel="prev_project_slides"], a[rel="next_project_slides"], a[rel="toggle_text"]').unbind('click dblclick');

	},

	bindButtons: function(){

		// Enable slideshow navigation
		if ( Design.data.current_project.has_multiple_slides || Cargo.Model.DisplayOptions.get('slideshow_nav_navigates_projects') ){

			$('a[rel="next_slide"], a[rel="prev_slide"]').removeClass('inactive');

			$('a[rel="next_slide"]').bind('click dblclick', function(event){
				if ( event.type != Design.data.click_event){
					return;
				}

				event.preventDefault();
				Design.clickNext();
			});

			$('a[rel="prev_slide"]').bind('click dblclick', function(event){
				if ( event.type != Design.data.click_event){
					return;
				}

				event.preventDefault();
				Design.clickPrev();
			});

		// Disable slideshow navigation
		} else {

			$('a[rel="next_slide"], a[rel="prev_slide"]').addClass('inactive');

			$('a[rel="next_slide"]').bind('click dblclick', function(event){

				if ( event.type != Design.data.click_event){
					return;
				}

				event.preventDefault();
			});

			$('a[rel="prev_slide"]').bind('click dblclick', function(event){
				if ( event.type != Design.data.click_event){
					return;
				}
				event.preventDefault();
			});
		}

		if ( Design.data.current_project.has_text && Design.data.current_project.has_slides && Cargo.Helper.GetCurrentPageType() =='project' ) {

			$('a[rel="toggle_text"]').removeClass('inactive');

			$('a[rel="toggle_text"]').bind('click dclick', function(event){
				if ( event.type != Design.data.click_event){
					return;
				}

				event.preventDefault();

				if ( Design.data.current_project.has_text && Design.data.current_project.has_slides && Cargo.Helper.GetCurrentPageType() =='project' ){

					if ( $('#project').is('.inactive') ){

						if ( $('#page').is('.inactive') ){
							Design.showProjectContent();
						} else {
							Design.hidePageContent();
							Design.showProjectContent();
						}

					} else {

						if ( !$('#page').is('.inactive') ){
							Design.hidePageContent();
						}
						Design.hideProjectContent();
					}

				}

			});

		} else {

			$('a[rel="toggle_text"]').addClass('inactive');

			$('a[rel="toggle_text"]').bind('click dblclick', function(event){
				if ( event.type != Design.data.click_event){
					return;
				}
				event.preventDefault();
			});

		}


		$('a[rel="prev_project_slides"]').bind('click dblclick', function(event){
			if ( event.type != Design.data.click_event){
				return;
			}

			event.preventDefault();
			Design.prevProject();

		});

		$('a[rel="next_project_slides"]').bind('click dblclick', function(event){
			if ( event.type != Design.data.click_event){
				return;
			}
			event.preventDefault();
			Design.nextProject();

		});


	},

	clickNext: function(){

		if (Design.status.project_in_transition){
			return;
		}


		var current_slick_obj = Design.data.$inner_slideshow.slick('getSlick');
		Design.status.slide_motion_direction = "next";
		var final_slide = current_slick_obj.slideCount -1;

		if ( current_slick_obj.currentSlide >= final_slide && !Design.data.looping_slides ){

			Design.nextProject();

		} else {

			Design.nextSlide();

		}

	},

	clickPrev: function(){

		if (Design.status.project_in_transition){
			return;
		}


		var current_slick_obj = Design.data.$inner_slideshow.slick('getSlick');
		Design.status.slide_motion_direction = "prev";

		var first_slide = 0;

		if ( current_slick_obj.currentSlide <= first_slide && !Design.data.looping_slides ){

			Design.prevProject();

		} else {

			Design.prevSlide();
		}

	},

	nextSlide: function(){

		Design.status.slide_motion_direction = "next";
		Design.data.$inner_slideshow.slick('slickNext');

	},

	prevSlide: function(){

		Design.status.slide_motion_direction = "prev";
		Design.data.$inner_slideshow.slick('slickPrev');

	},

	nextProject: function(){

		if ( Design.status.project_in_transition){
			return;
		}

		Design.status.slide_motion_direction = "next";
		Action.Project.Next();
	},

	prevProject: function(){

		if ( Design.status.project_in_transition){
			return;
		}

		Design.status.slide_motion_direction = "prev";
		Action.Project.Prev();
	},

	resizeContent: function(){
		var $inner_media = Design.data.$inner_slideshow;

		var self = this;
		var scale;
		var project_option;

		if ( typeof Design.data.project_options[Design.data.current_project.pid] !== 'undefined'){

			project_option = Design.data.project_options[Design.data.current_project.pid]['fit']

			if ( project_option ){
				scale = project_option

			} else {
				scale =  Design.data.project_options.defaults.fit ;
			}


		} else {

			scale = Design.data.project_options.defaults.fit;

		}

		if ( typeof self.resize == 'object'){
			self.resize.stop();
		}

		var options = {
			size: scale,
			limit: 'limit',
			parent: Cargo.View.Main.$el.find('#project_media')
		};

		$inner_media.removeClass('dont-resize fit-window fill-window')

		if ( options.size == 'cover'){

			$inner_media.addClass('fill-window')

		} else if (options.size == 'contain') {

			$inner_media.addClass('fit-window')

		} else {

			$inner_media.addClass('dont-resize')
		}

		if (options.size == 'noresize'){

			$inner_media.find('.slick-slide > *').css({
				'width': '',
				'height': '',
				'margin-left': '',
				'margin-top': ''
			})

		} else {

			self.resize = Cargo.Plugins.backgroundSize($inner_media.find('.slick-slide > *'), options);
			self.resize.start();
		}

	},

	calcNavigationWidth: function(){

		if ( window.navigation_width ) {
			Design.data.navigation_width = window.navigation_width
			return;
		}

		Design.data.navigation_width = $('.navigation').outerWidth(true);

	},

	calcMobileBreakpoint: function(){

		// if we have a breakpoint from custom html, return
		if ( window.mobile_breakpoint) {
			Design.data.mobile_breakpoint = window.mobile_breakpoint;
			return;
		}

		// if no thumbnails, then we keep the default and return
		if (  $('#thumbnails .thumbnail').length == 0 ){
			return;
		}

		// if columnizer, we use columnizer values
		if ( Cargo.Model.DisplayOptions.get('fluid_columns') ){

			var target, index
			for(key in Cargo.Plugins.columnizer.getVars().targets){

				target = Cargo.Plugins.columnizer.getVars().targets[key];

				if ( target.selector == ".thumbnail"){
					break
				}
			}

			// get padding & margin from index
			index = $('#thumbnails');

			Design.data.mobile_breakpoint = Math.max(target.width + (index.outerWidth(true) - index.width()), Design.data.mobile_breakpoint)

		} else {

			var thumb_width = Cargo.Model.DisplayOptions.get('thumb_size').w;
			var test_thumb, test_thumb_img, index, two_col_width, margins_padding;

			test_thumb = $('#thumbnails .thumbnail').first();
			test_thumb_img = test_thumb.find('.thumb_image img')

			// if thumb width is undefined, then measure thumbs
			if ( thumb_width == '*'){

				if ( $('#thumbnails .thumbnail').length > 1 ){

					two_col_width = parseInt(test_thumb_img.attr('width')) + parseInt($('#thumbnails .thumbnail .thumb_image img').eq(1).attr('width'));

				} else {

					two_col_width = parseInt(test_thumb_img.attr('width'))*2;

				}

				thumb_width = two_col_width / 2;

			} else {

				// make sure that thumb_width is set to integer
				thumb_width = parseInt(thumb_width);
				two_col_width = thumb_width * 2;
			}

			// get padding & margin from first thumb
			margins_padding =  (test_thumb.outerWidth(true) - test_thumb.width())*2;

			// get padding & margin from index
			index = $('#thumbnails');

			// get padding & margin from .container
			container = $('body > .container');

			if ( thumb_width > 400){

				// Use single thumb for very large thumbnails
				Design.data.mobile_breakpoint = (index.outerWidth(true) - index.width() ) + (container.outerWidth(true) - container.width() ) + thumb_width + margins_padding;

			} else {

				Design.data.mobile_breakpoint = (index.outerWidth(true) - index.width() ) + (container.outerWidth(true) - container.width() ) + two_col_width + margins_padding;

			}


		}

	},

	testMobileBreakpoint: function(){

		var pages_num = $('[data-view="Navigation"].list').children().length;

		var usable_width = $(window).width()
		var mobile_breakpoint = window.mobile_breakpoint || Design.data.mobile_breakpoint || 600;
		var navigation_width = window.navigation_width || Design.data.navigation_width || 300
		var site_header_usable_width = $('.site_header').width();
		site_header_usable_width = site_header_usable_width - $('.information_header > span').width();
		site_header_usable_width = site_header_usable_width *.5;

		if ( (usable_width < mobile_breakpoint || screen.width < mobile_breakpoint) && Design.data.use_mobile_design ) {

			if ( !Design.status.mobile_active){

				$('body').addClass('mobile');
				Design.$project_media.removeClass('hide_cursor')

				if ( Design.status.columnizer_inited){

					Design.setMobileColumns();

				}

				if ( $('body').is('.page_text_visible') && Cargo.Helper.GetCurrentPageType() != "page"){
					Design.hidePageContent();
				}

				if ( Design.data.current_project.has_text ) {
					Design.showProjectContent()
				}

				Design.status.mobile_active = true;
				Design.testSwipeMode()
			}

			Design.mouseIn();

			if ( Cargo.Helper.GetCurrentPageType() =="page" ){
				Design.hideProjectContent()
			}



		} else {

			Design.status.project_nav_animation_run = false;

			if ( Design.status.mobile_active){

				$('body').removeClass('mobile');
				Design.status.mobile_active = false;

				if ( !Design.data.current_project.has_text){
					Design.hideProjectContent();
				}

				if ( Design.status.columnizer_inited){

					Design.setDesktopColumns();

				}

				Design.testSwipeMode()

			}

		}


		// bind and check mobile menu
		if ( Design.data.use_mobile_menu && pages_num > 1 && (Design.status.mobile_active || navigation_width > site_header_usable_width) ){

			if ( !Design.status.mobile_menu_active ){

				$('body').addClass('mobile_menu');
				Design.bindMobileMenu();
				Design.status.mobile_menu_active = true;

				if ( Cargo.Helper.GetCurrentPageType() &&  typeof self.resize == 'object' ){
					Design.resize.refresh()
				}

			}

		} else if ( Design.status.mobile_menu_active ){

			$('body').removeClass('mobile_menu');
			Design.unbindMobileMenu();
			Design.status.mobile_menu_active = false;

			if ( Cargo.Helper.GetCurrentPageType() &&  typeof self.resize == 'object' ){
				Design.resize.refresh()
			}

		}



	},

	setMobileColumns: function(){

		$('#thumbnails').attr("data-columnize-width-desktop", $('#thumbnails').attr("data-columnize-width") )
		$('#thumbnails').attr("data-columnize-width", Design.data.mobile_breakpoint/2)
		Design.updateColumnizerPadding();

	},

	setDesktopColumns: function(){

		if ( !$('#thumbnails').is("[data-columnize-width-desktop]")){
			return
		}

		$('#thumbnails').attr("data-columnize-width", $('#thumbnails').attr("data-columnize-width-desktop") )
		Design.updateColumnizerPadding();
	},

	testSwipeMode: function(){

		if ( !Design.status.project_slick_inited) {
			return
		}

		Design.status.swipe_active = Cargo.Model.DisplayOptions.get('force_swipe_mode') || Cargo.Helper.isMobile() || Design.status.mobile_active  ? true : false;

		// if turning on
		if ( Design.status.swipe_active || Design.status.force_temp_swipe ) {

			$('body').addClass('swipe_active')
			$('#project_nav').attr('style', '');

			Design.data.$inner_slideshow.slick('slickSetOption', 'swipe', true)
			Design.data.$inner_slideshow.slick('slickSetOption', 'touchMove', true)

		}


		// if turning off
		if ( !Design.status.swipe_active && !Design.status.force_temp_swipe ){
			$('body').removeClass('swipe_active')
			$('#project_nav').removeClass('dismissed')

			Design.status.project_nav_animation_run = false;
			Design.status.project_nav_dismissed = false;

			Design.data.$inner_slideshow.slick('slickSetOption', 'swipe', false)
			Design.data.$inner_slideshow.slick('slickSetOption', 'touchMove', false)

		}
	},

	updateColumnizerPadding: function(){

		var padding_left = parseInt($('#offscreen_thumbnail .thumbnail').first().css('padding-left'))
		var padding_right = parseInt($('#offscreen_thumbnail .thumbnail').first().css('padding-right'))

		for(key in Cargo.Plugins.columnizer.getVars().targets){

			var target = Cargo.Plugins.columnizer.getVars().targets[key];

	        for(var i = 0; i < target.children.length; i++){

                (function(child){

                    child.paddingChild.style.removeProperty('padding');

                    target.padding_left = padding_left;
                    target.padding_right = padding_right;

                    child.paddingHelper.style.paddingLeft = padding_left + 'px';
                    child.paddingHelper.style.paddingRight = padding_right + 'px';

                    child.paddingChild.style.paddingLeft = '0px';
                    child.paddingChild.style.paddingRight = '0px';


                    child.hasPaddingHelperListener = true;

                })(target.children[i]);
            }
	    }

	    Cargo.Plugins.columnizer.updateTargets();

	},

	bindPageOverlay: function(){
		$('#page').bind('click dblclick', function(event){

			if ( event.type != Design.data.click_event){
				return;
			}

			if ( $(event.target).is('#page *')){
				return
			} else {
				Design.hidePageContent();
			}
		})
	},

	bindProjectMedia: function(){

		var project_media = Design.$project_media;
		var project_content = $('#project');
		var $project_nav = $('#project_nav');

		var threshold = window.project_media_navigation_threshold || 0.30;

		project_media.bind('mousemove.media', function(event){

			if ( Design.status.swipe_active || Design.status.force_temp_swipe || !Design.status.project_slick_inited  ){
				return
			}

			window.clearTimeout(Design.autoplayTimeoutID);

			var x = Design.data.mouse_position.x;
			var y = Design.data.mouse_position.y;

			var media_offset_left = project_media.offset().left;
			var media_offset_top = project_media.offset().top;
			var media_width = $(this).width();
			var media_height = $(this).height();

			var x_position = (x-media_offset_left)/media_width;
			var y_position = (y-media_offset_top)/media_height;


			if ( x_position <= threshold && !$project_nav.is('.active.left')){

				project_media.addClass('hide_cursor')
				$project_nav.addClass('left').removeClass("right")

			} else if ( x_position >= 1-threshold && !$project_nav.is('.active.right')){

				project_media.addClass('hide_cursor')
				$project_nav.addClass('right').removeClass("left")

			// if not in side threshold zones, base movement on inertia
			} else if (x_position > threshold && x_position < 1-threshold){

				if ( Math.abs(Design.data.mouse_position.last_y - Design.data.mouse_position.y) < 35){

					// moving right
					if ( Design.data.mouse_position.last_x < Design.data.mouse_position.x && (Math.abs(Design.data.mouse_position.min_x - Design.data.mouse_position.x) > 50 || Math.abs(Design.data.mouse_position.last_x - Design.data.mouse_position.x) > 20 ) ){

						project_media.addClass('hide_cursor')
						$project_nav.addClass('right').removeClass("left")
						Design.data.mouse_position.max_x = Design.data.mouse_position.x

					// moving left
					} else if ( Design.data.mouse_position.last_x > Design.data.mouse_position.x && (Math.abs(Design.data.mouse_position.max_x - Design.data.mouse_position.x) > 50 || Math.abs(Design.data.mouse_position.last_x - Design.data.mouse_position.x) > 20) ){

						project_media.addClass('hide_cursor')
						$project_nav.addClass('left').removeClass("right")

						Design.data.mouse_position.min_x = Design.data.mouse_position.x
					}

				}

			}

			$project_nav.css({
				'transform' : 'translate('+x+'px, '+y+'px)'
			})


		})

		project_media.bind('mouseenter.media', function(event){

			if ( Design.status.swipe_active  || Design.status.force_temp_swipe || ($('body').is('.project_text_visible') && Design.data.current_project.has_slides)  || $('body').is('.page_text_visible') || !Design.status.project_slick_inited  ){
				return
			}

			$project_nav.show();
			project_media.addClass('hide_cursor')
			$project_nav.addClass('active')
		});

		project_media.bind('mouseleave.media', function(event){

			if ( Design.status.swipe_active  || Design.status.force_temp_swipe ){
				return
			}

			project_media.removeClass('hide_cursor')
			$project_nav.hide()
		});


		project_content.bind('mouseenter.media mousemove.media', function(event){

			if ( Design.status.swipe_active  || Design.status.force_temp_swipe ){
				return
			}

			project_media.removeClass('hide_cursor')
			$project_nav.hide()
		})

		project_media.bind('click.media dblclick.media', function(event){

			if ( event.type != Design.data.click_event){
				return;
			}

			Design.data.mouse_position.max_x = Design.data.mouse_position.x;
			Design.data.mouse_position.min_x = Design.data.mouse_position.x;

			if ( $('body').is('.mobile_menu_active')){
				Design.toggleNav(true)
				return;
			}

			if ( (Design.status.swipe_active  || Design.status.force_temp_swipe) && !$(event.target).is('video, iframe, object')){

				if ( $('body').is('.page_text_visible') && !Design.status.mobile_active ){

					Design.hidePageContent();

				} else if ( $('body').is('.project_text_visible') && !Design.status.mobile_active && Design.data.current_project.has_slides) {

					Design.hideProjectContent()

				} else {

					Design.clickNext();

				}

			} else if ( $('#project').is('.inactive') ){

				if ($project_nav.is('.right')){
					Design.clickNext();
				} else if ( $project_nav.is('.left')){
					Design.clickPrev();
				}

			} else if ( !Design.data.current_project.has_slides && !Design.status.swipe_active && !Design.status.force_temp_swipe ){

				if ($project_nav.is('.right')){
					Design.clickNext();
				} else if ( $project_nav.is('.left')){
					Design.clickPrev();
				}

				Design.hideProjectContent();
				$project_nav.show();
				project_media.addClass('hide_cursor')
				$project_nav.addClass('active')

			} else if ( !Design.status.swipe_active && !Design.status.force_temp_swipe) {
				Design.hideProjectContent();
				$project_nav.show();
				project_media.addClass('hide_cursor')
				$project_nav.addClass('active')
			}

			event.preventDefault();
		});

	},

	keybindings: function() {

		// Remove previous bindings
		Cargo.Core.KeyboardShortcut.Remove('Escape');
		Cargo.Core.KeyboardShortcut.Remove('Left');
		Cargo.Core.KeyboardShortcut.Remove('Right');

		Cargo.Core.KeyboardShortcut.Remove('Shift+E');
		Cargo.Core.KeyboardShortcut.Remove('J');
		Cargo.Core.KeyboardShortcut.Remove('K');
		Cargo.Core.KeyboardShortcut.Remove('X');


		Cargo.Core.KeyboardShortcut.Add('J', 74, function() {

			if ( lightbox.isActive ){
				return
			}

			if ( Cargo.Helper.GetCurrentPageType() == "project" ){
				Design.clickNext();
			} else {
				Action.Project.Next();
			}
			return;

		});

		Cargo.Core.KeyboardShortcut.Add('K', 75, function() {

			if ( lightbox.isActive ){
				return
			}

			if ( Cargo.Helper.GetCurrentPageType() == "project" ){
				Design.clickPrev();
			} else {
				Action.Project.Prev();
			}

			return;
		});

		Cargo.Core.KeyboardShortcut.Add('Left', 37, function() {

			if ( lightbox.isActive ){
				return
			}

			Design.clickPrev();
			return false;
		});

		Cargo.Core.KeyboardShortcut.Add('Right', 39, function() {

			if ( lightbox.isActive ){
				return
			}

			Design.clickNext();
			return;
		});


		Cargo.Core.KeyboardShortcut.Add('Escape', 27, function() {

			// Don't go to index if lightbox is open
			if ( lightbox.isActive ){
				return
			}


			if ( $('body').is('.page_text_visible') ){
				Design.hidePageContent();
			} else if ( $('body').is('.project_text_visible')){
				Design.hideProjectContent();
			} else {
				Action.Project.Index();
			}


		});

		Cargo.Core.KeyboardShortcut.Add('X', 88, function() {

			// Don't go to index if lightbox is open
			if ( lightbox.isActive ){
				return
			}


			if ( $('body').is('.page_text_visible') ){
				Design.hidePageContent();
			} else if ( $('body').is('.project_text_visible')){
				Design.hideProjectContent();
			} else {
				Action.Project.Index();
			}


		});


		Cargo.Core.KeyboardShortcut.Add("Shift+E", 69, function() {

			if( Cargo.Model.Site.GetIsEditor() && Cargo.Model.Project.GetId() && parent.location == window.location) {

				if ( $('#page').is('.inactive')){

					Cargo.Helper.GoToUrl("admin/"+Cargo.Model.Project.GetId());

				} else {

					Cargo.Helper.GoToUrl("admin/"+ $('#page .entry').attr('data-id'));

				}

			}
		});


	},

	formatThumbnails: function() {

		var $thumbs = $('#thumbnails .thumbnail[data-formatted!="true"]');


		$thumbs.each(function(index) {

			if ($(this).find('.thumb_image img').attr('src') == '/_gfx/thumb_custom.gif' || $(this).find('.thumb_image img').attr('data-src') == '/_gfx/thumb_custom.gif') {
				$(this).addClass('default_thumb');
				$(this).css('max-width', '320px');
			}



			$('.thumb_info_wrapper', this).bind('click.thumb_info dblclick.thumb_info', function(event){

				if ( !$(event.target).is('a') && event.type == Design.data.click_event ){

				    Cargo.Event.trigger('add_history', $(this).closest('.thumbnail').find('a[rel="history"]').attr('href'));

				}

			});

		});
		$('#thumbnails .thumbnail[data-formatted!="true"]').attr('data-formatted', 'true').css('visibility', 'visible');
	},

	loadLazyThumbnails: function(){

		if ( !Cargo.Model.DisplayOptions.get('lazyload_images')){
			return
		}

		var $thumbs = $('#thumbnails .thumbnail[data-lazyloaded!="true"]');
		var image_list = [];
		var columns = 0;
		if ( Cargo.Model.DisplayOptions.get('fluid_columns') ){
			columns = $('#thumbnails .column').length
		}

		if (!Cargo.Model.DisplayOptions.get('thumbnail_sequential_lazyload') ||  !Cargo.Model.DisplayOptions.get('fluid_columns') ){

			$thumbs.each(function(index) {

				image_list.push($(this).find('.thumb_image img')[0] )

			});

		} else if ( Cargo.Model.DisplayOptions.get('fluid_columns' ) ){

			var columns_index_array = new Array(columns)
			var longest_column = 0;

			for (var i = 0; i< columns; i++){

				columns_index_array[i] = $('#thumbnails #column_'+ (i + 1) ).find('.thumbnail').length
				longest_column = Math.max(columns_index_array[i], longest_column);

			}

			for (var j=0; j<longest_column; j++){
				var $thumb_image

				for (var k=0; k< columns; k++){
					var column_index = k+1;

					$thumb_image = $('#column_'+column_index +' .thumbnail .thumb_image img').eq(j)
					if ( $thumb_image.length > 0){

						image_list.push($thumb_image[0])
					}

				}

			}

		}

		if ( image_list.length > 0 ){

			var imageload = mbl(image_list, {
				sequential: Cargo.Model.DisplayOptions.get('thumbnail_sequential_lazyload')
			});


			imageload.on('success', function(data) {

				$(data.element).closest('.thumbnail').removeClass('individual_loading')

			})

			imageload.on('complete', function(){
				$('.thumbnail.loading').removeClass('loading')
			})

			imageload.start();

		}

		$('#thumbnails .thumbnail[data-lazyloaded!="true"]').attr('data-lazyloaded', 'true');

	},

	formatNavigation: function() {

		if ( Cargo.Model.DisplayOptions.get('use_set_links') ) {

			if ( Cargo.Model.DisplayOptions.get('projects_in_text_nav') === false ) {
				$('.set_link').addClass('no_projects');
			}

			$('.set_link').each(function(i){

				if ( $(this).prev().not('.set_wrapper, .set_link.no_projects').length > 0 ) {
					$(this).addClass('first')
				}

				if ( $(this).next().not('.set_link').length > 0 ) {
					$(this).addClass('last')
				}

			})

		}

		$('.navigation .set_link a').unbind('click.set dblclick.set');
		$('.navigation .set_link a').bind('click.set dblclick.set', function(event){

			if ( event.type != Design.data.click_event){
				return;
			}

			var pid = $(this).attr('data-id');

			if ( pid == Cargo.API.Config.set_id ){
				event.preventDefault();
				Action.Project.Index();
			}


		});

		$('.navigation a[rel="page_open"]').unbind('click.page dblclick.page');
		$('.navigation a[rel="page_open"]').bind('click.page dblclick.page', function(event){

			if ( event.type != Design.data.click_event){
				return;
			}

			event.preventDefault();
			var pid = $(this).attr('data-id');

			if ( Design.status.mobile_active ){

				Design.hideProjectMedia();

				if ( $('body').is('.project_text_visible')){

					Design.hideProjectContent();

				}

			    Cargo.Event.trigger('add_history', $(this).attr('href'));

			} else if ( $('#page .entry').attr('data-id') !=pid ) {

				if ( Cargo.API.Config.is_domain ){
					history.pushState(null, null, Cargo.Helper.GetActiveIndex(true) + Cargo.Collection.Pages.get(pid).get('project_url'))

				} else {
					history.pushState(null, null, Cargo.Helper.GetActiveIndex(true) + '/'+ Cargo.Collection.Pages.get(pid).get('project_url'))

				}


				if ( $('body').is('.project_text_visible')){

					Design.hideProjectContent();

				}

				Design.loadPage(pid)

			} else {
				Design.showPageContent();
			}

		});

		$('a[rel="show_index"]').unbind('click.page dblclick.page');
		$('a[rel="show_index"]').bind('click.page dblclick.page', function(event){
			if ( event.type != Design.data.click_event){
				return;
			}

			Design.hidePageContent()

		});

		$('.information_header').unbind('click.page dblclick.page');
		$('.information_header').bind('click.page dblclick.page', function(event){
			if ( event.type != Design.data.click_event){
				return;
			}

			if ( Design.status.mobile_active && $('body').is('.page_text_visible')){

				Design.hidePageContent();

			}

		});


		$('.navigation .index_link a').text(Cargo.Model.DisplayOptions.get('index_in_text_nav').index_text)

		if ( Cargo.Helper.IsSololink() ){
			$('.navigation .project_link').remove();
		}

	},

	updateMenuOptions: function(){

		if ( !Design.status.variables_loaded ){
			return;
		}

		var project_option

		if ( Cargo.Helper.GetCurrentPageType() == 'project' && typeof Design.data.project_options !== 'undefined' ){

			project_option = Design.data.project_options[Design.data.current_project.pid]

			if (typeof project_option !== 'undefined'){

				_.each(_.keys(project_option), function(name){

					$('[data-option="'+name+'"][data-radio]').removeClass('selected');
					$('[data-option="'+name+'"][data-radio][data-value="'+project_option[name]+'"]').addClass('selected');

					if ( project_option[name] == true) {
						$('[data-option="'+name+'"][data-checkbox]').addClass('selected');
					} else {
						$('[data-option="'+name+'"][data-checkbox]').removeClass('selected');
					}

				})

			} else {

				// nothing set, so we use the defaults and then save them
				_.each(_.keys(Design.data.project_options.defaults), function(name){

					$('[data-option="'+name+'"][data-radio]').removeClass('selected');
					$('[data-option="'+name+'"][data-radio][data-value="'+Design.data.project_options.defaults[name]+'"]').addClass('selected');

					if ( Design.data.project_options.defaults[name] == true) {
						$('[data-option="'+name+'"][data-checkbox]').addClass('selected');
					} else {
						$('[data-option="'+name+'"][data-checkbox]').removeClass('selected');
					}

				})

				if ( Cargo.Helper.GetIsEditor() ){
					Design.updateProjectOption();
				}

			}

			if ( Cargo.Helper.GetIsEditor() ){
				$('#design_options').hide();
				$('a#design_symbol').show();
			}

		} else {
			$('#design_options').hide();
			$('a#design_symbol').hide();

		}
	},

	loadVariables: function(){

		if ( Design.status.variables_loaded ){
			return
		}

		// grab variable from window if it exists
		if(typeof window.projects_data !== 'undefined') {

			Design.data.project_options = window.projects_data

		} else {

			Design.data.project_options = {
				defaults: {
					fit: "cover",
					autoplay: false
				}
			}

		}
		Design.status.variables_loaded = true

	},

	updateProjectOption: function(){

		if ( !Design.status.variables_loaded ) {
			return;
		}

		var project_data = {}

		var fit_value = $('[data-option="fit"].selected').first().attr('data-value');
		var autoplay_value = $('[data-option="autoplay"]').is('.selected') ? true : false;

		project_data[Design.data.current_project.pid] = {
			fit: fit_value,
			autoplay: autoplay_value
		}

	    Design.data.project_options = $.extend({}, Design.data.project_options, project_data);
		Design.data.project_options.defaults.fit = fit_value ? fit_value : 'cover' ;
		Design.data.project_options.defaults.autoplay = typeof autoplay_value != 'undefined' ? autoplay_value : false;

	},

	setSaveTimer: _.debounce(function() {
	    this.saveFile();
	}, 1500),

	saveFile: function(){

		var file_data = 'var projects_data = ' +JSON.stringify(Design.data.project_options);

		Cargo.API.PutSiteFile('orion_data.js', file_data, function(){

		});

	},

	mouseMove: function(event){

		var x = event.clientX;
		var y = event.clientY;

		if ( Design.data.mouse_position.x == -1){

			Design.data.mouse_position = {
				last_x: x,
				last_y: y,
				x: x,
				y: y,
				max_x: x,
				min_x: y
			}

		}

		Design.data.mouse_position.last_x = Design.data.mouse_position.x
		Design.data.mouse_position.last_y = Design.data.mouse_position.y
		Design.data.mouse_position.x = x;
		Design.data.mouse_position.y = y;

		// https://matthewspencer.github.io/mouse-move-in-safari/
		if ( Design.data.mouse_position.last_x == x && Design.data.mouse_position.last_y == y){
			return
		}

		if ( !Design.status.mouse_over_window ){
			Design.mouseIn();

		}

		if ( $(event.originalEvent.target).closest('[data-cancel-fade]').length > 0 ) {

			Design.status.mouse_fadeout_canceled = true;

		} else {

			Design.status.mouse_fadeout_canceled = false;
		}

		Design.setMouseAwayTimeout();

	},

	setMouseAwayTimeout: function(){
		window.clearTimeout(Design.timeFadeOutID)
		Design.timeFadeOutID = null;
		Design.timeFadeOutID = window.setTimeout( function(){

			if ( !Design.status.mouse_fadeout_canceled && Cargo.Helper.GetCurrentPageType() == 'project' && !Design.status.mobile_active ){

			    Design.mouseAway();
			}

		}, window.mouse_timeout || 1500)
	},

	mouseAway: function(){
		Design.toggleNav(true);
		Design.status.mouse_over_window = false;
		$('body').addClass('mouse_away');
		Design.autoPlaySlideshow()

		// Reset min-max of mouse position to remove tolerance from movement
		Design.data.mouse_position.min_x = -100
		Design.data.mouse_position.max_x = -100

	},

	mouseIn: function(){
		Design.status.mouse_over_window	= true;
		$('body').removeClass('mouse_away');
	},

};



/**
 * Events
 */

$(window).bind('mousemove', function(event){
	Design.mouseMove(event)
});

$(window).bind('mouseout', function(event){

	if ( event.toElement ){
		return;
	}

	Design.status.mouse_over_window = false;

	if ( $('body').is('[data-cancel-fade]') ){
		Design.status.mouse_fadeout_canceled = true;
	} else {
		Design.status.mouse_fadeout_canceled = false;
	}

	Design.setMouseAwayTimeout();
});

$(window).bind('mouseenter', function(event){
	if ( $(event.originalEvent.target).closest('[data-cancel-fade]').length > 0){
		Design.status.mouse_fadeout_canceled = true;
	}
});

Cargo.Event.on('show_index_complete', function(pid) {

	if ( !Design.status.init_complete ){
		return
	}

	Design.data.current_project = {
			pid: null,
			has_multiple_slides: false,
			has_slides: false,
			has_text: false,
			slides: 0,
			project_text: null,
			last_slide_index: -1,
	}

	Design.showThumbnails();
	Design.hidePageContent();
	Design.hideProjectContent();
	Design.hideProjectMedia();
	$('body').removeClass('no_slide_content no_text_content');
	$('#project_nav').removeClass('animation active left right').attr('style','')
	Design.updateMetaNav();
	Design.data.preload_queue = [];
	window.clearTimeout(Design.autoplayTimeoutID);
	Design.toggleNav(true)
	Design.updateMenuOptions();
	$('a[rel="toggle_text"] .project_title').text('');
	Design.unbindButtons();
	Design.data.current_project.pid = null;
});

$(function() {

	Design.status.document_ready = true;

	if (( Design.status.columnizer_inited && Design.status.document_ready) || !Cargo.Model.DisplayOptions.get('fluid_columns') || $('[data-columnize]').length == 0){
		Design.init();
	}


	// Init editor panel
	if ( Cargo.Helper.GetIsEditor() ){

		if ( Cargo.Helper.IsAdminEditProject() ){
			$('#design_panel').addClass('no_toolset')
		}

		$('a#design_symbol').click(function(e){
		   e.preventDefault();
		   e.stopPropagation();
		   $(this).hide();
		   $('#design_panel #design_options').show();

		   $(document).bind('mousedown.closemenu', function(e){
		        if ( !$(e.target).is('#design_panel, #design_panel *') ){
					e.preventDefault();
					e.stopPropagation();
		            $('a#design_symbol').show();
		            $('#design_panel #design_options').hide();

		            $(document).unbind('mousedown.closemenu');
		        }
		    });
		});

		$('#design_panel a.option').bind('click', function(e){

			e.preventDefault();
			var optionType = $(this).attr('data-option');


			if ( $(this).is('.selected') && $(this).is('[data-checkbox]') ){
				$('a[data-option="'+optionType+'"]').removeClass('selected');
			} else {
				$('a[data-option="'+optionType+'"]').removeClass('selected');
				$(this).addClass('selected');
			}

			Design.updateProjectOption();

			if ( optionType == 'fit'){
				Design.resizeContent();
			}

			if ( optionType == 'autoplay'){
				Design.autoPlaySlideshow();
			}

			Design.setSaveTimer();
		});

	} else {

		$('#design_panel').remove();

	}

});

Cargo.Event.on('columnizer_update_complete', function(){

	if ( !Design.status.columnizer_inited ){

		Design.status.columnizer_inited = true;

		if (Design.status.columnizer_inited && Design.status.document_ready){

			Design.init();
		}
	}

	Design.status.columnizer_inited = true;
});

$(window).bind("popstate", function() {

	var current_project_pid = Cargo.Helper.GetCurrentProjectId() == 0 || Cargo.Helper.GetCurrentPageType() != "project" ? false : Cargo.Helper.GetCurrentProjectId();
	var current_page_pid = !$('#page').is('.inactive') ? parseInt($('#page .entry').attr('data-id')) : false;

	var url_project_pid = false
	var project_model = Cargo.Collection.Projects.where({project_url: document.location.pathname.split("/").pop() })
	if (project_model[0]) {
		url_project_pid = project_model[0].get('id')
	}

	var url_page_pid = false;
	var page_model = Cargo.Collection.Pages.where({project_url: document.location.pathname.split("/").pop() })
	if (page_model[0]) {
		url_page_pid = page_model[0].get('id')
	}

	// if there's a page or project to go to
	if ( url_page_pid || url_project_pid ){

		// if there's a page open and we want to open the previous page, simply keep the overlay open
		if ( current_page_pid && url_page_pid ){
			Design.loadPage(url_page_pid);

		// if there's only a project open and we want to open a page, open the overlay
		} else if (current_project_pid && url_page_pid){
			Design.showPageContent();

		// if there's a page open and we want to show a project, close the overlay
		} else if ( current_page_pid && url_project_pid ){
			Design.hidePageContent()

		}

	} else {

		// if there's no destination page or project, check if there's a currently-open page and close it
		if ( current_page_pid){
			Design.hidePageContent()
		}
	}

});


$(window).bind('resize', function(){
	Design.removeProjectContentTransiton()
	Design.restoreProjectContentTransition()
	Design.testMobileBreakpoint();
});


Cargo.Event.on('element_resizer_init', function(plugin) {

	plugin.setOptions({
	    minimumHeight: 25,
	    centerElements: false,
		adjustElementsToWindowHeight: false
	});

});

Cargo.Event.on('pagination_complete', function() {

	Design.formatThumbnails();
	Design.loadLazyThumbnails();

});

Cargo.Event.on('fullscreen_destroy_hotkeys', function() {

	Design.keybindings();

});


Cargo.Event.on('project_load_start', function(pid) {

	Design.unbindButtons();

});


Cargo.Event.on('project_load_complete', function(pid) {

	// used to control for document ready/ project load race condition
	if ( !Design.status.init_complete ){
		Design.status.attempted_project_load = true;
		return
	}

	Design.scrollToTop(0)

	$('body').removeClass("project_text_visible");

	// hack to override view behavior
	if ( !Design.status.mobile_active ){

		$('#project').hide().addClass('inactive');
	}

	if ( Design.status.mobile_menu_active ){
		Design.toggleNav(true);
	}

	if ( Cargo.Helper.GetCurrentPageType() == 'project'){

		Design.hidePageContent();
		Design.data.current_project.pid = pid;
		Design.updateMenuOptions();


		if ( !Design.status.slick_inited ){
			Design.$project_media.show();

			Design.setOptions();
			Design.initSlick();

		}

		Design.preLoad();
		Design.splitProjectContent();
		Design.testSwipeMode();
		Design.resizeContent();
		Design.data.$inner_slideshow.slick('setPosition')


		if ( Design.data.current_project.has_text && Design.data.current_project.has_slides ){

			$('body').removeClass('no_text_content no_slide_content')

			if ( Design.status.mobile_active ){
				Design.showProjectContent();
			} else {
				Design.hideProjectContent();
			}

		} else if (!Design.data.current_project.has_text && Design.data.current_project.has_slides) {

			$('body').addClass('no_text_content').removeClass('no_slide_content')

			Design.hideProjectContent();

		} else if ( Design.data.current_project.has_text && !Design.data.current_project.has_slides) {

			$('body').addClass('no_slide_content').removeClass('no_text_content')

			Design.showProjectContent();

		} else if ( !Design.data.current_project.has_text && !Design.data.current_project.has_slides) {

			$('body').addClass('no_text_content no_slide_content')

		}

		if ( Design.$project_media.is('.inactive') || !Design.$project_media.is(':visible')){
			Design.showProjectMedia();
		}

		// allow for Cargo selections on slides
		Cargo.Rail.Init();


		Design.bindButtons();


		if ( typeof Design.resize == 'object' ){
			Design.resize.refresh()
		}

		if ( Cargo.Model.DisplayOptions.get('photoswipe_view') ){
			Design.initLightBox()
		}
		Design.initProjectFullScreen();

	} else if (Cargo.Helper.GetCurrentPageType() == 'page'){

		Design.loadPage(pid, true)

	}

	Design.updateMetaNav();

	// Timeout to make sure that thumbnails are laid out correctly, if columnized
	setTimeout(function(){
		Design.listenToThumbIndexTransition();
		Design.hideThumbnails();
	}, 150)

	// Remove active state on Set link since thumbnails are hidden
	$('.set_link.active').removeClass('active');
	// setup background color

	var bgColorString;
	var bgColorStyleTags = $('style[id="site_bg_color"]', Cargo.View.ProjectDetail.$el);

	// Fix for double-rendering of style tags
	if ( bgColorStyleTags.length > 1){
		bgColorStyleTags.not(':first').remove();
	}

    if ( $('#site_bg_color', Cargo.View.ProjectDetail.$el).length > 0 ){
	    bgColorString = '#project { background-color: ' + Cargo.Model.Project.GetBgColor() + "}";
		$('#site_bg_color', Cargo.View.ProjectDetail.$el).text(bgColorString);
    }

});

Cargo.Event.on('navigation_reset', function() {
    Design.formatNavigation();
});

Cargo.Event.on('reseed_project_complete', function(){
	Design.testMobileBreakpoint();
	Design.formatThumbnails();
	setTimeout(function(){
		Design.testMobileBreakpoint();
		Design.loadLazyThumbnails();
	}, 10)

});

Cargo.Event.on('project_collection_reset', function() {
	Design.formatThumbnails();
	Design.loadLazyThumbnails();
});

// Re-trigger start page active state after nav is reloaded
Cargo.Event.on('navigation_reset project_load_complete', function(){
    if ( $('body').is('.start_project') || Cargo.Helper.IsOnStartProject() ) {
        $('#menu_' + Cargo.Helper.GetStartProjectId() ).addClass('active');
    }
});


Cargo.Event.on('inspector_open', function() {
	Design.status.inspector_open = true;
	Design.data.click_event = "dblclick";
	$('#design_panel').remove();
});


var lightbox_inited = false;
Cargo.Event.on('lightbox-closing', function(lightbox) {

	$('body').css('overflow', '')
	target_img = $(lightbox.currItem.el);

	if (target_img.length > 0 ){
		$(window).scrollTop(Math.max(target_img.offset().top - ( ($(window).height() - target_img.height())/2), 0))

	}

	lightbox_inited = false;

});

Cargo.Event.on('lightbox-slide-change', function(lightbox){

	$('body').css('overflow', 'hidden')
	target_img = $(lightbox.currItem.el);

	if (target_img.length > 0 && lightbox_inited ){

		$(window).scrollTop(Math.max(target_img.offset().top - ( ($(window).height() - target_img.height())/2), 0))

	}

});

Cargo.Event.on('lightbox-after-init', function(lightbox){
	lightbox_inited = true;
});



// project transition
Cargo.Event.ShowProjectTransition = function(pid, project_markup, project_model) {

	if ( $('#project').is('.inactive') ){

		Design.status.waiting_on_transition = false;
		Cargo.Event.ProjectTransition.resolve();

	} else {

		Design.status.waiting_on_transition = true;
		Design.hideProjectContent();

	}

	// set timeout in case project has mismatching transition properties
// 	Design.projectContentTransitionTimeout = window.setTimeout(Design.projectContentTransitionEnd, duration_ms + 120)

	return Cargo.Event.ProjectTransition.promise();
}

Cargo.Event.ShowIndexTransition = function(pid, project_model) {


	if ( $("#project").is('.inactive') ){

		Design.status.waiting_on_transition_index = false;
		Cargo.Event.IndexTransition.resolve();

	} else {

		Design.status.waiting_on_transition_index = true;
		Design.hideProjectContent();

	}

	return Cargo.Event.IndexTransition.promise();
}


// Youtube iframe API integration
function onYouTubeIframeAPIReady() {

	Design.status.yt_loaded = true;
	var current_slick_obj;

	if ( Design.status.project_slick_inited && Design.youtube_vid== false) {

		current_slick_obj = Design.data.$inner_slideshow.slick('getSlick');

		if ( current_slick_obj.$slides.eq(current_slick_obj.currentSlide).find('[data-youtube]').length > 0){
			// reset bindings for Youtube
			Design.tearDownMediaPlayers(current_slick_obj.currentSlide)
			Design.unbindMediaAndCaption();
			Design.bindMediaAndCaption(current_slick_obj.currentSlide)
		}

	}

}


/**
 * Shuffling
 * http://css-tricks.com/snippets/jquery/shuffle-dom-elements/
 */

(function($){

	$.fn.shuffle = function() {

		var allElems = this.get(),
			getRandom = function(max) {
				return Math.floor(Math.random() * max);
			},
			shuffled = $.map(allElems, function(){
				var random = getRandom(allElems.length),
					randEl = $(allElems[random]).clone(true)[0];
				allElems.splice(random, 1);
				return randEl;
			});

		this.each(function(i){
			$(this).replaceWith($(shuffled[i]));
		});

		return $(shuffled);

	};

})(jQuery);

// easeOutExpo Easing
jQuery.extend( jQuery.easing,
{
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
});
