// -----------------------------------------------------------------------------------
// 
// This page coded by Scott Upton
// http://www.uptonic.com | http://www.couloir.org
//
// This work is licensed under a Creative Commons License
// Attribution-ShareAlike 2.0
// http://creativecommons.org/licenses/by-sa/2.0/
//
// Associated APIs copyright their respective owners
//
// -----------------------------------------------------------------------------------
// --- version date: 11/28/05 --------------------------------------------------------


// get current photo id from URL
var thisURL = document.location.href;
var splitURL = thisURL.split("#");
var photoId = splitURL[1] - 1;

// if no photoId supplied then set default
var photoId = (!photoId)? 0 : photoId;

// CSS border size x 2
var borderSize = 10;

// Photo directory for this gallery
var photoDir = "photos/08/";

// Define each photo's name, height, width, and caption
var photoArray = new Array(
	// Source, Width, Height, Caption
		new Array("Lux14.jpg", "640", "480", 'На  центральной площади Люксембурга - Пляс д&#900;Арм - наш хор сидел в кафе уже в третий раз. А в мае 1997 года мы здесь выступали с концертом (видео №25 на сайте в разделе "История хора") <BR><BR> C&#900;est d&#233;j&#224; pour la troisi&#232;me fois qu&#900;on voyait notre groupe dans un caf&#233; sur la place centrale de Luxembourg - Place d&#900;Armes. En mai 1997 on y donnait un concert (la vid&#233;o №25 sur le site dans l&#900;"Histoire du groupe").'),
	new Array("Lux01.jpg", "640", "480", ""),
	new Array("Lux02.jpg", "640", "480", ""),
	new Array("Lux03.jpg", "480", "640", ""),
	new Array("Lux04.jpg", "640", "480", ""),
	new Array("Lux05.jpg", "640", "480", ""),
	new Array("Lux06.jpg", "640", "480", ""),
	new Array("Lux07.jpg", "480", "640", ""),
	new Array("Lux08.jpg", "640", "480", ""),
	new Array("Lux09.jpg", "640", "480", ""),
	new Array("Lux10.jpg", "640", "480", ""),
	new Array("Lux11.jpg", "640", "480", ""),
	new Array("Lux12.jpg", "480", "640", ""),
	new Array("Lux13.jpg", "480", "640", ""),
	new Array("Lux15.jpg", "640", "480", ""),
	new Array("Lux16.jpg", "480", "640", ""),
	new Array("Lux17.jpg", "640", "480", ""),
	new Array("Lux18.jpg", "640", "480", ""),
	new Array("Lux19.jpg", "640", "480", ""),
	new Array("Lux20.jpg", "640", "480", ""),
	new Array("Lux21.jpg", "480", "640", ""),
	new Array("Lux22.jpg", "480", "640", ""),
	new Array("Lux23.jpg", "640", "480", ""),
	new Array("Lux24.jpg", "640", "480", "На обратном пути, решив сделать нам приятное,  наш шофер привез нас в городок Бастонь... <BR><BR>  Sur le chemin de retour notre chauffeur nous a fait visiter la petite ville de Bastogne..."),
	new Array("Lux25.jpg", "480", "640", "Здесь состоялось одно из самых кровопролитных сражений в Арденнах во время второй мировой войны... <BR><BR> Ici eut lieu l'une des plus sanglantes batailles dans les Ardennes..."),
	new Array("Lux26.jpg", "640", "480", "Окруженные фашистами,  здесь погибло более 70 тысяч американских солдат... <BR><BR>  Encercl&#233;s par les nazis, ici trouv&#232;rent la mort  plus de 70 milliers de soldats am?ricain..."),
	new Array("Lux27.jpg", "640", "480", "В память об этом событии Соединенные Штаты выкупили  у Бельгии участок земли, придав ему статус американской территории, и возвели на нём монумент павшим... <BR><BR>  En m&#233;moire de cette bataille, les Etats-Unis ont rachet&#233; &#224; la Belgique un lopin de terre et, lui ayant confi&#233; le statut de territoire am&#233;ricain, y ont &#233;rig&#233;  un monunent aux morts..."),
	new Array("Lux28.jpg", "480", "640", "На фронтоне монумента упоминаются американчкие штаты, откуда были родом погибшие солдаты... <BR><BR> Sur le fronton du monument sont &#233;voqu&#233;s les Etats am&#233;ricains dont &#233;taient originaires les soldats tomb&#233;s..."),
	new Array("Lux29.jpg", "480", "640", "")
	);

