var IE = document.all?true:false;
var nn6=document.getElementById&&!document.all;

var photosPath = './photos/';

var lastMouseX = 0;
var lastMouseY = 0;
var mouseX = 0;
var mouseY = 0;
var mouseB = 0;
var mX = 0;
var mY = 0;
var mouseUhel = 0;
var mouseVx = 0;

var zoomSpeed = 50;
var acceleration = 0;
var normalizeTime = 30;
var beta = 1.0;
var delay = 60;
var alfaMin = 0.5;
var speed = 0.005;
var waitTimeMax = 50;
var waitTime = 0;
var speedMax = 0.005;
var uhel = 0;
var xWidth = 425;
var yWidth = 100;
var xCenter = 425;
var yCenter = 120;
var stopWidth = 20;
var c = speedMax/(xWidth+stopWidth);
var k = (1-alfaMin)/2;
var nImages = 0;
var speedAnimation = 0.15;
var smallImgWidth = 140;
var smallImgHeight = 105;
var zoomWidth = smallImgWidth;
var zoomHeight = smallImgHeight;

var isNeotacejse = false;

var flyAway = false;
var flyIn = false;

var docX = 0;
var docY = 0;

var maxImages = 20;

var arImages = new Array(maxImages);
var arImagesSW = new Array(maxImages);
var arImagesSH = new Array(maxImages);
var arImagesBW = new Array(maxImages);
var arImagesBH = new Array(maxImages);

var photoOpened = false;
var photoZoomout = false;
var isAnimation = false;
var animationID = 0;

var photoW = 800;
var photoH = 600;
var photoR = photoW/photoH;

var dragObj = null;
var dragObjX = 0;
var dragObjY = 0;
var dragObjPosX = 0;
var dragObjId = 0;
var isDrag = false;
var wasDragged = false;
var wasSmer = 1;

var rozestup = 0;
var d = 6.28;
var r = 1;
var arUhel = new Array(maxImages);

function addImage(sw,sh,bw,bh){
	arImages[nImages] = new Image();
	arImages[nImages].src = photosPath+nImages+'b.jpg';
	arImagesSW[nImages] = sw;
	arImagesSH[nImages] = sh;
	arImagesBW[nImages] = bw;
	arImagesBH[nImages] = bh;
	nImages++;
}

function getMouseXY(e){
  if(!e) e=window.event;
  var tempX = 0;
  var tempY = 0;
  if(IE){
    tempX = event.clientX + document.body.scrollLeft
    tempY = event.clientY + document.body.scrollTop
  }
  else{
    tempX = e.pageX
    tempY = e.pageY
  } 
  if (tempX < 0){tempX = 0}
  if (tempY < 0){tempY = 0}
  
  lastMouseX = mouseX;
  lastMouseY = mouseY;
  mouseX = tempX-docX;
  mouseY = tempY-docY;
  mouseVx = mouseX-lastMouseX;
  mX = mouseX - xCenter;
  mY = mouseY;
  return true;
}

function dragObject(e){
	getMouseXY(e);
	if((mouseB > 0)&&(dragObj)&&(!isAnimation)){
		isDrag = true;
		dragObjPosX = (mouseX-dragObjX);
	}
}

function getTopPos(inputObj){
	var returnValue = inputObj.offsetTop;
	while((inputObj = inputObj.offsetParent) != null){
		if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
	}
	return returnValue;
}

function getLeftPos(inputObj){
	var returnValue = inputObj.offsetLeft;
	while((inputObj = inputObj.offsetParent) != null){
		if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
	}
	return returnValue;
}


