<!--

function dblclick() {
/*
double-click anywhere in the document to scroll to the top of the page 
this script works in Internet Explorer 4+ and Netscape 4+.
*/
	window.scrollTo(0,0)
}
if (document.layers) {
	document.captureEvents(Event.ONDBLCLICK);
}

document.ondblclick=dblclick;

/*
JavaScript Error Trapping and Logging

This library module enables suppression of
JavaScript errors in a way that allows errors
to be hidden from view, logged to a server
log file for further review, and optionally
displayed in the window.status area if desired.

Source: Webmonkey Code Library
(http://www.hotwired.com/webmonkey/javascript/code_library/)

Author: Patrick Corcoran
Author email: patrick@taylor.org
*/

trapErrors = true;
  // Setting this to false will turn off JS error suppression,
  // setting the browser to its normal behavior.
  // Useful for debugging during development.
  
logErrors = true;
  // Setting this to false will stop errors from being logged.
  // Useful when working offline or without CGI.
  
showErrorAsStatusMessage = true;
  // Setting this to true will cause the browser to display
  // the error message as the window.defaultStatus text,
  // resulting in a quieter, but not invisible, error message.
  // Sometimes this can be a more pleasant way to debug JavaScript.

logNumErrors = 3;
  // Number of JS errors per page to enter into log before calling it quits.
  // Large values aren't recommended ... if you're getting a lot
  // of errors per pageview, then you're probably in a nasty loop.

logScriptLoc = "js_errorlog.cgi";
  // The script must reside within the htdocs tree
  // or in a server-aliased directory like /cgi-bin,
  // since the error message is sent via HTTP.

scriptName = "js_errorlog.cgi";
  // Optional: This can be any string of text used to identify the script.

logComment = "Error comment";
  // Optional: A short comment may be supplied here.

// You may want to separate the remainder of the script from
// the preceding portion so that you can call the same
// error trapping code with different variable settings from
// different HTML pages without repeating a lot of code.

MSIE = (navigator.userAgent.indexOf('MSIE') > -1) ? ( true ) : ( false );
  // Is this browser a Microsoft Internet Explorer browser?

if (!MSIE) { originalErrorHandler = window.onerror; }
  // Read and store value of current window.onerror property for later restoring.
  // But exclude MSIE because it won't allow us to read the window.onerror property.
  
originalDefaultStatus = window.defaultStatus;
  // Read and store value of current window.defaultStatus property for later restoring.
  
numErrorEvents = 0;
  // Number of Errors we've experienced so far for this pageview.


function handleErrors(msg, errUrl, line) {

  if (logErrors || showErrorAsStatusMessage) {
    
    if (numErrorEvents < logNumErrors) {
      
      errImage = new Array(logNumErrors);
        // This will hold all of our Image() objects we will create
        // to pass error data to the server.
      
      d = new Date();
        // We append a new Date() object to the end of every GET string
        // to ensure that the URL is always unique, and therefore not
        // subject to the disk cache frustrations of MSIE.
      
      sn = (scriptName) ? ('&scr=' + escape(scriptName)) : ('');
      lc = (logComment) ? ('&comm=' + escape(logComment)) : ('');
        // Escape the data from the optional scriptName and logComment variables if necessary.
              
      if (MSIE) {
        // window.onerror in MSIE doesn't pass msg, errUrl, line values
        // automatically like Netscape does, so we must approximate them.
        errUrl = this.location;    
        msg = 'Unspecified JS Error';  
        line = 'MSIE';          
      } else {
        line = 'line ' + line;
      }
      
      if (logErrors) {
        
        errLogEntry = logScriptLoc + '?url=' + escape(errUrl) + '&msg=' + escape(msg) + '&line=' + escape(line) + sn + lc + '&d=' + escape(d);
          // Build a GET string from the data we have pieced together about the error event.
  
        errImage[numErrorEvents] = new Image();  
        errImage[numErrorEvents].src = errLogEntry;
          // The Image() object is essentially the only Object
          // in NS3, NS4, and MSIE that can have its URL refreshed
          // without reloading the page, so we use it as a background data
          // carrier for client->server communication.  We set the new URL equal
          // to our GET string, which will get parsed by the CGI on the server.
          // The CGI will return empty/garbage data, but we don't care,
          // since the image we're loading here isn't for display.
      }
      
      if (showErrorAsStatusMessage) { window.defaultStatus = 'JavaScript Error: ' + msg + ' in ' + line; }
      
      numErrorEvents++;
    }
  }
  
  return trapErrors;
}

function restoreWindowToPreviousState() {
  // Set window.onerror and window.defaultStatus
  // to their initial state when leaving the page.
  if (!MSIE) { window.onerror = originalErrorHandler; }
  window.defaultStatus = originalDefaultStatus;
}

window.onUnload = restoreWindowToPreviousState;

window.onerror = handleErrors;

	// this script can be used for all images on a site.  But especially for 
	// image-dependent navigation.  It is passed two parameters from the onError
	// event handler in the <img> tags.  
	// for example:
	// <img src="this_image.gif" 
	//		name="bogus_image"
	//		width="100" 
	//		height="100" 
	//		onerror="image_reload ('bogus_image', 'this_image.gif')">

	// set a variable by which we can terminate reload if it continues to fail
	var k = 0		
	
	function image_reload (name, imgSrc)
	{
		tag = document.images[name];	// shortcut the original image object
		var x = tag.width;				// find out the width
		var y = tag.height;				// and height of the image which failed to load
		
		// increment the counter
		k++										

		if (k > 6)					// if it hasn't loaded after two tries per image, it aint gonna.  
		{					
			tag.onerror = stopLoading;	// redefine the onerror event and let people know
			
			var oops = 'The Image \'' + imgSrc + '\' has failed to load properly, if this '
			oops += 'occurs frequently please advise this site\'s webmaster.'
			
			alert (oops);
			return;
		}
		
		// until the counter gets too high, reload the image
		
		img = new Image (x, y);			// create
		img.src = imgSrc;				// and load the image again
		tag.src = img.src;				// dump the reloaded image back into it proper place

		return;
	}
	
	// if we don't set up another onerror handler, we could get stuck in a nasty recursive
	// loop as the script tries forever to reload the image.  So we create this empty handler.
	function stopLoading ()
	{		
		return;
	}

	// This script by 
	// Joel Stevenson
	// DreamWithin Studios <--sounds official doesn't it?
	// atani@redfish.net

// -->
