/*

LiveWP

Version modifiée basée sur la version du 1er avril 2007 a 00:49 :

http://fr.wikipedia.org/w/index.php?title=User:EDUCA33E/LiveRC.js&oldid=15525649

Variables globales

 */

if (wgTitle == "Monobook.js/E-LiveRC") {

  // Appel des parametres par défaut de LiveRC ;
  // ///////////////////////////////////////////
  document.write('<script type="text/javascript" src="' 
             + wgServer + wgScriptPath + '/index.php?title='+wgPageName+'/LiveRCparam.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

  // Appel des parametres utilisateur ;
  // ///////////////////////////////////////////
  document.write('<script type="text/javascript" src="' 
             + wgServer + wgScriptPath + '/index.php?title=Utente:'+encodeURI(wgUserName)+'/LiveRCparam.js' 
             + '&action=raw&ctype=text/javascript&dontcountme=s"></script>');

  var cssNode = document.createElement('link');
  cssNode.type = 'text/css';
  cssNode.rel = 'stylesheet';
  cssNode.href = 'http://pl.wikipedia.org/skins-1.5/common/diff.css?90';
  cssNode.media = 'screen';
  cssNode.title = 'dynamicLoadedSheet';
  document.getElementsByTagName("head")[0].appendChild(cssNode);

  document.write('<script type="text/javascript" src="http://pl.wikipedia.org/skins-1.5/common/diff.js?90"></script>');

  var lastrevid,lasttimestamp=1; // Timestamp d'initialisation;

  // Découpage de l'URL et de ses parametres;

  var _GET = new Array();
  var _uri = ___location.href;
  var _temp_get_arr = _uri.substring(_uri.indexOf('?')+1, _uri.length).split("&");
  var _temp_get_arr_1 = new Array();
  for(_get_arr_i=0; _get_arr_i<_temp_get_arr.length; _get_arr_i++){
    _temp_get_arr_1 = _temp_get_arr[_get_arr_i].split("=");
    _GET[decodeURIComponent(_temp_get_arr_1[0])] = decodeURIComponent(_temp_get_arr_1[1]);
  }
  delete _uri; delete _temp_get_arr; delete _temp_get_arr_1;

  // Variables d'état (pour test sur rc.state);

  var IP          = 1;
  var BOT         = 2 << 0;
  var SYSOP       = 2 << 1;
  var NEW         = 2 << 2;
  var MINOR       = 2 << 3;
  var NEWNS       = 2 << 4;
  var RENAMED     = 2 << 5;
  var PATROLLED   = 2 << 6;
  var REVERT      = 2 << 7;
  var BLANKING    = 2 << 8;
  var REPLACED    = 2 << 9;
  var REDIRECT    = 2 << 10;
  var CATEGORIZED = 2 << 11;
  var LOCK        = 2 << 12;
  var FULLLOCK    = 2 << 13;
  var HOMONYMIE   = 2 << 14;
  var ADQ         = 2 << 15;
  var COPYRIGHT   = 2 << 16;
  var PAS         = 2 << 17;
  var UPLOAD      = 2 << 18;
  var NEWUSER     = 2 << 19;
  var BLOCK       = 2 << 20;
  var DELETE      = 2 << 21;
  var MOVE        = 2 << 22;
  var PROTECT     = 2 << 23;

  var lstSysop = new Array();   // Sysop list;
  var lstContact = new Array(); // Contact list;
  var lstIPClass = new Array(); // IPClass list;
  var lstRevoc = new Array();   // Reverted list;
  var lstHidden = new Array();  // Hidden users list;

  // Is user Sysop;
  var lrcAdmin = false; // default value;
  if(wgUserGroups.indexOf("sysop") != -1)
    lrcAdmin = true;

  // Watchlist;
  var lstSuivi = new Array();
  var lstSuiviHH = new Array();
  var lstSuivirevid = new Array();
  var lstSuivioldid = new Array();
  var lstSuivircid = new Array();
}

/*

Utilities

 */
var wpajax = {
  http: function(bundle) {
    // mandatory: bundle.url
    // optional:  bundle.async
    // optional:  bundle.method
    // optional:  bundle.headers
    // optional:  bundle.data
    // optional:  bundle.onSuccess (xmlhttprequest, bundle)
    // optional:  bundle.onFailure (xmlhttprequest, bundle)
    // optional:  bundle.otherStuff OK too, passed to onSuccess and onFailure
    var xmlhttp;
    try {
      xmlhttp = new XMLHttpRequest(); 
    } catch(e) { 
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) { 
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          xmlhttp = false
        }
      }
    }

    if (xmlhttp) {
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4)
          wpajax.httpComplete(xmlhttp,bundle);
      };
      xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true);
      if (bundle.headers) {
        for (var field in bundle.headers)
          xmlhttp.setRequestHeader(field,bundle.headers[field]);
      }
      xmlhttp.send(bundle.data ? bundle.data : null); 
    }
    return xmlhttp;
  },

  httpComplete: function(xmlhttp,bundle) {
    if (xmlhttp.status == 200 || xmlhttp.status == 302) {
      if (bundle.onSuccess)
        bundle.onSuccess(xmlhttp,bundle);
    } else if (bundle.onFailure) {
      bundle.onFailure(xmlhttp,bundle);
    } else {
      // A activer en debug mode ?
      // alert(xmlhttp.statusText);
    }
  }
};

