User:Proteins/mosheadcheck.js

In this article, the topic of User:Proteins/mosheadcheck.js will be addressed from different perspectives with the aim of delving into its meaning, importance and repercussions in today's society. Various research and expert opinions will be explored to fully understand the impact User:Proteins/mosheadcheck.js has in different areas of daily life. In addition, specific cases and illustrative examples will be analyzed that will help contextualize the relevance of User:Proteins/mosheadcheck.js in the current context. Throughout the article we will seek to offer a comprehensive and complete vision of User:Proteins/mosheadcheck.js, in order to provide the reader with a clear and deep understanding of this topic that is so relevant today.
//<pre>
// Checks whether the Manual of Style is satisfied for article titles and section headings
//
// To use this script, add "importScript('User:Proteins/mosheadcheck.js');" to your monobook.js subpage 
// under your user page, as you can see at User:Proteins/monobook.js

// Black list of words that probably shouldn't appear at the start of a section heading
var forbidden_first_words_in_section_headings = [
"a", "an", "the", "in", "on", "concerning", "about", "through", "against", "for", "with", "without", "around", "from", "out", "because", "since", "while", "during", "throughout", "my", "your", "his", "her", "its", "our", "their", "I", "me", "you", "he", "him", "she", "it", "we", "us", "they", "them"
];

