Utente:Nonciclopediologo/QuickEdit.js

Vai alla navigazione Vai alla ricerca

Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.


Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti, e comunque qualche minuto di preghiera non guasta. Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menu Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.

/////////// Einstellungen ///////////
// -> Standardeinstellungen zuweisen

if (typeof(qeEnabled) == 'undefined')          qeEnabled          = true;
if (typeof(qeEnableSection0) == 'undefined')   qeEnableSection0   = true;
if (typeof(qeTextboxHeight) == 'undefined')    qeTextboxHeight    = 20;
if (typeof(qeEnableAccessKeys) == 'undefined') qeEnableAccessKeys = true;

/*if (typeof(qeShowErrors) == 'undefined')*/   qeShowErrors       = false;

//////// Ende Einstellungen ////////


// only initialize once
var qeIsInit = false;

// 2D-Array mit allen Sections und den jeweiligen Unterknoten
var qeSections = new Array();

// Aktuell bearbeitete Section
var qeEdit = -1;

// Aktuell im Vorschau-Modus?
var qePreviewMode = false;
var qePreviewDisabled = false;

// Link zum Bearbeiten der Abschnitte
var qeEditLink = false;

// Knoten
var qeParent = false;
var qeForm = false;
var qePreview = false;

// Form action
var qeFormAction = false;

// XmlHttpRequest
var qeRequest = false;

// 0 = idle 1 = receive 2 = submit
var qeRequestState = 0;

// ondblclick
var qeOnDoubleClick = null;

////// Start Script //////

addOnloadHook(qeInit);

function qeInit()
{
   if (!qeEnabled || qeIsInit) return;

   qeIsInit = true;

   // check if page is editable
   if (!document.getElementById('ca-edit')) return;

   // check if there is no other action than view
   var pos = document.location.href.indexOf('action=');
   if (pos != -1 && document.location.href.substr(pos+7, 4) != 'view') return;

   qeSetLang();
   
   if (!qeInitAjax()) return;

   qeChangeSectionLinks();
}

function qeContentSub(text)
{
   var cs = document.getElementById('contentSub');
   if (cs.innerHTML)
      cs.innerHTML += ' - ' + text;
   else
      cs.innerHTML = text;
}

function qeShowError(err)
{
   if (qeShowErrors) qeContentSub(qePhrase('quickedit') + ' ' + qePhrase('error') + ': ' + err);
}

function qeAlert(err)
{
   alert(qePhrase('quickedit') + ' ' + qePhrase('error') + ': ' + err);
}

function qeGetElementsByClassName(tagname, classname)
{
   var ret = new Array();
   var tags = document.getElementsByTagName(tagname);
   for (i = 0; i < tags.length; i++)
      if (tags[i].className == classname)
         ret.push(tags[i]);

   return ret;
}

