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 otd_day_count = [];
	for (i=0;i<12;i++) {
		var otd_day_temp = [];
		for (j=0;j<31;j++) {
			otd_day_temp.push(0);
		}
		otd_day_count.push(otd_day_temp);
	}
	
	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 prevsdts = 0;
	var prev_sd_date = '';
	
	var errors = [];
	var fm_on = [];
	var fm_on_show = [];
	
	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('<td><center><b>'+fs_section_count+'</b></center></td>');
				
				//Storing Table Cells
				var fs_name = $(this).children('td:nth-child(2)');
				var fm_name = $(this).children('td:nth-child(3)');
				var fr_date = $(this).children('td:nth-child(4)');
				var fm_key = fm_name.text().replace(/[^a-zA-Z0-9]+/ig,'');
				var fm_ts = getTS(fr_date.text());
				var fm_key_full = fm_key+'_'+fm_ts;
				var fm_name_linked = '<a href="/wiki/User:Yasir72.multan/FM?name='+fm_key+'&ts='+fm_ts+'">'+fm_name.html()+'</a>';
				var sd_date = $(this).children('td:nth-child(5)');
				check_sd_date = new Date(sd_date.text());
				if (parseInt(check_sd_date.getFullYear())) {
					otd_day_count[check_sd_date.getMonth()][check_sd_date.getDate()-1]++;
				}
				var sd_date_linked = "<a style='color:inherit' href='/wiki/User:Yasir72.multan/On_This_Day?date="+getMonthName(check_sd_date.getMonth())+"_"+check_sd_date.getDate()+"'>"+sd_date.html()+"</a> ";
				var sd_ts = getTS(sd_date.text());
				var fs_date = $(this).children('td:nth-child(6)');
				
				//Linking FM
				fm_name.html(fm_name_linked);
				
				//Linking SD Date
				sd_date.html(sd_date_linked);
				
				//Showing FM to FM Table
				var fm_name_param = getUrlParam("name").toLowerCase();
				var fm_ts_param = getUrlParam("ts");
				if (!parseInt(fm_ts)) {
					errors.push('FR Date Error of <i>'+fm_name.text()+'</i>:<br><i>`'+fr_date.text()+'`</i><br><small> - '+sd_date.text()+'</small>');
					fr_date.css({'border':'5px solid red'});
				}
				if (fm_key.toLowerCase()===fm_name_param.toLowerCase()&&parseInt(fm_ts)==parseInt(fm_ts_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.html()+'</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.setMonth(curdate.getMonth()); // Month should be set first
					sd_date_param.setDate(curdate.getDate());
				} else {
					temp_date = new Date(getUrlParam("date").replace('_', ' ')+' 2000');
					sd_date_param.setMonth(temp_date.getMonth()); // Month should be set first
					sd_date_param.setDate(temp_date.getDate());
				}
				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 FM on OTD
				fm_ts_str = fm_ts.toString();
				fm_ts_year = fm_ts_str.charAt(0) + '' + fm_ts_str.charAt(1) + '' + fm_ts_str.charAt(2) + '' + fm_ts_str.charAt(3);
				fm_ts_month = fm_ts_str.charAt(4) + '' + fm_ts_str.charAt(5);
				fm_ts_date = fm_ts_str.charAt(6) + '' + fm_ts_str.charAt(7);
				sd_date_param_mplus = sd_date_param.getMonth() + 1;
				if (parseInt(fm_ts_date)==sd_date_param.getDate()&&parseInt(fm_ts_month)==sd_date_param_mplus) {
					var fm_on_check = 1;
					for (var m=0;m<fm_on.length;m++) {
						if (fm_key_full==fm_on[m]) {
							fm_on_check = 0;
						}
					}
					fm_on.push(fm_key_full);
					if (fm_on_check==1) {
						var fm_name_linked_rep = fm_name_linked.replace('<br>',' ');
						fm_name_linked_rep = fm_name_linked_rep.replace('<br/>',' ');
						fm_on_show.push({"fm_on_link":fm_name_linked_rep,"fm_on_year":fm_ts_year});
					}
				}
				if(fm_on.length==0) {
					$('#fm_on_div').hide();
				} else {
					$('#fm_on_div').show();
					$('#fmon-otd').html('');
					fm_on_show.sort(function(a,b){return parseInt(a.fm_on_year)-parseInt(b.fm_on_year)});
					for (h in fm_on_show) {
						$('#fmon-otd').append('<li>'+fm_on_show[h].fm_on_link+' ('+fm_on_show[h].fm_on_year+')</li>');
					}
				}
				$('#FM_on').html('FM on '+getMonthName(sd_date_param.getMonth())+' '+sd_date_param.getDate());
				
				//Showing FS Year Statistics
				if (fs_check_year!=check_sd_date.getFullYear()) {
					if (!parseInt(check_sd_date.getFullYear())) {
						errors.push('SD Date Error:<br><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();
				
				// Checking SD Date order
				
				if (parseInt(sd_ts)&&parseInt(prevsdts)) {
					if (parseInt(sd_ts)<parseInt(prevsdts)) {
						sd_date.css({'border':'5px solid blue'});
						errors.push('SD Date Order Error:<br><small>`<i>'+sd_date.text()+'</i>` is coming after `<i>'+prev_sd_date+'</i>`</small>');
					}
				}
				prevsdts = sd_ts;
				prev_sd_date = sd_date.text();
				
			//---------
			} else {
				$(this).prepend('<th><center>No.</center></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);
	
	// Showing OTD Day Count
	
	temp_string = '<tr><th>Month</th>';
	for (i=1;i<=31;i++) {
		temp_string += '<th>'+i+'</th>'; 
	}
	temp_string += '</tr>';
	for (i=0;i<12;i++) {
		temp_string += '<tr><th>'+getMonthNameSmall(i)+'</th>';
		for (j=0;j<31;j++) {
			var otd_day_disabled = 0;
			if (i==3||i==5||i==8||i==10) {
				if (j>29) {
					otd_day_disabled = 1;
				}
			} else if (i==1) {
				if (j>28) {
					otd_day_disabled = 1;
				}
			}
			if (otd_day_disabled===0) {
				temp_string += "<td><center><a style='color:inherit' href='/wiki/User:Yasir72.multan/On_This_Day?date="+getMonthName(i)+"_"+(j+1)+"'>"+otd_day_count[i][j]+"</a></center></td>"; 
			} else {
				temp_string += '<td style="background:#eee"></td>'; 
			}
		}
		temp_string += '</tr>';
	}
	$('#otd_day_table').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><a href="/wiki/User:Yasir72.multan/FS/Archives/'+year+'" style="color:inherit">'+year+'</a></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];
}

function getTS(str) {
  var date = new Date(str);
  if (!parseInt(date.getDate())) {
    return "NaN";
  } else {
    var day = date.getDate();
    var month = (date.getMonth()+1) * 100;
    if (str.length<=6) { // If only year is given
    	day = 0;
    	month = 0;
    }
    var year = date.getFullYear() * 10000;
    return year + month + day;
  }
}

function richColor(n) {
	var rich = ['#ffa07a', '#dcc7df', '#98fb98', '#b4cae3', '#ff69b4', '#50c878', '#40e0d0', '#dda0dd', '#ff9900', '#eef003', '#db7093', '#00b3ff'];
	return rich[n];
}
function lightColor(n) {
	var light = ['#ffdacc', '#ede3ef', '#cdfecd', '#d9e4f1', '#ffb5da', '#a8e4bc', '#afeeee', '#efc0ef', '#ffdead', '#f9fab3', '#edb7c9', '#b7e1f3'];
	return light[n];
}

setInterval(clock, 1000);
$('.clock').show();
function clock() {
	var temp_d = new Date();
	var d = new Date(temp_d.getTime()+temp_d.getTimezoneOffset()*60000);
	var sec = d.getSeconds();
	var sec_deg = sec/60*360;
	var min = d.getMinutes();
	var min_deg = (((min*60)+sec)/(60*60))*360;
	var hour = d.getHours()%12;
	var hour_deg = ((hour*60*60)+(min*60)+sec)/(12*60*60)*360;
	$('.seconds-needle').css({
		"transform" : "rotate("+sec_deg+"Deg)"
	});
	$('.minutes-needle').css({
		"transform" : "rotate("+min_deg+"Deg)"
	});
	$('.hours-needle').css({
		"transform" : "rotate("+hour_deg+"Deg)"
	});
}
 /* ----------------- 
 POTD Creator
  ----------------- */
$('.show-potd-canvas').html('<canvas id="potd-canvas" width="0" height="0">Your browser does not support the HTML5 canvas tag.</canvas>');
var pdate = new Date();
var form_string = '';
form_string += '<br>'
form_string += '<br>'
form_string += '<input type="hidden" id="potd-image-id">'
form_string += '<input type="hidden" id="potd-caption">'
form_string += '<select id="potd-date">';
for (var p=1;p<=31;p++) {
	var selected = '';
	if (p==pdate.getDate()) {
		selected = 'selected';
	}
	form_string += '<option '+selected+'>'+p+'</option>';
}
form_string += '</select>';
form_string += '<select id="potd-month">';
for (var p=0;p<12;p++) {
	var selected = '';
	if (p==pdate.getMonth()) {
		selected = 'selected';
	}
	form_string += '<option value="'+(p+1)+'" '+selected+'>'+getMonthName(p)+'</option>';
}
form_string += '</select>';
form_string += '<select id="potd-year">';
form_string += '<option>'+pdate.getFullYear()+'</option>';
form_string += '<option>'+(pdate.getFullYear()-1)+'</option>';
form_string += '</select>';
form_string += '<br>';
form_string += '<br>';
$('.show-potd-canvas').append(form_string);



var count = 0;
$('.potd-create-table').each(function(){
	count++;
	var image = $(this).children('tbody').children('tr:nth-child(1)').children('td');
	var caption = $(this).children('tbody').children('tr:nth-child(2)').children('td').text();
	var id ='scream_'+count;
	image.html('<img id="'+id+'" style="width:400px" src="'+image.text()+'" alt="'+caption+'">');
	$(this).children('tbody').children('tr:nth-child(3)').children('td').click(function(){
		$('#potd-image-id').val(id);
		var potd_date = parseInt($('#potd-date').val());
		var potd_month = parseInt($('#potd-month').val());
		var potd_year = parseInt($('#potd-year').val());
		createImage(id, 600, richColor(potd_month-1), potd_date, potd_month, potd_year, caption);
	});
});

function createImage(image_id, width, color, date, month, year, caption) {
	var d = new Date(year+'-'+month+'-'+date);
	var potd_date = d.getDate();
	var potd_month = getMonthName(d.getMonth());
	var potd_year = d.getFullYear();
	var canvas = document.getElementById("potd-canvas");
    var ctx = canvas.getContext("2d");
    var img = document.getElementById(image_id);
	var image_width = width;
	var image_height = (img.height/img.width)*image_width;
	canvas.width = image_width;
	
	var y_height = 0;
	var title_height = Math.floor(image_width*0.075);
	var date_height = Math.floor(image_width*0.075);
	var caption_padding = (image_width/60);
	var caption_height = 0;
	var caption_height = caption_padding;
	
	var lines = caption.split('\n');
	for (var i in lines) {
		caption_height = caption_height + (caption_padding/(lines.length)) + (canvas.width/40);
	}
	
	var canvas_height = title_height + image_height + caption_height + date_height;
	canvas.height = canvas_height;
	
	ctx.fillStyle = color;
	ctx.fillRect(0,0,canvas.width,title_height);
	ctx.fillStyle = '#000';
	ctx.font = (canvas.width/20)+"px Calibri";
	ctx.fillStyle = "#000";
	ctx.textAlign = "center";
	var uptext_y = (canvas.width/20) +((canvas.width/20)/10);
	ctx.fillText("Title", canvas.width/2, uptext_y);
	y_height = title_height;
	
	ctx.drawImage(img, 0, y_height, image_width, image_height);
	y_height = y_height + image_height;
	
	ctx.fillStyle = '#fff';
	ctx.fillRect(0,y_height,canvas.width,caption_height);
	ctx.fillStyle = "#000";
	for (var i=1;i<=lines.length;i++) {
		var capline_height = y_height+((image_width/25)*i)+(i*(canvas.width/100));
		if (i>1) {
			capline_height = capline_height + (caption_padding/2);
		}
		ctx.fillText(lines[i-1], canvas.width/2, capline_height);
	}
	y_height = y_height + caption_height;
	
	ctx.fillStyle = color;
	ctx.fillRect(0,y_height,canvas.width,date_height);
	ctx.fillStyle = '#000';
	var downtext_y = canvas.height - (canvas.width/20) + ((canvas.width/20)/2);
	ctx.fillText(potd_date+' '+potd_month+' '+potd_year, canvas.width/2, downtext_y); 
	 
	$(window).scrollTop(0);
}