
// -------------------------------------------------------------------
// ERROR MESSAGES
// -------------------------------------------------------------------

var err_501_FR = "Une erreur non r&eacute;pertori&eacute;e a eu lieu.";
var err_501_EN = "An unknown error has occurred.";

var err_502_FR = "Votre navigateur Internet n'est pas compatible avec AJAX. Votre action a &eacute;t&eacute; ignor&eacute;e.";
var err_502_EN = "Your browser is not AJAX compatible. Your action was ignored.";

var err_503_FR = "Erreur de communication. Veuillez r&eacute;essayer dans un moment. D&eacute;tail : ";
var err_503_EN = "Communication error. Please retry in a few seconds. Detail : ";

var err_504_FR = "Erreur de communication avec le serveur. Veuillez r&eacute;essayer dans un moment.";
var err_504_EN = "Server communication error. Please retry in a few seconds.";

var err_505_FR = "Vous avez &eacute;t&eacute; d&eacute;connect&eacute;. Merci de vous reconnecter.";
var err_505_EN = "You have been logged out. Thanks for login again.";

// ajax alert function to use, if not set we use the standard alert() function
var ajax_alertFunction = null;

// Displays an error message in the wanted language
// @param errorId error id
// @param lang user language
// @param optionalErrorText optional text to append to the error message
function ajax_error(errorId, lang, optionalErrorText) {

   // Check lang
   lang = ajax_checkLang(lang);

   var errMsg = eval("err_"+errorId+"_"+lang);

   // Message not found ?
   if(!errMsg) {
      // we try to get the message in english
      errMsg = eval("err_"+errorId+"_EN");
   }

   // Alert Display   
   if(errMsg) {
      if(ajax_alertFunction) {
         ajax_alertFunction(errMsg);
      }
      else {
         alert(errMsg);
      }
   }
   else {
      ajax_error(501, lang);
   }
}

// Checks that the language is correct
// @param lang user language
// @return the given language or if it is incorrect the default language ('EN')
function ajax_checkLang(lang) {

    if(!lang || (lang!='FR' && lang!='EN')) {
       return 'EN'; // default language
    }
    
    return lang;
}

// -------------------------------------------------------------------
// AJAX HANDLING METHODS
// -------------------------------------------------------------------

// Creates a new HTTP request.
// @return the request that was created, null if it wasn't created... certainly because
//         the user's browser is not AJAX compatible.
function ajax_createXmlHttpRequest(){

  if(window.XMLHttpRequest){
     // DOM access
     return new XMLHttpRequest();
  }
  else if(window.ActiveXObject){
     // IE access
     return new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  // Browser is Not AJAX compatible
  return null;
}

// -------------------------------------------------------------------
// REQUEST POST
// -------------------------------------------------------------------

// POST with optional return function
// @param srcURI source URI to get. This parameter must not be null
// @param srcForm source form to post.  This parameter must not be null
// @param targetFunction target function for callback
// @param lang user language
function ajax_POST(srcURI, srcForm, targetFunction, lang){

  // 1 - We create the return parameters from the form
  var httpVars = '';
  var lastElementName = '';
  var i;
   //alert(srcForm);
  for (i = 0; i < srcForm.elements.length; i++) {

      var formElement = srcForm.elements[i];
  
      switch (formElement.type) {
          // Text fields and hidden form elements
          case 'text':
          case 'hidden':
          case 'textarea':
          case 'password':
          case 'select-one':
              httpVars += formElement.name + '=' + escape(trimText(formElement.value)) + '&'
              break;
    
          // Radio button
          case 'radio':
              if(formElement.checked) {
                 httpVars += formElement.name + '=' + escape(formElement.value) + '&'
              }
              break;
            
          // Checkbox
          case 'checkbox':
             if(formElement.checked) {
                // Continuing multiple, same-name checkboxes
                if(formElement.name == lastElementName) {
                   // Strip of end ampersand if there is one
                   if(httpVars.lastIndexOf('&') == httpVars.length-1) {
                      httpVars = httpVars.substr(0, httpVars.length - 1);
                   }
    
                   // Append value as comma-delimited string
                   httpVars += ',' + escape(formElement.value);
                }
                else {
                   httpVars += formElement.name + '=' + escape(formElement.value);
                }
    
                httpVars += '&';
                lastElementName = formElement.name;
             }
             break;
      }
  }

  // Remove trailing separator
  if(httpVars!='') {
     httpVars = httpVars.substr(0, httpVars.length - 1);
  }

  // AJAX GET
  ajax_GET(srcURI, httpVars, targetFunction, lang);
}

// -------------------------------------------------------------------
// REQUEST GET
// -------------------------------------------------------------------

// GET HTTP content.
// @param srcURI source URI to get. This parameter must not be null
// @param httpVars HTTP variables like 'name=value&otherName=otherValue'
//        enter null if you don't want to pass any parameters
// @param targetFunction target function which is called with the returned
//        text when we get back the HTTP response. The target function can be null
//        if you are not interested by the returned text
// @param lang user language, currently 'FR' or 'EN'. If not provided a default
//        language is used (EN).
function ajax_GET(srcURI, httpVars, targetFunction, lang){

 try {
    // 1 - Create the requset
    var httpRequest = ajax_createXmlHttpRequest();

    if(!httpRequest) {
        ajax_error(502,lang);
        return;
    }
//alert(httpVars);
    // we open the request and make sure it is unique
    if(httpVars) {
       httpRequest.open("GET", srcURI+"?oid=" + new Date().getTime()+"&"+httpVars, true);
    }
    else {
       httpRequest.open("GET", srcURI+"?oid=" + new Date().getTime(), true);
    }

    httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    httpRequest.setRequestHeader("Cache-Control","no-cache");
    httpRequest.onreadystatechange = function() {

      if(httpRequest.readyState == 4){

        // Status 200 is sent in HTTP mode, 0 is for local prototype
        if(httpRequest.status==200 || httpRequest.status==0) {

            // Any doctype added in front of the request ?
            // if so we remove it !
            var responseText = httpRequest.responseText;

            if(responseText!="" && responseText.indexOf('<!DOCTYPE', 0)==0) {
               var indexOfDoctypeEnd = responseText.indexOf('>', 0);
               if(indexOfDoctypeEnd>0) {
                  // Strip the doctype
                  responseText = responseText.substring(indexOfDoctypeEnd+1);
               }
               alert('3:'+responseText);
            }

            // DEBUG - UNCOMMENT THE LINE BELOW to get the raw AJAX response on screen
            //alert(responseText);

            // any server side error message sent ?
            if(responseText!="" && responseText.indexOf('ERROR:', 0)==0) {
               // server side error message
               if(ajax_alertFunction) {
                  ajax_alertFunction(responseText.substring(6));
               }
               else {
                  alert(responseText.substring(6));
               }

               return;
            }
            else if(responseText!="" && responseText.indexOf('LOGOUT:', 0)==0) {
               // server side sent a logout order !
               ajax_error(505,lang);
               setTimeout("window.location.href='.'", 2500);
               return;
            }
            
            if(targetFunction) {
                targetFunction(responseText);
            }
         }
         else {
           ajax_error(504,lang);
         }
      }
    }

    // 2 - SEND
    httpRequest.send(null);
 }
 catch(e) {
    ajax_error(503, lang, e.message);
 }
}

// Simple trim function
// @param str String to trim
function trimText(str) {
   return str.replace(/^\s*|\s*$/g,"");
}


