// slideshow.js

var slideOffsetX = 0;
var slideOffsetY = 0;
var slideShowWidth = 0;

var slideHeight = 125;

// initial slide direction
var slideDirection = "right";

var slideItems = new Array();
var slideItemOpacity = new Array();
var slideItemVisibility = new Array();
var slideItemPosition = new Array();

// the actual width of a single slideshow item in pixel
var slideItemWidth = 56;

// the width that is reserved for every item
var slideItemArea = 70;

// the amount of pixels the item is scrolled each frame
var slideStep = 2;

// framerate in milliseconds
var slideTimerInterval = 40;

var slideEnabled = true;
var slideInfoBoxEnabled = true;


//
// SlideShowInit()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

function SlideShowInit(items)
{
	if (items.length <= 0)
		return;

	UpdateDimensions();

    for (var i = 0; i < items.length; i++)
    {
        slideItems[i] = items[i];
		slideItemOpacity[i] = 100;
		slideItemVisibility[i] = false;

		slideItemPosition[i] = -1 * slideItemArea * i;
		
		AlignItem(i);
    }

	setTimeout('SlideShow()', 40);
}


var lockInputSlideShowBox = false;



//
// AlignItem()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

function AlignItem(picNum)
{
	if (!slideEnabled)
		return;
		
	var item = document.getElementById(slideItems[picNum]);
		
	var realPos = parseInt(slideItemPosition[picNum]);
			
	if (realPos < 0) 
		realPos = 0;
		
	if (realPos > slideShowWidth - slideItemArea)
		realPos = slideShowWidth - slideItemArea;

	item.style.left = (realPos + slideOffsetX) + 'px';
	item.style.top = slideOffsetY + 10 + 'px';
	item.style.width = slideItemWidth + 'px';
		
	item.style.visibility = (slideItemVisibility[picNum]) ? 'visible' : 'hidden';
	
	if (realPos <= 100)
		slideItemOpacity[picNum] = realPos;
			
	if (realPos >= slideShowWidth - slideItemArea - 100)
		slideItemOpacity[picNum] = 100 - (realPos - (slideShowWidth - slideItemArea - 100));
	
	SetOpacity(item, slideItemOpacity[picNum]);
/*	
    if (item.style.setAttribute)
        item.style.setAttribute('filter', 'alpha(opacity=' + parseInt(slideItemOpacity[picNum]) + ');');

    item.style.MozOpacity = slideItemOpacity[picNum] / 100.0;
    item.style.opacity = slideItemOpacity[picNum] / 100.0;
    item.style.KhtmlOpacity = slideItemOpacity[picNum] / 100.0;
 */
}



//
// UpdateDimensions()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

function UpdateDimensions()
{
	slideShowWidth = document.getElementById('slideShowContainer').offsetWidth;
	slideOffsetX = GetElementPosition(document.getElementById('slideShowContainer'))[0];
	slideOffsetY = GetElementPosition(document.getElementById('slideShowContainer'))[1];
}



//
// MoveItem()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

function MoveItem(picNum, slideStep)
{	
	if (!slideEnabled)
		return;

	slideItemPosition[picNum] += (slideDirection == "right") ? slideStep : -slideStep;
	
	if (slideDirection == "right")
	{	
		if (slideItemPosition[picNum] > slideShowWidth - slideItemArea)
		{
      var smallest = slideItemPosition[0];
      for (var j = 1; j < slideItemPosition.length; j++)
        if (slideItemPosition[j] < smallest)
          smallest = slideItemPosition[j];
			
			slideItemPosition[picNum] = smallest - slideItemArea;
			
			if (slideItemPosition[picNum] > 0)
				slideItemPosition[picNum] = 0;	
		}
	}
	else
	{
		if (slideItemPosition[picNum] < 0)
		{
      var biggest = slideItemPosition[0];
      for (var j = 1; j < slideItemPosition.length; j++)
        if (slideItemPosition[j] > biggest)
          biggest = slideItemPosition[j];
			
			slideItemPosition[picNum] = biggest + slideItemArea;
			
			if (slideItemPosition[picNum] < slideShowWidth - slideItemArea)
				slideItemPosition[picNum] = slideShowWidth - slideItemArea;
		}
	}
		
	slideItemVisibility[picNum] = (slideItemPosition[picNum] >= 0 && slideItemPosition[picNum] <= slideShowWidth - slideItemArea);

	AlignItem(picNum);
}



