document.vars = new Array();//глобальные переменные
document.vars['zoom'] = 3;
document.vars['zoomStep'] = [3, 6, 9];
document.vars['xy'] = {'x':0.5, 'y':0.5};
document.vars['photoCurent'] = 0;

function openPanorame(){
	document.getElementById('panorameArea').onmousemove = _movePanorame;
	
	var p = document.getElementById('panorame');
	p.style.display = 'block';
	
	loadPanorame(panorameArray[document.vars['photoCurent']]);
}

function loadPanorame(img){
	if(typeof document.vars['loadPanorame'] == "undefined" || document.vars['loadPanorame'] == false){
		var i = document.getElementById('panorameImg');
		var a = document.getElementById('panorameArea');
		var b = document.getElementsByTagName('body')[0];
		
		i.style.display = 'none';
		document.vars['zoom'] = 3;
		document.vars['xy'] = {'x':0.5, 'y':0.5};
		a.scrollTop = (gOfs(i).h - gOfs(a).h) * document.vars['xy']['y'];
		a.scrollLeft = (gOfs(i).w - gOfs(a).w) * document.vars['xy']['x'];
		
		var pic = new Image();
		pic.onload = function(){
			i.src = pic.src;
			i.style.display = 'block';
			/*var h_target = gOfs(i).h;
			var m_target = gOfs(i).h / 2 * -1;*/
			if(getBrowser().b == 'IE' && getBrowser().v >= 6){
				a.style.height = '500px';
				a.style.marginTop = '-250px';
				zoomPanorame('current');
			}else{
				if(gOfs(i).h <= gOfs(b).h - 200){
					var h_target = gOfs(i).h;
					var m_target = gOfs(i).h / 2 * -1;
				}else{
					var h_target = gOfs(b).h - 200;
					var m_target = (gOfs(b).h - 200) / 2 * -1;
				}
				
				i.style.display = 'none';
				if(typeof document.vars['loadPanorame'] == "undefined" || document.vars['loadPanorame'] == false){
					document.vars['loadPanorame'] = setInterval(
						function(){
							var amt  = getStyle(a, 'margin-top');
							amt = amt.substr(0, amt.length - 2) / 1;
							
							if(h_target - (gOfs(a).h - 8) > 10){
								a.style.height = gOfs(a).h - 8 + 5 + 'px';
								if(m_target - amt < -10){
									a.style.marginTop = amt - 5 + 'px';
								}else{
									a.style.marginTop = m_target + 'px';
								}
							}else if((gOfs(a).h - 8) - h_target > 10){
								a.style.height = gOfs(a).h - 8 - 5 + 'px';
								if(amt - m_target < -10){
									a.style.marginTop = amt + 5 + 'px';
								}else{
									a.style.marginTop = m_target + 'px';
								}
							}else{
								a.style.height = h_target + 'px';
								i.style.display = 'block';
								a.style.marginTop = m_target + 'px';
								//i.style.width = document.vars['zoom'] * 100 + '%';
								zoomPanorame('current');
								clearInterval(document.vars['loadPanorame']);
								document.vars['loadPanorame'] = false;
							}
						}, 10
					)
				}
			}
		}
		
		pic.src = "/panorame/photo/" + img;
	}
}

function prePanorame(){
	document.vars['photoCurent'] = (document.vars['photoCurent'] + panorameArray.length - 1) % panorameArray.length;
	loadPanorame(panorameArray[document.vars['photoCurent']]);
}

function nextPanorame(){
	document.vars['photoCurent'] = (document.vars['photoCurent'] + panorameArray.length + 1) % panorameArray.length;
	loadPanorame(panorameArray[document.vars['photoCurent']]);
}

function closePanorame(){
	var p = document.getElementById('panorame');
	p.style.display = 'none';
}

