User:Kevinalewis/projecttagger.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>
var linkColor = "#002BB8";
var linkLead = '<a style="color:' + linkColor + ';" href="/wiki/Wikipedia:Version_1.0_Editorial_Team/Assessment">';
 
var asTalkPage; //"as" to reduce name conflict - wikicode of talkpage
var addingNewTemplate = true; 
var parametersChanged = 0;
var talkpagehtml; //html of talkpage
var categoryText = null; //result of query.php request
var existingTemplateCodeArray; //those on the talk page
var TemplateArray = new Array();

var templateSelect;
var prioritySelect;
var bioWorkGroupSelect;
var livingSelect;
var milHistTaskForceSelect;
var novelsTaskForceSelect;
var needsinfoboxSelect;
var incompinfoboxSelect;
var needsinfoboxcoverSelect;
var extraSelect;

var livingArray = ["", "yes", "no"];
var priorityArray = ["", "Low", "Mid", "High", "Top"];
var bioWorkGroupArray = ["", "a&e-work-group", "baronets-work-group", "british-royalty", "filmbio-work-group", "military-work-group", "musician-work-group", "peerage-work-group", "politician-work-group", "royalty-work-group", "s&a-work-group", "sports-work-group"];
var milHistTaskForceArray = ["", "———General","Aviation-task-force","Historiography-task-force","Maritime-task-force","Memorials-task-force","Science-task-force","Technology-task-force","Weaponry-task-force","———Nations/Regions","African-task-force","Australian-task-force","Balkan-task-force","British-task-force","Canadian-task-force","Chinese-task-force","Dutch-task-force","French-task-force","German-task-force","Indian-task-force","Italian-task-force","Japanese-task-force","Korean-task-force","Middle-Eastern-task-force","New-Zealand-task-force","Nordic-task-force","Ottoman-task-force","Polish-task-force","Russian-task-force","South-American-task-force","Southeast-Asian-task-force","Spanish-task-force","US-task-force","———Periods/Conflicts","Ancient-Near-Eastern-task-force","Classical-task-force","Medieval-task-force","Early-Modern-task-force","Napoleonic-task-force","ACW-task-force","WWI-task-force","WWII-task-force"]; 
var novelsTaskForceArray = ["", "19thC-task-force","australian-task-force","crime-task-force","fantasy-task-force","hdm-task-force","lemony-snicket-task-force","narnia-task-force","percy-jackson-task-force","sf-task-force","shannara-task-force","short-story-task-force","sword-of-truth-task-force","twilight-task-force"]; 
 