function qeChangeSectionLinks()
{
   qeEditLink = document.getElementById('ca-edit').firstChild.href + '&section=';

   // get all sections
   var sections = qeGetElementsByClassName('span', 'editsection');
   var jumptonav = document.getElementById('jump-to-nav');

   // Hauptabschnitt
   if (qeEnableSection0)
   {
      var heading = qeGetElementsByClassName('h1', 'firstHeading')[0];

   if (!heading || !jumptonav)
      qeShowError('Section 0 nicht gefunden.');
   else
   {

      // id verpassen
      heading.id = 'section-0';

      // Knoten ins Array packen
      qeSections[0] = new Array();

      var nosections = (sections.length == 0);

      var node = jumptonav.nextSibling;
      while (node != null && node.className != 'editsection'
             && node.className != 'printfooter' && (nosections|| !/^H[1-6]$/.test(node.nodeName)))
      {
         if (node.nodeName.charAt(0) != '#')
            qeSections[0].push(node);
         node = node.nextSibling;
      }

      // Link hinzufügen
      var newspan = document.createElement('span');
      newspan.style.fontSize = '8pt';
      newspan.style.marginLeft = '10px';

      newspan.appendChild(document.createTextNode('['));
      
      var newlink   = document.createElement('a');
      newlink.href  = 'javascript:qeEditSection(0)';
      newlink.id    = 'sectionlink-0';
      newlink.className = 'sectionlink';
      newlink.appendChild(document.createTextNode(qePhrase('quickedit')));
      newspan.appendChild(newlink);

      newspan.appendChild(document.createTextNode(']'));

      heading.appendChild(newspan);

   }
   } // qeEnableSection0


   // Abschnitte
   for (i = 0; i < sections.length; i++)
   {
      // Section-Link suchen
      var link = sections[i].childNodes[1].href;

      var section = null, match = null;
      
      if (match = /section=([0-9]+)/.exec(link))
         var section = +match[1];
      else break;
      if (!section) continue;

      sections[i].style.fontSize = '8pt';

      // QuickEdit-Link erstellen
      var newnode = document.createElement('a');
      newnode.href  = 'javascript:qeEditSection(' + section + ')';
      newnode.title = 'QuickEdit Section ' + section;
      newnode.id    = 'sectionlink-' + section;
      newnode.className = 'sectionlink';
      newnode.appendChild(document.createTextNode(qePhrase('quickedit')));
      
      var where = sections[i].childNodes[2];
      sections[i].insertBefore(document.createTextNode('/'), where);
      sections[i].insertBefore(newnode, where);
      ////

      // dem div eine ID verpassen
      sections[i].id = 'editsection-' + section;

      // zugehörige hX Überschrift suchen
      var hx = sections[i].parentNode;
      hx.id = 'section-' + section;
      ////

      // alle zu dieser Section gehörigen Knoten suchen und ins Array packen
      qeSections[section] = new Array();

      var node = hx.nextSibling;
      while (node != null && node.className != 'editsection'
             && node.className != 'printfooter' && !/^H[1-6]$/.test(node.nodeName))
      {
         if (node.nodeType == 1)
            qeSections[section].push(node);

         node = node.nextSibling;
      }
   }
}

function qeEditSection(section)
{
   if (qeRequestState || !qeEditLink) return;

   section = parseInt(section);

   // es wird bereits ein Abschnitt bearbeitet
   // wenn es der aktuelle ist -> Bearbeiten abbrechen, sonst nichts tun
   if (qeEdit != -1)
   {
      if (qeEdit == section) qeAbortEdit(section);
      return;
   }

   qeEdit = section;

   // save body.ondblclick
   if (document.getElementsByTagName('body')[0].getAttribute('ondblclick'))
   {
      qeOnDoubleClick = document.getElementsByTagName('body')[0].getAttribute('ondblclick');
      document.getElementsByTagName('body')[0].setAttribute('ondblclick', null);
   }

   // Inhalt des Abschnitts ausblenden
   var nodes = qeSections[section];
   for (i = 0; i < nodes.length; i++)
      nodes[i].style.display = 'none';
   ////

   // andere Links ändern
   var links = qeGetElementsByClassName('a', 'sectionlink');
   for (i = 0; i < links.length; i++)
   {
      if (links[i].id != 'sectionlink-' + qeEdit)
         links[i].style.color = '#bfbfbf';
   }

   // Form anzeigen
   qeMakeForm();
   var hx = document.getElementById('section-' + section);
   hx.parentNode.insertBefore(qeParent, hx.nextSibling);

   // Aggiunge gli hotkeys alla finestra di editing
   catchHotkeys();

   qeForm.firstChild.childNodes[4].value = qePhrase('loading') + '...';
   ////

   // make sure the QuickEdit tab is activated
   qeSwitch(0);

   qeGetSection();
}


function qeAbortEdit()
{
   if (qeEdit == -1 || qeRequestState) return;

   // Inhalt des Abschnitts wieder einblenden
   var nodes = qeSections[qeEdit];
   for (i = 0; i < nodes.length; i++)
      nodes[i].style.display = is_gecko?null:'block';

   var links = qeGetElementsByClassName('a', 'sectionlink');
   for (i = 0; i < links.length; i++)
   {
      if (links[i].id != 'sectionlink-' + qeEdit)
         links[i].style.color = null;
   }

   qeParent.parentNode.removeChild(qeParent);
   qeForm.firstChild.childNodes[4].value = '';

   qeEdit = -1;
   qeRequest.abort();

   // restore body.ondblclick
   if (qeOnDoubleClick)
      document.getElementsByTagName('body')[0].setAttribute('ondblclick', qeOnDoubleClick);
}