// Parser
if (document.implementation.createDocument) {
  var gml_xmlparser = new DOMParser();
}

function gml_XMLParse(string) {
  if (document.implementation.createDocument) {
    return gml_xmlparser.parseFromString(string, "text/xml");
  } else if (window.ActiveXObject) {
    var gml_xmldoc = new ActiveXObject("Microsoft.XMLDOM");
    gml_xmldoc.async = "false";
    ret = gml_xmldoc.loadXML(string);      
    if (!ret)
      return null;
    return gml_xmldoc.documentElement;
  }
  return null;
}

// HTMLize
String.prototype.htmlize = function() {
  var chars = new Array('&','<','>','"');
  var entities = new Array('amp','lt','gt','quot');
  var regex = new RegExp();
  var string = this;
  for (var i=0; i<chars.length; i++) {
    regex.compile(chars[i], "g");
    string = string.replace(regex, '&' + entities[i] + ';');
  }
  return string;
}

/*

LiveDiff

 */

function liveDiff(page, id, oldid, rcid) {
  var el = document.getElementById( 'livePreviewTitle' );
  el.innerHTML="<b style='text-decoration: blink;'>Diff : <span style='color:red'>"+page+"</span>...</b>";
  wpajax.http({ url: wgServer + wgScriptPath + '/index.php?title='+encodeURIComponent(page)+'&diff='+id+'&oldid='+oldid, 
                onSuccess: getDiff, mpage: page, mid: id, moldid:oldid, mrcid:rcid});
}

