function cleanTags(sStr)
{
  return (sStr.replace(/\xa0/g, ' ').replace(/&nbsp;/g, ' ').replace(/<br[ \/]*>/gi, ' ').replace(/<.+?>/g, '').replace(/\x20+/g, ' ').replace(/^[\s]*/g,'').replace(/[\s]*$/g,'') );
}
//
//
function createXhrObject()
{
  var oReturn = null;
  var n = 0;
  if (window.XMLHttpRequest)
  {
    oReturn = new XMLHttpRequest();
    n = -1;
  }
  else if (window.ActiveXObject)
  {
      var aNames = [ 'Msxml2.XMLHTTP.6.0',
                     'Msxml2.XMLHTTP.3.0',
                     'Msxml2.XMLHTTP',
                     'Microsoft.XMLHTTP'
                  ];
    for(var nI in aNames)
    {
      try{ oReturn = new ActiveXObject(aNames[nI]); n = nI }
      catch(e){ oReturn = null; n = 0}
      if (oReturn != null)
        break;
    }
  }
  if (oReturn == null)
    window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
  return (oReturn);
}
//
function debugObj(oObj, bFilled)
{
  var aTmp = [];
  if (oObj != null)
  {
    for (var sP in oObj)
      try {
        if (!bFilled || (oObj[sP] != null && oObj[sP] != ''))
          aTmp.push(sP + '=' + oObj[sP]);
    } catch (e) {}
  }
  else
    aTmp.push('objet null');
  alert(aTmp.join(', '))
}
//
function getArticle(oEvent, nId)
{
  if (oEvent == null && window.event != null)
    oEvent = window.event;
  if (oEvent != null && (oEvent.ctrlKey || oEvent.shiftKey))
    return true;
  if (nId && isNaN(nId))
    return true;

  var oRequest = createXhrObject();
  if (oRequest == null)
    return true;

  oRequest.open('GET', encodeURI('SXAjax.asp?id=' + (nId || 'null') ), false);
  oRequest.send(null);
  if (oRequest.status == 200)
  {
    setCookie('id', nId);
//    window.sxHistory.push(nId);
    var nId = oRequest.responseXML.documentElement.attributes.getNamedItem('id').nodeValue;
    var oNodeList = oRequest.responseXML.documentElement.getElementsByTagName('titre');
    setInnerHTML(oNodeList, document.getElementById('tdTitre'));
    setInnerHTML((nId >= 0 ? oNodeList : []), document.getElementById('tdTitrePrint'));
    setInnerHTML(oNodeList, document.title);


    var oNodeList = oRequest.responseXML.documentElement.getElementsByTagName('texte');
    setInnerHTML(oNodeList, document.getElementById('divMaster'));
    setInnerHTML((nId >= 0 ? oNodeList : []), document.getElementById('tdMasterPrint'));
    changeLinks();
    changeForms();
  }
  else
  {
    alert('Erreur : ' + oRequest.status + oRequest.responseText)
  }
  return false;
}
//
function getLink(oEvent, sUrl)
{
  if (sUrl == 'Latitudes')
  {
    sUrl = 'http://www.synaxe.com/Naviguer_Latitudes.asp';
    sUrl = 'http://devlop.synaxe.com/lat_dev/RunExecute.asp?CdEntite=THESAUMAT&CdRequete=TM_MATERIEL&idPresentation=1068&InvertedAxe=0&idReqAxe=665&FLDEFAUT_665=14309&ckNOEUDS_665=&ckNOEUDS_665=&ckNOEUDS_665=&ckNOEUDS_665=&ckNOEUDS_665=&idReqAxe=667&FLDEFAUT_667=14304&ckNOEUDS_667=&ckNOEUDS_667=&ckNOEUDS_667=&idReqAxe=666&FLDEFAUT_666=14306&ckNOEUDS_666=14303&inpVALUE_666_14303=Allys&ckNOEUDS_666=';
    sUrl = 'http://devlop.synaxe.com/lat_dev/RunFilter.asp?cdEntite=THESAUMAT&cdRequete=TM_MATERIEL&idPresentation=1068';
  }

  if (oEvent == null && window.event != null)
    oEvent = window.event;
  if (oEvent != null && (oEvent.ctrlKey || oEvent.shiftKey))
    return true;

  var oRequest = createXhrObject();
  if (oRequest == null)
    return true;

  try
  {
    oRequest.open('GET', encodeURI(sUrl), false);
  }
  catch (e)
  {
    document.getElementById('divMaster').innerHTML = '<iframe src="'+sUrl+'" width="100%" height="100%"/>';
    return false;
  }
  oRequest.send(null);

  var sTmp = oRequest.responseText;

  sTmp = replaceRelativeUrl(sTmp, sUrl.substring(0, sUrl.lastIndexOf('/')+1));
  sTmp = sTmp.replace(/\x0d\x0a/g, '¤J£H¤');

  var aMatches = sTmp.match(/<HEAD>(.*?)<\/HEAD>/gi);

  sTmp = sTmp.replace(/.*(<body[ >].*)/i, '$1');

  if (aMatches != null)
    sTmp = sTmp.replace(/(<body.*?>)/i, '$1' + aMatches.join('¤J£H¤').replace(/\$/g, '¤H£J¤').replace(/<head>/ig, '¤J£H¤').replace(/<\/head>/ig, '¤J£H¤'));

  sTmp = sTmp.replace(/\xa4H\xa3J\xa4/g, '$$').replace(/\xa4J\xa3H\xa4/g, '\r\n');

  document.getElementById('divMaster').innerHTML = sTmp;
  document.getElementById('tdTitre').innerHTML = '<h1>' + sTmp.substring(sTmp.indexOf('<title>') + 7, sTmp.indexOf('</title>') ) +  '</h1>';

//  sTmp = sTmp.replace(/\x0d\x0a/g, '¤').replace( /<HEAD>(.*)<\/HEAD>(.*)/gi  , '$1' ).replace(/¤/g, '\r\n');

//  document.getElementById('tdTitre').innerHTML = '<input type="button" onclick="alert(document.getElementById(\'divMaster\').innerHTML)">';
  changeLinks();
  changeForms();

  return false;
}
//
function replaceRelativeUrl(sText, sRoot)
{
  var oRe     = null;
  var sReturn = sText;
  var sDomain = '';

  if (!/^.+\/$/.test(sRoot))
    sRoot += '/';
  sDomain = sRoot.replace(/([a-z]+:\/\/.+?)\/.*/i, '$1') ;

  var aRe = [[/([ \.]href=")(\/.+?)(")/ig,         sDomain],
             [/([ \.]src=")(\/.+?)(")/ig,          sDomain],
             [/(:url\()(\/.+?)(\))/ig,             sDomain],
             [/([ \.]background=")(\/.+?)(")/ig,   sDomain],
             [/([ \.]action=")(\/.+?)(")/ig,       sDomain],
             [/([ \.]src=")([^:]+?)(")/ig,          sRoot],
             [/(:url\()([^:]+?)(\))/ig,             sRoot],
             [/([ \.]href=")([^:]+?)(")/ig,         sRoot],
             [/([ \.]background=")([^:]+?)(")/ig,   sRoot],
             [/([ \.]action=")([^:]+?)(")/ig,       sRoot]];


  for (var nRe = 0; nRe < aRe.length; nRe++)
  {
    sReturn = sReturn.replace(aRe[nRe][0], '$1'  + aRe[nRe][1] + '$2$3');
    aRe[nRe][0].compile(aRe[nRe][0].source.replace(/\x22/g, '\''), 'ig' );
    sReturn = sReturn.replace(aRe[nRe][0], '$1'  + aRe[nRe][1] + '$2$3');
  }

  return sReturn;
}

