Utilisateur:Deep silence/vector.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
// ReferencesPopup
//////////////////////ZONE PERSONNALISABLE//////////////////////
// Percent of window width (1.0 == 100%)
var referencesPopup_max_width = 0.25
// Millisecs, set to zero to open immediately
var referencesPopup_open_delay = 200
// Millisecs, set to zero to close immediately
var referencesPopup_hide_delay = 800

/////////////////FIN DE LA ZONE PERSONNALISABLE/////////////////
importScript( "Utilisateur:Deep silence/ReferencesPopup.js" );
//importScript( "Utilisateur:Deep silence/ReferencesPopupTEST.js" );



// MENU POPUP
//////////////////////ZONE PERSONNALISABLE//////////////////////
var MPU_key = '²';				// Obligatoire/Mandatory
var MPU_modifier = 'Alt';			// Optionnel/Optional
var PMU_menu_definition = 'MenuDefinition'; 	// Optionnel/Optional
//var PMU_menu_refresh = true;			// Only for debug
/////////////////FIN DE LA ZONE PERSONNALISABLE/////////////////
importScript( "Utilisateur:Deep silence/MenuPopup.js" );
//importScript( "Utilisateur:Deep silence/MenuPopupTEST.js" );




// FONCTION DE CHARGEMENT DES CODES 
importScript( "Utilisateur:Dodoïste/aide.js" );





/*
*
*  Fonctions de gestion des suivis
*
*/
var suiviManagerAllPages = new Array();
                                        
function SuiviManagerRegexp(regexp)
{
        var match = new RegExp(regexp);

        for (var i=0;i<suiviManagerAllPages.length;i++) {
                var pageName = suiviManagerAllPages[i].childNodes[0].getAttribute("value");
                if (match.test(pageName)) {
                        suiviManagerAllPages[i].childNodes[0].checked=true; 
                }
        }
}
                
function SuiviManagerLiensRouges()
{

        for (var i=0;i<suiviManagerAllPages.length;i++) {
                var pageClass = suiviManagerAllPages[i].childNodes[2].getAttribute("class");
                if (pageClass && pageClass=="new") {
                        suiviManagerAllPages[i].childNodes[0].checked=true; 
                }
        }
}

function SuiviManagerDeselect()
{
        for (var i=0;i<suiviManagerAllPages.length;i++) {
                suiviManagerAllPages[i].childNodes[0].checked=false; 
        }
}


