
// Planet v4.

// Obiekt planety
var planet;

// Obiekt tooltipa z komentarzem
var comment;

// Przeglądarka użytkownika
var browser = false;

// Ilość księżyców w menu (zostanie ustawiona ponizej przez PHP)
var moons_amount = 0;

// Aktualna skala układu (w tym miejscu jest to ustawienie startowe)
var scale = 1;

// Docelowa skala w procesie skalowania układu
var target_scale = 1;

// Odległość do zakończenia skalowania w procesie skalowania układu
var scale_distance = Math.abs(target_scale - scale);

// Rozmiar planety w skali 1:1
var default_planet_width;
var default_planet_height;

// Współrzędne środka orbity, po której poruszają się księżyce
var orbit_centerX = 500;
var orbit_centerY = 500;

// Aktualne wspolrzedne dockera centralnego (dla powiekszonego ukladu)
var center_dockerX;
var center_dockerY;
	
// Aktualne wspolrzedne dockera dla zmniejszonego ukladu
var dockerX;
var dockerY;

// Odleglos pozioma dockera od srodka dokumentu
var dockerX_distance = 314;
// Odleglos pionowa dockera od gornej krawedzi dokumentu
var dockerY_distance = 79;

// Prędkość progamu.
// ... czyli czas (w milisekuntach) powtarzania funkcji rotate()
// Funkcja rotate() wywołuje się rekurencyjnie przez użycie setTimeout, a zmienna program speed jest parametrym opóźniającym timeout'a
// Funkcja rotate() wywołuje się rekurencyjnie przez użycie setTimeout, a zmienna program speed jest parametrym opóźniającym timeout'a
var program_speed = 20;

// Flaga zezwalająca (true) lub blokująca (false) przemieszczenie układu
var move_sensor = false;

// Flaga zezwalająca (true) lub blokująca (false) skalowanie układu
var scale_sensor = false;

// Dziedzina funkcji matematycznej wyznaczającej tor księżyców menu
var df = Math.PI * 2;

// Promień orbity w skali 1:1
var default_r = 70;

// Aktualny promień orbity
var r = default_r;

// Domyślne opóźnienie rotacji księżyców wokół planety
var default_rotation_delay = 8000;

// Bieżące opóźnienie rotacji księżyców wokół planety
var rotation_delay = default_rotation_delay;

// Prędkość rotacji księżyców
var rotation_speed = (r * 4) / rotation_delay;

// Maksymalna prędkość rotacji księżyców
var rotation_max_speed = (r * 4);


		
				browser = "2";
				default_planet_width = 224;
				default_planet_height = 224;
				moons_amount = 8;
				
					var moon0_0Img = new Image;
					var moon0_1Img = new Image;

					moon0_0Img.src = "./fx/planet/moon0_1_0.png";
					moon0_1Img.src = "./fx/planet/moon0_1_1.png";
					
					var moon1_0Img = new Image;
					var moon1_1Img = new Image;

					moon1_0Img.src = "./fx/planet/moon0_2_0.png";
					moon1_1Img.src = "./fx/planet/moon0_2_1.png";
					
					var moon2_0Img = new Image;
					var moon2_1Img = new Image;

					moon2_0Img.src = "./fx/planet/moon0_3_0.png";
					moon2_1Img.src = "./fx/planet/moon0_3_1.png";
					
					var moon3_0Img = new Image;
					var moon3_1Img = new Image;

					moon3_0Img.src = "./fx/planet/moon0_4_0.png";
					moon3_1Img.src = "./fx/planet/moon0_4_1.png";
					
					var moon4_0Img = new Image;
					var moon4_1Img = new Image;

					moon4_0Img.src = "./fx/planet/moon0_5_0.png";
					moon4_1Img.src = "./fx/planet/moon0_5_1.png";
					
					var moon5_0Img = new Image;
					var moon5_1Img = new Image;

					moon5_0Img.src = "./fx/planet/moon0_6_0.png";
					moon5_1Img.src = "./fx/planet/moon0_6_1.png";
					
					var moon6_0Img = new Image;
					var moon6_1Img = new Image;

					moon6_0Img.src = "./fx/planet/moon0_7_0.png";
					moon6_1Img.src = "./fx/planet/moon0_7_1.png";
					
					var moon7_0Img = new Image;
					var moon7_1Img = new Image;

					moon7_0Img.src = "./fx/planet/moon0_8_0.png";
					moon7_1Img.src = "./fx/planet/moon0_8_1.png";
					

