/*
        This is a modified version of Lightbox for www.macrabbit.com by Jan Van Boghout. Original license:

        Lightbox JS: Fullsize Image Overlays
        by Lokesh Dhakar - http://huddletogether.com/projects/lightbox/

        Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
        (basically, do anything you want, just leave my name and link)
*/

var zoomAnimationWaitTimer = null, zoomAnimationTimer = null, zoomAnimationFrame = 0;
var isFirstZoom = true;



function getScrollY() {

        if (self.pageYOffset) { return self.pageYOffset; }
        else if (document.documentElement && document.documentElement.scrollTop) { return document.documentElement.scrollTop; }
        else if (document.body) { return document.body.scrollTop; }

        return 0;

}


function getPageSize() {
        var xScroll, yScroll;
        if (window.innerHeight && window.scrollMaxY) {
                xScroll = document.body.scrollWidth;
                yScroll = window.innerHeight + window.scrollMaxY;
        } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
                xScroll = document.body.scrollWidth;
                yScroll = document.body.scrollHeight;
        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
                xScroll = document.body.offsetWidth;
                yScroll = document.body.offsetHeight;
        }
        var windowWidth, windowHeight;
        if (self.innerHeight) {        // all except Explorer
                windowWidth = self.innerWidth;
                windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
                windowWidth = document.documentElement.clientWidth;
                windowHeight = document.documentElement.clientHeight;
        } else if (document.body) { // other Explorers
                windowWidth = document.body.clientWidth;
                windowHeight = document.body.clientHeight;
        }
        pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
        pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;
        arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
        return arrayPageSize;
}


function pause(numberMillis) {
        var now = new Date();
        var exitTime = now.getTime() + numberMillis;
        while (true) {
                now = new Date();
                if (now.getTime() > exitTime)
                        return;
        }
}



function zoomKeyDown(e) {
        var Esc = (window.event) ? 27 : e.DOM_VK_ESCAPE;
        var c = (window.event) ? event.keyCode : e.keyCode;
        if (c == Esc) { hideZoom(); }
}



//
// showZoom()
// Preloads images. Places new image in lightbox then centers and displays.
//

function showZoom(objLink)

{
        // prep objects
        var overlay = document.getElementById('overlay');
        var zoomer = document.getElementById('zoom');
        var zoomedImage = document.getElementById('zoom-image');
        var loadIndicator = document.getElementById('zoom-load');
        var arrayPageSize = getPageSize();
        var scrollY = getScrollY();

        // set height of Overlay to take up whole page and show
        overlay.style.height = (arrayPageSize[1] + 'px');
        overlay.style.display = 'block';

        // center loadingImage if it exists
        if (loadIndicator) {
                loadIndicator.style.top = (scrollY + ((arrayPageSize[3] - 35 - 48) / 2) + 'px');
                loadIndicator.style.left = (((arrayPageSize[0] - 20 - 48) / 2) + 'px');
        }

        // Preload image
        var zoomPreload = new Image();
        zoomPreload.onload = function() {
                // No need to animate anymore
                clearInterval(zoomAnimationWaitTimer);
                clearInterval(zoomAnimationTimer);

                if (loadIndicator)
                        loadIndicator.style.display = 'none';

                // Center zoomed image
                var y = scrollY + ((arrayPageSize[3] - 35 - zoomPreload.height) / 2);
                var x = ((arrayPageSize[0] - 20 - zoomPreload.width) / 2);
                zoomer.style.top = (y < 0) ? '0' : y + 'px';
                zoomer.style.left = (x < 0) ? '0' : x + 'px';

                // Show/hide caption
                var captionContainer = document.getElementById('zoom-captioncontainer');
                if (captionContainer != null) {
                        if (objLink.getAttribute('title')) {
                                captionContainer.style.display = 'block';
                                document.getElementById('zoom-caption').innerHTML = objLink.getAttribute('title');
                        } else
                                captionContainer.style.display = 'none';
                }

                // After image is loaded, update the overlay height as the new image might have increased the overall page height.
                arrayPageSize = getPageSize();
                overlay.style.height = (arrayPageSize[1] + 'px');

                // Listen to escape
                document.onkeypress = zoomKeyDown;
                // Actually set the image
                if (navigator.appVersion.indexOf("MSIE")!=-1) // Small pause between the image loading and displaying prevents flicker in IE.
                        pause(250);
                zoomedImage.src = objLink.href;
                zoomer.style.display = 'block';
                return false;
        }

        if (document.getElementById('zoom-load') != null)
                zoomAnimationWaitTimer = setInterval(delayAnimateLoad, 500);

        // Show the zoomer somewhere offscreen to preload its images
        if (isFirstZoom == true) {
                zoomer.style.top = '-10000px';
                zoomer.style.display = 'block';
                isFirstZoom = false;
        }
        zoomPreload.src = objLink.href;
}

function delayAnimateLoad()
{
        clearInterval(zoomAnimationWaitTimer);

        document.getElementById('zoom-load').style.display = 'block';
        zoomAnimationTimer = setInterval(animateLoad, 66);
}

