(function($) {
	$.typekitHasLoadedCallback = function() {
		// setTimeout is used because even though the callback from timekit is called,
		// it seems like chrome uses some time to render the font
		setTimeout(function(){
            if($('#navigation li:last').is('.selected')){
                $('#navigation').each(function(){
                    var width = $(this).width();
                    $(this).find('li').each(function(){
                        width -= $(this).width();
                    });
                    $(this).find('li:last').width($(this).find('li:last').width()+width);
                });
            }
            
        }, 50);
	};

    setTimeout(function(){
        if($('#navigation li:last').is('.selected')){
            $('#navigation').each(function(){
                var width = $(this).width();
                $(this).find('li').each(function(){
                    width -= $(this).width();
                });
                $(this).find('li:last').width($(this).find('li:last').width()+width);
            });
        }
    },1000);


	$.extend({
		settings: {
			actions: {
				share: 	'/blog/share',
				send_cv:	'promoter'
			},
			
			services: {
				navigation_speed: 250,
				navigation_extra_delay: 20
			},
			
			linklist: {
				fadein_speed: 300,
				fadeout_speed: 250,
				expandable: {
					count: 10,
					speed: 400
				}
			}
		}
	});
	
	
	$.fn.extend({
			
			/* Ken burns slideshow */
			kenburns: function(options) {
				$settings = {
					zoom: 1.1,
					first_delay: 10000,
					delay: 7000,
					links: false
				}
				
				$.extend($settings, options);
				
				var slide 			= this;
				var $slide			= $(this);
				var $imagesdiv 		= $slide.find('.images');
				var $images			= $imagesdiv.find('div');
				var $navigation		= $slide.find('.navigation');
				var dark_overlay 	= $slide.find('.dark_overlay');
				var curimg 			= 0;
				var interval;
				
				// Next image
				slide.next = function() {
					if(curimg == $images.length-1) {
						i = 0;
					} else {
						i = curimg+1;
					}
					
					if(!$slide.hasClass('active') && !$settings.links) {
						$slide.addClass('active');
					}
					
					slide.change(i, true);
				}
				
				// Change image
				slide.change = function(i, animation) {
					curimg = i;
					newimg = $images.filter('#slide-'+curimg);
					
					$slide  .find('.slide_navigation a')
							.removeClass('selected')
							.eq(curimg)
							.addClass('selected');
					
					var newimg_img = newimg.find('img');
					
					$imagesdiv.append(newimg);
					
					if(animation) {
						newimg.hide().fadeIn();
						
						var w = newimg.width();
						var h = newimg.height();
						
						var start_top   	= (((h*$settings.zoom)-h)/2)*-1;
						var start_left  	= (((w*$settings.zoom)-w)/2)*-1;
						var start_width 	= w*$settings.zoom;
						var start_height 	= h*$settings.zoom;
						
						newimg_img.css({
							width: 		start_width,
							height: 	start_height,
							left: 		start_left+'px',
							top: 		start_top+'px'
						});
						newimg_img.animate({
							width: w,
							height: h,
							left: 0,
							top: 0
						}, 500, 'easeOutCirc');
					}
				}
				
				// Dark overlay hover
				slide.init_hovereffect = function() {
					var org_opacity = 0.3;
					dark_overlay.css('opacity', org_opacity).show();
					
					$slide.mouseenter(function() {
						$navigation.stop(true,true).animate({'right': '25px'}, 150);
						dark_overlay.stop(false, true).animate({'opacity':'0'});
					});
					$slide.mouseleave(function() {
						$navigation.stop(true,true).animate({'right': '30px'}, 150);
						if(!$slide.hasClass('active'))
							dark_overlay.stop(false, true).animate({'opacity':org_opacity});
					});
				}
				
				// Initialize buttons and slideshow
				slide.init = function() {
					interval = setTimeout(function() {
						interval = setInterval(slide.next, $settings.delay);
						slide.next();
					}, $settings.first_delay);
					
					slide.init_hovereffect();
					
					if($settings.links) {
						$slide.find('.navigation .next, .dark_overlay, .images *').click(function(e) {
							e.preventDefault();
							document.location.href = $images.filter('#slide-'+curimg).find('a').attr('href');
						});
					} else {
						$slide.find('.navigation .next, .dark_overlay, .images *').click(function(e) {
							e.preventDefault();
							clearInterval(interval);
							slide.next();
						});
					}
					
					$slide.find('.slide_navigation a').click(function(e) {
						e.preventDefault();
						var val = parseInt($(this).text()-1);
						if(val == curimg)
							return;
						
						clearInterval(interval);
						slide.change(val, true);
					});
					
					dark_overlay.click(function(e) {
						e.preventDefault();
					});
					
					slide.change(0, false);
				}
				
				slide.init();
			},
			
			/* Tabpanel */
			tabpanel: function() {
				return $(this).each(function() {
					var tabpanel = this;
					var $tabpanel 	= $(this);
					var $tabs		= $tabpanel.find('.tabs li a');
					var $panels		= $tabpanel.find('.panels .panel');
					
					var fade_speed = 250;
					
					var changetab = function(panel_id, fade) {
						$tabs.parent().removeClass('selected');
						
						$tabs.filter('a[href$='+panel_id+']').parent().addClass('selected');
						
						$panels.parent().css('height', $(panel_id).height());
						$panels.not(panel_id).fadeOut(fade_speed);
						
						if(fade) {
							$(panel_id).fadeIn(fade_speed);
						} else {
							$(panel_id).show();
						}
					}
					
					$tabs.click(function(e) {
						e.preventDefault();
						var panel_id = '#'+$(this).attr('href').split('#')[1];
						window.location.hash = panel_id;
						changetab(panel_id, true);
					});
					
					var init = function() {
						$panels.css({
							position: 'absolute',
							top: 0,
							left: 0
						});
						if(window.location.hash) {
							changetab(window.location.hash);
						} else {
							changetab('#'+$tabs.eq(0).attr('href').split('#')[1]);
						}
						
						$(window).scrollTop(0);
					}
					
					init();
				});
			},
			
			/* Wrapping inputs in containing div */
			wrap_input: function(label) {
				return $(this).each(function() {
					var input = this;
					var div = $('<div class="input_wrap '+$(this).attr('type')+' '+$(this).attr('id')+'"></div>');
					var labelelement = $("label[for='"+$(this).attr('id')+"']");
					
					$(this).wrap(div);
					var divwrapper = $(this).parent();
					
					if(label && labelelement.length > 0) {
						divwrapper.prepend(labelelement);
						$(this).focus(function() {
							labelelement.fadeOut(250);
						});
						$(this).blur(function() {
							if($(this).val().length === 0) {
								labelelement.fadeIn(250);
							} else {
								labelelement.fadeOut(250);
							}
						}).trigger('blur');
					}
				});
			},
			
			/* Nice hovereffect on linklists (sidebar) */
			linklist_hovereffect: function() {
				return $(this).each(function() {
					var $this = $(this);
					var html = $this.html();
					var hoverel = $('<span class="hovereffect"></span>');
					var labelel = $('<span class="label">'+html+'</span>');
					
					$this.html('');
					$this.append(hoverel);
					$this.append(labelel);
					$this.addClass('hoverable');
					
					$this.mouseenter(function() {
						hoverel
							.stop(true, true)
							.css({
								'opacity': 0,
								'width': '30%'
							})
							.animate({
								'width': '100%',
								'opacity': 1
						}, $.settings.linklist.fadein_speed);
					});
					
					$this.mouseleave(function() {
						hoverel.animate({
								'opacity': 0
						}, $.settings.linklist.fadeout_speed);
					});
				});
			},
			
			
			/* Adding rounded corners */
			corners: function() {
				return $(this).each(function() {
					var $el = $(this);
					
					$el.append($('<span class="corner tl"></span>'));
					$el.append($('<span class="corner tr"></span>'));
					$el.append($('<span class="corner bl"></span>'));
					$el.append($('<span class="corner br"></span>'));
					
					var corners = $el.find('.corner');
					
					var size = corners.width();
					corners.filter('.bl').css('backgroundPosition', '0px -'+size+'px');
					corners.filter('.tr').css('backgroundPosition', '-'+size+'px 0px');
					corners.filter('.br').css('backgroundPosition', '-'+size+'px -'+size+'px');
				});
			},
			
			/* Flipeffect for case customers */
			case_customers: function() {
				return $(this).each(function() {
					var $customer = $(this);
					var top = 0;
					var $info = $customer.find('.info');
					
					var animation_speed = 200;
					var easing = 'easeOutCubic';
					
					
					$(this).mouseenter(function() {
						$info.stop(true,false).animate({
							'top': 0
						}, animation_speed, easing);
					});
					$(this).mouseleave(function() {
						$info.stop(true,false).animate({
							'top': 212
						}, animation_speed, easing);
					});
				});
			},
			
			/* Share on facebook and twitter in blog */
			blog_sharebutton: function() {
				var share;
				var timeout;
				
				$.get($.settings.actions.share, null, function(response) {
					share = $(response);
					$('body').append(share);
				});
				
				return $(this).each(function() {
					$(this).click(function(e) {	
						e.preventDefault();
						
						var url = $(this).parents('.article').find('h4 a').attr('href');
						
						
						share.find('#fb_share').attr('share_link', url);
						share.find('#twitter_share').attr('href', 'http://twitter.com/home?status='+url);
						
						share.hide().fadeIn().css({
							left: ($(this).offset().left - 20 - share.width()),
							top: ($(this).offset().top)
						});
					});
				});
			},
			
			
			/* Expand categories in blog sidebar */
			expand_linklist: function() {
				return $(this).each(function() {
					var show_speed 		= $.settings.linklist.expandable.speed;
					var show_count 		= $.settings.linklist.expandable.count;
					
					var expanded = false;
					
					var $list = $(this);
					var $show_all = $list.find('.show_all a');
					var $expandable = $list.find('li').eq(show_count-1).nextAll().not('.show_all');
					
					if($expandable.length < 1) {
						$show_all.hide();
						return;
					}
					
					$expandable.hide();
					
					$show_all.click(function(e) {
						e.preventDefault();
						$expandable.slideToggle(show_speed);
						if(expanded == true) {
							expanded = false;
							$show_all.text('+ Vis alle kategorier');
						} else {
							expanded = true;
							$show_all.text('- Vis færre kategorier');
						}
					});
				});
			},
			
			/* Dropdown-like effect on services */
			services_navigation: function() {
				var $nav = $(this);
				var speed = $.settings.services.navigation_speed;
				
				var $submenus = $nav.find('.service .submenu');
				var submenu_height = 0;
				
				/* Find height og highest submenu */
				for(var i = 0, len = $submenus.length; i < len; i++) {
					$submenu = $submenus.eq(i);
					if($submenu.height() > submenu_height)
						submenu_height = $submenu.height();
				}
				
				/* Set submenu heights to highest submenu */
				$submenus.height(submenu_height);
				
				$nav.find('.service').each(function() {
					var $service = $(this);
					var $submenu = $service.find('.submenu');
					
					var visible_css = {
						marginTop: $submenu.css('marginTop'),
						marginBottom: $submenu.css('marginBottom'),
						paddingTop: $submenu.css('marginTop'),
						height: submenu_height,
						opacity: 1
					}
					var hidden_css = {
						marginTop: 0,
						marginBottom: 0,
						paddingTop: 0,
						height: 0,
						opacity: 0
					}
					
					$submenu.css(hidden_css);
					
					$service.mouseenter(function() {
						$service.addClass('open');
						$submenu.show().animate(visible_css, speed);
						//$submenu.fadeIn().slideDown(speed);
					});
					
					$service.mouseleave(function() {
						$service.removeClass('open');
						setTimeout(function() {
							$submenu.animate(hidden_css, speed, null, function() {
								$(this).hide();
							});
							//$submenu.fadeOut().slideUp(speed);
						}, speed + $.settings.services.navigation_extra_delay);
					});
				});
			},
			
			
			/* Show and hide extra information on jobs page */
			work_make_jobs_expandable: function() {
				return $(this).each(function() {
					var $job = $(this);
					var $expandable = $job.find('.expandable');
					
					var toggle = function(e) {
						e.preventDefault();
						
						$expandable.stop(true,true).slideToggle(500, 'easeInOutCubic');
						
						$job.find('.button:visible').hide().siblings().css('display', 'inline-block');
					}
						
					$job.find('.button, h4 a').click(toggle);
					
					
				});
			},
			
			
			promoters_submit_cv: function() {
				var $form = $(this);
				var loader = $form.find('.loader');
				$form.submit(function(e) {
					e.preventDefault();
					loader.css('display', 'inline-block');
					
					$.ajax({
						url: $.settings.actions.send_cv,
						data: $form.serializeArray(),
						dataType: 'json',
						type:'post',
						error: function() {
							alert('Noe gikk galt ved sending av skjema. Vennligst prøv igjen.');
						},
						success: function(response) {
							loader.hide();
							$form.find('.response_message')
								 .attr('class', 'response_message')
								 .addClass(response.status)
								 .show()
								 .html(response.status_message);
							
							if(response.status == 'success') {
								$form.find('fieldset').hide();
							} else {
								$form.find('input, textarea, label').removeClass('error');
								var fields = $('#' + response.fields.join(',#'));
								fields.addClass('error');
								fields.parent().find('label').addClass('error');
							}
							
							document.location.hash = 'send_cv';
						}
					});
				});
			},
			
			
			
			justifyheights: function() {
				$elements = $(this);
				var newheight = 0;
				
				$elements.each(function() {
					if($(this).height() > newheight) {
						newheight = $(this).height();
					}
				});
				
				$elements.height(newheight);
				
				return $elements;
			}
	});
	
	
})(jQuery);


$(function() {
	var page_id = $('html').attr('id');
	
	/* Page specific */
	switch(page_id) {
		
		// Frontpage
		case 'frontpage':
			$('.slideshow').kenburns({
				links: true
			});
		break;
		
		// Blog
		case 'blog':
			$('#blog .sharebutton').blog_sharebutton();
			$('#s').wrap_input(true);
			$('#sidebar .categories, #sidebar .links').expand_linklist();
		break;
		
		// Case
		case 'case':
			$('.slideshow').kenburns();
			$('#case .customers .customer').case_customers();
		break;
		
		// Services
		case 'services':
			$('.services').services_navigation();
		break;
		
		// Work
		case 'work':
			$('#work .jobs .job').work_make_jobs_expandable();
		break;
		
		// Promoters
		case 'promoters':
			$('#send_cv input[type=text], #send_cv textarea').wrap_input(true);
			$('#send_cv').promoters_submit_cv();
		break;
	}
	
	$('.cases .case').justifyheights();
	$('.linklist.hovereffect li:not(li.selected) a').linklist_hovereffect();
	$('.corners').corners();
	$('.tabpanel').tabpanel();
	$('a[rel="external"]').click(function(e){
		e.preventDefault();
		window.open($(this).attr('href'));
	});
});
