// Copyright 2006 - Graphcomp
// Assumes support of Javascript 1.1 or higher

// gcInit Object
var gcInit = new Object;

// Debug and Error Handling
gcInit.debugState = false;
gcInit.debug = function(msg)
{
  if (gcInit.debugState) alert(msg);
};
function errorHandler(err,url,line)
{
  var msg = 'A javascript error has occured on this page:\n';
  msg += '\nError: '+err+'\nURL: '+url+'\nLine: '+line;
  gcInit.debug(msg);
  return true;
}
window.onerror = errorHandler;

// Determine Browser Support
gcInit.supportMap = 0;
gcInit.displayWidth = 0;
gcInit.displayHeight = 0;

// Don't bother testing support if cookies are disabled
if (navigator && navigator.cookieEnabled)
{
  // If this is running, then Javascript is supported
  gcInit.supportMap = 1;

  // test for java support
  try
  {
    if (navigator.javaEnabled() && java) gcInit.supportMap += 2;
  }
  catch(err){}

  // Test if Win+IE
  var isWinIE = (navigator.userAgent && navigator.userAgent.indexOf('MSIE') != -1
    && (navigator.appVersion.indexOf('Win') != -1));

  // Get display dimensions
  if (document.body && document.body.clientWidth && document.body.clientHeight)
  {
    gcInit.displayWidth = document.body.clientWidth;
    gcInit.displayHeight = document.body.clientHeight;
  }
  else if (document.documentElement && document.documentElement.clientWidth && document.documentElement.clientHeight)
  {
    gcInit.displayWidth = document.documentElement.clientWidth;
    gcInit.displayHeight = document.documentElement.clientHeight;
  }
  // Get screen dimensions
  else if (screen && screen.width && screen.height)
  {
    gcInit.displayWidth = screen.width;
    gcInit.displayHeight = screen.height;
  }
  else if (gcInit.supportMap & 2)
  {
    var toolkit = java.awt.Toolkit.getDefaultToolkit();
    var screen_size = toolkit.getScreenSize();
    gcInit.displayWidth = screen_size.width;
    gcInit.displayHeight = screen_size.height;
  }

  // DHTML support
  if (document.getElementById || document.all || document.layers) gcInit.supportMap += 4;

  // Functions for testing plugin support
  function MimePlugin(mime,name,ver)
  {
    if (!navigator.mimeTypes) return false;
    if (navigator.mimeTypes[mime] && navigator.mimeTypes[mime].enabledPlugin)
    {
      if (!name && !ver) return true;
      if (!navigator.plugins) return false;
      var plugin_ver = 0;
      var words = navigator.plugins[name].description.split(" ");
      for (var i = 0; i < words.length; ++i)
      {
        if (isNaN(parseInt(words[i]))) continue;
        plugin_ver = words[i]; 
      }
      if (plugin_ver >= ver) return true;
    }
    return false;
  };
  function NavPlugin(name)
  {
    if (!navigator.plugins) return false;
    var plugins = navigator.plugins.length;
    for (var i=0; i < plugins; i++) 
    {
      if (navigator.plugins[i].name.indexOf(name) != -1) return true;
    }
    return false;
  };
  var result = 0;
  function IEPlugin(classID)
  {
    if (!isWinIE) return false;
    document.write('<script language=VBScript\>\n');
    document.write('result = 0\n');
    document.write('on error resume next\n');
    document.write('result = IsObject(CreateObject("'+classID+'"))\n');
    document.write('</script\>\n');
    return (result != 0) ? true : false;
  };

  // Flash
  if (MimePlugin('application/x-shockwave-flash','Shockwave Flash',8)
    || IEPlugin('ShockwaveFlash.ShockwaveFlash.8'))
  {
    gcInit.supportMap += 8;
  }

  // VRML
  if (NavPlugin('Cosmo Player')
    || NavPlugin('Cosmoplayer')
    || IEPlugin('SGI.CosmoPlayer.2')
    || IEPlugin('SGI.CosmoPlayer.1')
    || NavPlugin('WorldView')
    || IEPlugin('WorldView.WorldView VrmlViewer.2')
    || IEPlugin('WorldView.WorldView VrmlViewer.1')
    || IEPlugin('WORLDVIEW.WorldViewCtrl.1')
    || IEPlugin('MSVRML2C.VRMLBrowserCtl.1')
    || NavPlugin('Live3D')
    || NavPlugin('Cortona VRML')
    || IEPlugin('Cortona.Control.1'))
  {
    gcInit.supportMap += 16;
  }

  // Cookie support functions
  gcInit.cookieBase = 'gcLib::Site::';
  gcInit.getCookie = function(name)
  {
    var cookieName = gcInit.cookieBase+name+'=';
    var cookies = document.cookie.split(';');
    for(var i=0;i < cookies.length;i++)
    {
      var c = cookies[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(cookieName) == 0) return c.substring(cookieName.length,c.length);
    }
    return '';
  };
  gcInit.writeCookie = function(name,value)
  {
    var date = new Date();
    date.setTime(date.getTime()+(365*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = gcInit.cookieBase+name+'='+value+expires+"; path=/";
  };
  gcInit.pageRefresh = function()
  {
    //window.location.href = unescape(window.location.pathname);
    window.location.reload();
  };

  // Update cookie and refresh page if Support has changed
  var displayDim = gcInit.displayWidth+'x'+gcInit.displayHeight;
  var display = gcInit.getCookie('Display');
  var support = gcInit.getCookie('Support');

  if (gcInit.debugState)
  {
    var msg = 'Display: '+display+' -> '+displayDim+'\n';
    msg += 'Support: '+support+' -> '+gcInit.supportMap+'\n';
    if (gcInit.supportMap & 1) msg += '\tJavaScript\n';
    if (gcInit.supportMap & 2) msg += '\tJava\n';
    if (gcInit.supportMap & 4) msg += '\tDHTML\n';
    if (gcInit.supportMap & 8) msg += '\tFlash\n';
    if (gcInit.supportMap & 16) msg += '\tVRML\n';
    alert(msg);
  }

  if ((display != displayDim) || (support != gcInit.supportMap))
  {
    gcInit.writeCookie('Display',displayDim);
    gcInit.writeCookie('Support',gcInit.supportMap);
    gcInit.pageRefresh();
  }
}