function zoomPanorame(v){
	var i = document.getElementById('panorameImg');
	var a = document.getElementById('panorameArea');
	var b = document.getElementsByTagName('body')[0];
	
	if(v == 'in'){
		if(document.vars['zoom'] + 1 <= document.vars['zoomStep'][document.vars['zoomStep'].length - 1]){
			document.vars['zoom']++;
		}
	}else if(v == 'out'){
		if(document.vars['zoom'] > 1){
			document.vars['zoom']--;
		}
	}
	
	//i.style.width = document.vars['zoom'] * 100 + '%';
	i.style.height = document.vars['zoom'] * 300 + 'px';
	if(gOfs(i).w < gOfs(b).w || gOfs(i).h < gOfs(b).h - 200){
		document.vars['zoom']++;
		i.style.height = document.vars['zoom'] * 300 + 'px';
	}
	
	a.style.overflow = 'hidden';
	if(getBrowser().b == 'IE' && getBrowser().v >= 6){
		a.style.height = '500px';
		a.style.marginTop = '-250px';
	}else if(gOfs(i).h <= gOfs(b).h - 200){
		a.style.height = gOfs(i).h + 'px';
		a.style.marginTop = gOfs(i).h / 2 * -1 +'px';
	}else{
		a.style.height = gOfs(b).h - 200 + 'px';
		a.style.marginTop = (gOfs(b).h - 200) / 2 * -1 +'px';
	}
	
	a.scrollTop = (gOfs(i).h - gOfs(a).h) * document.vars['xy']['y'];
	a.scrollLeft = (gOfs(i).w - gOfs(a).w) * document.vars['xy']['x'];
}

function _movePanorame(e){
	var i = document.getElementById('panorameImg');
	var a = document.getElementById('panorameArea');
	
	var mouse = mousePageXY(e);
	mouse.x -= gOfs(a).x;
	mouse.y -= gOfs(a).y;
	document.vars['xy'] = {'x':((mouse.x - 150) / (gOfs(a).w - 300)).toFixed(2), 'y':((mouse.y - 100) / (gOfs(a).h - 200)).toFixed(2)}
	
	a.scrollTop = (gOfs(i).h - gOfs(a).h) * document.vars['xy']['y'];
	a.scrollLeft = (gOfs(i).w - gOfs(a).w) * document.vars['xy']['x'];
}

/*Координаты мыши и размеры объектов*/
function mousePageXY(e){
	x = 0, y = 0;
	if (!e) e = window.event;
	if (e.pageX || e.pageY)
	{
		x = e.pageX;
		y = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
	}
	return {"x":x, "y":y};
}

function gOfs(obj){
	obj.xVal=0, obj.yVal=0, obj.wVal=0, obj.hVal=0;
	obj.wVal = obj.offsetWidth;
	obj.hVal = obj.offsetHeight;
	
	if(obj.getBoundingClientRect){
		getOffsetRect(obj);
	}else{
		getOffsetSum(obj);
	}
	//alert(obj.xVal+' '+obj.yVal);
	return {x: obj.xVal, y: obj.yVal, w: obj.wVal, h: obj.hVal}
}
function getOffsetRect(obj) {
	var box = obj.getBoundingClientRect();
	var body = document.body;
	var docElem = document.documentElement;
	var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
	var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;
	var clientTop = docElem.clientTop || body.clientTop || 0;
	var clientLeft = docElem.clientLeft || body.clientLeft || 0;
	obj.xVal = Math.round(box.left + scrollLeft - clientLeft);
	obj.yVal = Math.round(box.top +  scrollTop - clientTop);
	//document.title += "|"+obj.id+"."+obj.xVal+"."+obj.yVal;

	return obj
}
function getOffsetSum(obj){
	if(obj.offsetParent){
		objParent=obj.offsetParent;
		while (objParent.offsetParent)
		{
			obj.xVal+=objParent.offsetLeft;
			obj.yVal+=objParent.offsetTop;
			objParent=objParent.offsetParent;
		}
	}else if (obj.x){
		obj.xVal = obj.x;
		obj.yVal = obj.y;
	}
	return obj
}
/*Координаты мыши и размеры объектов*/

