﻿function getImgNumInFocus()
{
    winWidth = getWinWidth();
    
    // document.Element for IE and document.body for Firefox/Safari
    if (!document.documentElement.scrollLeft == 0)
    {
        var scrollXPos = document.documentElement.scrollLeft;
    }
    
    else if (!document.body.scrollLeft == 0)
    {
        var scrollXPos = document.body.scrollLeft;
    }
    else scrollXPos = 0;
    
    // Nedenstående sætning virker ikke med meget brede skærme. Anden løsning kan overvejes
    // if(scrollXPos < 5) return 0;

    winCenter = scrollXPos + (winWidth / 2);
    var imgFocus = 0;
    var minDis = 99999999;

    for (i = 0; i < imgArray.length; i++)
    {
        var e = imgXPosArray[i]+(imgArray[i].width/2);
        var dis = e - winCenter;
        if (dis < 0) dis = dis * -1;
        if (dis == 0) return i;
        if (dis < minDis)
        {
            minDis = dis;
            imgFocus = i;
        }
    }
    return imgFocus;   
}

function offsetLeftToBody(obj)
{
    if(obj == null) alert("Sorry. The slider has an error (a picure out of range has been called)");
    var left;
    left = obj.offsetLeft;
    while ((obj.tagName != "HTML") && (obj.tagName != "BODY"))
    {
        obj=obj.offsetParent;
        left += obj.offsetLeft;
    }
    return left;
}

function getWinWidth()
{
    if( typeof( window.innerWidth ) == 'number' )
    
    {
        return window.innerWidth;
    }
    
    if (document.documentElement && document.documentElement.clientWidth)
    {
        return document.documentElement.clientWidth;
    }
    if (document.body && document.body.clientWidth)
    {
        return document.body.clientWidth;
    }
    
    return 100;
}

var imgArray;
var imgXPosArray;
var imgFocus = 0;

isInitSlideCalled = false;

function initSlide()
{
    if (isInitSlideCalled) return;
    isInitSlideCalled = true;

    imgArray = document.getElementsByName("imgSlide");
    imgXPosArray = new Array(imgArray.length);
   
    for (i = 0; i < imgArray.length; i++)
    {
        imgXPosArray [i] = offsetLeftToBody(imgArray[i]);
    }
}

function goToImage(imgNum)
{
    var img = imgArray[imgNum];
    var xPos = offsetLeftToBody(img);
    var winWidth = getWinWidth();
    var imgWidth = img.width;
    imgXPos = xPos - ((winWidth - imgWidth) / 2);
    smoothMove(imgXPos);return;
}

function keyDown(e)
{
if(e.keyCode == 39 || e.keyCode == 40)
{
clickSlideRight();
return;
}
else if(e.keyCode == 37 || e.keyCode == 38)
{
clickSlideLeft();
return;
}
else return;
}

function clickSlideLeft()
{
    if (!isInitSlideCalled) initSlide();
    i = getImgNumInFocus();
    if (i == 0)
{
    goToImage(imgArray.length-1)
    return;
}
    goToImage(i-1);
}

function clickSlideRight()
{
    if (!isInitSlideCalled) initSlide();
    i = getImgNumInFocus();
    if (i == imgArray.length-1)
{
    goToImage(0);
    return;
}
    goToImage(i+1);
}

// Konstanter
var moveTime = 250;
var interval = 8;

var startTime;
var endTime;
var dis;
var startPos;
var endPos;
var currentPos;

function smoothMoveRun()
{
    dd = new Date();
    now = dd.getTime();
    t = now - startTime;
    var newPos =  startPos + ((t/moveTime) * dis);
    
    if ((dis>=0) && (newPos>=endPos)) newPos=endPos;
    if ((dis<=0) && (newPos<=endPos)) newPos=endPos;

    // document.Element for IE and document.body for Firefox/Safari
    document.documentElement.scrollLeft = newPos;
    document.body.scrollLeft = newPos;

    if (newPos!=endPos) setTimeout("smoothMoveRun()",interval);
}

function smoothMove(toXPos)
{
    if (!document.documentElement.scrollLeft == 0)
    {
        startPos = document.documentElement.scrollLeft;
    }
    else if (!document.body.scrollLeft == 0)
    {
        startPos = document.body.scrollLeft;
    }
    else startPos = 0;
    
    dis = toXPos - startPos;
    dd = new Date();
    endPos = toXPos;
    startTime = dd.getTime();
    endTime = startTime + moveTime;
    setTimeout("smoothMoveRun()",interval);
}