/*
 * Datarock frontend
 * Gisle Nes - 2011
 * gisle@gisle.net
 * 
 */

(function($,kk) {

/* Init "base" elements */
kk('main').catchArg();
kk('fs').catchArg().property('switchDuration', 500);
kk('cart');
kk('cartLabel');
kk('disco').property('switcher', 'slide').property('pushState', false);
	
var easing = 'easeInOutQuad';

var clickEvent;
if (kk.touchSupport) {
	// Centered loader
	kk.loader({ position: 'center' });
	clickEvent = 'tap';
} else {
	// Default loader
	kk.loader();
	clickEvent = 'click';
}

// Initially set fullView to fill screen
$(document).ready(function() {
	var height = $('body').height() - $('.header').height();
	$('#abveFold').height(height);
});
$(window).load(function() {
	$('#aboveFold').css('height', '');
});

// Fullscreen-images
kk.Ui.fullView('.fullViewImg', '.mainContent', { wrap: true, mode: 'auto', fadeFirst: 800 }, false);
kk.Ui.fullView('.fullView', '.mainContent', { preloadImages: false });

// Ajax-interactors
kk.interactor('a:not(.custom)', {excludeElements: 'disco', postGoto: function() {
	kk.scrollToTop();
	kk.hideDisco();
}, easing: easing, switchDuration: 600 });
kk.bind('postActivate', function() {
	if ($('.menuChoice._active:not(.front)').length > 0) {
		$('.menuChoice.front').removeClass('_active');
	}
});

/* Next / previous links */
kk.interactor('.nextInteractor', function(i) {

	var kbContent = kk('fs').findElement('kbContent');
	if (kbContent) kbContent.next();
//	if (kk.root.findElement('kbContent')) kk('kbContent').next();
});
kk.interactor('.prevInteractor', function(i) {
	if (kk.root.findElement('kbContent')) kk('kbContent').previous();
});
/* Shoppingcart links */
/*
kk.interactor('.cartInteractor', { elements: 'cart,cartLabel' });
*/

/* Discography links */
kk.interactor('.custom.discoLink', { elements: 'disco', axis: 'y', easing: easing, duration: 300, direction: 'back' });
kk.interactor('.custom.discoBack', { elements: 'disco', axis: 'y', easing: easing, duration: 300 }); 

/* Keyboard interaction */
$(document).keydown(function(e) {
	if ( e.keyCode == 37 && kk.root.findElement('kbContent') ) kk('kbContent').previous();
	else if ( e.keyCode == 39 && kk.root.findElement('kbContent') ) kk('kbContent').next(); 
	else if ( e.keyCode == 40 ) return kk.fold();
	else if ( e.keyCode == 38 ) return kk.scrollToTop();
});

// Check if browser has swipe support
kk.swipeSupport = ('ontouchstart' in document.documentElement);

// Set some global variables
kk._month = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];

// Google analytics
kk.ga('UA-20399035-1');

/* Listen to scroll event, to make header follow */
$(window).bind('resize scroll', function() {
	var scrollTop = $(this).scrollTop();
	var $header = $('.header');
	var foldHeight = $('#aboveFold').height();

	foldHeight -= ($header.height()-$('#aboveFold').offset().top);

	if (scrollTop >= foldHeight) {
		if (kk.scrolledDown !== 1) {
			$header.css({
				position: 'absolute',
				top: foldHeight 
			});
			$header.stop()
				.animate({ borderBottomColor: '#fadada' }, 250)
				.animate({ borderBottomColor: '#060606' }, 250);
			kk.scrolledDown = 1;
		}
	} else {
		if (kk.scrolledDown !== 0) {
			$header.css({
				position: 'fixed',
				top: 0  
			});
			kk.scrolledDown = 0;
		}
	}
});

kk.bind('load', function(e) {

	/* Emulate target=_blank */
	$('a._blank:not(._blankBound)').bind(clickEvent, function() {window.open(this.href); return false;}).addClass('_blankBound');
	/* Update twitter-feed */
	$('.tweetContainer:not(.updated)').loadTweets('datarock', 0, 10).addClass('updated');
	/* Update youtube-video */
	$('.youtubeContainer:not(.updated)').loadYoutube('datarockofficial', 0, 1).addClass('updated');
	/* Update facebook-events */
	$('.eventContainer:not(.updated)').loadEvents('datarock').addClass('updated');

	/* Make .ajax links scroll to top */
	//$('.ajax:not(.scrollBound), 
	$('.scrollTop:not(.scrollBound)').bind(clickEvent, kk.scrollToTop).addClass('scrollBound');

	/* Header elements */

	/* Discography */
	$('.rockify:not(.bound)').bind(clickEvent, function() {
		return kk.toggleDisco(this);
	}).addClass('bound');

	/* Video-links */
	$('.videoLink:not(.bound)').bind(clickEvent, function() {
		kk.displayVideo( this.href );
		return false;
	}).addClass('bound');

	/* clickToFold links (scroll one page down) */
	$('.clickToFold:not(.bound)').bind(clickEvent, kk.fold).css('cursor', 'pointer').addClass('bound')

	/* Music player */
	$('.musicLink:not(.bound)').bind(clickEvent, function() {
		var id = $(this).attr('id').replace(/track_(.*)/, "$1");
		kk.playTrack(id);
	}).addClass('bound');

	/* Media-player controls */
	$('.mediaControls .prevTrack:not(.bound)').addClass('bound').bind(clickEvent, function() {
		var no = 0;
		if (kk.soundData && typeof(kk.currentTrackIndex) !== 'undefined') {
			no = (((kk.currentTrackIndex-1)%kk.soundData.length)+kk.soundData.length)%kk.soundData.length;
		}
		kk.playTrack( no );
	});
	$('.mediaControls .nextTrack:not(.bound)').addClass('bound').bind(clickEvent, function() {
		var no = 0;
		if (kk.soundData && typeof(kk.currentTrackIndex) !== 'undefined') {
			no = (kk.currentTrackIndex+1)%kk.soundData.length;
		}
		kk.playTrack( no );
	});
	$('.mediaControls .play:not(.bound)').addClass('bound').bind(clickEvent, function() {
		var id = $(this).attr('class').replace(/.*track_([^ ]*).*/, "$1");
		if ($(this).attr('class').indexOf('track_') < 0) id = '';
		if (kk.currentTrack) {
			if (!kk.sounds || !kk.sounds[ kk.currentTrack ]) {
				kk.playTrack( kk.currentTrack + '' );
			}
			else if (kk.sounds[ kk.currentTrack ].playState && !kk.sounds[kk.currentTrack].paused) soundManager.pauseAll();
			else soundManager.resumeAll();
		} else {
			if ($(this).is('.playSingle')) kk.playTrack(id, true);
			else kk.playTrack(id);
		}
	});
	$('.mediaControls:not(.bound)').hover(function() {
		kk.playerDisplay();
	});

	$('.discoFilter:not(.bound)').addClass('bound').bind(clickEvent, function() {
		var type = $(this).attr('id').replace(/filter_(.*)/, "$1");
		var $show = $('.release.indexItem.type_' + type);
		var $hide = $('.release.indexItem:not(.type_' + type + ')');

		$show.fadeTo('fast', 1.0);
		$hide.fadeTo('fast', 0.3);
		
		$('._activeFilter').removeClass('_activeFilter');
		$(this).addClass('_activeFilter');
	});

	var setVol = function(e, that) {
		if (that || $(this).data('mousedown')) {
			var pageX = e.pageX || e.originalEvent.targetTouches[0].clientX;
			var volume = Math.floor( (parseInt(pageX-$(that || this).offset().left) / $(that || this).width()) * 100);
			if (volume > 100) volume = 100;
			else if (volume < 0) volume = 0;
			kk.volume(volume);
		}		
		return false;
	};
	$('.volume:not(.bound)').bind('mousedown touchstart', function(e) {
		$(this).data('mousedown', true).addClass('_pressed');
		var that = this;
		$('body').one('mouseup touchend', function() {
			$(that).data('mousedown', false).removeClass('_pressed');
		});
		setVol(e, this);
	}).bind('mousemove touchmove', setVol).addClass('bound');

	/* Add "pressed" class for pressed buttons */
	$('.press:not(.pbound),.button:not(.pbound),.sprite:not(.pbound)').bind('mousedown', function(e) {
		$(this).addClass('pressed');
		var that = this;
		$('body').one('mouseup', function() {
			$(that).removeClass('pressed');
		});
	}).addClass('pbound');

	$('.infoBox h2:not(.bound)').bind(clickEvent, function() {
		var $parent = $(this).parent();
		var $siblings = $parent.siblings();
		$siblings.find('.boxContent').custSlideUp('fast').removeClass('active');
		$parent.find('.boxContent').custSlideDown('fast').addClass('active');
	}).css('cursor', 'pointer').addClass('bound');

	if (typeof(kk.currentTrack) !== 'undefined') {
		$('#track_' + kk.currentTrack).addClass('_playing');
	}

	$('.openClose:not(.bound)').bind(clickEvent, function() {
		if ($(this).is('.closed')) {
			var left = $(this).data('left');
			$(this).closest('.content').find('.fadeOut').css('zIndex', '');
			$(this).closest('.content').find('.fadeOut').fadeTo('fast', 1.0);
			$(this).animate({ top: 0, left: left });
			$(this).removeClass('closed');
		} else {
			var top = $(this).closest('.relative').find('.text').height() + 13;
			var left = -$(this).closest('.relative').offset().left + 8;
			$(this).data('left', $(this).css('left'));
			var $fadeOut = $(this).closest('.content').find('.fadeOut');
			$(this).closest('.content').find('.fadeOut').fadeTo('fast', 0.0, function() {
				$fadeOut.css('zIndex', 0);	
			});
			$(this).animate({ top: top, left: left });
			$(this).addClass('closed');
		}
	}).addClass('bound');

	/* Follow cursor for gallery-interactors */
	$('.prevInteractor .cursor:not(.bound)').followCursor({container: '.link', xDiff: -25, yDiff: -14}).addClass('bound');
	$('.nextInteractor .cursor:not(.bound)').followCursor({container: '.link', xDiff: -94, yDiff: -14}).addClass('bound');


}); /* END kk.load */


// Discography slider
kk.toggleDisco = function() {
	var $slider = $('.slideElement');
	if ($slider.is(':visible')) kk.hideDisco($slider);
	else kk.showDisco($slider);
	return false;
};
kk.hideDisco = function($slider) {
	$slider = $slider || $('.slideElement');
	$slider.stop().slideUp(150);

	// Change button-label
	$('.discoLink .label').text('Browse our music');
};
kk.showDisco = function($slider) {
	$slider = $slider || $('.slideElement');
	$slider.stop().slideDown(200);

	// Change button-label
	$('.discoLink .label').text('Hide discography');
};


kk.bind('postPushState', function() {
	$('.openClose:not(.initiated)').each(function() {
		var element = $(this).closest('.imgContainer').find('._isElement').data('object');
		if (!element) return;
		element.bind('preGoto', function(e) {
			var $openClose = e.$element.closest('.imgContainer').find('.openClose:not(.closed)');
			$openClose.trigger(clickEvent);
		}, true);
	}).addClass('initiated');
});

/* Scroll below fold */
kk.fold = function() {
		var scrollTop = $('html').scrollTop();
		var se = 'body';
		if (scrollTop || ($('html').scrollTop(scrollTop+1).scrollTop())) se = 'html';
		if ($(se).scrollTop() < $('#aboveFold').height()) {
			$(se).animate({ scrollTop: $('#aboveFold').height() }, 200, easing);
			return false;
		}
		return true;
};
kk.scrollToTop = function() {
		var se = ($('html').scrollTop() > 0) ? 'html' : 'body';
		if ($(se).scrollTop() > 0) {
			$(se).animate({ scrollTop: 0 }, 200, easing);
			return false;
		}
		return true;
};

$.fn.custSlideDown = function(speed) {
	$(this).each(function() {
		if ($(this).is(':visible')) return;
		$(this).fakeDisplay();
		var height = $(this).outerHeight();
		$(this).fakeDisplay(true);
		$(this).css({ height: 0 }).show();
		$(this).animate({ height: height }, speed, function() {
			$(this).css('height', '');						
		});
	});
	return this;
};
$.fn.custSlideUp = function(speed) {
	$(this).each(function() {
		if ($(this).is(':hidden')) return;
		$(this).animate({ height: 0 }, speed, function() {
			$(this).hide().css('height', '');
		});
	});
	return this;
};

/* Function to fill a container with (live?) tweets */
$.fn.loadTweets = function(query, start, limit) {
	$(this).html('');
	$(this).each(function() {
		var url = 'http://search.twitter.com/search.json?q=' + query + '&start=' + start + '&rpp=' + limit;
		var that = this;
		var dateFormat = function(date) {
			var now = new Date();
			date = new Date(date);
			if (now > date+1) { // Return date
				return date.getDate() + ' ' + kk._month[date.getMonth()];
			}
			var seconds = parseInt((now-date)/1000);
			if (seconds === 1) return seconds + ' second ago';
			if (seconds < 60) return seconds + ' seconds ago';
			if (seconds >= 60 && seconds < 120) return '1 minute ago';
			if (seconds < 3600) return parseInt(seconds/60) + ' minutes ago';
			if (seconds >= 3600 && seconds < 7200) return '1 hour ago';
			return parseInt(seconds/3600) + ' hours ago';
		};
		var linkify = function(text) {
			text = text.replace(/(http[^ \n]+)/g, '<a href="$1" class="_blank">$1</a>');
			text = text.replace(/\@([^\.\n ]+)/g, '<a href="http://twitter.com/$1" class="_blank">@$1</a>');
			return text;
		};
		var fill = function(data) {
			if (typeof(data) !== 'object' || typeof(data.results) !== 'object') return; 
			for (var i=0; i<data.results.length; i++) {
				var tweet = data.results[i];
				var $tweet = $('<div class="tweet"/>');
				$tweet.append('<p class="text">' + linkify(tweet.text) + '</p>');
				$tweet.append(
					'<p class="tweetFooter">' + 
					'<a class="_blank" href="http://twitter.com/'+tweet.from_user+'/">' +tweet.from_user+ '</a><br/>' +
					dateFormat(tweet.created_at)
				);
				$(that).append($tweet);
			}
			// Trigger Kveik-loaded event
			kk.trigger('load');
		};
		$.ajax({url: url, dataType: 'jsonp', success: fill });
	});
	return this;
};

$.fn.loadYoutube = function(user, start, limit, insert) {
	start = start || 1;
	limit = limit || 10;
	var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	var days = ['1st','2nd','3rd','4th','5th','6th','7th','8th','9th','10th','11th','12th','13th','14th','15th','16th','17th','18th','19th','20th','21st','22nd','23rd','24th','25th','26th','27th','28th','29th','30th','31st'];
	$(this).each(function() {
		var url = 'http://gdata.youtube.com/feeds/api/users/'+user+'/uploads?v=2&alt=json&max-results=' + limit + '&start-index=' + start;
		var that = this;
		insert = insert || function(entry) {
			var $entry = $('<div class="brutal video"/>');
			var url = 'http://www.youtube.com/watch?v=' + entry.media$group.yt$videoid.$t;
			var ds = entry.published.$t;
			var date = months[ parseInt(parseFloat(ds.substr( 5, 2 )))-1 ] + ' ' + days[ parseInt(parseFloat(ds.substr(8,2)))-1 ];
			$entry.append(
				'<p><a href="' + url + '" class="videoLink scrollTop">' + 
				'<img src="' + entry.media$group.media$thumbnail[0].url + '" alt="Video thumbnail" />' +
				'<span class="latest">Our latest video</span>' + 
				'<span class="small date">' + date + '</span>' +
				'</a></p>'
			);
			return $entry;
		};

		$.ajax({url: url, dataType: 'jsonp', success: function(data) {
			if (!data || !data.feed || !data.feed.entry) return;
			var entries = data.feed.entry || [];
			for (var i = 0; i < entries.length; i++) {
				var entry = entries[i];
				$(that).append( insert(entry) );
			}
			kk.trigger('load');
		}});
			

	});
	return this;
};

$.fn.loadEvents = function(user, start) {
	var that = this;
	$(this).html('');
	$(this).each(function() {
		$.ajax({ 
			url: '/events.json', 
			dataType: 'json', 
			success: function(data) {
				if (typeof(data) !== 'object' || !data.data) return;
				data = data.data;
				var loop = 0;
				for (var d in data) {
					var event = data[d];
					var $event = $('<div class="event' + ((loop%2!==0)?' odd':'') + '"/>');
					var arr = event.start_time.split(/[- :T]/);
					var date = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);
					var month = date.getMonth();
					var day = date.getDate();
					$event.append(
						'<p class="brutal date"><span class="month">' + kk._month[month] + '</span><span class="day">' + day + '</span></p>'	+
						'<p class="text"><span class="brutal name">' + event.name + '</span>' +
						'<a class="_blank" href="http://facebook.com/event.php?eid=' + event.id + '">Read more on Facebook</a></p>'
					);
					$(that).prepend($event);
					loop++;
				}
				// Trigger Kveik-loaded event
				kk.trigger('load');
			}
		});
	});
	return this;
};

