//          ________
//          |/\/\/\|
//          | o o  |
//-----oOOO---(_---OOOo---------------------------------------------------------------------------------------
//
// Auteur      : Chanh T.Do [Thoransoft - 2008.12.17]
// Description : fichier contenant les fonctions ajax du site.
// JScript File
//------------------------------------------------------------------------------------------------------------
/**
* @fileOverview
  ajaxfunc.js [JScript File]: <br>
  Scripts de fonctions ajax utilisÃ©es dans le site<br>
  @author: Chanh T.Do [www.thoransoft.com - 2008.12.17] <br>
  Version 1.0 */

/** Fonction permettant de crÃ©er un objet de type XMLHttpRequest (xhr) 
    @return - xmlHTTPRequest object */
function getNewXhr()
{
  var xhr;

  if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }   //Firefox, Opera, Konqueror, Safari, ...
  else if (window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }   //Internet Explorer
  else { alert('javascript: XMLHttpRequest ERROR ...'); } // Navigateur ancien
  return xhr;
}


/** Fonction permettant de charger un document XML ou une méthode serveur en mode GET
    @param {string} URI - URI du document
    @param {string} callback_func - Fonction à appeler lors du retour du AJAX
    @param {string} responseType - Type de réponse du serveur (XML ou TEXT) */
function requestSrv(URI, callback_func, responseType)
{
  try
  {
    var xmlhttp = getNewXhr();
    xmlhttp.open('GET', URI, true);
    xmlhttp.onreadystatechange=function() { callBack(xmlhttp, callback_func, responseType); }
    xmlhttp.send(null);
  } catch(o) {alert(o);}
}



/** Fonction permettant de passer des paramètres à la fonction de callback
    @param {object} xmlhttp - Objet XMLHTTP
    @param {object} callback_func - Fonction à appeler lors du retour du AJAX
    @param {string} responseType - Type de réponse XML ou TEXT */
function callBack(xmlhttp, callback_func, responseType)
{
  if (xmlhttp.readyState==4)
  {
    if (responseType == 'XML') { callback_func(xmlhttp.responseXML); }
    else { callback_func(xmlhttp.responseText); }
  }
}


/** D E P R E C A T E D
    Fonction permettant de charger les sections du site. <br>
    Cette fonction est une fonction de callback. 
    @param {xmlhttp.responseXML} doc - RÃ©ponse XML lors de l'appel XMLHttpRequest */
function loadSections(doc)
{
  var eDt, eDd, eH1, eP, eSpan;
  var section_title, section_tag, txtLine;
  var lineLst, paraLst;
  var eDl = document.getElementById('site_content');
  var sectionLst = doc.getElementsByTagName('section');
  
  //Charger les sections du site
  eDl.innerHTML = '';
  for (var i=0; i< sectionLst.length; i++)
  {
    //CrÃ©er l'Ã©lÃ©ment DT (Pour les titres des accordÃ©ons)
    eDt = document.createElement('dt');
    eDt.setAttribute('id', sectionLst[i].getAttribute('id'));
    eDl.appendChild(eDt);
    
    //CrÃ©er l'Ã©lÃ©ment DD (Pour les accordions content)
    eDd = document.createElement('dd');
    
    //Titre de la section (la balise title est obligatoire et il y en a juste 1 par section)
    section_title = sectionLst[i].getElementsByTagName('title')[0].firstChild.data;
    eH1 = document.createElement('h1');
    eH1.appendChild(document.createTextNode(section_title));
    eDd.appendChild(eH1);
    
    //Tag de la section (1 seul tag avec possibilitÃ© de plusieurs lignes)
    section_tag = sectionLst[i].getElementsByTagName('tag')[0];
    lineLst = section_tag.getElementsByTagName('line');
    eP = document.createElement('p');
    eSpan = document.createElement('span');
    for (var j=0; j<lineLst.length; j++)
    {
      txtLine = lineLst[j].firstChild.data;
      eSpan.appendChild(document.createTextNode(txtLine));
      eSpan.appendChild(document.createElement('br'));
    }
    eP.appendChild(eSpan);
    eDd.appendChild(eP);
    
    //Ajout des paragraphes
    paraLst = sectionLst[i].getElementsByTagName('para');
    for (var j=0; j<paraLst.length; j++)
    {
      //Ajout des lignes dans chacun des paragraphes
      lineLst = paraLst[j].getElementsByTagName('line');
      eP = document.createElement('p');
      for (var k=0; k<lineLst.length; k++)
      {
        txtLine = lineLst[k].firstChild.data;
        eP.appendChild(document.createTextNode(txtLine));
        eP.appendChild(document.createElement('br'));
      }
      eDd.appendChild(eP);
    }
    
    //Ajouter le contenu Ã  l'accordÃ©on
    eDd.appendChild(document.createElement('br'));
    eDd.appendChild(document.createElement('br'));
    eDl.appendChild(eDd);
    if (i=1) { eDd.className='open'; }
    
  }
  
  //Initialiser l'accordÃ©on
  YAHOO.lutsr.accordion.init();
}