//****************************************************
// Check that the section headings conform to MOS:HEAD
//****************************************************
function checkSectionHeadings() {
	var alert_string = "";

	var num_errors = 0;
	var error_index = 0;
	var error_string = "";
	var max_num_errors_per_alert = 10;
	var error_string_list = new Array();

	var body_content;
	var article_title_node;
	var article_title = "";

	var anchors;
	var temp_anchor;
	var num_anchors = 0;
	var anchor_index = 0;
	var num_H2_anchors = 0;

	var anchor_string_index = 0;
	var proper_anchor_level = 0;
	var proper_anchor_string = "";

	var parent_node;
	var sibling_node;
	var next_sibling_node;

	var child_nodes;
	var num_child_nodes;

	var span_nodes;
	var temp_span_node;
	var num_span_nodes = 0;
	var span_node_index = 0;

	var anchor_level = 0;
	var prev_anchor_level = 0;

	var section_name = "";
	var temp_anchor_name = "";
	var num_section_names = 0;
	var section_name_index = 0;
	var apparent_section_name = "";
	var section_name_list = new Array();

	var words;
	var temp_word;
	var first_word;
	var num_words = 0;
	var word_index = 0;

	var forbidden_word;
	var num_forbidden_words = forbidden_first_words_in_section_headings.length;

	var num_See_also_sections = 0;
	var num_Notes_sections = 0;
	var num_References_sections = 0;
	var num_Bibliography_sections = 0;
	var num_Further_reading_sections = 0;
	var num_External_links_sections = 0;


// Get the bodyContent node
	body_content = document.getElementById('bodyContent');
	if (!body_content) { 
		error_string = "ERROR: There is no bodyContent node in this article.";
		window.alert(error_string);
		return;
	}

// Determine the article title and check for MoS violations
	num_errors = 0;
	error_string = "";

	article_title_node = body_content.previousSibling;
	while ((article_title_node) && (article_title_node.nodeType != 1)) { 
		article_title_node = article_title_node.previousSibling;
	}
	if (article_title_node) { 
		if ((article_title_node.nodeName == "H1") && (article_title_node.className.match(/firstHeading/))) { 
			article_title = article_title_node.innerHTML;
			article_title = article_title.replace(/<span*>.*<\/span>/, "");

			if (!article_title.match(/^/)) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": Article title \"" + article_title + "\" does not begin with a capital letter or a digit.\n";
				error_string += "\tPlease capitalize the first word of the title, but no other words.\n";
				error_string_list.push(error_string);
				article_title_node.style.cssText = "background-color:red";
			}

			// Check for punctuation generally
			if (article_title.match(//g)) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": Article title \"" + article_title + "\" has punctuation or non-English characters.\n";
				error_string_list.push(error_string);
				article_title_node.style.cssText = "background-color:red";
			}
			if ((article_title.match(/\s\-/g)) || (article_title.match(/\-\s/g))) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": Article title \"" + article_title + "\" has a spaced hyphen.\n";
				error_string += "\tPlease use hyphens only for compound nouns and adjectives in article titles.\n";
				error_string_list.push(error_string);
				article_title_node.style.cssText = "background-color:red";
			}
			if ((article_title.match(/\s–/g)) || (article_title.match(/–\s/g))) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": Article title \"" + article_title + "\" has a spaced en-dash.\n";
				error_string += "\tPlease use en-dashes only for compound nouns and adjectives in article titles.\n";
				error_string_list.push(error_string);
				article_title_node.style.cssText = "background-color:red";
			}

			words = article_title.split(' ');
			if (words) { 
				num_words = words.length;
				if (num_words > 0) { 
					if (num_words > 9) { 
						num_errors++; 
						error_string = "ERROR " + num_errors + ": Article title \"" + article_title + "\" has more than nine words (" + num_words + " words).\n";
						error_string_list.push(error_string);
						article_title_node.style.cssText = "background-color:red";
					}

					for (word_index=0; word_index<num_words; word_index++) {
						if ((word_index > 0) && (words.match(/^/)) && (!words.match(/:$/))) { 
							num_errors++; 
							error_string = "ERROR " + num_errors + ": Word \"" + words + "\" in article title \"" + article_title + "\" is capitalized.\n";
							error_string += "\tPlease capitalize only the first word of an article title, unless a proper name.\n";
							error_string_list.push(error_string);
							article_title_node.style.cssText = "background-color:red";	
						}
						temp_word = words.substr(1);
						if (!temp_word) { continue; }
						if (temp_word.match(//))  { 
							num_errors++; 
							error_string = "ERROR " + num_errors + ": Word \"" + words + "\" in article title \"" + article_title + "\" has internal capital letters.\n";
							error_string_list.push(error_string);
							article_title_node.style.cssText = "background-color:red";							
						}
					} // closes loop checking the individual words

					first_word = words.toLowerCase();
					for (word_index=0; word_index<num_forbidden_words; word_index++) {
						forbidden_word = forbidden_first_words_in_section_headings;
						if (first_word == forbidden_word) {
							num_errors++; 
							error_string = "ERROR " + num_errors + ": Article title \"" + article_title + "\" begins with a forbidden word \"" + forbidden_word + "\".\n";
							switch (forbidden_word) {
 								case "a":
								case "an":
									error_string += "\tPlease do not start an article title with an indefinite article such as \"" + forbidden_word + "\".\n";
							 		break;
 								case "the":
									error_string += "\tPlease do not start an article title with an definite article such as \"" + forbidden_word + "\".\n";
							 		break;
 								case "in":
								case "on":
								case "for":
								case "out":
								case "with":
								case "from":
								case "about":
								case "around":
								case "through":
								case "without":
								case "against":
									error_string += "\tPlease do not start an article title with a preposition such as \"" + forbidden_word + "\".\n";
							 		break;

								case "concerning":
									error_string += "\tPlease do not start an article title with a verb participle such as \"" + forbidden_word + "\".\n";
							 		break;
								case "since":
								case "while":
								case "during":
								case "because":
								case "throughout":
									error_string += "\tPlease do not start an article title with a conjunction such as \"" + forbidden_word + "\".\n";
							 		break;
								case "my":
								case "your":
								case "yours":
								case "his":
								case "her":
								case "hers":
								case "its":
								case "our":
								case "their":
								case "I":
								case "me":
								case "you":
								case "he":
								case "him":
								case "she":
								case "it":
								case "we":
								case "us":
								case "they":
								case "them":
									error_string += "\tPlease do not start an article title with a pronoun such as \"" + forbidden_word + "\".\n";
							 		break;
							} // closes switch on the forbidden word
							error_string_list.push(error_string);
							article_title_node.style.cssText = "background-color:red";
							break; // break out of loop over forbidden words
						}
					}
				} // closes check for positive number of words in article title
			} // closes check  that words exist in the article title
		} // closes check for proper article title
	} // closes check for article title node
	section_name_list.push(article_title);