kk.displayVideo = function(location) {
	var close = function() {
		// Smooth resize when needed
		$overlay.fadeOut(200, function() {
			$(this).remove();
		});
	};

	// Stop music-player
	soundManager.pauseAll();

	// Hide discography
	kk.hideDisco();

	var $overlay = $('#videoOverlay');;
	if ($overlay.length <= 0) {
		var $overlay = $('<div id="videoOverlay" class="absolute topLeft middleLayer"/>');
		$overlay.append('<div class="background"/>');
		$overlay.css({
			zIndex: 1000,
			width: '100%',
			top: 0,
			bottom: 0,
			left: 0,
			right: 0
		}).hide();
		$('#aboveFold').prepend($overlay);
		// Smooth resize if height == 0
		// Add "close" event on a "close" icon 
		$('a,.background,.ajax').one(clickEvent, close);
	}

	var display = function() {
		var id = location.replace(/.*youtube\.com.*v=([a-zA-Z0-9_\-]+).*/, "$1");
		if (id) { // Check for media-type
			var url = 'http://youtube.com/v/' + id + '?hl=en&hd=1&autoplay=1';

			$overlay.find('.youtube').remove();
			var $youtube = $('<object type="application/x-shockwave-flash" data="'+url+'">' +
												'<param name="movie" class="ytmovie" value="'+url+'" />' +
												'<param name="FlashVars" value="playerMode=embedded" />' +
												'<param name="wmode" value="transparent" />' +
												'</object>');
			$youtube.addClass('youtube content middleLayer');
			$overlay.append($youtube);
			$youtube.attr('data', url).attr('width', '100%').attr('height', '100%');
			var height = $youtube.parent().height()-100;
			$youtube.css({ position: 'relative', top: '50px', height: height });
			return;
		}
	};

	$overlay.fadeTo(200, 1.0, display);
//	if ($overlay.is(':visible')) $overlay.fadeTo(200, 1.0, display);
//	else display();
};

