// JavaScript 2007, KasH.

var data = {
	num_spelers: 0,
	tabellen: [],
	spelers: [],
	win: null,
	init: function() {
		var dit = this, tables = document.getElementsByTagName('table');
		for(var naam, table = null, teller = 0; teller < tables.length; teller++) {
			table = tables[teller];
			if(table.rows.length > 0) {
				if(/ranglijst/i.test(table.rows[0].cells[0].innerHTML)) {
					for(var loper = 1; loper < table.rows.length; loper++) {
						if(/\d+/.test(table.rows[loper].cells[0].innerHTML.stripHTML())) {
							naam = table.rows[loper].cells[1].innerHTML.stripHTML() + ' ' +
								table.rows[loper].cells[2].innerHTML.stripHTML();
							naam = naam.replace(/^\s+|\s+$/g, '');
							dit.spelers[dit.num_spelers++] = {
								naam: naam,
								zoek: naam.zoekVriendelijk(),
								partijen: 0, gewonnen: 0,
								remise: 0, oneven: 0, wit: 0,
								ScorePercentage: function() {
									var rv = 100 / (this.partijen / (this.gewonnen + (this.remise * 0.5)));
									return(isNaN(rv) || !isFinite(rv) ? 0 : Math.round(rv));
								},
								WitPercentage: function() {
									var rv = 100 / (this.partijen / this.wit);
									return(isNaN(rv) || !isFinite(rv) ? 0 : Math.round(rv));
								}
							};
						}
					}
				} else if(/[Uu]itslag(en)?/.test(table.rows[0].cells[0].innerHTML.stripHTML())) {
					// Opslaan voor verwerken later. Niet nu al doen, omdat de volgorde
					// van de tabellen zoals ze in de pagina staan niet gegarandeerd ook
					// de volgorde is waarin ik ze terugkrijg van getElementsByTagName.
					dit.tabellen[dit.tabellen.length] = table;
				}
			}
		}
		return(dit.num_spelers);
	},
	laatZien: function() {
		var headers = ['Naam', 'Partijen', 'Gewonnen', 'Remise', 'Oneven', 'Score', 'Wit'];
		var titel = /snel/.test(document.location.href) ? 'Snelschaken' : 'Interne';
		var dit = this, table, prop, teller, loper, res, wit, zwart, html = '';
		var Speler = function(naam) {
			for(var n = naam.zoekVriendelijk(), getal = 0; getal < dit.num_spelers; getal++) {
				if(dit.spelers[getal].zoek == n) {
					return(dit.spelers[getal]);
				}
			}
			return(null);
		};
		
		if(dit.num_spelers == 0 && dit.init() == 0) {
			alert('Kan de namen van de spelers niet ophalen. Controleer de ranglijst!');
			return;
		}
		
		if(typeof(Leden) != 'undefined' && Leden.value != '' && typeof(Cookie) != 'undefined') {
			Cookie.schrijf('wie', Leden.selectedIndex.toString(), 14);
		}
		
		for(teller = 0; teller < headers.length; teller++) {
			html += '<th>' + headers[teller] + '</th>';
		}
				
		// Verwerk de gegevens..;
		for(teller = 0; teller < dit.tabellen.length; teller++) {
			table = dit.tabellen[teller];
			for(loper = 2; loper < table.rows.length; loper++) {
				wit = Speler(table.rows[loper].cells[0].innerHTML.stripHTML());
				if(wit != null) {
					switch(table.rows[loper].cells.length) {
						case 2:
							if(/[Oo]neven/.test(table.rows[loper].cells[1].innerHTML.stripHTML())) {
								wit.oneven++;
							}
							break;
						case 3:
							zwart = Speler(table.rows[loper].cells[1].innerHTML.stripHTML());
							if(zwart != null) {
								res = table.rows[loper].cells[2].innerHTML.stripHTML().replace(/\s/g, '');
								zwart.partijen++;
								wit.partijen++;
								wit.wit++;
								switch(true) {
									case (res == '1-0'):
										wit.gewonnen++;
										break;
									case (res == '0-1'):
										zwart.gewonnen++;
										break;
									case (/([Rr]em(ise)|&frac12;\s*\-\s*&frac12;)?/.test(res)):
										zwart.remise++;
										wit.remise++;
										break;
								}							
							} else {
								alert('Onbekende zwartspeler: ' + table.rows[loper].cells[1].innerHTML.stripHTML());
								return;
							}
							break;
					}
				} else {
					alert('Onbekende witspeler: ' + table.rows[loper].cells[0].innerHTML.stripHTML());
					return;
				}
			}
		}
		
		// Sorteer de gegevens..;
		dit.spelers.sort(function(a, b) {
			if(a.gewonnen < b.gewonnen) {
				return(1);
			} else if(a.gewonnen > b.gewonnen) {
				return(-1);
			} else if(a.wit < b.wit) {
				return(1);
			} else if(a.wit > b.wit) {
				return(-1);
			} else if(a.partijen < b.partijen) {
				return(1);
			} else if(a.partijen > b.partijen) {
				return(-1);
			} else {
				return(0);
			}
		});
		
		// Genereer output..;
		html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n';
		html += '\n<!-- Inhoud automatisch gegenereerd op ' + new Date().toLocaleString() + ', KasH. -->\n';
		html += '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">\n\t<head>\n\t\t<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />\n';
		html += '\t\t<link rel="stylesheet" type="text/css" href="/stylesheet.css" />\n\t\t<style type="text/css">\n\t\t<!--/*--><![CDATA[/*><!--*/\n\t\t\t';
		html += 'h3 { color:#900000; text-align:center; padding:10px; }\n\t\t\tp { padding-top:10px; text-align:center; }\n\t\t\tspan.klein { font-size:smaller; }\n\t\t\ttr.actief td { color:#990000; }\n\t\t/*]]>*/-->\n\t\t</style>\n';
		html += '\t\t<title>Scorelijst ' + titel + '</title>\n\t</head>\n\t<body>\n\t\t<h3>Scorelijst ' + titel + ' na ' + dit.tabellen.length + ' ronden</h3>\n\t\t<table align="center" class="uitslag" style="width:auto">\n';
		html += '\t\t\t<tr><th>&nbsp;</th>';
		
		for(teller = 0; teller < headers.length; teller++) {
			html += '<th>' + headers[teller] + (/Score|Wit/.test(headers[teller]) ? ' <span class="klein">(%)</span>' : '') + '</th>';
		}
		
		html += '</tr>\n';
		for(teller = 0; teller < dit.num_spelers; teller++) {
			html += '\t\t\t<tr' + ((typeof(Leden) != 'undefined' && Leden.value != '' && (dit.spelers[teller].naam.toLowerCase().indexOf(Leden.value.toLowerCase()) == 0)) ? ' class="actief">' : '>');
			html += '<td>' + (teller + 1).toString() + '</td>';
			for(loper = 0; loper < headers.length; loper++) {
				html += '<td>' + (/Score|Wit/.test(headers[loper]) ? dit.spelers[teller][headers[loper] + 'Percentage']() : dit.spelers[teller][headers[loper].toLowerCase()]) + '</td>';
			}
			html += '</tr>\n';
		}
		
		html += '\t\t</table>\n\t\t<script type="text/javascript">\n\t\t<!--//--><![CDATA[//><!--\n\t\t\twindow.onload = function() {\n\t\t\t\tdocument.onkeydown = function(e) {\n';
		html += '\t\t\t\t\tif((e = window.event || e) != null) {\n\t\t\t\t\t\tswitch(e.keyCode ? e.keyCode : e.which ? e.which : 0) {\n';
		html += '\t\t\t\t\t\t\tcase 116: return(false);\n\t\t\t\t\t\t\tcase 27: self.close();\n\t\t\t\t\t\t\tdefault: return(true);\n';
		html += '\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t//--><!]]>\n\t\t</script>\n\t\t<p><a href="javascript:';
		if((dit.win = (dit.win != null && !dit.win.closed ? dit.win : window.open('', '', 'dependent=yes,scrollbars=yes,toolbar=no,location=no,menubar=no,directories=no,status=yes')))) {
			html += 'self.close();">Weg hiermee!</a></p>\n\t</body>\n</html>';
			dit.win.document.open();
			dit.win.document.write(html);
			dit.win.document.close();
			if(typeof(dit.win.resizeTo) != 'undefined') {
				dit.win.resizeTo(620, 600);
				if(typeof(dit.win.moveTo) != 'undefined') {
					dit.win.moveTo((screen.width - 620) / 2, ((screen.height - 600) / 2) * 0.75);
				}
			}
			dit.win.focus();
		} else {
			html += 'document.location.reload(true);">Weg hier!</a></p>\n\t</body>\n</html>';
			document.body.innerHTML = html;
		}
	}
};

String.prototype.stripHTML = function() {
	return(this.replace(/<[\!\/]?[^<>]>/g, '').replace(/&nbsp;/g, ' ').replace(/&amp;/g, '&'));
};

String.prototype.zoekVriendelijk = function() {
	return(this.toLowerCase().replace(/\s+(der?|van|v\/d)?/ig, ''));
};

window.onunload = function() {
	for(var teller = 0; teller < data.tabellen.length; teller++) {
		data.tabellen[teller] = null;
	}
	try { data.win.close(); } catch(e) {}
};