var templateCodeArray = ["{{WPBiography\n|small = \n|living = \n|class = \n|priority = \n|needs-infobox = \n|listas = \n|needs-photo = \n}}",
"{{Album\n|class=\n|importance=\n|attention=\n|needs-infobox=\n}}",
"{{Cvgproj|class=|importance=}}",
"{{Physics|class=|importance=}}",
"{{WikiProject China\n|class=\n|importance=}}",
"{{WikiProject Finland|class=|importance=}}",
"{{WPMILHIST\n|small=\n|nested=\n|class=\n|attention=\n|needs-infobox=\n|B-Class-1=\n|B-Class-2=\n|B-Class-3=\n|B-Class-4=\n|B-Class-5=\n}}",
"{{WikiProject College football|class=|importance=}}",
"{{WikiProject South America|class=|importance=}}",
"{{WPAstronomy|class=}}",
"{{Visual arts\n|cat =\n|class =\n}}",
"{{WikiProject France\n|small=\n|class= \n|importance=\n|attention=\n|peer-review= \n|old-peer-review=\n}}",
"{{WikiProject Rugby union|class=|importance=}}",
"{{Film|class=|importance=}}",
"{{WikiProject Russia|class=|importance=}}",
"{{WPAVIATION\n|class=\n|Aircraft-project=\n|Airports-project=\n|Airlines-project=\n|Rotorcraft-task-force=\n|Gliding-project=\n|Red-Bull-project=\n|Defunct-Airlines-project=\n}}",
"{{WikiProject Germany|class=|importance=}}",
"{{WPSchools|class=|importance=}}",
"{{Ethnic groups|class=|importance=}}",
"{{WikiProject Saints\n|class=\n|importance=\n|needs-infobox=\n}}",
"{{WikiProject Wales|class=|importance=}}",
"{{WPTyneandWear|class=|importance=}}",
"{{WikiProject Oklahoma|class=|importance=}}",
"{{Environment|class=|importance=}}",
"{{LGBTProject|class=}}",
"{{WPLinux|class=}}",
"{{WPE|class=|importance=}}",
"{{TelevisionWikiProject\n|class=\n|importance=\n|type=\n|needs-infobox=}}",
"{{NFLproject|class=}}",
"{{WikiProject Computer science|class=|importance=}}",
"{{WikiProject Taiwan|class=|importance=}}",
"{{NovelsWikiProject\n|class= \n|importance= \n|attention= \n|needs-infobox= \n|incomp-infobox= \n|needs-infobox-cover= \n}}",
"{{WP Syria|class=|importance=}}",
"{{WikiProject Denmark|class=|importance=}}",
"{{OlympicsWikiProject|class=}}",
"{{WikiProject Radio|class=|importance=}}",
"{{WP-Tennis|class=|importance=}}",
"{{WikiProject Serbia|class=|importance=}}",
"{{WP Australia|class=|importance=}}",
"{{WP Indonesia\n|importance=\n|class=\n|attention=\n|collaboration-candidate=\n|past-collaboration=\n|peer-review=\n}}",
"{{WPFC\n|class=\n|HRE-taskforce=\n|GOV-taskforce=\n|flagneeded=\n|coatneeded=\n|mapneeded=\n|infoboxneeded=\n|structureneeded=\n}}",
"{{WPHawaii|class=|importance=}}",
"{{Saudi|class=|importance=}}",
"{{WikiProject Minnesota|class=|importance=}}",
"{{WikiProject Filmmaking|class=}}",
"{{WikiProject Palestine|class=|importance=}}",
"{{WikiProject Israel|class=|importance=}}",
"{{LabourProject|class=|importance=}}",
"{{WikiProject Oregon|class=|importance=}}",
"{{Cooperatives|class=|importance=}}",
"{{WikiProject Malta|class=|importance=}}",
"{{WikiProject Law|class=|importance=}}",
"{{WikiProject Novels|class=|importance=}}",
"{{WP_SCOTUS|class=|importance=|needs-infobox=|flag=}}",
"{{WikiProject Database|class=|importance=}}",
"{{Cycling project|class=}}",
"{{WP:FISHING\n|class=\n|importance=\n}}",
"{{Chemistry|class=|importance=}}",
"{{Chemicals|class=|importance=}}",
"{{WP1.0\n| class = \n| importance = \n| orphan = \n| VA = \n| core = \n| coresup = \n| category = \n| v0.7 = \n| WPCD = \n}}",
"{{WPLondon|class=|importance=}}",
"{{AfricaProject | class= }}",
"{{Numismaticnotice|class=|importance=}}",
"{{Ice hockey|class=}}",
"{{BCproject|class=|importance=}}"];

var templateExtract;
var templateExtract2;

var needsinfoboxArray = new Array("", "needs-infobox=yes", "needs-infobox=no");
var needsinfoboxState = 0;
var incompinfoboxArray = new Array("", "incomp-infobox=yes", "incomp-infobox=no");
var incompinfoboxState = 0;
var needsinfoboxcoverArray = new Array("", "needs-infobox-cover=yes", "needs-infobox-cover=1st", "needs-infobox-cover=no");
var needsinfoboxcoverState = 0;
var extraArray = [""];
  
function aTemplate() {
this.name = "";
this.code = "";
this.existsGrade = "";
this.existsPriority = "";
this.isUsers = "";
}
 
function TemplateSort(a,b) {
  if ( a.name > b.name ) return 1
  else if ( a.name < b.name ) return -1
  else return 0;
}
 
$(begin);
 
function begin() {
  if ( wgNamespaceNumber==0 && !location.pathname.match('/w/index.php') && !document.body.innerHTML.match('id="disambig"') ) {
    if ( Cookie.read("wpasStatus") >= "1" || Cookie.read("wpasStatus") === null ) {
      if ( document.getElementById("ca-talk").className == "new" ) {
        asTalkPage = "";
        update("#000000", "An " + linkLead + "unassessed</a> article", "");
      }
      else {
        var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=Talk:" + encodeURIComponent(wgTitle) + "&action=raw";
        loadTalkPageRaw(url);
      }
    }
    else if (Cookie.read("wpasStatus") == "0" && !document.getElementById("siteSub").innerHTML.match(writeActivations()) ) {
      document.getElementById("siteSub").innerHTML += writeActivations(); 
    }
  }
}
 
