/////////////////////////////////////////////////////
//                                                 //
//  SECTION 5: BROWSER SNIFFER & DOMS                                //
//  ---------------------------------------------  //
//  Document Object switch routine use to          //
//  maintain cross-browser compatibility.          //
//                                                 //
/////////////////////////////////////////////////////


// BROWSER SNIFFER (Sniff out the good and bad browsers)

function Is() {
    var agent = navigator.userAgent.toLowerCase();
    this.major = parseInt(navigator.appVersion);
    this.minor = parseFloat(navigator.appVersion);
    this.ns  = ((agent.indexOf('mozilla')!=-1) && ((agent.indexOf('spoofer')==-1) && (agent.indexOf('compatible') == -1)));
    this.ns2 = (this.ns && (this.major == 2));
    this.ns3 = (this.ns && (this.major == 3));
    this.ns4b = (this.ns && (this.minor < 4.04));
    this.ns4 = (this.ns && (this.major >= 4));
    this.ie   = (agent.indexOf("msie") != -1);
    this.ie3  = (this.ie && (this.major == 2));
    this.ie4  = (this.ie && (this.major >= 4));
    this.op3 = (agent.indexOf("opera") != -1);
    this.win   = (agent.indexOf("win")!=-1);
    this.mac   = (agent.indexOf("mac")!=-1);
    this.unix  = (agent.indexOf("x11")!=-1);
}

var is = new Is();


// DOCUMENT OBJECT SWITCH (Used for building cross_browser functions)

