/* $Id: javascript_info.js,v 1.7 2007/04/02 12:48:59 pblankenbaker Exp $
 *
 * Collection of javascript functions to support the
 * html/tools/javascript_info.html page.
 */

/* Dumps a HTML table of mime types recognized by the browser. */

function dumpBrowserMimeTypes() {
  document.writeln('<p>Your browser reported that there were <b>'
	+ navigator.mimeTypes.length
	+ '</b> recognized MIME types.</p>');

  if (navigator.mimeTypes.length > 0) {
    document.writeln('<table align="center" border="1" width="100%" class="evenOdd">');

    document.writeln('<tr><th width="40%">Type</th>');
    document.writeln('<th width="10%">Suffix(es)</th>');
    document.writeln('<th width="30%">Description</th>');
    document.writeln('<th width="15%">Plugin</th></tr>');

    var evenOdd = 'odd';

    for (var i=0; i < navigator.mimeTypes.length; i++) {
      if (evenOdd != 'even') {
        evenOdd = 'even';
      } else {
	evenOdd = 'odd';
      }

      var mt = navigator.mimeTypes[i];

      document.writeln('<tr onmouseover="enterRow(this);" onmouseout="exitRow(this);">');
      document.writeln('<td class="' + evenOdd + '">' + mt.type + '</td>');
      document.writeln('<td class="' + evenOdd + '">' + mt.suffixes + '&nbsp;</td>');
      document.writeln('<td class="' + evenOdd + '">' + mt.description + '</td>');
      document.writeln('<td class="' + evenOdd + '">' + mt.enabledPlugin + '</td>');
      document.writeln('</tr>');
    }
    document.writeln('</table><br />')

  }
}

/* Dumps a HTML table of registered browser plugins. */

function dumpBrowserPlugins() {
  document.writeln('<p>Your browser reported that there were <b>'
	+ navigator.plugins.length
	+ '</b> installed plugins.</p>');

  if (navigator.plugins.length > 0) {
    document.writeln('<table class="evenOdd" align="center" border="1" width="100%">');

    document.writeln('<colgroup>');
    document.writeln('<col width="25%" />');
    document.writeln('<col width="45%" />');
    document.writeln('<col width="15%" />');
    document.writeln('<col width="15%" />');
    document.writeln('</colgroup>');

    document.writeln('<tr><th>Name</th>');
    document.writeln('<th>Description</th>');
    document.writeln('<th>Filename</th>');
    document.writeln('<th>MIME Types Supported</th></tr>');

    var evenOdd = 'odd';

    for (var i=0; i < navigator.plugins.length; i++) {
      if (evenOdd != 'even') {
        evenOdd = 'even';
      } else {
	evenOdd = 'odd';
      }

      var obj = navigator.plugins[i];

      document.writeln('<tr onmouseover="enterRow(this);" onmouseout="exitRow(this);">');

      document.writeln('<td class="' + evenOdd + '">' + obj.name + '</td>');
      document.writeln('<td class="' + evenOdd + '">' + obj.description + '</td>');
      document.writeln('<td class="' + evenOdd + '">' + obj.filename + '</td>');
      document.writeln('<td align="right" class="' + evenOdd + '">' + obj.length + '</td>');

      document.writeln('</tr>');
    }

    document.writeln('</table><br />')

  }
}

/* Function to dump contents of object for output to <pre> area. */

function dumpObject(obj, indent) {
  if (typeof obj == "object") {
    var newIndent = indent + '&nbsp;&nbsp;';
    var out = indent + obj + ' properties {<br />';

    var props = new Array();
    var n = 0;
    var prop;

    for (prop in obj) {
      props[n++] = prop;
    }

    props.sort();

    for (var i=0; i < n; i++) {
      prop = props[i];

      // Show property
      out += newIndent + '<b>' + prop + '</b>';

      // Try to add property type
      try {
        out += ':&nbsp;' + (typeof obj[prop]);

	// Try adding property value
	try {
	  out += ' (' + obj[prop] + ')';
        } catch (verr) { }
      } catch (terr) { }

      out += '<br />';
    }
    return out + indent + '}<br />';
  } else {
    return indent + obj + '<br />';
  }
}

/* Function reads string from element with id "jsin", evaluates
 * the results and assigns results to element with id "jsout" (also
 * sets "jsout" elements display style to "block" - to unhide it). */

function evaluateUserInput() {
  var i = document.getElementById('jsin');
  var o = document.getElementById('jsout');
  setContent('jsout', "<br />Evaluation Results:<br /><br />"
    + dumpObject(eval(i.value),'') + '<br /><br />');
  o.style.display = 'block';
}

/* Function to clear the content of the JavaScript input window. */

function clearUserInput() {
  // Clear input area
  var entity = document.getElementById('jsin');
  if (entity != null) {
    entity.value = "";
  }

  // Hide output area
  entity = document.getElementById('jsout');
  if (entity != null) {
    entity.style.display = 'none';
  }
}

