var resultMoteurLibre;

var Completion =
{
  n: false,

  load: function(id)
  {
    Event.observe($(id),'keyup', Completion.changeword);
  },
  loadLigne: function(id)
  {
  },
  changeword: function()
  {
    if ( typeof iframeCompletionDisplay != 'undefined' && iframeCompletionDisplay != null)
    {
      $('iframeCompletion').style.display = 'none';
      iframeCompletionDisplay = null;
    }
    else if ( $('motCtrl').value.length == 3 )
    {
      params = 'motCtrl=' + encodeURIComponent($('motCtrl').value);

      var url = '/scripts/actions/rechercheMoteurLibre2.php';
      if (project_bottle != 'undefined' && project_bottle == 'candry' && islabel != 'undefined' && islabel)
      {
        url = '/' + code_mrq + url;
      }

      AjaxCallS(url, params, '', '',null, false);

      $('iframeCompletion').style.display = 'block';
    }
    else if ( $('motCtrl').value.length > 3 )
    {
      if ( typeof resultMoteurLibre != 'undefined' ) {
        trouverInfo(resultMoteurLibre);
      }
    }
    else
    {
      var maFrame = window.frames['iframeCompletion'];

      if (typeof maFrame != 'undefined')
      {
        if ( typeof maFrame.document != 'undefined'
             && typeof maFrame.document.getElementById('divCompletionIframe') != 'undefined'
             && typeof(maFrame.document.getElementById('divCompletionIframe')) == 'object' )
        {
          try
          {
            maFrame.document.getElementById('divCompletionIframe').innerHTML = '';
          }
          catch (e)
          {
            maFrame.location.href = document.getElementById('iframeCompletion').getAttribute('iframeurl');
            /* DO NOTHING */
          }
        }
      }
      $('iframeCompletion').style.display = 'none';
    }
  }
}

 /*
  * fonction qui crée l'html de la categorie.
  */
  function insererCategorieHtml(categorie)
  {
    return ('<h2>'+categorie+'</h2>');
  }

 /*
  * fonction qui va permettre de surligner les lettres du mot selectionné
  */
  function surligner(tab, expr)
  {
    tabMotSurligner = new Array();
    var expReg = new RegExp(expr, 'gi');
    for ( var i = 0 ; i < tab.length ; i++ )
    {
      mot = tab[i];
      /* on test si ce n'est pas un mot vide : début et fin de texte */
      if ( mot.length != 0 )
      {
        /* on test si le mot correspond a l'expression recherchée alors on rajoute a chaque caractere un span */

        if ( expReg.test(mot) )
        {
          for (var j = 0 ; j < mot.length; j++ )
          {
            tabMotSurligner.push('<span style="color:red;font-weight:bold;">' + mot.charAt(j) + '</span>');
          }
        }
        else
        {
          for (var j = 0; j < mot.length ; j++)
          {
            chara = mot.charAt(j);

            if ( chara == '\\' && mot.charAt(j+1) == '\'' )
            {
              chara = '\\\'';
              j++;
            }
            tabMotSurligner.push(chara);
          }
        }
      }
    }

    return tabMotSurligner;
  }

 /*
  * fonction permettant de merger les tableaux :
  * le tableau contenant les lettres rouges et le tableau contenant le reste du texte
  */
  function mergeTab(tab1, tab2)
  {
    /* ATTENTION ici les deux tableaux ont toujours la meme longeur. */
    tabRetour = new Array();
    for (var i = 0; i < tab1.length; i++)
    {
      carac = tab1[i];
      carac2 = tab2[i];
      if ( carac.charAt(0) == '<' )
      {
        tabRetour.push(carac);
      }
      else
      {
        tabRetour.push(carac2);
      }
    }
    if (tab1.length == 0)
    {
      tabRetour = tab2;
    }
    return tabRetour;
  }

 /*
  * cette methode est créée car la methode toString insert des "," entre toutes les valeurs du tableau
  */
  function toStringSurligner(tab)
  {
    tabRetour = '';
    for (var i = 0 ; i < tab.length; i++ )
    {
      tabRetour += tab[i];
    }
    return  tabRetour;
  }

 /*
  * cette methode crée le code html de l'iframe
  */
  function insererLigneHtml(id, texte, code_des, tabSearch, table)
  {
    var texteModif = texte;
    var texteSurligner = new Array();
    var tabTexteModif = new Array();
    var tabTexteModif2 = new Array();

    for ( var i = 0 ; i < tabSearch.length ; i++ )
    {
      var motChercher = tabSearch[i];

      if ( motChercher.length != 0 && motChercher != ' ' )
      {
        var maReg  = new RegExp('(' + motChercher + ')', 'gi');
        var tabTexteModif = texteModif.split(maReg);
        /* on rajout ce test car IE ne met pas dans le tableau splitté la valeur recherchée, on la rajoute donc nous même. */
        if (Prototype.Browser.IE)
        {
          var tmp1 = texteModif.match(maReg);
          var tmp2 = new Array();
          var maRegMot  = new RegExp(' ', 'gi');
          var nombreDeMots = texteModif.split(maRegMot);
          var maRegDbMot  = new RegExp('^(' + motChercher + ')', 'i');
          var motifEnDebutDePhrase = texteModif.match(maRegDbMot);
          var insere = false;
          if (motifEnDebutDePhrase != null)
          {
            tmp2.push(tmp1[0]);
            insere = true;
          }

          for (var ii = 0; ii < tabTexteModif.length; ii++)
          {
            if ( tabTexteModif[ii] != '' )
            {
              tmp2.push(tabTexteModif[ii]);
            }
            if ( ii < tabTexteModif.length - 1 )
            {
              if ( tmp1[0] != '' )
              {
                tmp2.push(tmp1[0]);
              }
            }
          }

          var maRegFinMot  = new RegExp('(' + motChercher + ')$', 'i');
          var motifEnFinDePhrase = texteModif.match(maRegFinMot);
          if ((motifEnFinDePhrase != null) && (!insere))
          {
            tmp2.push(tmp1[0]);
          }
          tabTexteModif = tmp2;
        }
        else if (Prototype.Browser.WebKit)
        {
          var tmp1 = texteModif.match(maReg);
          var tmp2 = new Array();
          var maRegMot  = new RegExp(' ', 'gi');
          var nombreDeMots = texteModif.split(maRegMot);
          var maRegDbMot  = new RegExp('^(' + motChercher + ')', 'i');
          for (var ii = 0; ii < tabTexteModif.length; ii++)
          {
            if (tabTexteModif[i] != '' )
            {
              tmp2.push(tabTexteModif[ii]);
            }

            if (ii < (tabTexteModif.length - 1) )
            {
              if ( tmp1[0] != '' )
              {
                tmp2.push(tmp1[0]);
              }
            }
          }
        }
        tabTexteModif2 = surligner(tabTexteModif, motChercher);
        texteSurligner = mergeTab(texteSurligner, tabTexteModif2);
      }
    }

    texteModif = toStringSurligner(texteSurligner);

    // Comportement classique
    theHref = '#';
    var onclick = 'return selected(\'' + code_des + '\',\'' + texte.replace('\'','\\\'') + '\',\'' + table + '\');compClose();return false;';
    if (table == 'destination' || table == 'region' || table == 'offre')
    {
      onclick = "window.parent.location='" + code_des.replace('#', '') + "'";
      if (islabel != 'undefined' && islabel)
      {
        onclick = "window.parent.location='" + '/' + code_mrq + code_des.replace('#', '') + "'";
      }


	  if (project_bottle != 'undefined' && project_bottle == 'candry')
	  {
	  	theHref = code_des.replace('#', '');
	    if (islabel != 'undefined' && islabel)
	  	{
	       theHref = '/' + code_mrq + theHref;
	  	}
	  }
    }


    var html = '<p>';
    html += '<a href="' + theHref + '" pvtrack="' + texte.replace('\'','\\\'') + '" ' + ' onclick="' + onclick + '"' + ' >' + texteModif.replace('\\\'', '\'') + '</a>';
    html += '</p>';
    return html ;
  }

 /*
  * cette methode permet de traiter le cas des accents : pour une recherche "maé", il faut retourner "mae" ET "maé"
  */
  function regExprAccent(search)
  {
    motRegExpr = '';
    for (var i = 0; i < search.length; i++)
    {
      carac = search.substring(i,i+1);
      caracReplace = noaccent(carac);
      if (carac != caracReplace)
      {
        motRegExpr += '[' + carac + caracReplace + ']';
      }
      else
      {
        motRegExpr += caracReplace;
      }
    }
    return motRegExpr;
  }