function addSignature() {
   wpTextbox1=document.getElementById("wpTextbox1");
   //IE support
   if (document.selection) {
      wpTextbox1.focus();
      sel = document.selection.createRange();
      sel.text = "--{{utente:Nonciclopediologo/firma}} 02:52, ago 10, 2010 (CEST)";
   }
   //MOZILLA/NETSCAPE support
   else if (wpTextbox1.selectionStart || wpTextbox1.selectionStart == '0') {
      var startPos = wpTextbox1.selectionStart;
      var endPos = wpTextbox1.selectionEnd;
      wpTextbox1.value = wpTextbox1.value.substring(0, startPos)
      + "--{{utente:Nonciclopediologo/firma}} 02:52, ago 10, 2010 (CEST)"
      + wpTextbox1.value.substring(endPos, wpTextbox1.value.length);
      } else {
         wpTextbox1.value += "--{{utente:Nonciclopediologo/firma}} 02:52, ago 10, 2010 (CEST)";
   }
}

function qeMakeForm()
{
   if (qeForm) return;

   if (qeSections.length == 1) qeTextboxHeight += 5; // higher textbox for the main section only

   // create parent div
   qeParent = document.createElement('div');
   qeParent.style.clear  = 'both';
   
   // create tabs
   var ul = document.createElement('ul');
   ul.style.listStyle    = 'none';
   ul.style.whiteSpace   = 'nowrap';
   ul.style.fontSize     = '11.3px';
   ul.style.position     = 'relative';
   ul.style.bottom       = '0px';
   ul.style.borderCollapse = 'collapse';

   var li1 = document.createElement('li');

   var a = document.createElement('a');
   a.href                 = 'javascript:qeSwitch(0)';
   a.style.textDecoration = 'none';
   a.style.padding        = '0 8px';
   a.appendChild(document.createTextNode(qePhrase('quickedit')));
   li1.appendChild(a);

   li1.id                 = 'qeTabEdit';
   li1.title              = qePhrase('tQuickEdit');
   li1.style.border       = '1px solid #aaa';
   li1.style.borderBottom = 'none';
   li1.style.marginRight  = '6px';
   li1.style.display      = 'inline';
   li1.style.backgroundColor = '#fafafa';
   li1.setAttribute('onmouseover', 'qeTabMouseOverOut(this, 0)');
   li1.setAttribute('onmouseout',  'qeTabMouseOverOut(this, 1)');

   var li2 = li1.cloneNode(true);
   li2.id = 'qeTabPreview';
   li2.title = qePhrase('tLivePrev');
   li2.firstChild.href = 'javascript:qeSwitch(1)';
   li2.firstChild.firstChild.nodeValue = qePhrase('liveprev');

   // make li1 look selected
   li1.style.borderColor  = '#888';
   li1.style.borderBottom = 'none';
   li1.style.fontWeight   = 'bold';

   // tab 3
   var li4 = li2.cloneNode(true);
   li4.id                 = null;
   li4.style.marginLeft   = '16px';
   li4.title              = qePhrase('tSubmit');
   li4.firstChild.href    = 'javascript:qeSubmit(0)';
   li4.firstChild.firstChild.nodeValue = qePhrase('submit');

   if (qeEnableAccessKeys) li4.firstChild.accessKey = 's';

   // tab 4
   var li5 = li2.cloneNode(true);
   li5.id                 = null;
   li5.title              = qePhrase('tPreview');
   li5.firstChild.href    = 'javascript:qeSubmit(1)';
   li5.firstChild.firstChild.nodeValue = qePhrase('preview');

   // tab 5
   var li6 = li2.cloneNode(true);
   li6.id                 = null;
   li6.title              = qePhrase('tCancel');
   li6.firstChild.href    = 'javascript:qeAbortEdit()';
   li6.firstChild.firstChild.nodeValue = qePhrase('cancel');

   // tab 6
   var li7 = li2.cloneNode(true);
   li7.id                 = null;
   li7.title              = qePhrase('tsign');
   li7.firstChild.href    = 'javascript:addSignature()';
   li7.firstChild.firstChild.nodeValue = qePhrase('sign');

   if (qeEnableAccessKeys)
   {
      li6.firstChild.accessKey = 'a'; // cancel
      li1.firstChild.accessKey = 'e'; // quickedit
      li2.firstChild.accessKey = 'p'; // live prev
      li7.firstChild.accessKey = 'f'; // live prev
   }

   var li3 = document.createElement('li');
   li3.style.cssFloat    = 'right';
   li3.style.marginRight = '10px';
   li3.style.color       = '#aaa';
   li3.style.fontSize    = '8pt';
   li3.style.display     = 'inline';

   var a = document.createElement('a');
   a.style.color = '#aaa';
   a.href        = 'http://de.wikipedia.org/wiki/Benutzer_Diskussion:ASM#QuickEdit_2';
   a.appendChild(document.createTextNode('ASM'));

   li3.appendChild(document.createTextNode(qePhrase('header')));
   li3.appendChild(a);

   ul.appendChild(li3);
   ul.appendChild(li1);
   ul.appendChild(li2);

   ul.appendChild(li4);
   ul.appendChild(li5);
   ul.appendChild(li6);
   ul.appendChild(li7);

   qeParent.appendChild(ul);

   // create frame div
   var framediv = document.createElement('div');
   framediv.style.border   = '1px solid #aaa';
   framediv.style.padding  = '6px';
   framediv.style.overflow = 'hidden';
   framediv.style.clear    = 'both';
   framediv.style.backgroundColor = '#fafafa';

   qeParent.appendChild(framediv);

   // create form
   qeForm = document.createElement('form');
   qeForm.method = 'post';
   qeForm.onsubmit = qeSubmitByReturn;

   // create preview div
   qePreview = document.createElement('div');
   qePreview.style.display = 'none';
   qePreview.style.width   = '98%';
   qePreview.style.overflow= 'hidden';
   qePreview.style.clear   = 'both';
   qePreview.style.padding = '5px';
   qePreview.style.border  = '1px dotted #aaa';
   qePreview.style.backgroundColor = qeGetBGColor();

   // preview message
   var div = document.createElement('div');
   div.style.padding   = '100px 0';
   div.style.textAlign = 'center';
   div.style.color     = '#aaa';
   div.style.cursor    = 'default';
   div.appendChild(document.createTextNode(qePhrase('loadprev') + '...'));
   qePreview.appendChild(div);

   framediv.appendChild(qePreview);
   framediv.appendChild(qeForm);

////

   // add form div
   qeForm.appendChild(document.createElement('div'));

   var elements = new Array(
     //         subject     type      name
     new Array('input',    'hidden', 'wpSection'),
     new Array('input',    'hidden', 'wpStarttime'),
     new Array('input',    'hidden', 'wpEdittime'),
     new Array('input',    'hidden', 'wpSummary'),
     new Array('textarea',           'wpTextbox1'),
     new Array('input',    'hidden', 'wpEditToken'),
     new Array('input',    'hidden', 'wpAutoSummary')
   );

   for (i = 0; i < elements.length; i++)
   {
      var e = elements[i];
      var newnode = document.createElement(e[0]);
    
      if (e[0] == 'input')
      {
         newnode.type = e[1];
         newnode.name = e[2];
      }

      else if (e[0] == 'textarea')
      {
         newnode.id = e[1];
         newnode.name = e[1];
         newnode.appendChild(document.createTextNode(''));
         newnode.rows = qeTextboxHeight;
         newnode.style.width = '99%';
      }

      qeForm.firstChild.appendChild(newnode);
   }

   if (qeEnableAccessKeys) qeForm.firstChild.childNodes[4].accessKey = ',';
   qeForm.firstChild.childNodes[4].tabIndex = 1;

   newnode = document.createElement('div');
   newnode.style.marginTop  = '5px';
   newnode.style.paddingTop = '5px';
   newnode.style.borderTop  = '1px dotted #aaa';

// Speichern   
   newnode.appendChild(document.createElement('a'));
   newnode.firstChild.href         = 'javascript:qeSubmit(0)';
   newnode.firstChild.title        = qePhrase('tSubmit');
   newnode.firstChild.style.cursor = 'pointer';
   newnode.firstChild.appendChild(document.createTextNode(qePhrase('submit')));

// Vorschau
   newnode.appendChild(document.createTextNode(' '));
   
   newnode.appendChild(document.createElement('a'));
   newnode.childNodes[2].href             = 'javascript:qeSubmit(1)';
   newnode.childNodes[2].title            = qePhrase('tPreview');
   newnode.childNodes[2].style.marginLeft = '5px';
   newnode.childNodes[2].style.cursor     = 'pointer';
   newnode.childNodes[2].appendChild(document.createTextNode(qePhrase('preview')));
   
/* Abbrechen // entfernt
   newnode.appendChild(document.createTextNode(' '));
   
   newnode.appendChild(document.createElement('a'));
   newnode.childNodes[4].href             = 'javascript:qeAbortEdit()';
   newnode.childNodes[4].style.marginLeft = '5px';
   newnode.childNodes[4].style.cursor     = 'pointer';
   newnode.childNodes[4].appendChild(document.createTextNode(qePhrase('cancel')));
*/

// Zusammenfassung
   newnode.appendChild(document.createTextNode(' '));

   newnode.appendChild(document.createElement('input'));
   newnode.childNodes[4].type = 'text';
   newnode.childNodes[4].size = '70';
   newnode.childNodes[4].id   = 'qeSummary';
   newnode.childNodes[4].maxLength = '200';
   newnode.childNodes[4].style.marginLeft = '5px';
   newnode.childNodes[4].tabIndex = 2;

// Kleine Änderung
   newnode.appendChild(document.createTextNode(' '));

   var checkboxes = document.createElement('span');
   checkboxes.style.whiteSpace = 'nowrap';

   checkboxes.appendChild(document.createElement('input'));
   checkboxes.childNodes[0].type  = 'checkbox';
   checkboxes.childNodes[0].id    = 'wpMinoredit';
   checkboxes.childNodes[0].name  = 'wpMinoredit';
   checkboxes.childNodes[0].value = '1';
   checkboxes.childNodes[0].style.marginLeft = '5px';
   checkboxes.childNodes[0].tabIndex = 3;
   checkboxes.childNodes[0].title = qePhrase('tMinor');

   if (qeEnableAccessKeys) checkboxes.childNodes[0].accessKey = 'i';

   checkboxes.appendChild(document.createElement('label'));
   checkboxes.childNodes[1].htmlFor = 'wpMinoredit';
   checkboxes.childNodes[1].style.fontWeight = 'bold';
   checkboxes.childNodes[1].style.fontSize   = '8pt';
   checkboxes.childNodes[1].style.position   = 'relative';
   checkboxes.childNodes[1].style.bottom     = '2px';
   checkboxes.childNodes[1].title            = qePhrase('tMinor');

   checkboxes.childNodes[1].appendChild(document.createTextNode(qePhrase('k')));

// Beobachten
   checkboxes.appendChild(document.createTextNode(' '));

   checkboxes.appendChild(document.createElement('input'));
   checkboxes.childNodes[3].type  = 'checkbox';
   checkboxes.childNodes[3].id    = 'wpWatchthis';
   checkboxes.childNodes[3].name  = 'wpWatchthis';
   checkboxes.childNodes[3].value = '1';
   checkboxes.childNodes[3].style.marginLeft = '5px';
   checkboxes.childNodes[3].tabIndex = 4;
   checkboxes.childNodes[3].title = qePhrase('tWatch');

   if (qeEnableAccessKeys) checkboxes.childNodes[3].accessKey = 'w';

   checkboxes.appendChild(document.createElement('label'));
   checkboxes.childNodes[4].htmlFor = 'wpWatchthis';
   checkboxes.childNodes[4].style.fontWeight = 'bold';
   checkboxes.childNodes[4].style.fontSize   = '8pt';
   checkboxes.childNodes[4].style.position   = 'relative';
   checkboxes.childNodes[4].style.bottom     = '2px';
   checkboxes.childNodes[4].title            = qePhrase('tWatch');

   checkboxes.childNodes[4].appendChild(document.createTextNode(qePhrase('b')));

   newnode.appendChild(checkboxes);
   qeForm.appendChild(newnode);
}

