var domain = 'nightfever-online.de';

var prompt_name_new_album_text = 'Wie soll das neue Album heißen?';


$(document).ready(function(){
	
	setup_labelover();
	setup_accordion();
	setup_tabs();
	setTimeout( 'setup_geolocation()', 1000 );
	setTimeout( 'init_cinemabox()', 500 );
	
	$('#galery a.thumb').fancybox({
		'speedIn'		:	600, 
		'speedOut'		:	200, 
		'type'			:	'image',
		'centerOnScroll':	true,
		'overlayColor'	:	'#000'
	});
	
	$('a>img.picture').closest('a').fancybox({
		'speedIn'		:	600,
		'speedOut'		:	200,
		'type'			:	'image',
		'centerOnScroll':	true,
		'overlayColor'	:	'#000'
	});
	
	$('#cinemabox a>img').closest('a').fancybox({
		'speedIn'		:	600,
		'speedOut'		:	200,
		'width'			:	800,
		'height'		:	500,
		'type'			:	'iframe',
		'centerOnScroll':	true,
		'overlayColor'	:	'#000'
	});
	
	$('#dates li .headline').click(function(){
		$(this).closest('li').toggleClass('highlighted');
	});
	
	$('input[type="file"].multiple').live('change', function(){
		if( $(this).parent().find('input[type="file"].multiple:last').val() != '' && $(this).parent().find('input[type="file"].multiple').length < 3 )
			$(this).after( $(this).clone() );
			var new_input = $(this).next();
			new_input.replaceWith( new_input.clone(true) );
			new_input.val("");
	});
	
	$('a.readmore').click(function(){
		$(this).hide();
		$(this).parent().find('div.readmore').show('drop', {direction: 'up'});
	});
	
	setup_audioplayer();
	
});


function setup_labelover() {
	$('input[type="text"], input[type="password"], input[type="date"], textarea').each(function(){
		if( $(this).attr('label') )
			labelover( $(this), $(this).attr('label') );
	});
}


function labelover( element, title ) {
	color_label = '#AAA';
	color_text = '#000';

	if( element.val() == '' )
		element.val(title).css( 'color', color_label );
	element.focus(function(){
		if( $(this).val() == title )
			$(this).val('').css( 'color', color_text );
	});
	element.blur(function(){
		if( $(this).val() == '' )
			$(this).val(title).css( 'color', color_label );
	});
	element.data( 'label', title );
	element.removeAttr( 'label' );
}


function setup_accordion() {
	$('ul.accordion').children('li').each(function(){
		$(this).click(function(){
			$(this).parent().children('li.highlighted').removeClass('highlighted');
			$(this).addClass('highlighted');
		});
	});
	$('ul.accordion').children('li:first').addClass('highlighted');
}


function setup_tabs() {
	$('ul.tabbar li').live('click', function(){
		var index = $(this).index();
		var bar = $(this).closest('ul.tabbar');
		bar.find('li.selected').removeClass('selected');
		$(this).addClass('selected');
		var view = $(this).closest('ul.tabbar').next();
		view.find('li.selected').removeClass('selected');
		view.find('li:eq('+ index +')').addClass('selected');
	});
}


function setup_audioplayer() {
	$('.audio').each(function(){
		audio_file = $(this).attr('href'); 
		$(this).flash(
			{
				swf: 'static/js/player.swf',
				flashvars:
				{
					soundFile: audio_file,
					quality: 'high',
					volslider: '0xE51B2A',
					lefticon: '0xFFFFFF',
					righticon: '0xFFFFFF',
					leftbg: '0x666666',
					rightbg: '0x999999',
					rightbghover: '0xE51B2A',
					bg: '0x444444',
					border: '0x444444',
					loader: '0x666666',
				},
				height: 30,
				transparentpagebg: 'yes',
				bgcolor: '0x222222',
				wmode: 'transparent'
			}
		);
		$(this).children('object').unwrap().wrap('<p></p>');
	});	
}


function init_cinemabox() {
	$('#cinemabox').slides({
		preload: false,
		crossfade: true,
		generatePagination: true,
		play: 3000,
		pause: 2000,
		effect: 'fade',
		fadeSpeed: 400,
		hoverPause: true
	});
	$('#cinemabox').css('overflow', 'visible');
}


