﻿/* 
Document Wipes effect- By Dynamic Web Coding (www.dyn-web.com)
Copyright 2002 by Sharon Paine
Visit http://www.dynamicdrive.com for this script
Idea and math for time-based animation from:
Aaron Boodman at www.youngpup.net 
and Mike Foster at www.cross-browser.com
*/

dom = (document.getElementById) ? true : false;
ns5 = ((navigator.userAgent.indexOf("Gecko") > -1) && dom) ? true : false;
ie5 = ((navigator.userAgent.indexOf("MSIE") > -1) && dom) ? true : false;
ns4 = (document.layers && !dom) ? true : false;
ie4 = (document.all && !dom) ? true : false;
nodyn = (!ns5 && !ns4 && !ie4 && !ie5) ? true : false;

var origWidth, origHeight;
if (ns4) {
    origWidth = window.innerWidth;
    origHeight = window.innerHeight;
}
// reload or reposition on resize
function reDo() {
    if (ns4) {
        if (window.innerWidth != origWidth || window.innerHeight != origHeight)
            window.location.reload();
    } else setTimeout("rePosition()", 200);
}
window.onresize = reDo;

function rePosition() {
    positionBotmRt('skipDiv');
    if (typeof wipeLyr1 != "undefined") wipeLyr1.centerIn(window);
    //if (typeof wipeLyr2!="undefined") wipeLyr2.centerIn(window);
}

// for positioning "skip intro" link-layer
function positionBotmRt(lyr) {
    var lyrcss = (ns4) ? document.layers[lyr] : (ie4) ? document.all[lyr].style : (ie5 | ns5) ? document.getElementById(lyr).style : null;
    var winWd = (ie4 || ie5) ? document.body.clientWidth : window.innerWidth;
    var winHt = (ie4 || ie5) ? document.body.clientHeight : window.innerHeight;
    var x = winWd - getWidth(lyrcss, 'skipLnk') - 16;
    var y = winHt - getHeight(lyrcss, 'skipLnk') - 16;
    lyrcss.left = (ns4) ? x : x + "px";
    lyrcss.top = (ns4) ? y : y + "px";
    lyrcss.visibility = "visible";
}

var wipe_count = 0; // to keep track
function doWipes() {
    if (wipe_count < wipe_array.length) {
        /////////////////////////////////////////////////////////////////////
        // This is set up for text on 1 line.
        // It wraps wipe layer content in table 
        // so you can get rendered width/height.
        // NOTE: uses nowrap minimized attribute. 

        // If you want to be xhtml valid, you could remove that 
        // and use non-breaking spaces between words instead.

        var cntnt = '<table id="w1" border="0" cellpadding="0" cellspacing="0"><tr><td class="wipe" nowrap>' + wipe_array[wipe_count] + '</td></tr></table>';

        with (wipeLyr1) {
            hide();
            // restore, for ns4, or new content is visible...
            clipTo(0, wipeLyr1.width, wipeLyr1.height, 0);
            writeLyr(cntnt);
            width = getWidth(wipeLyr1.el, 'w1');
            height = getHeight(wipeLyr1.el, 'w1');
            centerIn(window);
        }
        // args: which wipe, delay, wipeTime, what next
        wipeLyr1.wipe("in right", wipe_in_delay, wipe_array[wipe_count + 1], "wipeOuts()");
    } else {
        // wipes in image, then sends to destination url
        //wipeLyr2.wipe("in center", wipe_in_logo_delay,wipe_in_logo,"setTimeout('setDest()',dest_delay)");
        setTimeout('setDest()', dest_delay);
    }
}

