

function Utils() {} // empty constructor


Utils.getQueryParts = function()
  {
  var s = location.search;
  if ( s == "" )
    return null;
  s = s.substr( 1, s.length );
  obj = new Object();
  params = s.split( '&' );
  for ( var i = 0; i < params.length; i++ )
    {
    var param = params[ i ];
    param = decodeURIComponent( param );
    var parts = param.split( '=' );
    eval( 'obj.' + parts[ 0 ] + '="' + parts[ 1 ] + '"' );
    }
  return obj;
  }


Utils.getURLParts = function()
  {
  var obj = new Object();
    obj.path = null;
    obj.file = null;
    obj.fragment = null;
    obj.params = null;

  var url = document.URL;

  var re = /(\?([^\?]*))$/;
  var match = url.match( re );
  if ( match != null )
    {
    var params = match[ 2 ];
    url = url.replace( match[ 1 ], '' );

    obj.params = new Object();
    params = params.split( '&' );
    for ( var i = 0; i < params.length; i++ )
      {
      var param = params[ i ];
      var parts = param.split( '=' );
      eval( 'obj.params.' + parts[ 0 ] + '="' + parts[ 1 ] + '"' );
      }
    }

  re = /(#([^#]*))$/;
  match = url.match( re );
  if ( match != null )
    {
    obj.fragment = match[ 2 ];
    url = url.replace( match[ 1 ], '' );
    }

  re = /([^\\\/]+)$/;
  match = url.match( re );
  if ( match != null )
    {
    obj.file = match[ 1 ];
    url = url.replace( match[ 1 ], '' );
    }

  obj.path = url;

  return obj;
  }


Utils.dgShowURLParts = function()
  {
  var obj = Utils.getURLParts();
  var s = 'path: ' + obj.path + '\nfile: ' + obj.file + '\nfragment: ' + obj.fragment + '\nparams: ';
  for ( var prop in obj.params )
    s += '\n  ' + prop + ' = ' + obj.params[ prop ];
  alert( s );
  }


Utils.removeFilePath = function( s )
  {
  var match = s.match( /([^\\\/]+)$/ );
  if ( match != null )
    return match[ 1 ]; 
  else
    return s;
  }


Utils.removeFileExtension = function( s )
  {
  var match = s.match( /(\.[^\.\?]+)(\?.)*$/ );
  if ( match != null )
    s = s.replace ( match[ 1 ], '' ); 
  var match = s.match( /(\.[^\.#]+)(#.)*$/ );
  if ( match != null )
    s = s.replace ( match[ 1 ], '' ); 
  return s;
  }


Utils.trim = function( pStr )
  {
  return Utils.lTrim( Utils.rTrim( pStr ) );
  }


Utils.lTrim = function( pStr )
  {
  return pStr.replace( /^\s+/, '' );
  }


Utils.rTrim = function( pStr )
  {
  return pStr.replace( /\s+$/, '' );
  }


  // simulate caps and small caps
Utils.doSmallCaps = function( pStr )
  {
  if ( Browser.isMoz || (Browser.isIE && Browser.major >= 5) )
    return pStr.replace( /([A-Z])([-'a-z]+)/g, '$1<span class="smallCaps">$2</span>' );
  else
    return pStr;
  }


Utils.showCredits = function()
  {
  s = '<body style="color: #ccc; background-color: #666; font-family: verdana, sans-serif;">\n';
  s += '<p style="font-size: 1.2em; line-height: 1.3em;">\n';
  s += 'This website was donated to the library by our patron and friend,';
  //s += ' <a style="color: #ddd;" href="mailto:jonf4@mindspring.com">Jon Frechette</a>';
  s += ' Jon Frechette';
  s += ' of Middlefield, CT.';
  s += '</p>\n</body>';
  Utils.strToWindow( s, 'width=300,height=150,menubar=no,scrollbars=no' );
  }


Utils.strToWindow = function( pString, pOpts )
  {
  pOpts = pOpts || 'resizable=yes,menubar=no,scrollbars=yes';
  var win = window.open( '', '', pOpts  );
  win.document.write( pString );
  return;
  }


Utils.filename = Utils.removeFilePath( document.URL );
if ( ! Utils.filename )
  Utils.filename = 'Home.html';
// alert( Utils.filename );


// -----------------------------------------------------------------------------


function Diag() {} // empty constructor


Diag.showCode = function( pString, pTitle )
  {
  var code = pString.replace( /&/g, '&amp;' );
  code = code.replace( /</g, '&lt;' );
  code = code.replace( />/g, '&gt;' );
  code = code.replace( /"/g, '&quot;' );
  var s = '';
  if ( pTitle )
    s += pTitle + '\n';
  s += '<pre>' + code + '</pre>\n';
  Utils.strToWindow( s );
  return;
  }


// -----------------------------------------------------------------------------


function Browser() {} // empty constructor

Browser.isIE = false;
Browser.isNav = false;
Browser.isMoz = false;
Browser.isOpera = false;

Browser.agent = navigator.userAgent.toLowerCase();

var match = Browser.agent.match( /opera/i );
Browser.isOpera = match != null;
if ( ! Browser.isOpera )
  {
  match = Browser.agent.match( /msie (\d+)\.(\d+);/ );
  if ( match != null )
    {
    Browser.isIE    = true;
    Browser.major   = parseInt( match[ 1 ], 10 );
    Browser.minor   = parseInt( match[ 2 ], 10 );
    Browser.version = parseFloat( match[ 1 ] + '.' + match[ 2 ] );
    }
  else
    {
    Browser.isNav = (Browser.agent.indexOf( 'mozilla' ) != -1 &&
                         Browser.agent.indexOf( 'spoofer' ) == -1 &&
                         Browser.agent.indexOf( 'compatible' ) == -1);
    if ( Browser.isNav )
      {
      Browser.version = parseFloat( navigator.appVersion );
      Browser.major = parseInt( Browser.version, 10 );
      Browser.minor = Browser.version - Browser.major;
      Browser.isMoz = Browser.major >= 5;
      }
    }
  }
else
  {
  }
Browser.unknown = ! (Browser.isIE || Browser.isNav || Browser.isMoz || Browser.isOpera);


Browser.show = function()
  {
  var s = '';
  s += 'userAgent = ' + navigator.userAgent + '\n';
  s += 'appVersion = ' + navigator.appVersion + '\n';
  s += '\n';
  s += 'agent = ' + Browser.agent + '\n';
  s += 'version = ' + Browser.version + '\n';
  s += 'major = ' + Browser.major + '\n';
  s += 'minor = ' + Browser.minor + '\n';
  s += 'isIE    = ' + (Browser.isIE == true) + '\n';
  s += 'isNav   = ' + (Browser.isNav == true) + '\n';
  s += 'isMoz   = ' + (Browser.isMoz == true) + '\n';
  s += 'isOpera = ' + (Browser.isOpera == true) + '\n';
  s += 'unknown = ' + (Browser.unknown == true) + '\n';
  alert( s );
  }


//Browser.show();


String.prototype.padRight = function( pFieldWidth )
  {
  var padding = '';
  var n = pFieldWidth - this.length;
  for ( var i = 0; i < n; i++ )
    padding += ' ';
  return this + padding;
  }



