// rocket vars
var rocket;
var validTarget = true;

// ui vars
var shortcuts = new Array();
var contents = new Array();

// browser vars
var windowCenterX;
var windowCenterY;
var scRadiusX;
var scRadiusY;
var edgeOffset = 20;

// objects 
function Rocket(aElement, aSize){
	this.element = aElement;
	this.size = aSize;
}

function Shortcut(aElement, aContent){
	this.element = aElement;
	this.content = aContent;
}

function Content(aX, aY, aWidth){
	
	//window.console.log(aX);
	this.x = aX;
	this.y = aY;
	this.width = aWidth;
}

// methods
function init(){
	//alert("init()");
	// window
	updateWindowCenter();
	// rocket
	rocket = new Rocket($("#rocket"), stripPx($("#rocket").css("width")));
	// contents
	var tempContents = $(".content-wrapper");
	for(var i=0; i<tempContents.length; i++){
		
			var tparent = $(tempContents[i].parentNode);
			var tthis = $(tempContents[i]);
			
			var tname = tparent.attr("id");
			//alert (tname +": "+ stripPx( $(tempContents[i].parentNode).css("top") ));
			
			var tx = stripPx( tparent.css("left") ) + stripPx( tthis.css("left") )-100;
			var ty = stripPx( tparent.css("top") ) + stripPx( tthis.css("top") );
			//alert (tx);
			//window.console.log (tname +": "+ tx +" - "+ ty);
			
			var tempVar = new Content(tx, ty, 800);
			contents.push(tempVar);
	}
	// menu
	//updateMenuPosition();
	//$("#menu").hide();
	//$("#menu").slideDown(1000);
	// shortcuts 
	var tempArr = $(".shortcut");
	for(var i=0; i<tempArr.length; i++){
		var tempVar = new Shortcut(tempArr[i], contents[i]);
		shortcuts.push(tempVar);
	}
	updateShortcuts();
	$(".shortcut").hide();
	//$(".shortcut").fadeIn(1500);
	$(".shortcut[target!=home]").fadeIn(1500);
	
}

function stripPx(aString){
	return Math.round(aString.slice(0, aString.length-2)); 
}

function updateWindowCenter(){
	windowCenterX = ($(window).width()/2)-25;
	windowCenterY = ($(window).height()/2)-25;
}

function getClickAngle(aEvent){
	var a = aEvent.pageX - stripPx($("#rocket").css("left"))-rocket.size/2;
	var b = aEvent.pageY - stripPx($("#rocket").css("top"))-rocket.size/2;
	var angle = calculateAngle(a,b);
	angle = 360-(angle/(Math.PI/180));
	return angle;
}

function getElementAngle(aContent){
	
	
	var a = (aContent.x+(aContent.width/2))-($(window).scrollLeft()+($(window).width()/2));
	var b = (aContent.y+(aContent.width/2))-($(window).scrollTop()+($(window).height()/2));
	
	var angle = calculateAngle(a,b);
	
	return angle;
}

function getShortcutAngle(aContent){
	var a = (aContent.x+(aContent.width/2))-stripPx($("#rocket").css("left"))-rocket.size/2;
	var b = (aContent.y+(aContent.width/2))-stripPx($("#rocket").css("top"))-rocket.size/2;
	var angle = calculateAngle(a,b);
	angle = 360-(angle/(Math.PI/180));
	return angle;
}

function calculateAngle(aA, aB){
	var a = aA;
	var b = aB;
	var c = Math.sqrt(Math.pow(a,2)+Math.pow(b,2));
	var angle;
	if(a>0 && b>0){
		if(Math.abs(a)>Math.abs(b)){
			angle = Math.asin(b/c);
		}else{
			angle = Math.acos(a/c);
		}
		//angle = angle/(Math.PI/180);
	}else if(a<0 && b>0){
		a = Math.abs(a);
		if(Math.abs(a)>Math.abs(b)){
			angle = Math.asin(b/c);
		}else{
			angle = Math.acos(a/c);
		}
		angle = Math.PI-angle;
		// angle = 180-(angle/(Math.PI/180));
	}else if(a<0 && b<0){
		a = Math.abs(a);
		b = Math.abs(b);
		if(Math.abs(a)>Math.abs(b)){
			angle = Math.asin(b/c);
		}else{
			angle = Math.acos(a/c);
		}
		angle = Math.PI+angle;
		//angle = 180+(angle/(Math.PI/180));
	}else if(a>0 && b<0){
		b = Math.abs(b);
		if(Math.abs(a)>Math.abs(b)){
			angle = Math.asin(b/c);
		}else{
			angle = Math.acos(a/c);
		}
		angle = (2*Math.PI)-angle;
		// angle = 360-(angle/(Math.PI/180));
	}
	return angle;
}

