
//
// RMXF viewer constructor method
// Usage:
//   var viewer = new RMXFViewer("UrlToConnect", tagToInsertViewerInto [ ,
//                               ParameterPair1 [ , ParameterPair2, ...]]);
//
function RMXFViewer(url, tag)
{
  if (url == null) return null;
  if (tag == null) return null;
  rmxfViewers[rmxfViewers.length] = this;

  this.SetSize = RMXFViewer_SetSize;
  this.Destroy = RMXFViewer_Destroy;

  this.rmxfurl = url;
  this.rmxftag = tag;
  this.rmxfidx = rmxfViewers.length - 1;
  this.rmxfobj = null;
  this.rmxftag.rmxfviewer = this;
  this.reqW = 360;
  this.reqH = 288;

  var si = url.indexOf("/");
  this.rmxfhost = (si < 0) ? url : url.substring(0, si);
  this.rmxfuri  = (si < 0) ? ""  : url.substring(si);

  this.rmxfprm = new Array;
  for (var i = 2; i < arguments.length; i++)
  {
    this.rmxfprm[this.rmxfprm.length] = arguments[i];
    var s = arguments[i].split("=", 2);
    if (s.length == 2)
    {
      var n = s[0];
      var v = s[1];
      if (n == "width" ) this.reqW = v;
      else
      if (n == "Width" ) this.reqW = v;
      else
      if (n == "WIDTH" ) this.reqW = v;
      else
      if (n == "height") this.reqH = v;
      else
      if (n == "Height") this.reqH = v;
      else
      if (n == "HEIGHT") this.reqH = v;
    }
  }
  this.rmxftag.innerHTML =
    "<IFRAME" +
    "  frameborder=no border=0 scrolling=no" +
    "  width=" + this.reqW + " height=" + (parseInt(this.reqH)+25) + "" +
    "  src='rmxfrecv.html#" + this.rmxfidx + "/" + this.rmxfhost + "'>" +
    "</IFRAME>";
}

//
// RMXF viewer video size method
// Usage:
//   viewer.SetSize(360, 288);
// or
//   viewer.SetSize("360x288");
//
function RMXFViewer_SetSize()
{
  var w = -1;
  var h = -1;
  if (arguments.length == 2)
  {
    w = parseInt(arguments[0]);
    h = parseInt(arguments[1]);
  }
  else
  if (arguments.length == 1)
  {
    var str = new String(arguments[0]);
    var xi = str.indexOf('x', 0);
    if (xi < 0) xi = str.indexOf('X', 0);
    if (xi < 0) xi = str.indexOf('*', 0);
    if (xi >= 0)
    {
      w = parseInt(str.substring(0, xi));
      h = parseInt(str.substring(xi + 1));
    }
  }
  else
  if (arguments.length == 0)
  {
    w = this.reqW;
    h = this.reqH;
  }
  if ((w >= 0) && (h >= 0))
  {
    this.reqW = w;
    this.reqH = h;
    if ((this.rmxfobj != null) &&
        (this.rmxfobj.readyState >= 4))
      window.setTimeout('RMXFCallSetVideoSize(' + this.rmxfidx + ', ' + w + ', ' + h + ')', 10);
  }
}

//
// RMXF viewer destroying method
// Usage:
//   viewer.Destroy();
//
function RMXFViewer_Destroy()
{
  rmxfViewers[this.rmxfidx] = null;
  this.rmxfobj = null;
  if (this.rmxftag != null)
  {
    this.rmxftag.innerHTML = "";
    this.rmxftag.rmxfviewer = null;
  }
  this.rmxftag = null;
}

//
// Destroy all constructed viewers
// Usage:
//   DestroyAllViewers();
//
function DestroyAllViewers()
{
  if (rmxfViewers != null)
    for (var i = 0; i < rmxfViewers.length; i++)
      if (rmxfViewers[i] != null)
        rmxfViewers[i].Destroy();
  rmxfViewers = null;
}

//
// Internal function. DO NOT CALL IT !!!
//
function RMXFCallSetVideoSize(idx, w, h)
{
  var va = rmxfViewers;
  if (va == null) return;
  if (idx < 0) return;
  if (idx >= va.length) return;
  var vw = va[idx];
  if (vw == null) return;
  var vo = vw.rmxfobj;
  if (vo == null) return;
  vo.SetVideoSize(w, h);
}

//
// Internal function. DO NOT CALL IT !!!
//
function RMXFTagCallback(rmxfHash, tagProc)
{
  var s = unescape(rmxfHash).split("/", 2)
  var rmxfIdx = parseInt(s[0]);
  eval(unescape(tagProc));
  RMXF_TagProc(rmxfViewers[rmxfIdx]);
}

//
// RMXF viewers internal array. DO NOT USE IT!!!
//
var rmxfViewers = new Array();