function SuiviManager() {
        if (mw.config.get('wgCanonicalSpecialPageName') !== 'EditWatchlist') return; 
        
        var a=-1;
        var interfaceMsg = new Array(); 
        var regexpList = new Array(); 
        
        //////////////////////////////////////////////////
        // Expressions régulières et liens de l'interface
        //
        // besoin d'aide pour les regexp ? 
        // http://www.commentcamarche.net/javascript/jsregexp.php3
        //////////////////////////////////////////////////

        interfaceMsg[++a]       = "<b>Tout cocher</b>";
        regexpList[a]           = "^.*"; 
        
        interfaceMsg[++a]       = "Utilisateurs";
        regexpList[a]           = "^Utilisateur:";
        
        interfaceMsg[++a]       = "Wikipédia:*"; 
        regexpList[a]           = "^Wikipédia:";
        
        interfaceMsg[++a]       = "Sous-pages de PàS"; 
        regexpList[a]           = "^Wikipédia:Pages à supprimer\/";

        interfaceMsg[++a]       = "Sous-pages de PàV"; 
        regexpList[a]           = "^Wikipédia:Pages à vérifier\/";
        
        interfaceMsg[++a]       = "Pages du bistro"; 
        regexpList[a]           = "^Wikipédia:Le Bistro\/";
        
        interfaceMsg[++a]       = "Images"; 
        regexpList[a]           = "^Image:";
        
        interfaceMsg[++a]       = "Modèles"; 
        regexpList[a]           = "^Modèle:"; 
        
        interfaceMsg[++a]       = "Aide"; 
        regexpList[a]           = "^Aide:"; 
        
        interfaceMsg[++a]       = "Catégories"; 
        regexpList[a]           = "^Catégorie:";      
        
        interfaceMsg[++a]       = "Portails"; 
        regexpList[a]           = "^Portail:";        

        //////////////////////////////////////////////////
        var topTag = document.getElementById("contentSub")
        
        // récupère toutes les pages
        var watchlist = document.getElementsByTagName("ul");

        for (u=0;u<watchlist.length;u++) {
                        var entries = watchlist[u].getElementsByTagName("li"); 
                        for (i=0;i<entries.length;i++) {
                                suiviManagerAllPages.push(entries[i]);
                        }
        }
        
        // prépare la mini-interface
        var str = "<div style=\"background-color:#8ecfe4;font-size:1px;height:8px;border:1px solid #AAAAAA;-moz-border-radius-topright:0.5em;-moz-border-radius-topleft:0.5em;\"></div>"
        + "<div style=\"border:1px solid #6ac1de;border-top:0px solid white;padding:5px 5px 0 5px;margin-bottom:3ex;\"><p>"
        + "<div style=\"float: left; text-align: left; white-space: nowrap;\"></div>"
        
        for (var cpt = 0; cpt < interfaceMsg.length; cpt ++) {
                str += "<a href=\"javascript:SuiviManagerRegexp('" + regexpList[cpt] + "')\">"
                                                + interfaceMsg[cpt]
                                                + " ·</a> "
                }
        
                str += "<a href=\"javascript:SuiviManagerLiensRouges()\">"
                        + "Retirer les liens rouges"
                        + " ·</a> "
                        
                str += "<a href=\"javascript:SuiviManagerDeselect()\">"
                        + "<b>Enlever toutes les coches</b>"
                        + " ·</a> "
                                
        topTag.innerHTML =       topTag.innerHTML + "<br clear=all />" + str + "<p></div>"
                
}
// lancement de la fonction au chargement de la page
$(SuiviManager);




/*
 * Liens rouges
 *
 */
////////////////////// ZONE PERSONNALISABLE //////////////////////

// Le script est automatiquement lancé si l'espace de nom et l'action sont dans les variables suivantes
var liensRougesNSOuvrir = [0,2,3,4,10,11,14];
var liensRougesActionOuvrir = [];

// Les liens pointant vers les espaces de nom suivants ne sont jamais traités
var liensRougesNSExclus = new String('Discuter|Discussion .*|Utilisateur:');

///////////////// FIN DE LA ZONE PERSONNALISABLE /////////////////
if(!Array.indexOf) Array.prototype.indexOf = function(w) { for(var i=0; i<this.length; i++) if(this[i] == w) return i; return -1; }
function liensRouges(w)
{
 if(!w)
 {
  if(liensRougesNSOuvrir.indexOf(mw.config.get('wgNamespaceNumber')) == -1 || (!liensRougesActionOuvrir.lenght==0 && liensRougesActionOuvrir.indexOf(mw.config.get('wgAction')) == -1)) return;
 }
 var allLinks = document.getElementById('bodyContent').getElementsByTagName('a');
 var reg1 = new RegExp(' ','g');
 var reg2 = new RegExp('^('+liensRougesNSExclus+'):','i');
 for(i=0; i<allLinks.length; i++)
 {
  if(allLinks[i].getAttribute('class') == 'new')
  {
   titre = allLinks[i].getAttribute('title');
   if(reg2.test(titre)) continue;
   titre = titre.replace(/ \(.*exist.*\)/, '');
   var newElement1 = document.createElement('sup');
   newElement1.className = 'exposant';
   newElement1.innerHTML = 
     '<a href="/wiki/Special:Whatlinkshere/'+titre.replace(reg1,'_')+'" title="Pages liées">←</a>';
   var newElement2 = document.createElement('sup');
   newElement2.className = 'exposant';
   newElement2.innerHTML =
     '<a href="http://www.google.fr/search?sitesearch=fr.wikipedia.org&fulltext=Rechercher&q='+titre+'" title="Google">?</a>';
   allLinks[i].parentNode.insertBefore(newElement2, allLinks[i].nextSibling);
   allLinks[i].parentNode.insertBefore(newElement1, allLinks[i].nextSibling);
  }
 }
}
if(mw.config.get('wgNamespaceNumber') != -1) addOnloadHook(liensRouges);