// Kąt pomiędzy księżycami
var moons_angle = df / moons_amount;

// Aktualny rozmiar planety
var planet_width = default_planet_width;
var planet_height = default_planet_height;

// Skala układu zadokowanego
var docker_scale = 0.3;

// Aktualna pozycja lewego gornego rogu obrazka planety wzgledem wspolrzednych polozenia ukladu.
var planetX = orbit_centerX - (planet_width / 2);
var planetY = orbit_centerY - (planet_height / 2);

// Aktualna pozycja kursora myszy
var curX = 1;
var curY = 1;

// Decyduje o wyświetlaniu komentarza przy księżychach
var moon_comment_sensor = 0;

// Aktualne wspolrzedne docelowe w procesie przemieszczania ukldu (ustawiane funkcja move2point()).
var target_pointX = 0;
var target_pointY = 0;

// uchwyt do rekurencji obrotu ksiezycow (funkcji rotate()).
var recursive;


		
				function capture_xy(e) {curX = e.pageX;curY = e.pageY;
					rotation_speed = curX - orbit_centerX;
					
					if (Math.abs(rotation_speed) > rotation_max_speed) {
						rotation_speed = (((rotation_speed > 0) * 2) - 1) * rotation_max_speed;
					}
					
					rotation_speed /= rotation_delay;

				}
				document.captureEvents(Event.MOUSEMOVE);


// Funkcje:

function speed4rotation(new_speed) {
	rotation_delay = new_speed;
}


function rotate(alpha) {

	// Skalowanie układu
	if (scale_sensor) {
		
		scale_distance = target_scale - scale;
		
		if (Math.abs(scale_distance) > 0.04) {	
			scale += scale_distance/10;
		
			r = default_r * scale;
			rotation_max_speed = (r * 4);
			
			planet_width = default_planet_width * scale;
			planet_height = default_planet_height * scale;
			
			planet.style.width = planet_width + 'px';
			planet.style.height = planet_height + 'px';

		} else {
			scale_sensor = false;
		}
	}

	// Przemieszczanie ukladu
	if (move_sensor) {
		sX = target_pointX - orbit_centerX;
		sY = target_pointY - orbit_centerY;
		
		if (	(Math.abs(sX) >= sY && Math.abs(sX) > 0.4) || (Math.abs(sY) > 0.4)) {

			orbit_centerX += sX/10;
			orbit_centerY += sY/10;
			
		} else {
			move_sensor = false;
		}
	}

	if (move_sensor || scale_sensor) {
		planetX = orbit_centerX - (planet_width / 2);
		planetY = orbit_centerY - (planet_height / 2);
	
		planet.style.left = planetX + 'px';
		planet.style.top = planetY + 'px';
	}
	

	// Parametry księżyców menu
	moon_key = 0;

	// Kąt o jaki przesuwany jest księżyc za każdym wykonaniem funkcji rotate	
	alpha = (alpha + rotation_speed / scale) % df;
	
	while (moon_key < moons_amount) {
		// Wyliczenie pozycji księżyca menu (współrzędne X i Y)
		//																	    to ponizej powoduje zroznicowanie orbit
		moonY = Math.floor(Math.sin(alpha + moons_angle * moon_key) * r) * (1 + Math.sin(moon_key*4)/2);
		moon_size = (50 * scale) + (moonY / 2);
		moonX = Math.floor(Math.cos(alpha + (moons_angle * moon_key) + 0.5) * 4 * r + orbit_centerX - (moon_size / 2));
		
		if (moon_size <= 0) moon_size = 1;
		
		with (document.getElementById('moon' + moon_key).style) {
			left = moonX + 'px';
			top = (moonY + orbit_centerY) + 'px';
			width = moon_size + 'px';
			height = moon_size + 'px';
			zIndex = 500 + Math.round(moonY);
		}
		
		moon_key++;
	}

	// Tooltip księżyców
	if (moon_comment_sensor) {
		if (docker_mode == 'hide') {
			comX = ((curX + 220 < document_width)? curX : document_width - 230);
			//comY = ((curY + 130 < document_height)? curY : document_height - 130);
			comment.style.left = (comX + 10) + "px";
			comment.style.top = (curY - 130) + "px";
		} else {
			//comX = ((curX > 220)? curX : 220);
			//comY = ((curY + 130 < document_height)? curY : document_height - 130);
			comment.style.left = (curX - 210) + "px";
			comment.style.top = (curY + 10) + "px";
		}
	}

	clearTimeout(recursive);
	recursive = setTimeout('rotate(' + alpha + ')', program_speed);
}