if(is.ns4) {
    doc = "document";
    sty = "";
    htm = ".document"
} else if(is.ie4) {
    doc = "document.all";
    sty = ".style";
    htm = ""
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 6: PRELOADING                          //
//  ---------------------------------------------  //
//  Preload images memory for realtime animation.  //
//                                                 //
/////////////////////////////////////////////////////

var count = 0;

function preLoad() {
    button_up = new Image();
    button_up.onload = (is.ns4b) ? loadCheck() : loadCheck;
    button_up.src = "images/button_up.gif";

    button_dn = new Image();
    button_dn.onload = (is.ns4b) ? loadCheck() : loadCheck;
    button_dn.src = "images/button_dn.gif";

    sphere1 = new Image();
    sphere1.onload = (is.ns4b) ? loadCheck() : loadCheck;
    sphere1.src = "images/sphere1.gif";

    sphere2 = new Image();
    sphere2.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    sphere2.src = "images/sphere2.gif";

    eye_open = new Image();
    eye_open.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_open.src = "images/eye_open.gif";

    eye_partial = new Image();
    eye_partial.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_partial.src = "images/eye_partial.gif";

    eye_closed = new Image();
    eye_closed.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_closed.src = "images/eye_closed.gif";

    eye_center1 = new Image();
    eye_center1.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_center1.src = "images/eye_center1.gif";

    eye_center2 = new Image();
    eye_center2.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_center2.src = "images/eye_center2.gif";

    eye_north = new Image();
    eye_north.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_north.src = "images/eye_north.gif";

    eye_northeast = new Image();
    eye_northeast.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_northeast.src = "images/eye_northeast.gif";

    eye_east = new Image();
    eye_east.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_east.src = "images/eye_east.gif";

    eye_southeast = new Image();
    eye_southeast.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_southeast.src = "images/eye_southeast.gif";

    eye_south = new Image();
    eye_south.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_south.src = "images/eye_south.gif";

    eye_southwest = new Image();
    eye_southwest.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_southwest.src = "images/eye_southwest.gif";

    eye_west = new Image();
    eye_west.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_west.src = "images/eye_west.gif";

    eye_northwest = new Image();
    eye_northwest.onload  = (is.ns4b) ? loadCheck() : loadCheck;
    eye_northwest.src = "images/eye_northwest.gif";
}

function loadCheck() {
    count++;
    if(count == 17) {
        positionLayers();
    }
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 7: POSITIONING                         //
//  ---------------------------------------------  //
//  Build layer objects then position using        //
//  screen width and height dimensions, then       //
//  turn on layer visibility.                      //
//                                                 //
/////////////////////////////////////////////////////

function positionLayers() {
    sunObj = eval(doc + '["sunLyr"]' + sty);
    sunObj.left = 0;
    sunObj.top = 190;

    handObj = eval(doc + '["handLyr"]' + sty);
    handObj.left = available_width-131;
    handObj.top = available_height-236;

    craneObj = eval(doc + '["craneLyr"]' + sty);
    craneObj.left = available_width-134;
    craneObj.top = 10;

    carriageObj = eval(doc + '["carriageLyr"]' + sty);
    carriageObj.left = parseInt(craneObj.left);
    carriageObj.top = 20;

    eyeballImg = eval(doc + '["eyeballLyr"]' + '.document');
    eyeballObj = eval(doc + '["eyeballLyr"]' + sty);
    eyeballObj.left = parseInt(carriageObj.left) + 17;
    eyeballObj.top = parseInt(carriageObj.top) + 212;

    eyelidImg = eval(doc + '["eyelidLyr"]' + '.document');
    eyelidObj = eval(doc + '["eyelidLyr"]' + sty);
    eyelidObj.left = parseInt(carriageObj.left) + 17;
    eyelidObj.top = parseInt(carriageObj.top) + 212;

    buttonImg = eval(doc + '["menuLyr"]' + '.document');
    menuObj = eval(doc + '["menuLyr"]' + sty);
    menuObj.left = 8;
    menuObj.top = 0;

    overviewObj = eval(doc + '["overviewLyr"]' + sty);
    overviewObj.left = 160;
    overviewObj.top = 10;

    aboutsiteObj = eval(doc + '["aboutsiteLyr"]' + sty);
    aboutsiteObj.left = 160;
    aboutsiteObj.top = 10;

    daveObj = eval(doc + '["daveLyr"]' + sty);
    daveObj.left = 160;
    daveObj.top = 10;

    photoObj = eval(doc + '["photoLyr"]' + sty);
    photoObj.left = 160;
    photoObj.top = 10;

    interestObj = eval(doc + '["interestLyr"]' + sty);
    interestObj.left = 160;
    interestObj.top = 10;

    quotesObj = eval(doc + '["quotesLyr"]' + sty);
    quotesObj.left = 160;
    quotesObj.top = 10;

    poemsObj = eval(doc + '["poemsLyr"]' + sty);
    poemsObj.left = 160;
    poemsObj.top = 10;

    tkdObj = eval(doc + '["tkdLyr"]' + sty);
    tkdObj.left = 160;
    tkdObj.top = 10;

    linksObj = eval(doc + '["linksLyr"]' + sty);
    linksObj.left = 160;
    linksObj.top = 10;

    creditsObj = eval(doc + '["creditsLyr"]' + sty);
    creditsObj.left = 160;
    creditsObj.top = 10;

    arrowObj = eval(doc + '["arrowLyr"]' + sty);
    arrowObj.left = available_width-40;
    arrowObj.top = 20;

    sphere1Img = eval(doc + '["sphere1Lyr"]' + '.document');
    sphere1Obj = eval(doc + '["sphere1Lyr"]' + sty);
    sphere1Obj.left = 7;
    sphere1Obj.top = available_height-200;

    sphere2Img = eval(doc + '["sphere2Lyr"]' + '.document');
    sphere2Obj = eval(doc + '["sphere2Lyr"]' + sty);
    sphere2Obj.left = parseInt(sphere1Obj.left) + 40;
    sphere2Obj.top = parseInt(sphere1Obj.top) + 74;

    sunObj.visibility = "visible";
    craneObj.visibility = "visible";
    carriageObj.visibility = "visible";
    eyeballObj.visibility = "visible";
    eyelidObj.visibility = "visible";
    menuObj.visibility = "visible";
    arrowObj.visibility = "visible";
    handObj.visibility = "visible";

    setTimeout("animate()", 2500);
    menuToggle('overview');
    buttonOver('overview');
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 7: POSITIONING                         //
//  ---------------------------------------------  //
//  Positioning sphere examples.                   //
//                                                 //
/////////////////////////////////////////////////////

function changeLayers() {
    sphere2Obj.left=7;
    sphere2Obj.top=available_height-200;
    sphere1Obj.left=parseInt(sphere2Obj.left)+40;
    sphere1Obj.top=parseInt(sphere2Obj.top)+74;
    setTimeout("resetLayers()", 3000);
}

function resetLayers() {
    sphere1Obj.left=7;
    sphere1Obj.top=available_height-200;
    sphere2Obj.left=parseInt(sphere1Obj.left)+40;
    sphere2Obj.top=parseInt(sphere1Obj.top)+74
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 8: ANIMATION (Layer Animation)         //
//  ---------------------------------------------  //
//  Sphere example for animating layers.           //
//                                                 //
/////////////////////////////////////////////////////

function animateLayers() {
    var x_pos1 = parseInt(sphere1Obj.left);
    var x_pos2 = parseInt(sphere2Obj.left);
    if(x_pos1 < 47) {
        sphere1Obj.left = x_pos1+2;
        sphere2Obj.left = x_pos2-2;
        setTimeout("animateLayers()", 1);
    } else {
        resetLayers();
    }
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 8: ANIMATION (Image Animation)         //
//  ---------------------------------------------  //
//  Sphere example for animating images within     //
//  layers.                                        //
//                                                 //
/////////////////////////////////////////////////////

var counter = 0;

function animateImage() {
    if(counter < 10) {
        sphere1Img.sphere1_image.src = sphere2.src;
        setTimeout("sphere1Img.sphere1_image.src=sphere1.src", 500);
        setTimeout("animateImage()", 1000);
        counter++;
    } else {
        counter = 0;
    }
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 8: ANIMATION (Random Image Animation)  //
//  ---------------------------------------------  //
//  Sphere example for randomly animating images   //
//  within layers.                                 //
//                                                 //
/////////////////////////////////////////////////////

var sphereArray = new Array()
    sphereArray[0]="sphere1";
    sphereArray[1]="sphere2";

function randomImage() {
    if(counter < 10) {
        sphere1Img.sphere1_image.src = eval(sphereArray[Math.round((sphereArray.length-1)*Math.random())] + ".src");
        sphere2Img.sphere2_image.src = eval(sphereArray[Math.round((sphereArray.length-1)*Math.random())] + ".src");
        setTimeout("randomImage()", 1000);
        counter++;
    } else {
        counter = 0;
    }
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 8: ANIMATION (Image Data Array)        //
//  ---------------------------------------------  //
//  Create data array for random layer and image   //
//  animation.                                     //
//                                                 //
/////////////////////////////////////////////////////

var eyelidArray = new Array()
    eyelidArray[0]="eye_open";
    eyelidArray[1]="eye_partial";

var eyeballArray = new Array()
    eyeballArray[0]="eye_center1";
    eyeballArray[1]="eye_center2";
    eyeballArray[2]="eye_north";
    eyeballArray[3]="eye_northeast";
    eyeballArray[4]="eye_east";
    eyeballArray[5]="eye_southeast";
    eyeballArray[6]="eye_south";
    eyeballArray[7]="eye_southwest";
    eyeballArray[8]="eye_west";
    eyeballArray[9]="eye_northwest";

var horizArray = new Array()
    horizArray[0]=391;
    horizArray[1]=195;
    horizArray[2]=130;
    horizArray[3]=97;
    horizArray[4]=10;

var vertArray = new Array()
    vertArray[0]=-10;
    vertArray[1]=-40;
    vertArray[2]=-70;
    vertArray[3]=-100;
    vertArray[4]=-130;
    vertArray[5]=-160;
    vertArray[6]=-185;

var xArray = new Array()
    xArray[0]="left";
    xArray[1]="right";

var yArray = new Array()
    yArray[0]="up";
    yArray[1]="down";

var moveArray = new Array()
    moveArray[0]="moveVert";
    moveArray[1]="moveHoriz";

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 8: ANIMATION (Random Image Animator)   //
//  ---------------------------------------------  //
//  Use to randomize data array for roaming eye.   //
//                                                 //
/////////////////////////////////////////////////////

function randomizer(list) {
    return list[Math.round((list.length-1)*Math.random())];
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 8: ANIMATION (Composite Animation)     //
//  ---------------------------------------------  //
//  Animation techniques to animate layers and     //
//  images within layers for the roaming eye.      //
//                                                 //
/////////////////////////////////////////////////////

var move_poser = true;
var moveDirection = "moveHoriz";
var zindex_toggle = true;

function animate() {
    moveDirection = randomizer(moveArray);
    if(moveDirection == "moveHoriz") {
        moveHoriz(randomizer(xArray),randomizer(horizArray));
    } else if(moveDirection == "moveVert") {
        moveVert(randomizer(yArray),randomizer(vertArray));
    }
    if(parseInt(carriageObj.left) < 40) {
        carriageObj.zIndex = 2;
        craneObj.zIndex = 3;
        eyeballObj.zIndex = 4;
        eyelidObj.zIndex = 5;
    }
    if(parseInt(carriageObj.left) > available_width-90) {
        carriageObj.zIndex = 7;
        craneObj.zIndex = 8;
        eyeballObj.zIndex = 9;
        eyelidObj.zIndex = 10;
    }
    if(move_poser == true) {
        setTimeout("moveHand()", 2000);
    }
}

var vert = "";
var vert_dist = 0;
var timer3 = null;

function moveVert(dir,dist) {
    vert = dir;
    vert_dist = dist;
    var y_pos1 = parseInt(carriageObj.top);
    var y_pos2 = parseInt(eyeballObj.top);
    var y_pos3 = parseInt(eyelidObj.top);
    if(vert == "up") {
        if(y_pos1 > vert_dist) {
            carriageObj.top = y_pos1-1;
            eyeballObj.top = y_pos2-1;
            eyelidObj.top = y_pos3-1;
            timer3 = setTimeout("moveVert(vert,vert_dist)", 1);
        } else {
            eyeballImg.eyeball_img.src = eval(randomizer(eyeballArray) + ".src");
            eyelidImg.eyelid_img.src = eval(randomizer(eyelidArray) + ".src");
            setTimeout("animate()", 2500);
        }
    }
    if(vert == "down") {
        if(y_pos1 < vert_dist) {
            carriageObj.top = y_pos1+1;
            eyeballObj.top = y_pos2+1;
            eyelidObj.top = y_pos3+1;
            timer3 = setTimeout("moveVert(vert,vert_dist)", 1);
        } else {
            eyeballImg.eyeball_img.src = eval(randomizer(eyeballArray) + ".src");
            eyelidImg.eyelid_img.src = eval(randomizer(eyelidArray) + ".src");
            setTimeout("animate()", 2500);
        }
    }
}

var horiz = "";
var horiz_dist = 0;
var timer4 = null;

function moveHoriz(dir,dist) {
    horiz = dir;
    horiz_dist = dist;
    var x_pos1 = parseInt(carriageObj.left);
    var x_pos2 = parseInt(eyeballObj.left);
    var x_pos3 = parseInt(eyelidObj.left);
    var x_pos4 = parseInt(craneObj.left);
    if(horiz == "left") {
        if(x_pos4 > horiz_dist) {
            carriageObj.left = x_pos1-1;
            eyeballObj.left = x_pos2-1;
            eyelidObj.left = x_pos3-1;
            craneObj.left = x_pos4-1;
            timer4 = setTimeout("moveHoriz(horiz,horiz_dist)", 100);
        } else {
            eyeballImg.eyeball_img.src = eval(randomizer(eyeballArray) + ".src");
            eyelidImg.eyelid_img.src = eval(randomizer(eyelidArray) + ".src");
            setTimeout("animate()", 2500);
        }
    }
    if(horiz == "right") {
        if(x_pos4 < horiz_dist) {
            carriageObj.left = x_pos1+1;
            eyeballObj.left = x_pos2+1;
            eyelidObj.left = x_pos3+1;
            craneObj.left = x_pos4+1;
            timer4 = setTimeout("moveHoriz(horiz,horiz_dist)", 100);
        } else {
            eyeballImg.eyeball_img.src = eval(randomizer(eyeballArray) + ".src");
            eyelidImg.eyelid_img.src = eval(randomizer(eyelidArray) + ".src");
            setTimeout("animate()", 2500);
        }
    }
}

var timer5 = null;

function moveHand() {
    move_poser = false;
    var x_pos = parseInt(handObj.left);
    if(x_pos < available_width-100) {
        handObj.left = x_pos+1;
        timer5 = setTimeout("moveHand()", 2);
    } else {
        handObj.zIndex = 1;
    }
}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 9: INTERACTIVITY (Menu Selector)       //
//  ---------------------------------------------  //
//  Techniques for toggling and selecting buttons  //
//  then displaying the selected page while hiding //
//  previous page.                                 //
//                                                 //
/////////////////////////////////////////////////////

var menu_selection = "overview";

function buttonOver(selection,pos) {
    if(menu_selection != selection) {
        buttonImg[selection].src = button_dn.src;
    }
}

function buttonOut(selection) {
    if(menu_selection != selection) {
        buttonImg[selection].src = button_up.src;
    }
}

function menuToggle(selection) {
    buttonImg[menu_selection].src = button_up.src;
    buttonImg[selection].src = button_dn.src;

    var old_page = eval(menu_selection + "Obj");
    old_page.visibility = "hidden";

    var new_page = eval(selection + "Obj");
    new_page.visibility = "visible";

    sunObj.left = 0;

    if(selection == "positioning" || selection == "animation") {
        sphere1Obj.visibility = "visible";
        sphere2Obj.visibility = "visible";
    } else {
        sphere1Obj.visibility = "hidden";
        sphere2Obj.visibility = "hidden";
    }

    menu_selection = selection;

}

/////////////////////////////////////////////////////
//                                                 //
//  SECTION 9: INTERACTIVITY (Page Scroller)       //
//  ---------------------------------------------  //
//  Layer animation technique for srolling page.   //
//                                                 //
/////////////////////////////////////////////////////

var loop = true;
var direction = "up";
var speed = 10;
var timer1 = null;

function scroll(dir,spd) {
    direction = dir;
    speed = spd;
    var page = eval(menu_selection + "Obj");
    var y_pos = parseInt(page.top);
    var x_pos = parseInt(sunObj.left);
    if(loop == true) {
        if(direction == "dn") {
            page.top = (y_pos-(speed));
            if(x_pos < available_width) {
                sunObj.left = x_pos + 1;
            } else {
                sunObj.left = -100;
            }
            clearTimeout(timer1);
            timer1 = setTimeout("scroll(direction,speed)", 1);
        } else if(direction == "up" && y_pos < 10) {
            page.top = (y_pos+(speed));
            if(x_pos > -100) {
                sunObj.left = x_pos - 1;
            } else {
                sunObj.left = available_width;
            }
            clearTimeout(timer1);
            timer1 = setTimeout("scroll(direction,speed)", 1);
        } else if(direction == "top") {
            page.top = 10;
            sunObj.left = 0;
        }
    }
}