function getMouseDown(e,evElement){
  if(!e){
    if(window.event){
      e = window.event;
    }
	else{
      return;
    }
  }
  getMouseXY(e);
  var but = 0;
  if(typeof(e.which) == 'number'){
    but = e.which;
  }
  else if(typeof(e.button) == 'number'){
    but = e.button;
  }
  else{
    return;
  }
  if(!evElement){evElement = this;}
  mouseB = but;
  
  var fobj       = nn6 ? e.target : event.srcElement;
  var topelement = nn6 ? "HTML" : "BODY";

  while (fobj.tagName != topelement && fobj.className != "fly")
  {
    fobj = nn6 ? fobj.parentNode : fobj.parentElement;
  }

  if (fobj.className=="fly")
  {
    if(!isAnimation){
		dragObj = fobj;
		dragObjX = mouseX-getLeftPos(fobj)+docX;
		dragObjY = mouseY-getTopPos(fobj)+docY;
		dragObjId = fobj.id.substring(3,fobj.id.length);
		document.onmousemove=dragObject;
	}
    return false;
  }
  
  return false;
}

function getMouseUp(e,evElement){
  getMouseXY(e);
  mouseB = 0;
  dragObj = null;
  isDrag = false;
}

function selectObjectForDrag(obj){
	if(!isAnimation){
		dragObj = obj;
		dragObjX = mouseX-getLeftPos(obj);
		dragObjY = mouseY-getTopPos(obj);
		dragObjId = obj.id.substring(3,obj.id.length);
	}
	return false;
}

function openPhoto(obj){
	if(!wasDragged){
		if(!photoOpened){
			isAnimation = true;
			animationID = obj.id.substring(3,obj.id.length);
			if((arUhel[animationID] > 0)&&(arUhel[animationID] <= 3.14)){
				speed = -speedAnimation;
			}
			else if((arUhel[animationID] < 6.28)&&(arUhel[animationID] > 3.14)){
				speed = speedAnimation;
			}
			photoR = arImagesBW[animationID]/arImagesBH[animationID];
			photoW = arImagesBW[animationID];
			photoH = arImagesBH[animationID];
			smallImgWidth = arImagesSW[animationID];
			smallImgHeight = arImagesSH[animationID];
			zoomWidth = smallImgWidth;
			zoomHeight = smallImgHeight;
			document.getElementById('fly'+animationID).src = arImages[animationID].src;
		}
		else{
			photoZoomout = true;
		}
	}
	wasDragged = false;
	
}

function init(){
	
	addImage(144,96,800,535);
	addImage(81,108,450,600);
	addImage(81,108,450,600);
	addImage(81,108,450,600);
	addImage(72,108,400,600);
	addImage(144,108,800,600);
	addImage(144,108,800,600);
	addImage(144,97,800,537);
	addImage(72,108,402,600);
	addImage(144,96,800,535);
	addImage(81,108,450,600);
	addImage(144,96,800,535);
	addImage(72,108,402,600);
	addImage(71,108,393,600);
	addImage(144,96,800,535);
	addImage(144,96,800,535);
	addImage(144,96,800,535);
	addImage(144,96,800,535);
	addImage(72,108,402,600);
	
	rozestup = 6.28/nImages;
	r = (1-alfaMin)/2;
	//d = 2*r*Math.sin(rozestup/2)*xWidth;
	
	//var ksi = 2*Math.asin((d-arImagesSW[i])/(4*r));
	//var uhelc = +ksi;
	d = Math.round(Math.abs(Math.sin(0)*xWidth-Math.sin(rozestup)*xWidth));
	
	
	for(var i=0;i<nImages;i++){
		arUhel[i] = i*rozestup;
	}
	
	var docW = document.body.offsetWidth;
	docX = Math.floor((docW-960)/2);
	if(docX < 0){
		docX = 0;
	}
	docY = 380;
	var htmlCode = '';
	for(var i=0;i<nImages;i++){
		htmlCode+= '<img onclick="openPhoto(this)" onmousedown="selectObjectForDrag(this)" class="fly" id="fly'+i+'" src="'+photosPath+i+'.jpg" width="'+arImagesSW[i]+'" height="'+arImagesSH[i]+'" alt="" />';
	}
	document.getElementById('objekty').innerHTML = htmlCode;
	otacejse();
}