function loadTalkPageRaw(url) { 
    if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object
        var tpreq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version
        var tpreq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (tpreq) {
     tpreq.onreadystatechange = function () { 
       if (tpreq.readyState==4) {
         // if "OK"
         if (tpreq.status==200) {
           getAssessment(tpreq);
         }
       }
     };
     tpreq.open("GET", url, true);
     tpreq.send("");  
    }
}
 
 
function getAssessment(myreq)
{
  asTalkPage = myreq.responseText;

  templateExtract = asTalkPage.match(/\{\{NovelsWikiProject *(\n|.)*?\}\}/i);
  templateExtract2 = templateExtract[0];

  if ( templateExtract2.match(/needs-infobox *= *[Yy]es/i) ) {needsinfoboxState = 1;}
  else if ( templateExtract2.match(/needs-infobox *= *[Nn]o/i) ) {needsinfoboxState = 2;}
  else {needsinfoboxState = 0;}
  if ( templateExtract2.match(/incomp-infobox *= *[Yy]es/i) ) {incompinfoboxState = 1;}
  else if ( templateExtract2.match(/incomp-infobox *= *[Nn]o/i) ) {incompinfoboxState = 2;}
  else {incompinfoboxState = 0;}
  if ( templateExtract2.match(/needs-infobox-cover *= *[Yy]es/i) ) {needsinfoboxcoverState = 1;}
  else if ( templateExtract2.match(/needs-infobox-cover *= *1st/i) ) {needsinfoboxcoverState = 2;}
  else if ( templateExtract2.match(/needs-infobox-cover *= *[Nn]o/i) ) {needsinfoboxcoverState = 3;}
  else {needsinfoboxcoverState = 0;}

  var otherInfo = "";
  if ( asTalkPage.match( /\{\{ganominee/i ) ) {
    otherInfo='. <i>Currently a <a href="' + wgServer + '/w/index.php?title=Wikipedia:Good_article_candidates" style="color:' + linkColor + ';">Good Article candidate</a></i>.';
  }
  else if ( asTalkPage.match(/\{\{fac[\|}]/i ) ) { 
    otherInfo='. <i>Currently a <a href="' + wgServer + '/w/index.php?title=Wikipedia:Featured_article_candidates/' + encodeURIComponent(mw.config.get('wgPageName')) + '&redirect=no" style="color:' + linkColor + ';">Featured Article candidate</a></i>.';
  }
  else if (asTalkPage.match(/\{\{peerreview}/i ) ) {
    otherInfo='. <i>Currently in <a href="' + wgServer + '/w/index.php?title=Wikipedia:Peer review/' + encodeURIComponent(mw.config.get('wgPageName')) + '" style="color:' + linkColor + ';">peer review</a></i>.';
  }
 
  if ( document.getElementById("featured-star") ) {
    if (document.body.innerHTML.match('<area href="/wiki/Wikipedia:Featured_lists"') ) {         
      update("#0066CC", 'A <a style="color:' + linkColor + ';" href="/wiki/Wikipedia:Featured_lists">Featured List</a>', ""); 
    }
    else {      
      update("#0066CC", 'A <a style="color:' + linkColor + ';" href="/wiki/Wikipedia:Featured Articles">Featured Article</a>', "");
    }
 
  }
  // should get the match once instead of checking repeatedly:
  else if ( asTalkPage.match(/class *= *a[ \|\n}]/i) ) { update("#007BFF", "An " + linkLead + "A-class</a> article", otherInfo);}
  else if ( asTalkPage.match(/\{\{ga[|}]/i ) || asTalkPage.match(/currentstatus *= *(ffa\/)?ga/i) ) { update("#007700", 'A <a style="color:' + linkColor + ';" href="/wiki/Wikipedia:Good Articles">Good Article</a>', otherInfo);}
  else if ( asTalkPage.match(/class *= *b[ \|\n}]/i) ) { update("#999933", "A " + linkLead + "B-class</a> article", otherInfo);}
  else if ( asTalkPage.match(/class *= *c[ \|\n}]/i) ) { update("#FFFF66", "A " + linkLead + "C-class</a> article", otherInfo);}
  else if ( asTalkPage.match(/class *= *start[ \|\n}]/i) ) { update("#BB6600", "A " + linkLead + "Start-class</a> article", otherInfo);}
  else if ( asTalkPage.match(/class *= *stub[ \|\n}]/i) ) { update("#990011", "A " + linkLead + "Stub-class</a> article", otherInfo);}
  else { update("#000000", "An " + linkLead + "unassessed</a> article", otherInfo);}
  
}
 