/*
 * Résumé Deluxe
 *
 * Ajoute des commentaires de modification prédéfinis
 *
 * Auteur : Dake
 * Contributions : Pabix, Tieno
 * Date de dernière révision : 12 novembre 2006
 */

//////////////////////ZONE PERSONNALISABLE//////////////////////
var resumedeluxeTitles = new Array();
with (resumedeluxeTitles) {
        push("ortho");
        push("- typo");
        push("- cat");
        push("- cat + précise");
        push("- cats imbriquées");
        push("- interwiki");
        push("- wikification");
        push("- redirection");
        push("- style");
        push("- revert");
        push("- refonte");
        push("- neutralisation");
        push("- liens rouges hc");
        push("- wikilink");
        push("- homo");

}
var resumedeluxeInputs= new Array();
with (resumedeluxeInputs) {
        push("orthographe");
        push("typographie");
        push("+ cats");
        push("cat plus précise");
        push("- cats imbriquées");
        push("interwikis");
        push("wikification");
        push("redirection");
        push("style");
        push("revert");
        push("refonte");
        push("neutralisation");
        push("- liens rouges hc");
        push("+ wikilink");
        push("homonymie");
}
/////////////////FIN DE LA ZONE PERSONNALISABLE/////////////////
function addToSummary(str)
{
        var resum = document.editform.wpSummary.value;
        if(resum != 0 && resum.indexOf("*/") < resum.length - 2) {
                document.editform.wpSummary.value += ", ";
        }
        document.editform.wpSummary.value += str;
}

