   var http_request = false;
   var elementid;
   
   function makeRequest(url, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      http_request.onreadystatechange = alertContents;
      http_request.open('GET', url + parameters, true);
      http_request.send(null);
   }

   function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            //alert(http_request.responseText);
            result = http_request.responseText;
            document.getElementById(elementid).innerHTML = result;            
         } else {
            alert('There was a problem with the request.');
         }
      }
   }
   
   function getForm(obj, script, returnelement, base64encode) { //send form object, php script, and result return element
     elementid = returnelement;
     var getstr = "?";
      for (i=0; i<obj.childNodes.length; i++) {
		if (obj.childNodes[i].tagName == "INPUT") {
            if (obj.childNodes[i].type == "text") {
                if (base64encode == true) {
				   b64 = new base64;
				   getstr += obj.childNodes[i].name+ "=" + b64.encode( obj.childNodes[i].value ) + "&";
				} else {
				   getstr += obj.childNodes[i].name+ "=" + encodeURI( obj.childNodes[i].value ) + "&";
				}
            }
            if (obj.childNodes[i].type == "hidden") {
               if (base64encode == true) {
				   b64 = new base64;
				   getstr += obj.childNodes[i].name+ "=" + b64.encode( obj.childNodes[i].value ) + "&";
				} else {
				   getstr += obj.childNodes[i].name+ "=" + encodeURI( obj.childNodes[i].value ) + "&";
				}
            }
            if (obj.childNodes[i].type == "checkbox") {
               if (obj.childNodes[i].checked) {
                  getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
               } else {
                  getstr += obj.childNodes[i].name + "=&";
               }
            }
            if (obj.childNodes[i].type == "radio") {
               if (obj.childNodes[i].checked) {
                  getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
               }
            }
            if (obj.childNodes[i].type == "submit") {
               getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
            }
         }   
         if (obj.childNodes[i].tagName == "SELECT") {
            var sel = obj.childNodes[i];
            getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
         }
       //
       if (obj.childNodes[i].tagName == "TEXTAREA") {
          if (base64encode == true) {
             b64 = new base64;
             getstr += obj.childNodes[i].name+ "=" + b64.encode( obj.childNodes[i].value ) + "&";
          } else {
             getstr += obj.childNodes[i].name+ "=" + encodeURI( obj.childNodes[i].value ) + "&";
		  }
       }
       //
      }
     makeRequest(script, getstr);
   }
   
   function getTabledForm(obj, script, returnelement, base64encode) { //send form object, php script, and result return element
      elementid = returnelement;
	  var getstr = "?";
	  for (i=0; i<obj.getElementsByTagName("input").length; i++) {
			if (obj.getElementsByTagName("input")[i].type == "text") {
                if (base64encode == true) {
				   b64 = new base64;
				   getstr += obj.getElementsByTagName("input")[i].name+ "=" + b64.encode( obj.getElementsByTagName("input")[i].value ) + "&";
				} else {
				   getstr += obj.getElementsByTagName("input")[i].name+ "=" + encodeURI( obj.getElementsByTagName("input")[i].value ) + "&";
				}
			}
			if (obj.getElementsByTagName("input")[i].type == "hidden") {
                if (base64encode == true) {
				   b64 = new base64;
				   getstr += obj.getElementsByTagName("input")[i].name+ "=" + b64.encode( obj.getElementsByTagName("input")[i].value ) + "&";
				} else {
				   getstr += obj.getElementsByTagName("input")[i].name+ "=" + encodeURI( obj.getElementsByTagName("input")[i].value ) + "&";
				}
			}
			if (obj.getElementsByTagName("input")[i].type == "checkbox") {
			   if (obj.getElementsByTagName("input")[i].checked) {
					if (base64encode == true) {
					   b64 = new base64;
					   getstr += obj.getElementsByTagName("input")[i].name+ "=" + b64.encode( obj.getElementsByTagName("input")[i].value ) + "&";
					} else {
					   getstr += obj.getElementsByTagName("input")[i].name+ "=" + encodeURI( obj.getElementsByTagName("input")[i].value ) + "&";
					}
			   }  else {
				  getstr += obj.getElementsByTagName("input")[i].name + "=&";
			   }
			}
			if (obj.getElementsByTagName("input")[i].type == "radio") {
			   if (obj.getElementsByTagName("input")[i].checked) {
					if (base64encode == true) {
					   b64 = new base64;
					   getstr += obj.getElementsByTagName("input")[i].name+ "=" + b64.encode( obj.getElementsByTagName("input")[i].value ) + "&";
					} else {
					   getstr += obj.getElementsByTagName("input")[i].name+ "=" + encodeURI( obj.getElementsByTagName("input")[i].value ) + "&";
					}
			   }
		 }  
		 if (obj.getElementsByTagName("input")[i].tagName == "SELECT") {
			var sel = obj.getElementsByTagName("input")[i];
			getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
		 }
		 
	  }
	  for (i=0; i<obj.getElementsByTagName("textarea").length; i++) {
          if (base64encode == true) {
             b64 = new base64;
             getstr += obj.getElementsByTagName("textarea")[i].name + "=" + b64.encode( obj.getElementsByTagName("textarea")[i].value ) + "&";
          } else {
             getstr += obj.getElementsByTagName("textarea")[i].name + "=" + encodeURI( obj.getElementsByTagName("textarea")[i].value ) + "&";
		  }
      }
	  for (i=0; i<obj.getElementsByTagName("select").length; i++) {
        	var sel = obj.getElementsByTagName("select")[i];
			getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
      }
	  makeRequest(script, getstr);
	}

   
   // This is for generating base64 encoding equal to the one of php, it use because it can have characters
   // special in the content, and seems safer to me to send codified it
   // Apart from which it ofuscates a little the form of direct call to the URL function
   // (from http://www.ideasfreelance.com/lab/instant_edit/remote_cont.js) - translated with babelfish
   
   function base64() {
   }
   base64.chars = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/');
   base64.chain = "";
   base64.count = 0;
   base64.setchain = function (str){
      base64.chain = str;
      base64.count = 0;
   }
   base64.read = function (){    
      if (!base64.chain) return "END_OF_INPUT";
      if (base64.count >= base64.chain.length) return "END_OF_INPUT";
      var c = base64.chain.charCodeAt(base64.count) & 0xff;
      base64.count++;
      return c;
   }
   base64.prototype.encode = function (str){
      base64.setchain(str);
      var result = '';
      var inBuffer = new Array(3);
      var lineCount = 0;
      var done = false;
      while (!done && (inBuffer[0] = base64.read()) != "END_OF_INPUT"){
         inBuffer[1] = base64.read();
         inBuffer[2] = base64.read();
         result += (base64.chars[ inBuffer[0] >> 2 ]);
         if (inBuffer[1] != "END_OF_INPUT"){
            result += (base64.chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != "END_OF_INPUT"){
               result += (base64.chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
               result += (base64.chars [inBuffer[2] & 0x3F]);
            } else {
               result += (base64.chars [((inBuffer[1] << 2) & 0x3c)]);
               result += ('=');
               done = true;
            }
         } else {
            result += (base64.chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
         }
         lineCount += 4;
         if (lineCount >= 76){
            result += ('\n');
            lineCount = 0;
         }
      }
      return result;
   }
