Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
//mw.loader.load('https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js');

$(document).ready(function(){
	
	// Initials
	var now = new Date();
	var curdate = new Date(now.getTime()+now.getTimezoneOffset()*60000);
	
	var fs_count = 0;
	var fm_table_count = 0;
	var otd_table_count = 0;
	
	var fs_check_year = 2011;
	var prevyear = 0;
	
	var fs_month_count = [0,0,0,0,0,0,0,0,0,0,0,0];
	var fs_month_count_row = [0,0,0,0,0,0,0,0,0,0,0,0];
	var fs_year_count = 0;
	
	var sd_cal_date = curdate.getDate();
	var sd_cal_month = curdate.getMonth();
	
	var errors = [];
	
	var temp_string = '';
	temp_string += '<tr>';
	temp_string += '<th>Year</th>';
	for (var i=0;i<12;i++) {
		temp_string += '<th>'+getMonthNameSmall(i)+'</th>';
	}
	temp_string += '<th>Total</th>';
	temp_string += '</tr>';
	$('#fsyear').append(temp_string);
	temp_string='';
	
	$(".fs-table").each(function(){
		var trcount = 0;
		var fs_section_count = 0;
		$(this).children('tbody').children('tr').each(function(){
			trcount++;
			if (trcount!=1) {
				fs_count++;
				fs_section_count++;
				
				//Adding Counter
				$(this).prepend('<th>'+fs_section_count+'</th>');
				
				//Storing Table Cells
				var fs_name = $(this).children('td:nth-child(2)');
				var fm_name = $(this).children('td:nth-child(3)');
				var fm_name_linked = '<a href="/wiki/User:Yasir72.multan/FM?name='+fm_name.text()+'">'+fm_name.html()+'<a>';
				var fr_date = $(this).children('td:nth-child(4)');
				var sd_date = $(this).children('td:nth-child(5)');
				var fs_date = $(this).children('td:nth-child(6)');
				
				//Linking FM
				fm_name.html(fm_name_linked);
				
				//Showing FM to FM Table
				var fm_name_param = getUrlParam("name").toLowerCase();
				if (fm_name.text().toLowerCase()==fm_name_param) {
					fm_table_count++;
					temp_string = '';
					temp_string += '<tr>';
					temp_string += '<th>'+fm_table_count+'</th>';
					temp_string += '<td>'+fs_name.html()+'</td>';
					temp_string += '<td>'+sd_date.text()+'</td>';
					temp_string += '<td>'+fs_date.html()+'</td>';
					temp_string += '</tr>';
					$('.fm-table').append(temp_string);
					$('#FM').html(fm_name.text());
					$('#frdate').html('<h3>Release Date: '+fr_date.text()+'</h3>');
				}
					
				// Showing "On This Day" table
				var sd_date_param  = new Date();
				sd_date_param.setFullYear(2000);
				if (getUrlParam("date")==="") {
					sd_date_param.setDate(curdate.getDate());
					sd_date_param.setMonth(curdate.getMonth());
				} else {
					temp_date = new Date(getUrlParam("date").replace('_', ' ')+' 2000');
					sd_date_param.setDate(temp_date.getDate());
					sd_date_param.setMonth(temp_date.getMonth());
				}
				check_sd_date = new Date(sd_date.text());
				sd_cal_date = sd_date_param.getDate();
				sd_cal_month = sd_date_param.getMonth();
				if (check_sd_date.getDate()==sd_date_param.getDate()&&check_sd_date.getMonth()==sd_date_param.getMonth()) {
					otd_table_count++;
					temp_string = '';
					temp_string += '<tr>';
					temp_string += '<th>'+otd_table_count+'</th>';
					temp_string += '<td>'+fs_name.html()+'</td>';
					temp_string += '<td>'+fm_name.html()+'</td>';
					temp_string += '<td>'+fr_date.text()+'</td>';
					temp_string += '<td><center><a href="/wiki/User:Yasir72.multan/FS/Archives/'+check_sd_date.getFullYear()+'">'+check_sd_date.getFullYear()+'</a></center></td>';
					temp_string += '<td>'+fs_date.html()+'</td>';
					temp_string += '</tr>';
					$('#otd-table').append(temp_string);
				}
				$('#On_This_Day').html(getMonthName(sd_date_param.getMonth())+' '+sd_date_param.getDate());
				
				// Showing Next and Previous Arrows below OTD
				var previousdate = new Date();
				var nextdate = new Date();
				previousdate.setTime(sd_date_param.getTime()-86400000);
				nextdate.setTime(sd_date_param.getTime()+86400000);
				$('#np1').html("<a href='/wiki/User:Yasir72.multan/On_This_Day?date="+getMonthName(previousdate.getMonth())+"_"+previousdate.getDate()+"'>← "+getMonthName(previousdate.getMonth())+" "+previousdate.getDate()+"</a>");
				$('#np2').html("<a href='/wiki/User:Yasir72.multan/On_This_Day?date="+getMonthName(nextdate.getMonth())+"_"+nextdate.getDate()+"'>"+getMonthName(nextdate.getMonth())+" "+nextdate.getDate()+" →</a>");
				
				//Showing FS Year Statistics
				if (fs_check_year!=check_sd_date.getFullYear()) {
					if (!parseInt(check_sd_date.getFullYear())) {
						errors.push('SD Date Error: <i>`'+sd_date.text()+'`</i>');
						sd_date.css({'border':'5px solid red'});
					}
					printFSYrow(fs_month_count_row, prevyear);
					fs_check_year = check_sd_date.getFullYear();
					fs_month_count_row = [0,0,0,0,0,0,0,0,0,0,0,0];
				}
				fs_month_count[check_sd_date.getMonth()]++;
				fs_month_count_row[check_sd_date.getMonth()]++;
				fs_year_count++;
				prevyear = check_sd_date.getFullYear();
				
				// -------
			} else {
				$(this).prepend('<th>No.</th>');
			}
			
		});
	});
	// FS Year Last row (neccassry)
	printFSYrow(fs_month_count_row, prevyear);
	
	// Showing SD Cal
	var sdcal = $('#sdcal');
	temp_string = '';
	temp_string += '<tr>';
	temp_string += '<th>Months</th><th>Total FS</th><th>Dates</th>';
	temp_string += '</tr>';
	sdcal.append(temp_string);
	temp_string = '';
	for (i=0;i<12;i++) {
		temp_string += '<tr>';
		temp_string += '<th>'+getMonthName(i)+'</th>';
		temp_string += '<td><center>'+fs_month_count[i]+'</center></td>';
		temp_string += '<td>';
		var days = 0;
		if (i===0||i==2||i==4||i==6||i==7||i==9||i==11) {
			days = 31;
		} else if (i==3||i==5||i==8||i==10) {
			days = 30;
		} else if (i==1) {
			days = 29;
		}
		for (var k=1;k<=days;k++) {
			if (sd_cal_date==k&&sd_cal_month==i) {
				temp_string += '<b>'+k+'</b> '
			} else {
				temp_string += "<a href='/wiki/User:Yasir72.multan/On_This_Day?date="+getMonthName(i)+"_"+k+"'>"+k+"</a> ";
			}
		}
		temp_string += '</td>';
		temp_string += '</tr>';
	}
	sdcal.append(temp_string);
	
	//Other Single Line Objects
	$('#FS').append(' ('+fs_count+')');
	$('#seetoday').html("<a href='/wiki/User:Yasir72.multan/On_This_Day'>See Today</a> ("+getMonthName(curdate.getMonth())+" "+curdate.getDate()+")");
	$('#totalfscount').html('Total <b>'+fs_count+'</b> FS');
	
	//Accuracy
	var all_month_count = 0;
	for (i=0;i<12;i++) {
		all_month_count += fs_month_count[i];
	}
	if (all_month_count!=fs_count) {
		errors.push('Rows Error: '+fs_count+' != '+all_month_count);
	}
	if (errors.length!==0) {
		temp_string = '';
		temp_string += '<h3>Results are Not Accurate!</h3>';
		temp_string += '<ul>';
		for (i=0;i<errors.length;i++) {
			temp_string += '<li>'+errors[i]+'</li>';
		}
		temp_string += '</ul>';
		$('#resultalert').html(temp_string);
		$('#resultalert').css({
			'background':'lightpink',
			'font-weight':'bold',
			'border':'3px solid red',
			'padding':'8px'
		});
	} else {
		$('#resultalert').html('<b style="color:green">Accurate!</b>');
	}
});

/* Functions */
function printFSYrow(array, year) {
	var ysum = 0;
	var t_str = '<tr>';
	t_str += '<th>'+year+'</th>';
	for (var i=0;i<12;i++) {
		ysum = ysum + array[i];
		if (array[i]!==0) {
			t_str += '<td><center>'+array[i]+'</center></td>';
		} else {
			t_str += '<td></td>';
		}
	}
	t_str += '<th>'+ysum+'</th>';
	t_str += '</tr>';
	$('#fsyear').append(t_str);
}

function getUrlParam(name) {
	var ans = "";
	var url = decodeURIComponent(window.location.href);
	var urlparts = url.split("?");
	if (urlparts.length>=2) {
		var urlparams = urlparts[1].split("&");
		for (var c=0;c<urlparams.length;c++) {
			var keyvar = urlparams[c].split("=");
			if (name.toLowerCase()==keyvar[0].toLowerCase()) {
				ans = keyvar[1];
			}
		}
	}
	return ans;
}

function getMonthName(i) {
	var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	return months[i];
}

function getMonthNameSmall(i) {
	var monthsm = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	return monthsm[i];
}