// AJAX3D3b.js  20061015


var web3Dbrowser = null;
var web3Dbrowsercontext = null;
var listener = null;
var listenersSetup = false;
var xoffset = -3;

window.onload = initX3Dbrowser;

function initX3Dbrowser()
{    
  web3Dbrowser = null;

  // Connect host DOM to X3D Browser SAI
  web3Dbrowser = document.objx3d.getBrowser();

  if (web3Dbrowser == null)
  {
    alert("Couldn't get X3D Browser object!");
    return;
  }
  // Connect SAI browserChanged event to DOM
  listener = new Object();
  listener.browserChanged = web3DbrowserChanged;
  // assign DOM  browserChanged() handler
  web3Dbrowser.addBrowserListener(listener);

  // Load target X3D scene 
  web3Dbrowser.loadUrlS("X3Dempty.x3d");
}

function web3DbrowserChanged(evt)
{
  web3Dbrowsercontext = null;
  theText = null;

  if (evt != 0)    // BROWSER_INITIALIZED = 0
  {
    alert("browserChanged(evt) != 0");
    return;
  }
  // target scene is loaded and running
  web3Dbrowsercontext = web3Dbrowser.getExecutionContext();
  if (web3Dbrowsercontext == null)
  {
    alert("Couldn't get executionContext object!");
    return;
  }
}

// Click handler - make a new piece of X3D from an XMLHttpRequest!
function onClick(what)
{
  if (what == "cube")
    request = "boxtext.txt";
  else if (what == "sphere")
    request = "spheretext.txt";
  else if (what == "cone")
    request = "conetext.txt";
  else
    return;

  str = sendXMLHttpRequest(request);
  addX3DFromString(wrapOffset(str));
  xoffset += 3;   // increment x translation
}

function addX3DFromString(str)
{
  var scene = web3Dbrowser.createX3DFromString(str);
  var rootnodes = scene.getRootNodes();
  var i;
  // Do a bit of work to deal with the quirky X3D add/remove root node paradigm
  for (i = 0; i < rootnodes.length; i++)
  {
    node = rootnodes[i];
    scene.removeRootNode(node);
    web3Dbrowsercontext.addRootNode(node);
  }
}

// Helper to move the newly created object to a new 
// place in the world - offsets X coordinate
function wrapOffset(str)
{
  return "Transform { translation " + xoffset + " 0 0 children [ " + str + " ] }"; 
}