function animateLoad()
{
        var loadIndicator = document.getElementById('zoom-load');
        loadIndicator.style.backgroundPosition = '0 -'+(zoomAnimationFrame * 48)+'px';
        zoomAnimationFrame = (zoomAnimationFrame + 1) % 12;
}


function hideZoom()
{

        clearInterval(zoomAnimationWaitTimer);
        clearInterval(zoomAnimationTimer);

        var loadIndicator = document.getElementById('zoom-load');
        if (loadIndicator != null)
                loadIndicator.style.display = 'none';
        document.getElementById('overlay').style.display = 'none';

        document.getElementById('zoom').style.display = 'none';
        document.onkeypress = '';
}



function setupZoom()
{
        if (!document.getElementsByTagName) { return; }

        // First, load the Zooming style sheet
        var zoomStyleSheet = document.createElement("link");
        zoomStyleSheet.setAttribute('rel','stylesheet');
        zoomStyleSheet.setAttribute('type','text/css');
        zoomStyleSheet.setAttribute('href','/wp-content/plugins/exzo/zoom/zoom.css');
        var head = document.getElementsByTagName("head").item(0);
        head.appendChild(zoomStyleSheet);

        // Now, find all anchors that are zoomable
        var anchors = document.getElementsByTagName("a");
        for (var i=0; i<anchors.length; i++) {
                var anchor = anchors[i];
                if (anchor.getAttribute("href") && (anchor.getAttribute("rel") == "zoom")){
                        anchor.onclick = function () { showZoom(this); return false; }
                }
        }

        var objBody = document.getElementsByTagName("body").item(0);

        // create overlay div and hardcode some functional styles (aesthetic styles are in CSS file)
        var overlay = document.createElement("div");
        overlay.setAttribute('id','overlay');
        overlay.onclick = function () {hideZoom(); return false;}
        overlay.style.display = 'none';
        overlay.style.position = 'absolute';
        overlay.style.top = '0';
        overlay.style.left = '0';
        overlay.style.zIndex = '90';
         overlay.style.width = '100%';
        objBody.appendChild(overlay);

        var arrayPageSize = getPageSize();

        // Preload and create loader image
        var loadPreloader = new Image();
        loadPreloader.onload=function(){

                var objLoadingImageLink = document.createElement("a");
                objLoadingImageLink.setAttribute('href','#');
                objLoadingImageLink.onclick = function () {hideZoom(); return false;}
                overlay.appendChild(objLoadingImageLink);

                var loadIndicator = document.createElement("span");
                loadIndicator.setAttribute('id','zoom-load');
                loadIndicator.style.position = 'absolute';
                loadIndicator.style.zIndex = '150';
                objLoadingImageLink.appendChild(loadIndicator);

                loadPreloader.onload=function(){};        //        clear onLoad, as IE will flip out w/animated gifs

                return false;
        }
        loadPreloader.src = '/wp-content/plugins/exzo/zoom/ZoomProgress.png';

        // Create the shadow elements (someone would get a heart attack if this was in the regular HTML)
        var zoomContainer = document.createElement("div");
        zoomContainer.setAttribute('id','zoom');
        objBody.insertBefore(zoomContainer, overlay.nextSibling);

        // Top shadow
        var topShadow = document.createElement("div");
        topShadow.setAttribute('class','top');
        topShadow.appendChild(document.createElement("div"));
        zoomContainer.appendChild(topShadow);

        // Inner shadow
        var innerOne = document.createElement("div");
        var innerTwo = document.createElement("div");
        var innerThree = document.createElement("div");
        var contentContainer = document.createElement("div");
        innerOne.setAttribute('class','i1');
        innerTwo.setAttribute('class','i2');
        innerThree.setAttribute('class','i3');
        contentContainer.setAttribute('id','zoom-content');

        innerThree.appendChild(contentContainer);
        innerTwo.appendChild(innerThree);
        innerOne.appendChild(innerTwo);
        zoomContainer.appendChild(innerOne);

        // Bottom shadow
        var bottomShadow = document.createElement("div");
        bottomShadow.setAttribute('class','bottom');
        bottomShadow.appendChild(document.createElement("div"));
        zoomContainer.appendChild(bottomShadow);




        // create image
        var objImage = document.createElement("img");
        objImage.setAttribute('id','zoom-image');
        objLink.appendChild(objImage);

        // create caption
        var captionContainer = document.createElement("div");
        captionContainer.setAttribute('id','zoom-captioncontainer');
        var innerCaptionOne = document.createElement("div");
        var innerCaptionTwo = document.createElement("div");

        var objCaption = document.createElement("span");
        objCaption.setAttribute('id','zoom-caption');
        contentContainer.appendChild(captionContainer);
        captionContainer.appendChild(innerCaptionOne);
        innerCaptionOne.appendChild(innerCaptionTwo);
        innerCaptionTwo.appendChild(objCaption);
}



function addLoadEvent(func)
{
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
                window.onload = func;
        } else {
                window.onload = function() { oldonload(); func(); }
        }
}


// Initalize zooming

addLoadEvent(setupZoom);