//
function setInnerHTML(oNodeList, oHTMLElement)
{
  if (oNodeList && oHTMLElement)
  {
    var sTmp = '';
    var oItem = null;
    oHTMLElement.innerHTML = '';
    for (var nI = 0; nI < oNodeList.length; nI++)
    {
      oItem = oNodeList.item(nI);
      if (oHTMLElement != document.title)
        oHTMLElement.innerHTML += unescape(getText(oItem));
      else
        sTmp += unescape(getText(oItem));
    }
    if (oHTMLElement == document.title)
    {
      if ((/<h1.*?>(.*)<\/h1>/gi).test(sTmp))
        sTmp = RegExp.$1;
//        sTmp = (/<h1.*>(.*)<\/h1>/gi).test(sTmp) + sTmp;

      sTmp = cleanTags(sTmp);
      sTmp = (sTmp || 'Le sens de vos donnees, l\'essence de votre strategie');
      document.title = 'Latitudes - ' + sTmp;
    }
  }
}
//
function getText(oNode)
{
  return (oNode.textContent || oNode.text);
}
//
function SXAjaxSubmitForm(oEvent)
{
  var nTmp =0;
  var oRequest = createXhrObject();
  if (oRequest == null)
    return true;

  if (oEvent == null)
    oEvent = window.event;
  var oButton = oEvent.srcElement || oEvent.target;
  var oForm = oButton.form;

  var bMustSubmit = true;
  if (oForm.onsubmit != null)
  {
    var oFuncSubmit = null;
    if ((''+oForm.onsubmit).indexOf('onsubmit(event)') >= 0) // FF
       oFuncSubmit = new Function(oForm.onsubmit + 'return onsubmit();');
    else
       oFuncSubmit = new Function(oForm.onsubmit + 'return anonymous();');
    bMustSubmit = oFuncSubmit();
    bMustSubmit = (bMustSubmit == null ? true : bMustSubmit);
  }

  if (bMustSubmit)
  {
    var aFormValues = [];
    var oElement = null;
    var nIndex = 0;
    for (var nI = 0; nI < oForm.elements.length; nI++)
    {
      oElement = oForm.elements.item(nI);
      if (oElement != null && oElement.tagName != null && oElement.name != null)
      {
        if (oElement == oButton)
          aFormValues.push(encodeURIComponent(oElement.name) + '=' + encodeURIComponent(oElement.value));
        else if ( (oElement.tagName == 'INPUT' && (oElement.type == 'text' || oElement.type == 'hidden' || oElement.type == 'password')) ||
                  (oElement.tagName == 'INPUT' && (oElement.type == 'checkbox' || oElement.type == 'radio') && oElement.checked == true) ||
                   // non traités : INPUT Type=file, image
                  (oElement.tagName == 'TEXTAREA')
                )
          aFormValues.push(encodeURIComponent(oElement.name) + '=' + encodeURIComponent(oElement.value));
        else if (oElement.tagName == 'SELECT')
        {
          for (var nO = 0; nO < oElement.options.length; nO++)
            if (oElement.options.item(nO).selected)
              aFormValues.push(encodeURIComponent(oElement.name) + '=' + encodeURIComponent(oElement.options.item(nO).value));
        }
      }
    }
    oRequest.open('POST', encodeURI(oForm.action), false);
    oRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    oRequest.send(aFormValues.join('&'));
    if (oRequest.status == 200)
    {
      if (!isNaN(bMustSubmit))
        getArticle(null, bMustSubmit);
      else
        alert('Formulaire transmis');

    }
  }
  return false;
}
//
//
function changeLinks()
{
  var sRoot = window.location.protocol + '//' + window.location.hostname +  window.location.pathname;
      sRoot = sRoot.substr(0, sRoot.lastIndexOf('/') + 1);
  var oLink = null;
  var oRe = new RegExp(sRoot + '\\?id=([\\-0-9]+)','i');
  for (var nI = 0; nI < document.links.length; nI++)
  {
    var oLink = document.links.item(nI);
    if (oLink.onclick == null && (oLink.target == '' || oLink.target == null || oLink.target == '_self' ))
    {
      if (oLink.href == sRoot)
        oLink.onclick = function(event) { return getArticle(event, null); };
      else if (oRe.test(oLink.href))
        oLink.onclick = new Function('event', 'return getArticle(event, ' + RegExp.$1 + ');');
      else if (oLink.href.toLowerCase().indexOf('script:') < 0)
        oLink.onclick = new Function('event', 'return getLink(event, \'' + oLink.href.replace(/\x27/g, '\\\'') + '\');');
    }
  }
}
//
function changeForms()
{
  var oForm = null;
  var oElement = null;
  var sTmp = 'SXAjaxSubmitForm(event); return false;'

  for (var nF = 0; nF < document.forms.length; nF++)
  {
    oForm = document.forms.item(nF);
    for (var nE = 0; nE < oForm.elements.length; nE++)
    {

      oElement = oForm.elements.item(nE);
      if (oElement != null && !oElement.SXAjaxEnabled && oElement.tagName != null)
      {
        if ( (oElement.tagName == 'INPUT' && oElement.type == 'submit' ) ||
             (oElement.tagName == 'BUTTON' && oElement.type == 'submit')
           )
        {
          if (oElement.onclick != null)
          {
            if ((''+oElement.onclick).indexOf('onclick(event)') >= 0) // FF
              oElement.onclick = new Function('event', oElement.onclick + 'var bOnClick = onclick(event); if (bOnClick != false) { ' + sTmp + '} else {return false;}');
            else
              oElement.onclick = new Function('event', oElement.onclick + 'var bOnClick = anonymous();    if (bOnClick != false) { ' + sTmp + '} else {return false;}');
          }
          else
          {
            oElement.onclick = new Function('event', sTmp);
          }
          oElement.SXAjaxEnabled = true;
        }
      }
    }
  }
}