function DeluxeSummary()
{
        var sumLbl = document.getElementById("wpSummaryLabel");
        if(sumLbl) {
                var sumInput = document.getElementById("wpSummary");
                sumInput.style.width = "95%";
                var str = "Messages prédéfinis : ";
                for(var cpt = 0; cpt < resumedeluxeTitles.length; cpt ++) {
                        var tmp = resumedeluxeInputs[cpt];
                        str += "<a href=\"javascript:addToSummary('" + tmp.replace( /[']/g , "\\'") + "')\""
                                + " class=\"sumLink\" title=\"Ajouter dans la boîte de résumé\">"
                                + resumedeluxeTitles[cpt]
                                + "</a> ";
                }
                sumLbl.innerHTML = str + "<br />" + sumLbl.innerHTML;
        }
}
$(DeluxeSummary);










/**
 * Ajoute des liens après les catégories pour rapidement
 * supprimer / modifier / ajouter une catégorie sur un article.
 * Utilise Ajax et l'api MediaWiki pour rechercher une catégorie.
 * Version adaptée pour WP:fr de [[:commons:MediaWiki:HotCat.js]]
 * 
 * Auteur original : Magnus Manske
 * Adaptation pour WP:fr : Zelda
 * {{Catégorisation JS}}
 */

// VARIABLES PERSONNALISABLES

// Suggestion delay in ms
var hotcat_suggestion_delay = 300;

// Taille de la liste déroulante (en items)
var hotcat_list_size = 10;

// Nombre de categories suggérées lors de la recherche
var hotcat_list_items = 70;

// Permet d'enregistrer automatiquement la modif sans repasser par la fenêtre d'édition
// var hotcat_autocommit = false;

// Permet d'afficher la liste de suggestion vers le bas
// var hotcat_list_down = true;

// FIN DE LA PERSONNALISATION DES VARIABLES

var hotcat_running = 0 ;
var hotcat_last_v = "" ;
var hotcat_exists_yes = "http://upload.wikimedia.org/wikipedia/commons/thumb/b/be/P_yes.svg/20px-P_yes.svg.png" ;
var hotcat_exists_no = "http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/P_no.svg/20px-P_no.svg.png" ;

addOnloadHook ( hotcat ) ;

function hotcat () {
  if ( hotcat_check_action() ) return ; // Edited page, reloading anyway

  var catlinks = document.getElementById("catlinks");

  if (! catlinks && mw.config.get('wgNamespaceNumber') %2 == 0) { // all except discussion
   // let's create a fake one
   var bodyC = document.getElementById("bodyContent");
   catlinks = document.createElement("div");
   catlinks.id = "catlinks";
   catlinks.appendChild(document.createElement("div"));
   catlinks.firstChild.className = "catlinks";
   catlinks.firstChild.appendChild(document.createElement("div"));
   catlinks.firstChild.firstChild.id = "mw-normal-catlinks";
   bodyC.appendChild(catlinks);
  }

  var catline = document.getElementById ('mw-normal-catlinks'); // Since MW 1.13alpha
  if (catline == null)
     catline = getElementsByClassName ( document , "p" , "catlinks" ) [0] ; // Earlier versions

  if ( catline == null || typeof catline == 'undefined' ) return ;

  hotcat_modify_existing ( catline ) ;
  hotcat_append_add_span ( catline ) ;
}

function hotcat_append_add_span ( catline ) {
  var span_add = document.createElement ( "span" ) ;
  var span_sep = document.createTextNode ( " | " ) ;
  if ( catline.firstChild ) catline.appendChild ( span_sep ) ;
  catline.appendChild ( span_add ) ;
  hotcat_create_span ( span_add ) ;
}

String.prototype.ucFirst = function () {
   return this.substr(0,1).toUpperCase() + this.substr(1,this.length);
}

function hotcat_modify_span ( span , i ) {
  var cat_title = span.firstChild.getAttribute ( "title" ) ;
  // Removing leading Category:
  cat_title = cat_title.substr(cat_title.indexOf(":") + 1);
  var sep1 = document.createTextNode ( " " ) ;
  var a1 = document.createTextNode ( "(-)" ) ;
  var remove_link = document.createElement ( "a" ) ;
  remove_link.href = "javascript:hotcat_remove(\"" + cat_title + "\");" ;
  remove_link.appendChild ( a1 ) ;
  span.appendChild ( sep1 ) ;
  span.appendChild ( remove_link ) ;

  var mod_id = "hotcat_modify_" + i ;
  var sep2 = document.createTextNode ( " " ) ;
  var a2 = document.createTextNode ( "(±)" ) ;
  var modify_link = document.createElement ( "a" ) ;
  modify_link.id = mod_id ;
  modify_link.href = "javascript:hotcat_modify(\"" + mod_id + "\");" ;
  modify_link.appendChild ( a2 ) ;
  span.appendChild ( sep2 ) ;
  span.appendChild ( modify_link ) ;
}

function hotcat_modify_existing ( catline ) {
  var spans = catline.getElementsByTagName ( "span" ) ;
  for ( var i = 0 ; i < spans.length ; i++ ) {
    hotcat_modify_span ( spans[i] , i ) ;
  }
}

function hotcat_remove ( cat_title ) {
  var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
  if (window.confirm("Voulez-vous vraiment supprimer la catégorie '" + cat_title + "' ?")) {
    document.location = editlk + '&hotcat_removecat=' + encodeURIComponent(cat_title) ;
  }
}

function hotcatGetParamValue(paramName, h) {
        if (typeof h == 'undefined' ) { h = document.location.href; }
        var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)');
        var m=cmdRe.exec(h);
        if (m) {
                try {
                        return decodeURIComponent(m[1]);
                } catch (someError) {}
        }
        return null;
}

function hotcat_check_action () {
  var ret = 0 ;
  if ( mw.config.get('wgAction') != "edit" ) return ret ; // Not an edit page, so no business...
  var summary = new Array () ;
  var t = document.editform.wpTextbox1.value ;
  var prevent_autocommit = 1 ;
  if ( typeof hotcat_autocommit != 'undefined' && hotcat_autocommit ) prevent_autocommit = 0 ;

  // Remove existing category?
  var hrc = hotcatGetParamValue('hotcat_removecat') ;
  // Add new category?
  var hnc = hotcatGetParamValue('hotcat_newcat') ;

  if ( typeof hrc != "undefined" && hrc != null && hrc != "" ) {
    var hcre = new RegExp("(\\s*)\\[\\[ *(?:Catégorie|Category) *: *" + hrc.replace(/([\\\^\$\*\+\?\.\|\{\}\[\]\(\)])/g, "\\$1") + " *(\\|[^\\]]*)?\\]\\]", "gi");
    var matches = t.match(hcre);
    if (matches != null && matches.length == 1) { // Found one occurrence of the category - good!
      if ( typeof hnc != "undefined" && hnc != null && hnc != "" ) {
        t = t.replace(hcre, "$1["+"[Catégorie:" + hnc + "$2]]");
        summary.push ( "Modification de la catégorie ["+"[Catégorie:" + hrc + "]] → ["+"[Catégorie:" + hnc + "]]" ) ;
      } else {
        t = t.replace(hcre, "");
        summary.push ( "Retrait de la catégorie ["+"[Catégorie:" + hrc + "]]" ) ;
      }
      ret = 1 ;
    } else {
     // alert ( "Impossible de trouver une occurrence unique de \"" + hrc + "\" - elle est peut-être incluse via un modèle" ) ;
      prevent_autocommit = 1 ;
    }
  } else {
    // Only adding?
    if ( typeof hnc != "undefined" && hnc != null && hnc != "" ) {
      // Looking for last cat
      var re = /\[\[(?:Catégorie|Category):[^\]]+\]\]/ig
      var index = -1;
      while (re.exec(t) != null) index = re.lastIndex;
      var txt = "["+"[Catégorie:" + hnc + "]]" ;
      if (index < 0) {
        t = t + '\n' + txt ;
      } else {
        t = t.substring(0, index) + '\n' + txt + t.substring(index);
      }
      summary.push ( "Ajout rapide de la catégorie ["+"[Catégorie:" + hnc + "]]" ) ;
      ret = 1 ;
    }
  }

  if ( ret ) {
    document.editform.wpTextbox1.value = t ;
    if ( !prevent_autocommit ) {
      document.getElementById("bodyContent").style.display = "none" ; // Hiding the entire edit section so as not to tempt the user into editing...
      document.editform.wpSave.click();
    }
  }

  // This is the end, my friend, the end...
  return ret ;
}

