
// -----------------------------------------------------------------------------
// Litebox display update function
// -----------------------------------------------------------------------------

	function litebox() {
	
		updateDisplay();

	}
	
	function liteboxMouseDown(e) {

		var pos = liteboxMouseCoords(e);
		
		buttonPressed = liteboxInterface(pos);
		
		if (buttonPressed>-1) {
		
			switch (interfaceButtons[buttonPressed].id) {
			
				case 1:
					liteboxCascade();
					break;

				case 2:
					liteboxTile();
					break;
				
				case 3:
					liteboxChain();
					break;
			
			}
		
		} else {

			moh = liteboxFetchMouseOverPhoto(true);
			if (moh.length>0) {
				photoSelected = photos.length-1;
				updateDisplay();
			}

			mouseToggle = true;
		
		}
	
	}

	function liteboxMouseMove(e) {
		
		var pos = liteboxMouseCoords(e);
				
		mouseX = pos.x;
		mouseY = pos.y;

		if (rotateToggle) { photos[photoSelected].angle  += mouseX-lastX; }
		if (scaleToggle)  { photos[photoSelected].scale  += (mouseY-lastY)/100; }
		if (mouseToggle)  { photos[photoSelected].xCoord += mouseX-lastX; photos[photoSelected].yCoord += mouseY-lastY;  }

		liteboxFetchMouseOverPhoto();

		lastX = mouseX;
		lastY = mouseY;

		updateDisplay();
	
	}

	function liteboxMouseUp(e) {
	
		mouseToggle = false;
	
	}

	function liteboxClick(e) {
		
		var pos = liteboxMouseCoords(e);
				
		mouseX = pos.x;
		mouseY = pos.y;

		photoSelected++;
		if (photoSelected>photos.length-1) { photoSelected = 0; }
		
		updateDisplay();
	
	}

	function liteboxKeyDown(e) {
	
		key = getKeyPressed(e);

		switch (key) {
		
			case 16: //Shift
				scaleToggle = true;
				break;
			case 17: //Ctrl
				rotateToggle = true;
				break;

		}

	}

	function liteboxKeyUp(e) {

		key = getKeyPressed(e);

		switch (key) {
		
			case 16:
				scaleToggle = false;
				break;
			case 17:
				rotateToggle = false;
				break;

			case 82: //Reset
				photos[photoSelected].alpha = 1;
				photos[photoSelected].angle = 0;
				break;

			//1 to 0, scaling	
			case 49: photos[photoSelected].scale = 0.1; break;
			case 50: photos[photoSelected].scale = 0.2; break;
			case 51: photos[photoSelected].scale = 0.3; break;
			case 52: photos[photoSelected].scale = 0.4; break;
			case 53: photos[photoSelected].scale = 0.5; break;
			case 54: photos[photoSelected].scale = 0.6; break;
			case 55: photos[photoSelected].scale = 0.7; break;
			case 56: photos[photoSelected].scale = 0.8; break;
			case 57: photos[photoSelected].scale = 0.9; break;
			case 48: photos[photoSelected].scale = 1; break;

			case 65: photos[photoSelected].alpha += 0.1;
				 if (photos[photoSelected].alpha > 1) photos[photoSelected].alpha = 0.1;
				 break;

			//default: alert(key); break;

		}
		
		updateDisplay();

	}

	function liteboxMouseCoords(e) {
		
		var x, y;
		
		x = e.clientX-canvasX;
		if (x<0)   { x = 0; }
		if (x>599) { x = 599; }

		y = e.clientY-canvasY;
		if (y<0)   { y = 0; }
		if (y>599) { y = 599; }
	
		return {x: x, y: y};
	}
	
	function getKeyPressed(e) {

		if(window.event) // IE
		{
			keynum = e.keyCode
		}
		else if(e.which) // Netscape/Firefox/Opera
		{
			keynum = e.which
		}
		
		return keynum;
	
	}
	
	function liteboxFetchMouseOverPhoto(promote) {
	
		var moh = new Array();
	
		for (p=0;p<photos.length;p++) {

			x = Math.abs(photos[p].xCoord-mouseX);
			y = Math.abs(photos[p].yCoord-mouseY);

			d = Math.sqrt((x*x)+(y*y))*(1/photos[p].scale);

			if (d<photos[p].photo.deltaRadius) {
				photos[p].highlight = false;
				moh.push(p);
				pindex = p;
			} else {
				photos[p].highlight = true;
			}

		}
		
		if (promote) {
		
			pselected = photos[pindex];
			photos.splice(pindex,1);
			photos.push(pselected);
		
		}
		
		return moh;
	
	}

	function liteboxInterface(mousePos) {
	
		var buttonClicked = -1;
	
		for(b=0;b<interfaceButtons.length;b++) {
		
			if (mousePos.x > interfaceButtons[b].x1 && mousePos.x < interfaceButtons[b].x2 && mousePos.y > interfaceButtons[b].y1 && mousePos.y < interfaceButtons[b].y2) {
			
				buttonClicked = b;
			
			}
		
		}
		
		return buttonClicked;
	
	}
	
	function liteboxCascade() {

		for (p=0;p<photos.length;p++) {

			pos = 100 + (p*60);

			photos[p].xCoord = pos;
			photos[p].yCoord = pos;

			photos[p].scale = 0.5;
			photos[p].angle = 0;

		}

		updateDisplay();

	}

	function liteboxTile() {
		
		alert('Image tile not yet implemented.');
		
	}

	function liteboxChain() {

		alert('Image chain not yet implemented.');

	}


// -----------------------------------------------------------------------------
// Photo object
// -----------------------------------------------------------------------------

	function Photo() {
	
		this.id = photos.length;
		this.title = '';
		this.xCoord = 100+(Math.random()*400);
		this.yCoord = 100+(Math.random()*400);
		this.zIndex = 1;
		this.scale = 0.5;
		this.angle = 0;
		this.alpha = 1;
		this.highlight = false;
		
		this.photo = new Image();
		this.photo.onload = photoLoaded;
		this.photo.loaded = false;
		this.photo.deltaRadius = 0;

		this.load = photoLoad;

	}
	
	function photoLoad(photoUrl) {
		
		this.photo.src = photoUrl;
	
	}
	
	function photoLoaded() {
	
		this.loaded = true;
		this.deltaRadius = Math.sqrt((this.width*this.width)+(this.height*this.height))/2;
		updateDisplay();
	
	}

// -----------------------------------------------------------------------------
// Element position (from Quirksmode: http://www.quirksmode.org/js/findpos.html)
// Modified to return an object.
// -----------------------------------------------------------------------------

	function findPos(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return {x: curleft, y: curtop};
	}
