/***************************************************************\
| |\  /|                                                We Put  |
| | >< Hypercosm        hc_scriptable_applet.js         3d      |
| |/  \|                                                To Work |
|***************************************************************|
|                                                               |
|        This file defines a Javascript function to add a       |
|        scriptable Hypercosm applet to a web page.             |
|                                                               |
|***************************************************************|
|                Copyright (c) 2008 Hypercosm, LLC.             |
\***************************************************************/


//
// "class" constructor
//


function HCScriptableApplet(element, appletSrc, resources, commandLine, parent) {
  if (!element)
    return this;

  // call superclass constructor
  //
  HCApplet.call(this, element, appletSrc, resources, commandLine, parent);
  
  // message passing attributes
  //
  this.messages = "";
  this.buffering = false;
  this.nestingLevel = 0;
  this.enabled = true;
  
  // these attributes can be used to view messages
  // messages that are being passed on to the applet
  //
  this.verbose = false;
  this.debug = false;
  
  return this;
}	// HCScriptableApplet


// inherit prototype from "superclass"
//
HCScriptableApplet.prototype = new HCApplet();


//
// "object" or "instance" methods
//


//
// method to enable or disable message passing
//


HCScriptableApplet.prototype.setEnabled = function(enabled) {
  this.enabled = enabled;
}	// setEnabled


//
// message passing methods
//


HCScriptableApplet.prototype.sendMessage = function(message) {	
  if (this.verbose)
    setStatus(message);
	
  if (this.buffering) {
    if (this.messageBuffer != "")
      this.messageBuffer = this.messageBuffer + ";";
    this.messageBuffer = this.messageBuffer + message;
  } else {
    if (this.debug)
      alert("sending message: " + message);
    if (this.enabled && this.isActivated())
      this.plugIn.SendMessage(message);
  }
}	// sendMessage


// 
// message buffering methods
//


HCScriptableApplet.prototype.beginMessages = function() {	
  if (this.buffering) {
	  
    // already buffering messages
    //
    this.nestingLevel++;
  } else {
	  
    // start buffering messages
    //
    this.buffering = true;
    this.messageBuffer = "";
    this.nestingLevel = 0;
  }
}	// beginMessages


HCScriptableApplet.prototype.endMessages = function() {	
  if (this.nestingLevel == 0) {
	
    // end message buffering
    //
    if (this.messageBuffer != "") {
      if (this.debug)
        alert("sending message: " + this.messageBuffer);
      if (this.enabled)
        this.plugIn.SendMessage(this.messageBuffer);
    }
	
    this.buffering = false;
    this.messageBuffer = "";
  } else {

    // drop down a level in nesting
    //
    this.nestingLevel--;
  }
}	// endMessages