function hotcat_clear_span ( span_add ) {
  while ( span_add.firstChild ) span_add.removeChild ( span_add.firstChild ) ;
}

function hotcat_create_span ( span_add ) {
  hotcat_clear_span ( span_add ) ;
  var a_add = document.createElement ( "a" ) ;
  var a_text = document.createTextNode ( "(+)" ) ;
  span_add.id = "hotcat_add" ;
  a_add.href = "javascript:hotcat_add_new()" ;
  a_add.appendChild ( a_text ) ;
  span_add.appendChild ( a_add ) ;
}

function hotcat_modify ( link_id ) {
  var link = document.getElementById ( link_id ) ;
  var span = link.parentNode ;
  var catname = span.firstChild.firstChild.data ;
  
  while ( span.firstChild.nextSibling ) span.removeChild ( span.firstChild.nextSibling ) ;
  span.firstChild.style.display = "none" ;
  hotcat_create_new_span ( span , catname ) ;
  hotcat_last_v = "" ;
  hotcat_text_changed () ; // Update icon
}

function hotcat_add_new () {
  var span_add = document.getElementById ( "hotcat_add" ) ;
  hotcat_clear_span ( span_add ) ;
  hotcat_last_v = "" ;
  hotcat_create_new_span ( span_add , "" ) ;
}