//CTRL + *
function freeCode(e, key){//защита от продолжительного нажатия клавиши
	e = e || window.event;
	if(checkKeyCode(e, key) && (document.ctrl[key] == null || typeof document.ctrl[key] == "undefined"))return true;
	return false;
}
function blockHotKey(e){//блокируем "горячие клавиши" браузеров, например, ctrl + s
	e = e || window.event;
	if(e.preventDefault) e.preventDefault();
	e.returnValue = false;
}
document.onkeydown = function(e){
	e = e || window.event;

	var key = e.keyCode || e.which;
	//document.title = key;
	
	if(typeof document.ctrl == "undefined")document.ctrl = new Array();
	
	if(checkKeyCode(e, 17)){//ctrl не должен обязательно отпускаться, поэтому идет отдельно
		document.ctrl[17] = true;
	}else if(freeCode(e, key)){
		document.ctrl[key] = true;
	}

	if(e.ctrlKey){
		if(inArray(key, [107, 109, 187, 189, 43, 45, 61]))blockHotKey(e);//187, 189 - плюс и минус на основной клавиатуре в Crome
		
		if(document.ctrl[37]){//предыдущее фото
			prePanorame();
			document.ctrl[37] = false;
		}else if(document.ctrl[39]){//следующее фото
			nextPanorame();
			document.ctrl[39] = false;
		}else if(document.ctrl[109] || document.ctrl[189] || document.ctrl[45]){//zoom out
			zoomPanorame('out');
			document.ctrl[109] = false;//FF, Crome, Opera, IE
			document.ctrl[189] = false;//Crome, IE
			document.ctrl[45] = false;//Opera
		}else if(document.ctrl[107] || document.ctrl[187] || document.ctrl[61] || document.ctrl[43]){//zoom in
			zoomPanorame('in');
			document.ctrl[107] = false;//FF, Crome, IE
			document.ctrl[187] = false;//Crome, IE
			document.ctrl[61] = false;//Opera
			document.ctrl[43] = false;//Opera
		}
	}
}
document.onkeyup = function(e){
	e = e || window.event;
	var key = e.keyCode || e.which;
	if(typeof document.ctrl != "undefined" && typeof document.ctrl[key] != "undefined")document.ctrl[key] = null;
}
/*Определяем нажатую клавишу и проверяем ее соответствие заданной*/
/* checkKeyCode(e,39) или checkKeyCode(e,"s") */
function checkKeyCode(e,check){
	if (!e) e = window.event;
	var key = e.keyCode || e.which;
	//document.title = key +" "+ String.fromCharCode(key).toLowerCase();
	if(typeof check == "number"){
		return key == check;
	}else{
		return String.fromCharCode(key).toLowerCase() == check;
	}
	return false;
}
/*Определяем нажатую клавишу и проверяем ее соответствие заданной*/
/*Вхождение значения в массив*/
function inArray(val, arr){
    for(i in arr){
        if(val == arr[i]){
            return true;
        }
    }
    return false;
}
/*Вхождение значения в массив*/
//CTRL + *

/*Получаем стили объекта, заданные через CSS*/
function getStyle(elem, prop){
	if (typeof elem!="object") elem = document.getElementById(elem);
	
	// external stylesheet for Mozilla, Opera 7+ and Safari 1.3+
	if (document.defaultView && document.defaultView.getComputedStyle){
		if (prop.match(/[A-Z]/)) prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
		return document.defaultView.getComputedStyle(elem, "").getPropertyValue(prop);
	}
	
	// external stylesheet for Explorer and Opera 9
	if (elem.currentStyle){
		var i;
		while ((i=prop.indexOf("-"))!=-1) prop = prop.substr(0, i) + prop.substr(i+1,1).toUpperCase() + prop.substr(i+2);
		return elem.currentStyle[prop];
	}
	
	return "";
}
/*Получаем стили объекта, заданные через CSS*/

/*Определяем браузеры*/
function getBrowser(){
	var browser = navigator.appName;
	var b_version = navigator.appVersion;
	var platform = navigator.platform == "Win64" ? 64 : 32;
	var version = b_version.substring(b_version.indexOf("MSIE")+5,b_version.indexOf("MSIE")+6);
	
	if(browser == "Microsoft Internet Explorer")browser = "IE";
	
	return {b:browser, v:version, p:platform};
}
/*Определяем браузеры*/
