//v2.0
function objects()
{
	this.x;
	this.y;
	this.z;
	this.src;
	this.width;
	this.height;
	
	this.pos_x;
	this.pos_y;
	
	this.cos_a;
	this.sin_a;
	this.R;
}

function vector(Vx, Vy, Vz)
{
	this.x = Vx;
	this.y = Vy;
	this.z = Vz;
}

var arr = new Array();

//Параметры объектов
arr[0] = new objects();//Эпика
arr[0].x = 970;
arr[0].y = -3;
arr[0].z = 400;
arr[0].src = "/img/images/epica.png";
arr[0].width = 355;
arr[0].height = 151;

arr[1] = new objects();//Инсигния
arr[1].x = 145;
arr[1].y = -2;
arr[1].z = 500;
arr[1].src = "/img/images/insignia.png";
arr[1].width = 421;
arr[1].height = 165;

arr[2] = new objects();//Лачетти
arr[2].x = 950;
arr[2].y = 16;
arr[2].z = 900;
arr[2].src = "/img/images/lacetti.png";
arr[2].width = 249;
arr[2].height = 184;

arr[3] = new objects();//Вектра
arr[3].x = 250;
arr[3].y = 30;
arr[3].z = 900;
arr[3].src = "/img/images/vektra.png";
arr[3].width = 237;
arr[3].height = 170;

arr[4] = new objects();//Покупатель
arr[4].x = 433;
arr[4].y = -3;
arr[4].z = 390;
arr[4].src = "/img/images/pokupatel.png";
arr[4].width = 73;
arr[4].height = 179;

arr[5] = new objects();//Охраник
arr[5].x = 745;
arr[5].y = -3;
arr[5].z = 390;
arr[5].src = "/img/images/ohranik.png";
arr[5].width = 66;
arr[5].height = 196;

arr[6] = new objects();//Стол с девушкой
arr[6].x = 653;
arr[6].y = 10;
arr[6].z = 600;
arr[6].src = "/img/images/stol.png";
arr[6].width = 161;
arr[6].height = 199;

arr[7] = new objects();//Стенд опель
arr[7].x = 245;
arr[7].y = 32;
arr[7].z = 1100;
arr[7].src = "/img/images/stend-opel.png";
arr[7].width = 225;
arr[7].height = 236;

arr[8] = new objects();//Стенд шевролет
arr[8].x = 935;
arr[8].y = 28;
arr[8].z = 1100;
arr[8].src = "/img/images/stend-shevi.png";
arr[8].width = 224;
arr[8].height = 240;

arr[9] = new objects();//Фон
arr[9].x = 525;
arr[9].y = -1;
arr[9].z = 1200;
arr[9].src = "/img/images/fon.jpg";
arr[9].width = 1800;
arr[9].height = 287;

//Параметры наблюдателя и плоскости проекции
var cam = new vector(600, 10, -100);
var normal = new vector(0, 0, 1);
var point = new vector(0, 0, 0);
var center = new vector(600, 0, 600);

//пределы откланения камеры
var max_fi = 0.24906;
var min_fi = -0.24906;

var id_container = "script_container";//id контейнера
var old_cursor_x = -1;
var old_cursor_y = -1;
var k_speed = 0.0008; //коэффициент скорости движения камеры
var fi = 0.0;		//угол поворота камеры

var timer_return = null; //Таймер возврата картинки;
var delta_fi = 0.01; 	 //Приращение камеры
var delay = 30;			 //Задержка таймера