//
// ReactOnCursor()
//
// Author: Matthias Hammerle
// Date: 11.09.2007
//

function ReactOnCursor()
{
	if (!slideEnabled)
		return;

    if (mouseY > slideOffsetY && mouseY < slideOffsetY + slideHeight &&
		mouseX > slideOffsetX && mouseX < slideOffsetX + slideShowWidth)
    {
		var currX = mouseX - slideOffsetX;
		
        if (currX > slideShowWidth / 4 && currX < slideShowWidth - slideShowWidth / 4)
		{
			if (currX > slideShowWidth / 2 - slideItemArea / 2 && currX < slideShowWidth / 2 + slideItemArea / 2)
			{
				slideStep = 0;
				return;
			}
			
			if (currX > slideShowWidth / 2)
				slideDirection = "left";
			else
				slideDirection = "right";
		
			slideStep = 1;
			return;
		}
		
        if (currX > slideShowWidth / 2)
        {
            slideDirection = "left";

            var tmp = currX - slideShowWidth / 2;

            slideTimerInterval = 40 - parseInt((tmp / (slideShowWidth / 2)) * 40);

            if (slideTimerInterval < 1)
                slideTimerInterval = 1;

            if (slideTimerInterval < 30)
            {
                slideStep = 10 - parseInt(10 * (slideTimerInterval / 25.0));
                if (slideStep < 2)
                    slideStep = 2;
            }
            else
                slideStep = 2;
				
        }
        else if (currX < slideShowWidth / 2)
        {
            slideDirection = "right";

            slideTimerInterval = parseInt((currX / (slideShowWidth / 2)) * 40);

            if (slideTimerInterval < 1)
                slideTimerInterval = 1;

            if (slideTimerInterval < 15)
            {
                slideStep = 10 - parseInt(10 * (slideTimerInterval / 25.0));
                if (slideStep < 2)
                    slideStep = 1;
            }
            else
                slideStep = 2;

		}
		else
		{
			slideTimerInterval = 40;
			slideStep = 2;
		}
    }
    else
	{
		slideTimerInterval = 40;
		slideStep = 2;
	}
}



//
// SlideShow()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

function SlideShow()
{
	if (!slideEnabled)
	{
		// ensure that all are invisible
	    for (var i = 0; i < slideItems.length; i++)
			document.getElementById(slideItems[i]).style.visibility = 'hidden';	
		
		setTimeout('SlideShow()', slideTimerInterval);
		return;
	}

	UpdateDimensions();
	ReactOnCursor();
	
    for (var i = 0; i < slideItems.length && slideEnabled; i++)
        MoveItem(i, slideStep);

    setTimeout('SlideShow()', slideTimerInterval);
}



//
// HoverSlideItem()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

var slideInfoBoxFadeIn = false;
var slideInfoBoxHeight = 0;
var slideInfoBoxWidth = 251;