function getDiff(xmlreq, data) {
//2DO mostrare la diff e modificare le impostazioni delle casellle da parte (SI/NO/BOH e ULTIMA MODIFICA)
  var doc = gml_XMLParse(xmlreq.responseText);
  var page=data.mpage;
  var oldid=data.moldid;
  var id=data.mid;
  var rcid=data.mrcid;
  var bC  = doc.getElementById('bodyContent');
  if (bC ==  null) bC  = doc.getElementById('article')
  var LP = document.getElementById( 'livePreview' );
  var dLP = document.getElementById( 'divLivePreview' );
  var lD = getElementsByClass('diff',bC,null);

  var upage=page.replace(new RegExp(/\'/g), "\\'");

  if (lD[0] == null)
    LP.innerHTML = bC.innerHTML;
  else {
    if (document.getElementById('showDiffR').checked) {
      var avantEl = getElementsByClass('diff-deletedline',bC,null);
      var apresEl = getElementsByClass('diff-addedline',bC,null);
      var avant = "";
      var apres = "";
      var lav = avantEl.length;
      var lap = apresEl.length;
      for(var n=0; n < lav ; n++)
        avant = avant + avantEl[n].innerHTML + "<br />";
      for(var n=0; n < lap ; n++)
        apres = apres + apresEl[n].innerHTML + "<br />";
      LP.innerHTML = "<table width='100%'><tr><td width='50%' class='diff-deletedline'>"+avant+"</td><td class='diff-addedline'>"+apres+"</td></tr></table>";
    }
    else {
      LP.innerHTML = "<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>"+lD[0].innerHTML+"</table>";
    }
  }
  if (dLP.style.display == "none") {
    var elcb = document.getElementById( 'shidPrev' );
    elcb.checked="true";
    dLP.style.display = "inline";
  }

  var entete = document.getElementById( 'livePreviewTitle' );
  entete.innerHTML='<b><a href="'+wgServer + '/wiki/' + encodeURI(page) + '" target="_new">' + page + '</a></b> • ' +
  '(<a href="javascript:;" onClick="liveHist(\''+upage+'\');" style="color:darkorange">Cron</a>)';

  var asNextDiff = doc.getElementById("differences-nextlink");
  if(asNextDiff == null) {
    var optAvert = "";
    var optl = lstAvert.length;
    for (j=0; j<optl; j++) {
      optAvert += '<option value="'+lstAvert[j].template;
      if(lstAvert[j].hasPage) optAvert += '|'+upage;
      optAvert += '">'+lstAvert[j].string+'</option>';
    }

    // Get username of submitter
    var user1 = doc.getElementById( 'mw-diff-otitle2' );
    if (user1 != null) {
      var usertmp=user1.innerHTML;
      var daDove = usertmp.indexOf('tente:')+6;
      var daDove2 = usertmp.indexOf('/wiki/Speciale:Contributi/')+26;
      
      if ((daDove2 != -1) && (daDove2 < daDove)) // e' un anonimo
        daDove3 = daDove2;
      else
        daDove3 = daDove;
      
      var finoA = usertmp.indexOf('" title="');
      var finoA2 = usertmp.indexOf('&action=edit');
      
      if ((finoA2 != -1) && (finoA2 < finoA)) // non esiste la pagina utente
        finoA3 = finoA2;
      else
        finoA3 = finoA;
        
      user1 = usertmp.substr(daDove3, finoA3-daDove3);
    }
    var user2 = doc.getElementById( 'mw-diff-ntitle2' );
    if (user2 != null) {
      var usertmp=user2.innerHTML;
      var daDove = usertmp.indexOf('tente:')+6;
      var daDove2 = usertmp.indexOf('/wiki/Speciale:Contributi/')+26;
      
      if ((daDove2 != -1) && (daDove2 < daDove)) // e' un anonimo
        daDove3 = daDove2;
      else
        daDove3 = daDove;
      
      var finoA = usertmp.indexOf('" title="');
      var finoA2 = usertmp.indexOf('&action=edit');
      
      if ((finoA2 != -1) && (finoA2 < finoA)) // non esiste la pagina utente
        finoA3 = finoA2;
      else
        finoA3 = finoA;
        
      user2 = usertmp.substr(daDove3, finoA3-daDove3);
    }
    user1=user1.replace(new RegExp(/\'/g), "\\'");
    user2=user2.replace(new RegExp(/\'/g), "\\'");

    entete.innerHTML = '<table width="100%" class="creator"><tr><td>' + entete.innerHTML + 
    '</td><td align="right"><small>' +
    // Verifier avant si le patrouilleur peut modifier cette page ? (query.php?what=permissions&titles=page)
    '[<a id="LiveRevertLink" href="javascript:getLiveMessage(\'liverevert\',\''+user1+'\',\''+user2+'\',\''+upage+'\',\''+oldid+'\');" >' + lang_menu[0].UNDORC+'</a>] • ' +
    lang_menu[0].REASON+' : <input id="LiveRevertMessage" /> ••• ' +
    '[<a id="LiveAvertoLink" href="javascript:getLiveAverto(\''+user2+'\');">'+lang_menu[0].AVERTS+'</a>] : ' +
    '<select id="averto">' + optAvert + '</select>' +
    '</td></tr><tr><td /><td align="right"><small>[<a id="MarkAsPatrolled" href="'+wgServer+wgScript+'?action=markpatrolled&rcid='+rcid+'&title='+upage+'" target="_new" >' + lang_menu[0].VERIF + '</a>]</td></tr></table>';
    
    document.getElementById('LiveRevertMessage').focus();
  }
}

function getLiveDelete(page,type) {
  page = encodeURIComponent(page);
  var link = document.getElementById('LiveCancImmLink');
  link.href = "javascript:;";
  link.style.color = "silver";
  link.style.cursor = "default";
  link.style.textDecoration = "none";
  document.getElementById('LiveRevertMessage').disabled = true;
  var message = document.getElementById('LiveRevertMessage').value;
  
  var testo = getpagecontent(page);
  
  if (type == "copyviol")
    testo = '{{Cancelcopy|' + message + '}}\n\n' + testo;
  else
    testo = '{{Cancella subito|' + message + '}}\n\n' + testo;

  setpagecontent(page,testo,"LiveRC : Cancella subito");
}

function getLiveAverto(user) {
  var link = document.getElementById('LiveAvertoLink');
  link.href = "javascript:;";
  link.style.color = "silver";
  link.style.cursor = "default";
  link.style.textDecoration = "none";
  document.getElementById('averto').disabled = true;
  var message = document.getElementById('averto').value;
  
  var fixMessage=message.replace(new RegExp(/\\'/g), "'");
  
  var page = 'Discussioni utente:' + encodeURIComponent(user);

  var testo = getpagecontent(page);
  testo += '\n\n==Avviso==\n{{' + fixMessage + '}}~~~~\n';
  
  if (message.indexOf('|') != -1)
    template = message.substr(0,message.indexOf('|'));
  else
    template = message;

  var optl = lstAvert.length;
  var object = "LiveRC: Avviso";
  for (j=0; j<optl; j++)
    if(lstAvert[j].template == template)
       object = "LiveRC: "+lstAvert[j].string;
  
  setpagecontent(page,testo,object);
}

function getLiveMessage(where, user1, user2, page, oldid) {
  var links = [ document.getElementById('LiveRevertLink') ];
  var i,len=links.length;
  for (i=0; i<len; i++) {
    links[i].href = "javascript:;";
    links[i].style.color = "silver";
    links[i].style.cursor = "default";
    links[i].style.textDecoration = "none";
  }
  document.getElementById('LiveRevertMessage').disabled = true;
  var message = document.getElementById('LiveRevertMessage').value;
  wpajax.http({ url: wgServer + wgScriptPath + '/index.php?title=' + encodeURI(page) + '&action=edit&oldid=' + oldid,
                onSuccess: postLiveRevert,
                where: where, page: page, user1: user1, user2: user2, message: message });
}

function postLiveRevert(xmlreq, data) {
  var parser = new DOMParser();
  var doc = parser.parseFromString(xmlreq.responseText, 'application/xhtml+xml');

  var where = data.where;
  var page = data.page;
  var user1 = data.user1;
  var user2 = data.user2;
  var message = data.message;

  var wpTextbox1 = encodeURIComponent(doc.getElementById('wpTextbox1').value);

  var inputs = doc.getElementById('editform').getElementsByTagName('input');
  var editform = new Array();
  for (i=0; i<inputs.length; i++) {
    editform[inputs[i].name] = inputs[i].value;
  }
  var wpStarttime = encodeURIComponent(editform['wpStarttime']);
  var wpEdittime = encodeURIComponent(editform['wpEdittime']);
  var wpEditToken = encodeURIComponent(editform['wpEditToken']);

  switch(where) {
    case 'liverevert':
      var wpSummary = lang_menu[0].RVMES1 + ' [[Speciale:Contributi/' + user2 + '|' + user2
        + ']]; '+lang_menu[0].RVMES2+' [[Utente:' + user1 + '|' + user1 + ']]';
      break;
/*    case 'livevandalism':
      var wpSummary = 'LiveRC : Révocation de vandalisme par [[Special:Contributions/' + user2 + '|' + user2
        + ']]; retour a la version de [[User:' + user1 + '|' + user1 + ']]';
      break; */
  }
  if (message)
    wpSummary = wpSummary + ' ; ' + message;
  wpSummary = encodeURIComponent(wpSummary);

  var headers = new Array();
  headers['Content-Type'] = 'application/x-www-form-urlencoded';
  wpajax.http({ url: wgServer + wgScriptPath + '/index.php?title=' + encodeURIComponent(page) + '&action=submit',
                method: "POST", headers: headers,
                data: 'wpSave=1&wpTextbox1=' + wpTextbox1 + '&wpStarttime=' + wpStarttime + '&wpEdittime=' + wpEdittime
                    + '&wpEditToken=' + wpEditToken + '&wpSummary=' + wpSummary});
}

/*

LiveHist

 */

function liveHist(page) {
  // uso delle "  (soluzione di merda, ma se funziona...)
  var page = page.replace(new RegExp(/\%22/g), '"');

  var el = document.getElementById( 'livePreviewTitle' );
  el.innerHTML="<b style='text-decoration: blink;'>Cron : <span style='color:red'>"+page+"</span>...</b>";
  wpajax.http({url:wgServer + wgScriptPath + '/index.php?title=' + encodeURIComponent(page) + '&action=history', onSuccess: getHist, message: page });
}

function getHist(xmlreq, data) {
  doc = gml_XMLParse(xmlreq.responseText);
  bC  = doc.getElementById('bodyContent')
  if (bC ==  null) bC  = doc.getElementById('article')
  var c=data.message;
  var LP = document.getElementById( 'livePreview' );
  var dLP = document.getElementById( 'divLivePreview' );
  LP.innerHTML = bC.innerHTML;
  if (dLP.style.display == "none") {
    var elcb = document.getElementById( 'shidPrev' );
    elcb.checked="true";
    dLP.style.display = "inline";
  }
  var elt = document.getElementById( 'livePreviewTitle' );
  elt.innerHTML='<b><a href="'+wgServer+'/wiki/'+encodeURIComponent(c)+'" target="_new">'+c+'</a></b>';
}

/*

LiveArticle

 */

function liveArticle(page,user) {
  // uso delle "  (soluzione di merda, ma se funziona...)
  var page = page.replace(new RegExp(/\%22/g), '"');

  var el = document.getElementById( 'livePreviewTitle' );
  el.innerHTML="<b style='text-decoration: blink;'><span style='color:red'>"+page+"</span>...</b>";
  wpajax.http({url:wgServer + wgScriptPath + '/index.php?title=' + encodeURIComponent(page) + '&redirect=no', onSuccess: getArticle, message: page, user: user });
}

function getArticle(xmlreq, data) {
  doc = gml_XMLParse(xmlreq.responseText);
  bC  = doc.getElementById('bodyContent')
  if (bC ==  null) bC  = doc.getElementById('article')
  var c=data.message;
  var user=data.user;
  var LP = document.getElementById( 'livePreview' );
  var dLP = document.getElementById( 'divLivePreview' );
  LP.innerHTML = bC.innerHTML;
  if (dLP.style.display == "none") {
    var elcb = document.getElementById( 'shidPrev' );
    elcb.checked="true";
    dLP.style.display = "inline";
  }

  var upage=c.replace(new RegExp(/\'/g), "\\'");
  var optAvert = "";
  var optl = lstAvert.length;
  for (j=0; j<optl; j++) {
    optAvert += '<option value="'+lstAvert[j].template;
    if(lstAvert[j].hasPage) optAvert += '|'+upage;
    optAvert += '">'+lstAvert[j].string+'</option>';
  }

  var elt = document.getElementById( 'livePreviewTitle' );
  elt.innerHTML='<b><a href="'+wgServer+'/wiki/'+encodeURI(c)+'" target="_new">'+c+'</a></b>';
  
  elt.innerHTML = '<table width="100%" class="creator"><tr><td>' + elt.innerHTML + 
  '</td><td align="right"><small>' +
  // Verifier avant si le patrouilleur peut modifier cette page ? (query.php?what=permissions&titles=page)
  //canc imm
  '[<a id="LiveCancImmLink" href="javascript:getLiveDelete(\''+encodeURIComponent(c)+'\');" >' + lang_menu[0].CANCIMM+'</a>] • ' +
  lang_menu[0].REASON2+' : <input id="LiveRevertMessage" /> • ' +
  // canc x copyviol
  '[<a id="LiveCancImmLink" href="javascript:getLiveDelete(\''+encodeURIComponent(c)+'\',\'copyviol\');" >' + lang_menu[0].CANCCV+'</a>] ••• ' +  
  '[<a id="LiveAvertoLink" href="javascript:getLiveAverto(\''+user+'\');">'+lang_menu[0].AVERTS+'</a>] : ' +
  '<select id="averto">' + optAvert + '</select>' +
  '</td></tr></table>';
  document.getElementById('LiveRevertMessage').focus();
}

/*

LiveLog

 */

function liveLog(action,page) {
  var titolo = '';
  switch(action) {
    case 'upload':
      titolo = 'Log dei caricamenti';
      break;
    case 'newuser':
      titolo = 'Log dei nuovi utenti';
      break;
    case 'block':
      titolo = 'Log dei blocchi utente';
      break;
    case 'delete':
      titolo = 'Log delle cancellazioni';
      break;
    case 'move':
      titolo = 'Log degli spostamenti';
      break;
    case 'protect':
      titolo = 'Log delle protezioni';
      break;
    case '':
      titolo = 'Log';
      break;
    default:
      break;
  }

  var el = document.getElementById( 'livePreviewTitle' );
  el.innerHTML="<b style='text-decoration: blink;'><span style='color:red'>"+titolo+"</span>...</b>";
  wpajax.http({url:wgServer + wgScriptPath + '/index.php?title=Speciale:Registri&type=' + action + "&user=&page=" + encodeURIComponent(page), onSuccess: getLog, message: page });
}

function getLog(xmlreq, data) {
  doc = gml_XMLParse(xmlreq.responseText);
  bC  = doc.getElementById('bodyContent')
  if (bC ==  null) bC  = doc.getElementById('article')
  var c=data.message;
  var LP = document.getElementById( 'livePreview' );
  var dLP = document.getElementById( 'divLivePreview' );
  LP.innerHTML = bC.innerHTML;
  if (dLP.style.display == "none") {
    var elcb = document.getElementById( 'shidPrev' );
    elcb.checked="true";
    dLP.style.display = "inline";
  }
  var elt = document.getElementById( 'livePreviewTitle' );
  elt.innerHTML='<b><a href="'+wgServer+'/wiki/'+encodeURI(c)+'" target="_new">'+c+'</a></b>';
}

/*

LiveContrib

 */

function liveContrib(user) {
  var el = document.getElementById( 'livePreviewTitle' );
  el.innerHTML="<b style='text-decoration: blink;'><span style='color:red'>"+user+"</span>...</b>";
  wpajax.http({url:wgServer + '/wiki/Speciale:Contributi/'+encodeURIComponent(user), 
                   onSuccess: getContrib, message: user });
}

function getContrib(xmlreq, data) {
  doc = gml_XMLParse(xmlreq.responseText);
  bC  = doc.getElementById('bodyContent')
  if (bC ==  null) bC  = doc.getElementById('article')
  var user=data.message;
  var LP = document.getElementById( 'livePreview' );
  var dLP = document.getElementById( 'divLivePreview' );
  LP.innerHTML = bC.innerHTML;
  if (dLP.style.display == "none") {
    var elcb = document.getElementById( 'shidPrev' );
    elcb.checked="true";
    dLP.style.display = "inline";
  }
  var utilde=user.replace(new RegExp(/\'/g), "\\'");

  var optAvert = "";
  var optl = lstAvert.length;
  for (j=0; j<optl; j++) {
    if(lstAvert[j].hasPage) continue;
    optAvert += '<option value="'+lstAvert[j].template+'">'+lstAvert[j].string+'</option>';
  }

  var entete = document.getElementById( 'livePreviewTitle' );
  entete.innerHTML='<b><a href="'+wgServer+'/wiki/User:'+encodeURIComponent(user)+'" target="_new">'+user+'</a></b>';
  entete.innerHTML = '<table width="100%" class="creator"><tr><td>'+entete.innerHTML +
    '</td><td align="right"><small>' +
    '[<a id="LiveAvertoLink" href="javascript:var message=getLiveAverto(\''+utilde+'\');">'+lang_menu[0].AVERTS+'</a>] : ' +
    '<select id="averto">' + optAvert + '</select>' + '</td></tr></table>';
}

/*

LiveSysop

 */

function liveNS() {
  wpajax.http({url: wgServer + wgScriptPath + '/api.php?action=query&meta=siteinfo&siprop=namespaces&format=xml', 
                   onSuccess: getNS, message: "Pobieranie nazw przestrzeni" });
}

function getNS(xmlreq, data) {
  var api = xmlreq.responseXML;

  if (api.firstChild.nodeName == "error") return;

  var nss = api.getElementsByTagName('query')[0].getElementsByTagName('namespaces')[0].getElementsByTagName('ns');
  var len = nss.length;
  var i;
  var id,ns;
  var options = "";
  var lstNs = new Array();
  
  for (i=0; i<len; i++) {
    id = nss[i].getAttribute('id');
    ns = nss[i].textContent;

    if (id < 0) continue;
    //Ex "Article"
    if (id == 0) ns = "(Principale)";

    //Select namespace (default = *)
    if (typeof(checkNamespace)!="undefined" && checkNamespace == id)
      options += '<option value="' + id  + '" SELECTED >' + ns + '</option>';
    else
      options += '<option value="' + id + '">' + ns + '</option>';
    lstNs.push(id);
  } 
  options = '<option value="' + lstNs.join('|') + '">*</option>' + options;
  document.getElementById('selectNS').innerHTML = '<label for="showNS0">'+lang_menu[0].NAMESP+' </label><select id="showNS0">' + options + '</select><br/><br/>';

  /*   da spostare in YesNo
  // crea il bottone "Inizia"
  var button = document.createElement('input');
  button.value = 'Inizia';
  button.type = 'button';
  // il comando dipende dal browser utilizzato
  // Per ora e' stato testato solo con Firefox2 ed IE6. In caso di problemi fare riferimento alla
  // dichiarazione di "BrowserDetect", in cima allo script, per avere la lista dei browser
  // supportati e dei metodi di calcolo degli stessi
  if (BrowserDetect.browser=="Firefox" || BrowserDetect.browser=="Mozilla" || BrowserDetect.browser=="Netscape")
	button.setAttribute('onclick', 'liveRC()');
  else
	//if (BrowserDetect.browser=="Explorer")    commentato per farlo funzionare con gli altri browser
	button.onclick = liveRC;

  document.getElementById('selectNS').appendChild(button);
  */
}

/*

LiveRC

 */

function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if ( node == null )
    node = document;
  if ( tag == null )
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
  for (i = 0, j = 0; i < elsLen; i++) {
    if (pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

function tsToHhMm(timestamp) {
  var tz;
  var match, regex = new RegExp();
  if (lrcTZ) {
    regex.compile(/^([-+])?(\d?\d):?(\d\d)$/);
    match = regex.exec(lrcTZ);
    if (!match) {
      //livercError(lang_error.TZ);
      return 'xx:xx';
    }
    tz = match[2]*60 + match[3]*1;
    tz = match[1] == '-' ? -tz : tz;
  } else {
    var now = new Date();
    tz = -now.getTimezoneOffset();
  }
  regex.compile(/^\d\d\d\d-\d\d-\d\dT(\d\d):(\d\d):\d\dZ$/);
  match = regex.exec(timestamp);
  if (!match) {
    //livercError(lang_error.timestamp);
    return 'xx:xx';
  }
  var tt = (match[1]*60 + match[2]*1 + tz + 1440) % 1440;
  var mm = tt % 60;
  var hh = (tt - mm) / 60 % 24;
  return hh + ':' + (mm < 10 ? '0' : '') + mm;
}

function updateHidden() {
  var tempAr = new Array();
  for (var user in lstHidden) {
    var utilde = user.replace(new RegExp(/\'/g), "\\'");
    var uremove = '<a href="javascript:;" onClick="unhideUser(\''+utilde+'\');" style="color:grey">-</a>';
    var udiscut  = '<a href="'+wgServer+'/wiki/Discussioni utente:'+encodeURIComponent(user)+'" style="color:seagreen" target="_new">D</a>';
    var ucontrib = '<a href="javascript:;" onClick="liveContrib(\''+utilde+'\');" style="color:#43CD80">C</a>';
    var uadmin   = '';
    if (lrcAdmin == true) {
       uadmin = ' • <a href="'+wgServer+'/wiki/Speciale:Blocca/'+encodeURI(user)+'" target="_new" style="color:seagreen">B</a>';
    }
    var ueditor  = '<a href="'+wgServer+'/wiki/Utente:'+encodeURIComponent(user)+'" target="_new">'+user+'</a>';
    var ligne = '<span id="hidden-' + user + '"><small>' + uremove + ' • ' + udiscut + ' • ' + ucontrib + uadmin + ' • </small>' + ueditor + '</span><br />';
    tempAr.push(ligne);
  }
  tempAr.sort();
  var lvHidden = document.getElementById('liveHidden');
  lvHidden.innerHTML = "";
  var len = tempAr.length;
  for (var n=len-1; n>=0; n--)
    lvHidden.innerHTML += tempAr[n];
}

function updateFollowContact() {
  var tempAr = new Array();
  for (var user in lstContact) {
    var timestamp = lstContact[user].ts;
    if (timestamp == 0) continue;
    var utilde = user.replace(new RegExp(/\'/g), "\\'");
    var udiscut  = '<a href="'+wgServer+'/wiki/Discussioni utente:'+encodeURIComponent(user)+'" style="color:seagreen" target="_new">D</a>';
    var ucontrib = '<a href="javascript:;" onClick="liveContrib(\''+utilde+'\');" style="color:#43CD80">C</a>';
    var uadmin   = '';
    if (lrcAdmin == true) {
       uadmin = ' • <a href="'+wgServer+'/wiki/Speciale:Blocca/'+encodeURI(user)+'" target="_new" style="color:seagreen">B</a>';
    }
    var ueditor  = '<a href="'+wgServer+'/wiki/Utente:'+encodeURIComponent(user)+'" target="_new">'+user+'</a>';
    var ligne = '<span id="contact-' + timestamp + '"><small>' + tsToHhMm(timestamp) + ' • ' + udiscut + ' • ' + ucontrib + uadmin + ' • </small>' + ueditor + '</span><br />';
    tempAr.push(ligne);
  }
  tempAr.sort();
  var lvContact = document.getElementById('liveContact');
  lvContact.innerHTML = "";
  var len = tempAr.length;
  for (var n=len-1; n>=0; n--)
    lvContact.innerHTML += tempAr[n];
}

function updateFollowRevoc() {
  var tempAr = new Array();
  for (var user in lstRevoc) {
    var timestamp = lstRevoc[user].ts;
    var utilde = user.replace(new RegExp(/\'/g), "\\'");
    var udiscut  = '<a href="'+wgServer+'/wiki/Discussioni utente:'+encodeURIComponent(user)+'" style="color:seagreen" target="_new">D</a>';
    var ucontrib = '<a href="javascript:;" onClick="liveContrib(\''+utilde+'\');" style="color:#43CD80">C</a>';
    var uadmin   = '';
    if (lrcAdmin == true) {
       uadmin = ' • <a href="'+wgServer+'/wiki/Speciale:Blocca/'+encodeURI(user)+'" target="_new" style="color:seagreen">B</a>';
    }
    var ueditor  = '<a href="'+wgServer+'/wiki/Utente:'+encodeURIComponent(user)+'" target="_new">'+user+'</a>';
    var ligne = '<span id="revoc-' + timestamp + '"><small>' + tsToHhMm(timestamp) + ' • ' + udiscut + ' • ' + ucontrib + uadmin + ' • </small>' + ueditor + ' (' + lstRevoc[user].nb + ' '+lang_menu[0].XTIMES+')</span><br />';
    tempAr.push(ligne);
  }
  tempAr.sort();
  var lvRevoc = document.getElementById('liveRevoc');
  lvRevoc.innerHTML = "";
  var len = tempAr.length;
  for (var n=len-1; n>=0; n--)
    lvRevoc.innerHTML += tempAr[n];
}

function getRevision(flags2) {

  var match, regex = new RegExp(), regex2 = new RegExp();

  var flags;
  flagNew = flags2.flagNew;
  flagTitle = flags2.flagTitle;
  flagRcid = flags2.flagRcid;
  flagPageid = flags2.flagPageid;
  flagRevid = flags2.flagRevid;
  flagOld_revid = flags2.flagOld_revid;
  flagUser = flags2.flagUser;
  flagToken = flags2.flagToken;

  regex.compile(/\'/g);
  regex2.compile(/\"/g);
  var escTitle = flagTitle.replace(regex, "\\'");
  var diffEscTitle = escTitle.replace(regex2, '\%22');
  var escUser = flagUser.replace(regex, "\\'");

  liveDiff(flagTitle, flagRevid, flagOld_revid, flagRcid);
  
  // BLACK LIST //
  //////////////////
  if (lstContact[flagUser]) {
  //2DO: background color the diff
    td2.style.border = "2px solid gold";
    td2.style.backgroundColor = "yellow";
  }

  // IPCLASS LIST //
  //////////////////
  for (var IPclass in lstIPClass) {
    if (user.indexOf(IPclass)==0) {
    //2DO: background color the diff
      td2.style.border = "2px solid gold";
      td2.style.backgroundColor = "yellow";
      IPclassMitigating = true;
    }
  }
}

// Get RC and Log
function getRC(xmlreq, data) {

  var api = xmlreq.responseXML.getElementsByTagName('api')[0];

  if (api.firstChild.nodeName == "error") return;

  var rcs = api.getElementsByTagName('query')[0].getElementsByTagName('recentchanges')[0].getElementsByTagName('rc');
  var i,j,leni,lenj,rc;

  leni=rcs.length;
  
  i = random (rcs.length);

  var flags;
  flags.flagNew = rcs[i].getAttribute('new');
  flags.flagTitle = rcs[i].getAttribute('title');
  flags.flagRcid = rcs[i].getAttribute('rcid');
  flags.flagPageid = rcs[i].getAttribute('pageid');
  flags.flagRevid = rcs[i].getAttribute('revid');
  flags.flagOld_revid = rcs[i].getAttribute('old_revid');
  flags.flagUser = rcs[i].getAttribute('user');
  flags.flagToken = rcs[i].getAttribute('patroltoken');
	
  var IPclassMitigating = false;
  for (var IPclass in lstIPClass)
    if (flagUser.indexOf(IPclass)==0)
      IPclassMitigating = true;

  var mitigating = (lstContact[flagUser]) || (IPclassMitigating == true);

  if (lstHidden[flagUser] || (flagUser == wgUserName))
	liveRC(); // take another diff, discard this
  else
    getRevision(flags); // operate on this diff
}

function liveRC() {

  var rcns = document.getElementById('showNS0').value;
  if (rcns == null) return;

  var rcShow = "&rcshow=";
  
  var rcIP = "";
  if (document.getElementById('shidIP').checked && 
     !document.getElementById('shidReg').checked )
    rcShow += 'anon|';
  else if (!document.getElementById('shidIP').checked && 
            document.getElementById('shidReg').checked )
    rcShow += '!anon|';

  if (!document.getElementById('shidBot').checked) 
    rcShow += '!bot|';
  
  if (!document.getElementById('shidMm').checked) 
    rcShow += '!minor|';

  if (!document.getElementById('shidPatrol').checked) 
    rcShow += '!patrolled|';
  
  rcShow = rcShow.substr(0,rcShow.length - 2)
      
  wpajax.http({url:wgServer + wgScriptPath
    + '/api.php?action=query&list=recentchanges&rcnamespace=' + rcns
    + '&rcprop=user|title|ids' + rcshow
    + '&format=xml',
    onSuccess: getRC, message: "Elaborazione in corso...\n\n" });
}   

function hideUser(name) {
   lstHidden[name] = true;
   updateHidden();
}

function unhideUser(name) {
   delete lstHidden[name];
   updateHidden();
}

addOnloadHook(function () {
  if (wgTitle == "Monobook.js/E-LiveRC") {

    var top        = document.getElementById( 'top' );
    if (top != null) {
        top.innerHTML = "";
        top.style.display = "none";
    }
    var siteSub    = document.getElementById( 'siteSub' );
    var contentSub = document.getElementById( 'contentSub' );
    var rtb        = document.getElementById( 'RealTitleBanner' );
    var rt         = document.getElementById( 'RealTitle' );
    var pca        = document.getElementById( 'p-cactions' );

    
    if (siteSub != null) siteSub.style.display = "none";
    if (contentSub != null) contentSub.style.display = "none";
    if (rtb != null) rtb.style.display = "none";
    if (rt != null) rt.style.display = "none";
    if (pca != null) pca.style.display = "none";

    var checkBoxes = document.getElementById( 'checkBoxes' );
      
      //checkIP (default = checked)
      if (typeof(checkIP)!="undefined" && checkIP == "0")
        checkBoxes.innerHTML += '<input id="shidIP"    type="checkbox" />';
      else
        checkBoxes.innerHTML += '<input id="shidIP"    type="checkbox" checked />';
      checkBoxes.innerHTML += '<label for="shidRC">'   + lang_menu[0].IPLABEL + '</label><br/>';
      
      //checkRegistrati (default = checked)
      if (typeof(checkRegistrati)!="undefined" && checkRegistrati == "0")
        checkBoxes.innerHTML += '<input id="shidReg"    type="checkbox" />';
      else
        checkBoxes.innerHTML += '<input id="shidReg"    type="checkbox" checked />';
      checkBoxes.innerHTML += '<label for="shidReg">'   + lang_menu[0].REGLABEL + '</label><br/>';
      
      //checkBot (default = not checked)
      if (typeof(checkBot)!="undefined" && checkBot == "1")
        checkBoxes.innerHTML += '<input id="shidBot"    type="checkbox" checked />';
      else
        checkBoxes.innerHTML += '<input id="shidBot"    type="checkbox" />';
      checkBoxes.innerHTML += '<label for="shidBot">'   + lang_menu[0].BOTLABEL + '</label><br/>';
      
      //checkModificheMinori (default = checked)
      if (typeof(checkModificheMinori)!="undefined" && checkModificheMinori == "1")
        checkBoxes.innerHTML += '<input id="shidMm"    type="checkbox" />';
      else
        checkBoxes.innerHTML += '<input id="shidMm"    type="checkbox" checked />';
      checkBoxes.innerHTML += '<label for="shidMm">'   + lang_menu[0].MMLABEL + '</label><br/>';
      
      //checkPatrolled (default = not checked)
      if (typeof(checkPatrolled)!="undefined" && checkPatrolled == "1")
        checkBoxes.innerHTML += '<input id="shidPatrol"    type="checkbox" checked />';
      else
        checkBoxes.innerHTML += '<input id="shidPatrol"    type="checkbox" />';
      checkBoxes.innerHTML += '<label for="shidPatrol">'   + lang_menu[0].PATROLLABEL + '</label><br/>';
      
    checkBoxes.innerHTML += '<span id="selectNS" />';

    //Get contact list from property file
    var _lstContact = lstContact;
    var _len = lstContact.length;
    lstContact = new Array();
    for (var _i=0; _i<_len; _i++)
      lstContact[_lstContact[_i]] = { ts: 0 };

    //Get IPclass list from property file
    var _lstIPClass = lstIPClass;
    var _len = lstIPClass.length;
    lstIPClass = new Array();
    for (var _i=0; _i<_len; _i++)
      lstIPClass[_lstIPClass[_i]] = { ts: 0 };

    //Get trusted list from property file
    var _lstHidden = lstHidden;
    var _len = lstHidden.length;
    lstHidden = new Array();
    for (var _i=0; _i<_len; _i++)
      lstHidden[_lstHidden[_i]] = { ts: 0 };
      
    updateHidden();
	
    liveNS();

  }
});

/*

*/