function qeFillForm(formaction, wpStarttime, wpEdittime, wpSummary, wpTextbox1,
                    wpEditToken, wpAutoSummary, wpWatchthis)
{
   if (!qeForm) return;

   // save form action since we need it for preview
   qeFormAction = formaction;

   qeForm.firstChild.childNodes[0].value = qeEdit;
   qeForm.firstChild.childNodes[1].value = wpStarttime;
   qeForm.firstChild.childNodes[2].value = wpEdittime;
   qeForm.firstChild.childNodes[3].value = wpSummary;
   qeForm.firstChild.childNodes[4].value = wpTextbox1;

   qeForm.firstChild.childNodes[5].value = wpEditToken;
   qeForm.firstChild.childNodes[6].value = wpAutoSummary;

   document.getElementById('wpWatchthis').checked = wpWatchthis;
   
   qeForm.action = formaction;

   document.getElementById('qeSummary').value = wpSummary;
}


// QuickEdit 2: Preview stuff

function qeSwitch(type)
{
   if (qeEdit == -1 || qeRequestState) return;

   type = parseInt(type);
   if ((type == 0 && !qePreviewMode) || (type == 1 && qePreviewMode) ||
       (qePreviewDisabled && type == 1)) return;

   qePreviewMode = !qePreviewMode;

   // switch tab styles
   var lia = qePreviewMode?document.getElementById('qeTabEdit'):
                           document.getElementById('qeTabPreview');
   var lid = qePreviewMode?document.getElementById('qeTabPreview'):
                           document.getElementById('qeTabEdit');

   lid.style.border = '1px solid #888';
   lid.style.fontWeight = 'bold';
   lia.style.border = '1px solid #aaa';
   lia.style.fontWeight = 'normal';

   lia.style.borderBottom = lid.style.borderBottom = 'none';

   // switch to preview
   if (qePreviewMode)
   {
      qeForm.firstChild.style.display = 'none';
      qePreview.style.display = 'block';
      qePreview.firstChild.style.display = 'block';

      // remove all child nodes from previous previews, if any
      for (var i = 1; i < qePreview.childNodes.length; i++)
         qePreview.removeChild(qePreview.childNodes[i]);

      qeLoadPreview();
   }

   else
   {
      qePreview.style.display = 'none';
      qeForm.firstChild.style.display = 'block';
   }
}

