//  File:  JSErrors.js                                            JavaScript Error Handlers

var error_count=0;                      // variable that ensures each error window is unique

window.onerror=errorHandler; 

function errorHandler(msg, url, line) {
  LogError(msg, url, line);                    // Record js errors in errorlog
  EmailError(msg, url, line);                  // Generates page for user to email 
  return; }


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  Error Handler:  LogError
//    Calls the PERL script designated by query string and records errors in a log file.
//    Source:  http://www.infohiway.com/javascript/indexf.htm?jserrors
 
function LogError(msg,url,line) {
  par_url = parent.location.href;
  par_url = (par_url == location.href) ? "no parent" : par_url;
  query_string = "/arec313/scripts/jserrors.pl"
    + "?url=" + escape(location.href)
    + "&parent=" + escape(par_url)
    + "&referrer=" + escape(document.referrer)
    + "&browser=" + escape(navigator.appName + " " + navigator.appVersion)
    + "&msg=" + escape(msg)
    + "&line=" + escape(line)
    + "&count=" + (++error_count);
  if (document.images) { reporter = new Image(); reporter.src = query_string; }
  return true; }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  Error Handler:  EmailError
//    Generates an HTML form for the user to email the error components to the author.
//    Source:  Flanagan, D.  JavaScript, The Definitive Guide. O'Reilly. pp 198-9.

function EmailError(msg, url, line){
  var w=window.open("",				// URL (none specified)
                  "error"+error_count++,		// name (force it to be unique)
                  "resizable,status,width=625,height=400"); 
  var d=w.document;
  // output an HTML document, including a form to a new window
  d.write('<DIV align=center>\n');
  d.write('<FONT SIZE=6 FACE="helvetica, arial"><B>Javascript Error</B><BR></FONT>\n');
  d.write('<FONT SIZE=3 FACE="helvetica, arial"><BR><HR WIDTH="80%">\n');
  d.write('<FORM ACTION="mailto:dahlgran@u.arizona.edu" METHOD=POST ENCTYPE="text/plain">\n');
  d.write('  <INPUT TYPE="hidden" SIZE=42 NAME="message" VALUE="'+msg+'">\n');
  d.write('  <INPUT TYPE="hidden" SIZE=42 NAME="url" VALUE="'+url+'">\n');
  d.write('  <INPUT TYPE="hidden" SIZE=42 NAME="line" VALUE="'+line+'">\n');
  d.write('  <INPUT TYPE="hidden" SIZE=42 NAME="version" VALUE="'+navigator.userAgent+'">\n');
  d.write('<TABLE WIDTH="100%" BORDER="0">\n');
  d.write('  <TR><TD ALIGN="RIGHT"><b>Document:</b></TD>     <TD>[ '+url+' ]</TD></TR>\n');
  d.write('  <TR><TD ALIGN="RIGHT"><b>Line Number:</b></TD>  <TD>[ '+line+' ]</TD></TR>\n');
  d.write('  <TR><TD ALIGN="RIGHT"><b>Browser Version:</b></TD><TD>[ '+navigator.userAgent+' ]</TD></TR>\n');
  d.write('  <TR><TD ALIGN="RIGHT"><b>Error Message:</b></TD><TD>[ '+msg+' ]</TD></TR>\n');
  d.write('  <TR><TD ALIGN="RIGHT"><b>Your name<I>(optional)</I>:</b></TD><TD><INPUT SIZE=42 NAME="name" VALUE=""></TD></TR>\n');
  d.write('  </TABLE>\n');
  d.write('<DIV align=center><BR>\n');
  d.write('<INPUT TYPE="submit" VALUE=" Report Error "> &nbsp;&nbsp;\n');
  d.write('<INPUT TYPE="button" VALUE=" Dismiss " onclick="self.close()"><BR>\n');
  d.write('<FONT SIZE=2 FACE="helvetica, arial">\n');
  d.write('<BR><I>Click the "Report Error" button to report this error to the webmaster.</I><BR><BR>\n');
  d.write('</DIV></FONT></FORM>');
  d.close();
  return true; }  