/* Correspondance html => car */

var tab = new Array();

tab[0] = ['&quot;','"'];
tab[1] = ['&amp;','&'];
tab[2] = ['&euro;','€'];
tab[3] = ['&lt;','‹'];
tab[4] = ['&#140;','Œ'];
tab[5] = ['&#145;','‘'];
tab[6] = ['&#146;','’'];
tab[7] = ['&#147;','“'];
tab[8] = ['&#148;','”'];
tab[9] = ['&#150;','–'];
tab[10] = ['&#151;','—'];
tab[11] = ['&#152;','˜'];
tab[12] = ['&gt;','›'];
tab[13] = ['&oelig;','œ'];
tab[14] = ['&#158;','ž'];
tab[15] = ['&Yuml;','Ÿ'];
tab[16] = ['&iexcl;','¡'];
tab[17] = ['&brvbar;','¦'];
tab[18] = ['&uml;','¨'];
tab[19] = ['&copy;','©'];
tab[20] = ['&laquo;','«'];
tab[21] = ['&raquo;','»'];
tab[22] = ['&Agrave;','À'];
tab[23] = ['&Aacute;','Á'];
tab[24] = ['&Acirc;','Â'];
tab[25] = ['&Atilde;','Ã'];
tab[26] = ['&Auml;','Ä'];
tab[27] = ['&Aring;','Å'];
tab[28] = ['&Aelig;','Æ'];
tab[29] = ['&Ccedil;','Ç'];
tab[30] = ['&Egrave;','È'];
tab[31] = ['&Eacute;','É'];
tab[32] = ['&Ecirc;','Ê'];
tab[33] = ['&Euml;','Ë'];
tab[34] = ['&Igrave;','Ì'];
tab[35] = ['&Iacute;','Í'];
tab[36] = ['&Icirc;','Î'];
tab[37] = ['&Iuml;','Ï'];
tab[38] = ['&eth;','Ð'];
tab[39] = ['&Ntilde;','Ñ'];
tab[40] = ['&Ograve;','Ò'];
tab[41] = ['&Oacute;','Ó'];
tab[42] = ['&Ocirc;','Ô'];
tab[43] = ['&Otilde;','Õ'];
tab[44] = ['&Ouml;','Ö'];
tab[45] = ['&times;','×'];
tab[46] = ['&Oslash;','Ø'];
tab[47] = ['&Ugrave;','Ù'];
tab[48] = ['&Uacute;','Ú'];
tab[49] = ['&Ucirc;','Û'];
tab[50] = ['&Uuml;','Ü'];
tab[51] = ['&Yacute;','Ý'];
tab[52] = ['&thorn;','Þ'];
tab[53] = ['&szlig;','ß'];
tab[54] = ['&agrave;','à'];
tab[55] = ['&aacute;','á'];
tab[56] = ['&acirc;','â'];
tab[57] = ['&atilde;','ã'];
tab[58] = ['&auml;','ä'];
tab[59] = ['&aring;','å'];
tab[60] = ['&aelig;','æ'];
tab[61] = ['&ccedil;','ç'];
tab[62] = ['&egrave;','è'];
tab[63] = ['&eacute;','é'];
tab[64] = ['&ecirc;','ê'];
tab[65] = ['&euml;','ë'];
tab[66] = ['&igrave;','ì'];
tab[67] = ['&iacute;','í'];
tab[68] = ['&icirc;','î'];
tab[69] = ['&iuml;','ï'];
tab[70] = ['&eth;','ð'];
tab[71] = ['&ntilde;','ñ'];
tab[72] = ['&ograve;','ò'];
tab[73] = ['&oacute;','ó'];
tab[74] = ['&ocirc;','ô'];
tab[75] = ['&otilde;','õ'];
tab[76] = ['&ouml;','ö'];
tab[77] = ['&divide;','÷'] ;
tab[78] = ['&oslash;','ø'];
tab[79] = ['&ugrave;','ù'];
tab[80] = ['&uacute;','ú'];
tab[81] = ['&ucirc;','û'];
tab[82] = ['&uuml;','ü'];
tab[83] = ['&yacute;','ý'];
tab[84] = ['&thorn;','þ'];
tab[85] = ['&yuml;','ÿ'];

