var numforms = 0; var wikEdAutoUpdateUrl; function refbuttons() {   if (mwCustomEditButtons && (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 = "//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 = "//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;       $('#reftoolbar-button').live('click', function() { easyCiteMain(); });     }     if (navigator.userAgent.indexOf('MSIE') == -1) {       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") );       document.getElementById('wpTextbox1').parentNode.insertBefore(citemain, document.getElementById('wpTextbox1'));     }     else {     selection = ''+       ''+       ''+       ''+       ''+       ''+       '';     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 citeNewsWeb(templatename) {   oldFormHide();   template = templatename;   var legend;   if (template == "cite web") {     legend = "Cite web source";   } else {     legend = "Cite news source";   }   newtime = getTime();   numforms++;   form = ''+     ''+legend+''+     ''+     '<input type="hidden" value="'+template+'" id="template">'+     ' URL: '+       '<input type="text" tabindex=1 style="width:100%" id="url">'+     ' Title: '+       '<input type="text" tabindex=1 style="width:100%" id="title">'+     ' Last name: '+       '<input type="text" tabindex=1 style="width:100%" id="last">'+     ' First name: '+       '<input type="text" tabindex=1 style="width:100%" id="first">'+     ' Coauthors: '+       '<input type="text" tabindex=1 style="width:100%" id="coauthors">'+     ' Publication date: '+       '<input type="text" tabindex=1 style="width:100%" id="date">'+     ' Work: '+       '<input type="text" tabindex=1 style="width:100%" id="work">'+     ' Publisher: '+       '<input type="text" tabindex=1 style="width:100%" id="publisher">'+     ' Pages: '+       '<input type="text" tabindex=1 style="width:100%" id="pages">'+     ' Language: '+       '<input type="text" tabindex=1 style="width:100%" id="language">'+     ' Access date: '+       '<input type="text" tabindex=1 style="width:100%" id="accessdate" value="'+ newtime +'">'+     ' Location: '+       '<input type="text" tabindex=1 style="width:100%" id="location">'+     ' Reference name: '+       '<input type="text" tabindex=1 style="width:100%" id="refname">'+     ''+     '<input type="button" value="Add citation" onClick="addcites()">'+  '';    document.getElementById('citeselect').innerHTML += form; }   function citeBook() {   oldFormHide();   template = "cite book";   numforms++;   form = ''+     'Cite book source'+     ''+     '<input type="hidden" value="'+template+'" id="template">'+     ' Last name: '+       '<input type="text" tabindex=1 style="width:100%" id="last">'+     ' First name: '+       '<input type="text" tabindex=1 style="width:100%" id="first">'+     ' Coauthors: '+       '<input type="text" tabindex=1 style="width:100%" id="coauthors">'+     ' Others: '+       '<input type="text" tabindex=1 style="width:100%" id="others">'+     ' Title: '+       '<input type="text" tabindex=1 style="width:100%" id="title">'+     ' Editor: '+       '<input type="text" tabindex=1 style="width:100%" id="editor">'+     ' Publisher: '+       '<input type="text" tabindex=1 style="width:100%" id="publisher">'+     ' Location: '+       '<input type="text" tabindex=1 style="width:100%" id="location">'+     ' Publication date: '+       '<input type="text" tabindex=1 style="width:100%" id="date">'+     ' Edition: '+       '<input type="text" tabindex=1 style="width:100%" id="edition">'+     ' Series: '+       '<input type="text" tabindex=1 style="width:100%" id="series">'+     ' Volume: '+       '<input type="text" tabindex=1 style="width:100%" id="volume">'+     ' Pages: '+       '<input type="text" tabindex=1 style="width:100%" id="pages">'+     ' Chapter: '+       '<input type="text" tabindex=1 style="width:100%" id="chapter">'+     ' ISBN: '+       '<input type="text" tabindex=1 style="width:100%" id="isbn">'+     ' OCLC: '+       '<input type="text" tabindex=1 style="width:100%" id="oclc">'+     ' URL: '+       '<input type="text" tabindex=1 style="width:100%" id="url">'+     ' Access date: '+       '<input type="text" tabindex=1 style="width:100%" id="accessdate">'+     ' Language: '+       '<input type="text" tabindex=1 style="width:100%" id="language">'+     ' Reference name: '+       '<input type="text" tabindex=1 style="width:100%" id="refname">'+     ''+     '<input type="button" value="Add citation" onClick="addcites()">'+  '';    document.getElementById('citeselect').innerHTML += form; }   function citeJournal() {   oldFormHide();   template = "cite journal";   numforms++;   form = ''+     'Cite book source'+     ''+     '<input type="hidden" value="'+template+'" id="template">'+     ' Last name: '+       '<input type="text" tabindex=1 style="width:100%" id="last">'+     ' First name: '+       '<input type="text" tabindex=1 style="width:100%" id="first">'+     ' Coauthors: '+       '<input type="text" tabindex=1 style="width:100%" id="coauthors">'+     ' Publication date: '+       '<input type="text" tabindex=1 style="width:100%" id="date">'+     ' Title: '+       '<input type="text" tabindex=1 style="width:100%" id="title">'+     ' Journal: '+       '<input type="text" tabindex=1 style="width:100%" id="journal">'+     ' Publisher: '+       '<input type="text" tabindex=1 style="width:100%" id="publisher">'+     ' Location: '+       '<input type="text" tabindex=1 style="width:100%" id="location">'+     ' Volume: '+       '<input type="text" tabindex=1 style="width:100%" id="volume">'+     ' Issue: '+       '<input type="text" tabindex=1 style="width:100%" id="issue">'+     ' Pages: '+       '<input type="text" tabindex=1 style="width:100%" id="pages">'+     ' ISSN: '+       '<input type="text" tabindex=1 style="width:100%" id="issn">'+     ' OCLC: '+       '<input type="text" tabindex=1 style="width:100%" id="oclc">'+     ' Language: '+       '<input type="text" tabindex=1 style="width:100%" id="language">'+     ' URL: '+       '<input type="text" tabindex=1 style="width:100%" id="url">'+     ' Access date: '+       '<input type="text" tabindex=1 style="width:100%" id="accessdate">'+     ' Reference name: '+       '<input type="text" tabindex=1 style="width:100%" id="refname">'+     ''+     '<input type="button" value="Add citation" onClick="addcites()">'+  '';    document.getElementById('citeselect').innerHTML += form; }   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 + "}}</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 = ''+       'References in textThere are no named refs (<ref name="Name">) in the text';     document.getElementById('citeselect').innerHTML += out;   }   else {     oldFormHide();     numforms++;     form = ''+       'References in article'+       ''+       ' Named references in text'+             '';     for (var i=0;i<namedrefs.length;i++) {       form+= ''+namedrefs[i]+'';     }     form+= ''+       ''+       '<input type="button" value="Add citation" onClick="addnamedcite()">'+       '';      document.getElementById('citeselect').innerHTML += form;   } }   function addnamedcite() {   name = document.getElementById('citediv'+numforms).getElementsByTagName('select')[0].value;   ref = '';   $("#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, "<");       ref[0] = ref[0].replace(/>/g, ">");       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(/< *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?>((.|\n)*?)< *?\/? *?ref *?>/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(/< *?\/ *?ref *?>/) == -1 && unclosed) {       errorlist[q] = ''+allrefs[i]+'';       errorlist[q] += 'Unclosed <ref> tag';       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] = ''+allrefscontent[i]+'';           errorlist[q] += 'Multiple refs contain this content, a named reference should be used instead';           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] = ''+allrefs[i]+'';           errorlist[q] += 'Does not use a citation template';           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] = ''+namedrefs[k]+'';           errorlist[q] += 'Multiple references are given the same name';           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] = ''+namedrefcalls[p]+'';           errorlist[q] += 'A named reference is used but not defined';           q++;           undefexclude[ux] = namedrefs[p];           ux++;         }       }       skipcheck = false;     }  }   if (q > 0) {     return errorlist;   } else {     return 0;   } }   function dispErrors() {   oldFormHide();   form = ''+     'Error checking'+     'Check for:'+     ' Unclosed <ref> tags'+     ' References with the same content'+     ' References not using a citation template'+     ' Multiple references with the same name'+     ' Usage of undefined named references'+     ''+     '';   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 = ''+       'Error checkingNo errors found.';     document.getElementById('citeselect').innerHTML += out;   }   else {     if (numforms != 0) {       document.getElementById('citediv'+numforms).style.display = 'none';     }     numforms++;     form = ''+       'Error checking'+       '';     for (var i=0; i<errors.length; i++) {       form+=errors[i];     }     form+= ''+       '';      document.getElementById('citeselect').innerHTML += form;   } }   $( refbuttons );