<html>
	<head>
		<title>VolkoV's BGG Top Trumps Generator</title>
		<script>
			function getText(xmlDoc,selector,attr) {
				if(selector=="")
					return "";
				return xmlDoc.querySelector(selector).getAttribute(attr);
			}
			
			function getTextMinMax(xmlDoc,selectormin,selectormax,attr) {
				var min=xmlDoc.querySelector(selectormin).getAttribute(attr);
				var max=xmlDoc.querySelector(selectormax).getAttribute(attr);
				var res=min+"-"+max;
				if(min==max)
					res=min;
				return res;
			}

			function getPoll(xmlDoc,selector,sort,attr,altselector,altattr) {
				var show=999999;
				var max=0;
				var min=999999;
				var results=xmlDoc.querySelectorAll(selector);
				if(results.length==0)
					return getText(xmlDoc,altselector,altattr);
				results.forEach(function(item){
					var sorta=parseInt(item.getAttribute(sort));
					var showa=parseInt(item.getAttribute(attr));
					if(sorta>max) {
						max=sorta;
						show=showa;
					}
					if(showa<min)
						min=showa;
				});
				if(max==0)
					return getText(xmlDoc,altselector,altattr);
				return (1+show-min);
			}
		
			function loadCard() {
				var id=parseInt(document.getElementById("gameid").value);
				var xhr=new XMLHttpRequest();
				xhr.onreadystatechange=function () {
					if(xhr.readyState===4) {
						var parser=new DOMParser();
						var xmlDoc=parser.parseFromString(xhr.responseText,"text/xml");
						var game=xmlDoc.querySelector("item[type='boardgame'");
						if(game===null)
							return;
						var rating=(Math.round(parseFloat(getText(xmlDoc,"ratings>average","value"))*10)/10).toFixed(1);
						var weight=(Math.round(parseFloat(getText(xmlDoc,"ratings>averageweight","value"))*10)/10).toFixed(1);
						var card='<table>'
							+'<tr><td colspan="2" class="name">'
							+getText(xmlDoc,"name[type='primary']","value")
							+'</td></tr><tr><td class="thumb" colspan="2">'
							+'<img src="'+xmlDoc.querySelector("thumbnail").innerHTML+'">'
							+'</td></tr><tr><th>Published</th><td>'
							+getText(xmlDoc,"yearpublished","value")
							+'</td></tr><tr><th>Players</th><td>'
							+getTextMinMax(xmlDoc,"minplayers","maxplayers","value")
							+'</td></tr><tr><th>Playing Time</th><td>'
							+getTextMinMax(xmlDoc,"minplaytime","maxplaytime","value")
							+'</td></tr><tr><th>Age</th><td>'
							+getPoll(xmlDoc,"poll[name='suggested_playerage']>results>result","numvotes","value","minage","value")
							+'</td></tr><tr><th>Language</th><td>'
							+getPoll(xmlDoc,"poll[name='language_dependence']>results>result","numvotes","level","","")
							+'</td></tr><tr><th>Rating</th><td>'
							+rating
							+'</td></tr><tr><th>Weight</th><td>'
							+weight
							+'</td></tr>'
							+'</table>';
						var carde=document.createElement('div');
						carde.classList.add('card');
						carde.innerHTML=card;
						document.getElementById("cards").appendChild(carde);
					}
				}
				xhr.open('GET','https://api.geekdo.com/xmlapi2/thing?id='+id+'&stats=1');
				xhr.send();
			}
		</script>
		<style>
			#cards {
				width:700px;
			}
			div.card {
				border:1px solid gray;
				border-radius:20px;
				padding:10px;
				width:200px;
				height:300px;
				float:left;
				overflow:hidden;
			}
			table {
				width:100%;
				height:100%;
				table-layout:fixed;
				border-collapse:collapse;
			}
			td,th {
				white-space:nowrap;
				overflow:hidden;
				text-overflow:ellipsis;
				font-family:sans-serif;
				font-size:12px;
				border-bottom:1px solid gray;
				text-align:right;
				width:100px;
			}
			th {
				text-align:left;
				font-weight:normal;
			}
			td.name {
				text-align:center;
				font-weight:bold;
			}
			td.thumb {
				text-align:center;			
				width:200px;
				height:150px;
				padding:0px;
			}
			td.thumb img {
				max-width:100%;
				max-height:100%;
			}
		</style>
	</head>
	<body>
		<div>
			<input id="gameid" value="1">
			<input type="button" value="Create Card" onclick="loadCard()">
		</div>
		<div id="cards">
		</div>
	</body>
</html>