function resize2scale(new_scale) {
	scale_distance = new_scale - scale;
	
	if (Math.abs(scale_distance) > 0.04) {
		target_scale = new_scale;
		scale_sensor = true;
	}
}


function touch_moon(moon_key, mode, mooncom) {
	document.getElementById('moon' + moon_key).src = eval('moon' + moon_key + '_' + mode + 'Img.src');
	tooltip(mode, mooncom);
}

function tooltip(mode, com) {
	
	if (mode != 1 || com != '') {
		var visibility = 'visible';
		moon_comment_sensor = mode;
		
		if (mode == 0) {
			com = '';
			visibility = 'hidden';
		}
		
		comment.innerHTML = com;
		comment.style.visibility = visibility;
	}
}


function move2point(pointX, pointY) {
	// Skierowanie układu do określonego punktu
	
	target_pointX = pointX;
	target_pointY = pointY;

	move_sensor = true;
}



var docker_mode = 'hide';
		
function touch_planet() {
	// Po kliknięciu planety
	
	if (docker_mode == 'show') {
		resize2scale(1.038);
		move2point(center_dockerX, center_dockerY);
		docker_mode = 'hide';
	} else if (docker_mode == 'hide') {
		resize2scale(docker_scale);
		move2point(dockerX, dockerY);
		docker_mode = 'show';
	}
}


function corrector() {
	document_width = document.body.clientWidth;
	dockerX = (document_width / 2) + dockerX_distance;

		
						document_height = window.innerHeight;
						
	center_dockerX = (document_width / 2);
	center_dockerY = (document_height / 2);
	
	if (docker_mode == 'show') {
		move2point(dockerX, dockerY);
	} else {
		move2point(center_dockerX, center_dockerY);
	}
}



function init() {
	// Rozpoczyna działanie programu
	
	// Obiekt planety
	planet = document.getElementById('planet');
	comment = document.getElementById('comment');
	
	center_dockerX = (document_width / 2);
	center_dockerY = (document_height / 2);
	
	dockerX = (document_width / 2) + dockerX_distance;
	dockerY = dockerY_distance;

	//docker_mode = mode;
	rotate(0);
	
	if (docker_mode == 'show') {
		orbit_centerX = center_dockerX - 1000;
		orbit_centerY = center_dockerY + 200;
		scale = 0.01;
		touch_planet();
		// setTimeout("touch_planet();", 6000);
	} else {
		docker_mode = 'hide';
		orbit_centerX = center_dockerX;
		orbit_centerY = center_dockerY;
		scale = 0.15;
		touch_planet();
	}	
}

setTimeout('document.onmousemove = capture_xy;', 100);
window.onresize = corrector;