function update(color, slogan, info) {
  if ( typeof document.getElementsByTagName("h1")[0] != "undefined" ) { // see WPdiff:114016002
    document.getElementsByTagName("h1")[0].style.cssText = "color: " + color + ";";
  }
  t = document.getElementById("siteSub").innerHTML;
  document.getElementById("siteSub").innerHTML = slogan + " " + t.charAt(0).toLowerCase() + t.substring(1) + info + writeActivations();
 
  if ( Cookie.read("wpasStatus") == "2" || Cookie.read("wpasStatus") === null) {
    for (j = 0; j < templateCodeArray.length ; j++) {
      myTemplate = new aTemplate();
      templateCodeArray[j].match(/\{\{([^\|}\n]+)/);
      myTemplate.name = RegExp.$1;
      myTemplate.code = templateCodeArray[j];
      TemplateArray.push(myTemplate); 
    }
    if ( typeof assessmentMyTemplateCode != "undefined" ) {
      existingTemplateCodeArray = getTemplatesInString(assessmentMyTemplateCode.join('\n'), true);
    }
    existingTemplateCodeArray = existingTemplateCodeArray.concat( getTemplatesInString(asTalkPage, false) );
    for (y = 0; y < existingTemplateCodeArray.length ; y++) {
      z = 0;
      notFound = true;
      while (z < TemplateArray.length && notFound ) {
        if ( existingTemplateCodeArray[y].name == TemplateArray[z].name ) {
          TemplateArray[z] = existingTemplateCodeArray[y];
          notFound = false;
        }
        z++;
      }
      if ( notFound ) { 
        TemplateArray.push(existingTemplateCodeArray[y]);
      }
    }
 
    TemplateArray.sort(TemplateSort);
    templateSelect = document.createElement("select");
    for (x = 0; x < TemplateArray.length ; x++) {
      templateSelect.options[x] = new Option(TemplateArray[x].name, TemplateArray[x].name);
      if ( TemplateArray[x].existsGrade != "" && !TemplateArray[x].isUsers ) { 
        existingGrade = TemplateArray[x].existsGrade;
        templateSelect.options[x].style.backgroundColor =  getAssessmentBackgroundColor(existingGrade);
        templateSelect.options[x].text += " ? " + existingGrade;
      }
      if (TemplateArray[x].existsPriority != "" && !TemplateArray[x].isUsers ) {
        templateSelect.options[x].text += "/" + TemplateArray[x].existsPriority;
      }
      if ( typeof assessmentDefaultProject != "undefined" && TemplateArray[x].name.toLowerCase() == assessmentDefaultProject.toLowerCase() ) {
        templateSelect.selectedIndex = x;
      }
    }
    templateSelect.onchange = projectChange;
    projectChange();
  }
}
 
function projectChange() {
  var index = templateSelect.selectedIndex;
  var templateChoice = templateSelect.options[index].value;
  myDiv = document.createElement("div");
  myDiv.appendChild(templateSelect);
  if ( TemplateArray[index].code.match(/(priority|importance) *=/) ) {
    prioritySelect = document.createElement("select");
    for (x = 0; x < priorityArray.length ; x++) {
      prioritySelect.options[x] = new Option(priorityArray[x], priorityArray[x]);
          if (TemplateArray[index].existsPriority.toLowerCase() == priorityArray[x].toLowerCase() )
          { prioritySelect.selectedIndex = x; }
	  else if (typeof assessmentDefaultPriority != "undefined" && priorityArray[x] == assessmentDefaultPriority && prioritySelect.selectedIndex < 1) {
	    prioritySelect.selectedIndex = x;
	  }	
    }
    myDiv.appendChild(prioritySelect); 	
  }	
  if ( "WPBiography" == templateChoice ) { 
    bioWorkGroupSelect = document.createElement("select");
	for (x = 0; x < bioWorkGroupArray.length ; x++) {
          bioWorkGroupSelect.options[x] = new Option(bioWorkGroupArray[x], bioWorkGroupArray[x]);
	  if (typeof assessmentDefaultWorkGroup != "undefined" && bioWorkGroupArray[x] == assessmentDefaultWorkGroup ) {
	    bioWorkGroupSelect.selectedIndex = x;
	  }
	}
	myDiv.appendChild(bioWorkGroupSelect);
 
	livingSelect = document.createElement("select");
	var livingFlag = "";	
	if ( document.body.innerHTML.match("Category:Living_people") ) {
	  livingFlag = "yes"; }
	else if ( document.body.innerHTML.match(/Category:\d+ (BC )?deaths/i) ) {
	  livingFlag = "no"; }
	else if ( typeof assessmentDefaultLiving != "undefined" ) {
 	  livingFlag = assessmentDefaultLiving;
	} 
 
	for (x = 0; x < livingArray.length ; x++) {
          livingSelect.options[x] = new Option(livingArray[x], livingArray[x]);
          if ( livingArray[x] == livingFlag) { livingSelect.selectedIndex = x; }
	}
 
	myDiv.appendChild(livingSelect);
  }
  else if ( "WPMILHIST" == templateChoice ) {
    milHistTaskForceSelect = document.createElement("select");
    for (x = 0; x < milHistTaskForceArray.length ; x++) {
      milHistTaskForceSelect.options[x] = new Option(milHistTaskForceArray[x], milHistTaskForceArray[x]);
	  if (typeof assessmentDefaultMilHistTaskForce != "undefined" && milHistTaskForceArray[x] == assessmentDefaultMilHistTaskForce ) {
	    milHistTaskForceSelect.selectedIndex = x;
	  }
    }
    myDiv.appendChild(milHistTaskForceSelect);
  }
  else if ( "NovelsWikiProject" == templateChoice ) {
    needsinfoboxSelect = document.createElement("select");
    for (x = 0; x < needsinfoboxArray.length ; x++) {
      needsinfoboxSelect.options[x] = new Option(needsinfoboxArray[x], needsinfoboxArray[x]);
      if (x == needsinfoboxState) {needsinfoboxSelect.options[x].style.backgroundColor = "#CCFFFF";}
      if (typeof assessmentDefaultNeedsInfobox != "undefined" && needsinfoboxArray[x] == assessmentDefaultNeedsInfobox ) {
	needsinfoboxSelect.selectedIndex = x;
      }
    }
    if (needsinfoboxState != 0) {needsinfoboxSelect.selectedIndex = needsinfoboxState;}
    myDiv.appendChild(needsinfoboxSelect);

    incompinfoboxSelect = document.createElement("select");
    for (x = 0; x < incompinfoboxArray.length ; x++) {
      incompinfoboxSelect.options[x] = new Option(incompinfoboxArray[x], incompinfoboxArray[x]);
      if (x == incompinfoboxState) {incompinfoboxSelect.options[x].style.backgroundColor = "#CCFFFF";}
      if (typeof assessmentDefaultIncompInfobox != "undefined" && incompinfoboxArray[x] == assessmentDefaultIncompInfobox ) {
	incompinfoboxSelect.selectedIndex = x;
      }
    }
    if (incompinfoboxState != 0) {incompinfoboxSelect.selectedIndex = incompinfoboxState;}
    myDiv.appendChild(incompinfoboxSelect);

    needsinfoboxcoverSelect = document.createElement("select");
    for (x = 0; x < needsinfoboxcoverArray.length ; x++) {
      needsinfoboxcoverSelect.options[x] = new Option(needsinfoboxcoverArray[x], needsinfoboxcoverArray[x]);
      if (x == needsinfoboxcoverState) {needsinfoboxcoverSelect.options[x].style.backgroundColor = "#CCFFFF";}
      if (typeof assessmentDefaultNeedsInfoboxCover != "undefined" && needsinfoboxcoverArray[x] == assessmentDefaultNeedsInfoboxCover ) {
	needsinfoboxcoverSelect.selectedIndex = x;
      }
    }
    if (needsinfoboxcoverState != 0) {needsinfoboxcoverSelect.selectedIndex = needsinfoboxcoverState;}
    myDiv.appendChild(needsinfoboxcoverSelect);

    novelsTaskForceSelect = document.createElement("select");
    for (x = 0; x < novelsTaskForceArray.length ; x++) {
      novelsTaskForceSelect.options[x] = new Option(novelsTaskForceArray[x], novelsTaskForceArray[x]);
	  if (typeof assessmentDefaultNovelsTaskForce != "undefined" && novelsTaskForceArray[x] == assessmentDefaultNovelsTaskForce ) {
	    novelsTaskForceSelect.selectedIndex = x;
	  }
    }
    myDiv.appendChild(novelsTaskForceSelect);
	
  }
  if (typeof assessmentExtraArray != "undefined") {
    extraArray = assessmentExtraArray;
    extraSelect = document.createElement("select");
    for (x = 0; x < extraArray.length ; x++) {
      extraSelect.options[x] = new Option(extraArray[x], extraArray[x]);
      if (typeof assessmentDefaultExtra != "undefined" && extraArray[x] == assessmentDefaultExtra ) {
	extraSelect.selectedIndex = x;
      }
    }
    myDiv.appendChild(extraSelect);
    
  }

  writeGradeLinks(templateChoice, myDiv);
  if ( document.getElementById("selectionDiv") === null ) { //order of ops is important for IE
    document.getElementById("contentSub").appendChild(myDiv) 
  }
  else {
    document.getElementById("contentSub").replaceChild(myDiv, document.getElementById("selectionDiv")); 
  }
  myDiv.id = "selectionDiv";
}
 
function writeGradeLinks(template, theDiv) {
  var grades = document.createElement("div");
  var count = ( Cookie.read("wpasCount") === null ) ? "0" : Cookie.read("wpasCount") ;
  filmGrades = (template=="Film") ? ' • <a href="javascript:addAssessment(\'Future\')">Future</a>' : "" ;
  grades.innerHTML = '(<a href="javascript:Cookie.create(\'wpasCount\',0,180);projectChange();" title="Click to reset">' + count + '</a> assessed) <a href="javascript:addAssessment(\'Stub\')" title="Assess as Stub using above template [1]" accesskey="1">Stub</a> • <a href="javascript:addAssessment(\'Start\')" title="Assess as Start using above template [2]" accesskey="2">Start</a> • <a href="javascript:addAssessment(\'C\')" title="Assess as C using above template [3]" accesskey="3">C</a> • <a href="javascript:addAssessment(\'B\')" title="Assess as B using above template [4]" accesskey="4">B</a> • <a href="javascript:addAssessment(\'GA\')">GA</a> • <a href="javascript:addAssessment(\'A\')">A</a> • <a href="javascript:addAssessment(\'List\')" title="Not applicable to all projects">List</a>' + filmGrades;
  theDiv.appendChild(grades);
}
 
function addAssessment(grade) {
  var thisTemplateMatch, newLines, textToReplace, template, ti;
  var priority = null;
  template = templateSelect.value;
  ti = templateSelect.selectedIndex;
  if (asTalkPage == null) { asTalkPage = "";}
  else if ( asTalkPage.match(new RegExp("\{\{" + template + "[ \n]*[\|}]", "i") ) ) { 
    addingNewTemplate = false;
  }
  else if ( asTalkPage.match(/((^[ \r\n]*\{\{[^\{}]*}}[ \n]*){1,3})/mi ) ) { // there are templates, but not mine
    replaced = RegExp.$1;
    replacement = RegExp.$1;
    if (replaced.match(/(\n{2,}$)/)) { replaced = replaced.replace(RegExp.$1, "\n"); }
    else { replaced += "\n"; }
    asTalkPage = asTalkPage.replace(replacement, replaced + TemplateArray[ti].code ); 
  }
  else { asTalkPage = TemplateArray[ti].code + "\n" + asTalkPage; } // no templates, so add before rest of talk page
  asTalkPage.match(new RegExp("(\{\{"+template+"[ \n]*[\|}][^}]*}}?)([ \n]?)", "i" ) );
  thisTemplateMatch = RegExp.$1;
  newLines = RegExp.$2;
  textToReplace = thisTemplateMatch; 

  thisTemplateMatch = updateTemplate(thisTemplateMatch, "class", grade);
  if (TemplateArray[ti].code.match(/((priority|importance)) *=/) && prioritySelect.options[prioritySelect.selectedIndex].value != "" ) { 
    priority = prioritySelect.options[prioritySelect.selectedIndex].value
    thisTemplateMatch = updateTemplate(thisTemplateMatch, RegExp.$1, priority );
  }
  thisTemplateMatch = thisTemplateMatch.replace(/\| *auto *= *yes(\n)?/i, ""); //wpdiff 122608658

  if (template=="WPBiography") {
        thisTemplateMatch = thisTemplateMatch.replace("importance", "priority");
  	if ( bioWorkGroupSelect.options[bioWorkGroupSelect.selectedIndex].value != "" ) {
		thisTemplateMatch = updateTemplate(thisTemplateMatch, bioWorkGroupSelect.options[bioWorkGroupSelect.selectedIndex].value, "yes" );
	}
	if ( livingSelect.options[livingSelect.selectedIndex].value != "" ) {
		thisTemplateMatch = updateTemplate(thisTemplateMatch, "living", livingSelect.options[livingSelect.selectedIndex].value );
    }
    if ( !thisTemplateMatch.match(/listas *= *\w+/i) ) {
        var sortKey = getSortKey();
        if ( sortKey != null ) { 
          thisTemplateMatch = updateTemplate(thisTemplateMatch, "listas", sortKey); 
        }
    }
  }	
  else if ( template=="WPMILHIST" ) {
    if ( milHistTaskForceSelect.options[milHistTaskForceSelect.selectedIndex].value != "" ) {
      thisTemplateMatch = updateTemplate(thisTemplateMatch, milHistTaskForceSelect.options[milHistTaskForceSelect.selectedIndex].value, "yes" );
    }
  }
  else if ( template=="NovelsWikiProject" ) {
    if ( needsinfoboxSelect.options[needsinfoboxSelect.selectedIndex].value != "" ) {
      thisTemplateMatch = updateTemplate(thisTemplateMatch, "byvalue", needsinfoboxSelect.options[needsinfoboxSelect.selectedIndex].value );
    }
    if ( incompinfoboxSelect.options[incompinfoboxSelect.selectedIndex].value != "" ) {
      thisTemplateMatch = updateTemplate(thisTemplateMatch, "byvalue", incompinfoboxSelect.options[incompinfoboxSelect.selectedIndex].value );
    }
    if ( needsinfoboxcoverSelect.options[needsinfoboxcoverSelect.selectedIndex].value != "" ) {
      thisTemplateMatch = updateTemplate(thisTemplateMatch, "byvalue", needsinfoboxcoverSelect.options[needsinfoboxcoverSelect.selectedIndex].value );
    }
    if ( novelsTaskForceSelect.options[novelsTaskForceSelect.selectedIndex].value != "" ) {
      thisTemplateMatch = updateTemplate(thisTemplateMatch, novelsTaskForceSelect.options[novelsTaskForceSelect.selectedIndex].value, "yes" );
    }
  }

  if ( extraSelect.options[extraSelect.selectedIndex].value != "" ) {
    thisTemplateMatch = updateTemplate(thisTemplateMatch, "byvalue", extraSelect.options[extraSelect.selectedIndex].value );
  }

  asTalkPage = asTalkPage.replace(textToReplace, thisTemplateMatch + ((newLines == "") ? "\n" : newLines) );
  asTalkPage = asTalkPage.replace( /\{\{stubclass[^}]}}/i , "" ); // wpdiff 122730502
  loadTalkPageHTML(grade, priority, mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=Talk:" + encodeURIComponent(wgTitle) + "&action=edit", template);
}
 
// feed in the parameter changes into the existing Template location for a change or at the end for a new paramter
function updateTemplate(templateCode, parameter, val) {
  var s = templateCode;
  var strVal = val;
  if ( s.match(/\n/) ) { addCr ="\n"; } else {addCr = ""};
  if ( s.match(" =")  ) { addSp =" = "; } else {addSp = "="};
  // if passed "byvalue" then split val into parameter and val
  if ( parameter == "byvalue" ) { 
    if ( strVal.match("=")  ) {
      arrVal=strVal.split("=");
      parameter = arrVal[0];
      val = arrVal[1];
    }
  }
  if ( s.match(new RegExp('(' + parameter + ' *= *([^|}\n]*))'))) {
    if (RegExp.$2 != val) {  
      s = s.replace(RegExp.$1, parameter + addSp + val );
      parametersChanged++;
    }
  }
  else { 
    s = s.replace(/}}/, '|' + parameter + addSp + val + addCr + "}}");
    parametersChanged++; 
  }
  return s;
}
 
