//Create New Object with properties
var MultiFader = new Object();      //new object
MultiFader.root = null;             //rootItem
MultiFader.items = [];              //array of item(Background)
MultiFader.slideCounter = -1;       //Counter
MultiFader.timer = null;            //Timer
MultiFader.fadespeed = 0;           //Speed of fading
MultiFader.delayspeed = 0;          //Speed of delay
MultiFader.fadeIndex = null;        //fadeindex
MultiFader.fadeIndexNext = null;    //fadeindexnext

//Initialize Function
MultiFader.Init = function()
{
    //Get fadeable items
    MultiFader.root = jQuery('.slider');
    MultiFader.items = jQuery('.slideBG', MultiFader.root);

    //Prepare positions and display states of subitems
    MultiFader.items.each(function()
    {
        //Set foreGround as subItem
        this.subItem = jQuery('.slideFG', this.parentNode);

        //Hide foreground
        this.subItem.hide();

        //set foreground height and width
        var fgWidth = this.subItem.width();
        var fgHeight = this.subItem.height();

        //Set parent visible
        jQuery(this).parent().css({ "visibility": "visible" });

        //Center foreground images
        this.subItem.css(
        {
            'margin-top': -(fgHeight / 2),
            'margin-left': -(fgWidth / 2),
            top: '50%',
            left: '50%'
        });
    });

    //Show first foreground for initial page load
    MultiFader.items[MultiFader.items.length - 1].subItem.show();

    //Start the fader
    MultiFader.start();
}

//Start the fader function
MultiFader.start = function()
{
    MultiFader.delayspeed = jQuery(MultiFader.items[MultiFader.items.length - 1]).parent().attr("delayspeed");
    MultiFader.timer = setTimeout(MultiFader.Next, MultiFader.delayspeed);
}

//Increment fader tick and wrap for item length.
MultiFader.GetIndex = function()
{
    MultiFader.slideCounter++;
    return MultiFader.items.length - (MultiFader.slideCounter % MultiFader.items.length) - 1;
}

//Get Next Fader
MultiFader.Next = function()
{
    //Get indexes
    MultiFader.fadeIndex = MultiFader.GetIndex();
    MultiFader.fadeIndexNext = (MultiFader.fadeIndex - 1 + MultiFader.items.length) % MultiFader.items.length;

    //Set parents (=Divs)
    MultiFader.CurrentParent = jQuery(MultiFader.items[MultiFader.fadeIndex]).parent();
    MultiFader.NextParent = jQuery(MultiFader.items[MultiFader.fadeIndexNext]).parent();

    //Set fadespeed and delayspeed of next item
    MultiFader.fadespeed = MultiFader.NextParent.attr("fadespeed");
    MultiFader.delayspeed = MultiFader.NextParent.attr("delayspeed");

    //Fade Out Foreground(Current)
    MultiFader.items[MultiFader.fadeIndex].subItem.fadeOut(
		MultiFader.fadespeed,
		function()
		{
		    //if next is still the item below the current one:
		    //fadeout the current BG
		    //fadein the next FG
		    //then continue with the next item.
		    if (MultiFader.fadeIndex > 0)
		    {
		        //Fade Out Background(Current)
		        MultiFader.items.eq(MultiFader.fadeIndex).fadeOut(
					MultiFader.fadespeed,
					function()
					{
					    //Hide current parent div and show next parent div otherwise the foreground link isn't clickable
					    MultiFader.CurrentParent.hide();
					    MultiFader.NextParent.show();

					    //Fade In Foreground(Next)
					    MultiFader.items[MultiFader.fadeIndexNext].subItem.fadeIn(
							MultiFader.fadespeed,
							function()
							{
							    //Call function recursive
							    MultiFader.timer = setTimeout(MultiFader.Next, MultiFader.delayspeed);
							}
                        )
					}
                );
		    }
		    //if next is the first item again
		    //fadein the next BG
		    //fadein next FG
		    //invisibly fade in all other BGs
		    //and continue with the next item
		    else
		    {
		        //Fade Out Background(Current)
		        MultiFader.items.eq(MultiFader.fadeIndexNext).fadeIn(
					MultiFader.fadespeed,
					function()
					{
					    //Hide current parent div and show next parent div otherwise the foreground link isn't clickable
					    MultiFader.CurrentParent.hide();
					    MultiFader.NextParent.show();

					    //Fade In Foreground(Next)
					    MultiFader.items[MultiFader.fadeIndexNext].subItem.fadeIn(
							MultiFader.fadespeed,
							function()
							{
							    //Make all Background visible again
							    MultiFader.items.show();

							    //Call function recursive
							    MultiFader.timer = setTimeout(MultiFader.Next, MultiFader.delayspeed);
							}
						)
					}
				);
		    }
		}
	);
}

//Do when Ready
jQuery(window).load(MultiFader.Init);