function callExternalInterface(aAngle) {
	thisMovie("rocketSWF").rotateRocket(aAngle);
}

function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName]
    }
    else {
        return document[movieName]
    }
}

function updateShortcutRadius(){
	updateWindowCenter();
	scRadiusX = windowCenterX-(edgeOffset*2);
	scRadiusY = windowCenterY-(edgeOffset*2);
}

function updateShortcuts(){
	//alert ("updateShortcuts()");
	updateShortcutRadius();
	for(var i=0; i<shortcuts.length; i++){
		
		var tempAngle = getElementAngle(contents[i]);
		
		//alert ($(shortcuts[i].element).css("width"));
		//alert ($(shortcuts[i].element).width());
		
		var tElemWidth =  $(shortcuts[i].element).width();
		
		var tempX = windowCenterX+(scRadiusX*Math.cos(tempAngle))-(tElemWidth/2)+15;
		var tempY = windowCenterY+(scRadiusY*Math.sin(tempAngle))+20;
		
		//tempX=tempX+"px";
		//tempY=tempY+"px";
		
		//alert ($(shortcuts[i].element));
		$(shortcuts[i].element).css("left", tempX);
		$(shortcuts[i].element).css("top", tempY);
	}
}

/*
function updateMenuPosition(){
	$("#map").css("height", $("#menu").css("width"));
	var tempOffset = ($(window).width()/2)-(stripPx($("#menu").css("width"))/2)-20;
	$("#menu").animate({left: tempOffset+"px"}, 500, "swing");
}
*/

function flyTo(aX, aY, aAngle){
	callExternalInterface(aAngle);
	$("#rocket").stop();
	$("#rocket").animate({left: aX+"px", top: aY+"px"}, 2000, "linear");
	
}

function hideActiveShortcut(){
	for(var i=0; i<shortcuts.length; i++){
		if($(window).scrollLeft()<contents[i].x && contents[i].x<($(window).scrollLeft()+$(window).width()) && $(window).scrollTop()<contents[i].y && contents[i].y<($(window).scrollTop()+$(window).height())){
			$(shortcuts[i].element).fadeOut(1000);
		}else{
			$(shortcuts[i].element).fadeIn(1000);
		}
	}
}

$(document).ready(function(){
	// load rocket CSS via Scipt
						   
	init();
	$(window).scroll(function(){
		updateShortcuts();
		hideActiveShortcut();
	});
	$(window).resize(function(){
		//updateMenuPosition();
		updateShortcuts();
	});

	$(".content-wrapper").click(function(aEvent){
	  	validTarget = false;
	});
	$(".content").click(function(aEvent){
	  	validTarget = false;
	});
	$("#universe").click(function(aEvent){
		$(this).animate("width", 1000);
	  	if(validTarget){
			var x = Math.round(aEvent.pageX)-(rocket.size/2);
			var y = Math.round(aEvent.pageY)-(rocket.size/2);
			var angle = getClickAngle(aEvent);
			flyTo(x, y, angle);
			var xOff = x-windowCenterX+(rocket.size/2);
			var yOff = y-windowCenterY+(rocket.size/2);
			$.scrollTo({top:yOff, left:xOff}, 2000);
		}
		validTarget = true;
	});

	$(".shortcut").click(function(aEvent){
		for(var i=0; i<shortcuts.length; i++){
			if(aEvent.target == shortcuts[i].element){
				//window.console.log(aEvent.target);
				flyTo(contents[i].x-100, contents[i].y-100, getShortcutAngle(contents[i]));
				var xOff = contents[i].x-windowCenterX+contents[i].width/2;
				var yOff = contents[i].y-100;
				$.scrollTo({top:yOff, left:xOff}, 2000);
			}
		}
	});

	$("#find-rocket").click(function(){
		var x = stripPx($("#rocket").css("left"))-windowCenterX+(rocket.size/2);
		var y = stripPx($("#rocket").css("top"))-windowCenterY+(rocket.size/2);
		$.scrollTo({top:y, left:x}, 2000);
	});
});
