addLoadEvent( initImageLayer );
addLoadEvent( initKeyNav );
addLoadEvent( focusPage );
addLoadEvent( function() { new InfoLayer() } );
addLoadEvent( initDeleteItem );
addLoadEvent( highlightThumb );
attachEventListener( document, 'click', setLinkTarget, false );
attachEventListener( window, 'resize', resizeWindow, false );



function resizeWindow()
{
	var cookieSet = setCookieViewportSize(); // Only set cookie if viewport has changed (against flicker in some browsers)
	if ( typeof cookieSet != 'undefined' && cookieSet == true ) {
		window.location.href = window.location.href;
	}
}



if ( self.location.href.indexOf('item.php') != -1 && top.location.href.indexOf('/frame.php') == -1 ) {
	top.location.href = '/frame.php' + self.location.search;
}



function InfoLayer()
{
	var infoLayer = document.getElementById( 'infoLayer' );
	var caption   = document.getElementById( 'caption' );	
	
	if ( infoLayer && caption ) {
		
		caption.innerHTML += ( caption.innerHTML != '' ? '&nbsp;|&nbsp;' : '' ) +
		                     "<span id='btnInfo'>Info...</span>"; // Will not blink in IE unless it's a <div>
		
		var layerStepCount  = 7;   // May be changed
		var layerOpacity    = 0;   // Do not change
		var layerStepSize   = Math.floor( 80 / layerStepCount );
		
		var infoStepCount   = 40;  // May be changed
		var infoOpacity     = 100; // Do not change
		var infoStepSize    = Math.floor( 100 / infoStepCount );		
		var maxLayerOpacity = layerStepCount * layerStepSize;
		
		var bgColor = getBgColor();
		var fgColor = 15; // 0-15
		var step    = 1;		
		var btnInfo = document.getElementById( 'btnInfo' );
		var timerToggle, timerBlink;
				
		hideInfo = function() {
			if ( layerOpacity > 0 ) {
				layerOpacity -= layerStepSize;
				setOpacity( infoLayer, layerOpacity );
				timerToggle = setTimeout( "hideInfo()", 10 );
			}
			else {
				clearTimeout( timerToggle );
				timerToggle = null;
				infoLayer.style.display = 'none';
			}
		}
		
		showInfo = function() {
			if ( infoLayer.style.display != 'block' ) {
				infoLayer.style.display = 'block';
			}
			if ( timerBlink != 'undefined' ) {
				btnInfo.style.color = ( bgColor == '#fff' ? '#000' : '#fff' );
				clearTimeout( timerBlink );
				timerBlink = null;
			}
			if ( timerToggle != 'undefined' ) {
				clearTimeout( timerToggle );
				timerToggle = null;
			}
			if ( layerOpacity < maxLayerOpacity ) {
				layerOpacity += layerStepSize;
				setOpacity( infoLayer, layerOpacity );
				timerToggle = setTimeout( "showInfo()", 30 );
			}
		}
		
		blinkInfo = function() {
			var hex = fgColor.toString( 16 );
			if ( fgColor <= 3 || fgColor >= 15 ) {
				step *= -1;
			}
			fgColor += step;
			btnInfo.style.color = '#' + hex + hex + hex;
			timerBlink = setTimeout( "blinkInfo()", 60 );
		}
		
		btnInfo.onmouseover = showInfo;
		btnInfo.onmouseout  = hideInfo;
		blinkInfo();
	}
}


		
function setOpacity( obj, opacity )
{
	if ( obj != 'undefined' ) {
		obj.style.opacity = opacity / 100;
		obj.style.filter  = "alpha( opacity:" + opacity + " )";
	}
}


function focusPage()
{
	var btnItemIdPrev = document.getElementById( 'btnItemIdPrev' );
	var btnItemIdNext = document.getElementById( 'btnItemIdNext' );
	
	if ( btnItemIdPrev ) {
		btnItemIdPrev.hideFocus = true; // For IE only, use CSS for Mozilla
	}
	
	if ( btnItemIdNext ) {
		btnItemIdNext.focus();
		btnItemIdNext.hideFocus = true; // For IE only, use CSS for Mozilla
	}
	else {
		document.body.focus(); // Does not work for Mozilla
	}
}



function keyUp()
{
	setCookieViewportSize();
	var btnItemIdPrev = document.getElementById( 'btnItemIdPrev' );
	btnItemIdPrev.className = 'mOver';
	self.location = btnItemIdPrev.href;
}



function keyDown()
{
	setCookieViewportSize();
	var btnItemIdNext = document.getElementById( 'btnItemIdNext' );
	btnItemIdNext.className = 'mOver';
	self.location = btnItemIdNext.href;
}



function keyLeft()
{
	var prevPage = Nav.getPrevPage();
	var url      = prevPage.match( /(\w+\.php)\D+(\d+)/ );
	if ( url != null && url[1] == 'frame.php' ) {
		changeFrames( url[2] );
	}
	else {
		top.location.href = prevPage;
	}	
}



function keyRight()
{
	var nextPage = Nav.getNextPage();
	var url      = nextPage.match( /(\w+\.php)\D+(\d+)/ );
	if ( url != null && url[1] == 'frame.php' ) {
		changeFrames( url[2] );
	}
	else {
		top.location.href = nextPage;
	}	
}



function changeFrames( catId )
{
	top.frames['main'].location.href   = top.frames['main'].location.pathname + '?catId=' + catId;
	top.frames['thumbs'].location.href = top.frames['thumbs'].location.pathname + '?catId=' + catId;
}



Navigation.prototype.noWhiteFlash = function()
{
	var navLinks = this.mainNav.getElementsByTagName( 'A' );
	for ( var i = 0; i < navLinks.length; i++ ) {
		navLinks[i].onclick = function() {
			try {
				var dest = this.parentNode.getElementsByTagName( 'LI' )[0].firstChild; // First subCat
			}
			catch( e ) {
				var dest = this;
			}
			if ( dest.href.indexOf('frame.php') != -1 ) {
				// Destination is a photo page
				top.document.title = dest.innerHTML;
				var catId = dest.href.match( /catId=(\d+)/ )[1];
				changeFrames( catId );
				return false;
			}
		}
	}
}



function initDeleteItem()
{
	var itemDelete = document.getElementById( 'itemDelete' );
	if ( itemDelete ) {
		itemDelete.disabled    = false;
		itemDelete.style.color = '#f00';
		itemDelete.onclick = function() {
			var msg = translate( 'Deze foto wissen?' );
			if ( confirm(msg) ) {
				top.location.href = '/frame.php?catId=' + catId + '&itemId=' + itemId + '&deleteItem=1';
			}
		}
	}
}
	


function highlightThumb()
{
	try {
		var thumbsFrame = top.frames['thumbs'];
		if ( !thumbsFrame || thumbsFrame.imgs.length <= 1 ) {
			return;
		}
	}
	catch( e ) {
		// thumbsFrame not fully loaded yet, try again later
		setTimeout( 'highlightThumb()', 1000 );
		return;
	}
	
	var curThumb = thumbsFrame.curThumb;
	var defaultClass;
	
	if ( curThumb ) {
		// Reset class to default
		defaultClass = thumbsFrame.lookup[curThumb].className.replace( /\s?curThumb/, '' );
		thumbsFrame.lookup[curThumb].className = defaultClass;
	}
	
	// Store value of itemId so that class 'curThumb' can be removed later
	thumbsFrame.curThumb = itemId;
	
	if ( thumbsFrame.lookup ) {
		// Assign class 'curThumb'
		thumbsFrame.lookup[itemId].className += ' curThumb';
	}
	
}