function hotcat_create_new_span ( thespan , init_text ) {
  var form = document.createElement ( "form" ) ;
  form.method = "post" ;
  form.onsubmit = function () { hotcat_ok(); return false; } ;
  form.id = "hotcat_form" ;
  form.style.display = "inline" ;

  var list = document.createElement ( "select" ) ;
  list.id = "hotcat_list" ;
  list.onclick = function () { document.getElementById("hotcat_text").value = document.getElementById("hotcat_list").value ; hotcat_text_changed() ; } ;
  list.ondblclick = function () { document.getElementById("hotcat_text").value = document.getElementById("hotcat_list").value ; hotcat_text_changed() ; hotcat_ok(); } ;
  list.style.display = "none" ;

  var text = document.createElement ( "input" ) ;
  text.size = 40 ;
  text.id = "hotcat_text" ;
  text.type = "text" ;
  text.value = init_text ;
  text.onkeyup = function () { window.setTimeout("hotcat_text_changed();", hotcat_suggestion_delay ); } ;

  var exists = document.createElement ( "img" ) ;
  exists.id = "hotcat_exists" ;
  exists.src = hotcat_exists_no ;

  var explore = document.createElement ( "input" ) ;
  explore.type = "button" ;
  explore.value = "Explorer" ;
  explore.onclick = hotcat_explore ;

  var OK = document.createElement ( "input" ) ;
  OK.type = "button" ;
  OK.value = "OK" ;
  OK.onclick = hotcat_ok ;

  var cancel = document.createElement ( "input" ) ;
  cancel.type = "button" ;
  cancel.value = "Annuler" ;
  cancel.onclick = hotcat_cancel ;

  form.appendChild ( list ) ;
  form.appendChild ( text ) ;
  form.appendChild ( exists ) ;
  form.appendChild ( explore ) ;
  form.appendChild ( OK ) ;
  form.appendChild ( cancel ) ;
  thespan.appendChild ( form ) ;
  text.focus () ;
}

function hotcat_explore () {
  var text = document.getElementById ( "hotcat_text" ) ;
  var v = text.value ;

  // Empty category ?
  if ( v == "" ) {
    hotcat_cancel() ;
    return ;
  }

  var url = 'http://' + location.hostname + "/wiki/Catégorie:" + encodeURIComponent( v ) ;

  window.open(url, '_blank', 'dependent=yes,location=yes,menubar=yes,resizable=yes,scrollbars=yes,status=yes,toolbar=yes');
}



function hotcat_ok () {
  var text = document.getElementById ( "hotcat_text" ) ;
  var v = text.value ;

  // Empty category ?
  if ( v == "" ) {
    hotcat_cancel() ;
    return ;
  }

  var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
  var url = editlk + '&hotcat_newcat=' + encodeURIComponent( v ) ;

  // Editing existing?
  var span = text.parentNode.parentNode ; // span.form.text
  if ( span.id != "hotcat_add" ) { // Not plain "addition"
    var cat_title = span.firstChild.getAttribute ( "title" ) ;
    // Removing leading Category:
    cat_title = cat_title.substr(cat_title.indexOf(":") + 1);
    url += '&hotcat_removecat=' + encodeURIComponent( cat_title ) ;
  }

  document.location = url ;
}

function hotcat_cancel () {
  var span = document.getElementById("hotcat_form").parentNode ;
  if ( span.id == "hotcat_add" ) {
    hotcat_create_span ( span ) ;
  } else {
    while ( span.firstChild.nextSibling ) span.removeChild ( span.firstChild.nextSibling ) ;
    span.firstChild.style.display = "" ;
    for ( var i = 0 ; i < span.parentNode.childNodes.length ; i++ ) {
      if ( span.parentNode.childNodes[i] != span ) continue ;
      hotcat_modify_span ( span , i ) ;
      break ;
    }
  }
}