/** D E P R E C A T E D
    Fonction permettant de charger des documents XML pour appliquer des transformations XSLT
    Le chargement se fait en mode Synchrone. (On a besoin des 2 fichiers XML et XSL) pour
    pourvoir appliquer les transformations XSLT 
    @param {string} fname - Nom du fichier (xML ou XSL) */
function loadXML_ToTransform(fname)
{
  var xmlDoc;
  
  //Code pour IE
  if (window.ActiveXObject) { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); }

  //Code pour Mozilla, Firefox, Opera, etc.
  else if (document.implementation && document.implementation.createDocument) 
  { 
    xmlDoc = document.implementation.createDocument("","",null); 
  }
  else { alert('Your browser cannot handle this script'); }
  
  xmlDoc.async=false;
  xmlDoc.load(fname);
  return(xmlDoc);
}


/** D E P R E C A T E D
    Fonction permettant d'appliquer une transformation sur un document XML
    @param {string} xmlFile - Nom du fichier XML 
    @param {string} xslFile - Nom du fichier XSL (transformation XSLT) 
    @param {string} resultZoneID - ID de la zone de resultat */ 
function xmlTransform(xmlFile, xslFile, resultZoneID)
{
  var xml = loadXML_ToTransform(xmlFile);
  var xsl = loadXML_ToTransform(xslFile);
  var resultDocument;
  
  //Code pour IE
  if (window.ActiveXObject) 
  { 
    resultDocument = xml.transformNode(xsl); 
    resultDocument = resultDocument.replace(/<html>/,'');
    resultDocument = resultDocument.replace(/<\/html>/,'');
    resultDocument = resultDocument.replace(/<body>/,'');
    resultDocument = resultDocument.replace(/<\/body>/,'');
    document.getElementById(resultZoneID).innerHTML = resultDocument;
  }
  
  //Code pour Firefox, Opera, etc.
  else if (document.implementation && document.implementation.createDocument)
  {
    var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xsl);
    resultDocument = xsltProcessor.transformToFragment(xml,document);
    var eDiv = document.createElement('div');
    eDiv.appendChild(resultDocument);
    var e = eDiv.getElementsByTagName('body')[0];
    document.getElementById(resultZoneID).innerHTML = e.innerHTML;
  }
}


/** Fonction permettant de charger dynamiquement le contenu d'une page
    NOTE: Fonction de callback AJAX.
    @param {string} textdoc - Réponse en mode text du serveur */
function loadPageContent(textdoc)
{
  if (textdoc == 'error') { alert("Il y a une problème avec le serveur WEB. \nVeuillez réessayer un peu plus tard."); }
  else
  {
    //Modifier tous les chemins des images ou des animations FLASH.
    textdoc = textdoc.replace(/..\/..\/images/gi, "../images");

    if (textdoc.indexOf('h1_accueil') > -1) { document.getElementById('dd_accueil').innerHTML = textdoc; }
    else if (textdoc.indexOf('h1_clients') > -1) { document.getElementById('dd_clients').innerHTML = textdoc; }
    else if (textdoc.indexOf('h1_services') > -1) { document.getElementById('dd_services').innerHTML = textdoc; /*lightwindowInit();*/}
    else if (textdoc.indexOf('h1_solutions') > -1) { document.getElementById('dd_solutions').innerHTML = textdoc; swapPanel('web','soft'); }
    else if (textdoc.indexOf('h1_manage') > -1) { document.getElementById('dd_manage').innerHTML = textdoc; }
    else if (textdoc.indexOf('h1_contact') > -1) { document.getElementById('dd_contact').innerHTML = textdoc; }

  }
}


/** Fonction permettant de charger un document XML ou appeler une méthode serveur en mode POST.
    @param {string} URI - URI du document
    @param {string} callback_func - Fonction à appeler lors du retour du AJAX
    @param {string} responseType - Type de réponse du serveur (XML ou TEXT)
    @param {string} params - paramètres à passer à la méthode  */
function requestSrv_POST(URI, callback_func, responseType, params)
{
  try
  {
    var xmlhttp = getNewXhr();
    xmlhttp.open('POST', URI, true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("charset" , "ISO-8859-1");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");
    xmlhttp.send(params);
    xmlhttp.onreadystatechange=function() { callBack(xmlhttp, callback_func, responseType); }
  } catch(o) {alert(o);}
}


/** Fonction de callback de l'envoi message
    @param {string} textdoc - Réponse en mode text du serveur */
function r_thoransm(textdoc)
{
  var vTextdoc = textdoc.split('_');
  if (vTextdoc[0] == 'OK') 
  {
    alert (vTextdoc[1]);
    document.getElementById('name').value = "";
    document.getElementById('email').value = "";
    document.getElementById('comments').innerHTML = "";
    document.getElementById('comments').value = "";
  }
  else { /* Erreur*/ }
}
