$( function ( ) {

	/*
	$("#taskbar ul.items > li > span.a, #taskbar ul.items > li > a").hover ( function ( ) {
		$(this.parentNode).addClass("hover");
	}, function ( ) {
		$(this.parentNode).removeClass("hover");
	} );
	*/

	var OK_TO_HIDE = true;
	var VOLUME = ( function ( ) {
		var volume = 100;
		var muted = false;
		return {
			get : function ( ) {
				if ( SoundStage )
					return SoundStage.getVolume();
				return volume;
			},
			set : function ( v ) {
				volume = Math.max ( Math.min ( parseInt ( v ), 100 ), 0 );
				muted = !volume;
				$(document.body).removeClass("volume_high volume_medium volume_low volume_muted");
				if ( volume >= 65 )
					$(document.body).addClass("volume_high");
				else if ( volume >= 30 )
					$(document.body).addClass("volume_medium");
				else if ( volume > 0 )
					$(document.body).addClass("volume_low");
				else
					$(document.body).addClass("volume_muted");
				if ( SoundStage )
					SoundStage.setVolume ( volume );
			},
			toggleMute : function ( ) {
				muted = !volume ? true : !muted;
				$(document.body)[muted?'addClass':'removeClass']("volume_muted");
				if ( SoundStage )
					SoundStage[muted?"mute":"unmute"]();
				return muted;
			}
		}
	} )();

	$("#taskbar #tb_achievements").click ( ( function ( ) {
		var dialog = null;
		return function ( ) {
			if ( dialog ) dialog.close();
			var achievements = Portal.getMetaData("achievements");
			var list = $("<ul/>");
			for ( var hash in achievements ) {
				var achievement = achievements[hash];
				var achieved = achievement.achieved;
				list.append (
					$("<li/>").append (
						$("<img/>").attr ( 'src', achievement.icons [ achieved ? 1 : 0 ] ),
						$("<span/>").append (
							$("<strong/>").text ( achievement.name ),
							achievement.achieved ? $("<br/>") : null,
							achievement.achieved ? document.createTextNode ( achievement.description ) : null
						)
					).addClass ( achievement.achieved ? null : "new" )
				);
			}
			var message = $("<div/>").attr ( "id", "achievements-dialog" )
				.append ( list )
				.append ( $('<button/>')
					.html('<span><span>Close</span></span>')
					.addClass('hud-button')
					.click ( function ( ) {
						if ( dialog ) {
							dialog.close();
							dialog = null;
						}
					} )
				);
			dialog = Portal.showMessage ( message[0] );
		}
	} )() );

	$("#taskbar #tb_quit").click ( ( function ( ) {
		var dialog = null;
		return function ( ) {
			if ( dialog ) dialog.close();
			dialog = Portal.confirm ( "Are you sure you want to leave?\nAll progress in the current task will be lost.", function ( quit ) {
				if ( quit ) {
					window.location = "/";
				}
			} );
		}
	} )() );
	$("#taskbar #tb_hint").click ( ( function ( ) {
		var dialog = null;
		return function ( ) {
			if ( dialog ) dialog.close();
			var confirm = $(this).data("confirm");
			if ( typeof confirm == "function" ) {
				dialog = Portal.confirm ( Portal.getMetaData ( "hint" ), function ( rsp ) {
					dialog = null;
					confirm ( rsp );
				} );
			} else {
				dialog = Portal.alert ( Portal.getMetaData ( "hint" ), function ( ) {
					dialog = null;
				} );
			}
			Portal.hintsUsed ( true );
			if ( typeof $(this).data("action") == "function" )
				$(this).data("action")();
		}
	} )() );
	$("#taskbar #tb_objective").click ( ( function ( ) {
		var dialog = null;
		return function ( ) {
			if ( dialog ) dialog.close();
			dialog = Portal.alert ( Portal.getMetaData ( "objective" ), function ( ) {
				dialog = null;
			} );
		}
	} )() );

	if ( !$(document.body).hasClass ( "no-music" ) ) {
		$("#taskbar #tb_music").click ( function ( ) {
			$(document.body).toggleClass ( "no-music" );
		} );
	}

	$("#taskbar .audio .subtitles").click ( function ( ) {
		$(document.body).toggleClass ( "no-subtitles" );
	} );

	$("#taskbar #tb_pin").click ( function ( ) {
		var taskbar = $("#taskbar");
		taskbar.toggleClass ( "pinned" );
		var height = $('.hud-box',taskbar).height();
		var margin = 10;
		if ( taskbar.hasClass ( "pinned" ) ) {
			taskbar.animate ( { bottom : 0 }, 250 );
			$("#subtitles").animate ( { bottom : height + margin }, 250 );
		} else {
			taskbar.animate ( { bottom : -height }, 250 );
			$("#subtitles").animate ( { bottom : margin }, 250 );
		}
	} );

	/*
	( function ( ) {
		var timer;
		var volume = $('<div class="volume"></div>').prependTo("#tb_volume").wrap('<div class="volumeWrapper"></div>');
		var handle = $('<div class="handle"><span></span></div>').appendTo ( volume ).draggable( {
			containment: 'parent',
			axis: 'y',
			drag: function ( event, ui ) {
				var volume = 100 - ( 100 * this.offsetTop ) / ( this.parentNode.offsetHeight - this.offsetHeight - 2 );
				VOLUME.set ( volume );
			},
			start: function ( ) { OK_TO_HIDE = false; },
			stop: function ( ) { OK_TO_HIDE = true; $("#tb_volume").mouseout(); }
		} );
		$("#tb_volume").hover ( function ( ) {
			if ( !$(document.body).hasClass("no-audio") ) {
				clearTimeout ( timer );
				$(volume.parent()).stop(true).animate ( { height : volume.outerHeight() }, 100 );
			}
			return false;
		}, function ( ) {
			if ( OK_TO_HIDE ) {
				timer = setTimeout ( function ( ) {
					$(volume.parent()).animate ( { height : 0 }, 250 )
				}, 150 );
			}
			return false;
		} );
		$("#tb_volume span.a").click ( function () {
			var muted = VOLUME.toggleMute();
			var available = handle[0].parentNode.offsetHeight - handle[0].offsetHeight - 2;
			if ( muted ) {
				handle.stop(true).animate({top:available}, 150);
			} else {
				handle.stop(true).animate({top:available * (100-VOLUME.get())/100},150);
			}
		} );
	} )();
	*/
	( function ( ) {
		var display = $("#taskbar .audio .volume div");
		var max = ( parseInt ( $("#taskbar .audio .volume").css('height') ) -
			parseInt ( $("#taskbar .audio .volume span").draggable ( {
				containment : 'parent',
				axis : 'y',
				drag : function ( event, ui ) {
					var volume = Math.round (  100 / max * ( max - ui.position.top ) );
					display.css ( 'height', volume + '%' );
					VOLUME.set ( volume );
				}
			} ).css('height') ) ) || 37;
			if ( $("body").hasClass("volume_muted") )
				$("#taskbar .audio .volume span").draggable ( "disable" );
	} )();

	( function ( ) {
		$("#taskbar .audio .mute").click ( function ( ) {
			if ( VOLUME.toggleMute() ) {
				$("#taskbar .audio .volume span").draggable ( "disable" );
			} else {
				$("#taskbar .audio .volume span").draggable ( "enable" );
			}
		} );
	} )();

	/*
	( function ( ) {
		var timer;
		$("#taskbarWrapper").hover ( function ( ) {
			clearTimeout ( timer );
			$("#taskbar").stop(true).animate({bottom:$("#taskbar").outerHeight() - 1}, 100);
		}, function ( ) {
			if ( OK_TO_HIDE && !$("#taskbar").hasClass("pinned") ) {
				timer = setTimeout ( function ( ) {
					$("#taskbar").animate ( { bottom : 0 }, 250 );
				}, 150 );
			}
		} );
		if ( !$("#taskbar").hasClass("pinned") )
			$("#taskbar").css ( "bottom", 0 );
	} )();
	*/

	$(window).resize ( ( function ( ) {
		var reposition = function ( ) {
			var body = document.getElementById("portal_body");
			var left = body.offsetLeft;
			var width = body.offsetWidth;
			var parent = body.parentNode.offsetWidth;
			var delta = ( ( parent - width ) / 2 ) - left;
			var fixed = !parent || ( parent > 900 );
			$("#taskbar")
				[fixed?"addClass":"removeClass"]("fixed")
				.parent()
					.css("left",-delta/2);
			/*
			var taskbar = document.getElementById("taskbar");
			taskbar.style.left = -delta + "px";
			var fixed = !parent || ( parent > 900 );
			$(taskbar)[fixed?"addClass":"removeClass"]("fixed");
			*/
		}
		reposition();
		return reposition;
	} )() );

} );

