//browser type enum
var Browsers = {
    'Unknown' : 0,
    'IE' : 1,
    'Mozilla' : 2,
    'W3C' : 3,
    'Konqueror' : 4
}

//main object
var fadeShow = {
	'browser' : Browsers.Unknown,
	'timerHandle' : null,
	'showSpeed' : 5000,
	'fadeStep' : 5,
	'fadeSpeed' : 100,
	'targetImage' : null,
	'backgroundImage' : null,
	'images' : null,
	'currentIndex' : -1
}

fadeShow.getNextIndex = function()
{
	var newvalue = fadeShow.currentIndex;
	while(newvalue == fadeShow.currentIndex)
	{
		newvalue = Math.floor(Math.random()*fadeShow.images.length);
	}
	fadeShow.currentIndex = newvalue;
}

fadeShow.init = function(images, targetImage, backgroundImage)
{
	fadeShow.images = images;
	fadeShow.targetImage = targetImage;
	fadeShow.backgroundImage = backgroundImage;
	fadeShow.browser = fadeShow.determineBrowser(fadeShow.targetImage);
	fadeShow.getNextIndex();
}

fadeShow.start = function()
{
	if (fadeShow.targetImage == null) return;
	if (fadeShow.images == null || fadeShow.images.length == 0) return;
	
	fadeShow.timerHandle = window.setTimeout("fadeShow.next()", fadeShow.showSpeed);
}

fadeShow.next = function()
{
	window.clearTimeout(fadeShow.timerHandle); 
	
  //set background image to current
	fadeShow.backgroundImage.src = fadeShow.targetImage.src;
  //make sure new image is not visible
  fadeShow.setAlpha(0);
	//load next image   
	fadeShow.targetImage.src = fadeShow.images[fadeShow.currentIndex];
	
	fadeShow.getNextIndex();
	
	//starts to fade-in new image
	fadeShow.show(0);
}

fadeShow.show = function(opacity) 
{
  if (opacity <= 100) 
  {
    fadeShow.setAlpha(opacity); 
    opacity += fadeShow.fadeStep;
    fadeShow.timerHandle = window.setTimeout("fadeShow.show("+opacity+")", fadeShow.fadeSpeed);
  }
  else
  {
    fadeShow.timerHandle = window.setTimeout("fadeShow.next()", fadeShow.showSpeed);
  }
}

fadeShow.setAlpha = function(opacity) 
{
	switch(fadeShow.browser)
	{
		case Browsers.IE:
			fadeShow.targetImage.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity;
			break;
		case Browsers.Mozilla:
			fadeShow.targetImage.style.MozOpacity = (opacity/100) - 0.001; 
			break;
		case Browsers.W3C:
			fadeShow.targetImage.style.opacity = opacity/100;
			break;
		case Browsers.Konqueror:
			fadeShow.targetImage.style.KhtmlOpacity = opacity/100;
			break;
		default:
			break;
	}
}

fadeShow.determineBrowser = function(img)
{
	if (typeof img.style.MozOpacity != 'undefined') 
	{
		return Browsers.Mozilla;
	} 
	else if (typeof img.style.opacity != 'undefined') 
	{
		return Browsers.W3C;
	} 
	else if (typeof img.filters != 'undefined') 
	{
		if (img.filters.length > 0 && typeof img.filters.item("DXImageTransform.Microsoft.Alpha") == 'object' && typeof img.filters.item("DXImageTransform.Microsoft.Alpha").opacity == 'number')
		{
			return Browsers.IE;
		}
	} 
	else if (typeof img.style.KhtmlOpacity != 'undefined') 
	{
		return Browsers.Konqueror;
	}
	
	return Browsers.Unknown;
}
