/*

Better(?) Image fader (C)2004 Patrick H. Lauke aka redux

Inspired by Richard Rutter / Clagnut http://www.clagnut.com/blog/1299/ 

Original concept and code adapted from Couloir http://www.couloir.org/ 

preInit "Scheduler" idea by Cameron Adams aka The Man in Blue
http://www.themaninblue.com/writing/perspective/2004/09/29/ 

*/

/* general variables */

var fadeTargetId = 'tagline'; /* change this to the ID of the fadeable object */
var fadeTarget;
var preInitTimer;
preInit();



/* functions */


function preInit() {
    /* an inspired kludge that - in most cases - manages to initially hide the image
    before even onload is triggered (at which point it's normally too late, and a nasty flash
    occurs with non-cached images) */
    if ((document.getElementById) && (fadeTarget = document.getElementById(fadeTargetId))) {
   //     fadeTarget.style.visibility = "hidden";
        if (typeof preInitTimer != 'undefined') clearTimeout(preInitTimer); /* thanks to Steve Clay http://mrclay.org/ for this small Opera fix */
    } else {
        preInitTimer = setTimeout("preInit()", 4);
   }
}


function fadeInit() {
    if (document.getElementById) {
        /* get a handle on the fadeable object, to make code later more manageable */
        preInit(); /* shouldn't be necessary, but IE can sometimes get ahead of itself and trigger fadeInit first */
        /* set the initial opacity in a (hopefully) cross browser way
        notice that because of the way the image is in front, and not obfuscated
        by another object we need to "fade out", i don't need a fallback mechanism
        to show/hide the covering object...the image is just there, full stop */
        if (fadeTarget.style.MozOpacity != null) {
            /* Mozilla's pre-CSS3 proprietary rule */
            fadeTarget.style.MozOpacity = 0;
        } else if (fadeTarget.style.opacity != null) {
            /* CSS3 compatible */
            fadeTarget.style.opacity = 0;
        } else if (fadeTarget.style.filter != null) {
            /* IE's proprietary filter */
            fadeTarget.style.filter = "alpha(opacity=0)";
        }
        /* make the object visible again */
        fadeTarget.style.visibility = 'visible';
        window.setTimeout("fadeIn(0)", 1000);
    }
}

function fadeIn(opacity) {
    if (fadeTarget) {
        if (opacity <= 100) {
            if (fadeTarget.style.MozOpacity != null) {
                /* Mozilla's pre-CSS3 proprietary rule */
                fadeTarget.style.MozOpacity = (opacity / 100) - .001;
                /* the .001 fixes a glitch in the opacity calculation which normally results in a flash when reaching 1 */
            } else if (fadeTarget.style.opacity != null) {
                /* CSS3 compatible */
                fadeTarget.style.opacity = (opacity / 100) - .001;
            } else if (fadeTarget.style.filter != null) {
                /* IE's proprietary filter */
                fadeTarget.style.filter = "alpha(opacity=" + opacity + ")";
                /* worth noting: IE's opacity needs values in a range of 0-100, not 0.0 - 1.0 */
            }
            opacity += 2;
            window.setTimeout("fadeIn(" + opacity + ")", 30);
        }
    }
}

/* initialise fader by hiding image object first */
addEvent(window, 'load', fadeInit)



/* 3rd party helper functions */

/* addEvent handler for IE and other browsers */
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
    if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
        return true;
    } else if (elm.attachEvent) {
        var r = elm.attachEvent("on" + evType, fn);
        return r;
    }
} 
