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, aspas, 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;
  var bolAspas = (aspas == null)? true : aspas;
  
  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++ ){
							if (typeof(parms.item(i).type) != "undefined") {
								// define o valor a ser atualizado
								var var_Value = parms.item(i).value;
	
								// verifica se faz o tratamento de aspas
								if (bolAspas) {
									var_Value = var_Value.replace(/\'/g, "");
									var_Value = "'" + var_Value + "'";
								} else {
									var_Value = "\"" + var_Value + "\"";
								}
	
								// 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=" + var_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=" + var_Value + ">";
										} else {
											strHtml = strHtml + "<input type=\"text\" name=\"" + parms.item(i).name + "\" ";
											strHtml = strHtml + "value=" + var_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=" + var_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();

		var obj_Form = window.document.forms[strForm];
		while (obj_Form.length > 0) {
			obj_Form.removeChild(obj_Form.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++ ){
							if (typeof(parms.elements[i].type) != "undefined") {						
								// define o valor a ser atualizado
								var var_Value = parms.item(i).value;
								
								// verifica se faz o tratamento de aspas
								if (bolAspas == true) {
									var_Value = var_Value.replace(/\'/g, "");
									var_Value = "'" + var_Value + "'";
								} else {
									var_Value = "\"" + var_Value + "\"";
								}							
								
								// 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=" + var_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=" + var_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=" + var_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();
	
		var obj_Form = doc.forms["jsrsForm"];
		while (obj_Form.length > 0) {
			obj_Form.removeChild(obj_Form.lastChild);
		}
  }
}


function contextGET( rsPage, parms, aspas, 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, aspas, queryString ){
  var contextObj = RsContextPool[ RsGetContextID() ];

  var vis = (visibility == null)? false : visibility;
  contextObj.setVisibility( vis );


  if ( RsPOST && ((RsBrowser == 'IE') || (RsBrowser == 'MOZ'))){
    contextObj.POST( rspage, parms, aspas, queryString );
  } else {
    contextObj.GET( rspage, parms, aspas, 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;
}