/* JS document */
var requestDone;
var iTimeoutId;

function getXmlHttpRequest() {

  var httpRequest = null;
  requestDone = false;
	
  try {
    httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
  }
  
  catch (e){
    try {
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    catch (e) {
      httpRequest = null;
    }
  }
  
  if (!httpRequest && typeof XMLHttpRequest != "undefined") {
    httpRequest = new XMLHttpRequest();
  }
  
  /* 
     iTimeoutId = setTimeout(function(){
     requestDone = true;
     $hide('wait_div');
     alert('l\'opération a pris beaucoup de temps, veuillez réessayer');
     },10000);
  */
  //httpRequest.setRequestHeader("Content-Type", "text/html;charset=iso-8859-1");
  return httpRequest;
}

function getUrlSync(url) {
	return getUrl(url, false, null);
}

function getUrlAsync(url, handleStateChange) {
	return getUrl(url, true, handleStateChange);
}

/* call a url */
function getUrl(url, async, handleStateChange) {
	
	var xmlHttpReq = getXmlHttpRequest();

	if (!xmlHttpReq)
	  return;
	
	if (handleStateChange) {
	  xmlHttpReq.onreadystatechange = function() {
	    handleStateChange(xmlHttpReq);
	  };
	} else {
	  xmlHttpReq.onreadystatechange = function() {;}
	}
	
	xmlHttpReq.open("GET", url, async);
	xmlHttpReq.send(null);
}

function postUrl(url, data, async, stateChangeCallback) { 

  var xmlHttpReq = getXmlHttpRequest(); 

  if (!xmlHttpReq)
    return;

  xmlHttpReq.open("POST", url, async);
  xmlHttpReq.onreadystatechange = function() {
    stateChangeCallback(xmlHttpReq);
  };
   xmlHttpReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

  //xmlHttpReq.overrideMimeType('text/html; charset=ISO-8859-1');
  xmlHttpReq.send(data);
  //  alert('url: ' + url + '\ndata: ' + data + '\n');
}

function urlEncodeDict(dict) { 
  var result = "";
  for (var i=0; i<dict.length; i++) {
    result += "&" + encodeURIComponent(dict[i].name) + "=" + encodeURIComponent(dict[i].value);
  }
  
  return result;
}

function execOnSuccess(stateChangeCallback) {
  
  return function(xmlHttpReq) {
    if (xmlHttpReq.readyState == 4 &&
	xmlHttpReq.status == 200 ) {
      /* clearTimeout(iTimeoutId);
	 requestDone = true; */ 
      stateChangeCallback(xmlHttpReq);
    }
    
    /*alert('IN execOnSuccess' + xmlHttpReq + " " + xmlHttpReq.readyState + " " + xmlHttpReq.status); */
  };
}

function postFormByForm(form, async, successCallback) {
  
var formVars = new Array();
	
 for (var i = 0; i < form.elements.length; i++) {
   var formElement = form.elements[i];
   
   /* Special handling for checkboxes or radio buttons (we need an array of selected checkboxes..)!*/
   if((formElement.type == 'checkbox' || formElement.type == 'radio') && !formElement.checked) {
     continue;
   } 
   
   /* special handling for radio button */
   
   if(formElement.type == 'radio' ) { 
     
   }
   
   var v=new Object;
   v.name=formElement.name;
   v.value=formElement.value;
   formVars.push(v);
   //alert('n:' + v.name + '\nv:' + v.value);	  
 } 
 postUrl(form.action, urlEncodeDict(formVars), async, execOnSuccess(successCallback));
}

function postForm(formName, async, successCallback) {
  /* postFormByName */
  var form = document.forms[formName];
  return postFormByForm(form, async, successCallback);
}

function replaceDivContents(xmlHttpRequest, dstDivId) {
  var dstDiv = document.getElementById(dstDivId);
  dstDiv.innerHTML = xmlHttpRequest.responseText;
}
