/**
 * Taken from "Javascript The Definitive Guide, 5th Edition" by David Flanagan
 *  www.DavidFlanagan.com/javascript5
 *  (Section 14-2)
 *  [Heavily Modified]
 *
 * Geometry.js: portable functions for querying window and document geometry
 *
 * This module defines functions for querying window and document geometry.
 *
 * getWindowX/Y(): return the position of the window on the screen
 * getViewportWidth/Height(): return the size of the browser viewport area
 * getDocumentWidth/Height(): return the size of the document.
 * getHorizontalScroll(): return the position of the horizontal scrollbar
 * getVerticalScroll(): return the position of the vertical scrollbar
 *
 * Note that there is no portable way to query the overall size of the
 * browser window, so there are no getWindowWidth/Height() functions.
 *
 */
var Geometry = {};

Geometry.initialize = function()
{

    if (window.screenLeft)
    {
        // IE and others
        Geometry.getWindowX = function() { return window.screenLeft; };
        Geometry.getWindowY = function() { return window.screenTop; };
    }
    else if (window.screenX)
    {
        // Firefox and others
        Geometry.getWindowX = function() { return window.screenX; };
        Geometry.getWindowY = function() { return window.screenY; };
    }

    if (window.innerWidth)
    {
        // All browsers but IE
        Geometry.getViewportWidth = function() { return window.innerWidth; };
        Geometry.getViewportHeight = function() { return window.innerHeight; };
        Geometry.getHorizontalScroll = function() { return window.pageXOffset; };
        Geometry.getVerticalScroll = function() { return window.pageYOffset; };
    }
    else if (document.documentElement && document.documentElement.clientWidth)
    {
        // These functions are for IE6 when there is a DOCTYPE
        Geometry.getViewportWidth =
            function() { return document.documentElement.clientWidth; };
        Geometry.getViewportHeight =
            function() { return document.documentElement.clientHeight; };
        Geometry.getHorizontalScroll =
            function() { return document.documentElement.scrollLeft; };
        Geometry.getVerticalScroll =
            function() { return document.documentElement.scrollTop; };
    }
    else if (document.body.clientWidth)
    {
        // These are for IE4, IE5, and IE6 without a DOCTYPE
        Geometry.getViewportWidth =
            function() { return document.body.clientWidth; };
        Geometry.getViewportHeight =
            function() { return document.body.clientHeight; };
        Geometry.getHorizontalScroll =
            function() { return document.body.scrollLeft; };
        Geometry.getVerticalScroll =
            function() { return document.body.scrollTop; };
    }

    // These functions return the size of the document.  They are not window
    // related, but they are useful to have here anyway.
    if (window.innerHeight && window.scrollMaxY)
    {
        // *added* emw 2009-12-03
        Geometry.getDocumentWidth =
            function() { return document.body.scrollWidth; };
        Geometry.getDocumentHeight =
            function() { return window.innerHeight + window.scrollMaxY; };
    }
    else if (document.body.scrollWidth)
    {
        Geometry.getDocumentWidth =
            function() { return document.body.scrollWidth; };
        Geometry.getDocumentHeight =
            function() { return document.body.scrollHeight; };
    }
    else if (document.documentElement && document.documentElement.scrollWidth)
    {
        Geometry.getDocumentWidth =
            function() { return document.documentElement.scrollWidth; };
        Geometry.getDocumentHeight =
            function() { return document.documentElement.scrollHeight; };
    }
    else
    {
        // *added* emw 2009-12-03
        // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
        Geometry.getDocumentWidth =
            function() { return document.body.offsetWidth; };
        Geometry.getDocumentHeight =
            function() { return document.body.offsetHeight; };
    }
}


//////////////////////////////////////////////////////////////////////////////////////////////////
// *added* emw 2009-12-03
// Displays Geometry info for browser in which it's sometimes
//  difficult to get a hold on the DOM *coughIEcough*
Geometry.getGeometryInfo = function()
{
    var newline = '\n';
    var output = '';

    if (window.screenLeft)
    {
        // IE and others
        output += 'window.screenLeft: ' + window.screenLeft + newline;
        output += 'window.screenTop: ' + window.screenTop + newline;
    }
    if (window.screenX)
    {
        output += 'window.screenX: ' + window.screenX + newline;
        output += 'window.screenY: ' + window.screenY + newline;
    }

    if (window.innerWidth)
    {
        output += 'window.innerWidth: ' + window.innerWidth + newline;
        output += 'window.innerHeight: ' + window.innerHeight + newline;
        output += 'window.pageXOffset: ' + window.pageXOffset + newline;
        output += 'window.pageYOffset: ' + window.pageYOffset + newline;
    }
    if (document.documentElement && document.documentElement.clientWidth)
    {
        // These functions are for IE6 when there is a DOCTYPE
        output += 'document.documentElement.clientWidth: ' + document.documentElement.clientWidth + newline;
        output += 'document.documentElement.clientHeight: ' + document.documentElement.clientHeight + newline;
        output += 'document.documentElement.scrollLeft: ' + document.documentElement.scrollLeft + newline;
        output += 'document.documentElement.scrollTop: ' + document.documentElement.scrollTop + newline;
    }
    if (document.body.clientWidth)
    {
        // These are for IE4, IE5, and IE6 without a DOCTYPE
        output += 'document.body.clientWidth: ' + document.body.clientWidth + newline;
        output += 'document.body.clientHeight: ' + document.body.clientHeight + newline;
        output += 'document.body.scrollLeft: ' + document.body.scrollLeft + newline;
        output += 'document.body.scrollTop: ' + document.body.scrollTop + newline;
    }

    // These functions return the size of the document.  They are not window
    // related, but they are useful to have here anyway.
    if (window.innerHeight && window.scrollMaxY)
    {
        output += 'window.innerHeight + window.scrollMaxY: ' + window.innerHeight + window.scrollMaxY + newline;
    }
    if (document.documentElement && document.documentElement.scrollWidth)
    {
        output += 'document.documentElement.scrollWidth: ' + document.documentElement.scrollWidth + newline;
        output += 'document.documentElement.scrollHeight: ' + document.documentElement.scrollHeight + newline;
    }
    if (document.body.scrollWidth)
    {
        output += 'document.body.scrollWidth: ' + document.body.scrollWidth + newline;
        output += 'document.body.scrollHeight: ' + document.body.scrollHeight + newline;
    }
    if (document.body.offsetWidth)
    {
        output += 'document.body.offsetWidth: ' + document.body.offsetWidth + newline;
        output += 'document.body.offsetHeight: ' + document.body.offsetHeight + newline;
    }
    return output;
}//end getGeometryInfo


jQuery(Geometry.initialize);
