// ------------------------------------ SliderClass ----------------------------------

// Globale variabelen
var slideArray = new Array();
var toFast = 942;

// Basis klasse van een slide div
function sliderClass()
{
	this.obj = null;	// ID van element dat slide
	this.fromX = 0;		// Start / huidige pos X
	this.toX = 0;		// Eind positie X
	this.fromY = 0;		// Start / huidige pos X
	this.toY = 0;		// Eind positie Y
	this.speed = 8;     // Snelheid in x stappen bij het einde (hoe lager, hoe sneller)
	this.timer = null;  // Timerobject voor huidige slidebeweging
	this.curTime = -1;  // Tijdsduur van de laatste scrollbeweging
}

// Init slide klasse en start de beweging
function startSlide(ele, toX, toY, beforeSlideCommand, afterSlideCommand, slideSpeed)
{    
    // Indien nodig het sliden zonder beweging doen
    if (false)
    {
        startSlideNoScroll(ele, toX, toY, beforeSlideCommand, afterSlideCommand);
        return;
    }
    
    // Lege variabelen opvangen
    if (toY == null || toY == "") toY = 0;
    if (beforeSlideCommand == null) beforeSlideCommand = "";
    if (afterSlideCommand == null) afterSlideCommand = "";
    
	// Init nieuwe klasse
	var mySlider	= new sliderClass();
	mySlider.obj	= document.getElementById(ele);
	mySlider.toX	= toX;
	mySlider.toY	= toY;
	mySlider.beforeSlideCommand = beforeSlideCommand;
	mySlider.afterSlideCommand = afterSlideCommand;
	
	// Speed instellen
	if (slideSpeed != null && slideSpeed != "")
	{
	    mySlider.speed = slideSpeed;
	}
	
	if (mySlider.obj != null) // Bestaat de slide wel
	{   	
		// Haal begin pos op
		mySlider.fromX = Math.round((mySlider.obj.style.marginLeft).replace("px", ""));
		if (mySlider.fromX == "") mySlider.fromX = 0; // onbekend dus 0
		
		mySlider.fromY = Math.round((mySlider.obj.style.marginTop).replace("px", ""));
		if (mySlider.fromY == "") mySlider.fromY = 0; // onbekend dus 0
		
		// Als te ver weg dan stukje skippen voor X
		if (Math.abs(mySlider.fromX-mySlider.toX) > toFast)
		{
			if (mySlider.fromX < mySlider.toX) mySlider.fromX = mySlider.toX - toFast;
			if (mySlider.fromX > mySlider.toX) mySlider.fromX = mySlider.toX + toFast;
		}
		
		// Als te ver weg dan stukje skippen voor Y
		if (Math.abs(mySlider.fromY-mySlider.toY) > toFast)
		{
			if (mySlider.fromY < mySlider.toY) mySlider.fromY = mySlider.toY - toFast;
			if (mySlider.fromY > mySlider.toY) mySlider.fromY = mySlider.toY + toFast;
		}
		
		// Alleen iets doen als het nog niet gedaan is
		if (Math.round((mySlider.obj.style.marginLeft).replace("px", "")) != mySlider.toX || Math.round((mySlider.obj.style.marginTop).replace("px", "")) != mySlider.toY)
		{
			// Voer het beforeSlideCommand uit
	        if (mySlider.beforeSlideCommand != "") eval(mySlider.beforeSlideCommand);
	        
			slideArray[ele] = mySlider; // Opslaan
			doSlide(ele); // Start beweging
		}
		else
		{
		    if (mySlider.afterSlideCommand != "") eval(mySlider.afterSlideCommand);
		}
	}
	
	mySlider = null;
}

// Laat de slider een stapje bewegen en zet timeout voor de volgende stap
function doSlide(ele)
{   
	var mySlider = slideArray[ele];
	
	if (mySlider != null)
	{   
	    var timespan = -1;
	    var curTime = (new Date()).getTime();
	    var preTime = mySlider.curTime;
        mySlider.curTime = curTime;
        if (preTime != -1) timespan = curTime - preTime;
        
        if (timespan != -1)
        {
            var newSpeed = ((900 / timespan) * mySlider.speed) - 0.5;
            if (newSpeed > mySlider.speed) newSpeed = mySlider.speed;
            if (newSpeed < 1) newSpeed = 1;
            mySlider.speed = newSpeed;
        }
	    
	    var xDiff = (Math.abs(mySlider.fromX - mySlider.toX));
	    var yDiff = (Math.abs(mySlider.fromY - mySlider.toY));
	    
		if (xDiff > 0.1 || yDiff > 0.1) 
		{    
    		mySlider.fromX += (mySlider.toX-mySlider.fromX)/mySlider.speed;
			mySlider.fromY += (mySlider.toY-mySlider.fromY)/mySlider.speed;
			mySlider.obj.style.marginLeft = Math.round(mySlider.fromX) + 'px';
			mySlider.obj.style.marginTop  = Math.round(mySlider.fromY) + 'px';
			slideArray[ele] = mySlider;
			slideArray[ele].timer = setTimeout("doSlide('"+ele+"')", 20);
		}
		else
		{    	    
		    mySlider.obj.style.marginLeft = mySlider.toX + 'px';
		    mySlider.obj.style.marginTop = mySlider.toY + 'px';
			mySlider.timer = clearTimeout(mySlider.timer);
			if (mySlider.afterSlideCommand != "") eval(mySlider.afterSlideCommand);
			slideArray[ele] = null;
		}
	}
	
	mySlider = null;
}

// Init slide classe en start de beweging zonder te scrollen
function startSlideNoScroll(ele, toX, toY, beforeSlideCommand, afterSlideCommand)
{    
    // Lege variabelen opvangen
    if (toY == null || toY == "") toY = 0;
    if (beforeSlideCommand == null) beforeSlideCommand = "";
    if (afterSlideCommand == null) afterSlideCommand = "";
    
    // Do it
	eval(beforeSlideCommand);
	document.getElementById(ele).style.marginLeft = toX + 'px';
	document.getElementById(ele).style.marginTop = toY + 'px';
	eval(afterSlideCommand);
}

// ------------------------------------ SliderClass ----------------------------------