The Demopædia Encyclopedia on Population is under heavy modernization and maintenance. Outputs could look bizarre, sorry for the temporary inconvenience

Diccionario demografico multilingüe (Español segunda edición 1985)

Diferencia entre revisiones de «MediaWiki:RefToolbarNoDialogsTextTerm.js»

De Demopædia
Saltar a: navegación, buscar
(From paris2007 which has been updated from en.wikipedia.org)
(From http://demopaedia.org/paris2007/w/index.php?title=MediaWiki:RefToolbarNoDialogsTextTerm.js&oldid=3002)
Línea 47: Línea 47:
 
     else {
 
     else {
 
       selection = '<div id="citeselect" style="display:none"><input type="button" value="Cite web" onclick="citeWeb()" />'+
 
       selection = '<div id="citeselect" style="display:none"><input type="button" value="Cite web" onclick="citeWeb()" />'+
'<input type="button" value="Cite book" onclick="citeBook()" />'+
+
        '<input type="button" value="Cite book" onclick="citeBook()" />'+
'<input type="button" value="Cite journal" onclick="citeJournal()" />'+
+
        '<input type="button" value="Cite journal" onclick="citeJournal()" />'+
'<input type="button" value="Cite news" onclick="citeNews()" />'+
+
        '<input type="button" value="Cite news" onclick="citeNews()" />'+
'<input type="button" value="Named ref" onclick="citeNamedRef()" />'+
+
        '<input type="button" value="Named ref" onclick="citeNamedRef()" />'+
'<input type="button" value="Error check" onclick="dispErrors()" />'+
+
        '<input type="button" value="Error check" onclick="dispErrors()" />'+
'<input type="button" value="Cancel" onclick="hideInitial()" />'+
+
        '<input type="button" value="Cancel" onclick="hideInitial()" />'+
'<input type="button" value="TextTerm" onclick="textTerm()" /></div>';
+
        '<input type="button" value="TextTerm" onclick="textTerm()" /></div>';
 
       document.getElementById('editform').innerHTML = selection + document.getElementById('editform').innerHTML;
 
       document.getElementById('editform').innerHTML = selection + document.getElementById('editform').innerHTML;
 
     }
 
     }
Línea 86: Línea 86:
  
 
var months = ['January', 'February', 'March', 'April', 'May', 'June',
 
var months = ['January', 'February', 'March', 'April', 'May', 'June',
      'July', 'August', 'September', 'October', 'November', 'December'];
+
              'July', 'August', 'September', 'October', 'November', 'December'];
 
var citeGlobalDateFormat = "<date> <monthname> <year>";
 
var citeGlobalDateFormat = "<date> <monthname> <year>";
 
function getTime() {
 
function getTime() {
Línea 189: Línea 189:
 
       switch (j)
 
       switch (j)
 
       {
 
       {
      case 0 : this.term = ref[1]; break;
+
        case 0 : this.term = ref[1]; break;
      case 1 : this.note = ref[1]; break;
+
        case 1 : this.note = ref[1]; break;
      case 2 : this.section = ref[1]; break;
+
        case 2 : this.section = ref[1]; break;
      default :
+
        default :
if(ref[1].match(/^ *?EnglishEntry *?= *?(.*) *?$/))
+
        if(ref[1].match(/^ *?EnglishEntry *?= *?(.*) *?$/))
  this.englishentry = ref[1].replace(/^ *?EnglishEntry *?= *?(.*) *?$/,"$1");
+
          this.englishentry = ref[1].replace(/^ *?EnglishEntry *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?IndexEntry *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?IndexEntry *?= *?(.*) *?$/))
  this.indexentry = ref[1].replace(/^ *?IndexEntry *?= *?(.*) *?$/,"$1");
+
          this.indexentry = ref[1].replace(/^ *?IndexEntry *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?OtherIndexEntry *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?OtherIndexEntry *?= *?(.*) *?$/))
  this.otherindexentry = ref[1].replace(/^ *?OtherIndexEntry *?= *?(.*) *?$/,"$1");
+
          this.otherindexentry = ref[1].replace(/^ *?OtherIndexEntry *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?OtherIndexEntryTwo *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?OtherIndexEntryTwo *?= *?(.*) *?$/))
  this.otherindexentrytwo = ref[1].replace(/^ *?OtherIndexEntryTwo *?= *?(.*) *?$/,"$1");
+
          this.otherindexentrytwo = ref[1].replace(/^ *?OtherIndexEntryTwo *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?OtherIndexEntryThree *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?OtherIndexEntryThree *?= *?(.*) *?$/))
  this.otherindexentrythree = ref[1].replace(/^ *?OtherIndexEntryThree *?= *?(.*) *?$/,"$1");
+
          this.otherindexentrythree = ref[1].replace(/^ *?OtherIndexEntryThree *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?OtherIndexEntryFour *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?OtherIndexEntryFour *?= *?(.*) *?$/))
  this.otherindexentryfour = ref[1].replace(/^ *?OtherIndexEntryFour *?= *?(.*) *?$/,"$1");
+
          this.otherindexentryfour = ref[1].replace(/^ *?OtherIndexEntryFour *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?OtherIndexEntryFive *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?OtherIndexEntryFive *?= *?(.*) *?$/))
  this.otherindexentryfive = ref[1].replace(/^ *?OtherIndexEntryFive *?= *?(.*) *?$/,"$1");
+
          this.otherindexentryfive = ref[1].replace(/^ *?OtherIndexEntryFive *?= *?(.*) *?$/,"$1");
else if(ref[1].match(/^ *?EnglishEntry *?= *?(.*) *?$/))
+
        else if(ref[1].match(/^ *?EnglishEntry *?= *?(.*) *?$/))
  this.englishentry = ref[1].replace(/^ *?EnglishEntry *?= *?(.*) *?$/,"$1");
+
          this.englishentry = ref[1].replace(/^ *?EnglishEntry *?= *?(.*) *?$/,"$1");
else if(j==3){
+
        else if(j==3){
    this.subnote = ref[1];
+
          this.subnote = ref[1];
}else{
+
        }else{
  alert("texttermfill error j=" + j + " ref1= " +ref[1]);
+
          alert("texttermfill error j=" + j + " ref1= " +ref[1]);
  //console.log("texttermfill error j=" + j + " ref1= " +ref[1]);
+
          //console.log("texttermfill error j=" + j + " ref1= " +ref[1]);
}
+
        }
 
       }
 
       }
 
       j++;
 
       j++;
Línea 221: Línea 221:
 
     }
 
     }
 
   } while (nr==true);
 
   } while (nr==true);
 +
    this.indexentry_i=this.term.replace(/(\w+)s/g, "$1");
 +
    this.otherindexentry_oi=this.indexentry_i.replace(/(.*) (.*)/, "$2. $1");
 
   //console.log("j=" + j + " term=" + this.term + " note=" + this.note + " section=" + this.section +" subnote=" + this.subnote +" indexentry=" + this.indexentry + " otherindexentry=" + this.otherindexentry);
 
   //console.log("j=" + j + " term=" + this.term + " note=" + this.note + " section=" + this.section +" subnote=" + this.subnote +" indexentry=" + this.indexentry + " otherindexentry=" + this.otherindexentry);
 
}
 
}
Línea 240: Línea 242:
 
       offset = textarea.selectionStart;
 
       offset = textarea.selectionStart;
 
       range = textarea.selectionEnd - textarea.selectionStart;
 
       range = textarea.selectionEnd - textarea.selectionStart;
 
