var _isIE = navigator.appName.indexOf("Explorer") != -1 ? 1 : 0;
var _fadeDir = new Array();
var _timeouts = new Array();
var _foto = new Array();
var _step = 25;
var _delay = 25;
var _FADE_IN = 1, _FADE_OUT = 2, _FADE_NONE = 0;

function _getClip(eid) {
    var r = document.getElementById(eid).style.clip;
    r = r.substring(r.indexOf("(") + 1, r.indexOf(")"));
    var s = _isIE ? r.split(" ") : r.split(",");
    return new Array(parseInt(s[0]), parseInt(s[1]), parseInt(s[2]), parseInt(s[3])); // T R B L
}

function _setClip(eid, ct, cr, cb, cl) {
    document.getElementById(eid).style.clip = _isIE
        ? "rect(" + ct + "px " + cr + "px " + cb + "px " + cl + "px)"
        : "rect(" + ct + "px, " + cr + "px, " + cb + "px, " + cl + "px)";
}

function _mOut(eid) {
    if (!(_fadeDir[eid] && _fadeDir[eid] == _FADE_OUT)) {
        if (_foto[eid]) clearTimeout(_foto[eid]);
                _foto[eid] = setTimeout("_fade('" + eid + "', " + _FADE_OUT + ")", 500);
    }
}

function _mIn(eid, aeid) {

    var el = document.getElementById(eid);
    if (!(el.style.clip && el.style.clip.length > 0 && el.style.clip.indexOf("(") >= 0)) {
        _setClip(eid, 0, 0, 0, 0);
    }
    el.style.display="block";
    if (aeid) {
        var ael = document.getElementById(aeid);
        var px = ael.offsetLeft;
        var py = ael.offsetTop + ael.offsetHeight;

        while (ael.offsetParent != null) {
            ael = ael.offsetParent;
            px += ael.offsetLeft;
            py += ael.offsetTop;
        }
        
        var el = document.getElementById(eid);
        el.style.left = px;
        el.style.top = py;

        var cp = _getClip(eid);
        if (cp[0] > 0) { cp[2] -= cp[0]; cp[0] = 0; }
        if (cp[3] > 0) { cp[1] -= cp[3]; cp[3] = 0; }
        _setClip(eid, cp[0], cp[1], cp[2], cp[3]);
    }

    if (_foto[eid]) clearTimeout(_foto[eid]);
    if (!(_fadeDir[eid] && _fadeDir[eid] == _FADE_IN)) {
        if (_timeouts[eid]) clearTimeout(_timeouts[eid]);
        _timeouts[eid] = setTimeout("_fade('" + eid + "', " + _FADE_IN + ")", 0);
    }
}

function _fade(eid, dir) {
    if (dir) _fadeDir[eid] = dir;
    var el = document.getElementById(eid);
    var cp = _getClip(eid);
    var nextStep = 0;

    if (_fadeDir[eid] == _FADE_IN) {
        if (cp[1] < el.offsetWidth) { cp[1] += _step; nextStep = 1; }
        if (cp[2] < el.offsetHeight) { cp[2] += _step; nextStep = 1; }
    } else {
        var tmp = cp[0]; cp[0] = cp[2]; cp[2] = tmp;
        tmp = cp[1]; cp[1] = cp[3]; cp[3] = tmp;
        if (cp[3] > 0) { cp[3] -= _step; nextStep = 1; }
        if (cp[0] > 0) { cp[0] -= _step; nextStep = 1; }
    }

    if (cp[1] > el.offsetWidth) cp[1] = el.offsetWidth;
    if (cp[2] > el.offsetHeight) cp[2] = el.offsetHeight;
    if (cp[3] < 0) cp[3] = 0;
    if (cp[0] < 0) cp[0] = 0;

    if (_fadeDir[eid] == _FADE_IN) {
        _setClip(eid, cp[0], cp[1], cp[2], cp[3]);
    } else {
        _setClip(eid, cp[2], cp[3], cp[0], cp[1]);
    }

    if (nextStep) {
        clearTimeout(_timeouts[eid]);
        _timeouts[eid] = setTimeout("_fade('" + eid + "')", _delay);
    } else {
        if (_fadeDir[eid] == _FADE_OUT) el.style.display="none";
        _fadeDir[eid] = _FADE_NONE;
    }
}