function init_dropzone( elem ) {
	var form = elem.children('.fileupload');
	if( form.length == 0 )
		elem.wrapInner('<form class="fileupload" action="uploader.daemon.php" method="post" enctype="multipart/form-data"></form>');
	else
		form.attr('method', 'post').attr('enctype', 'multipart/form-data');
	elem.children('form').append('<input type="file" name="file[]" multiple="true">');
	elem.data('filecount', 0);
	elem.fileUploadUI({
		cssClassSmall: 'dropzone-small',
		cssClassLarge: 'dropzone-large',
		cssClassHighlight: 'dropzone-hover',
		dropEffect: '',
		fieldName: 'file',
		initUpload: function(event, files, index, xhr, handler, callBack) {
			var dropzone = handler.dropZone;
			if( dropzone.data('filecount') == 0 && dropzone.closest('.album').hasClass('new_album') ) {
				var form = dropzone.children('form.fileupload');
				var src = form.attr('action').split('&n=');
				var albumname = prompt( prompt_name_new_album_text, decodeURIComponent( src[1] ).replace(/\+/g, " ") );
				if( albumname == null )
					return false;
				form.attr( 'action', src[0] +'&n='+ encodeURI(albumname) );
			}
			dropzone.addClass('dropzone-active');
			dropzone.data( 'filecount', dropzone.data('filecount')+1 );
			callBack();
		},
		onLoad: function(event, files, index, xhr, handler) {
			var dropzone = handler.dropZone;
			dropzone.data( 'filecount', dropzone.data('filecount')-1 );
			if( dropzone.data('filecount') <= 0 ) {
				setTimeout( '$("#'+ dropzone.attr('id') +'").removeClass("dropzone-active");', 2000 );
			}
			var response = $.parseJSON( event.target.responseText );
			if( response.success == 'error' ) {
				alert(response.message);
				return;
			}
			if( response.size < files[index].size ) {
				alert("Die Datei wurde nicht vollstaendig hochgeladen. Grosse Dateien werden in Teilstuecken uebertragen, was aber nicht alle Browser unterstuetzen. Bitte versuchen Sie daher, Mozilla Firefox oder Google Chrome zu nutzen.");
			}
		},
		maxChunkSize: 5000000,
        continueAbortedUploads: true
	});
}


var bubble_n = 1;
function new_bubble( elem ) {
	var triangle_suffix = '_l';
	$('#body').append( '<div class="bubble" id="bubble-'+ bubble_n +'"><img src="static/images/bubble_triangle'+ triangle_suffix +'.png" class="bubble-triangle" /><div class="bubble-inner"></div></div>' );
	var bubble = $('#bubble-'+ bubble_n);
	attach_bubble( elem, bubble );
	show_bubble( bubble );
	bubble_n++;
	return bubble.children('.bubble-inner');
}


function show_bubble( bubble ) {
	bubble.closest('.bubble').show('drop', {'direction': 'right'}, 400);
}


function close_bubble( bubble ) {
	bubble.closest('.bubble').fadeOut( 200, function(){
		$(this).remove();
	});
}


function attach_bubble( elem, bubble ) {
	var offset = elem.offset();
	var body_offset = $('#body').offset();
	var offset_top = offset.top - body_offset.top -12;
	var offset_left = offset.left - body_offset.left + elem.outerWidth() +14;
	bubble.css({
		'top'	:	offset_top +'px',
		'left'	:	offset_left +'px'
	});
}


function add_bubble_button( bubble, button_label, button_event ) {
	if( bubble.children('div.bubble-buttons').length == 0 )
		bubble.append('<div class="bubble-buttons"></div>');
	var button_div = bubble.children('div.bubble-buttons');
	button_div.append('<input type="button" value="'+ button_label +'" />');
	var button = button_div.children('input:last');
	button.click(button_event);
	return button;
}


var location_bubble;
function setup_geolocation() {
	if( navigator.geolocation ) {
		location_bubble = new_bubble( $('select#city') );
		if( $.cookie('position_confirmed') == null )
			offer_location_detection();
		else
			confirm_last_location();
	}
}


