The Demopaedia team will be present at the next International Population Conference in Busan.
If you attend the conference, please, come to our oral communication which will be held on Tuesday August 27, from 15:30 to 17:00 (Bexco, room 213). The new Korean dictionary will also be presented in a side meeting organized by the Planned Population Federation of Korea (PPFK) on "Population Issues & Official development assistance" (open to all) at 19:00 (Bexco, room 110).

Difference between revisions of "MediaWiki:RefToolbarLegacy.js"

From Demopædia
Jump to: navigation, search
(From en.wikipedia.org)
 
(No difference)

Latest revision as of 11:19, 2 October 2012

var numforms = 0;
var wikEdAutoUpdateUrl;
var citeUserDateFormat;
var refTagURL;
var defaultRefTagURL = 'http://reftag.appspot.com/';
var refToolDebug;

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

function refbuttons() {
  if (mwCustomEditButtons && document.getElementById('toolbar') ) {
    var button = document.createElement('a');
    button.href = "javascript:easyCiteMain()";
    button.title = "Insert Citation";
    var buttonimage = document.createElement('img');
    buttonimage.src = "//upload.wikimedia.org/wikipedia/commons/e/ea/Button_easy_cite.png";
    buttonimage.alt = "Insert Citation";
    button.appendChild(buttonimage);
    var toolbar = document.getElementById('toolbar');
    if (navigator.userAgent.indexOf('MSIE') == -1) {
      if (toolbar.style != null) {
        toolbar.style.height = 'auto';
      }
      else {
      	toolbar.setAttribute('style', 'margin-bottom: 6px; height: auto;');
      }
      toolbar.appendChild(button);
      var citemain = document.createElement('div');
      citemain.style.display = 'none';
      citemain.style.margin = '0.2em 0 -0.2em 0';
      citemain.setAttribute('Id', 'citeselect');
      citemain.appendChild( addOption("citeWeb()", "Web") );
      citemain.appendChild( addOption("citeNews()", "News") );
      citemain.appendChild( addOption("citeBook()", "Book") );
      citemain.appendChild( addOption("citeJournal()", "Journal") );
      citemain.appendChild( addOption("citeNamedRef()", "Named references") );
      citemain.appendChild( addOption("dispErrors()", "Error check") );
      citemain.appendChild( addOption("showMore()", "More") );
      citemain.appendChild( addOption("hideInitial()", "Cancel") );
      
      var citemore = document.createElement('div');
      citemore.style.display = 'none';
      citemore.setAttribute('Id', 'citemore');
      citemore.appendChild( addOption("citeEncyclopedia()", "Encyclopedia") );
      citemore.appendChild( addOption("citePressRelease()", "Press release") );
      citemore.appendChild( addOption("citeMap()", "Map") );
      citemore.appendChild( addOption("showRefSectionOptions()", "Ref Section") );
      citemain.appendChild(citemore);
      
      toolbar.appendChild(citemain);
    }
    else {
      toolbar.appendChild(button);
      var citeselect = document.createElement('div');
      citeselect.style.display = "none";
      citeselect.innerHTML = '<input type="button" value="Web" onclick="citeWeb()" />'+
      '<input type="button" value="News" onclick="citeNews()" />'+
      '<input type="button" value="Book" onclick="citeBook()" />'+
      '<input type="button" value="Journal" onclick="citeJournal()" />'+
      '<input type="button" value="Named references" onclick="citeNamedRef()" />'+
      '<input type="button" value="Error check" onclick="dispErrors()" />'+
      '<input type="button" value="More" onclick="showMore()" />'+
      '<input type="button" value="Cancel" onclick="hideInitial()" />'+
      '<div id="citemore" style="display:none">\
      <input type="button" value="Encyclopedia" onclick="citeEncyclopedia()" />\
      <input type="button" value="Press release" onclick="citePressRelease()" />\
      <input type="button" value="Map" onclick="citeMap()" />\
      <input type="button" value="Ref Section" onclick="showRefSectionOptions()" />\
      </div>';
      document.getElementById('editform').insertBefore(citeselect, document.getElementById('editform').firstChild ) ;
    }
    var reftoolformarea = document.createElement( 'span' );
    reftoolformarea.id = 'refToolFormArea';
    document.getElementById('citeselect').appendChild( reftoolformarea );
  }
  if (typeof EditTools == "object") {
    var placeholder = document.getElementById("editpage-specialchars");
    EditTools.createEditTools (placeholder);
  }
}

function addOption(script, text) {
  var 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';
  //}
  document.getElementById('refToolFormArea').innerHTML = '';
  if (document.getElementById('errorform') != null) {
    document.getElementById('citeselect').removeChild(document.getElementById('errorform'));
  }
}

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

