/*
** Magic-Tours fading-script
** (c) by Johanner Ernesti 2007
*/

// configuration-constants
var FADE_DELAY = 5;
var FADE_STEP = 4;
var FADE_MIN = 0;
var FADE_MAX = 100;


// internal variables
var FADE_START = 0
var FADE_END = 1
var FADE_IN = 2
var FADE_OUT = 3

function setupFading()
    {
    var imgs = document.getElementsByTagName("img");

    var fading = Array();
    for(var h1 = 0; h1 < imgs.length; h1++)
        {
        i = imgs[h1];
        if(i.className.search(/fade/) != -1)
            {
            i.onmouseover = fadeIn;
            i.onmouseout = fadeOut;
            i.fadingState = FADE_START;
            i.style.position = "absolute";
            i.style.zIndex = "1337";
            i.fadingCounter = 0;
            i.timer = 0;
            fading.push(i);
            }
        }

    // preload all images
    for(var i = 0; i < fading.length; i++)
        {
        var img = document.createElement("img");
        img.src = fading[i].src.replace(/normal/, "fading");
        img.style.visibility = "hidden";
        img.style.position = "absolute";
        img.className = "fadingOverlay";
        img.style.zIndex = "1330";

        fading[i].fadingImage = img;
        fading[i].parentNode.appendChild(img);
        }
    }


function fadeIn()
    {
    var tmp = this.fadingState;
    this.fadingState = FADE_IN;
    startFading(this);
    }


function fadeOut()
    {
    var tmp = this.fadingState;
    this.fadingState = FADE_OUT;
    startFading(this);
    }


function startFading(e)
    {
    if(e.timer != 0)
        return;

    var pos = getLeftTop(e.id);
    e.fadingImage.style.left = pos.x + "px";
    e.fadingImage.style.top = pos.y + "px";
    e.fadingImage.style.visibility = "visible";

    e.timer = window.setInterval("fade('" + e.id + "')", FADE_DELAY);
    }


function fade(id)
    {
    var e = document.getElementById(id);

    if(e.fadingState == FADE_START || e.fadingState == FADE_END)
        {
        window.clearInterval(e.timer);
        e.timer = 0;

        if(e.fadingState == FADE_START)
            {
            e.fadingImage.style.visibility = "hidden";
            e.style.filter = "";
            }
        }
    else
        {
        if(e.fadingState == FADE_IN)
            {
            e.fadingCounter += FADE_STEP;

            if(e.fadingCounter >= FADE_MAX)
                {
                e.fadingCounter = FADE_MAX;
                e.fadingState = FADE_END;
                }
            }
        else if(e.fadingState == FADE_OUT)
            {
            e.fadingCounter -= FADE_STEP;

            if(e.fadingCounter <= FADE_MIN)
                {
                e.fadingCounter = FADE_MIN;
                e.fadingState = FADE_START;
                }
            }

        var op = (FADE_MAX - e.fadingCounter);
        e.style.opacity = op / 100;
        e.style.filter= "Alpha(opacity=" + op + ")";
        }
    }

// returns the position of the left top corner of the element identified with id
function getLeftTop(id)
    {
    var e = document.getElementById(id);

    var p = new Object();
    p.x = 0;
    p.y = 0;

    while(e.offsetParent != null)
        {
        p.x += e.offsetLeft;
        p.y += e.offsetTop;
        e = e.offsetParent;
        }

    return p;
    }