kk.playTrack = function(id, single) {
	if (!kk.soundData) {
		$.ajax({url: '/discography.json', dataType: 'json', success: function(data) {
			kk.soundData = data.tracks;
			kk.playTrack(id);
		}});
		return;
	}
	
	if (kk.soundData.length <= 0) return;

	if (typeof(id) === 'number') {
		index = id;
		if (index >= kk.soundData.length) return;
		id = kk.soundData[index].id;
	}

	$('.volume').fadeIn();

	var index=0;
	if (!id) id = kk.soundData[0].id;
	else for (var i=0; i<kk.soundData.length && !index; i++) if (kk.soundData[i].id === id) index = i;

	kk.sounds = kk.sounds || {};
	kk.sounds[id] = kk.sounds[id] || soundManager.createSound({
		id: id,
		url: $('<p/>').html(kk.soundData[index].l).text(),
		onfinish: function() {
			kk.currentTrack = undefined;
			$('#track_' + id + ',.track_' + id).removeClass('_playing');
			if (!single) $('.mediaControls .nextTrack').trigger(clickEvent);
			else $('._playing').removeClass('_playing');
		},
		onstop: function() {
			$('#track_' + id).removeClass('_playing');
			$('.mediaControls .play').removeClass('_playing').removeClass('_paused');
			$('#playTime').html('');
		},
		onpause: function() {
			$('.mediaControls .play').addClass('_paused');
		},
		onplay: function() {
			$('.mediaControls .play').addClass('_playing').removeClass('_paused');
			var aId = kk.soundData[index].album.id;
			var $album = $('#album_' + aId); 
			$('.album').not($album).removeClass('_playingAlbum');
			$album.addClass('_playingAlbum');

			var title = $('<p/>').html( kk.soundData[index].t ).text();
			kk.playerDisplay( '<b>Now playing:</b>&nbsp; ' + title );
		},
		onresume: function() {
			$('.mediaControls .play').removeClass('_paused');
		}
	});

	kk.currentTrack = id;
	kk.currentTrackIndex = index;
	soundManager.stopAll();
	kk.currentSound = kk.sounds[id];
	if (typeof(kk._volume) === 'undefined') kk.volume( kk.currentSound.volume );	
	else kk.volume( kk._volume );

	soundManager.stopAll();

	// Volume-workaround
	var prevVolume = kk.volume();
	kk.volume(100);
	kk.sounds[id].play();
	kk.volume(prevVolume);


	$('.musicLink._playing').removeClass('_playing');
	$('#track_' + id).addClass('_playing');

	$('.track._playing').removeClass('_playing');
	$('#track_' + id).closest('.track').addClass('_playing');

};

