// Ver 1.0.110419 mod sfb2

function aniMenu(containerId) {

	var container = document.getElementById(containerId);
	var aniStep = 0.5;
	var intervalId1;
	var intervalId2;
	var introStopped = false;

	var camera = null;
	var object = null;
	var object3d = null;
	var scene = null;
	var currentIndex = 0;

	var onclick = null;
	var onposition = null;
	var oninit = null

	var Ring = function (radius, Items) {

		for (var i = 0; i < Items.length; i++) {

			var hangle = i * Math.PI * 2 / Items.length;
			var vangle = Math.PI / 2 + Math.pow(-1, i) * Math.PI / 16;

			var x = radius * Math.sin(vangle) * Math.sin(hangle);
			var y = radius * Math.sin(vangle) * Math.cos(hangle);
			var z = radius * Math.cos(vangle);
        
			this.pointsArray.push(this.make3DPoint(x, y, z, hangle, vangle, Items[i]));

		}

	};

	Ring.prototype = new DisplayObject3D();

	DisplayObject3D.prototype.make3DPoint = function(x, y, z, hangle, vangle, element) {

		var point = {};

		point.x = x;
		point.y = y;
		point.z = z;
		point.hangle = hangle;
		point.vangle = vangle;
		point.element = element;

		return point;

	}

	findPointIndex = function(srcElement) {

		for (index in object.pointsArray)
			if ((object.pointsArray[index].element == srcElement) || (object.pointsArray[index].element.name == srcElement.name) || (object.pointsArray[index].element.name == srcElement))
				return index;

		return false;

	}

	getElementsCount = function() {

		return $(container).find("a").length;

	}

	positionToItem = function(index, introMode) {

		stopIntro();

		var point = object.pointsArray[index];

		if (!point)
			return;

		clearInterval(intervalId1);

		var element = point.element;

		if (onposition)
			onposition(element, introMode);

		var hAngle = Math.PI - point.hangle;
		var vAngle = Math.PI - point.vangle;

		if (hAngle > Math.PI)
			hAngle -= Math.PI / 10;
		else
			hAngle += Math.PI / 10;

		if (Math.abs(axisRotation.y - hAngle) < Math.PI)
			hAngle += Math.PI * 2;

		var initX = axisRotation.x;
		var initZ = axisRotation.z;
		var runned = false;
		var speedStart = 0.01;

		$(container).find("a").animate({opacity: 0.7}, 500).removeClass("selected");

		intervalId1 = setInterval(function() {

			if (runned)
				return;

			runned = true;

			var step = Math.abs(axisRotation.y - hAngle) / 10;
			var speedStep = (speedStart < 0.1) && (speedStart < step) ? speedStart : step;

			speedStart += 0.01;

			if (speedStep < 0.01)
				speedStep = 0.01;

			if (axisRotation.y < hAngle)
				axisRotation.y += speedStep;

			if (axisRotation.y > hAngle)
				axisRotation.y -= speedStep;

			if (Math.abs(axisRotation.y - hAngle) < 0.01) { // Animation Stop

				clearInterval(intervalId1);

				axisRotation.x = initX;
				axisRotation.z = initZ;

				if (axisRotation.y > Math.PI * 2)
					axisRotation.y -= Math.PI * 2;

				scene.renderCamera(camera);

				$(element).animate({fontSize: 60, opacity: 1}, 200, "swing", function() { 

					runned = false;

					if (introMode)
						intervalId2 = setTimeout(processIntro, 5000); 

				}).addClass("selected");

				return;

			}

			scene.renderCamera(camera);

			runned = false;

		}, 20); // Animation

	}

	this.onClick = function(sonclick) {

		onclick = sonclick;

	}

	this.onPosition = function(sonposition) {

		onposition = sonposition;

	}

	this.onInit = function(soninit) {

		oninit = soninit;

	}

	this.selectItem = function(srcElement) {

		var info;

		positionToItem(findPointIndex(srcElement));

	}

	this.processIntro = function() {

		var total = getElementsCount();

		positionToItem(currentIndex++, true);

		if (currentIndex >= total)
			currentIndex = 0;

	}

	var processIntro = this.processIntro;

	this.startIntro = function() {

		if (!introStopped)
			processIntro();

	}

	this.stopIntro = function() {

		introStopped = true;

		clearInterval(intervalId2);

	}

	var startIntro = this.startIntro;
	var stopIntro = this.stopIntro;

	this.init = function(id) {

		camera = new Camera3D();
		camera.init(0, 0, 0, 300);

		$(container).find("*").unselectable();
		$(container).find("div").attr("id", Number(new Date()));

		object3d = new Object3D($(container).find("div"));
		object = new Ring(200, $(container).find("a"));
		object3d.addChild(object);

		scene = new Scene3D();
		scene.addToScene(object3d);

		axisRotation.x = Math.PI / 2;

		scene.renderCamera(camera);

		$(container).find("a").click(function() {

			positionToItem(findPointIndex(this));

			if (onclick)
				onclick(this);

			return false;

		});

		$(container).css("display", "block");

		if (!$(container).find("a[name=" + id + "]").each(function() {

			positionToItem(findPointIndex(id));

			if (oninit)
				oninit(this);

		}).length)
			if (!window.Admin)
				startIntro();

	}

}