/* Permet la conversion des car html en car normaux */
function convertHTML2CAR(text){
	var converted_text = text;
	for (var x = 0; x < tab.length; x++ )
	{
		var reg = new RegExp( tab[x][0], "g");
		converted_text = converted_text.replace(reg, tab[x][1]);
	}
	return(converted_text);
}

 /*
  * Methode Principale, elle parcourt toute les offres, ... de toutes les categories
  * et teste si le mot recherché y est contenu.
  * si oui traitement de cette offre, sinon passage à la suivante.
  */
  function trouverInfo(resultMoteurLibre)
  {
  	htmlDiv = '';
    search = $('motCtrl').value;

    tabSearch = search.split(/ /);

    for ( var i = 0 ; i < tabSearch.length ; i++ )
    {
      search = tabSearch[i];
      search = regExprAccent(search);
      tabSearch[i] = search;
    }

    innerHTMLCat = '';
    /* Parcours toutes les categories */
    for ( var cat = 0 ; cat < resultMoteurLibre.length ; cat++ )
    {
      innerHTMLOfr = '';
      categorie = resultMoteurLibre[cat][0];
      ofrsCat = resultMoteurLibre[cat][1];

      /* Parcours toutes les offres d'une categorie */
      for ( var ofr = 0 ; ofr < ofrsCat.length ; ofr++ )
      {
        /* Teste si l'offre valide au moins le premier mot */
        var texte = ofrsCat[ofr][0].unescapeHTML().replace('\\\'','\'');

        var texteSearch = convertHTML2CAR(texte);
        //var texteSearch = texte;

        var expReg = new RegExp(search, 'gi');
        var testReg = expReg.test(texteSearch);
        //var testReg = expReg.test(texte);

		//alert(' search : ' + search + ',\n texte : ' + convertHTML2CAR(texte) + ',\n result : ' + testReg);

        if (testReg)
        {
          addOfre = true;
          /* Parcours tout les mots à chercher sauf le premier */
          tabSearchSize = tabSearch.length;
          for ( var i = 0 ; i < tabSearchSize ; i++ )
          {
            /* Mot non vide on le teste */
            if ( tabSearch[i] != '' && tabSearch[i] != ' ' && addOfre == true)
            {
              var expReg2 = new RegExp(tabSearch[i], 'gi');
              /* trace(expReg2); */
              /* si le mot n'est pas dans le texte alors on n'ajoute pas cette offre */
              //if ( !expReg2.test(texte) )
              if ( !expReg2.test(texteSearch) )
              {
                addOfre = false;
              }
            }
          }
          /* si tout les mots sont dans l'offre alors on ajoute l'offre */
          if (addOfre)
          {
            innerHTMLOfr += insererLigneHtml(cat + '_' + ofr, texte, ofrsCat[ofr][1], tabSearch, ofrsCat[ofr][2]);
          }
        }
        else
        {
          /* trace(texte + " = " + testReg + " = " + expReg.test(texte)); */
        }
      }

      if ( innerHTMLOfr != '' )
      {
        innerHTMLOfr = insererCategorieHtml(categorie) + innerHTMLOfr;
      }
      innerHTMLCat += innerHTMLOfr;
    }

    htmlDiv += innerHTMLCat;
    if ( htmlDiv == '' )
    {
      htmlDiv = '<div><span style="font-weight:bold;font-size:14px">' + noResult + '</span></div>';
    }
    htmlDiv = '<div id="moteurLibreOffres">' + htmlDiv + '</div>';
    $('iframeCompletion').style.display = 'block';
    $('divCompletion').innerHTML = htmlDiv;
    $('divCompletion').style.height= 'auto';
    $('divCompletion').innerHTML += '<br/><div style="position:absolute;bottom:0px;background-color:#E0E0E0;width:100%;text-align:center;"><a href="#" class="infos" onclick="$(\'divCompletion\').style.height=\'auto\';return false;">Agrandir</a><a href="#" class="infos" onclick="if ($(\'divCompletion\').style.height <= \'200px\'){$(\'divCompletion\').style.height=\'15px\';}else{$(\'divCompletion\').style.height = \'200px\'};return false;">Reduire</a></div><div style="position:absolute;bottom:0px;right:20px;width:100%;text-align:right;"><a href="#" class="infos" onclick="if ($(\'divCompletion\').style.overflowY == \'auto\'){$(\'divCompletion\').style.overflowY =\'hidden\';}else{$(\'divCompletion\').style.overflowY = \'auto\'};return false;">Scroll</a></div>';
    window.frames["iframeCompletion"].window.document.getElementById('divCompletionIframe').innerHTML = htmlDiv;
    window.frames["iframeCompletion"].document.getElementById('divCompletionIframe').innerHTML = htmlDiv;
    PvTracker.loadIFrameMoteurSaisie();
  };

  /*
   * Methode permettant de mettre l'ensemble des accents
   */
  function noaccent(chaine)
  {
    tmp = chaine.replace(/[àâäa]/gi,'àâäaA');
    tmp = tmp.replace(/[éèêëe]/gi,'éèêëeE');
    tmp = tmp.replace(/[îïi]/gi,'îïiI');
    tmp = tmp.replace(/[ôöo]/gi,'ôöoO');
    tmp = tmp.replace(/[ùûüu]/gi,'ùûüuU');
    return tmp;
  }
