﻿/*************************************/
/* PHOTOPROWEB 3.0 - Procédures AJAX */
/*************************************/


/**********************************************************/
/* Fonction pour faire un appel AJAX avec la méthode POST */
/**********************************************************/

function AJAXpost(url, query, handler, response_type, is_nowait) {
   var status = false;
   var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
   //var contentType = "application/x-www-form-urlencoded; charset=iso-8859-1";

   ajax_response_type = response_type;
   ajax_url = url;
   ajax_query = query;

   // Native XMLHttpRequest object
   if (window.XMLHttpRequest) { 
	request = new XMLHttpRequest();
	request.onreadystatechange = handler;
	request.open("POST", url, is_nowait);
	request.setRequestHeader("Content-Type", contentType);
	//request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
	request.send(query);
    if (is_nowait)
	   status = true;
  	else
  	{
  	   // Contourne le bug de firefox en mode synchrone
       if (navigator.userAgent.indexOf("Gecko") != -1) handler();
       status = error_appli_isok;
  	}
	}
   // ActiveX XMLHttpRequest object 
   else if (window.ActiveXObject) { 
	request = new ActiveXObject("Microsoft.XMLHTTP");
	if (request) { 
		request.onreadystatechange = handler;
		request.open("POST", url, is_nowait);
		request.setRequestHeader("Content-Type", contentType);
		//request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
		request.send(query);
	    if (is_nowait)
		   status = true;
		else
		   status = error_appli_isok;
		}
	}
	return status;
}


/*********************************************************/
/* Fonction pour faire un appel AJAX avec la méthode GET */
/*********************************************************/

function AJAXget(url, query, handler, response_type, is_nowait) {
   var status = false;
   var contentType = "charset=UTF-8";
   //var contentType = "charset=iso-8859-1";

   ajax_response_type = response_type;
   ajax_url = url;
   ajax_query = query;

   // Native XMLHttpRequest object
   if (window.XMLHttpRequest) { 
 	request = new XMLHttpRequest();
	request.onreadystatechange = handler;
	request.open("GET", url+"?"+query, is_nowait);
	request.setRequestHeader("Content-Type", contentType);
	//request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
	request.send(null);
    if (is_nowait)
	   status = true;
	  else
  	{
  	   // Contourne le bug de firefox en mode synchrone
       if (navigator.userAgent.indexOf("Gecko") != -1) handler();
       status = error_appli_isok;
  	}
	}
   // ActiveX XMLHttpRequest object 
   else if (window.ActiveXObject) { 
 	request = new ActiveXObject("Microsoft.XMLHTTP");
	if (request) { 
		request.onreadystatechange = handler;
		request.open("GET", url, is_nowait);
		request.setRequestHeader("Content-Type", contentType);
		//request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
		request.send(null);
	    if (is_nowait)
		   status = true;
		else
		   status = error_appli_isok;
		}
	}
   return status;
}


/*******************************************************************/
/* Fonction appelée pendant l'exécution d'un AJAX GET ou AJAX POST */
/*******************************************************************/

function AJAXprocess() {
  
// handle onreadystatechange event of req object
//AJAXwaiting(request.readyState);

if (request.readyState == 4) { // only if request shows "loaded" 
   ajax_headers = request.getAllResponseHeaders();
   ajax_status = request.status;
   ajax_status_text = request.statusText
   if (request.status == 200) { // only if "OK"
      // test si le retour ne correspond pas au texte renvoyé par atlasxxx.dll si base non en ligne
      var chaine = request.responseText;
      if (chaine.lastIndexOf("ATLAS_DATABASE_UNKNOWN")!=-1) {
         error_appli_isok = false;
         error_appli_type = "ATLAS";
         error_appli_code = "ATLAS_DATABASE_UNKNOWN";
         }
      else if ((chaine.lastIndexOf("The request to AtlasWeb")!=-1)&&(chaine.lastIndexOf("E3734==>")!=-1)) {
         error_appli_isok = false;
         error_appli_type = "ATLAS";
         error_appli_code = "ATLAS_ROUTINE_UNKNOWN";
         }
      else if (chaine.lastIndexOf("The request to AtlasWeb")!=-1) {
         error_appli_isok = false;
         error_appli_type = "ATLAS";
         error_appli_code = "ATLAS_ROUTINE_ERROR";
         }            
      else {
         error_appli_isok = true;
         error_appli_type = "";
         error_appli_code = "";
         }
      ajax_response_text = request.responseText;
      ajax_response_xml = request.responseXML;
      if (ajax_response_type=="XML")
	 ajax_response = request.responseXML;
      else
         ajax_response = request.responseText;
      }
   else {
      error_appli_isok = false;
      error_appli_type = "AJAX";
      error_appli_code = request.status;
      }
   if (ajax_isdebug) {
      alert("Ajax Headers:\n"+request.getAllResponseHeaders());
      alert("Ajax Status:\n"+ajax_status);
      alert("Ajax StatusText:\n"+ajax_status_text);
      alert("Ajax TEXT Response:\n" + request.responseText);
      alert("Ajax XML Response:\n" + request.responseXML.xml);
      alert("Error Appli is OK :\n" + error_appli_isok)
      if (!error_appli_isok) {
         alert("Error Appli Type :\n" + error_appli_type);
         alert("Error Appli Code :\n" + error_appli_code);
         }
      }
   else if (!error_appli_isok) {
      //alert("Error Appli Type :\n" + error_appli_type);
      //alert("Error Appli Code :\n" + error_appli_code);
      //alert("Error Appli text :\n" + ajax_response);
      ajax_response = "<!>&nbsp;<!>"+ajax_response+"<!>&nbsp;";
      }
   }
}


/*****************************************************************/
/* Fonction pour visualiser les différents états d'un appel AJAX */
/*****************************************************************/

function AJAXwaiting(readyState) {
  /*if (readyState == 0) { // non initialisé 
  else if (readyState == 1) { // connexion établie 
  else if (readyState == 2) { // requête reçue 
  else if (readyState == 3) { // réponse en cours 
  else if (readyState == 4) { // only if request shows "loaded" */
  if (document.getElementById("idajaxwaiting"))
     document.getElementById("idajaxwaiting").innerHTML=readyState;
}


/***************************************************************************/
/* Fonction pour génèrer une chaine avec tous les éléments d'un formulaire */
/***************************************************************************/
/*
function encodeURIComponent(str) {
  return escape(str).replace('+', '%2B').replace('%20', '+').replace('*', '%2A').replace('/', '%2F').replace('@', '%40');
}*/

function createQuery(form) {
   if (form) {
      var elements = form.elements;
      var pairs = new Array();
      for (var i = 0; i < elements.length; i++) {
          if (elements[i].type=="checkbox") {
             if (elements[i].checked==true) 
                if ((name = elements[i].name) && (value = elements[i].value))
   	               pairs.push(name + "=" + encodeURIComponent(value));
   	     	 }
          else if (elements[i].type=="radio") {
             if (elements[i].checked==true) 
                if ((name = elements[i].name) && (value = elements[i].value))
   	               pairs.push(name + "=" + encodeURIComponent(value));
   	     	 }
          else if ((name = elements[i].name) && (value = elements[i].value)) 
	         pairs.push(name + "=" + encodeURIComponent(value));
          }
      return pairs.join("&");
      }
   else
      return "";
}

/*************************************************************************/
/*                                    FIN                                */
/*************************************************************************/