kk.playerDisplay = function(value) {
	var $display = $('.displayField');
	var timer = $display.data('timer');

	var hide = function() {
		$display.animate({ width: 1 }, 1000, easing);
		$display.data('timer', '');
		kk._playerDisplayBool = false;
	};

	if (!value && timer) {
		clearTimeout(timer);
		timer = setTimeout(hide, 4000);
		$display.data('timer', timer);
		return;
	}

	value = kk._playerDisplay = value || kk._playerDisplay || '';

	if (!value) return;

	// Function that will open the display
	var display = function() {
		$display.css({
			width: 'auto',
			visibility: 'hidden'
		}).html(value);
		var width = $display.width() + 32;
		$display.css({
			width: 1,
			visibility: 'visible'
		});

		$display.stop().animate({ width: width }, 200);
	
		var timer = setTimeout(hide, 7000);
		$display.data('timer', timer);
	}

	// Already visible
	if (timer) {
		clearTimeout(timer);
		$display.stop().animate({ width: 1 }, 200, function() {
			setTimeout(function() {
				display();
			}, 0);
		});
	}

	// Not previously visible
	else {
		display();
	};
};

kk.volume = function(v) {
	if (typeof(v) === 'undefined') return kk._volume;
	kk._volume = v;
	$('.volume .bar').width(v + '%');
	if (kk.currentSound) kk.currentSound.setVolume(v);
	return v;
};