function HoverSlideItem(slideItem, enable, infoBoxEntries)
{	
    if (!slideInfoBoxEnabled || !enable)
    {
		slideInfoBoxFadeIn = false;
		return;
	}

	if (mouseX - slideOffsetX < slideShowWidth / 7 || mouseX - slideOffsetX > slideShowWidth - slideShowWidth / 7)
		return;

	// if there are no infobox entries available we show a the item in original size
	// (because this method is only used by slideshows with forced tiny thumbs like in the profile)
	if (infoBoxEntries == 0)
	{
		slideInfoBoxWidth = 69;
		slideInfoBoxHeight = 90;
		
		document.getElementById('slideinfobox').innerHTML = '<img style=\'margin-left: 7px; margin-top: 10px;\' src=\'' + slideItem.src + '\' alt=\'\'>';
		document.getElementById('slideinfobox').style.backgroundImage = 'url(\'images/slideinfobox/boxtype2.png\')';		
		document.getElementById('slideinfobox').style.width = slideInfoBoxWidth + 'px';		
		document.getElementById('slideinfobox').style.height = '0px';
		document.getElementById('slideinfobox').style.top = slideOffsetY + 'px';
		document.getElementById('slideinfobox').style.zIndex = '9999';
		
		slideInfoBoxFadeIn = true;
		return;
	}
		
	// the first array element is the title, the second one the creator
	
	document.getElementById('slideinfobox_userimg').src = infoBoxEntries[0];
	document.getElementById('slideinfobox_title').innerHTML = "<nobr><span class=\"topic\">" + infoBoxEntries[1] + "</span><br><span style=\"font-size: 10px;\">" + infoBoxEntries[2] + "</span></nobr>";

	var numItems = (infoBoxEntries.length - 3) / 2;
	
	slideInfoBoxHeight = 125;
	
	if (numItems == 1)
		document.getElementById('slideinfobox_content2').innerHTML = "<div class=\"slideinfobox_textLeft\">" + infoBoxEntries[3] + "</div>" + infoBoxEntries[4];
	else
	{
		if (numItems > 2)
		{
			numItems -= 2;

			var lines = "";
			for (var i = 3; i < infoBoxEntries.length - 4; i += 2)
				lines += "<div class=\"slideinfobox_textLeft\">" + infoBoxEntries[i] + "</div>" + infoBoxEntries[i + 1] + "<br>";
				
			document.getElementById('slideinfobox_content1').style.height = (20 * numItems) + 'px';
			document.getElementById('slideinfobox_content1').innerHTML = lines;
			
			slideInfoBoxHeight = 125 + 20 * numItems;

			document.getElementById('slideinfobox').style.top = slideOffsetY + 'px';
			document.getElementById('slideinfobox').style.height = '0px';
		}
		
		document.getElementById('slideinfobox_content2').innerHTML = "<div class=\"slideinfobox_textLeft\">" + infoBoxEntries[infoBoxEntries.length - 4] + "</div>" + infoBoxEntries[infoBoxEntries.length - 3] + "<br>" +
																	 "<div class=\"slideinfobox_textLeft\">" + infoBoxEntries[infoBoxEntries.length - 2] + "</div>" + infoBoxEntries[infoBoxEntries.length - 1];
	}

	slideInfoBoxFadeIn = true;
}



//
// MoveSlideInfoBox()
//
// Author: Matthias Hammerle
// Date: 10.09.2007
//

var lastSlideInfoBoxX = 100;
var slideInfoBoxCurrHeight = 0;

function MoveSlideInfoBox()
{
	if (!slideEnabled)
	{
		setTimeout('MoveSlideInfoBox()', 50);
		return;
	}

    slideInfoBox = document.getElementById('slideinfobox');
	
    if (!slideInfoBox)
    {
		setTimeout('MoveSlideInfoBox()', 50);
		return;
	}
	
	if (Math.abs(lastSlideInfoBoxX - mouseX) > 1)
	{
		var newPos = lastSlideInfoBoxX - (lastSlideInfoBoxX - mouseX + slideInfoBoxWidth / 3) / 4;
		
		if (newPos < slideOffsetX) newPos = slideOffsetX;
		if (newPos > slideOffsetX + slideShowWidth - slideInfoBoxWidth) newPos = slideOffsetX + slideShowWidth - slideInfoBoxWidth;

		lastSlideInfoBoxX = newPos;
		slideInfoBox.style.left = parseInt(newPos) + 'px';
	}
	
	if (slideInfoBoxFadeIn)
	{
		slideInfoBox.style.visibility = 'visible';

		if (slideInfoBoxCurrHeight + 2 >= slideInfoBoxHeight)
			slideInfoBoxCurrHeight = slideInfoBoxHeight;
		else
		{
			slideInfoBoxCurrHeight += Math.abs(slideInfoBoxHeight - slideInfoBoxCurrHeight) / 2;

			if (slideInfoBoxCurrHeight > slideInfoBoxHeight)
				slideInfoBoxCurrHeight = slideInfoBoxHeight;
		}
	}
	else
	{
		if (slideInfoBoxCurrHeight <= 2)
			slideInfoBox.style.visibility = 'hidden';
		else
		{
			slideInfoBoxCurrHeight -= slideInfoBoxCurrHeight / 2;

			if (slideInfoBoxCurrHeight < 0)
				slideInfoBoxCurrHeight = 0;
		}
	}
	
	document.getElementById('slideinfobox').style.top = (slideOffsetY - slideInfoBoxCurrHeight - 1) + 'px';
	document.getElementById('slideinfobox').style.height = slideInfoBoxCurrHeight + 'px';

    setTimeout('MoveSlideInfoBox()', 50);
}