function getSortKey() {
  loadCategories(mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/query.php?what=categories&titles=" + encodeURIComponent(wgTitle) +    	"&clextended&format=yaml");
  if ( categoryText != null && categoryText.match(/sortkey: (.+)[\n]/) ) {return RegExp.$1;   }
  else { return null; }  
}
 
function loadCategories(url) {
    if (window.XMLHttpRequest) {
        var catReq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        var catReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
   if (catReq) {
     catReq.onreadystatechange = function () { 
       if (catReq.readyState==4) {
         if (catReq.status==200) {
           categoryText = catReq.responseText;
         }
       }
     };
     catReq.open("GET", url, false);
     catReq.send("");  
   }
}
 
function loadTalkPageHTML(grade, priority, url, template) {
    if (window.XMLHttpRequest) {
        var tphreq = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        var tphreq = new ActiveXObject("Microsoft.XMLHTTP");
    }
   if (tphreq) {
     tphreq.onreadystatechange = function () { 
       if (tphreq.readyState==4) {
         if (tphreq.status==200) {
           postAssessment(grade, priority, tphreq, template);
         }
       }
     };
     tphreq.open("GET", url, true);
     tphreq.send("");  
   }
}
 
function postAssessment(grade, priority, myreq, template) {
  var count;
  var watchPageHTML;
  var minorEditHTML = '<input name="wpMinoredit" value="1" id="wpMinoredit" />';
  talkpagehtml = myreq.responseText;
  if ( Cookie.read("wpasCount") === null ) { count = 0; } 
  else { count = parseInt(Cookie.read("wpasCount")); }
  Cookie.create("wpasCount", String(count + 1), 180);
  if (typeof assessmentMarkAsMinor != "undefined" && !assessmentMarkAsMinor) {
      minorEditHTML = ""; 
  }
  if ( talkpagehtml.match(/<input type=.hidden. value="([\w\d]+)." name="wpEditToken"/i) ) {
    var editToken = RegExp.$1;
  }
  if ( talkpagehtml.match(/<input name=.wpAutoSummary. type="hidden" value="([\w\d]+)"/i) ) {
    var autoSummary = RegExp.$1;
  }
  if ( talkpagehtml.match(/<input type=.hidden. value="([\d]+)" name="wpStarttime"/i) ) {
    var startTime = RegExp.$1;
  }
  if ( talkpagehtml.match(/<input type=.hidden. value="([\d]+)" name="wpEdittime"/i) ) {
    var editTime = RegExp.$1;
  }
  if ( document.body.innerHTML.match('id="ca-unwatch"') ) {
    watchPageHTML = '<input name="wpWatchthis" value="1" id="wpWatchthis" />';
  }
  else if ( talkpagehtml.match(/<input name=.wpWatchthis. type="checkbox" value="1" checked="checked"/i) ) {
    if ( ( typeof assessmentOverrideWatchPref == "undefined" ) || ( typeof assessmentOverrideWatchPref != "undefined" && !assessmentOverrideWatchPref ) ) {  
    watchPageHTML = '<input name="wpWatchthis" value="1" id="wpWatchthis" />';
    }
  }
  mydiv = document.createElement("div");
  mydiv.innerHTML = '<form style="visibility: hidden;" id="editform" name="editform" method="post" action="/w/index.php?title=Talk:' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=edit" enctype="multipart/form-data"><textarea name="wpTextbox1" id="wpTextbox1"></textarea><input  type="text" name="wpSummary" id="wpSummary"/>' + minorEditHTML + '<input id="wpPreview" name="wpPreview" type="submit"/><input value="' + startTime + '" name="wpStarttime" /><input value="' + editTime + '" name="wpEdittime" /><input value="'+ editToken + '\" name="wpEditToken" /><input name="wpAutoSummary"  value="' + autoSummary + '" />' + watchPageHTML + '</form>';
  document.body.appendChild(mydiv);
  document.editform.wpTextbox1.value = asTalkPage;
  priorityText = ( priority != null ) ? "/"+priority : "";
  document.editform.wpSummary.value = ((addingNewTemplate) ? 'added ' : 'updated ') + 'wikiproject [[Template:' + template + '|' + template + ']] «' + grade + priorityText + '»';
  document.editform.submit();
}
 
function getAssessmentBackgroundColor(grade) {
  var s = grade.toLowerCase();
  switch (s) {
    case "none":
      return "#DDD"
      break
    case "stub":
      return "#FCC"
      break
    case "start":
      return "#FC9"
      break
    case "c":
      return "#FF6"
      break
    case "b":
      return "#FF9"
      break
    case "ga":
      return "#9C9"
      break
    case "a":
      return "#CFF"
      break
    case "fa":
      return "#9BE"
      break
    default:
      return ""
  }
}
 
function getTemplatesInString(s, isUsers) {
  var a = new Array();  
  while (s.match(/(\{\{ *([\w\d\.\- ]+)[^\{}]*[^\-]class *= *(\w+)?[^}]*}})/mi) ) {
    code = RegExp.$1;
    name = RegExp.$2.charAt(0).toUpperCase() + RegExp.$2.substring(1);
    grade = ( RegExp.$3.length == 1 ? RegExp.$3.toUpperCase() : RegExp.$3 );
    t = new aTemplate();
    t.name = name.replace(/ +$/, "");
    t.code = code;
    t.existsGrade = ((grade == "") ? "none" : grade);
    if ( code.match(/(priority|importance) *= *(\w+)/i) ) {
      t.existsPriority = RegExp.$2;
    }
    t.isUsers = ( isUsers ) ? true : false;
    a.push(t);
    s = s.replace(code, "");
  }
  return a;
}
 
function writeActivations() {
  return '&nbsp;&nbsp;&nbsp;<small>[<a href="javascript:switchActivation(\'2\')">On</a>] • [<a   href="javascript:switchActivation(\'1\')">Hide</a>] • [<a href="javascript:switchActivation(\'0\')">Off</a>]</small>';
}
 
function switchActivation(level) {
  Cookie.create("wpasStatus", level,180);
  if (level == "2" && document.getElementById("selectionDiv") === null) {
    begin();
    document.getElementById("selectionDiv").style.display = "block" ; 
  }
  else if ( document.getElementById("selectionDiv") != null && (level == "1" || level == "0" ) ) {
    document.getElementById("selectionDiv").style.display = "none";
  }
}
 
var Cookie= { // from http://www.quirksmode.org/js/cookies.html
	create: function(name,value,days)
	{
		var expires;
		if (days)
		{
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			expires = "; expires="+date.toGMTString();
		}
		else { expires = ""; }
		document.cookie = name+"="+value+expires+"; path=/";
	},
 
	read: function(name)
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++)
		{
			var c = ca[i];
			while (c.charAt(0)==' ') { c = c.substring(1,c.length); }
			if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length,c.length); }
		}
		return null;
	},
 
	erase: function(name)
	{
		Cookie.create(name,"",-1);
	}
};
 
// </nowiki>