function wipeOuts() {
    wipeLyr1.wipe("out middle", wipe_out_delay, wipe_array[wipe_count + 1] / wipe_out_dv, "doWipes()");
    wipe_count += 2;
}
// end of wipe-splash code
/////////////////////////////////////////////////////////////////////
// beginning of wipes.js proper
// constructor
function dynObj(obj) {
    this.el = (ns4) ? getLyrRef(obj, document) : (ie4) ? document.all[obj] : (ie5 || ns5) ? document.getElementById(obj) : null;
    this.css = (ns4) ? this.el : (ie4 || ie5 || ns5) ? this.el.style : null;
    this.doc = (ns4) ? this.el.document : this.el;
    this.x = (ns4) ? this.css.left : parseInt(this.css.left);
    this.y = (ns4) ? this.css.top : parseInt(this.css.top);
    this.width = (ns4) ? this.el.clip.width : (this.css.width) ? parseInt(this.css.width) : this.el.offsetWidth;
    this.height = (ns4) ? this.el.clip.height : (this.css.height) ? parseInt(this.css.height) : this.el.offsetHeight;
    this.obj = obj + "dynObj"; eval(this.obj + "=this");
}

// args: which wipe, delay, wipeTime, what next (fn)
dynObj.prototype.wipe = function(which, delay, wipeTime, fn) {
    this.wipeTime = wipeTime; this.fn = fn;
    switch (which) {
        // wipe into view by expanding to the right 
        case "in right":
            this.clipTo(0, 0, this.height, 0);
            this.show();
            setTimeout(this.obj + ".wipe_in_rt()", delay);
            break;

        // wipe into view by expanding from the center out 
        case "in center":
            this.vCenter = Math.ceil(this.height / 2);
            this.hCenter = Math.ceil(this.width / 2);
            this.clipTo(this.vCenter, this.hCenter, this.vCenter, this.hCenter);
            this.show();
            setTimeout(this.obj + ".wipe_in_center()", delay);
            break;

        // wipe into view from upper left corner to lower right 
        case "in corner":
            this.clipTo(0, 0, 0, 0);
            this.show();
            setTimeout(this.obj + ".wipe_in_corner()", delay);
            break;

        // wipe out of view by contracting to the center 
        case "out center":
            this.vCenter = Math.ceil(this.height / 2);
            this.hCenter = Math.ceil(this.width / 2);
            setTimeout(this.obj + ".wipe_out_center()", delay);
            break;

        // wipe out of view by contracting to the left 
        case "out left":
            setTimeout(this.obj + ".wipe_out_left()", delay);
            break;

        // wipe out of view by contracting to the right 
        case "out right":
            setTimeout(this.obj + ".wipe_out_right()", delay);
            break;

        // wipe out of view by contracting from left and right 
        case "out middle":
            this.dest = Math.ceil(this.width / 2);
            setTimeout(this.obj + ".wipe_out_mid()", delay);
            break;

        // wipe out of view from the upper left to lower right 
        case "out corner":
            setTimeout(this.obj + ".wipe_out_corner()", delay);
            break;

        default:
            alert("Oops! Check choices again.");
    }
    this.wipeStart = new Date().getTime() + delay;
    this.per = Math.PI / (2 * this.wipeTime);
}

// wipe into view by expanding to the right
dynObj.prototype.wipe_in_rt = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        //	wipes could potentially be steady, accelerate, or decelerate
        //	idea and math from Mike Foster at www.cross-browser.com
        //	var inc = this.width*Math.sin(this.per*elapsed);
        //	var inc = -this.width*Math.cos(this.per*elapsed)+this.width;
        var inc = this.width * ((1 / this.wipeTime) * elapsed);
        this.clipTo(0, inc, this.height, 0);
        setTimeout(this.obj + ".wipe_in_rt()", 35);
    } else {
        this.clipTo(0, this.width, this.height, 0);
        if (this.fn) eval(this.fn);
    }
}