function qeLoadPreview()
{
   if (qeEdit == -1 || qeRequestState || !qeEditLink || !qePreviewMode || !qeFormAction)
      return;

   var link = qeEditLink + qeEdit;
   qeRequestState = 2;

   qeRequest.onreadystatechange = qeAjaxResponse;
   qeRequest.open('POST', qeFormAction, true);

   var send = qeMakeFormRequest();

   qeRequest.overrideMimeType('text/xml');
   qeRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
   qeRequest.setRequestHeader('Content-length', send.length);
   qeRequest.setRequestHeader('Content', send.length);
   qeRequest.send(send);
}

function qeMakeFormRequest()
{
   if (!qeForm) return null;

   var str = '';

   var inputs = qeForm.getElementsByTagName('input');
   for (var i = 0; i < inputs.length; i++)
      if (inputs[i].value && inputs[i].value.length > 0)
         str += '&' + inputs[i].name + '=' + encodeURI(inputs[i].value);

   str += '&wpPreview=Preview' +
          '&wpTextbox1=' +
          encodeURIComponent(document.getElementById('wpTextbox1').value);

   return str.substr(1);
}

function qeTabMouseOverOut(obj, out)
{
   var coloronly = false;
   if (obj.id == 'qeTabEdit' || obj.id == 'qeTabPreview')
   {
      if ((qePreviewMode && obj.id == 'qeTabPreview') ||
          (!qePreviewMode && obj.id == 'qeTabEdit'))
         coloronly = true;
   }

   obj.style.backgroundColor = out?'#fafafa':'#fff';
   if (!coloronly) obj.style.borderColor = out?'#aaa':'#888';
}