//Инициализация окружения
window.onload = function ()
{
	var el = document.getElementById(id_container);
	if(el!=null)
	{
		for(i=0; i<arr.length; i++)
		{
			var cx = arr[i].x - arr[i].width/2;
			var cy = arr[i].z;
			
			var rx = cx - center.x;
			var ry = cy - center.z;
			
			arr[i].R = Math.sqrt(rx*rx + ry*ry);
			
			arr[i].cos_a = (cx - center.x)/arr[i].R;
			arr[i].sin_a = (cy - center.z)/arr[i].R;
		}
		
		update_positions();
		var str = "";
		for(i=0; i<arr.length; i++)
		{
			str = str + "<div id='obj_" + i + "' style=\"position: absolute; left:" + arr[i].pos_x + "px; bottom:" + arr[i].pos_y + "px; background: transparent url(" + arr[i].src + "); width:" + arr[i].width + "px; height:" + arr[i].height + "px; z-index: " + -arr[i].z + ";"+
			"_background:none;"+
			"_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=.." + arr[i].src + ", sizingMethod='crop');"+
			"\"></div>";
		}
		el.innerHTML = str;

		
		//Функция передвижения камеры
		el.onmousemove = function (e)
		{
			//alert(navigator.appName);
			if (!e) 
				e = window.event;
			
			if(navigator.appName=='Microsoft Internet Explorer')
			{
				if(old_cursor_x<0)
				{
					var delta_x = 0;
					//var delta_y = 0;
					old_cursor_x = e.clientX;
					//old_cursor_y = e.clientY;
				}
				else	
				{
					var delta_x = old_cursor_x - e.clientX;
					//var delta_y = old_cursor_y - e.clientY;
					old_cursor_x = e.clientX;
					//old_cursor_y = e.clientY;
				}
			}
			else
			{
				if(old_cursor_x<0)
				{
					var delta_x = 0;
					//var delta_y = 0;
					old_cursor_x = e.pageX;
					//old_cursor_y = e.pageY;
				}
				else	
				{
					var delta_x = old_cursor_x - e.pageX;
					//var delta_y = old_cursor_y - e.pageY;
					old_cursor_x = e.pageX;
					//old_cursor_y = e.pageY;
				}
			}

			fi = fi - delta_x * k_speed;
			if(max_fi<fi)	
				fi = max_fi;
			
			if(min_fi>fi)	
				fi = min_fi;
				
			update_positions();
			shift_objects();
		}
		el.onmouseover = function (e)
		{
			if(timer_return!=null)
			{
				clearInterval(timer_return);
				timer_return = null;
			}
		}
		el.onmouseout = function (e)
		{
			old_cursor_x = -1
			if(timer_return==null)
				timer_return = setInterval(return_camera, delay);
		}
	}
}

//Функция возврата камеры
function return_camera()
{
	if(fi<0.0)
	{
		fi+=delta_fi;
		//alert("2 " + fi);
		if(fi>=0.0)
		{
			fi = 0.0;
			clearInterval(timer_return);
			timer_return = null;
		}
	}
	else
	{
		fi-=delta_fi;
		if(fi<=0.0)
		{
			fi = 0.0;
			clearInterval(timer_return);
			timer_return = null;
		}
	}
	update_positions();
	shift_objects();
}


//Функция расчета положения проекции объектов
function update_positions()
{
	var cos_fi = Math.cos(fi);
	var sin_fi = Math.sin(fi);
	
	for(i=0; i<arr.length; i++)
	{
		var x = center.x + arr[i].R * (arr[i].cos_a * cos_fi - arr[i].sin_a * sin_fi);
		var y = center.z + arr[i].R * (arr[i].sin_a * cos_fi + arr[i].cos_a * sin_fi);
		
		var V = new vector(x - point.x, arr[i].y - point.y, y - point.z);
	
		// расстояние до плоскости по нормали
		var d = dot(normal, V);
		var W = new vector(x - cam.x, arr[i].y - cam.y, y - cam.z);

		// приближение к плоскости по нормали при прохождении отрезка
		var e = dot(normal, W) ;
		if( e!=0 )// одна точка
		{
			var len = d/e;
  			var O = new vector(cam.x + W.x * len,  cam.y + W.y * len, cam.z + W.z * len);          
  			arr[i].pos_x = O.x;
  			arr[i].pos_y = O.y;
		}
		else //прямая паральна или принадлежит плоскости
		{
			arr[i].pos_x = -10000;
  			arr[i].pos_y = -10000;
		}
	}
}

//Скалярное произведение векторов
function dot (A, B)
{
	var D=(A.x*B.x)+(A.y*B.y)+(A.z*B.z);
	return D;
}

function shift_objects()
{
	for(i=0; i<arr.length; i++)
	{
		var el = document.getElementById('obj_' + i);
		if(el!=null)
		{
			el.style.left = arr[i].pos_x + "px";
		}
	}
}
	