//
//
function setCookie(sName, sValue, dExpire)
{
  var oCookie = getCookie();
  oCookie[sName] = sValue;
  var aTmp = [];
  for (var sP in oCookie)
    if (sP.indexOf('ASPSESSIONID') < 0)
      aTmp.push(sP + '=' + oCookie[sP]);
  if (dExpire instanceof Date)
    aTmp.push('expires=' + dExpire.toGMTString());
  document.cookie = aTmp.join(';')
}
//
function getCookie(sName)
{
  var xReturn = null;
  var oCookie = new Object();
  var aTmp = document.cookie.split(';');

  for (var nI = 0; nI < aTmp.length; nI++)
    oCookie[aTmp[nI].split('=')[0]] = aTmp[nI].split('=')[1];
  if (sName)
    xReturn = oCookie[sName];
  else
    xReturn = oCookie;
  return (xReturn);
}
//
function initAjax()
{
  if (window.bAjaxAllowed == null)
  {
    var oRequest = createXhrObject();
    window.bAjaxAllowed = (oRequest != null);
    oRequest = null;
  }
  window.bAjaxAllowed = false;
  if (window.bAjaxAllowed)
  {
    changeLinks();
    changeForms();
    var nId = getCookie('id');
    nId = (''+nId == ''           ? null : nId);
    nId = (''+nId == 'null'       ? null : nId);
    nId = (''+nId == 'undefined'  ? null : nId);
    if (nId != null)
    {
        getArticle(null, nId);
    }
  }
}
//
if (window.attachEvent)
  window.attachEvent('onload', initAjax);
else
  window.addEventListener('load', initAjax, true);

