//	Highlighting in Javascript rather than CSS because we are modifying the 
//	style of an element other than the one under the mouse

var	gGalleryXML;
var	gGalleryName = '';
var	gPage = 0;
var	gGalleryLoaded = false;

function enter (ev)
{
	var e = ev.srcElement ? ev.srcElement : ev.target;
	do
		e = e.previousSibling;
	while (e && e.nodeName != 'IMG');
	
	if  (e)
	{
		e.style.opacity = 1.0;
		e.style.filter="alpha(opacity=100)";
	} 
}
function leave (ev)
{
	var e = ev.srcElement ? ev.srcElement : ev.target;
	do
		e = e.previousSibling;
	while (e && e.nodeName != 'IMG');
	
	if  (e)
	{
		e.style.opacity = 0.5;
		e.style.filter="alpha(opacity=50)";
	} 
}

var gFadeInterval, gFadeLevel;

function SelectImage (ev)
{
	var e = ev.srcElement ? ev.srcElement : ev.target;
	do
		e = e.previousSibling;
	while (e && e.nodeName != 'IMG');
	
	if  (e)
	{
		var dest = document.getElementById ('ScreenBlock');
		dest.style.opacity = 0;	//	Switch to static
		dest.style.filter="alpha(opacity=0)";
		dest = document.getElementById ('ScreenImage');
		dest.src = '';	//	Don't show the old one if the new one hasn't downloaded yet
		dest.src = e.src.replace ('/thumbnails/', '/medium/');
	}
}

//	Ajax version of the above - remove previous one when live
function onImageSelected (ev)
{
	var e = ev.srcElement ? ev.srcElement : ev.target;
	do
		e = e.previousSibling;
	while (e && e.nodeName != 'IMG');
	
	if  (e)
		DoSelectImage (e.id);
}

//	Select the image # from document
function DoSelectImage (img)
{
	//	Get the node from the xml document
	var	node = gGalleryXML.documentElement.childNodes [img];
	var dest = document.getElementById ('ScreenBlock');

	dest.style.opacity = 0;	//	Switch to static
	dest.style.filter="alpha(opacity=0)";
	dest = document.getElementById ('ScreenImage');
	dest.src = "gallery_demo/medium/"+node.getAttribute ('src');
}

function BeginFadeIn ()
{
	gFadeLevel = 0;
	gFadeInterval = window.setInterval ("FadeIn ()", 100); 
}

function FadeIn ()
{
	var	dest = document.getElementById ('ScreenBlock');
	gFadeLevel += 10;
	dest.style.opacity = gFadeLevel / 100;
	dest.style.filter="alpha(opacity="+gFadeLevel+")";
	if  (gFadeLevel >= 100)
		window.clearInterval (gFadeInterval);
}

