/*
 *  Public Domain -- Use this script freely as you wish. 
 *
 *  Edits by tokai:
 *   - Code cleanup
 *   - Fixed more IE bugs (some harmelss code chaos remains getNextImage(), not in
 *     the mood to clean that up).
 *   - This also fixes scrollbar jumping in Firefox 2.x
 *
 *  Use it like this:
 *   
 *   <script src="/showroom.js" type="text/javascript"></script>
 *
 *   <div id="panel" style="width:480px; height:360px; background-image: url(/images/showroom/001_a.jpg);" class="blend">
 *      <img src="/images/showroom/001_b.jpg" width=480 height=360 alt="2" style="display: block;">
 *      <img src="/images/showroom/001_a.jpg" width=480 height=360 alt="1" style="display: none;">
 *   </div>
 *
 *   <script type="text/javascript">
 *      setTimeout(function() {blendImages('panel', 100, 10000)}, 10000);
 *   </script>
 *
 *   .blend img { 
 *      opacity:        0;
 *      -moz-opacity:   0;
 *      -khtml-opacity: 0;
 *      filter:         alpha(opacity=0);
 *    }
 *
 *  ----
 *  Original from: http://brainerror.net/scripts/javascript/blendtrans/demo.html
 *
 *  Edits by ASC:
 *   - Removed unnecessary OO code that caused MSIE to choke
 *   - Added pause between setting bg image and setting opacity to zero to
 *     prevent MSIE image flash
 *   - Increased opacity check argument to 103 for completely smooth fade
 */


/*  Find next image
 */
function nextImage(o) 
{
	do 
	{
		o = o.nextSibling;
	}
	while(o && (o.tagName != 'IMG'));
    
	return o;
}


/*  Find first image inside an element
 */
function firstChildImage(o) 
{   
	o = o.firstChild;
        
	while(o && (o.tagName != 'IMG')) 
	{
		o = o.nextSibling;
	}
    
	return o;
}


/*  Set the opacity of an element to a specified value
 */
function setOpacity(obj, o) 
{
	obj.style.opacity      = (o / 100);
	obj.style.MozOpacity   = (o / 100);
	obj.style.KhtmlOpacity = (o / 100);
	obj.style.filter       = 'alpha(opacity=' + o + ')';
}


/*  Make image invisible and set next one as current image
 */
function getNextImage(image)
{
	
	if (next = nextImage(image)) 
	{
		image.style.display = 'none';
		image.style.zIndex  = 0;

		next.style.display  = 'block';
		next.style.zIndex   = 100;
	} 
	else 
	{
		/*  If there is not a next image, get the first image again
		 */
		next = firstChildImage(image.parentNode);
	}
	
	/*  Another IE fix/ workaround -- tokai
	 */
	image.style.display = 'none';
	image.style.zIndex  = 0;

	next.style.display  = 'block';
	next.style.zIndex   = 100;

	return next;
}


/*  Set default values for parameters and starting image
 */
function blendImages(id, speed, pause, caption)
{

	if (speed == null) 
	{
		speed = 30;
	}
    
	if (pause == null) 
	{
		pause = 1500;
	}

	var blend = document.getElementById(id);
	var image = firstChildImage(blend);

	startBlending(image, speed, pause, caption);
}


/*  Make image a block-element and set the caption
 */
function startBlending(image, speed, pause, caption)
{
	image.style.display = 'block';

	if(caption != null) 
	{
		document.getElementById(caption).innerHTML = image.alt;
	}

	continueFadeImage(image, 0, speed, pause, caption);
}


/*  ASC: copied from http://www.sean.co.uk/a/webdesign/javascriptdelay.shtm
 */
function pausecomp(millis) 
{
	var date    = new Date();
	var curDate = null;

	do 
	{ 
		curDate = new Date(); 
	}
	while(curDate-date < millis);
} 


/*  Set an increased opacity and check if the image is done blending
 */
function continueFadeImage(image, opacity, speed, pause, caption)
{
	opacity = opacity + 3;

	if (opacity < 103)
	{
		setTimeout(function() {fadeImage(image, opacity, speed, pause, caption)}, speed);
	} 
	else 
	{
		/*  If the image is done, set it to the background and make it transparent
		 */
		image.parentNode.style.backgroundImage = "url("+image.src+")";

		/*  ASC: pause 1sec here to prevent MSIE image flash ...
		 */
		var paws = pause-1000;
		
		if (paws < 0 ) 
		{
			paws = 0;
		}
		pausecomp(1000);

		setOpacity(image,0);

		/*  get the next image and start blending it again
		 */
		image = getNextImage(image);
		setTimeout(function() {startBlending(image, speed, pause, caption)}, paws);		
	}
}


/*  Set the opacity to a new value and continue the fading
 */
function fadeImage(image, opacity, speed, pause, caption) 
{
	setOpacity(image,opacity);
	continueFadeImage(image, opacity, speed, pause, caption);
}