function zoomPhoto(photoID){
	if(zoomWidth < photoW){
		zoomWidth+= zoomSpeed*photoR;
		zoomHeight+= zoomSpeed;
	}
	else{
		zoomWidth = photoW;
		zoomHeight = photoH;
	}
	document.getElementById('fly'+photoID).width = Math.round(zoomWidth);
	document.getElementById('fly'+photoID).height = Math.floor(zoomHeight);
	document.getElementById('fly'+photoID).style.top = ''+Math.round(yCenter-zoomHeight/2+100-(zoomHeight-smallImgHeight)/3)+'px';
	document.getElementById('fly'+photoID).style.left = ''+Math.round(xCenter-zoomWidth/2+70)+'px';
	document.getElementById('fly'+photoID).style.zIndex = 100;
}

function zoomoutPhoto(photoID){
	if(zoomWidth > smallImgWidth){
		zoomWidth-= zoomSpeed*photoR;
		zoomHeight-= zoomSpeed;
	}
	else{
		zoomWidth = smallImgWidth;
		zoomHeight = smallImgHeight;
		document.getElementById('fly'+animationID).src = photosPath+animationID+'.jpg';
		photoOpened = false;
		isAnimation = false;
		photoZoomout = false;
	}
	document.getElementById('fly'+photoID).width = Math.round(zoomWidth);
	document.getElementById('fly'+photoID).height = Math.floor(zoomHeight);
	
	document.getElementById('fly'+photoID).style.top = ''+Math.round(yCenter-zoomHeight/2+100-(zoomHeight-smallImgHeight)/3)+'px';
	document.getElementById('fly'+photoID).style.left = ''+Math.round(xCenter-zoomWidth/2+70)+'px';
	speed = wasSmer*speedMax;
}

