var RsContextPoolSize = 0;
var RsContextMaxPool = 5000;
var RsContextPool = new Array();
var RsBrowser = RsBrowserSniff();
var RsPOST = true;


function RsContextObj( contextID ){
  this.id = contextID;
  this.busy = true;
  this.container = contextCreateContainer( contextID );
  
  this.GET = contextGET;
  this.POST = contextPOST;
  this.setVisibility = contextSetVisibility;
}


function contextCreateContainer( containerName ){
  var container;
  switch( RsBrowser ) {
    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 id="' + containerName + '" 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 contextPOST( rsPage, parms, queryString ){
  var d = new Date();
  var unique = d.getTime() + '' + Math.floor(1000 * Math.random());
  var doc = (RsBrowser == "IE" ) ? this.container.document : this.container.contentDocument;
  var objContainer = this.container;
  
  if (RsBrowser == "IE") {
		var span = document.all( "SPAN" + objContainer.name );
		 
		var strForm = 'Form' + objContainer.name;
		
		var strHtml = '<form name="' + strForm + '" method="post" target="' + objContainer.name + '" ';
		strHtml = strHtml + ' action="' + rsPage + '?' + queryString + '&U=' + unique + '">';
		strHtml = strHtml + '<input type="hidden" name="C" value="' + this.id + '">';
		
		if (typeof(parms) == "string"){
			  strHtml = strHtml + '<input type="hidden" name="P0" ';
			  strHtml = strHtml + 'value="' + parms + '">';
		}
		else {
			  if (typeof(parms) == "object"){
					try {
				  		for( var i=0; i < parms.length; i++ ){
							// verifica se é radiobutton
				            if (parms.item(i).type == "radio") {
								if (parms.item(i).checked) {
									strHtml = strHtml + '<input type="text" name="' + parms.item(i).name + '" ';
									strHtml = strHtml + 'value="' + parms.item(i).value + '">';
								}   							
							}
							else {
								// verifica se é checkbox								
								if (parms.item(i).type == "checkbox") {
									if (parms.item(i).checked) {
										strHtml = strHtml + '<input type="text" name="' + parms.item(i).name + '" ';
										strHtml = strHtml + 'value="' + parms.item(i).value + '">';
									}   
								}
								else {
									// verifica se é multiselect
									if (parms.item(i).type == "select-multiple") {
										var var_ItemValue = "";	
										
										for( var j = 0; j < parms.item(i).options.length; j++ ){			
											if( parms.item(i).options(j).selected ){
												if (var_ItemValue == "") {
													var_ItemValue = parms.item(i).options(j).value;	
												}
												else {
													var_ItemValue = var_ItemValue + "," + parms.item(i).options(j).value;	
												}
											}  
										} 										
										
										strHtml = strHtml + '<input type="text" name="' + parms.item(i).name + '" ';
										strHtml = strHtml + 'value="' + var_ItemValue + '">';
									}
									else {
										strHtml = strHtml + '<input type="text" name="' + parms.item(i).name + '" ';
										strHtml = strHtml + 'value="' + parms.item(i).value + '">';
									}
								}
							}
				  		}
					} 
					catch (exc) {
				  		for( var i=0; i < parms.length; i++ ){
							strHtml = strHtml + '<input type="hidden" name="P' + i + '" ';
							strHtml = strHtml + 'value="' + parms[i] + '">';
				  		}
					}    
  			  }
		}
		 
		strHtml = strHtml + '</form>';
		span.innerHTML = span.innerHTML + strHtml;
		document.forms[strForm].submit();
		
  		for( var i=0; i < document.forms[strForm].length; i++ ){		
			document.forms[strForm].removeChild(document.forms[strForm].lastChild);
		}
  }
  else{
		var strHtml = '<html><body>';
		strHtml = strHtml + '<form name="jsrsForm" method="post" target="" ';
		strHtml = strHtml + ' action="' + rsPage + '?' + queryString + '&U=' + unique + '">';
		strHtml = strHtml + '<input type="hidden" name="C" value="' + this.id + '">';
		 
		if (typeof(parms) == "string"){
			  strHtml = strHtml + '<input type="hidden" name="P0" ';
			  strHtml = strHtml + 'value="' + parms + '">';
		}
		else {
			  if (typeof(parms) == "object"){
					try {
						for( var i=0; i < parms.length; i++ ){
							// verifica se é radiobutton
				            if (parms.elements[i].type == "radio") {
								if (parms.elements[i].checked) {
									strHtml = strHtml + '<input type="text" name="' + parms.elements[i].name + '" ';
									strHtml = strHtml + 'value="' + parms.elements[i].value + '">';
								}   							
							}
							else {
								// verifica se é checkbox								
								if (parms.elements[i].type == "checkbox") {
									if (parms.elements[i].checked) {
										strHtml = strHtml + '<input type="text" name="' + parms.elements[i].name + '" ';
										strHtml = strHtml + 'value="' + parms.elements[i].value + '">';
									}   
								}
								else {
									// verifica se é multiselect
									if (parms.elements[i].type == "select-multiple") {
										var var_ItemValue = "";	

										for( var j = 0; j < parms.elements[i].options.length; j++ ){			
											if (parms.elements[i].options[j].selected){
												if (var_ItemValue == "") {
													var_ItemValue = parms.elements[i].options[j].value;	
												}
												else {
													var_ItemValue = var_ItemValue + "," + parms.elements[i].options[j].value;	
												}
											}  
										} 										
										
										strHtml = strHtml + '<input type="text" name="' + parms.elements[i].name + '" ';
										strHtml = strHtml + 'value="' + var_ItemValue + '">';
									}
									else {
										strHtml = strHtml + '<input type="text" name="' + parms.elements[i].name + '" ';
										strHtml = strHtml + 'value="' + parms.elements[i].value + '">';
									}
								}
							}
						}
					} 
					catch (exc) {
						  for( var i=0; i < parms.length; i++ ){
								strHtml = strHtml + '<input type="hidden" name="P' + i + '" ';
								strHtml = strHtml + 'value="' + parms[i] + '">';
						  }
					}    
			  }
    	}
     
		strHtml = strHtml + '</form></body></html>';
		doc.open();
		doc.write(strHtml);
		doc.close();
		doc.forms['jsrsForm'].submit();
	
  		for( var i=0; i < doc.forms['jsrsForm'].length; i++ ){		
			doc.forms['jsrsForm'].removeChild(doc.forms['jsrsForm'].lastChild);
		}	
  }
}


function contextGET( rsPage, parms, queryString ){
  var URL = rsPage;

  URL +=  "?" + queryString + "&C=" + this.id;

  if (typeof(parms) == "object"){
    for( var i=0; i < parms.length; i++ ){
      URL += "&" + parms.item(i).name + "=" + parms.item(i).value+'';
    }
  }

  var d = new Date();
  URL += "&U=" + d.getTime();
 
  switch( RsBrowser ) {
    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 contextSetVisibility( vis ){
  switch( RsBrowser ) {
    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 RsGetContextID(){
  var contextObj;
  for (var i = 1; i <= RsContextPoolSize; i++){
    contextObj = RsContextPool[ 'Rs' + i ];
    if ( !contextObj.busy ){
      contextObj.busy = true;      
      return contextObj.id;
    }
  }

  if ( RsContextPoolSize <= RsContextMaxPool ){
    var contextID = "Rs" + (RsContextPoolSize + 1);
    RsContextPool[ contextID ] = new RsContextObj( contextID );
    RsContextPoolSize++;
    return contextID;
  } else {
    alert( "Rs Error:  context pool full" );
    return null;
  }
}

function RsExecute( rspage, parms, visibility, queryString ){
  var contextObj = RsContextPool[ RsGetContextID() ];

  var vis = (visibility == null)? false : visibility;
  contextObj.setVisibility( vis );


  if ( RsPOST && ((RsBrowser == 'IE') || (RsBrowser == 'MOZ'))){
    contextObj.POST( rspage, parms, queryString );
  } else {
    contextObj.GET( rspage, parms, queryString );
  }  
  
  return contextObj.id;
}

function RsError( contextID, str ){
  alert( unescape(str) );
  RsContextPool[ contextID ].busy = false
}

function RsEscapeQQ( thing ){
  return thing.replace(/'"'/g, '\\"');
}

function RsUnescape( str ){
  return str.replace( /\\\//g, "/" );
}

function RsBrowserSniff(){
  if (document.layers) return "NS";
  if (document.all) return "IE";
  if (document.getElementById) return "MOZ";
  return "OTHER";
}

function RsArrayFromString( s, delim ){
  var d = (delim == null)? '~' : delim;
  return s.split(d);
}

function RsDebugInfo(){
  var doc = window.open().document;
  doc.open;
  doc.write( 'Pool Size: ' + RsContextPoolSize + '<br><font face="arial" size="2"><b>' );
  for( var i in RsContextPool ){
    var contextObj = RsContextPool[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;
}