// wipe into view by expanding from the center out
dynObj.prototype.wipe_in_center = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        var vinc = this.vCenter * ((1 / this.wipeTime) * elapsed);
        var hinc = this.hCenter * ((1 / this.wipeTime) * elapsed);
        this.clipTo(this.vCenter - vinc, this.hCenter + hinc, this.vCenter + vinc, this.hCenter - hinc);
        setTimeout(this.obj + ".wipe_in_center()", 35);
    } else {
        this.clipTo(0, this.width, this.height, 0);
        if (this.fn) eval(this.fn);
    }
}

// wipe into view from upper left corner to lower right
dynObj.prototype.wipe_in_corner = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        var vinc = this.height * ((1 / this.wipeTime) * elapsed);
        var hinc = this.width * ((1 / this.wipeTime) * elapsed);
        this.clipTo(0, hinc, vinc, 0);
        setTimeout(this.obj + ".wipe_in_corner()", 35);
    } else {
        this.clipTo(0, this.width, this.height, 0);
        if (this.fn) eval(this.fn);
    }
}

// wipe out of view by contracting to the center
dynObj.prototype.wipe_out_center = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        var vinc = this.vCenter * ((1 / this.wipeTime) * elapsed);
        var hinc = this.hCenter * ((1 / this.wipeTime) * elapsed);
        this.clipTo(vinc, this.width - hinc, this.height - vinc, hinc);
        setTimeout(this.obj + ".wipe_out_center()", 35);
    } else {
        this.clipTo(this.vCenter, this.hCenter, this.vCenter, this.hCenter);
        if (this.fn) eval(this.fn);
    }
}

// wipe out of view by contracting to the left
dynObj.prototype.wipe_out_left = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        var inc = this.width * ((1 / this.wipeTime) * elapsed);
        this.clipTo(0, this.width - inc, this.height, 0);
        setTimeout(this.obj + ".wipe_out_left()", 35);
    } else {
        this.clipTo(0, 0, this.height, 0);
        if (this.fn) eval(this.fn);
    }
}

// wipe out of view by contracting to the right
dynObj.prototype.wipe_out_right = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        var inc = this.width * ((1 / this.wipeTime) * elapsed);
        this.clipTo(0, this.width, this.height, inc);
        setTimeout(this.obj + ".wipe_out_right()", 35);
    } else {
        this.clipTo(0, this.width, this.height, this.width);
        if (this.fn) eval(this.fn);
    }
}

// wipe out of view by contracting from left and right
dynObj.prototype.wipe_out_mid = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        //	var inc = this.dest*Math.sin(this.per*elapsed);
        var inc = -this.dest * Math.cos(this.per * elapsed) + this.dest;
        //	var inc = this.dest*((1/this.wipeTime)*elapsed);
        this.clipTo(0, this.width - inc, this.height, inc);
        setTimeout(this.obj + ".wipe_out_mid()", 35);
    } else {
        this.clipTo(0, this.dest, this.height, this.dest);
        if (this.fn) eval(this.fn);
    }
}

dynObj.prototype.wipe_out_corner = function() {
    var clipVal = this.getClipValues();
    var elapsed = (new Date().getTime()) - this.wipeStart;
    if (elapsed < this.wipeTime) {
        var vinc = -this.height * Math.cos(this.per * elapsed) + this.height;
        var hinc = -this.width * Math.cos(this.per * elapsed) + this.width;
        this.clipTo(vinc, this.width, this.height, hinc);
        setTimeout(this.obj + ".wipe_out_corner()", 35);
    } else {
        this.clipTo(this.height, this.width, this.height, this.width);
        if (this.fn) eval(this.fn);
    }
}

// end wipe methods

/////////////////////////////////////////////////////////////////////
// center in container (window or outer layer)
dynObj.prototype.centerIn = function(outer) {
    var outWd, outHt, inWd, inHt, x, y;
    if (eval(outer) == window) {
        outWd = (ie4 || ie5) ? document.body.clientWidth : window.innerWidth;
        outHt = (ie4 || ie5) ? document.body.clientHeight : window.innerHeight;
    } else {
        outWd = outer.width;
        outHt = outer.height;
    }
    inWd = this.width;
    inHt = this.height;
    x = Math.round((outWd - inWd) / 2);
    y = Math.round((outHt - inHt) / 2);
    this.shiftTo(x, y);
}