// Ajax stuff

function qeInitAjax()
{
   try
   {
      if (window.XMLHttpRequest)
      {
         qeRequest = new XMLHttpRequest();
         qeRequest.overrideMimeType('text/xml');
      }

      else if (window.ActiveXObject)
         qeRequest = new ActiveXObject('Microsoft.XMLHTTP');

      else throw 'Kein AJAX-Objekt vorhanden';
   }

   catch (e)
   {
      qeShowError(e);
      return false;
   }

   if (!qeRequest)
   {
      qeShowError('AJAX-Objekt konnte nicht erstellt werden');
      return false;
   }

   return true;
}


function qeGetSection()
{
   if (qeEdit == -1 || !qeForm || !qeRequest || !qeEditLink || qeRequestState) return;

   var link = qeEditLink + qeEdit;

   qeRequestState = 1;

   qeRequest.onreadystatechange = qeAjaxResponse;

   qeRequest.open('GET', link, true);
   qeRequest.send(null);
}


function qeAjaxResponse()
{
   if (!qeRequestState)
   {
      alert('QuickEdit Fehler: qeAjaxResponse');
      return;
   }

   // receive
   if (qeRequestState == 1 && qeEdit != -1)
   {
      if (qeRequest.readyState != 4 || qeRequest.status != 200)
         return;

      qeRequestState = 0;

      var xml = qeRequest.responseXML;

      try // MediaWiki bug 6986 workaround
      {
         var wpTextbox1 = xml.getElementById('wpTextbox1').value;
      }
      catch (e)
      {
         xml = qeFixXML(qeRequest.responseText);
         if (!xml)
         {
            qeShowError('XML parsing fehlgeschlagen.');
            return;
         }

         var wpTextbox1 = xml.getElementById('wpTextbox1').value;
      }

      var inputs = xml.getElementsByTagName('input');
      for (i = 0; i < inputs.length; i++)
      {
         if (inputs[i].name == 'wpSection') wpSection = inputs[i].value;
         else if (inputs[i].name == 'wpStarttime') wpStarttime = inputs[i].value;
         else if (inputs[i].name == 'wpEdittime') wpEdittime = inputs[i].value;
         else if (inputs[i].name == 'wpSummary') wpSummary = inputs[i].value;

         else if (inputs[i].name == 'wpEditToken') wpEditToken = inputs[i].value;
         else if (inputs[i].name == 'wpAutoSummary') wpAutoSummary = inputs[i].value;

         else if (inputs[i].name == 'wpWatchthis') wpWatchthis = inputs[i].checked;
      }

      var formaction = xml.getElementById('editform').action;

      // sollte nie passieren, wenn doch -> fatal error
      if (wpSection != qeEdit)
      {
         qeAlert(qePhrase('varmismatch'));
         qeRequestState = 0;
         qeAbortEdit();
         return;
      }

      qeFillForm(formaction, wpStarttime, wpEdittime, wpSummary, wpTextbox1,
                 wpEditToken, wpAutoSummary, wpWatchthis);
      return;
   }

   // preview (submit)
   if (qeRequestState == 2 && qeEdit != -1)
   {
      if (qeRequest.readyState != 4 || qeRequest.status != 200)
         return;

      qeRequestState = 0;

      try
      {
         var xml = qeRequest.responseXML;
         var prev = xml.getElementById('wikiPreview').cloneNode(true);
      }
      catch (e)
      {
         qePreviewDisabled = true;
         qePreview.firstChild.firstChild.nodeValue = qePhrase('noprev');

         var tab = document.getElementById('qeTabPreview');
         tab.firstChild.style.color = '#888';
         return;
      }

      qePreview.firstChild.style.display = 'none';

      while (prev.childNodes.length > 0 && prev.firstChild.className != 'previewnote')
         prev.removeChild(prev.firstChild);

      prev.removeChild(prev.firstChild);
      qePreview.appendChild(prev);

      return;
   }
}

