﻿/*
www.webdevelopercv.com
Copyright (c) 2009 Evgeny Neumerzhitskiy.
Please feel free to use any part of my code. If you put a reference to me I would be grateful, but it's not required.*/
var nosyMe = {
    eyeX: 72,
    eyeY: 79,
    eyeX_shift: 13,
    eyeMaxXShift: 3,
    eyeMaxYShift: 1,
    initEyes: false,
    mouseX: function(evt) {
        if (!evt) {
            return 0;
        }
        if (evt.pageX) {
            return evt.pageX;
        }
        else if (evt.clientX) {
            return evt.clientX + (document.documentElement.scrollLeft ?
                    document.documentElement.scrollLeft :
                    document.body.scrollLeft);
        }
        else {
            return 0;
        }
    },
    mouseY: function(evt) {
        if (!evt) {
            return 0;
        }
        if (evt.pageY) {
            return evt.pageY;
        }
        else if (evt.clientY) {
            return evt.clientY + (document.documentElement.scrollTop ?
                        document.documentElement.scrollTop :
                    document.body.scrollTop);
        }
        else {
            return 0;
        }
    },
    findPos: function(obj) {
        var curLeft = 0;
        var curTop = 0;
        if (obj.offsetParent) {
            do {
                curLeft += obj.offsetLeft;
                curTop += obj.offsetTop;
            } while (obj = obj.offsetParent);
        }
        return [curLeft, curTop];
    },
    picture: null,
    eye1: null,
    eye2: null,
    myMove: function(e) {
        var vScroll = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
        if (vScroll > 250) {
            return;
        }
        if (!nosyMe.faceLoaded || !nosyMe.eyesLoaded) {
            return;
        }
        if (!e) {
            e = window.event;
        }

        var picturePos = nosyMe.findPos(nosyMe.picture);

        var xFromCenter = nosyMe.mouseX(e) - (picturePos[0] + nosyMe.eyeX);
        var yFromCenter = nosyMe.mouseY(e) - (picturePos[1] + nosyMe.eyeY);

        if (!e) {
            xFromCenter = 50;
            yFromCenter = 0;
        }

        var xFromRightEye = Math.round(xFromCenter - nosyMe.eyeX_shift - nosyMe.eye1.width / 2);

        var xFromLeftEye = Math.round(xFromCenter + nosyMe.eyeX_shift + nosyMe.eye1.width / 2);

        var yMult = 1.5;

        var yFromCenterFixed = Math.abs(yFromCenter);
        if (yFromCenterFixed < 20) {
            yFromCenterFixed = 20;
        }

        var xShiftRightEye = (xFromRightEye / 300) * (300 / (yMult * yFromCenterFixed + nosyMe.eyeMaxXShift)) * nosyMe.eyeMaxXShift;
        if (Math.abs(xShiftRightEye) > nosyMe.eyeMaxXShift) {
            xShiftRightEye = nosyMe.eyeMaxXShift * Math.abs(xShiftRightEye) / xShiftRightEye;
        }
        xShiftRightEye = Math.round(xShiftRightEye);

        var xShiftLeftEye = (xFromLeftEye / 300) * (300 / (yMult * yFromCenterFixed + nosyMe.eyeMaxXShift)) * nosyMe.eyeMaxXShift;
        if (Math.abs(xShiftLeftEye) > nosyMe.eyeMaxXShift) {
            xShiftLeftEye = nosyMe.eyeMaxXShift * Math.abs(xShiftLeftEye) / xShiftLeftEye;
        }
        xShiftLeftEye = Math.round(xShiftLeftEye);
        if (Math.abs(xFromCenter) < 20 && Math.abs(yFromCenter) <= 15) {
            //look straight when the cursor is between the eyes
            yFromCenter = 0;
        }

        var yShift = (yFromCenter / 300) * (300 / (yMult * Math.abs(xFromCenter) + nosyMe.eyeMaxYShift)) * nosyMe.eyeMaxYShift;
        if (Math.abs(yShift) > nosyMe.eyeMaxYShift) {
            yShift = nosyMe.eyeMaxYShift * Math.abs(yShift) / yShift;
        }
        yShift = Math.round(yShift);
        if (yFromCenter > 120) {
            if (yShift == 1) {
                //look vertically straigh when the cursor is far away
                yShift = 0;
            }
        } else {
            if (yFromCenter < 70 && yShift > 0) {
                //gets super-curious when the cursor is on the face
                yShift = 2;
            }
        }

        var topPosition = nosyMe.eyeY - nosyMe.eye1.height / 2 + yShift;

        nosyMe.eye1.style.top = topPosition + 'px';
        nosyMe.eye1.style.left = nosyMe.eyeX - nosyMe.eyeX_shift - nosyMe.eye1.width + xShiftLeftEye + 'px';

        nosyMe.eye2.style.top = topPosition + 'px';
        nosyMe.eye2.style.left = nosyMe.eyeX + nosyMe.eyeX_shift + xShiftRightEye + 'px';
    },
    faceLoaded: false,
    eyesLoaded: false,
    nosyLoaded: function(face, eye) {
        if (face) {
            nosyMe.faceLoaded = true;
        }
        if (eye) {
            nosyMe.eyesLoaded = true;
        }
        if (nosyMe.faceLoaded && nosyMe.eyesLoaded) {
            //eveything has loaded - show it
            if (nosyMe.picture !== null) {
                dnDev.$navbar.children("#home").css("backgroundColor", "#bbbbbb");
                $(nosyMe.picture).children().show();
            }
        }
    },
    myInit: function() {
        nosyMe.picture = document.getElementById("nosyPicture");
        nosyMe.eye1 = document.getElementById("eye1");
        nosyMe.eye2 = document.getElementById("eye2");
        nosyMe.nosyLoaded();
        document.onmousemove = nosyMe.myMove;
    }
};