
var jsrsContextPoolSize = 0;
var jsrsContextMaxPool = 10;
var jsrsContextPool = new Array ();
var jsrsBrowser = jsrsBrowserSniff ();

function jsrsContextObj (contextID)
  {
  this.id = contextID;
  this.busy = true;
  this.callback = null;
  this.container = contextCreateContainer (contextID);

  this.callURL = contextCallURL;
  this.getPayload = contextGetPayload;
  this.setVisibility = contextSetVisibility;
  }

function contextCreateContainer (containerName)
  {
  var container;
  switch (jsrsBrowserSniff()) 
    {
    case 'NS':
      container = new Layer (100);
      container.name = containerName;
      container.visibility = 'hidden';
      container.clip.width = 100;
      container.clip.height = 100;
      break;
    
    case 'IE':
      document.body.insertAdjacentHTML ("afterBegin", '<span id="SPAN' + containerName + '"></span>');
      var span = document.all ("SPAN" + containerName);
      var html = '<iframe name="' + containerName + '" src=""></iframe>';
      span.innerHTML = html;
      span.style.display = 'none';
      container = window.frames[containerName];
      break;
      
    case 'MOZ':  
      var span = document.createElement ('SPAN');
      span.id = "SPAN" + containerName;
      document.body.appendChild (span);
      var iframe = document.createElement ('IFRAME');
      iframe.name = containerName;
      span.appendChild (iframe);
      container = iframe;
      break;
    }
  return container;
  }

function contextCallURL (URL)
  {
//alert(URL);
//alert(jsrsBrowserSniff());
  switch (jsrsBrowserSniff()) 
    {
    case 'NS':
      this.container.src = URL;
      break;
    case 'IE':
      this.container.document.location.replace (URL);
      break;
    case 'MOZ':
      this.container.src = '';
      this.container.src = URL; 
      break;
    }  
  }

function contextGetPayload ()
  {
  switch (jsrsBrowserSniff()) 
    {
    case 'NS':
      return this.container.document.forms ['jsrs_Form'].elements ['jsrs_Payload'].value;
    case 'IE':
      return this.container.document.forms ['jsrs_Form']['jsrs_Payload'].value;
    case 'MOZ':
      return window.frames[this.container.name].document.forms['jsrs_Form']['jsrs_Payload'].value; 
    }  
  }

function contextSetVisibility (vis)
  {
  switch (jsrsBrowserSniff()) 
    {
    case 'NS':
      this.container.visibility = (vis)? 'show' : 'hidden';
      break;
    case 'IE':
      document.all ("SPAN" + this.id ).style.display = (vis)? '' : 'none';
      break;
    case 'MOZ':
      document.getElementById ("SPAN" + this.id).style.visibility = (vis)? '' : 'hidden';
      this.container.width = (vis)? 250 : 0;
      this.container.height = (vis)? 100 : 0;
      break;
    }  
  }

function jsrsGetContextID ()
  {
  var contextObj;
  for (var i = 1; i <= jsrsContextPoolSize; i++)
    {
    contextObj = jsrsContextPool ['jsrs' + i];
    if (!contextObj.busy)
      {
      contextObj.busy = true;      
      return contextObj.id;
      }
    }
  if (jsrsContextPoolSize <= jsrsContextMaxPool)
    {
    var contextID = "jsrs" + (++jsrsContextPoolSize);
    jsrsContextPool [contextID] = new jsrsContextObj (contextID);
    return contextID;
    } 
  else 
    {
    //alert ("jsrs Error:  context pool full");
    return null;
    }
  }

function jsrsExecute( rspage, callback, func, parms, visibility ){

  var contextObj = jsrsContextPool[ jsrsGetContextID() ];
  contextObj.callback = callback;

  var vis = (visibility == null)? false : visibility;
  contextObj.setVisibility( vis );

	
  var URL = rspage;

  URL += "?C=" + contextObj.id;

  if (func != null){
    URL += "&F=" + escape(func);

    if (parms != null){
      if (typeof(parms) == "string"){

        URL += "&P0=[" + escape(parms+'') + "]";
      } else {

        for( var i=0; i < parms.length; i++ ){
          URL += "&P" + i + "=[" + escape(parms[i]+'') + "]";
        }
      } 
    } 
	//alert(URL);
  } 


  var d = new Date();
  URL += "&U=" + d.getTime();

//alert(URL);
  contextObj.callURL( URL );
  
  return contextObj.id;
}

function jsrsLoaded( contextID ){

  var contextObj = jsrsContextPool[ contextID ];
  if( contextObj.callback != null){
    contextObj.callback( jsrsUnescape( contextObj.getPayload() ), contextID );
  }

  contextObj.callback = null;
  contextObj.busy = false;
}

function jsrsError( contextID, str ){
//  alert( unescape(str) );
  jsrsContextPool[ contextID ].busy = false
}

function jsrsUnescape( str ){

  return str.replace( /\\\//g, "/" );
}

function jsrsBrowserSniff(){
  if (document.layers) return "NS";
  if (document.all) return "IE";
  if (document.getElementById) return "MOZ";
  return "OTHER";
}


function jsrsArrayFromString( s, delim ){


  var d = (delim == null)? '~' : delim;
  return s.split(d);
}

function jsrsDebugInfo(){


  var doc = window.open().document;
  doc.open;
  doc.write( 'Pool Size: ' + jsrsContextPoolSize + '<br><font face="arial" size="2"><b>' );
  for( var i in jsrsContextPool ){
    var contextObj = jsrsContextPool[i];
    doc.write( '<hr>' + contextObj.id + ' : ' + (contextObj.busy ? 'busy' : 'available') + '<br>');
    doc.write( contextObj.container.document.location.pathname + '<br>');
    doc.write( contextObj.container.document.location.search + '<br>');
    doc.write( '<table border="1"><tr><td>' + contextObj.container.document.body.innerHTML + '</td></tr></table>' );
  }
  doc.write('</table>');
  doc.close();
  return false;
}