function qeSubmitByReturn()
{
   qeSubmit(0);
   return false;
}

function qeSubmit(preview)
{
   if (qeEdit == -1 || !qeRequest || !qeForm || qeRequestState)
      return;

   qeForm.firstChild.childNodes[3].value = document.getElementById('qeSummary').value;
   
   if (preview == 1)
   {
      var prev = document.createElement('input');
      prev.name = 'wpPreview';
      prev.value = 'Preview';
      prev.type = 'hidden';
      qeForm.appendChild(prev);
   }

   qeForm.submit();
}

// MediaWiki bug 6986 workaround
function qeFixXML(text)
{
   var pos = text.indexOf('<h1 class="firstHeading">');
   var pos2 = text.indexOf('</h1>');
   if (pos == -1 || pos2 == -1) return null;

   text = text.substring(0, pos) + text.substring(pos2+5);

   var parser = new DOMParser();
   var newdoc = parser.parseFromString(text, "text/xml");
   return newdoc;
}

// Workaround for JavaScript
// don't ask me why the hell JS throws an error at '/*'
function qeFixXMLPreview(text)
{
   // another MediaWiki bug: backslashes are stripped out when saving a page...
   regex = eval('/' + String.fromCharCode(92) + '/' + String.fromCharCode(92) + '*/g');
   text = text.replace(regex, '&#47;*');

   var parser = new DOMParser();
   var newdoc = parser.parseFromString(text, "text/xml");
   return newdoc;
}