function showMore() {
	document.getElementById('citemore').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 (citeUserDateFormat) {
    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 lastNameToRefname() {
  //Note: This only works if field 'refname' comes after field 'last', but it always does
  var lastName;
  var fields = document.getElementById('citediv'+numforms).getElementsByTagName('input');
  for (var i=0; i<fields.length; i++) {
    if(fields[i].id == 'last') {
      lastName = fields[i].value;
    }
    else if(fields[i].id == 'refname') {
      fields[i].value = lastName.replace(/^\s*(.*?)\s*$/, "$1");
      return;
    }
  }
}

function setAccessDateToday() {
  document.getElementById('accessdate').value = getTime();
/*  var fields = document.getElementById('citediv'+numforms).getElementsByTagName('input');
  for (var i=0; i<fields.length; i++) {
    if(fields[i].id == 'accessdate') {
      fields[i].value = getTime();
      return;
    }
  }
*/
}

function getLastName(authornum) {
  if (/\S/.test(document.getElementById('last'+authornum).value)) {
    return document.getElementById('last'+authornum).value;
  }
  else {
    var author = document.getElementById('author'+authornum).value;
    var match = /(\S+)\s*$/.exec(author);
    if (match) {
      return match[1];
    }
    else {
      return '';
    }
  }
}

function makeRefname() {
  if (document.getElementById('last1')) {
    var refname = document.getElementById('last1').value + document.getElementById('last2').value;
  }
  else{
	var refname = document.getElementById('last').value;
  }
  if (/\S/.test(refname)) {
    var date = document.getElementById('date').value;
    var match = /[0-9]{4}/.exec(date);
    if (match) {
      refname += match[0];
    }
  }
  else {
    refname = document.getElementById('title').value;
  }
  document.getElementById('refname').value = refname;
}

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

function citeNewsWeb(templatename) {
  oldFormHide();
  var template = templatename;
  var legend;
  if (template == "cite web") {
    legend = "Cite web source";
  } else {
    legend = "Cite news source";
  }
  var newtime = getTime();
  numforms++;
  var 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="image" src="//upload.wikimedia.org/wikipedia/commons/6/62/Arrow_out_condensed.png" tabindex=1 alt="Fetch" title="' + ((template == 'cite news') ? 'For a New York Times article URL, fetch article data and fill in the fields. For other URLs, fetch the page title.' : 'Fetch the page title. Irrelevant parts often have to be removed manually afterwards.') + '" onClick="pullURL(); return false;" style="float:right"><span style="display: block;overflow: hidden;"><input type="text" tabindex=1 style="width:97%" id="url"></span></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;' + ((template == 'cite news') ? 'Newspaper' : '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>';
  if (template == 'cite web') {
	  form += '<tr><td width="120"><label for="archiveurl">&nbsp;Archive URL: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="archiveurl"></td>'+
    '<td width="120"><label for="archivedate">&nbsp;Archive date: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="archivedate"></td></tr>';
  }
  form += '<tr><td width="120"><label for="refname">&nbsp;Reference name: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:60%" id="refname"><input type="button" value="<Last name" onClick="lastNameToRefname()"></td></tr>'+
    '</table>'+
    ' <input type="button" value="Add citation" onClick="addcites()">'+
	' <input type="button" value="Preview citation" onClick="previewCitationDefault()"> \
	<img id="progress" src="//upload.wikimedia.org/wikipedia/commons/5/59/RefToolbar_spinning_throbber.gif" style="visibility: hidden" />'+
    '<input type="checkbox" tabindex=1 name="verbose" id="verbose" value="verbose"><label for="verbose">Vertical form</label>'+
    '<span style="float:right"><a href="//en.wikipedia.org/wiki/Template:'+template.replace(/ /g, '_')+'" target="_blank">[Template documentation]</a></span>'+
    '</fieldset><span id="previewSpan"></span></div>';
   document.getElementById('refToolFormArea').innerHTML = form;
}

function citeBook() {
  oldFormHide();
  var template = "cite book";
  numforms++;
  var form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite book source</legend>';

  form += '<table cellspacing="5" width="100%"> \
	<tr><td><label for="title">Title: </label></td> \
	<td colspan=5><input type="text" tabindex=1 style="width:100%" id="title"></td></tr>';
  for (var i=1;i<=3;i++) {
    var i_str = i == 1 ? '': ' '+i;
    form += '<tr> \
		<td width="130"><label for="last'+i+'">Author'+i_str+' last&nbsp;name: </label></td> \
		<td><input type="text" tabindex=1 style="width:100%" id="last'+i+'"></td> \
		<td><label for="first'+i+'">&nbsp;first&nbsp;name: </label></td> \
		<td><input type="text" tabindex=1 style="width:100%" id="first'+i+'"></td> \
		<td><label for="authorlink'+i+'">&nbsp;Authorlink: </label></td> \
		<td><input type="text" tabindex=1 style="width:100%" id="authorlink'+i+'"> \
		<!--<a id="authorLinkAnchor'+i+'"><img id="authorLinkButton'+i+'" src="static/progress.gif" border="0" style="visibility: hidden" /></a> \
		<a href="//en.wikipedia.org/wiki/%s" target="_blank"><img id="authorTryLink'+i+'" src="static/external.png" border="0" style="visibility: hidden" /></a> --> \
		</td> \
		</tr>'
  }
  form += '<tr><td><label for="coauthors">Coauthors: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="coauthors"></td> \
	<td><label for="editor">&nbsp;Editor: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="editor"></td> \
	<td><label for="others">&nbsp;Others: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="others"></td></tr> \
	</table> \
	<table cellspacing="5" width="100%"> \
	<tr><td width="130"><label for="publisher">Publisher: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="publisher"></td> \
	<td><label for="location">&nbsp;Location: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="location"></td></tr> \
	\
	<tr><td><label for="date">Publication&nbsp;date or&nbsp;year: </label></td> \
	<td><input type="text" tabindex=1 style="width:140px" id="date"> \
	<input id="dmy" name="dateformat" value="dmy" type="radio" tabindex=1 onclick="reformatDates()"><label for="dmy">dmy</label> \
	<input id="mdy" name="dateformat" value="mdy" type="radio" tabindex=1 onclick="reformatDates()"><label for="mdy">md, y</label> \
	<input id="ymd" name="dateformat" value="ymd" type="radio" tabindex=1 onclick="reformatDates()"><label for="ymd">y-m-d</label> \
	</td> \
	<td><label for="edition">&nbsp;Edition: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="edition"></td></tr> \
	\
	<tr><td><label for="series">Series: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="series"></td> \
	<td><label for="volume">&nbsp;Volume: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="volume"></td></tr> \
	\
	<tr><td><label for="pages">Page number(s):</label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="pages" name="pages" onFocus="this.style.backgroundColor=\'\';"></td> \
	<td><label for="chapter">&nbsp;Chapter: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="chapter"></td></tr> \
	\
	<tr><td><label for="isbn">ISBN: </label></td> \
	<td><input type="image" src="//upload.wikimedia.org/wikipedia/commons/6/62/Arrow_out_condensed.png" tabindex=1 alt="Fetch" title="Fill in citation data based on ISBN from Diberri\'s tool." onClick="pullISBN(); return false;" style="float:right"><span style="display: block;overflow: hidden;"><input type="text" tabindex=1 style="width:97%" id="isbn"></span></td> \
	<td><label for="language">&nbsp;Language: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="language"></td></tr> \
	\
	<tr><td><label for="url">URL: </label></td> \
	<td><input type="image" src="//upload.wikimedia.org/wikipedia/commons/6/62/Arrow_out_condensed.png" tabindex=1 alt="Fetch" title="Fill in citation data based on a Google Books URL." onClick="pullJs(); return false;" style="float:right"><span style="display: block;overflow: hidden;"><input type="text" tabindex=1 style="width:97%" id="url"></span></td> \
	<td><label for="accessdate">&nbsp;Access&nbsp;date:</label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="accessdate"></td></tr> \
	\
	<tr><td><label for="otherfields">Other&nbsp;fields:</label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="otherfields"></td> \
	<td><label for="refname">&nbsp;Ref&nbsp;name: </label></td> \
	<td><input type="text" tabindex=1 style="width:100%" id="refname"></td> \
	</tr> \
	</table> \
	\
	<input type="radio" tabindex=1 name="template" id="cite_book" value="cite_book" checked="1"><label for="cite_book">{{cite book}}</label> <sup><a href="//en.wikipedia.org/wiki/Template:Cite_book" target="_blank">[doc]</a></sup> \
	<input type="radio" tabindex=1 name="template" id="citation" value="citation"><label for="citation">{{citation}}</label> <sup><a href="//en.wikipedia.org/wiki/Template:Citation" target="_blank">[doc]</a></sup> \
	<input type="radio" tabindex=1 name="template" id="plain" value="plain"><label for="plain">plain wikicode (experimental)</label> \
	<input type="checkbox" tabindex=1 name="verbose" id="verbose" value="verbose"><label for="verbose">Vertical form</label> \
	<input type="checkbox" tabindex=1 name="extraparams" id="extraparams" value="extraparams"><label for="extraparams">Extra parameters</label> \
	<br /><input type="button" value="Add citation" onClick="makeCiteBook()"> \
	<input type="button" value="Preview citation" onClick="previewCitationBook()"> \
	<img id="progress" src="//upload.wikimedia.org/wikipedia/commons/5/59/RefToolbar_spinning_throbber.gif" style="visibility: hidden" /> \
	\
 	</fieldset><span id="previewSpan"></span></div>';
   document.getElementById('refToolFormArea').innerHTML = form;
}

function citeJournal() {
  oldFormHide();
  var template = "cite journal";
  numforms++;
  var form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite journal</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="doi">&nbsp;DOI: </label></td>'+
      '<td width="400"><input type="image" src="//upload.wikimedia.org/wikipedia/commons/6/62/Arrow_out_condensed.png" tabindex=1 alt="Fetch" title="Fetch citation data for a DOI from crossref.org and fill in the other fields." onClick="pullDOI(); return false;" style="float:right"><span style="display: block;overflow: hidden;"><input type="text" tabindex=1 style="width:97%" id="doi"></span></td></tr>'+
    '<tr><td width="120"><label for="pmid">&nbsp;PMID: </label></td>'+
      '<td width="400"><input type="image" src="//upload.wikimedia.org/wikipedia/commons/6/62/Arrow_out_condensed.png" tabindex=1 alt="Fetch" title="Fetch citation data for a PMID" onClick="pullPMID(); return false;" style="float:right;visibility:hidden"><span style="display: block;overflow: hidden;"><input type="text" tabindex=1 style="width:97%" id="pmid"></span></td>'+
    '<td width="120"><label for="quote">&nbsp;Quote: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="quote"></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:60%" id="refname"><input type="button" value="<Last name" onClick="lastNameToRefname()"></td></tr>'+
    '</table>'+
    '<input type="button" value="Add citation" onClick="addcites()">'+
	' <input type="button" value="Preview citation" onClick="previewCitationDefault()"> \
	<img id="progress" src="//upload.wikimedia.org/wikipedia/commons/5/59/RefToolbar_spinning_throbber.gif" style="visibility: hidden" />'+
    '<input type="checkbox" tabindex=1 name="verbose" id="verbose" value="verbose"><label for="verbose">Vertical form</label>'+
    '<span style="float:right"><a href="//en.wikipedia.org/wiki/Template:'+template.replace(/ /g, '_')+'" target="_blank">[Template documentation]</a></span>'+
    '</fieldset><span id="previewSpan"></span></div>';
   document.getElementById('refToolFormArea').innerHTML = form;
}

function citeEncyclopedia() {
  oldFormHide();
  var template = "cite encyclopedia";
  numforms++;
  var form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite encyclopedia 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="editors">&nbsp;Editors: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="editors"></td></tr>'+
    '<tr><td width="120"><label for="title">&nbsp;Entry title: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="title"></td>'+
    '<td width="120"><label for="encyclopedia">&nbsp;Encyclopedia: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="encyclopedia"></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="year">&nbsp;Year: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="year"></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="isbn">&nbsp;ISBN: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="isbn"></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()">'+
	' <input type="button" value="Preview citation" onClick="previewCitationDefault()"> \
	<img id="progress" src="//upload.wikimedia.org/wikipedia/commons/5/59/RefToolbar_spinning_throbber.gif" style="visibility: hidden" />'+
    '<input type="checkbox" tabindex=1 name="verbose" id="verbose" value="verbose"><label for="verbose">Vertical form</label>'+
    '<span style="float:right"><a href="//en.wikipedia.org/wiki/Template:'+template.replace(/ /g, '_')+'" target="_blank">[Template documentation]</a></span>'+
    '</fieldset><span id="previewSpan"></span></div>';
   document.getElementById('refToolFormArea').innerHTML = form;
}

function citePressRelease() {
  oldFormHide();
  var template = "cite press release";
  numforms++;
  var form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite press release</legend>'+
    '<table cellspacing="5">'+
    '<input type="hidden" value="'+template+'" id="template">'+
    '<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="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="date">&nbsp;Date: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="date"></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" value="'+ getTime() +'"></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()">'+
	' <input type="button" value="Preview citation" onClick="previewCitationDefault()"> \
	<img id="progress" src="//upload.wikimedia.org/wikipedia/commons/5/59/RefToolbar_spinning_throbber.gif" style="visibility: hidden" />'+
    '<input type="checkbox" tabindex=1 name="verbose" id="verbose" value="verbose"><label for="verbose">Vertical form</label>'+
    '<span style="float:right"><a href="//en.wikipedia.org/wiki/Template:'+template.replace(/ /g, '_')+'" target="_blank">[Template documentation]</a></span>'+
    '</fieldset><span id="previewSpan"></span></div>';
   document.getElementById('refToolFormArea').innerHTML = form;
}

function citeMap() {
  oldFormHide();
  var template = "cite map";
  numforms++;
  var form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Cite map</legend>'+
    '<table cellspacing="5">'+
    '<input type="hidden" value="'+template+'" id="template">'+
    '<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="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="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="edition">&nbsp;Edition: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="edition"></td>'+
    '<td width="120"><label for="date">&nbsp;Date or year: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="date"></td></tr>'+
    '<tr><td width="120"><label for="cartography">&nbsp;Cartography: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="cartography"></td>'+
    '<td width="120"><label for="scale">&nbsp;Scale: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="scale"></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="page">&nbsp;Page: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="page"></td></tr>'+
    '<tr><td width="120"><label for="section">&nbsp;Section: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="section"></td>'+
    '<td width="120"><label for="inset">&nbsp;Inset: </label></td>'+
      '<td width="400"><input type="text" tabindex=1 style="width:100%" id="inset"></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="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()">'+
	' <input type="button" value="Preview citation" onClick="previewCitationDefault()"> \
	<img id="progress" src="//upload.wikimedia.org/wikipedia/commons/5/59/RefToolbar_spinning_throbber.gif" style="visibility: hidden" />'+
    '<input type="checkbox" tabindex=1 name="verbose" id="verbose" value="verbose"><label for="verbose">Vertical form</label>'+
    '<span style="float:right"><a href="//en.wikipedia.org/wiki/Template:'+template.replace(/ /g, '_')+'" target="_blank">[Template documentation]</a></span>'+
    '</fieldset><span id="previewSpan"></span></div>';
   document.getElementById('refToolFormArea').innerHTML = form;
}

function showRefSectionOptions() {
  oldFormHide();
  var template = "cite encyclopedia";
  numforms++;
  var form = '<div id="citediv'+numforms+'">'+
    '<fieldset><legend>Add references section</legend>\
	Headline:<br />\
	<input id="references" name="headline" type="radio" tabindex=1 checked="checked"><label for="references">== References ==</label><br /> \
	<input id="notes" name="headline" type="radio" tabindex=1><label for="notes">== Notes ==</label><br /> \
	Type:<br /> \
	<input id="type-references" name="type" type="radio" tabindex=1><label for="type-references">&lt;references/&gt;</label><br /> \
	<input id="type-reflist" name="type" type="radio" tabindex=1 checked="checked"><label for="type-reflist">{{Reflist}}</label><br /> \
	<input id="type-reflist2" name="type" type="radio" tabindex=1><label for="type-reflist2">{{Reflist|2}}</label><br /> \
	<input type="checkbox" tabindex=1 id="ldr"><label for="ldr">List-defined references</label> (<a href="//en.wikipedia.org/wiki/Wikipedia:Footnotes#List-defined_references" target="_blank">Info 1</a>, <a href="//en.wikipedia.org/wiki/Help:Footnotes#List-defined_references" target="_blank">Info 2</a>)<br />\
    <input type="button" value="Add references section" onClick="addRefSection()">'+
 '</fieldset></div>';
   document.getElementById('citeselect').innerHTML += form;
}

function makeCiteCode() {
  cites = document.getElementById('citediv'+numforms).getElementsByTagName('input');
  var template = '';
  var citebegin = '<ref';
  var citename = '';
  var citeinner = '';
  for (var i=0; i<cites.length; i++) {
    var citeid = cites[i].id;
    var citevalue = cites[i].value;
    citevalue = citevalue.trim();    //Trim leading and trailing whitespace
    if (citeid == "verbose") {
	  if (cites[i].checked) {
	    citeinner = citeinner.replace(/\|/g, "\n|");
	  }
    }
    else if (citevalue != '' && cites[i].type != 'button' && cites[i].type != 'image') {
      if (citeid == "refname") {
        citebegin += ' name="' + citevalue + '"';
      }
      else if (citeid == "template") {
        citename = '>{{' + citevalue;
        template = citevalue;
      }
      else {
        if (citeid == "pages") {
          if (citevalue.match(/^\w+$/) && template != 'cite encyclopedia') {
            citeid = "page";    //Use page= instead of pages= if only one page. Makes p. 5 instead of pp. 5.
          }
          else {
            citevalue = citevalue.replace(/-/g, "–");    //Replace hyphens with en dashes [[WP:ENDASH]]
          }
        }
        else if (citeid == "date" && citevalue.match(/^\d\d\d\d$/)) {
          citeid = "year";  // Use year= instead of date= if only the year is specified
        }
        citeinner += "|" + citeid + "=" + citevalue;
      }
    }
  }
  cite = citebegin + citename + citeinner + "}}</ref>";
  return cite;
}

function addcites(template) {
  var cite = makeCiteCode();
  insertTags(cite, '', '');
  //document.getElementById('citediv'+numforms).style.display = 'none';
  oldFormHide();
}

function addRefSection() {
	var wikicode = "\n";
	if (document.getElementById('references').checked) {
		wikicode += "== References ==\n";
	}
	else if (document.getElementById('notes').checked) {
		wikicode += "== Notes ==\n";
	}
	else {alert('No headline selected!');}
	
	if (document.getElementById('type-references').checked) {
		if (document.getElementById('ldr').checked) {
			wikicode += "<references>\n\n</references>\n";
		}
		else {
			wikicode += "<references/>\n";
		}
	}
	else if (document.getElementById('type-reflist').checked || document.getElementById('type-reflist2').checked) {
		var col2 = document.getElementById('type-reflist2').checked ? '|2' : '' ;
		if (document.getElementById('ldr').checked) {
			wikicode += "{{Reflist" + col2 + "|refs=\n\n}}\n";
		}
		else {
			wikicode += "{{Reflist" + col2 + "}}\n";
		}
	}
	else {alert('No type selected!');}
	
	insertTags(wikicode, '', '');
	document.getElementById('citediv'+numforms).innerHTML = '';
}

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 = new Array();
  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() {
  var namedrefs = getNamedRefs(false);
  if (namedrefs == '') {
    oldFormHide();
    numforms++;
    var 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++;
    var 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() {
  var name = document.getElementById('citediv'+numforms).getElementsByTagName('select')[0].value;
  var ref = '<ref name="'+name+'" />';
  insertTags(ref, '', '');
  document.getElementById('citediv'+numforms).style.display = 'none';
}

function getAllRefs() {
  if (typeof(wikEdUseWikEd) != 'undefined') {
    if (wikEdUseWikEd == true) {
      WikEdUpdateTextarea();
    }
  }
  var text = document.getElementById('wpTextbox1').value;
  var regex = /< *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?>((.|\n)*?)< *?\/? *?ref *?>/gim //"
  var allrefs = new Array();
  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 = new Array();
  var samecontentexclude = new Array();
  var sx=0;
  var templateexclude = new Array();
  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 = new Array();
  var q=0;
  var unclosed = document.getElementById('unclosed').checked;
  var samecontent = document.getElementById('samecontent').checked;
  var templates = document.getElementById('templates').checked;
  var repeated = document.getElementById('repeated').checked;
  var 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="//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="//en.wikipedia.org/wiki/Wikipedia:Citation_templates">citation template</a></td></tr>';
          q++;
          templateexclude[tx] = allrefscontent[i];
          tx++;
        }
        skipcheck = false;
      }
    }
  }
  if (repeated) {
    var repeatnameexclude = new Array();
    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="//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 = new Array();
    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="//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();
  var 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="//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;
  }
}