+
      realltxtterms = /({{TextTerm)|({{NewTextTerm)/gm; // works, finds after Term
       var lstxtterm = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("{{TextTerm") ; // Just before the string. No regex
+
      var lstxtterm =-1;
 +
      subtextt= textarea.value.substring(0,textarea.selectionEnd);
 +
       while ((nbtxt=realltxtterms.exec(subtextt))){ lstxtterm=realltxtterms.lastIndex- nbtxt[0].length}
 +
      //var lstxtterm = textarea.value.substring(0,textarea.selectionEnd). search("{{TextTerm|{{NewTextTerm") ; // Just before the string. No regex
 
       var lstcltxtterm = textarea.value.substring(0,textarea.selectionStart). lastIndexOf("}}") ; //might be for another purpose than TextTerm
 
       var lstcltxtterm = textarea.value.substring(0,textarea.selectionStart). lastIndexOf("}}") ; //might be for another purpose than TextTerm
 
       // Looking for the section
 
       // Looking for the section
Línea 247: Línea 252:
 
       var psectione = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("===") ; // Just before the string. No regex
 
       var psectione = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("===") ; // Just before the string. No regex
 
       if(psectione != -1){
 
       if(psectione != -1){
var psections = textarea.value.substring(0,psectione). lastIndexOf("===") ; // Just before the string. No regex
+
        var psections = textarea.value.substring(0,psectione). lastIndexOf("===") ; // Just before the string. No regex
if(psections != -1){
+
        if(psections != -1){
  section =  textarea.value.substring(psections,psectione+3).match(/^=== *?(\d{3}) *?===$/)[1];
+
          section =  textarea.value.substring(psections,psectione+3).match(/^=== *?(\d{3}) *?===$/)[1];
}
+
        }
 
       }
 
       }
 
       //console.log(" section |" + section);
 
       //console.log(" section |" + section);
Línea 256: Línea 261:
 
        
 
        
 
       if ( (-1 == lstxtterm) || ((-1 < lstxtterm) && (lstxtterm < lstcltxtterm)) ) { // @{{TextTerm ...@}}...(...)..  
 
       if ( (-1 == lstxtterm) || ((-1 < lstxtterm) && (lstxtterm < lstcltxtterm)) ) { // @{{TextTerm ...@}}...(...)..  
// {{Refnumber }} ....!  
+
        // {{Refnumber }} ....!  
// alert("We are after outside a previous TextTerm or no TextTerm before:" + textarea.value.substring(0,textarea.selectionStart ));
+
        // alert("We are after outside a previous TextTerm or no TextTerm before:" + textarea.value.substring(0,textarea.selectionStart ));
texttermcur = new texttermfill("|" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
+
        texttermcur = new texttermfill("|" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
//console.log(" We want to fill with the selection=" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
+
        //console.log(" We want to fill with the selection=" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
// On se retrouve avec du texte à ajouter et le curseur inchangé à textarea.selectionStart   
+
        // On se retrouve avec du texte à ajouter et le curseur inchangé à textarea.selectionStart   
 
       } else if ( (lstxtterm > lstcltxtterm) && (lstcltxtterm > -1) ) { // @}}... @{{TextTerm ... (...)..  
 
       } else if ( (lstxtterm > lstcltxtterm) && (lstcltxtterm > -1) ) { // @}}... @{{TextTerm ... (...)..  
//alert("We are within a TextTerm or no closing }}:" + textarea.value.substring(lstcltxtterm, lstxtterm));
+
        //alert("We are within a TextTerm or no closing }}:" + textarea.value.substring(lstcltxtterm, lstxtterm));
+
       
// ( textarea.value.substring(lstxtterm, textarea.selectionStart). search(new RegExp("}}")) == -1) {
+
        // ( textarea.value.substring(lstxtterm, textarea.selectionStart). search(new RegExp("}}")) == -1) {
var endtxterm= textarea.value.substring(textarea.selectionStart, textarea.length). search("}}");
+
        var endtxterm= textarea.value.substring(textarea.selectionStart, textarea.value.length). search("}}");
if( endtxterm == -1)
+
        if( endtxterm == -1)
  error(" Error no closing TextTerm; should be fixed:" + textarea.value.substring(textarea.selectionStart, textarea.length));
+
          error(" Error no closing TextTerm; should be fixed:" + textarea.value.substring(textarea.selectionStart, textarea.value.length));
else{
+
        else{
  endtxterm = endtxterm + textarea.selectionStart +2 ; // }} included
+
          endtxterm = endtxterm + textarea.selectionStart +2 ; // }} included
  // Looking for @{{TextTerm....}}@
+
          // Looking for @{{TextTerm....}}@
  // alert("We are within textterm  " + lstxtterm + " to " + endtxterm + " soit:" + textarea.value.substring(lstxtterm,endtxterm) );
+
          // alert("We are within textterm  " + lstxtterm + " to " + endtxterm + " soit:" + textarea.value.substring(lstxtterm,endtxterm) );
  //console.log(" Replacing with form result:" + textarea.value.substring(lstxtterm+"{{TextTerm".length,endtxterm-"}}".length));
+
          //console.log(" Replacing with form result:" + textarea.value.substring(lstxtterm+"{{TextTerm".length,endtxterm-"}}".length));
  texttermcur = new texttermfill(textarea.value.substring(lstxtterm+"{{TextTerm".length,endtxterm-"}}".length) );
+
          texttermcur = new texttermfill(textarea.value.substring(lstxtterm+"{{TextTerm".length,endtxterm-"}}".length) );
  // On devrait remplacer {{TextTerm ...}} par la forme, soit de lstxtterm endtxtterm
+
          // On devrait remplacer {{TextTerm ...}} par la forme, soit de lstxtterm endtxtterm
  // On se fout de la sélection originale et la repositionne sur toute l'étendue du textterm.
+
          // On se fout de la sélection originale et la repositionne sur toute l'étendue du textterm.
  // alert("After null before textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
+
          // alert("After null before textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
  // alert(" selection is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
+
          // alert(" selection is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
  textarea.selectionStart = lstxtterm;
+
          textarea.selectionStart = lstxtterm;
  textarea.selectionEnd = endtxterm;
+
          textarea.selectionEnd = endtxterm;
  // alert("After null textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
+
          // alert("After null textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
  // alert(" selection is now:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
+
          // alert(" selection is now:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
} //en endtxtterm
+
        } //en endtxtterm
 
       } // end  @}}... @{{TextTerm ... (...)..  
 
       } // end  @}}... @{{TextTerm ... (...)..  
 
     }else{ // coming from a previous or next
 
     }else{ // coming from a previous or next
Línea 288: Línea 293:
 
       // alert(" After next selection is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
 
       // alert(" After next selection is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
 
       // alert("Coming from a previous or next modifing selectionStart start is an offsetstart =" + offset + " and range=" + range)
 
       // alert("Coming from a previous or next modifing selectionStart start is an offsetstart =" + offset + " and range=" + range)
  // Previous
+
      // Previous
  //                                selectionStart selectionEnd
+
      //                                selectionStart selectionEnd
  //                                        >                <
+
      //                                        >                <
  // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
+
      // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
  //      !<-range-------->!  
+
      //      !<-range-------->!  
  //                      #<-offset--------->!  
+
      //                      #<-offset--------->!  
  // Next
+
      // Next
  //  selectionStart selectionEnd
+
      //  selectionStart selectionEnd
  //      >                <
+
      //      >                <
  // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
+
      // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
  //                                        !<--range------->!  
+
      //                                        !<--range------->!  
  //                      #<-offset--------->!  
+
      //                      #<-offset--------->!  
 
       // alert(" Before textarea.selectionStart=" + textarea.selectionStart + " textarea.selectionEnd=" + textarea.selectionEnd);
 
       // alert(" Before textarea.selectionStart=" + textarea.selectionStart + " textarea.selectionEnd=" + textarea.selectionEnd);
 
       //alert(" Before is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
 
       //alert(" Before is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
 
       textarea.selectionStart = (offset > 0 ? textarea.selectionEnd + offset : textarea.selectionStart + offset -range);
 
       textarea.selectionStart = (offset > 0 ? textarea.selectionEnd + offset : textarea.selectionStart + offset -range);
 
       textarea.selectionEnd = textarea.selectionStart + range;
 
       textarea.selectionEnd = textarea.selectionStart + range;
        // Looking for the section
+
      // Looking for the section
 
       section = '';
 
       section = '';
 
       var psectione = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("===") ; // Just before the string. No regex
 
       var psectione = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("===") ; // Just before the string. No regex
 
       if(psectione != -1){
 
       if(psectione != -1){
var psections = textarea.value.substring(0,psectione). lastIndexOf("===") ; // Just before the string. No regex
+
        var psections = textarea.value.substring(0,psectione). lastIndexOf("===") ; // Just before the string. No regex
if(psections != -1){
+
        if(psections != -1){
  section =  textarea.value.substring(psections,psectione+3).match(/^=== *?(\d{3}) *?===$/)[1];
+
          section =  textarea.value.substring(psections,psectione+3).match(/^=== *?(\d{3}) *?===$/)[1];
}
+
        }
 
       }
 
       }
 
       //console.log(" section Other |" + section);
 
       //console.log(" section Other |" + section);
Línea 318: Línea 323:
 
       // alert(" After textarea.selectionStart=" + textarea.selectionStart + " textarea.selectionEnd=" + textarea.selectionEnd);
 
       // alert(" After textarea.selectionStart=" + textarea.selectionStart + " textarea.selectionEnd=" + textarea.selectionEnd);
 
       //console.log("textterm cur is:" + textarea.value.substring(textarea.selectionStart+"{{TextTerm".length,textarea.selectionEnd-"}}".length));
 
       //console.log("textterm cur is:" + textarea.value.substring(textarea.selectionStart+"{{TextTerm".length,textarea.selectionEnd-"}}".length));
       texttermcur = new texttermfill(textarea.value.substring(textarea.selectionStart+"{{TextTerm".length,textarea.selectionEnd-"}}".length) );
+
       // We are at the beginning of a selection or of a {{TextTerm or NewTextTerm and we should know the length until |
 +
      if(textarea.value.substring(textarea.selectionStart,textarea.selectionEnd).match("{{TextTerm")){
 +
        var ctermtype="TextTerm";
 +
      }else if (textarea.value.substring(textarea.selectionStart,textarea.selectionEnd).match("{{NewTextTerm")){
 +
        var ctermtype="NewTextTerm";
 +
      }else
 +
        var ctermtype="";
 +
 
 +
    // texttermcur = new texttermfill(textarea.value.substring(textarea.selectionStart+"{{TextTerm".length,textarea.selectionEnd-"}}".length) );
 +
 
 +
      texttermcur = new texttermfill(textarea.value.substring(textarea.selectionStart+ctermtype.length,textarea.selectionEnd-"}}".length) );
 
     }
 
     }
 
   }else{
 
   }else{
Línea 331: Línea 346:
 
   //    pstart          pend
 
   //    pstart          pend
 
   //      !<--------offsetpstart------------>!  
 
   //      !<--------offsetpstart------------>!  
   //                      #<-offsetpsend---->!  
+
   //                      #<-offsetpsend---->!
 
+
  //realltxtterms = /({{TextTerm[^}]+)|({{NewTextTerm[^}]+)/gm; // works, finds end of }}
   var pstart = textarea.value.substring(0,textarea.selectionStart). lastIndexOf("{{TextTerm");  
+
  realltxtterms = /({{TextTerm)|({{NewTextTerm)/gm; // works, finds after Term
 +
   var pstart=-1;
 +
  subtextt= textarea.value.substring(0,textarea.selectionStart);
 +
  while ((nbtxt=realltxtterms.exec(subtextt))){ pstart=realltxtterms.lastIndex- nbtxt[0].length}
 +
  //  var pstart = textarea.value.substring(0,textarea.selectionStart). search("{{TextTerm|{{NewTextTerm");
 
   if ( pstart == -1) { // No previous
 
   if ( pstart == -1) { // No previous
 
     // alert( "NO previous : " + textarea.value.substring(0,textarea.selectionStart));
 
     // alert( "NO previous : " + textarea.value.substring(0,textarea.selectionStart));
Línea 340: Línea 359:
 
   }else{
 
   }else{
 
     // alert( "Previous pstart=" + pstart + " selectionStart=" + textarea.selectionStart + " pstart:selectionStart=" + textarea.value.substring(pstart,textarea.selectionStart));
 
     // alert( "Previous pstart=" + pstart + " selectionStart=" + textarea.selectionStart + " pstart:selectionStart=" + textarea.value.substring(pstart,textarea.selectionStart));
 +
//    if(textarea.value.substring(pstart,textarea.selectionStart).match("{{TextTerm")){
 +
    if(textarea.value.substring(pstart-"{{TextTerm".length,pstart).match("{{TextTerm")){
 +
    var ptermtype="TextTerm";
 +
    }else if (textarea.value.substring(pstart-"{{NewTextTerm".length,pstart).match("{{NewTextTerm")){
 +
      var ptermtype="NewTextTerm";
 +
    }else
 +
        var ptermtype="";
 
     var pend = textarea.value.substring(pstart,textarea.selectionStart). search("}}") ; // Regex ?
 
     var pend = textarea.value.substring(pstart,textarea.selectionStart). search("}}") ; // Regex ?
 
     // alert( "Previous pstart=" + pstart + " pend= " + pend + " selectionStart=" + textarea.selectionStart + " pstart:selectionStart=" + textarea.value.substring(pstart,textarea.selectionStart));
 
     // alert( "Previous pstart=" + pstart + " pend= " + pend + " selectionStart=" + textarea.selectionStart + " pstart:selectionStart=" + textarea.value.substring(pstart,textarea.selectionStart));
Línea 357: Línea 383:
 
   //                                        ><  nrange    >
 
   //                                        ><  nrange    >
 
   //                      #<-offsetnstart--->!  
 
   //                      #<-offsetnstart--->!  
   var nstart = textarea.value.substring(textarea.selectionEnd,textarea.length). search("{{TextTerm")  
+
   var nstart = textarea.value.substring(textarea.selectionEnd,textarea.value.length). search("{{TextTerm|{{NewTextTerm") ;
 
   if ( nstart == -1) { // No next
 
   if ( nstart == -1) { // No next
     // alert( "NO next TextTerm : " +  textarea.value.substring(textarea.selectionEnd,textarea.length));
+
     // alert( "NO next TextTerm : " +  textarea.value.substring(textarea.selectionEnd,textarea.value.length));
 
     noffset = null;
 
     noffset = null;
 
     nrange = null;
 
     nrange = null;
 
   }else{
 
   }else{
     var nend = textarea.value.substring(textarea.selectionEnd + nstart,textarea.length). search("}}") ;
+
    if(textarea.value.substring(nstart,textarea.selectionStart).match("{{TextTerm")){
 +
    var ntermtype="TextTerm";
 +
    }else if (textarea.value.substring(textarea.selectionStart,textarea.selectionEnd).match("{{NewTextTerm")){
 +
      var ntermtype="NewTextTerm";
 +
    }else
 +
      var ntermtype="";
 +
     var nend = textarea.value.substring(textarea.selectionEnd + nstart,textarea.value.length). search("}}") ;
 
     if ( nend == -1) { // Strange no ending
 
     if ( nend == -1) { // Strange no ending
       stop( "NO ending }} in previous : " + textarea.value.substring(textarea.selectionEnd,textarea.length)) ;
+
       stop( "NO ending }} in previous : " + textarea.value.substring(textarea.selectionEnd,textarea.value.length)) ;
 
     }else{
 
     }else{
 
       noffset = nstart ;
 
       noffset = nstart ;
Línea 376: Línea 408:
  
 
   oldFormHide();
 
   oldFormHide();
   template = "TextTerm";
+
   if (!ctermtype)
 +
    template = "TextTerm";
 +
  else
 +
    template = ctermtype;
 
   var legend;
 
   var legend;
 
   if (template == "TextTerm") {
 
   if (template == "TextTerm") {
 
     legend = "TextTerm source";
 
     legend = "TextTerm source";
 +
  } else if  (template == "NewTextTerm"){
 +
    legend = "NewTextTerm source";
 
   } else {
 
   } else {
 
     legend = "Cite news source";
 
     legend = "Cite news source";
Línea 386: Línea 423:
  
 
   numforms++;
 
   numforms++;
 +
  var  star_i="";
 +
  var  star_oi="";
 +
  if(texttermcur.indexentry == ""){
 +
    if(texttermcur.indexentry != texttermcur.indexentry_i){
 +
      star_i=" style='background-color:red'"; //<td style="background-color:red">
 +
      texttermcur.indexentry = texttermcur.indexentry_i;
 +
    }
 +
  } else {
 +
    star_i="";
 +
  }
 +
  if(texttermcur.otherindexentry == ""){
 +
    if(texttermcur.otherindexentry != texttermcur.otherindexentry_oi){
 +
      star_oi=" style='background-color:red'"; // <td style="background-color:red">
 +
      texttermcur.otherindexentry = texttermcur.otherindexentry_oi;
 +
    }
 +
  } else {
 +
      star_oi="";
 +
  }
 
   form = '<div id="citediv'+numforms+'">'+
 
   form = '<div id="citediv'+numforms+'">'+
 
     '<fieldset><legend>'+legend+'</legend>'+
 
     '<fieldset><legend>'+legend+'</legend>'+
Línea 402: Línea 457:
 
     '<td width="40"><input type="text" tabindex=1 style="width:10%" id="section" value= "' +
 
     '<td width="40"><input type="text" tabindex=1 style="width:10%" id="section" value= "' +
 
     texttermcur.section + '"></td>'+
 
     texttermcur.section + '"></td>'+
     '<td width="120"><label for="indexentry">&nbsp;IndexEntry: </label></td>'+
+
     '<td width="120"'+star_i+'><label for="indexentry">&nbsp;IndexEntry: </label></td>'+
 
     '<td width="400"><input type="text" tabindex=1 style="width:100%" id="indexentry" value= "' +
 
     '<td width="400"><input type="text" tabindex=1 style="width:100%" id="indexentry" value= "' +
 
     texttermcur.indexentry + '"></td></tr>'+
 
     texttermcur.indexentry + '"></td></tr>'+
     '<tr><td width="120"><label for="otherindexentry">&nbsp;OtherIndexEntry: </label></td>'+
+
     '<tr><td width="120"'+star_oi+'><label for="otherindexentry">&nbsp;OtherIndexEntry:: </label></td>'+
 
     '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentry" value= "' +
 
     '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentry" value= "' +
 
     texttermcur.otherindexentry + '"></td>'+
 
     texttermcur.otherindexentry + '"></td>'+
Línea 664: Línea 719:
 
     var savepos= textarea.selectionStart;
 
     var savepos= textarea.selectionStart;
 
     if ('selectionStart' in textarea) {
 
     if ('selectionStart' in textarea) {
       textarea.value=textarea.value.substring(0,textarea.selectionStart) + texttermchain + textarea.value.substring(textarea.selectionEnd, textarea.length);  
+
       textarea.value=textarea.value.substring(0,textarea.selectionStart) + texttermchain + textarea.value.substring(textarea.selectionEnd, textarea.value.length);  
 
       //insertTags(texttermchain, '', '');
 
       //insertTags(texttermchain, '', '');
 
       textarea.selectionStart = savepos;
 
       textarea.selectionStart = savepos;

Revisión del 12:06 7 may 2019

var numforms = 0;
var wikEdAutoUpdateUrl;
function refbuttons() {
  if (mw.toolbar && (document.getElementById('toolbar') || document.getElementById('wikiEditor-ui-toolbar'))/* && wikEdAutoUpdateUrl == null*/) {
    if (document.getElementById('toolbar')) {
      button = document.createElement('a');
      button.href = "javascript:easyCiteMain()";
      button.title = "Insert citation";
      buttonimage = document.createElement('img');
      buttonimage.src = "http://upload.wikimedia.org/wikipedia/commons/0/00/Button_easy_cite_%281%29.png";
      buttonimage.alt = "Insert footnote";
      button.appendChild(buttonimage);
      document.getElementById('toolbar').appendChild(button);
    } else {
      button = document.createElement('a');
      button.href = "#";
      button.title = "Insert citation";
      button.id = 'reftoolbar-button';
      buttonimage = document.createElement('img');
      buttonimage.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Curly_Brackets.svg/22px-Curly_Brackets.svg.png";
      buttonimage.alt = "Insert citation";
      button.classname = "tool tool-button";
      buttonimage.style.width = "22px";
      buttonimage.style.height = "17px";
      buttonimage.style.paddingTop = "5px";
      buttonimage.style.paddingLeft = "3px";
      button.appendChild(buttonimage)
      document.getElementById('wikiEditor-ui-toolbar').childNodes[0].childNodes[1].appendChild(button);
      //document.getElementById('reftoolbar-button').onclick = easyCiteMain;
      $(document).on('click', '#reftoolbar-button', function() { easyCiteMain(); });
    }
    if (navigator.userAgent.indexOf('MSIE') == -1) {
      //alert("NO MSIE");
      citemain = document.createElement('div');
      citemain.style.display = 'none';
      citemain.setAttribute('Id', 'citeselect');
      citemain.appendChild( addOption("citeWeb()", "Cite web") );
      citemain.appendChild( addOption("citeBook()", "Cite book") );
      citemain.appendChild( addOption("citeJournal()", "Cite journal") );
      citemain.appendChild( addOption("citeNews()", "Cite news") );
      citemain.appendChild( addOption("citeNamedRef()", "Named ref") );
      citemain.appendChild( addOption("dispErrors()", "Error check") );
      citemain.appendChild( addOption("hideInitial()", "Cancel") );
      citemain.appendChild( addOption("textTerm()", "TextTerm") );
      document.getElementById('wpTextbox1').parentNode.insertBefore(citemain, document.getElementById('wpTextbox1'));
    }
    else {
      selection = '<div id="citeselect" style="display:none"><input type="button" value="Cite web" onclick="citeWeb()" />'+
        '<input type="button" value="Cite book" onclick="citeBook()" />'+
        '<input type="button" value="Cite journal" onclick="citeJournal()" />'+
        '<input type="button" value="Cite news" onclick="citeNews()" />'+
        '<input type="button" value="Named ref" onclick="citeNamedRef()" />'+
        '<input type="button" value="Error check" onclick="dispErrors()" />'+
        '<input type="button" value="Cancel" onclick="hideInitial()" />'+
        '<input type="button" value="TextTerm" onclick="textTerm()" /></div>';
      document.getElementById('editform').innerHTML = selection + document.getElementById('editform').innerHTML;
    }
  }
}

function addOption(script, text) {
  option = document.createElement('input');
  option.setAttribute('type', 'button');
  option.setAttribute('onclick', script);
  option.setAttribute("value", text);
  return option;
}

function hideInitial() {
  document.getElementById('citeselect').style.display = 'none';
  oldFormHide();
}

function oldFormHide() {
  if (numforms != 0) {
    document.getElementById('citediv'+numforms).style.display = 'none';
  }
  if (document.getElementById('errorform') != null) {
    document.getElementById('citeselect').removeChild(document.getElementById('errorform'));
  }
} 

function easyCiteMain() {
  document.getElementById('citeselect').style.display = '';
}

var months = ['January', 'February', 'March', 'April', 'May', 'June',
              'July', 'August', 'September', 'October', 'November', 'December'];
var citeGlobalDateFormat = "<date> <monthname> <year>";
function getTime() {
  var datestr = '';
  if (typeof citeUserDateFormat != 'undefined') {
    datestr = citeUserDateFormat;
  } else {
    datestr = citeGlobalDateFormat;
  }
  var DT = new Date();
  var zmonth = '';
  var month = DT.getUTCMonth()+1;
  if (month < 10) {
    zmonth = "0"+month.toString();
  } else {
    zmonth = month.toString();
  }
  month = month.toString();
  var zdate = '';
  var date = DT.getUTCDate()
  if (date < 10) {
    zdate = "0"+date.toString();
  } else {
    zdate = date.toString();
  }
  date = date.toString()
  datestr = datestr.replace('<date>', date);
  datestr = datestr.replace('<month>', month);
  datestr = datestr.replace('<zdate>', zdate);
  datestr = datestr.replace('<zmonth>', zmonth);
  datestr = datestr.replace('<monthname>', months[DT.getUTCMonth()]);
  datestr = datestr.replace('<year>', DT.getUTCFullYear().toString());
  return (datestr);
}

function citeWeb() {
  citeNewsWeb("cite web");
}
function citeNews() {
  citeNewsWeb("cite news");
}

function textTerm() {
  textTermf();
} 

var texttermall = [];
var texttermcur = [];
var textterminput = [];
var poffset=null, prange=null, noffset=null, nrange=null;
var section = '';
var subnote = '';

function textTermf() {
  textTermform(null,null);
}

function nexttextterm() {
  //console.log("nexttexterm before noffset :" + noffset + " nrange=" + nrange);
  savetextterms(); // Save if changed
  if(noffset){ // If there is a next
    textTermform(noffset, nrange); // Call with offset !{{TextTerm    }}
  }
}
function previoustextterm() {
  //console.log("previoustexterm before poffset :" + poffset + " prange=" + prange);
  savetextterms();
  if(poffset){ // If there is a next
    textTermform(poffset, prange); // Call with offset !{{TextTerm    }}
  }
}



function texttermfill(subtext) {
  var ref = [];
  this.term = '';
  this.note= '';
  this.section= '';
  if(section != '')
    this.section = section;
  this.subnote = '';
  if(subnote != '')
    this.subnote = subnote;
  this.englishentry= '';
  this.indexentry= '';
  this.otherindexentry = '';
  this.otherindexentrytwo = '';
  this.otherindexentrythree = '';
  this.otherindexentryfour = '';
  this.otherindexentryfive = '';

  var j=0;
  var nr=true;
  regexbar= /\|([^|]*)/gm 
  //regexbar =/\|((.)*?)(?=[\||\n])/gm //"|programmes de population|1|933|IndexEntry=programme de population|OtherIndexEntry=population, programme de"
  do {
    ref = regexbar.exec(subtext);
    //console.log(" subtext=" + subtext);
    //console.log(" ref=" + ref);
    if(ref != null){
      switch (j)
      {
        case 0 : this.term = ref[1]; break;
        case 1 : this.note = ref[1]; break;
        case 2 : this.section = ref[1]; break;
        default :
        if(ref[1].match(/^ *?EnglishEntry *?= *?(.*) *?$/))
          this.englishentry = ref[1].replace(/^ *?EnglishEntry *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?IndexEntry *?= *?(.*) *?$/))
          this.indexentry = ref[1].replace(/^ *?IndexEntry *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?OtherIndexEntry *?= *?(.*) *?$/))
          this.otherindexentry = ref[1].replace(/^ *?OtherIndexEntry *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?OtherIndexEntryTwo *?= *?(.*) *?$/))
          this.otherindexentrytwo = ref[1].replace(/^ *?OtherIndexEntryTwo *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?OtherIndexEntryThree *?= *?(.*) *?$/))
          this.otherindexentrythree = ref[1].replace(/^ *?OtherIndexEntryThree *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?OtherIndexEntryFour *?= *?(.*) *?$/))
          this.otherindexentryfour = ref[1].replace(/^ *?OtherIndexEntryFour *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?OtherIndexEntryFive *?= *?(.*) *?$/))
          this.otherindexentryfive = ref[1].replace(/^ *?OtherIndexEntryFive *?= *?(.*) *?$/,"$1");
        else if(ref[1].match(/^ *?EnglishEntry *?= *?(.*) *?$/))
          this.englishentry = ref[1].replace(/^ *?EnglishEntry *?= *?(.*) *?$/,"$1");
        else if(j==3){
          this.subnote = ref[1];
        }else{
          alert("texttermfill error j=" + j + " ref1= " +ref[1]);
          //console.log("texttermfill error j=" + j + " ref1= " +ref[1]);
        }
      }
      j++;
    } else {
      nr=false;
    }
  } while (nr==true);
    this.indexentry_i=this.term.replace(/(\w+)s/g, "$1");
    this.otherindexentry_oi=this.indexentry_i.replace(/(.*) (.*)/, "$2. $1");
  //console.log("j=" + j + " term=" + this.term + " note=" + this.note + " section=" + this.section +" subnote=" + this.subnote +" indexentry=" + this.indexentry + " otherindexentry=" + this.otherindexentry);
}


function textTermform(offset,range){

  // We search for TextTerm in wptexbox1 from cursor position (offset) and if selected (range)
  // If called by a previous or next, they are not null {{TextTerm<-......>}}
  // if outside of a TextTerm template, we will fill with the term with the selection
  // in any case we compute the previous nextstart and previus end and next offset not real.
  // if inside a TextTerm we fill the form
  // if saveterm is necessary, we save and exit.
  // if previous or next, we save if necessary and we call textTermform with a new offset >0 (next) or <0 (previous) and range
  // 
  var textarea= document.getElementById('wpTextbox1');
  if ('selectionStart' in textarea) {
    if (offset == null){ // range should be null too
      offset = textarea.selectionStart;
      range = textarea.selectionEnd - textarea.selectionStart;
      realltxtterms = /({{TextTerm)|({{NewTextTerm)/gm; // works, finds after Term
      var lstxtterm =-1;
      subtextt= textarea.value.substring(0,textarea.selectionEnd);
      while ((nbtxt=realltxtterms.exec(subtextt))){ lstxtterm=realltxtterms.lastIndex- nbtxt[0].length}
      //var lstxtterm = textarea.value.substring(0,textarea.selectionEnd). search("{{TextTerm|{{NewTextTerm") ; // Just before the string. No regex
      var lstcltxtterm = textarea.value.substring(0,textarea.selectionStart). lastIndexOf("}}") ; //might be for another purpose than TextTerm
      // Looking for the section
      section = '';
      var psectione = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("===") ; // Just before the string. No regex
      if(psectione != -1){
        var psections = textarea.value.substring(0,psectione). lastIndexOf("===") ; // Just before the string. No regex
        if(psections != -1){
          section =  textarea.value.substring(psections,psectione+3).match(/^=== *?(\d{3}) *?===$/)[1];
        }
      }
      //console.log(" section |" + section);
      //textarea.value.substring(0,textarea.selectionStart). search(new RegExp("((({{TextTerm[^}]+)[^{]+)+)");
      
      if ( (-1 == lstxtterm) || ((-1 < lstxtterm) && (lstxtterm < lstcltxtterm)) ) { // @{{TextTerm ...@}}...(...).. 
        // {{Refnumber }} ....! 
        // alert("We are after outside a previous TextTerm or no TextTerm before:" + textarea.value.substring(0,textarea.selectionStart ));
        texttermcur = new texttermfill("|" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
        //console.log(" We want to fill with the selection=" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
        // On se retrouve avec du texte à ajouter et le curseur inchangé à textarea.selectionStart   
      } else if ( (lstxtterm > lstcltxtterm) && (lstcltxtterm > -1) ) { // @}}... @{{TextTerm ... (...).. 
        //alert("We are within a TextTerm or no closing }}:" + textarea.value.substring(lstcltxtterm, lstxtterm));
        
        // ( textarea.value.substring(lstxtterm, textarea.selectionStart). search(new RegExp("}}")) == -1) {
        var endtxterm= textarea.value.substring(textarea.selectionStart, textarea.value.length). search("}}");
        if( endtxterm == -1)
          error(" Error no closing TextTerm; should be fixed:" + textarea.value.substring(textarea.selectionStart, textarea.value.length));
        else{
          endtxterm = endtxterm + textarea.selectionStart +2 ; // }} included
          // Looking for @{{TextTerm....}}@
          // alert("We are within textterm  " + lstxtterm + " to " + endtxterm + " soit:" + textarea.value.substring(lstxtterm,endtxterm) );
          //console.log(" Replacing with form result:" + textarea.value.substring(lstxtterm+"{{TextTerm".length,endtxterm-"}}".length));
          texttermcur = new texttermfill(textarea.value.substring(lstxtterm+"{{TextTerm".length,endtxterm-"}}".length) );
          // On devrait remplacer {{TextTerm ...}} par la forme, soit de lstxtterm endtxtterm
          // On se fout de la sélection originale et la repositionne sur toute l'étendue du textterm.
          // alert("After null before textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
          // alert(" selection is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
          textarea.selectionStart = lstxtterm;
          textarea.selectionEnd = endtxterm;
          // alert("After null textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
          // alert(" selection is now:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
        } //en endtxtterm
      } // end  @}}... @{{TextTerm ... (...).. 
    }else{ // coming from a previous or next
      // alert("After Next textarea.selectionStart is" + textarea.selectionStart + " end=" +  textarea.selectionEnd);
      // alert(" After next selection is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
      // alert("Coming from a previous or next modifing selectionStart start is an offsetstart =" + offset + " and range=" + range)
      // Previous
      //                                selectionStart selectionEnd
      //                                         >                <
      // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
      //       !<-range-------->! 
      //                       #<-offset--------->! 
      // Next
      //  selectionStart selectionEnd
      //      >                 <
      // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
      //                                         !<--range------->! 
      //                       #<-offset--------->! 
      // alert(" Before textarea.selectionStart=" + textarea.selectionStart + " textarea.selectionEnd=" + textarea.selectionEnd);
      //alert(" Before is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
      textarea.selectionStart = (offset > 0 ? textarea.selectionEnd + offset : textarea.selectionStart + offset -range);
      textarea.selectionEnd = textarea.selectionStart + range;
      // Looking for the section
      section = '';
      var psectione = textarea.value.substring(0,textarea.selectionEnd). lastIndexOf("===") ; // Just before the string. No regex
      if(psectione != -1){
        var psections = textarea.value.substring(0,psectione). lastIndexOf("===") ; // Just before the string. No regex
        if(psections != -1){
          section =  textarea.value.substring(psections,psectione+3).match(/^=== *?(\d{3}) *?===$/)[1];
        }
      }
      //console.log(" section Other |" + section);

      // alert(" After is:" + textarea.value.substring(textarea.selectionStart,textarea.selectionEnd));
      // alert(" After textarea.selectionStart=" + textarea.selectionStart + " textarea.selectionEnd=" + textarea.selectionEnd);
      //console.log("textterm cur is:" + textarea.value.substring(textarea.selectionStart+"{{TextTerm".length,textarea.selectionEnd-"}}".length));
      // We are at the beginning of a selection or of a {{TextTerm or NewTextTerm and we should know the length until |
      if(textarea.value.substring(textarea.selectionStart,textarea.selectionEnd).match("{{TextTerm")){
        var ctermtype="TextTerm";
      }else if (textarea.value.substring(textarea.selectionStart,textarea.selectionEnd).match("{{NewTextTerm")){
        var ctermtype="NewTextTerm";
      }else
        var ctermtype="";

     // texttermcur = new texttermfill(textarea.value.substring(textarea.selectionStart+"{{TextTerm".length,textarea.selectionEnd-"}}".length) );

      texttermcur = new texttermfill(textarea.value.substring(textarea.selectionStart+ctermtype.length,textarea.selectionEnd-"}}".length) );
    }
  }else{
    alert("No selectionStart Internet Explorer < 9?");
  }  
  // Looking for previous and next
  // Previous
  // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
  //                        poffset
  //       <   prange      ><
  //       ><              ><
  //     pstart          pend
  //       !<--------offsetpstart------------>! 
  //                       #<-offsetpsend---->!
  //realltxtterms = /({{TextTerm[^}]+)|({{NewTextTerm[^}]+)/gm; // works, finds end of }}
  realltxtterms = /({{TextTerm)|({{NewTextTerm)/gm; // works, finds after Term
  var pstart=-1;
  subtextt= textarea.value.substring(0,textarea.selectionStart);
  while ((nbtxt=realltxtterms.exec(subtextt))){ pstart=realltxtterms.lastIndex- nbtxt[0].length}
  //  var pstart = textarea.value.substring(0,textarea.selectionStart). search("{{TextTerm|{{NewTextTerm");
  if ( pstart == -1) { // No previous
    // alert( "NO previous : " + textarea.value.substring(0,textarea.selectionStart));
    poffset = null;
    prange = null;
  }else{
    // alert( "Previous pstart=" + pstart + " selectionStart=" + textarea.selectionStart + " pstart:selectionStart=" + textarea.value.substring(pstart,textarea.selectionStart));
//    if(textarea.value.substring(pstart,textarea.selectionStart).match("{{TextTerm")){
    if(textarea.value.substring(pstart-"{{TextTerm".length,pstart).match("{{TextTerm")){
     var ptermtype="TextTerm";
    }else if (textarea.value.substring(pstart-"{{NewTextTerm".length,pstart).match("{{NewTextTerm")){
      var ptermtype="NewTextTerm";
    }else
        var ptermtype="";
    var pend = textarea.value.substring(pstart,textarea.selectionStart). search("}}") ; // Regex ?
    // alert( "Previous pstart=" + pstart + " pend= " + pend + " selectionStart=" + textarea.selectionStart + " pstart:selectionStart=" + textarea.value.substring(pstart,textarea.selectionStart));
    if ( pend == -1) { // Strange no ending
      stop( "NO ending }} in previous : " + textarea.value.substring(0,textarea.selectionStart));
    }else{
      prange = pend + 2; // }} included
      poffset = pstart + prange - textarea.selectionStart;  // should be negative
      // alert( " prange =" + prange + " poffset=" + poffset);
    }
  }
  // Next
  // ^....@{{TextTerm....#}}.................@{{TextTerm ...}}!
  //                       !<--------offsetnend-------------->! 
  //                       #<-offsetnstart--->! 
  //                                      noffset
  //                                         ><   nrange     >
  //                       #<-offsetnstart--->! 
  var nstart = textarea.value.substring(textarea.selectionEnd,textarea.value.length). search("{{TextTerm|{{NewTextTerm") ;
  if ( nstart == -1) { // No next
    // alert( "NO next TextTerm : " +  textarea.value.substring(textarea.selectionEnd,textarea.value.length));
    noffset = null;
    nrange = null;
  }else{
    if(textarea.value.substring(nstart,textarea.selectionStart).match("{{TextTerm")){
     var ntermtype="TextTerm";
    }else if (textarea.value.substring(textarea.selectionStart,textarea.selectionEnd).match("{{NewTextTerm")){
      var ntermtype="NewTextTerm";
    }else
      var ntermtype="";
    var nend = textarea.value.substring(textarea.selectionEnd + nstart,textarea.value.length). search("}}") ;
    if ( nend == -1) { // Strange no ending
      stop( "NO ending }} in previous : " + textarea.value.substring(textarea.selectionEnd,textarea.value.length)) ;
    }else{
      noffset = nstart ;
      nrange = nend +2 ;// }}
    }
  }


  // We do have offset or null, as well formfilled with a selection.

  oldFormHide();
  if (!ctermtype)
    template = "TextTerm";
  else
    template = ctermtype;
  var legend;
  if (template == "TextTerm") {
    legend = "TextTerm source";
  } else if  (template == "NewTextTerm"){
    legend = "NewTextTerm source";
  } else {
    legend = "Cite news source";
  }
  newtime = getTime();

  numforms++;
  var  star_i="";
  var  star_oi="";
  if(texttermcur.indexentry == ""){
    if(texttermcur.indexentry != texttermcur.indexentry_i){
      star_i=" style='background-color:red'"; //<td style="background-color:red">
      texttermcur.indexentry = texttermcur.indexentry_i;
    }
  } else {
    star_i="";
  }
  if(texttermcur.otherindexentry == ""){
    if(texttermcur.otherindexentry != texttermcur.otherindexentry_oi){
      star_oi=" style='background-color:red'"; // <td style="background-color:red">
      texttermcur.otherindexentry = texttermcur.otherindexentry_oi;
    }
  } else {
      star_oi="";
  }
  form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>'+legend+'</legend>'+
    '<table cellspacing="5">'+
    '<input type="hidden" value="'+template+'" id="template">'+
    '<tr><td><label for="term">&nbsp;*Term or expression: </label></td>'+
    '<td colspan="3"><input type="text" tabindex=1 style="width:100%" id="term" value= "' +
    texttermcur.term + '"></tr>'+
    '<tr><td width="100"><label for="note">&nbsp;*Note number (1, 2 etc .): </label></td>'+
    '<td width="40"><input type="text" tabindex=1 style="width:10%" id="note" value= "' +
    texttermcur.note + '"></td>'+
    '<td width="100"><label for="subnote">&nbsp;Subnote (2): </label></td>'+
    '<td width="40"><input type="text" tabindex=1 style="width:10%" id="subnote" value= "' +
    texttermcur.subnote + '"></td></tr>'+
    '<tr><td width="300"><label for="section">&nbsp;Section (102, 933 etc.): </label></td>'+
    '<td width="40"><input type="text" tabindex=1 style="width:10%" id="section" value= "' +
    texttermcur.section + '"></td>'+
    '<td width="120"'+star_i+'><label for="indexentry">&nbsp;IndexEntry: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="indexentry" value= "' +
    texttermcur.indexentry + '"></td></tr>'+
    '<tr><td width="120"'+star_oi+'><label for="otherindexentry">&nbsp;OtherIndexEntry:: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentry" value= "' +
    texttermcur.otherindexentry + '"></td>'+
    '<td width="120"><label for="otherindexentrytwo">&nbsp;OtherIndexEntryTwo: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentrytwo" value= "' +
    texttermcur.otherindexentrytwo + '"></td></tr>'+
    '<tr><td width="120"><label for="otherindexentrythree">&nbsp;OtherIndexEntryThree: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentrythree" value= "' +
    texttermcur.otherindexentrythree + '"></td>'+
    '<td width="120"><label for="otherindexentryfour">&nbsp;OtherIndexEntryFour: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentryfour" value= "' +
    texttermcur.otherindexentryfour + '"></td></tr>'+
    '<tr><td width="120"><label for="otherindexentryfive">&nbsp;OtherIndexEntryFive: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="otherindexentryfive" value= "' +
    texttermcur.otherindexentryfive + '"></td>'+
    '<td width="120"><label for="englishentry">&nbsp;EnglishEntry (for Chinese and Japanese): </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="englishentry" value= "' +
    texttermcur.englishentry + '"></td></tr>'+
    '</table>'+
    '<input type="button" id="previous" value="(save &) previous TextTerm" onClick="previoustextterm()">'+
    '<input type="button" value="(save &) exit" onClick="savetextterms()">'+
    '<input type="button" id="next" value="(save &) next TextTerm" onClick="nexttextterm()">'+
    '</fieldset></div>';
  document.getElementById('citeselect').innerHTML += form;
}


function citeNewsWeb(templatename) {
  oldFormHide();
  template = templatename;
  var legend;
  if (template == "cite web") {
    legend = "Cite web source";
  } else {
    legend = "Cite news source";
  }
  newtime = getTime();
  numforms++;
  form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>'+legend+'</legend>'+
    '<table cellspacing="5">'+
    '<input type="hidden" value="'+template+'" id="template">'+
    '<tr><td width="120"><label for="url">&nbsp;URL: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="url"></td>'+
    '<td width="120"><label for="title">&nbsp;Title: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="title"></td></tr>'+
    '<tr><td width="120"><label for="last">&nbsp;Last name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="last"></td>'+
    '<td width="120"><label for="first">&nbsp;First name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="first"></td></tr>'+
    '<tr><td width="120"><label for="coauthors">&nbsp;Coauthors: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="coauthors"></td>'+
    '<td width="120"><label for="date">&nbsp;Publication date: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="date"></td></tr>'+
    '<tr><td width="120"><label for="work">&nbsp;Work: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="work"></td>'+
    '<td width="120"><label for="publisher">&nbsp;Publisher: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="publisher"></td></tr>'+
    '<tr><td width="120"><label for="pages">&nbsp;Pages: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="pages"></td>'+
    '<td width="120"><label for="language">&nbsp;Language: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="language"></td></tr>'+
    '<tr><td width="120"><label for="accessdate">&nbsp;Access date: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="accessdate" value="'+ newtime +'"></td>'+
    '<td width="120"><label for="location">&nbsp;Location: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="location"></td></tr>'+
    '<tr><td width="120"><label for="refname">&nbsp;Reference name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="refname"></td></tr>'+
    '</table>'+
    '<input type="button" value="Add citation" onClick="addcites()">'+
    '</fieldset></div>';
  document.getElementById('citeselect').innerHTML += form;
}

function citeBook() {
  oldFormHide();
  template = "cite book";
  numforms++;
  form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite book source</legend>'+
    '<table cellspacing="5">'+
    '<input type="hidden" value="'+template+'" id="template">'+
    '<tr><td width="120"><label for="last">&nbsp;Last name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="last"></td>'+
    '<td width="120"><label for="first">&nbsp;First name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="first"></td></tr>'+
    '<tr><td width="120"><label for="coauthors">&nbsp;Coauthors: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="coauthors"></td>'+
    '<td width="120"><label for="others">&nbsp;Others: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="others"></td></tr>'+
    '<tr><td width="120"><label for="title">&nbsp;Title: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="title"></td>'+
    '<td width="120"><label for="editor">&nbsp;Editor: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="editor"></td></tr>'+
    '<tr><td width="120"><label for="publisher">&nbsp;Publisher: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="publisher"></td>'+
    '<td width="120"><label for="location">&nbsp;Location: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="location"></td></tr>'+
    '<tr><td width="120"><label for="date">&nbsp;Publication date: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="date"></td>'+
    '<td width="120"><label for="edition">&nbsp;Edition: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="edition"></td></tr>'+
    '<tr><td width="120"><label for="series">&nbsp;Series: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="series"></td>'+
    '<td width="120"><label for="volume">&nbsp;Volume: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="volume"></td></tr>'+
    '<tr><td width="120"><label for="pages">&nbsp;Pages: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="pages"></td>'+
    '<td width="120"><label for="chapter">&nbsp;Chapter: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="chapter"></td></tr>'+
    '<tr><td width="120"><label for="isbn">&nbsp;ISBN: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="isbn"></td>'+
    '<td width="120"><label for="oclc">&nbsp;OCLC: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="oclc"></td></tr>'+
    '<tr><td width="120"><label for="url">&nbsp;URL: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="url"></td>'+
    '<td width="120"><label for="accessdate">&nbsp;Access date: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="accessdate"></td></tr>'+
    '<tr><td width="120"><label for="language">&nbsp;Language: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="language"></td>'+
    '<td width="120"><label for="refname">&nbsp;Reference name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="refname"></td></tr>'+
    '</table>'+
    '<input type="button" value="Add citation" onClick="addcites()">'+
    '</fieldset></div>';
  document.getElementById('citeselect').innerHTML += form;
}

function citeJournal() {
  oldFormHide();
  template = "cite journal";
  numforms++;
  form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite book source</legend>'+
    '<table cellspacing="5">'+
    '<input type="hidden" value="'+template+'" id="template">'+
    '<tr><td width="120"><label for="last">&nbsp;Last name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="last"></td>'+
    '<td width="120"><label for="first">&nbsp;First name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="first"></td></tr>'+
    '<tr><td width="120"><label for="coauthors">&nbsp;Coauthors: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="coauthors"></td>'+
    '<td width="120"><label for="date">&nbsp;Publication date: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="date"></td></tr>'+
    '<tr><td width="120"><label for="title">&nbsp;Title: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="title"></td>'+
    '<td width="120"><label for="journal">&nbsp;Journal: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="journal"></td></tr>'+
    '<tr><td width="120"><label for="publisher">&nbsp;Publisher: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="publisher"></td>'+
    '<td width="120"><label for="location">&nbsp;Location: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="location"></td></tr>'+
    '<tr><td width="120"><label for="volume">&nbsp;Volume: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="volume"></td>'+
    '<td width="120"><label for="issue">&nbsp;Issue: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="issue"></td></tr>'+
    '<tr><td width="120"><label for="pages">&nbsp;Pages: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="pages"></td>'+
    '<td width="120"><label for="issn">&nbsp;ISSN: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="issn"></td></tr>'+
    '<tr><td width="120"><label for="oclc">&nbsp;OCLC: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="oclc"></td>'+
    '<td width="120"><label for="language">&nbsp;Language: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="language"></td></tr>'+
    '<tr><td width="120"><label for="url">&nbsp;URL: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="url"></td>'+
    '<td width="120"><label for="accessdate">&nbsp;Access date: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="accessdate"></td></tr>'+
    '<tr><td width="120"><label for="refname">&nbsp;Reference name: </label></td>'+
    '<td width="400"><input type="text" tabindex=1 style="width:100%" id="refname"></td></tr>'+
    '</table>'+
    '<input type="button" value="Add citation" onClick="addcites()">'+
    '</fieldset></div>';
  document.getElementById('citeselect').innerHTML += form;
}

function saveinput(terminput) {
  //  terminput = document.getElementById('citediv'+numforms).getElementsByTagName('input');
  this.term = '';
  this.note= '';
  this.section = '';
  this.indexentry= '';
  this.otherindexentry = '';
  this.otherindexentrytwo = '';
  this.otherindexentrythree = '';
  this.otherindexentryfour = '';
  this.otherindexentryfive = '';
  this.englishentry = '';

  for (var i=0; i<terminput.length-1; i++) {
    if (terminput[i].id == "template" ){
      ;
    }else if (terminput[i].id == "term" ){
      this.term = terminput[i].value;
    }else if(terminput[i].id == "note"){
      this.note = terminput[i].value;
    }else if(terminput[i].id == "section"){
      this.section = terminput[i].value;
    }else if(terminput[i].id == "subnote"){
      this.subnote = terminput[i].value;
    }else if(terminput[i].id == "indexentry"){
      this.indexentry = terminput[i].value;
    }else if(terminput[i].id == "otherindexentry"){
      this.otherindexentry = terminput[i].value;
    }else if(terminput[i].id == "otherindexentrytwo"){
      this.otherindexentrytwo = terminput[i].value;
    }else if(terminput[i].id == "otherindexentrythree"){
      this.otherindexentrythree = terminput[i].value;
    }else if(terminput[i].id == "otherindexentryfour"){
      this.otherindexentryfour = terminput[i].value;
    }else if(terminput[i].id == "otherindexentryfive"){
      this.otherindexentryfive = terminput[i].value;
    }else if(terminput[i].id == "englishentry"){
      this.englishentry = terminput[i].value;
    }else{
      ;;//alert(" SaveInput terminput[i].id = " + terminput[i].id + " terminput[i].value =" + terminput[i].value);
    }

  }
}

function savetextterms(template) {
  var txtterminput = document.getElementById('citediv'+numforms).getElementsByTagName('input');
  textterminput = new saveinput(txtterminput);
  //alert("texttermcur=" + texttermcur);
  //alert("textterminput=" + textterminput);
  // Testing
  var different = false;
  if((textterminput.term != texttermcur.term) || (textterminput.note != texttermcur.note) ||
     (textterminput.section != texttermcur.section) ||
     (textterminput.subnote != texttermcur.subnote) ||
     (textterminput.indexentry != texttermcur.indexentry) ||
     (textterminput.otherindexentry != texttermcur.otherindexentry) || 
     (textterminput.otherindexentrytwo != texttermcur.otherindexentrytwo) ||
     (textterminput.otherindexentrythree != texttermcur.otherindexentrythree) ||
     (textterminput.otherindexentryfour != texttermcur.otherindexentryfour) ||
     (textterminput.otherindexentryfive != texttermcur.otherindexentryfive) ||
     (textterminput.englishentry != texttermcur.englishentry) )
    different = true;

  if (different){
    // alert(" They are different, have to save" );
    var texttermchain="{{TextTerm";
    texttermchain += '|' + (textterminput.term ? textterminput.term : '');
    texttermchain += '|' + (textterminput.note ? textterminput.note : '');
    texttermchain += (textterminput.section ? '|' + textterminput.section : '');
    texttermchain += (textterminput.subnote ? '|' + textterminput.subnote : '');
    texttermchain += (textterminput.indexentry ? '|IndexEntry='+ textterminput.indexentry : '');
    texttermchain += (textterminput.otherindexentry ? '|OtherIndexEntry='+ textterminput.otherindexentry : '');
    texttermchain += (textterminput.otherindexentrytwo ? '|OtherIndexEntryTwo='+ textterminput.otherindexentrytwo : '');
    texttermchain += (textterminput.otherindexentrythree ? '|OtherIndexEntryThree='+ textterminput.otherindexentrythree : '');
    texttermchain += (textterminput.otherindexentryfour ? '|OtherIndexEntryFour='+ textterminput.otherindexentryfour : '');
    texttermchain += (textterminput.otherindexentryfive ? '|OtherIndexEntryFive='+ textterminput.otherindexentryfive : '');
    texttermchain += (textterminput.englishentry ? '|EnglishEntry='+ textterminput.englishentry : '');
    texttermchain += "}}";
    
    var textarea= document.getElementById('wpTextbox1');
    var savepos= textarea.selectionStart;
    if ('selectionStart' in textarea) {
      textarea.value=textarea.value.substring(0,textarea.selectionStart) + texttermchain + textarea.value.substring(textarea.selectionEnd, textarea.value.length); 
      //insertTags(texttermchain, '', '');
      textarea.selectionStart = savepos;
      textarea.selectionEnd = savepos + texttermchain.length;
    }
    else{
      alert("No selectionStart firefox");
    }
  }
  else{
    ;//alert(" They are similar, don't save" );
  }
  document.getElementById('citediv'+numforms).style.display = 'none';
  
}



function addcites(template) {
  cites = document.getElementById('citediv'+numforms).getElementsByTagName('input');
  var citebegin = '<ref';
  var citename = '';
  var citeinner = '';
  for (var i=0; i<cites.length-1; i++) {
    if (cites[i].value != '' && cites[i].id != "refname" && cites[i].id != "template") {
      citeinner += "|" + cites[i].id + "=" + cites[i].value;
    }
    else if (cites[i].value != '' && cites[i].id == "refname" && cites[i].id != "template") {
      citebegin += ' name="' + cites[i].value + '"';
    }
    else if (cites[i].value != '' && cites[i].id != "refname" && cites[i].id == "template") {
      citename = '>{{' + cites[i].value;
    }
  }
  cite = citebegin + citename + citeinner + "numforms=" + numforms + "}}</ref>";
  $("#wpTextbox1").focus();
  insertTags(cite, '', '');
  document.getElementById('citediv'+numforms).style.display = 'none';
}

function getNamedRefs(calls) {
  if (typeof(wikEdUseWikEd) != 'undefined') {
    if (wikEdUseWikEd == true) {
      WikEdUpdateTextarea();
    }
  }
  text = document.getElementById('wpTextbox1').value;
  var regex;
  if (calls) {
    regex = /< *?ref +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)) *?\/ *?>/gi //'
  } else {
    regex = /< *?ref +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)) *?>/gi //'
  }
  var namedrefs = [];
  var i=0;
  var nr=true;
  do {
    ref = regex.exec(text);
    if(ref != null){
      if (ref[5]) {
        namedrefs[i] = ref[5];
      } else if (ref[3]) {
        namedrefs[i] = ref[3];
      } else {
        namedrefs[i] = ref[6];
      }
      i++;
    } else {
      nr=false;
    }
  } while (nr==true);
  return namedrefs;
}

function citeNamedRef() {
  namedrefs = getNamedRefs(false);
  if (namedrefs == '') {
    oldFormHide();
    numforms++;
    out = '<div id="citediv'+numforms+'"><fieldset>'+
      '<legend>References in text</legend>There are no named refs (<tt>&lt;ref name="Name"&gt;</tt>) in the text</fieldset></div>';
    document.getElementById('citeselect').innerHTML += out;
  }
  else {
    oldFormHide();
    numforms++;
    form = '<div id="citediv'+numforms+'">'+
      '<fieldset><legend>References in article</legend>'+
      '<table cellspacing="5">'+
      '<tr><td><label for="namedrefs">&nbsp;Named references in text</label></td>'+
      '<td><select name="namedrefs" id="namedrefs">';
    for (var i=0;i<namedrefs.length;i++) {
      form+= '<option value="'+namedrefs[i]+'">'+namedrefs[i]+'</option>';
    }
    form+= '</select>'+
      '</td></tr></table>'+
      '<input type="button" value="Add citation" onClick="addnamedcite()">'+
      '</fieldset></div>';
    document.getElementById('citeselect').innerHTML += form;
  }
}

function addnamedcite() {
  name = document.getElementById('citediv'+numforms).getElementsByTagName('select')[0].value;
  ref = '<ref name="'+name+'" />';
  $("#wpTextbox1").focus();
  insertTags(ref, '', '');
  document.getElementById('citediv'+numforms).style.display = 'none';
}

function getAllRefs() {
  if (typeof(wikEdUseWikEd) != 'undefined') {
    if (wikEdUseWikEd == true) {
      WikEdUpdateTextarea();
    }
  }
  text = document.getElementById('wpTextbox1').value;
  regex = /< *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?>((.|\n)*?)< *?\/? *?ref *?>/gim //"
  var allrefs = [];
  var i=0;
  var nr=true;
  do {
    ref = regex.exec(text);
    if(ref != null){
      if (ref[0].search(/[^\s]{150}/) != -1) {
        ref[0] = ref[0].replace(/\|([^\s])/g, "| $1");
      }
      ref[0] = ref[0].replace(/</g, "&lt;");
      ref[0] = ref[0].replace(/>/g, "&gt;");
      allrefs[i] = ref[0];
      i++;
    } else {
      nr=false;
    }
  } while (nr==true);
  return allrefs;
}

function NRcallError(namedrefs, refname) {
  for (var i=0; i<namedrefs.length; i++) {
    if (namedrefs[i] == refname) {
      return true;
    }
  }
  return false;
}

function errorCheck() {
  var allrefs = getAllRefs();
  var allrefscontent = [];
  var samecontentexclude = [];
  var sx=0;
  var templateexclude = [];
  var tx=0;
  var skipcheck = false;
  var namedrefcalls = getNamedRefs(true);
  for (var i=0; i<allrefs.length; i++) {
    allrefscontent[i] = allrefs[i].replace(/&lt; *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?&gt;((.|\n)*?)&lt; *?\/? *?ref *?&gt;/gim, "$8");  //"
  }
  var namedrefs = getNamedRefs(false);
  var errorlist = [];
  var q=0;
  unclosed = document.getElementById('unclosed').checked;
  samecontent = document.getElementById('samecontent').checked;
  templates = document.getElementById('templates').checked;
  repeated = document.getElementById('repeated').checked;
  undef = document.getElementById('undef').checked;
  for (var i=0; i<allrefs.length; i++) {
    if (allrefs[i].search(/&lt; *?\/ *?ref *?&gt;/) == -1 && unclosed) {
      errorlist[q] = '<tr><td width="75%"><tt>'+allrefs[i]+'</tt></td>';
      errorlist[q] += '<td width="25%">Unclosed <tt>&lt;ref&gt;</tt> tag</td></tr>';
      q++;
    }
    if (samecontent) {
      for (var d=0; d<samecontentexclude.length; d++) {
        if (allrefscontent[i] == samecontentexclude[d]) {
          skipcheck = true;
        }
      }
      var p=0;
      while (p<allrefs.length && !skipcheck) {
        if (allrefscontent[i] == allrefscontent[p] && i != p) {
          errorlist[q] = '<tr><td width="75%"><tt>'+allrefscontent[i]+'</tt></td>';
          errorlist[q] += '<td width="25%">Multiple refs contain this content, a <a href="http://en.wikipedia.org/wiki/Wikipedia:Footnotes#Naming_a_ref_tag_so_it_can_be_used_more_than_once">named reference</a> should be used instead</td></tr>';
          q++;
          samecontentexclude[sx] = allrefscontent[i]
          sx++;
          break;
        }
        p++;
      }
      skipcheck=false;
    }
    if (templates) {
      if (allrefscontent[i].search(/\{\{cite/i) == -1 && allrefscontent[i].search(/\{\{citation/i) == -1 && allrefscontent[i].search(/\{\{Comic (book|strip) reference/i) == -1 && allrefscontent[i].search(/\{\{Editorial cartoon reference/i) == -1 && allrefscontent[i].search(/\{\{harv/i) == -1) {
        for (var x=0; x<templateexclude.length; x++) {
          if (allrefscontent[i] == templateexclude[x]) {
            skipcheck = true;
          }
        }
        if (!skipcheck) {
          errorlist[q] = '<tr><td width="75%"><tt>'+allrefs[i]+'</tt></td>';
          errorlist[q] += '<td width="25%">Does not use a <a href="http://en.wikipedia.org/wiki/Wikipedia:Citation_templates">citation template</a></td></tr>';
          q++;
          templateexclude[tx] = allrefscontent[i];
          tx++;
        }
        skipcheck = false;
      }
    }
  }
  if (repeated) {
    var repeatnameexclude = [];
    var rx=0;
    for (var k=0; k<namedrefs.length; k++) {
      for (var d=0; d<repeatnameexclude.length; d++) {
        if (namedrefs[k] == repeatnameexclude[d]) {
          skipcheck = true;
        }
      }
      var z=0;
      while (z<namedrefs.length && !skipcheck) {
        if (namedrefs[k] == namedrefs[z] && k != z) {
          errorlist[q] = '<tr><td width="75%"><tt>'+namedrefs[k]+'</tt></td>';
          errorlist[q] += '<td width="25%">Multiple references are given the same <a href="http://en.wikipedia.org/wiki/Wikipedia:Footnotes#Naming_a_ref_tag_so_it_can_be_used_more_than_once">name</a></td></tr>';
          q++;
          repeatnameexclude[rx] = namedrefs[z];
          rx++;
          break;
        }
        z++;
      }
      skipcheck = false;
    }
  }
  if (undef) {
    var undefexclude = [];
    var ux=0;
    for (var p=0; p<namedrefcalls.length; p++) {
      for (var d=0; d<undefexclude.length; d++) {
        if (allrefscontent[i] == undefexclude[d]) {
          skipcheck = true;
        }
      }
      if (!skipcheck) {
        if (!NRcallError(namedrefs, namedrefcalls[p])) {
          errorlist[q] = '<tr><td width="75%"><tt>'+namedrefcalls[p]+'</tt></td>';
          errorlist[q] += '<td width="25%">A <a href="http://en.wikipedia.org/wiki/Wikipedia:Footnotes#Naming_a_ref_tag_so_it_can_be_used_more_than_once">named reference</a> is used but not defined</td></tr>';
          q++;
          undefexclude[ux] = namedrefs[p];
          ux++;
        }
      }
      skipcheck = false;
    }
  }
  if (q > 0) {
    return errorlist;
  } else {
    return 0;
  }
}

function dispErrors() {
  oldFormHide();
  form = '<div id="errorform"><fieldset>'+
    '<legend>Error checking</legend>'+
    '<b>Check for:</b><br/>'+
    '<input type="checkbox" id="unclosed" /> Unclosed <tt>&lt;ref&gt;</tt> tags<br/>'+
    '<input type="checkbox" id="samecontent" /> References with the same content<br/>'+
    '<input type="checkbox" id="templates" /> References not using a <a href="http://en.wikipedia.org/wiki/Wikipedia:Citation_templates">citation template</a><br/>'+
    '<input type="checkbox" id="repeated" /> Multiple references with the same name<br/>'+
    '<input type="checkbox" id="undef" /> Usage of undefined named references<br/>'+
    '<input type="button" id="errorchecksubmit" value="Check for selected errors" onclick="doErrorCheck()"/>'+
    '</fieldset></div>';
  document.getElementById('citeselect').innerHTML += form;
}

function doErrorCheck() {
  var errors = errorCheck();
  document.getElementById('citeselect').removeChild(document.getElementById('errorform'));
  if (errors == 0) {
    if (numforms != 0) {
      document.getElementById('citediv'+numforms).style.display = 'none';
    }
    numforms++;
    out = '<div id="citediv'+numforms+'"><fieldset>'+
      '<legend>Error checking</legend>No errors found.</fieldset></div>';
    document.getElementById('citeselect').innerHTML += out;
  }
  else {
    if (numforms != 0) {
      document.getElementById('citediv'+numforms).style.display = 'none';
    }
    numforms++;
    form = '<div id="citediv'+numforms+'">'+
      '<fieldset><legend>Error checking</legend>'+
      '<table border="1px">';
    for (var i=0; i<errors.length; i++) {
      form+=errors[i];
    }
    form+= '</table>'+
      '</fieldset></div>';
    document.getElementById('citeselect').innerHTML += form;
  }
}

$( refbuttons );