function hotcat_text_changed () {
  if ( hotcat_running ) return ;
  var text = document.getElementById ( "hotcat_text" ) ;
  var v = text.value.ucFirst() ;
  if ( hotcat_last_v == v ) return ; // Nothing's changed...

  hotcat_running = 1 ;
  hotcat_last_v = v ;

  if ( v != "" ) {
    var url = mw.config.get('wgServer') + "/" + mw.config.get('wgScriptPath') + "/api.php?format=xml&action=query&list=allpages&apnamespace=14&apfrom=" + encodeURIComponent( v ) + "&aplimit=" + encodeURIComponent( hotcat_list_items );
    if ( typeof ( hotcat_xmlhttp ) != "undefined" ) hotcat_xmlhttp.abort() ; // Just to make sure...
    hotcat_xmlhttp = new XMLHttpRequest() ;
    hotcat_xmlhttp.open('GET', url, true);
    hotcat_xmlhttp.onreadystatechange = function () {
          if ( typeof hotcat_xmlhttp == "undefined" ) return ;
          if (hotcat_xmlhttp.readyState == 4) {
              var xml = hotcat_xmlhttp.responseXML ;
              if ( xml == null ) return ;
              var pages = xml.getElementsByTagName( "p" ) ;
              var titles = new Array () ;
              for ( var i = 0 ; i < pages.length ; i++ ) {
                var s = pages[i].getAttribute("title");
                // Removing leading "Category:"
                s = s.substr(s.indexOf(":") + 1);
                if ( s.substr ( 0 , hotcat_last_v.length ) != hotcat_last_v ) break ;
                titles.push ( s ) ;
              }
              hotcat_show_suggestions ( titles ) ;
          }
      };
    hotcat_xmlhttp.send(null);
  } else {
    var titles = new Array () ;
    hotcat_show_suggestions ( titles ) ;
  }
  hotcat_running = 0 ;
}

function hotcat_show_suggestions ( titles ) {
  var text = document.getElementById ( "hotcat_text" ) ;
  var list = document.getElementById ( "hotcat_list" ) ;
  var icon = document.getElementById ( "hotcat_exists" ) ;
  if ( titles.length == 0 ) {
    list.style.display = "none" ;
    icon.src = hotcat_exists_no ;
    return ;
  }
  
  var listh = hotcat_list_size * 20 ;
  if (titles.length < hotcat_list_size) {
    listh = titles.length * 20 ;
  }
  var nl = parseInt ( text.parentNode.offsetLeft ) - 1 ;
  var nt = parseInt(text.offsetTop) - listh ;
  // Parameter to show suggestion list beneath categories instead of above
  if (typeof hotcat_list_down != "undefined" && hotcat_list_down) {
     nt = text.offsetTop + text.offsetHeight;
  }
  list.size = 5 ;
  list.style.align = "left" ;
  list.style.zIndex = 5 ;
  list.style.position = "absolute" ;
  list.style.top = nt + "px" ;
  list.style.width = text.offsetWidth + "px" ;
  list.style.height = listh + "px" ;
  list.style.left = nl + "px" ;
  while ( list.firstChild ) list.removeChild ( list.firstChild ) ;
  for ( var i = 0 ; i < titles.length ; i++ ) {
    var opt = document.createElement ( "option" ) ;
    var ot = document.createTextNode ( titles[i] ) ;
    opt.appendChild ( ot ) ;
    opt.setAttribute( "value", titles[i] );
    list.appendChild ( opt ) ;
  }
  
  list.style.display = "block" ;

  icon.src = hotcat_exists_yes ;

  var first_title = titles.shift () ;
  if ( first_title == hotcat_last_v ) return ;

  var suggestion = first_title;
  
  text.value = suggestion  ;
  if (text.createTextRange) {
    // IE
    var ra = text.createTextRange();
    ra.moveStart("character", hotcat_last_v.length);
    ra.moveEnd("character", suggestion.length);
    ra.select();
  } else if( is_khtml ) {
    text.setSelectionRange( hotcat_last_v.length, suggestion.length );
  } else {
    text.selectionStart = hotcat_last_v.length ;
    text.selectionEnd = suggestion.length ;
  }
}