
  // functions based on code from howtocreate.co.uk
  function window_dimensions() {
    var myWidth = 0, myHeight = 0;
    if ( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      myWidth = window.innerWidth;
      myHeight = window.innerHeight;
    }
    else if (   document.documentElement && 
              ( document.documentElement.clientWidth || 
                document.documentElement.clientHeight )
            )
    {
      //IE 6+ in 'standards compliant mode'
      myWidth = document.documentElement.clientWidth;
      myHeight = document.documentElement.clientHeight;
    }
    else if (   document.body && 
              ( document.body.clientWidth || 
                document.body.clientHeight )
            )
    {
      //IE 4 compatible
      myWidth = document.body.clientWidth;
      myHeight = document.body.clientHeight;
    }
    
    return { width: myWidth, height: myHeight };
  }
  
  function document_scrolling() {
    var scrOfX = 0, scrOfY = 0;
    if ( typeof( window.pageYOffset ) == 'number' ) {
      //Netscape compliant
      scrOfY = window.pageYOffset;
      scrOfX = window.pageXOffset;
    }
    else if (   document.body && 
              ( document.body.scrollLeft || 
                document.body.scrollTop )
            )
    {
      //DOM compliant
      scrOfY = document.body.scrollTop;
      scrOfX = document.body.scrollLeft;
    }
    else if (   document.documentElement && 
              ( document.documentElement.scrollLeft || 
                document.documentElement.scrollTop )
            )
    {
      //IE6 standards compliant mode
      scrOfY = document.documentElement.scrollTop;
      scrOfX = document.documentElement.scrollLeft;
    }
    return { horizontal: scrOfX, vertical: scrOfY };
  }

  function coordinates_page(e) {
    if ( !e ) { e = window.event; }
    if ( !e ) { return; }

    var xcoord, ycoord;
    if ( typeof( e.pageX ) == 'number' ) {
      xcoord = e.pageX;
      ycoord = e.pageY;
    }
    else if ( typeof( e.clientX ) == 'number' ) {
      xcoord = e.clientX;
      ycoord = e.clientY;
      if (   document.body && 
           ( document.body.scrollLeft || document.body.scrollTop )
         )
      {
        xcoord += document.body.scrollLeft;
        ycoord += document.body.scrollTop;
      } 
      else if (   document.documentElement && 
                ( document.documentElement.scrollLeft || 
                  document.documentElement.scrollTop )
              )
      {
        xcoord += document.documentElement.scrollLeft;
        ycoord += document.documentElement.scrollTop;
      }
    } 
    else { return; }

    return { x: xcoord, y: ycoord };
  }

  function coordinates_window(e) {
    var coor        = coordinates_page(e);
    var scrolling   = document_scrolling();

    if (!coor || !scrolling) { return; }

    return { x: coor['x'] - scrolling['horizontal'],
             y: coor['y'] - scrolling['vertical'] };
  }