// Number of photos in this gallery
var photoNum = photoArray.length;

/*--------------------------------------------------------------------------*/

// Additional methods for Element added by SU, Couloir
Object.extend(Element, {
	getWidth: function(element) {
   	element = $(element);
   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   	element = $(element);
    	element.style.height = h +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

/*--------------------------------------------------------------------------*/

var Slideshow = Class.create();

Slideshow.prototype = {
	initialize: function(photoId) {
		this.photoId = photoId;
		this.photo = 'Photo';
		this.photoBox = 'Container';
		this.prevLink = 'PrevLink';
		this.nextLink = 'NextLink';
		this.captionBox = 'CaptionContainer';
		this.caption = 'Caption';
		this.counter = 'Counter';
		this.loader = 'Loading';
	},
	getCurrentSize: function() {
		// Get current height and width, subtracting CSS border size
		this.wCur = Element.getWidth(this.photoBox) - borderSize;
		this.hCur = Element.getHeight(this.photoBox) - borderSize;
	},
	getNewSize: function() {
		// Get current height and width
		this.wNew = photoArray[photoId][1];
		this.hNew = photoArray[photoId][2];
	},
	getScaleFactor: function() {
		this.getCurrentSize();
		this.getNewSize();
		// Scalars based on change from old to new
		this.xScale = (this.wNew / this.wCur) * 100;
		this.yScale = (this.hNew / this.hCur) * 100;
	},
	setNewPhotoParams: function() {
		// Set source of new image
		Element.setSrc(this.photo,photoDir + photoArray[photoId][0]);
		// Set anchor for bookmarking
		Element.setHref(this.prevLink, "#" + (photoId+1));
		Element.setHref(this.nextLink, "#" + (photoId+1));
	},
	setPhotoCaption: function() {
		// Add caption from gallery array
		Element.setInnerHTML(this.caption,photoArray[photoId][3]);
		Element.setInnerHTML(this.counter,((photoId+1)+'/'+photoNum));
	},
	resizePhotoBox: function() {
		this.getScaleFactor();
		new Effect.Scale(this.photoBox, this.yScale, {scaleX: false, duration: 0.3, queue: 'front'});
		new Effect.Scale(this.photoBox, this.xScale, {scaleY: false, delay: 0.5, duration: 0.3});
		// Dynamically resize caption box as well
		Element.setWidth(this.captionBox,this.wNew-(-borderSize));
	},
	showPhoto: function(){
		new Effect.Fade(this.loader, {delay: 0.5, duration: 0.3});
		// Workaround for problems calling object method "afterFinish"
		new Effect.Appear(this.photo, {duration: 0.5, queue: 'end', afterFinish: function(){Element.show('CaptionContainer');Element.show('PrevLink');Element.show('NextLink');}});
	},
	nextPhoto: function(){
		// Figure out which photo is next
		(photoId == (photoArray.length - 1)) ? photoId = 0 : photoId++;
		this.initSwap();
	},
	prevPhoto: function(){
		// Figure out which photo is previous
		(photoId == 0) ? photoId = photoArray.length - 1 : photoId--;
		this.initSwap();
	},
	initSwap: function() {
		// Begin by hiding main elements
		Element.show(this.loader);
		Element.hide(this.photo);
		Element.hide(this.captionBox);
		Element.hide(this.prevLink);
		Element.hide(this.nextLink);
		// Set new dimensions and source, then resize
		this.setNewPhotoParams();
		this.resizePhotoBox();
		this.setPhotoCaption();
	}
}

/*--------------------------------------------------------------------------*/

// Establish CSS-driven events via Behaviour script
var myrules = {
	'#Photo' : function(element){
		element.onload = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.showPhoto();
		}
	},
	'#PrevLink' : function(element){
		element.onmouseover = function(){
			soundManager.play('beep');
		}
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.prevPhoto();
			soundManager.play('select');
		}
	},
	'#NextLink' : function(element){
		element.onmouseover = function(){
			soundManager.play('beep');
		}
		element.onclick = function(){
			var myPhoto = new Slideshow(photoId);
			myPhoto.nextPhoto();
			soundManager.play('select');
		}
	},
	a : function(element){
		element.onfocus = function(){
			this.blur();
		}
	}
};

// Add window.onload event to initialize
Behaviour.addLoadEvent(init);
Behaviour.apply();
function init() {
	var myPhoto = new Slideshow(photoId);
	myPhoto.initSwap();
	soundManagerInit();
}
