//	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)
	{
		dest = document.getElementById ('ScreenImage');
		dest.style.opacity = 0;	//	Switch to static
		dest.style.filter="alpha(opacity=0)";
		dest.src = '';	//	Don't show the old one if the new one hasn't downloaded yet
		dest.style.width = dest.style.height = '';
      dest.src = g_Full [e.id];
	}
}

//	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];
	dest = document.getElementById ('ScreenImage');

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

function BeginFadeIn ()
{
	var	dest = document.getElementById ('ScreenImage');

   if  (dest.width > dest.height)
      dest.style.width = 512;
   else
      dest.style.height = 512;
   dest.style.top = (400-(dest.height/2))+'px';
   dest.style.left = (400-(dest.width/2))+'px';
	gFadeLevel = 0;
	gFadeInterval = window.setInterval ("FadeIn ()", 100); 
}

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

function loadPage (album, page)
{
   loadDoc ("galleryPage.php?album="+album+"&page="+page, onNewPage);
}

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 onNewPage (ajax)
{
	if  (ajax.readyState == 4)
	{
		var	dest = document.getElementById('GFrame');
		var xml = ajax.responseXML;
		
		if  (! xml)
		    return;
		
		g_Cache = new Array ();
		
		var page = xml.documentElement.getAttribute('page');
		var	iMax = xml.documentElement.getAttribute('pages');

		if  (! g_Page)
		{
		   g_Page = new Odometer (document.getElementById ('odoPage'), 4);
		   g_Slide = new Slider (document.getElementById ('Slider'), iMax, g_Page);
		   g_Slide.Set (1);
		   
		   //	Create element for central image
		   var	e = new CircularFrame (280, 350, 'images/porthole.png');
		   e.setAttribute ('id', 'centralImage');
		   e.style.position = 'absolute';
		   e.style.left = e.style.top = '90px';
		   dest.appendChild(e);
		   e.Thumbs (xml.documentElement.childNodes.length, 35, 40, 'images/BrassFrame.png');
		}
		
		g_Page.limit = iMax;

		var	e = document.getElementById ('centralImage');
		var	src = xml.documentElement.firstChild; 
		e.Src (src);
		while (e = e.nextSibling)
		{
			e.Src (src, 'thumbnail');
			if  (src)
				src = src.nextSibling;
		}
//	   g_Page.Set (page);
	   g_Slide.Set (page);	//	Will call the page set
	   window.setTimeout (FlipPage, 0);
	}
}

function FlipPage ()
{
	/*
   var   sz = Array (100, 75, 50, 25, 0, 25, 50, 75);
   if  (! FlipPage.img)
   {
      FlipPage.img = document.getElementsByName ('ThumbButton');
      FlipPage.idx = 0;
      FlipPage.ids = new Array ();
      for  (var id in g_Thumb)
         FlipPage.ids.push (id);
   }
  
   var   idx = FlipPage.idx++ - sz.length;
   
   for (var s = 0; s < sz.length; s++)
   {
      var   d = idx+s;
      if  (d >= 0 && d < FlipPage.img.length)
      {
         var   img = FlipPage.img [d];
         img.style.width = sz [s]+"%";
         if  (sz [s] == 0)
         {
            var   id = FlipPage.ids.shift ();
            img.id = id;
            img.src = g_Thumb [id];
         }
      }
   }
      
   if   (idx < FlipPage.img.length)
      window.setTimeout (FlipPage, 0);
   else
      FlipPage.img = null;
   */
}

function Xml2Object (xml)
{
   var      ret = new Object;
   
   for (var c = xml.firstChild; c; c = c.nextSibling)
      ret [c.getAttribute ('id')] = c.getAttribute ('href');
      
   return ret;
}

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 noDrag (ev)
{
    ev.cancelBubble = true;
    return false;
}

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 ('Music2'), document.getElementById ('Music1'));
	var	page = Array (document.getElementById ('Cabaret'), document.getElementById ('Concert'));
	
	if  (buttons [0] != e.firstChild)
	{
		page = Array (page [1], page [0]);
		buttons = Array (buttons [1], buttons [0]);
   }
	gFadeDir = -1;	//	Fade out
	gCabFade = 100;

	//	Going to buttons [0], from buttons [1]
	gSwitch = window.setInterval (function (){DoMusicSwitch (buttons, page)}, 100);
}

function SwitchMusic2 (e)
{
	var	i;
	var	buttons = Array (document.getElementById ('Music2'), document.getElementById ('Music1'));
	var	page = Array (document.getElementById ('Cabaret'), document.getElementById ('Concert'));
	
	if  (buttons [0] != e.firstChild)
	{
		page = Array (page [1], page [0]);
		buttons = Array (buttons [1], buttons [0]);
   }
	gFadeDir = -1;	//	Fade out
	gCabFade = 100;

	//	Going to buttons [0], from buttons [1]
	gSwitch = window.setInterval (function (){DoMusicSwitch (buttons, page)}, 100);
}

function DoMusicSwitch (buttons, page)
{
	gCabFade += gFadeDir * 10;	//	 Next step
//	var		page = document.getElementById ('Cabaret');

	page [0].style.opacity = page [0].style.opacity = gCabFade / 100;
	page [0].style.filter = page [1].style.filter = "alpha (opacity="+gCabFade+")";
	
	var	i1 = parseInt (Math.floor(127 * gCabFade / 100) | 0x80);
	var	i2 = parseInt(127 - (127 * gCabFade / 100) | 0x80);
	
	var	t = buttons [1].getElementsByTagName ('Table')[0];
	if  (! t)
	{
	   var  ch = buttons [1].getElementsByTagName ('Div'); 
	   for (var i = 0; i < ch.length; i++)
	   { 
	     t = ch [i];
	     if  (t.getAttribute ('name') == 'ColorDest')
	        break;
	   }
	}
	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 [0].getElementsByTagName ('Table')[0]; 
	if  (! t)
	{
	   var  ch = buttons [0].getElementsByTagName ('Div'); 
	   for (var i = 0; i < ch.length; i++)
	   { 
	     t = ch [i];
	     if  (t.getAttribute ('name') == 'ColorDest')
	        break;
	   }
	}
	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
	{
		var	bg = gCabFade ? 1 : 0;
  		window.clearInterval (gSwitch);
		if  (gFadeDir < 0)
		{
     		gFadeDir = 1;	//	Fade in
     		gCabFade = 0;
      	page [0].style.display = 'none';
      	page [1].style.display = 'block';
      	gSwitch = window.setInterval (function (){DoMusicSwitch (Array (buttons [1], buttons [0]), Array (page [1], page [0]))}, 100);      	
		}
	}
}

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;
}

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}

MM_reloadPage(true);

//	Since we have javascript functionality, show the tabs and hide the rest of the tables

function StartShow ()
{
	var e = document.getElementById ('Tabs');
	e.style.display = 'inline-block';
	for (var i = 2; e = document.getElementById ('Table'+i); i++)
		e.style.display = 'none';
}

function Show (e)
{
	var			idx;
	var			tbl, btn;
	var			zi, disp;

	for (idx = 1; btn = document.getElementById ('Layer'+idx); idx++)
	{
		if  (e == btn)		//	Want to show this one
		{
			disp = 'block';
			zi = 100;
		}
		else
		{
			disp = 'none';
			zi = idx;
		}
		document.getElementById ("Table"+idx).style.display = disp;
		btn.style.zIndex = zi;
	}
}

function LoadCookie ()
{
}