function offer_location_detection() {
	location_bubble.append('Anhand Deiner Position können wir Dir nahegelegene Nightfever zeigen.');
	add_bubble_button( location_bubble, "Ortung starten...", function(){
		start_location_detection();
	});
	add_bubble_button( location_bubble, "Nein, danke", function(){ $.cookie('position_confirmed', 1); close_bubble(location_bubble); } );
}


function confirm_last_location() {
	var city = $.cookie('city');
	
	if( $.cookie('position_confirmed') != null ) {
		set_location( city );
		location_bubble.closest('.bubble').remove();
		return;
	}
	
	location_bubble.html('');
	location_bubble.append('Befindest Du Dich in '+ city +'?');
	add_bubble_button( location_bubble, "Ja", function(){ set_location(city); close_bubble(location_bubble); } );
	add_bubble_button( location_bubble, "Nein", function(){ start_location_detection(); } );
}


function start_location_detection() {
	location_bubble.html('');
	location_bubble.append('<div class="bubble-centered">Ortung läuft...</div>');
	location_bubble.append('<div class="bubble-spinner"><img src="static/images/spinner.gif" class="spinner" /></div>');
	locate( location_bubble );
}


function locate( bubble ) {
	location_bubble = bubble;
	navigator.geolocation.getCurrentPosition(process_location);
}


function process_location(position) {
	var latitude = position.coords.latitude;
	var longitude = position.coords.longitude;
	$.getJSON( '?geolocate', {lat: latitude, long: longitude, accuracy: 'city'}, function(response){
		setup_recognized_city( response.name );
	});
}


function setup_recognized_city( city ) {
	set_location(city);
	close_bubble(location_bubble);
}


var position_confirmed = true;
function set_location( city ) {
	position_confirmed = ( $.cookie('position_confirmed') == null );
	$.cookie('city', city, {expires: 365, domain: 'nightfever-online.de'});
//	highlight_city( city );
	find_nearest( city );
	if( $.cookie('position_confirmed') == null )
		$.cookie('position_confirmed', 1);
}


function highlight_city( city ) {
	var option = $('#city option[value~="'+ city.toLowerCase() +'"]');
	if( option.length == 1 ) {
		$('#city option:selected').removeAttr('selected');
		option.attr('selected', 'selected');
	}
}


function find_nearest( city ) {
	var cities = '';
	$('#city .static option').each(function(){
		if( cities != '' )
			cities += '|';
		cities += $(this).text();
	});
	$.getJSON( '?geolocate&nearest=3', { from: city, to: cities }, function(response){
		insert_nearest_into_cities_menu( response );
	});
}

var nearest_city;
function insert_nearest_into_cities_menu( json ) {
	var near_cities = '<ol>';
	$('#nearest_cities option').remove();
	$.each( json, function(key,val){
	//	if( near_cities != '' )
	//		near_cities += ', ';
		var eqv_option = $('select#city .static option:contains("'+ key +'")');
		var url = eqv_option.val();
		var eqv_url = 'http://'+ url;
		near_cities += '<li>';
		near_cities += '<b><a href="'+ eqv_url +'">'+ key +'</a></b>'+ ' ('+ Math.round(val/1000) +'km)';
		near_cities += '</li>';
		$('#nearest_cities').append('<option value="'+ url +'">'+ key +' ('+ Math.round(val/1000) +'km)' +'</option>');
	});
	near_cities += '</ol>';
	if( position_confirmed ) {
		var bubble = new_bubble( $('select#city') );
		bubble.append('In nächster Nähe liegen: '+ near_cities);
		add_bubble_button( bubble, "OK", function(){ close_bubble(bubble); } );
	}
}

function show_nearest_bubble() {
	if( $.cookie('Stadt_confirmed') > 1 )
		return;
	var nearest = $('#jump ul#cities ul#near_cities li');
	var listing = "";
	for( i=0; i<nearest.size(); i++ ) {
		if( i == 0 ) {
		}
		else if( i < (nearest.size()-1) )
			listing += ", ";
		else
			listing += " & ";
		listing += nearest.eq(i).text();
	}
	show_bubble( $('#jump'), 'Die nähesten Nightfevers in Deiner Umgebung sind <span id="nearest_nfs"><b>'+ listing +'</b></span>.' );
	$.cookie('Stadt_confirmed', 2);
}


function jump_to_city() {
	var url = $('#city').val();
	window.location.href = 'http://'+ url;
}