function makeBookCitationCode(callback) {
  var cite = '<ref';
  var refname = document.getElementById('refname').value;
  if (/\S/.test(refname)) {
    cite += ' name="' + refname + '"';
  }
  cite += '>{{';
  
  if (document.getElementById('cite_book').checked || document.getElementById('plain').checked) {
    cite += 'cite book';
  }
  else if (document.getElementById('citation').checked) {
    cite += 'citation';
  }
  else {alert('No template selected.');}
  
  var authorcite = '';
  var prevauthor = 0;
  for (var i=3;i>=1;i--) {
    //var author = document.getElementById('author' + i).value;
    var last = document.getElementById('last' + i).value;
    var first = document.getElementById('first' + i).value;
    var authorlink = document.getElementById('authorlink' + i).value;
    if (i==1 && !prevauthor) { i = ''; }
    if (/\S/.test(authorlink)) {
      authorcite = '|authorlink' + i + '=' + authorlink + authorcite;
    }
    if (/\S/.test(last)) {
      authorcite = '|last' + i + '=' + last + '|first' + i + '=' + first + authorcite;
      prevauthor = 1;
    }
    /*else if (/\S/.test(author)) {
      authorcite = '|author' + i + '=' + author + authorcite;
      prevauthor = 1;
    }*/
  }
  cite += authorcite;

  var simplefields = ["coauthors", "editor", "others", "title", "url", "accessdate","edition","series","volume","date","publisher","location","language","isbn","pages","chapter"];
  for (var i=0;i<simplefields.length;i++) {
    var fieldname = simplefields[i];
    var value = document.getElementById(fieldname).value;
    if (/\S/.test(value) || fieldname == "title") {
      if (fieldname == "pages") {
        if (/^\w+$/.test(value)) {
          fieldname = "page";    //Use page= instead of pages= if only one page. Makes p. 5 instead of pp. 5.
        }
        else {
          value = value.replace(/-/g, "–");      //Replace hyphens with en dashes [[WP:ENDASH]]
          value = value.replace(/,\s*\s?/g, ", ");  //One space after each comma
        }
      }
      else if (fieldname == "date" && /^\d\d\d\d$/.test(value)) {
        fieldname = "year";  // Use year= instead of date= if only the year is specified
      }
      cite += '|' + fieldname + '=' + value;
    }
  }
 

  var otherfields = document.getElementById('otherfields').value;
  if (/\S/.test(otherfields)) {
    cite += '|' + otherfields;
  }
  
  if (document.getElementById('extraparams').checked) {
    cite += '|authormask=';
    if (!document.getElementById('citation').checked) {
      cite += '|trans_title=';
    }
    cite += '|format=';
    cite += '|origyear=';
    cite += '|oclc=';
    cite += '|doi=';
    cite += '|bibcode=';
    cite += '|id=';
    if (/\S/.test(document.getElementById('chapter').value)) {
      if (!document.getElementById('citation').checked) {
        cite += '|trans_chapter=';
      } 
      cite += '|chapterurl=';
    }
    cite += '|quote=';
    cite += '|laysummary=';
    cite += '|laydate=';
  }

  cite += "}}</ref>";
  
  
  if (document.getElementById('plain').checked) {
    var match = /^(.*?)({{.*}})(.*?)$/.exec(cite);
    if (match) {
      var citebeg = match[1];
      var citemid = match[2];
      var citeend = match[3];
      citemid = citemid.replace(/cite book/, "Vancite book");
      //alert(citebeg + ':::' + citemid + ':::' + citeend);
      //document.getElementById('fullcite').value = 'Updating...';
      var url = 'api.php?action=expandtemplates&format=xml&text=' + encodeURIComponent(citemid);
      document.getElementById('progress').style.visibility = "visible";
      var xmlhttpExpand = sajax_init_object(); // new XMLHttpRequest();
      xmlhttpExpand.onreadystatechange=function() {
		if(xmlhttpExpand.readyState==4) {	  
			if(xmlhttpExpand.status==200) {
				document.getElementById('progress').style.visibility = "hidden";
				var xmlDoc=xmlhttpExpand.responseXML.documentElement;
				var expanded = xmlDoc.getElementsByTagName("expandtemplates")[0].textContent;
				if (expanded == undefined) {
					expanded = xmlDoc.getElementsByTagName("expandtemplates")[0].childNodes[0].nodeValue;
				}
				expanded = expanded.replace(/<span.*?>/ig, '');
				expanded = expanded.replace(/<\/span>/ig, '');
				expanded = expanded.replace(/<nowiki\/?>/ig, '');
				expanded = expanded.replace(/\&\#32\;/ig, ' ');
				expanded = expanded.replace(/\&\#59\;/ig, ';');
				expanded = expanded.replace(/\&\#91\;/ig, '[');
				expanded = expanded.replace(/\&\#93\;/ig, ']');
				
				plaincite = citebeg + expanded + citeend;
				//alert(plaincite);
				callback(plaincite);
			}
			else
				alert('The query returned an error.');
		}
      }
      xmlhttpExpand.open("GET",url,true);
      xmlhttpExpand.send(null);
    }
    else {alert('Error A1');}
  }
  else {
    if (document.getElementById('verbose').checked) {
      cite = cite.replace(/\|/g, "\n|");
    }
    callback(cite);
  }
}

function makeCiteBook() {
  makeBookCitationCode(function(cite) { 
    insertTags(cite, '', ''); 
    if (!refToolDebug) { oldFormHide(); }
  });
}

function formatDate(datein, dateformat) {
  if (dateformat == '') {return (datein);}
  datein = datein.replace(/^\s*(.*?)\s*$/, "$1");  //Trim whitespace
  var year = -1;
  var month = -1;
  var date = -1;
  var match = /^(\d\d\d\d)-(\d\d?)(-(\d\d?))?$/.exec(datein);
  if(match) {
    //alert(' match[1]=' + match[1] + ' match[2]=#' + match[2] + '# match[3]=' + match[3] + ' match[4]=' + match[4]  );
    year = parseInt(match[1], 10);	//10 forces decimal conversion
    month = parseInt(match[2], 10);
    if (match[4]) {
      date = parseInt(match[4], 10);
    }
  }
  else if (/^\d\d? \w+ \d\d\d\d$/.test(datein) || /^\w+ \d\d?, \d\d\d\d$/.test(datein)) {
    var DT = new Date(datein);
    year = DT.getUTCFullYear();
    month = DT.getUTCMonth()+1;
    date = DT.getUTCDate()+1;
  }
  else if (datein == 'today') {
    var DT = new Date();
    year = DT.getUTCFullYear();
    month = DT.getUTCMonth()+1;
    date = DT.getUTCDate();
  }
  else {return (datein);}
  //alert('datein=' + datein + ', y=' + year + ', m=' + month + ', d=' + date);

  var zmonth = '';
  if (month < 10) {
    zmonth = "0"+month.toString();
  } else {
    zmonth = month.toString();
  }
  month = month.toString();
  var zdate = '';
  if (date > -1) {
    if (date < 10) {
      zdate = "0"+date.toString();
    } else {
      zdate = date.toString();
    }
    date = date.toString()
  }
  else { date = ''; }
  
  var datestr = dateformat;
  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[month-1]);
  datestr = datestr.replace('<year>', year.toString());
  datestr = datestr.replace(/\s+/, ' ').replace(/^\s+/, '').replace(/(\D),/, '$1').replace(/-$/, '');
  return (datestr);
}


function getDateFormat() {
	var dateformat = '';
	if (document.getElementById('dmy')){
		if (document.getElementById('dmy').checked) {dateformat = '<date> <monthname> <year>'}
		else if (document.getElementById('mdy').checked) {dateformat = '<monthname> <date>, <year>'}
		else if (document.getElementById('ymd').checked) {dateformat = '<year>-<zmonth>-<zdate>'}
	}
	else if (citeUserDateFormat) {
		dateformat = citeUserDateFormat;
	} else {
		dateformat = citeGlobalDateFormat;
	}
	return (dateformat);
}

function reformatDates() {
  var dateformat = getDateFormat();
  //alert(':' + dateformat + ':');
  document.getElementById('accessdate').value = formatDate(document.getElementById('accessdate').value, dateformat);
  document.getElementById('date').value = formatDate(document.getElementById('date').value, dateformat);
  //document.getElementById('dateformat_hidden').value = getDateFormatShort();
}

/*function updateGetButton() {
	document.getElementById('urlget').disabled = document.getElementById('url').value == '';
}*/

function preview(wikitext) {
    document.getElementById('progress').style.visibility = "visible";
    wikitext += '<references />';
    var url = "api.php?action=parse&format=xml&prop=text&text=" + encodeURIComponent(wikitext);
    var xmlhttp = sajax_init_object(); // new XMLHttpRequest();
	xmlhttp.onreadystatechange = function () {
		if (xmlhttp.readyState==4) {
			if(xmlhttp.status==200) {
				document.getElementById('progress').style.visibility = "hidden";
				var xmlDoc=xmlhttp.responseXML.documentElement;
				var previewHTML = xmlDoc.getElementsByTagName("text")[0].textContent;
				if (previewHTML == undefined) {
					previewHTML = xmlDoc.getElementsByTagName("text")[0].childNodes[0].nodeValue;
				}
				//alert(previewHTML);
				previewHTML = previewHTML.replace(/href="\//gi, 'href="//en.wikipedia.org/');
				document.getElementById('previewSpan').innerHTML = '<fieldset><legend>Citation preview</legend>' + previewHTML + '</fieldset>';
			}
			else
				alert('The query returned an error.');
		}
    };
    xmlhttp.open("GET", url, true);
    xmlhttp.send(null)
}

function previewCitationBook() {
  makeBookCitationCode(preview);
}

function previewCitationDefault() {
	var wikitext = makeCiteCode();
	preview(wikitext);
}

function pullJs() {
	var book_url = document.getElementById('url').value;
   	if (book_url) {
		document.getElementById('progress').style.visibility = "visible";
		var book_url_enc = encodeURIComponent(book_url);
		if(!refTagURL) {refTagURL = defaultRefTagURL;}
		var baseurl = refTagURL + 'googlebooksjs.py';
		var url = baseurl + '?book_url=' + book_url_enc + '&callback=setFormValues';
		/*var script = document.createElement("script");        
		script.setAttribute("src",url);
		script.setAttribute("type","text/javascript");                
		document.body.appendChild(script);*/
		JsonRequest(url);
	}else{
		alert('No URL.');
	}
}

function pullISBN() {
	var isbn = document.getElementById('isbn').value;
	isbn = isbn.replace(/[^0-9]/g,"");	//Digits only
   	if (isbn) {
		document.getElementById('progress').style.visibility = "visible";
		if(!refTagURL) {refTagURL = defaultRefTagURL;}
		var baseurl = refTagURL + 'getdiberri.py';
		var url = baseurl + '?isbn=' + isbn + '&callback=useDiberriData';
		/*var script = document.createElement("script");
		script.setAttribute("src",url);
		script.setAttribute("type","text/javascript");
		document.body.appendChild(script);*/
		JsonRequest(url);
	}else{
		alert('No ISBN.');
	}
}

function pullDOI() {
	var doi = document.getElementById('doi').value;
   	if (doi) {
		document.getElementById('progress').style.visibility = "visible";
		if(!refTagURL) {refTagURL = defaultRefTagURL;}
		var baseurl = refTagURL + 'doifetchjs.py';
		var url = baseurl + '?doi=' + encodeURIComponent(doi) + '&callback=useDoiData';
		JsonRequest(url);
	}else{
		alert('No DOI.');
	}
}

function pullPMID() {
	alert('Not implemented yet...');
	/*var doi = document.getElementById('doi').value;
   	if (doi) {
		document.getElementById('progress').style.visibility = "visible";
		if(!refTagURL) {refTagURL = defaultRefTagURL;}
		var baseurl = refTagURL + 'doifetchjs.py';
		var url = baseurl + '?doi=' + encodeURIComponent(doi) + '&callback=useDoiData';
		JsonRequest(url);
	}else{
		alert('No DOI.');
	}*/
}

function pullURL() {
	var url = document.getElementById('url').value;
   	if (url) {
		document.getElementById('progress').style.visibility = "visible";
		if(!refTagURL) {refTagURL = defaultRefTagURL;}
		var baseurl = refTagURL + 'urlfetchjs.py';
		var url = baseurl + '?url=' + encodeURIComponent(url) + '&callback=useUrlData';
		JsonRequest(url);
	}else{
		alert('No URl.');
	}
}

function JsonRequest(url) {
	//importScriptURI(url)  //Bad: does not import the same script more than once
	var script = document.createElement("script");        
	script.setAttribute("src",url);
	script.setAttribute("type","text/javascript");                
	//document.body.appendChild(script);
	document.getElementsByTagName('head')[0].appendChild(script);
}

function setFormValues(bookdata) {
	document.getElementById('progress').style.visibility = "hidden";
	//alert(bookdata);
	//alert(bookdata.page);
	if (bookdata.title.length != 0) { document.getElementById('title').value = bookdata.title; }
	if (bookdata.isbn.length != 0) { document.getElementById('isbn').value = bookdata.isbn; }
	if (bookdata.publisher.length != 0) { document.getElementById('publisher').value = bookdata.publisher; }
	if (bookdata.pages.length != 0) { 
		document.getElementById('pages').value = bookdata.pages; 
		document.getElementById('pages').style.backgroundColor = '#FFFF99';
	}
	if (bookdata.url.length != 0) { document.getElementById('url').value = bookdata.url; }
	if (bookdata.date.length != 0) { document.getElementById('date').value = bookdata.date; }

	for (var i=0;i<bookdata.authors.length && i<=2;i++) {
		authorn = i+1;
  		var author = bookdata.authors[i];
  		var match = /(.+)\s+(.+)/.exec(author);
		if (match) {
			document.getElementById('first' + authorn).value = match[1];
			document.getElementById('last' + authorn).value = match[2];
		}
		else {
			document.getElementById('last' + authorn).value = author;
		}
  	}
	document.getElementById('coauthors').value = bookdata.authors.splice(3).join(', ')
	setAccessDateToday()
	makeRefname()
}

function useDiberriData(bookdata) {
	document.getElementById('progress').style.visibility = "hidden";
	if (bookdata.title.length != 0) { document.getElementById('title').value = bookdata.title; }
	if (bookdata.isbn.length != 0) { document.getElementById('isbn').value = bookdata.isbn; }
	if (bookdata.publisher.length != 0) { document.getElementById('publisher').value = bookdata.publisher; }
	if (bookdata.location.length != 0) { document.getElementById('location').value = bookdata.location; }
	if (bookdata.year.length != 0) { document.getElementById('date').value = bookdata.year; }
	if (bookdata.authors.length != 0) {
		authors = bookdata.authors.split(';', 4);
		for (var i=0;i<authors.length && i<=2;i++) {
			authorn = i+1;
	  		nameparts = authors[i].split(',', 2);
			document.getElementById('last' + authorn).value = nameparts[0].trim();
			if (nameparts.length == 2) {
				document.getElementById('first' + authorn).value = nameparts[1].trim();
			}
		}
		if (authors[3]) { document.getElementById('coauthors').value = authors[3].trim(); }
	}
	makeRefname()	
}

function useDoiData(bookdata) {
	document.getElementById('progress').style.visibility = "hidden";
	if (bookdata.title) { document.getElementById('title').value = bookdata.title; }
	//if (bookdata.isbn.length != 0) { document.getElementById('isbn').value = bookdata.isbn; }
	//if (bookdata.publisher.length != 0) { document.getElementById('publisher').value = bookdata.publisher; }
	//if (bookdata.location.length != 0) { document.getElementById('location').value = bookdata.location; }
	if (bookdata.year) { document.getElementById('date').value = bookdata.year; }
	if (bookdata.issn) { document.getElementById('issn').value = bookdata.issn; }
	if (bookdata.journal) { document.getElementById('journal').value = bookdata.journal; }
	if (bookdata.volume) { document.getElementById('volume').value = bookdata.volume; }
	if (bookdata.issue) { document.getElementById('issue').value = bookdata.issue; }
	if (bookdata.pages) { document.getElementById('pages').value = bookdata.pages; }

	if (bookdata.authors) {
		var coauthors = [];
		for (var i=0;i<bookdata.authors.length;i++) {
			var authorn = i+1;
			var author = bookdata.authors[i];
			if (authorn == 1) {
				if (author.last) { document.getElementById('last').value = author.last.trim(); }
				if (author.first) { document.getElementById('first').value = author.first.trim(); }
			}
			else {
				var authorparts = [];
				if (author.first) { authorparts.push( author.first.trim() ); }
				if (author.last) { authorparts.push( author.last.trim() ); }
				coauthors.push(authorparts.join(' '));
			}
		}
		if (coauthors[0]) { document.getElementById('coauthors').value = coauthors.join(', '); }
	}
	makeRefname();
}

function useUrlData(data) {
	document.getElementById('progress').style.visibility = "hidden";
	if (data.title) { document.getElementById('title').value = data.title; }
	if (data.work) { document.getElementById('work').value = data.work; }
	if (data.page) { document.getElementById('pages').value = data.page; }
	if (data.date) {
		document.getElementById('date').value = formatDate(data.date, getDateFormat());
	}
	/*if (data.author) {
		var authors = data.author.replace(/ [Aa]nd /, ', ');
		var match = /(.+),\s*(.+)/.exec(authors);
		var firstauthor = '';
		if (match) {
			firstauthor = match[1];
			var coauthors = match[2];
			document.getElementById('coauthors').value = coauthors;
		}
		else {
			firstauthor = data.author;
		}
		var match = /(.+)\s+(.+)/.exec(firstauthor);
		if (match) {
			document.getElementById('first').value = match[1];
			document.getElementById('last').value = match[2];
		}
		else {
			document.getElementById('last').value = author;
		}
	}*/
	if (data.authors) {
		var coauthors = [];
		for (var i=0;i<data.authors.length;i++) {
			var authorn = i+1;
			var author = data.authors[i];
			if (authorn == 1) {
				var match = /(.+)\s+(.+)/.exec(author);
				if (match) {
					document.getElementById('first').value = match[1].trim();
					document.getElementById('last').value = match[2].trim();
				}
				else {
					document.getElementById('last').value = author.trim();
				}				
			}
			else {
				coauthors.push(author);
			}
		}
		if (coauthors[0]) { document.getElementById('coauthors').value = coauthors.join(', '); }
	}
}

$( refbuttons );