// Get the document anchors
	anchors = document.anchors;
	if (!anchors) { 
		window.alert("This document has no anchors.\n\n");
		return;
	}
	num_anchors = anchors.length;
	if (num_anchors<1) { 
		window.alert("This document has zero anchors.\n\n");
		return;
	}

// Loop over the anchors
	num_See_also_sections = 0;
	num_Notes_sections = 0;
	num_References_sections = 0;
	num_Bibliography_sections = 0;
	num_Further_reading_sections = 0;
	num_External_links_sections = 0;

	num_H2_anchors = 0;
	num_section_headings = 0;
	section_name = "lead section";
	prev_anchor_level = 1;  //begin at the H1 heading

	for (anchor_index=1; anchor_index<num_anchors; anchor_index++) {
		temp_anchor = anchors;
		if (!temp_anchor) { continue; }

		parent_node = temp_anchor.parentNode; 
		if (!parent_node) { continue; }
 
		sibling_node = parent_node.nextSibling;
		if (!sibling_node) { continue; }

		temp_anchor_name = temp_anchor.name;

// Check headings for jumps upwards in heading level
		anchor_level = 0;
		if (sibling_node.nodeName == "H1") {
			num_errors++;
			if (num_H2_anchors == 0) { 
				error_string = "ERROR " + num_errors + ": Illegal H1 heading \"" + temp_anchor_name.replace(/(_+)/ig, " ") + "\" in the lead section\n";
			} else { 
				error_string = "ERROR " + num_errors + ": Illegal H1 heading \"" + temp_anchor_name.replace(/(_+)/ig, " ") + "\" in section \"" + section_name.replace(/(_+)/ig, " ") + "\"\n";
			}
			error_string_list.push(error_string);
			sibling_node.style.cssText = "background-color:red";
		} else if (sibling_node.nodeName == "H2") {
			anchor_level = 2;	
		} else if (sibling_node.nodeName == "H3") {
			anchor_level = 3;	
		} else if (sibling_node.nodeName == "H4") {
			anchor_level = 4;	
		} else if (sibling_node.nodeName == "H5") {
			anchor_level = 5;	
		}  else { 
			next_sibling_node = sibling_node.nextSibling;
			if (!next_sibling_node) { continue; }

// Check headings for jumps upwards in heading level
			if (next_sibling_node.nodeName == "H1") {
				num_errors++;
				if (num_H2_anchors == 0) { 
					error_string = "ERROR " + num_errors + ": Illegal H1 heading \"" + temp_anchor_name.replace(/(_+)/ig, " ") + "\" in the lead section\n";
				} else { 
					error_string = "ERROR " + num_errors + ": Illegal H1 heading \"" + temp_anchor_name.replace(/(_+)/ig, " ") + "\" in section \"" + section_name.replace(/(_+)/ig, " ") + "\"\n";
				}
				error_string_list.push(error_string);
				next_sibling_node.style.cssText = "background-color:red";
			} else if (next_sibling_node.nodeName == "H2") {
				anchor_level = 2;	
			} else if (next_sibling_node.nodeName == "H3") {
				anchor_level = 3;	
			} else if (next_sibling_node.nodeName == "H4") {
				anchor_level = 4;	
			} else if (next_sibling_node.nodeName == "H5") {
				anchor_level = 5;	
			}
			sibling_node = next_sibling_node;
		} // closes assignment of the anchor level, if any 
 
		if (((anchor_level - prev_anchor_level) > 1) && (prev_anchor_level != 0)) {
			proper_anchor_level = prev_anchor_level - 0 + 1;
			proper_anchor_string = "";
			for (anchor_string_index=0; anchor_string_index<proper_anchor_level; anchor_string_index++) { 
				proper_anchor_string += "=";
			}

			if (num_H2_anchors == 0) {
				num_errors++;
				error_string = "ERROR " + num_errors + ": H" + prev_anchor_level + " to H" + anchor_level + " jump in the lead section\n";
				error_string += "\tThe correct subheading would be H" + proper_anchor_level + ", which is \"" + proper_anchor_string + temp_anchor_name.replace(/(_+)/ig, " ") + proper_anchor_string + "\" in wiki-markup.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			} else {
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + prev_anchor_level + " to H" + anchor_level + " jump in section \"" + section_name.replace(/(_+)/ig, " ") + "\"\n";
				error_string += "\tThe correct subheading would be H" + proper_anchor_level + ", which is \"" + proper_anchor_string + temp_anchor_name.replace(/(_+)/ig, " ") + proper_anchor_string + "\" in wiki-markup.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}
		}


// Check section names
		if (anchor_level > 0) { 
			section_name = temp_anchor.name;
			prev_anchor_level = anchor_level;

			// Compare the heading section name with the anchor section name
			apparent_section_name = section_name;
			span_nodes = sibling_node.getElementsByTagName("SPAN");
			if (span_nodes) { 
				num_span_nodes = span_nodes.length;
				if (num_span_nodes > 0) { 
					for (span_node_index=0; span_node_index<num_span_nodes; span_node_index++) { 
						temp_span_node = span_nodes;
						if (!temp_span_node) { continue; } 

						if (temp_span_node.className == "mw-headline") { 
							apparent_section_name = temp_span_node.innerHTML;
							apparent_section_name = apparent_section_name.replace(/<+>/ig, "");

							// Check for links in section name
							child_nodes = temp_span_node.getElementsByTagName("A");
							if (child_nodes) { 
								num_child_nodes = child_nodes.length;
								if (num_child_nodes > 0) { 
									num_errors++; 
									error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" has a forbidden hyperlink.\n";
									error_string += "\tSection headings should never have hyperlinks.\n";
									error_string_list.push(error_string);
									sibling_node.style.cssText = "background-color:red";
								}
							} // closes check for child nodes in span node

							// Check for boldface type in section name
							child_nodes = temp_span_node.getElementsByTagName("B");
							if (child_nodes) { 
								num_child_nodes = child_nodes.length;
								if (num_child_nodes > 0) { 
									num_errors++; 
									error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" has boldface formatting.\n";
									error_string += "\tIt is never appropriate to use boldface type in a section heading; see MOS:BOLD.\n";
									error_string_list.push(error_string);
									sibling_node.style.cssText = "background-color:red";
								}
							} // closes check for child nodes in span node

							// Check for italics in section name
							child_nodes = temp_span_node.getElementsByTagName("I");
							if (child_nodes) { 
								num_child_nodes = child_nodes.length;
								if (num_child_nodes > 0) { 
									num_errors++; 
									error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" has italics formatting.\n";
									error_string += "\tPlease use italics only for titles of longer works and similar uses; see MOS:ITALICS.\n";
									error_string_list.push(error_string);
									sibling_node.style.cssText = "background-color:red";
								}
							} // closes check for child nodes in span node
						}
					} // closes loop over span nodes
				}
			}
			if (apparent_section_name != section_name.replace(/(_+)/ig, " ")) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" does not agree with its apparent section heading \"" + apparent_section_name + "\".\n";
				error_string += "\tThis may indicate a bad character or a repeated section heading.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}

			// Check for repeats with earlier section headings including article title (section 0)
			for (section_name_index=0; section_name_index<=num_section_names; section_name_index++) { 
				if (section_name.indexOf(section_name_list) == 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" repeats an earlier section heading \"" + section_name_list + "\" (index " + section_name_index + ").\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} // closes loop over prior section names
			num_section_names++;
			section_name_list.push(apparent_section_name);

			// Check for final colons and other punctuation
			if (section_name.match(/:$/)) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" should not end in a colon.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}

			// Check for punctuation generally
			if (apparent_section_name.match(//g)) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + apparent_section_name + "\" has punctuation or non-English characters.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}
			if ((apparent_section_name.match(/\s\-/g)) || (apparent_section_name.match(/\-\s/g))) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + apparent_section_name + "\" has a spaced hyphen.\n";
				error_string += "\tPlease use hyphens only for compound nouns and adjectives in section headings.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}
			if ((apparent_section_name.match(/\s–/g)) || (apparent_section_name.match(/–\s/g))) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + apparent_section_name + "\" has a spaced en-dash.\n";
				error_string += "\tPlease use en-dashes only for compound nouns and adjectives in section headings.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}

			// Check for initial capital letter
			if (!section_name.match(/^/)) { 
				num_errors++; 
				error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" does not begin with a capital letter or a digit.\n";
				error_string += "\tPlease capitalize the first word of the heading, but no other words.\n";
				error_string_list.push(error_string);
				sibling_node.style.cssText = "background-color:red";
			}

			words = apparent_section_name.split(' ');
			if (words) { 
				num_words = words.length;
				if (num_words > 0) { 
					if (num_words > 9) { 
						num_errors++; 
						error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" has more than nine words (" + num_words + " words).\n";
						error_string_list.push(error_string);
						sibling_node.style.cssText = "background-color:red";
					}

					for (word_index=0; word_index<num_words; word_index++) {
						if ((word_index > 0) && (words.match(/^/)) && (!words.match(/:$/))) { 
							num_errors++; 
							error_string = "ERROR " + num_errors + ": Word \"" + words + "\" in H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" is capitalized.\n";
							error_string += "\tPlease capitalize only the first word of a section heading, unless a proper name.\n";
							error_string_list.push(error_string);
							sibling_node.style.cssText = "background-color:red";	
						}
						temp_word = words.substr(1);
						if (!temp_word) { continue; }
						if (temp_word.match(//))  { 
							num_errors++; 
							error_string = "ERROR " + num_errors + ": Word \"" + words + "\" in H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" has internal capital letters.\n";
							error_string_list.push(error_string);
							sibling_node.style.cssText = "background-color:red";							
						}
					} // closes loop checking the individual words

					first_word = words.toLowerCase();
					for (word_index=0; word_index<num_forbidden_words; word_index++) {
						forbidden_word = forbidden_first_words_in_section_headings;
						if (first_word == forbidden_word) {
							num_errors++; 
							error_string = "ERROR " + num_errors + ": H" + anchor_level + " section \"" + section_name.replace(/(_+)/ig, " ") + "\" begins with a forbidden word \"" + forbidden_word + "\".\n";
							switch (forbidden_word) {
 								case "a":
								case "an":
									error_string += "\tPlease do not start a section heading with an indefinite article such as \"" + forbidden_word + "\".\n";
							 		break;
 								case "the":
									error_string += "\tPlease do not start a section heading with an definite article such as \"" + forbidden_word + "\".\n";
							 		break;
 								case "in":
								case "on":
								case "for":
								case "out":
								case "with":
								case "from":
								case "about":
								case "around":
								case "through":
								case "without":
								case "against":
									error_string += "\tPlease do not start a section heading with a preposition such as \"" + forbidden_word + "\".\n";
							 		break;

								case "concerning":
									error_string += "\tPlease do not start a section heading with a verb participle such as \"" + forbidden_word + "\".\n";
							 		break;
								case "since":
								case "while":
								case "during":
								case "because":
								case "throughout":
									error_string += "\tPlease do not start a section heading with a conjunction such as \"" + forbidden_word + "\".\n";
							 		break;
								case "my":
								case "your":
								case "yours":
								case "his":
								case "her":
								case "hers":
								case "its":
								case "our":
								case "their":
								case "I":
								case "me":
								case "you":
								case "he":
								case "him":
								case "she":
								case "it":
								case "we":
								case "us":
								case "they":
								case "them":
									error_string += "\tPlease do not start a section heading with a pronoun such as \"" + forbidden_word + "\".\n";
							 		break;
							} // closes switch on the forbidden word
							error_string_list.push(error_string);
							sibling_node.style.cssText = "background-color:red";
							break; // break out of loop over forbidden words
						}
					}
				} // closes check on num_words in section heading
			} // closes check on num_words in section heading
		} // closes check for section anchor 


//Check major section headings for closing sections
		if (anchor_level == 2) { 
			num_H2_anchors++;

			if (section_name.match(/See_also/ig)) { 
				num_See_also_sections++;
				if (num_See_also_sections > 1) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section \"" + section_name.replace(/(_+)/ig, " ") + "\" makes " + num_See_also_sections + " \"See also\" sections.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (!section_name.match(/^See_also$/ig)) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" does not match correct form \"See also\".\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Notes_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Notes\" (or \"Footnotes\") section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_References_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"References\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Bibliography_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Bibliography\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Further_reading_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Further reading\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_External_links_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"External links\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} else if ((section_name.match(/Note/ig)) || (section_name.match(/Footnote/ig))) { 
				num_Notes_sections++;
				if (num_Notes_sections > 1) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section \"" + section_name.replace(/(_+)/ig, " ") + "\" makes " + num_Notes_sections + " \"Notes\" (\"Footnotes\") sections.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if ((!section_name.match(/^Note$/i)) && (!section_name.match(/^Notes$/i)) && (!section_name.match(/^Footnote$/i)) && (!section_name.match(/^Footnotes$/i)) && (!section_name.match(/^Notes_and_references$/i)) && (!section_name.match(/^Footnotes_and_references$/i)) && (!section_name.match(/^References_and_notes$/i)) && (!section_name.match(/^References_and_footnotes$/i))) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" does not match correct forms \"Note\", \"Notes\", \"Footnote\", \"Footnotes\", \"Notes and references\" , \"Footnotes and references\", \"References and notes\" or \"References and footnotes\".\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_References_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"References\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Bibliography_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Bibliography\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Further_reading_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Further reading\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_External_links_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"External links\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} else if (section_name.match(/Reference/ig)) { 
				num_References_sections++;
				if (num_References_sections > 1) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section \"" + section_name.replace(/(_+)/ig, " ") + "\" makes " + num_References_sections + " \"References\" sections.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if ((!section_name.match(/^Reference$/ig)) && (!section_name.match(/^References$/ig))) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" does not match correct forms \"Reference\" or \"References\".\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Bibliography_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Bibliography\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Further_reading_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Further reading\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_External_links_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"External links\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} else if (section_name.match(/Bibliography/ig)) { 
				num_Bibliography_sections++;
				if (num_Bibliography_sections > 1) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section \"" + section_name.replace(/(_+)/ig, " ") + "\" makes " + num_Bibliography_sections + " \"Bibliography\" sections.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (!section_name.match(/^Bibliography$/ig)) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" does not match correct form \"Bibliography\".\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_Further_reading_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"Further reading\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_External_links_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"External links\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} else if (section_name.match(/Further_reading/ig)) { 
				num_Further_reading_sections++;
				if (num_Further_reading_sections > 1) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section \"" + section_name.replace(/(_+)/ig, " ") + "\" makes " + num_Further_reading_sections + " \"Further reading\" sections.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (!section_name.match(/^Further_reading$/ig)) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" does not match correct form \"Further reading\".\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if (num_External_links_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": The section \"" + section_name.replace(/(_+)/ig, " ") + "\" should come before the \"External links\" section.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} else if (section_name.match(/External_link/ig)) { 
				num_External_links_sections++;
				if (num_External_links_sections > 1) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section \"" + section_name.replace(/(_+)/ig, " ") + "\" makes " + num_External_link_sections + " \"External_links\" sections.\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}

				if ((!section_name.match(/^External_link$/ig)) && (!section_name.match(/^External_links$/ig))) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" does not match correct forms \"External_link\" or \"External_links\".\n";
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} else { 
				if (num_See_also_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" comes after a \"See also\" section.\n";
					error_string += "\tPlease put this before closing sections such as \"See also\", \"References\" and \"External links\".\n"; 
					error_string_list.push(error_string); 
					sibling_node.style.cssText = "background-color:red";
				}
				if (num_References_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" comes after a \"References\" section.\n";
					error_string += "\tPlease put this before closing sections such as \"See also\", \"References\" and \"External links\".\n"; 
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
				if (num_Bibliography_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" comes after a \"Bibliography\" section.\n";
					error_string += "\tPlease put this before closing sections such as \"See also\", \"References\" and \"External links\".\n"; 
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
				if (num_Further_reading_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" comes after a \"Further reading\" section.\n";
					error_string += "\tPlease put this before closing sections such as \"See also\", \"References\" and \"External links\".\n"; 
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
				if (num_External_links_sections > 0) { 
					num_errors++; 
					error_string = "ERROR " + num_errors + ": Section heading \"" + section_name.replace(/(_+)/ig, " ") + "\" comes after an \"External links\" section.\n";
					error_string += "\tPlease put this before closing sections such as \"See also\", \"References\" and \"External links\".\n"; 
					error_string_list.push(error_string);
					sibling_node.style.cssText = "background-color:red";
				}
			} // closes check for the closing sections
		} // closes check for H2 anchor
	} // closes loop over the anchors

// List the section headings for debugging
	alert_string = "This article has " + num_section_names + " section headings.\n\n";
	alert_string += "\tArticle title: " + article_title + "\n\nSections:\n";
	for (section_name_index=1; section_name_index<=num_section_names; section_name_index++) { 
		alert_string += "\t" + section_name_index + ". " + section_name_list + "\n";
	}
	window.alert(alert_string);

// Print summary of section-heading errors
	if (num_errors < 1) {
		error_string = "No errors in heading levels and order of sections.\n";
		window.alert(error_string); 
		return;
	} else if (num_errors == 1) { 
		initial_error_string = "There is one potential MoS error in the section headings";
	} else { 
		initial_error_string = "There are " + num_errors + " potential MoS errors in the section headings";
	}
	error_string = initial_error_string + ":\n\n";
	for (error_index=0; error_index<num_errors; error_index++) { 
		if ((error_index%max_num_errors_per_alert == 0) && (error_index > 1)) { 
			error_string += "\n\t\t\t\tContinued on next screen...\n";
			window.alert(error_string); 
			error_string = initial_error_string + " (continued from previous screen):\n\n";
		}
		error_string += error_string_list;
	} // closes loop over errors
	error_string += "\nYou should also check that:\n";
	error_string += "\t1. The section headings are nouns or noun phrases.\n";
	error_string += "\t2. The section headings do not refer to the article title or other section headings.\n";
	window.alert(error_string);

} // closes function checkSectionHeadings()


//******************
// The Main Function
//******************

function checkManualOfStyle() { 

	checkSectionHeadings(); // MOS:HEAD

} // closes function checkManualOfStyle()


addOnloadHook(function () {
mw.util.addPortletLink('p-navigation', 'javascript:checkManualOfStyle()', 'Check MOS:HEAD', 'ca-moscheck', 'Checks for violations of the Manual of Style on section headings', '', '');
});
 
//</pre>