function Ajax ()
{
	try {return new XMLHttpRequest();} catch (e) {};		// Firefox, Opera 8.0+, Safari
	try {return new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {};	// Internet Explorer
	try {return new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {};
	return null;
}

function loadDoc(dname, fn)
{
	var	ajax = Ajax ();
	
	if  (fn)
		ajax.onreadystatechange= function() {fn (ajax);};

	ajax.open("GET",dname,fn ? true : false);
	ajax.send("");
	
	return fn ? true : ajax.responseXML;
}

function CheckForLoad ()
{
	if  (typeof onLoad == 'function')	//	We have defined onLoad on our page
		onLoad ();
}

var	gTitle;
function ScrollTitle (name)
{
	var	s = document.getElementById ('Spinner');
	var	e = s.getElementsByTagName ('DIV') [0];
	
	gGalleryName = name;
	gGalleryLoaded = false;
	e.className = 'AlbumTitle';
	gTitle = window.setInterval ('Spin ()', 100);
}
function Spin ()
{
	var	s = document.getElementById ('Spinner');
	var	e = s.getElementsByTagName ('DIV') [0];
	var	pos = e.style.top;
	
	pos = pos.substring (0, pos.length - 2);	//	Strip off "px"
	
	if  (pos != '')
		pos = parseInt(pos);
		
	if  (e.innerHTML == gGalleryName)	//	We're still waiting, loop through
	{
		if  (pos >= 15)
		{
			pos = 0;
			if  (gGalleryLoaded)
			{
				window.clearInterval (gTitle);			//	Stop spinning
				e.className = 'AlbumTitleGlow';	//	Make title glow
				ShowAlbumPage (1);
			}
		}
		else
			pos += 5;
	}
	else
	{
		if  (pos >= 40)
		{
			pos = -40;
			e.innerHTML = gGalleryName;
		}
		else
			pos += 5;
	}
	e.style.top = pos+'px';
}

function GetAlbum (name)
{
	loadDoc ("GalleryImages.php?Album="+name, NewGallery);
	//	Todo: Start gear spinning
	ScrollTitle (name);	//	Start name rotating
}

function NewGallery (ajax)
{
	if  (ajax.readyState == 4)
	{
		gGalleryXML = ajax.responseXML;
		//	Stop rotation,
		gGalleryLoaded = true;
		//	 re-seed gallery on page 1
	}
}

function ShowAlbumPage (page)
{
	var	thumb = document.getElementsByName ('ThumbButton');
	var	i = (page - 1) * thumb.length;	//	Start index
	var	iMax = i + thumb.length;			//	End index
	var	iDiff;
	var	dStart = 0; dEnd = thumb.length;
	var	next = document.getElementsByName ('PageNext')[0];
	var	prev = document.getElementsByName ('PageBack')[0];
	
	iDiff = iMax - gGalleryXML.documentElement.childNodes.length;

	EnableNav (prev, 	page > 1 ? page-1 : 0);
	EnableNav (next, iDiff < 0 ? page+1:0);

	if  (iDiff > 0)	//	Need to remove this many
	{
		iMax -= iDiff;
		while (iDiff > 8)	//	Remove an entire row
		{
			for (e = 0; e < 8; e++)
				thumb [dStart+e].parentNode.parentNode.style.display = 'none';
			dStart += 8;
			iDiff -= 8;
		}
		//	Remove the last iDiff elements
		dEnd -= iDiff;
		while (iDiff > 0)
			thumb [thumb.length - iDiff--].parentNode.parentNode.style.display = 'none';
	}
	
	
	DoSelectImage (i);	//	Start the main image downloading
	for (; i < iMax; i++)
	{
		var	src = gGalleryXML.documentElement.childNodes [i];
		var	dest = thumb [dStart++];
		dest.parentNode.parentNode.style.display = 'inline-block';
		dest.id = i;
		dest.src = 'gallery_demo/'+src.getAttribute ('thumb'); 
	}
}

function EnableNav (e, p)
{
	if  (p)
	{
		e.onmouseover=function (event) {enter (event)};
//		e.onmouseout=function (event) {leave (event)};
		e.onclick=function () {ShowAlbumPage (p)};
	}
	else
	{
		e.onmouseover=e.onclick='';
	}
}

var	gCabFade, gFadeDir, gSwitch;

function SwitchMusic (e)
{
	var	i;
	var	buttons = Array (document.getElementById ('Music1'), document.getElementById ('Music2'));
	var	page = Array (document.getElementById ('Cabaret'), document.getElementById ('Concert'));
	
	if  (buttons [0] != e.firstChild)
	{
		gFadeDir = -1;	//	Fade out
		gCabFade = 100;
	}
	else
	{
		gFadeDir = 1;	//	Fade in
		gCabFade = 0;
	}
	for (i = 0; i < page.length; i++)
		page [i].style.display = '';
	//	Going to buttons [0], from buttons [1]
	gSwitch = window.setInterval (function (){DoMusicSwitch (buttons, page)}, 100);
	//	Quick version - just switch
//	var		cab = document.getElementById ('Cabaret'); 
//	cab.style.opacity = buttons [0] == e.firstChild ? 0.9999 : 0.0;
}

function DoMusicSwitch (buttons, page)
{
	gCabFade += gFadeDir * 10;	//	 Next step
//	var		page = document.getElementById ('Cabaret');
	
	page [0].style.opacity = gCabFade / 100;
	page [1].style.opacity = (100 - gCabFade) / 100;
	page [0].style.filter = "alpha (opacity="+gCabFade+")";
	page [1].style.filter = "alpha (opacity="+(100 - gCabFade)+")";
	
	var	i1 = parseInt (Math.floor(127 * gCabFade / 100) | 0x80);
	var	i2 = parseInt(127 - (127 * gCabFade / 100) | 0x80);
	
	var	t = buttons [0].getElementsByTagName ('Table')[0]; 
	t.style.backgroundColor = "#00"+i1.toString(16)+"00";
	t.style.textShadow = "0 0 "+5+"px rgb(128, 128, 128)";
	t.style.filter = "Blur(makeShadow=true, pixelRadius="+5+")";

	t = buttons [1].getElementsByTagName ('Table')[0]; 
	t.style.backgroundColor = "#00"+i2.toString (16)+"00";
	t.style.textShadow = "0 0 "+5+"px rgb(128, 128, 128)";
	t.style.filter = "Blur(makeShadow=true, pixelRadius="+5+")";

	if  (gCabFade % 100 == 0)	//	End of the line
	{
//		page.style.opacity = "1.0";
		var	bg = gCabFade ? 1 : 0;
		page [bg].style.display = 'none';
		window.clearInterval (gSwitch);
	}
}

var		gBio = null;
function ShowBio (e)
{
	var		e = document.getElementById (e);

	if  (gBio)
		gBio.style.display = 'none';

	if  (e && e != gBio)
	{
		e.style.display = 'block';
		e.scrollIntoView ();
	}
	else
		e = null;
	
	gBio = e;
}