/* Update front / back colors for fullscreen images */
kk.updateColors = function(e, s) {
	var start = s.param('start') || '';
	var bg = e.property('bg_' + start) || '';
	var fg = e.property('fg_' + start) || '';

	/* Remember original color */
	$('.dynamicFG').each(function() { if (!$(this).data('fg')) $(this).data('fg', $(this).css('color')) });
	$('.dynamicBG').each(function() { if (!$(this).data('bg')) $(this).data('bg', $(this).css('backgroundColor')) });

	if (fg) $('.dynamicFG').animate({ color: fg }, 'fast');
	else $('.dynamicFG').each(function() {$(this).animate({color: $(this).data('fg')}) });

	if (bg) $('.dynamicBG').animate({ background: bg }, 'fast');
	else $('.dynamicBG').each(function() { $(this).animate({backgroundColor: $(this).data('bg')}) });
};

/* Thumbnail-stuff */
var thumbHeight = 151;
var pixelsPerSec = 500;
var refreshRate = 5; 

kk.showThumbs = function(e, s) {
	  if (!s.$state) return;

		var $slider = s.$state.find('.slider');
		var $thumbs = $slider.closest('.gallery.thumbs');
		if ($slider.data('sliding')) return;

		var hideTimer = $slider.data('hideTimer');

		if (hideTimer) { // Already open
			clearTimeout(hideTimer);
		} else {
		  $slider.stop().animate({ height: thumbHeight }, 200); 
		  $thumbs.data('open', true).addClass('_open');
		}

		hideTimer = setTimeout(function() {
			$slider.stop().animate({ height: 0 }, 1500); //, 'easeOutQuad');	
			$slider.data('hideTimer', '');
			$thumbs.data('open', false).removeClass('_open');
		}, 5000);
		$slider.data('hideTimer', hideTimer);
};