function otacejse(){
	
	var u = 0;
	var animationStop = false;
	if(isAnimation){
		var nextUhel = arUhel[animationID]+speed;
		if((arUhel[animationID] > 4.71 && nextUhel > 6.28 )||(arUhel[animationID] < 1.57 && nextUhel < 0 )){
			animationStop = true;
			if(speed >= 0){
				wasSmer = 1;
			}
			else{
				wasSmer = -1;
			}
			speed = 0;
			isAnimation = false;
			//document.getElementById('fly'+animationID).style.visibility='hidden';
		}
	}
	else if(isDrag){
		wasDragged = true;
		if(dragObjPosX-xCenter > xWidth){
			dragObjPosX = xCenter+xWidth;
		}
		if(dragObjPosX-xCenter < -xWidth){
			dragObjPosX = xCenter-xWidth;
		}
		u = Math.asin((dragObjPosX-xCenter)/xWidth);
		speed = mouseVx/200;
	}
	else if(Math.abs(speed) > speedMax){
		acceleration = (speedMax-speed)/normalizeTime;
	}
	else{
		acceleration = 0;
	}
	
	if((!photoOpened)&&(!flyAway)&&(!flyIn)&&(!isNeotacejse)){
		if(Math.abs(speed) < 0.00001){
			waitTime++;
		}
		else{
			waitTime = 0;
		}
		if(waitTime >= waitTimeMax){
			speed = speedMax;
		}
		speed+= acceleration;
		if(animationStop){
			photoOpened = true;
		}
		for(var i=0;i<nImages;i++){
			if(animationStop){
				arUhel[i] = u+(i-animationID)*rozestup;
			}
			else if(isDrag){
				arUhel[i] = u+(i-dragObjId)*rozestup;
			}
			else{
				arUhel[i]+= speed;
			}
			
			if(arUhel[i] > 6.28){
				arUhel[i]-= 6.28;
			}
			if(arUhel[i] < 0){
				arUhel[i]+= 6.28;
			}
			
			var pos = (d-arImagesSW[i])/2;
			var ksi = rozestup*pos/d;
			if(Math.cos(arUhel[i]) < 0)ksi = -ksi;
			var uhelc = arUhel[i]+ksi;
			var alfa = 1-k*(1-Math.cos(uhelc));
			var x = Math.sin(uhelc);
			var y = Math.cos(uhelc);
			
			if(y > 0){
				y = 0;
			}
			
			y=y*x;

			document.getElementById('fly'+i).width=Math.round(beta*arImagesSW[i]*alfa);
			document.getElementById('fly'+i).height=Math.round(beta*arImagesSH[i]*alfa);
			document.getElementById('fly'+i).style.left=''+Math.round(xCenter+(x+y*0.05)*xWidth)+'px';
			document.getElementById('fly'+i).style.top=''+Math.round(yCenter+(alfa-alfaMin)*yWidth)+'px';

			if(IE){
				document.getElementById('fly'+i).style.filter = "alpha(opacity="+Math.round((alfa+0.5)*alfa*100)+")";
			}
			else{
				document.getElementById('fly'+i).style.opacity = (alfa+0.5)*alfa;
			}
			document.getElementById('fly'+i).style.borderWidth=''+Math.round((alfa+0.5)*alfa*3)+'px';
			
			var zIndex = Math.round(((nImages-1)/(1-alfaMin)*(alfa-alfaMin)))+1;
			document.getElementById('fly'+i).style.zIndex = zIndex;
		}
	}
	else if(flyAway){
		var allAway = true;
		if(document.getElementById('fly0').style.opacity){
			for(var i=0;i<nImages;i++){
				var alfa = document.getElementById('fly'+i).style.opacity;
				alfa-= 0.1;
				if(alfa <= 0){
					alfa = 0;
				}
				else{
					allAway = false;
				}
				document.getElementById('fly'+i).style.opacity = alfa;
			}
		}
		if(allAway){
			flyAway = false;
			document.getElementById('objekty').style.display='none';
			document.getElementById('aboutme').style.display='block';
		}
	}
	else if(flyIn){
		var allIn = true;
		if(document.getElementById('fly0').style.opacity){
			for(var i=0;i<nImages;i++){
				var alfa = parseFloat(document.getElementById('fly'+i).style.opacity);
				alfa+=0.1;
				if(alfa >= 0.5){
					alfa = 0.5;
				}
				else{
					allIn = false;
				}
				document.getElementById('fly'+i).style.opacity = alfa;
			}
		}
		if(allIn){
			flyIn = false;
			isNeotacejse = false;
			flyAway = false;
		}
	}
	else if(photoZoomout){
		zoomoutPhoto(animationID);
	}
	else if(!isNeotacejse){
		zoomPhoto(animationID);
	}
	lastMouseX = mouseX;
	lastMouseY = mouseY;
	mouseVx = mouseX-lastMouseX;
	var timer = window.setTimeout("otacejse()",delay);
}

function cancelEvent(){
	return false;
}

function openAboutMe(){
	if((!flyAway)&&(!flyIn)&&(!photoOpened)){
		flyAway = true;
		isNeotacejse = true;
		document.getElementById('pagenameimg').src='./images/omne.gif';
	}
}

function openPhotogallery(){
	if((!flyAway)&&(!flyIn)&&(!photoOpened)){
		flyIn = true;
		isNeotacejse = true;
		document.getElementById('pagenameimg').src='./images/fotografie.gif';
		document.getElementById('aboutme').style.display='none';
		document.getElementById('objekty').style.display='block';
	}
}

window.onload = init;
if (!IE) document.captureEvents(Event.MOUSEMOVE)
if (!IE) document.captureEvents(Event.MOUSEDOWN)
if (!IE) document.captureEvents(Event.MOUSEUP)
document.onmousedown = getMouseDown;
document.onmouseup = getMouseUp;
document.ondragstart = cancelEvent;