/////////////////////////////////////////////////////////////////////
// clip methods
// ideas from dynduo, brainjar and bratta
dynObj.prototype.getClipValues = function() {
    if (ns4) {
        var clipVal = new Array();
        clipVal[0] = this.css.clip.top;
        clipVal[1] = this.css.clip.right;
        clipVal[2] = this.css.clip.bottom;
        clipVal[3] = this.css.clip.left;
    } else if (ie4 || ie5 || ns5) {
        var clipVal = this.css.clip.substring(5, this.css.clip.length - 1).split(' ');
        for (var i = 0; i < 4; i++) {
            clipVal[i] = parseInt(clipVal[i]);
        }
    }
    return clipVal;
}

dynObj.prototype.clipBy = function(top, rt, btm, lft) {
    if (ns4) {
        this.css.clip.top += top;
        this.css.clip.right += rt;
        this.css.clip.bottom += btm;
        this.css.clip.left += lft;
    } else if (ie4 || ie5 || ns5) {
        var clipVal = this.getClipValues();
        this.css.clip = "rect(" + Number(clipVal[0] + top) + "px " + Number(clipVal[1] + rt) + "px " + Number(clipVal[2] + btm) + "px " + Number(clipVal[3] + lft) + "px)"
    }
}

dynObj.prototype.clipTo = function(top, rt, btm, lft) {
    if (ns4) {
        this.css.clip.top = top;
        this.css.clip.right = rt;
        this.css.clip.bottom = btm;
        this.css.clip.left = lft;
    } else if (ie4 || ie5 || ns5) {
        this.css.clip = "rect(" + top + "px " + rt + "px " + btm + "px " + lft + "px)";
    }
}
// end clip methods

dynObj.prototype.shiftTo = function(x, y) {
    // idea from dynduo.
    if (x != null) this.x = x; if (y != null) this.y = y;
    if (ns4) { this.css.moveTo(this.x, this.y); }
    else { this.css.left = this.x + "px"; this.css.top = this.y + "px"; }
}

dynObj.prototype.shiftBy = function(x, y) {



    this.shiftTo(this.x + x, this.y + y);
}

dynObj.prototype.show = function() { this.css.visibility = "visible"; }
dynObj.prototype.hide = function() { this.css.visibility = "hidden"; }

dynObj.prototype.writeLyr = function(cntnt) {
    if (ns4) {
        this.doc.write(cntnt);
        this.doc.close();
    } else if (ie4 || ie5 || ns5) {
        this.doc.innerHTML = cntnt;
    }
}

// gets rendered height/width 
// for ns4, pass reference to layer. 
// for others, pass id of html element containing content
function getWidth(obj, id) {
    var wd = (ns4) ? obj.document.width : (ie4) ? document.all[id].offsetWidth : (ie5 || ns5) ? document.getElementById(id).offsetWidth : 0;
    return wd;
}

function getHeight(obj, id) {
    var ht = (ns4) ? obj.document.height : (ie4) ? document.all[id].offsetHeight : (ie5 || ns5) ? document.getElementById(id).offsetHeight : 0;
    return ht;
}

// get reference to nested layer for ns4
// from dhtmllib.js by Mike Hall of www.brainjar.com
function getLyrRef(lyr, doc) {
    if (ns4) {
        var theLyr;
        for (var i = 0; i < doc.layers.length; i++) {
            theLyr = doc.layers[i];
            if (theLyr.name == lyr) return theLyr;
            else if (theLyr.document.layers.length > 0)
                if ((theLyr = getLyrRef(lyr, theLyr.document)) != null)
                return theLyr;
        }
        return null;
    }
}