// Language stuff

function qeGetBGColor()
{
   var ret = qeGetStyle(document.getElementById('content'), 'background-color');
   return ret?ret:'#fff';
}

function qeGetStyle(elem, style)
{
   if (document.defaultView)
     return document.defaultView.getComputedStyle(elem, null).getPropertyValue(style);
   else
     return null;
}

function qeSetLang()
{
   switch (wgUserLanguage)
   {
      case 'de': qeLang = 1; break;
      case 'en': qeLang = 2; break;

//    case 'xx': ...

      default: qeLang = 2;
   }

   qeSetPrefix();
}

function qePhrase(name)
{
   for (var i = 0; i < qePhrases.length; i++)
      if (qePhrases[i][0] == name)
         return qePhrases[i][qeLang];

   return 'UNDEFINED PHRASE: ' + name;
}

function qeSetPrefix()
{
// ausgeliehen vom Wikipedia-Script
   var pref = 'Alt';

   if (is_safari || navigator.userAgent.toLowerCase().indexOf('mac') + 1
       || navigator.userAgent.toLowerCase().indexOf('konqueror') + 1 )
                        pref = qePhrase('strg');
   else if (is_opera)   pref = qePhrase('shift') + '-Esc';
   else if (is_ff2_x11) pref = qePhrase('strg') + '-' + qePhrase('shift');
   else if (is_ff2_win) pref = 'Alt-' + qePhrase('shift');
   pref += '-';

   for (var i = 0; i < qePhrases.length; i++)
      if (qePhrases[i][0].charAt(0) == 't')
         for (var j = 1; j < qePhrases[i].length; j++)
            qePhrases[i][j] = qePhrases[i][j].replace(/KEY:(.)/, pref + '$1');
}

var qePhrases = new Array(
   new Array('quickedit', 'QuickEdit',  'QuickEdit'),
   new Array('submit',    'Speichern',  'Salva'),
   new Array('preview',   'Vorschau',   'Anteprima'),
   new Array('cancel',    'Abbrechen',  'Annulla'),
   new Array('k',         'Kleine Änderungen', 'modifica minore'),
   new Array('b',         'Beobachten', 'segui'),
   new Array('error',     'Fehler',     'errore'),
   new Array('nolinksfound', 'Keine Links gefunden', 'Link non trovato'),
   new Array('loading',   'Lade Daten', 'In caricamento'),
   new Array('liveprev',  'Live Vorschau', 'Anteprima Live'),
   new Array('loadprev',  'Lade Vorschau', 'Anteprima in caricamento'),
   new Array('noprev',
           'Fehler: Vorschau nicht verfügbar (Seite konnte von JavaScript nicht gelesen werden)',
           'Errore: Anteprima non disponibile (la pagina non può essere letta da Javascript)'),
   new Array('header',
           'MediaWiki QuickEdit 2 beta / Fehler/Kritik/Anregungen bitte da posten: ',
           'MediaWiki QuickEdit 2 beta / riporta errori, critiche o suggerimenti qui: '),
   new Array('tQuickEdit','QuickEdit Ansicht (KEY:E)', 'QuickEdit (KEY:E)'),
   new Array('tLivePrev', 'Live Vorschau (KEY:P)',     'Anteprima Live (KEY:P)'),
   new Array('tSubmit',   'Änderungen Speichern (KEY:S)','Salva modifiche (KEY:S)'),
   new Array('tPreview',  'Normale Vorschau',          'Visualizzazione normale'),
   new Array('tCancel',   'Abbrechen (KEY:A)',         'Annulla (KEY:A)'),
   new Array('tWatch',    'Beobachten (KEY:W)',        'Segui (KEY:W)'),
   new Array('tMinor',    'Kleine Änderungen (KEY:I)', 'Modifica minore (KEY:I)'),

   new Array('strg',      'Strg',       'Ctrl'),
   new Array('shift',     'Umschalt',   'Shift'),
   new Array('sign',      'Zum Zeichen (KEY:F)',  'Firma'),
   new Array('tsign',      'Zum Zeichen (KEY:F)',  'Firma (KEY:F)')
);