kk.bind('load', function() {
	/* Hover-effect for thumbnails */
	$('.gallery.thumbs:not(.initiated)').hover(function() {
		var that = this;
		var $slider = $(this).find('.slider');
		$slider.stop().animate({ height: thumbHeight }, 200, function() {
			$(that).data('open', true).addClass('_open');
		});
		var hideTimer = $slider.data('hideTimer');
		if (hideTimer) {
			clearTimeout(hideTimer);
			$slider.data('hideTimer', false);
		}
	}, function() {
		var that = this;
		$(this).find('.slider').stop().animate({ height: 0}, 200, function() {
			$(that).data('open', false).removeClass('_open');
		});
	}).addClass('initiated');
	// Slide down on hover
	$('.gallery.thumbs .hoverArea:not(.initiated)').bind(clickEvent, function() {
		var $thumbs = $(this).closest('.gallery.thumbs');
		if ($thumbs.data('open')) $thumbs.find('.slider').stop().animate({height: 0}, 200, function() {
			$thumbs.data('open', false).removeClass('_open');
		});
		else $thumbs.find('.slider').stop().animate({height: thumbHeight}, 200, function() {
			$thumbs.data('open', true).addClass('_open');
		});
	}).addClass('initiated');

	/* Scroll-animation for thumbnails */
	$('.slider:not(.initiated)').mousemove(function(e) {
		if (kk.swipeSupport) return;

		var left = e.pageX - $(this).parent().offset().left;
		var perc = left / $(this).parent().width();

		var $images = $(this);
		var animation = $images.data('animation');
		if (!animation) return;

		if (perc >= 0.6 || perc <= 0.4) {
			if (perc >= 0.6) animation.relPerc = -(perc-0.6)/0.4;
			else animation.relPerc = (0.4-perc)/0.4;

			if (!animation.animation) {
				var loop = function() {
					var time, diff, speed;
					time = (new Date).getTime();
					diff	= (animation.time) ? time-animation.time : refreshRate;
					animation.time = time;
					speed = pixelsPerSec*diff/1000 * animation.relPerc * Math.abs(animation.relPerc);

					animation.currentPos = animation.currentPos + speed;

					if (animation.currentPos > 0) {
					 	animation.currentPos = 0;
						$images.css({'left': animation.currentPos});
						return;
					}
					else if (animation.currentPos < animation.end && speed < 0) {
						animation.currentPos = animation.end;
						$images.css({'left': animation.currentPos});
						return;
					}
					$images.css({'left': animation.currentPos});
					animation.animation = setTimeout(loop, refreshRate);
				};
				loop();
			}
		} else {
			if (animation.animation) clearTimeout( animation.animation );
			delete(animation.animation);
			delete(animation.time);
		}
	}).hover(function(e) {
		if (kk.swipeSupport) return;

		var $images = $(this);
		var animation = $images.data('animation') || {};	
		// Update animation-properties
		animation.$lastImg = $images.find('.slideItem:last');
	 	animation.start = animation.start || $images.offset().left;
		animation.end = -(animation.$lastImg.offset().left + animation.$lastImg.width()) + $images.parent().width() + (parseInt($images.css('left')) || 0);
		if (animation.end > 0) animation.end = 0;
		animation.currentPos = animation.currentPos;
		if (typeof(animation.currentPos) === 'undefined') animation.currentPos = $(this).offset().left;
		$images.data('animation', animation);
	}, function() {
		var animation = $(this).data('animation') || {};
		if (animation.animation) clearTimeout( animation.animation );
		delete(animation.time);
		delete(animation.animation);
	})
	// iPhone swipe
	.bind('touchstart', function(ev) {
		$(this).data('targetLink', $(this).find('a:hover'));
		return false;
	})
	.bind('touchmove', function(ev) {
		var e = ev.originalEvent;
		var animation = $(this).data('animation') || {};
		var prevX = $(this).data('prevX');

		// Initialize
		if (!prevX) {
			var hideTimer = $(this).data('hideTimer');
			if (hideTimer) {
				clearTimeout(hideTimer);
				$(this).data('hideTimer', '');
			}
			// cancelHideThumbs.apply($(this).closest('.thumbnails')[0])
			$(this).data('prevX', e.targetTouches[0].clientX);
			startX = $(this).data('prevX'); 
			return false;
		}

		var delta = (prevX - e.targetTouches[0].clientX);
		$(this).data('prevX', e.targetTouches[0].clientX);
		var newLeft = (parseInt($(this).css('left')) || 0) - delta;
		var $lastImg = $(this).find('.slideItem:last');

		// Make sure swipe is not out of bounds
		var end = -($lastImg.offset().left+$lastImg.outerWidth())+$(this).parent().outerWidth()+parseInt($(this).css('left') || 0);
		if (newLeft > 0) newLeft = 0;
		if (newLeft < end) newLeft = end;
		$(this).css('left', newLeft); 
		ev.preventDefault();
		return false;
	}).bind('touchend', function(ev) {
		if (!$(this).data('prevX')) {
			var $link = $(this).data('targetLink');
			if ($link.length < 0) return false;
			var url = $link.data('href');
			if (url) Kveik.goTo(url, {elements: 'p'});
		}
		$(this).data('startX', '').data('prevX', '');
		ev.preventDefault();	
		return false;
	}).addClass('initiated');

	
	// Handheld menu
	$('.handheld.menu select:not(.bound)').addClass('boud').change(function() {
		Kveik.goTo('/' + $(this).val() + '/');
	});
});

// Soundmanager init
soundManager.url = '/is/contrib/soundManager2/297a/';
soundManager.debugMode = false;
soundManager.useHTML5Audio = true;

})(jQuery, Kveik);

