// iPhone Crossword Puzzle (C) 2008 MindComet, Inc.
// cubicOut and effect used for curl fade (C) 2005 Panic, Inc.

var xmlhttp;
var ctx;
var p = [];
var selected = [];
var matrix = [];
var lastClicked = -1;
var click = 0;
var node = null;
var curlanim = { time:0, begin:0, change:0.0, duration:0.0, timer:null };


var i1g = new Image(); i1g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHTGCAaddYAAA7';
var i2g = new Image(); i2g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHDBBpictXAAA7';
var i3g = new Image(); i3g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHDBBpeYpdAAA7';
var i4g = new Image(); i4g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHjHGoAW1cAAA7';
var i5g = new Image(); i5g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIGDG6hqIkFADs=';
var i6g = new Image(); i6g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHTGCYgH1YAAA7';
var i7g = new Image(); i7g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHDB4JmtZbAAA7';
var i8g = new Image(); i8g.src = 'data:image/gif;base64,R0lGODlhBAAFAIAAAAWIzH9/fyH5BAEAAAAALAAAAAAEAAUAAAIHBBKnmH1ZAAA7';
var i9g = new Image(); i9g.src = 'data:image/gif;base64,R0lGODlhBAAFAIABAH9/fwWIzCH5BAEAAAEALAAAAAAEAAUAAAIHTACnmNZZAAA7';
var i0g = new Image(); i0g.src = 'data:image/gif;base64,R0lGODlhBAAFAIAAAAWIzH9/fyH5BAEAAAAALAAAAAAEAAUAAAIGBBKnyZsFADs=';

var iab = new Image(); iab.src = 'data:image/gif;base64,R0lGODlhEQARALMAAJm20xFVlyJhn0R6rmaSvKrC2u7z%2BFWGtczb6TNtpt3n8HeexIiqy7vO4QBJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAARB8MlJq70462oY2RIiOA6IBGSpAQEwkKvDNIcjNM21pHxwWAQbo9BIyC4MR8AweQEsDVKu6VBYCoInxQPqer9gSgQAOw%3D%3D';
var ibb = new Image(); ibb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAGaSvKrC2kR6riJhn93n8O7z%2BDNtpszb6Zm203eexFWGtRFVl4iqy7vO4QBJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAARP8MlJq70460mab9mhLE5ZAhiwAEwTGA6CDW2gOstxIWZfMpbBQtD6MEgFSsMBsgSYSgdDQJQ0GANHcrI0CbI4AKFSgJkMiYCmM96433BNBAA7';
var icb = new Image(); icb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAKrC2u7z%2BCJhn0R6rt3n8Mzb6WaSvDNtpneexJm201WGtRFVl4iqywBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARB0MlJq704a0rMGlvANCSjFQJpEFqyNAqrAc0CbE6wLAXujAiLSHCgADmMhYARoAQOjYFUsDDcMAAGA9Dzeb%2FgcAQAOw%3D%3D';
var idb = new Image(); idb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAFWGtarC2kR6rhFVl93n8Jm208zb6SJhn2aSvDNtpoiqy7vO4e7z%2BABJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARM0MlJq704631RWUAjHsByNUMDKGwimhPjIkwVNEqlXgxOLY2AhSBI1CaKxlFiQKiWkqKDEUCkEjBdQiBqILIVIAoRgA4VBTNnzW5PIgA7';
var ieb = new Image(); ieb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAJm202aSvFWGte7z%2BBFVl6rC2rvO4d3n8HeexCJhnzNtpszb6UR6roiqywBJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAARC8MlJq704a1kEY802EI7yHRrgBNukrAbQzMN1ODjOCM1yNQ4CoLYROAASQ6OQIQUQCRwik8MlkJnGJ8Bseb%2FgcCUCADs%3D';
var ifb = new Image(); ifb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAIiqy%2B7z%2BBFVl0R6rlWGtczb6XeexGaSvN3n8DNtppm206rC2rvO4QBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARB0MlJq7046xkAGASzAU3ZHJsgLIyoKc0itUyADQ1uNoW17APAondBNFYbSaBhSEoMDdcmIGg4HYwG4epIyLhgZwQAOw%3D%3D';
var igb = new Image(); igb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAMzb6SJhn2aSvFWGtarC2u7z%2BER6rrvO4TNtpt3n8BFVl4iqywBJkP%2F%2F%2FwAAAAAAACH5BAAAAAAALAAAAAARABEAAARAsMlJq704a5rWSluzMKRSaIJCJIyCKoA0xNgCh02iFp5HWwtEbqAo1RQHiYDEIFwOpECAafhVFlPD4IPrer%2FfCAA7';
var ihb = new Image(); ihb.src = 'data:image/gif;base64,R0lGODlhEQARALMAALvO4d3n8BFVl8zb6YiqyzNtpqrC2lWGtZm203eexO7z%2BCJhn0R6rgBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARF0MlJq704axs0StPRdFjRTI2gYEGzSEBzAMOFpAwjNDxvVAQcg0co%2FiqimqNR0AwlgwbDeXLEphlG0yrVDI5W0mZMLlsiADs%3D';
var iib = new Image(); iib.src = 'data:image/gif;base64,R0lGODlhEQARALMAAABJkJm20%2B7z%2BLvO4RFVl0R6rszb6WaSvCJhn3eexDNtplWGtf%2F%2F%2FwAAAAAAAAAAACH5BAAAAAAALAAAAAARABEAAAQlkMlJq704660F4lMAgJKykAYQkAdBCkBCigbrkkVBMsOw%2F0BOBAA7';
var ijb = new Image(); ijb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAO7z%2BN3n8Iiqy7vO4UR6rszb6Zm20yJhn6rC2hFVl2aSvHeexDNtplWGtQBJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAAQ08MlJq704ayvCnoNDfFI4koKzkI%2FiGCzhAKzDaID3FK8mHABAI0HLFA6OJIIUGBRY0CgrAgA7';
var ikb = new Image(); ikb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAMzb6TNtphFVl1WGtarC2rvO4e7z%2BER6rt3n8GaSvHeexCJhn4iqywBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARG0MlJq724GpDtOB2FNEo4JQ0hFQyHCYJjDE2KEc3ACM1RZKiaL7SoBVwZQCNQWzIMGEbDgGAwBarLIGCaCBhdxwhp%2BoXDEQA7';
var ilb = new Image(); ilb.src = 'data:image/gif;base64,R0lGODlhEQARALMAALvO4e7z%2BER6rlWGtWaSvKrC2iJhn93n8DNtpszb6Zm203eexIiqywBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAAQ20MlJq704axfApozwTcQwSgJzOk1xAk1wMshqEAWjM8pxwY2gMJiwDIKGlG5hshwAspV0OooAADs%3D';
var imb = new Image(); imb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAKrC2rvO4e7z%2BJm208zb6d3n8IiqyyJhn3eexDNtplWGtUR6rmaSvBFVlwBJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAARK8MlJq7046wfEnoHDVMOhWIvjTEXarFT4ElzTDGK1LIwD9A0CjsbyyRwJD2NRQTQki4Zh0gBUGiNL4FkxeCzOz4RxEE%2B%2B5rQaEwEAOw%3D%3D';
var inb = new Image(); inb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAGaSvHeexO7z%2BMzb6bvO4Zm20zNtpkR6rqrC2hFVl4iqyyJhn93n8ABJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARI0MlJq70466wYVgQVNMOlNMvEoBeTNKQ0KheANrSQJIK1JoTGwVFoAGpGxyK1SHgqqwaC2Jhdgo2esmHAuGiSQUC7KZvP6EsEADs%3D';
var iob = new Image(); iob.src = 'data:image/gif;base64,R0lGODlhEQARALMAAO7z%2BER6rlWGtZm206rC2iJhnzNtprvO4WaSvN3n8Mzb6RFVl4iqywBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARE0MlJq704awnYAJsDGEuxDBvTKEDREBmwIJJqZMMrJU2TCb5JL7O4CYOXRmBCaAiIhUmgccioBIwpSpNdCKqhsHg8iQAAOw%3D%3D';
var ipb = new Image(); ipb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAIiqyyJhn7vO4TNtplWGtZm20xFVl3eexO7z%2BGaSvMzb6UR6rgBJkP%2F%2F%2FwAAAAAAACH5BAAAAAAALAAAAAARABEAAAQ6sMlJq70464YUKglRaIRhHgcDZAOTII3CEBnDDEtgC5hg6zcepsAQbhqAwHGyOCwlgdVzIH1ar1hrBAA7';
var iqb = new Image(); iqb.src = 'data:image/gif;base64,R0lGODlhEQARALMAALvO4Zm2093n8FWGtXeexCJhnxFVl8zb6UR6roiqy%2B7z%2BKrC2jNtpmaSvABJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAARF8MlJq704a5lIAtvTOKSDKBngNNKwZq4gLWRmGJPqHNdhToHaRUV4CAIFRwEjeAVJBd4FsSKQGIMFRtEwOBiJkHhMLlciADs%3D';
var irb = new Image(); irb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAIiqy6rC2pm2093n8ER6rmaSvLvO4SJhn8zb6RFVl1WGte7z%2BABJkP%2F%2F%2FwAAAAAAACH5BAAAAAAALAAAAAARABEAAARPsMlJq7046zbQEkrCKMs1HEyqjtagKgJioIq1KExgFMdBACULL5BKADMJQYAgYhwQF0Ei2EAAmAOLonAhQCkLBmAzIRrIEsAUXQ2w33BJBAA7';
var isb = new Image(); isb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAGaSvBFVl1WGtd3n8Mzb6UR6riJhn6rC2neexO7z%2BLvO4YiqywBJkP%2F%2F%2FwAAAAAAACH5BAAAAAAALAAAAAARABEAAARAsMlJq70466mAEdsgMEywaETAIMeWqMomKWRQAMugjWQPoooFgHSSNQiMAmZwWywQBkbrsuiRALpMcBEzer%2FgCAA7';
var itb = new Image(); itb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAIiqy93n8ER6rpm207vO4VWGte7z%2BGaSvDNtpszb6RFVlyJhnwBJkP%2F%2F%2FwAAAAAAACH5BAAAAAAALAAAAAARABEAAAQ5sMlJq704t5AwIQNQCEypBBVQrsgBEIaVDASixNokFDnFDD1JgIEKDhZByYGXFACSDSc0gINar5oIADs%3D';
var iub = new Image(); iub.src = 'data:image/gif;base64,R0lGODlhEQARALMAAMzb6YiqyxFVl7vO4SJhn6rC2jNtppm203eexN3n8FWGtUR6ru7z%2BABJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARC0MlJq704awfAZIG2NIV0NEMmNKGjNEnWoA7TGJndSAGbDTcJQcD4NRCOUwsDIDEEhKKGYBAIPJtCg4DdeL%2FgcCYCADs%3D';
var ivb = new Image(); ivb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAER6roiqyxFVl%2B7z%2BDNtpqrC2rvO4SJhn3eexN3n8Jm208zb6QBJkP%2F%2F%2FwAAAAAAACH5BAAAAAAALAAAAAARABEAAAQ5sMlJq70462vApseBAUAwKYxyJQLDSMPhYQPBGE3ALJpusIhNgREgCAabAaNV%2BDRsQWdh5qxar9gIADs%3D';
var iwb = new Image(); iwb.src = 'data:image/gif;base64,R0lGODlhEQARALMAABFVlzNtpqrC2rvO4Yiqy93n8O7z%2BCJhn1WGtczb6UR6rneexJm202aSvABJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAARO8MlJq7046z1D0AEyHY6ADU4zMc5CFUTxsKaUOJ%2FEAM5hNICKw2GYDYeEg4iiKKFSvCGj0nAgeKrqsEghHFWPwhBMeZKNgwujxmm735cIADs%3D';
var ixb = new Image(); ixb.src = 'data:image/gif;base64,R0lGODlhEQARALMAABFVl93n8Iiqy0R6rrvO4WaSvHeexFWGtSJhnzNtppm20%2B7z%2BMzb6QBJkP%2F%2F%2FwAAACH5BAAAAAAALAAAAAARABEAAARD0MlJq704632TmgwiZEmzOAyQnJjSCAsCMNuADM23xY3BOa5GgZVxJRANBKHYWKUajcAl0JhJGCWaZXHQTqS%2FsPgXAQA7';
var iyb = new Image(); iyb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAO7z%2BBFVlwBJkDNtpt3n8ER6riJhn5m201WGtczb6bvO4Yiqy%2F%2F%2F%2FwAAAAAAAAAAACH5BAAAAAAALAAAAAARABEAAAQ3kMlJq704a6YWBdpSTIcRDlISeNkiAERggBkhLEOQbAwiDLTNIsCbLBBFSYFVLBySDEIQSq1mIgA7';
var izb = new Image(); izb.src = 'data:image/gif;base64,R0lGODlhEQARALMAAMzb6RFVl2aSvO7z%2BFWGtarC2oiqy5m207vO4d3n8CJhnzNtpneexER6rgBJkP%2F%2F%2FyH5BAAAAAAALAAAAAARABEAAAQ%2B8MlJq704611B%2B59RDBjhnKgTJBgASAPjNNxgChygOAZXBIEC5zBjbQYBh8Ag%2BAgQmANhkVJxJIjXdcu9RgAAOw%3D%3D';

addEventListener('load', function() { setTimeout(hideAddressBar, 0); }, false);
function hideAddressBar() { window.scrollTo(0, 1); startGame(); }

function startGame() {
	var url = (location.toString().indexOf('file://') != -1) ? 'http://picayune.uclick.com/comics/usaon/data/usaon070814-data.xml' : 'xml/070814.xml';
	xmlhttp = new XMLHttpRequest();
	if (xmlhttp != null) {
		xmlhttp.onreadystatechange = stateChange;
		xmlhttp.open('GET', url, true);
		xmlhttp.send(null);
	} else { alert('Your browser does not support XMLHTTP.'); }
}

function stateChange() {
	if (xmlhttp.readyState == 4) {
		if (xmlhttp.status == 200) {
			if (xmlhttp.responseXML.getElementsByTagName('Width')[0].getAttribute('v') != 15 || xmlhttp.responseXML.getElementsByTagName('Height')[0].getAttribute('v') != 15) {
				alert('Can not display today\'s puzzle. Size is not 15x15.');
			} else {
				ctx = document.getElementById('crossword').getContext('2d');
				ctx.fillStyle = '#ffffff';
				buildBoard();
			}
		} else {
			alert('Problem retrieving XML data.');
		}
	}
}

function buildBoard() {

	var across = xmlhttp.responseXML.getElementsByTagName('across')[0].childNodes;
	var down = xmlhttp.responseXML.getElementsByTagName('down')[0].childNodes;

	document.getElementById('title').innerText = xmlhttp.responseXML.getElementsByTagName('Title')[0].getAttribute('v');
	document.getElementById('author').innerText = xmlhttp.responseXML.getElementsByTagName('Author')[0].getAttribute('v');
	document.getElementById('highlight').onclick = function() { sqClick(document.getElementById(lastClicked)); };
	document.getElementById('answer').onblur = answer;
	document.getElementById('answer').onfocus = function() { this.style.opacity = 1; };

	setTimeout(function() {
		var curl = new Image();
		curl.src = 'curl.png';
		curl.onload = function() {
			var img = document.createElement('img');
			img.id = 'curl';
			img.src = curl.src;
			document.getElementById('body').appendChild(img);
			img.onclick = function() { resetBoard(across, down); };
		};
	}, 30000);

	p = xmlhttp.responseXML.getElementsByTagName('AllAnswer')[0].getAttribute('v').split('');
	for (var i = 0; i < 225; i++) {
		matrix[i] = 0;
		if (p[i] != '-') {
			ctx.fillRect((i-Math.floor(i/15)*15)*18, Math.floor(i/15)*18, 17, 17);
			matrix[i] = 0;
		} else {
			matrix[i] = 1;
		}
		var newSquare = document.createElement('div');
		document.getElementById('squares').appendChild(newSquare);
		newSquare.className = 'square';
		newSquare.id = i;
		newSquare.name = i;
		if (i < 15) newSquare.style.borderTop = 'solid 1px transparent';
		if (i%15 == 0) newSquare.style.borderLeft = 'solid 1px transparent';
		newSquare.onclick = function() { sqClick(this); };
	}
	for (var i = 0; i < 2; i++) {
		var el = (i == 0) ? across : down;
		for (var j = 1; j < el.length; j += 2) {
			var n = el[j].getAttribute('n')-1;
			var cn = el[j].getAttribute('cn');
			if (Math.floor(cn/10) > 0) ctx.drawImage(eval('i'+Math.floor(cn/10)+'g'), (n-Math.floor(n/15)*15)*18, Math.floor(n/15)*18+1);			
			if (Math.floor(cn/10) > 0) ctx.drawImage(eval('i'+(cn-Math.floor(cn/10)*10)+'g'), (n-Math.floor(n/15)*15)*18+4, Math.floor(n/15)*18+1);
			else ctx.drawImage(eval('i'+(cn-Math.floor(cn/10)*10)+'g'), (n-Math.floor(n/15)*15)*18, Math.floor(n/15)*18+1);
			for (var k = 0; k < el[j].getAttribute('a').length; k++) {
				if (i == 0) document.getElementById(n+k).name += '-'+el[j].nodeName;
				else document.getElementById(n+k*15).name += '-'+el[j].nodeName+'-';
			}
		}
	}
}

function resetBoard(a, d) {
	curlFade(1, 0, 25);
	for (var i = 0; i < 225; i++) {
		if (p[i] != '-') {
			ctx.fillRect((i-Math.floor(i/15)*15)*18, Math.floor(i/15)*18, 17, 17);
			matrix[i] = 0;
		} else {
			matrix[i] = 1;
		}
	}
	for (var i = 0; i < 2; i++) {
		var el = (i == 0) ? a : d;
		for (var j = 1; j < el.length; j += 2) {
			var n = el[j].getAttribute('n')-1;
			var cn = el[j].getAttribute('cn');
			if (Math.floor(cn/10) > 0) ctx.drawImage(eval('i'+Math.floor(cn/10)+'g'), (n-Math.floor(n/15)*15)*18, Math.floor(n/15)*18+1);			
			if (Math.floor(cn/10) > 0) ctx.drawImage(eval('i'+(cn-Math.floor(cn/10)*10)+'g'), (n-Math.floor(n/15)*15)*18+4, Math.floor(n/15)*18+1);
			else ctx.drawImage(eval('i'+(cn-Math.floor(cn/10)*10)+'g'), (n-Math.floor(n/15)*15)*18, Math.floor(n/15)*18+1);
		}
	}
}

function sqClick(xxx) {
	selected = [];
	var me = (xxx != null) ? xxx : this;
	if (me.name.length > 2) {
		if (lastClicked == null || lastClicked < 0 || me.id != lastClicked) { click = 1; lastClicked = me.id; }
		else { click++; }
		if (click == 1 || click == 2) highlight(me);
		else clearSelection();
	}
}

function highlight(m) {
	var t = m.name.split('-');
	document.getElementById('squares').style.opacity = 1;
	for (var i = 0; i < 225; i++) {
		var el = document.getElementById(i);
		if (el.name.length > 2 && el.name.indexOf(t[click]+'-') != -1) {
			el.style.background = (el.id == m.id) ? 'rgb(5, 136, 204)' : 'none';
			el.style.opacity = (el.id == m.id) ? .5 : 1;
			el.style.borderRightColor = 'rgb(5, 136, 204)';
			el.style.borderBottomColor = 'rgb(5, 136, 204)';
			selected.push(el);
			updateClue(m);
		} else {
			el.style.background = 'rgb(0, 0, 0)';
			el.style.opacity = .5;
			el.style.borderColor = 'transparent';
		}
	}
	document.getElementById('highlight').style.visibility = 'visible';
	document.getElementById('highlight').style.left = ((selected[0].id%15)*18+18)+'px';
	document.getElementById('highlight').style.top = (Math.floor(selected[0].id/15)*18+74)+'px';
	document.getElementById('highlight').style.width = (click == 1) ? (selected.length*18-1)+'px' : '17px';
	document.getElementById('highlight').style.height = (click == 1) ? '17px' : (selected.length*18-1)+'px';
}

function answer() {
	if (this.value != '') {
		var letters = this.value.split('');
		var correct = xmlhttp.responseXML.getElementsByTagName(node)[0].getAttribute('a').split('');
		var numCorrect = 0;
		for (var i = 0; i < selected.length; i++) {
			if (letters[i]) {
				if (letters[i].toUpperCase() == correct[i]) {
					eval('ctx.drawImage(i'+letters[i].toLowerCase()+'b, '+((selected[i].id%15)*18)+', '+(Math.floor(selected[i].id/15)*18)+')');
					matrix[selected[i].id] = 1;
					numCorrect++;
				} else {
					matrix[selected[i].id] = 0;
				}
			}
		}		
		if (numCorrect == correct.length) {
			alert('Correct!');
			clearSelection();
		} else if (numCorrect == 0) {
			alert('Incorrect, try again.');
			document.getElementById('answer').value = '';
			document.getElementById('answer').focus();
		} else if (numCorrect != correct.length) {
			alert('Only some letters are correct.');
			clearSelection();
		}
		checkForWin();		
	}
}

function updateClue(sq) {
	node = sq.name.split('-')[click];
	var cn = xmlhttp.responseXML.getElementsByTagName(node)[0].getAttribute('cn');
	var clue = xmlhttp.responseXML.getElementsByTagName(node)[0].getAttribute('c');
	if (clue.charAt(clue.length-1) != '?') clue += '.';
	document.getElementById('info').style.visibility = 'visible';
	document.getElementById('number').innerText = cn;
	document.getElementById('direction').innerText = (click == 1) ? 'ACROSS' : 'DOWN';
	document.getElementById('clue').innerText = clue;
}

function clearSelection() {
	lastClicked = null;
	document.getElementById('squares').style.opacity = 0;
	document.getElementById('info').style.visibility = 'hidden';
	document.getElementById('highlight').style.visibility = 'hidden';
	document.getElementById('answer').style.opacity = 0;
	document.getElementById('answer').value = '';
}

function checkForWin() {
	var win = true;
	for (var i = 0; i < 225; i++) if (matrix[i] == 0) win = false;
	if (win) curlFade(0, 1, 50);
}

function cubicOut(t, b, c, d) { return c*((t = t/d-1)*t*t+1)+b; }

function curlFade(start, end, duration) {
	if (end == 1) document.getElementById('curl').style.visibility = 'visible';
	if (curlanim.timer != null) { clearInterval(curlanim.timer); curlanim.timer = null; }
	curlanim.time = 0;
	curlanim.begin = start;
	curlanim.change = end-start;
	curlanim.duration = duration;
	curlanim.timer = setInterval(function() { fadeAnimDo(end) }, 15);
}

function fadeAnimDo(e) {
	if (curlanim.time > curlanim.duration) {
		clearInterval(curlanim.timer);
		curlanim.timer = null;
		if (e == 0) document.getElementById('curl').style.visibility = 'hidden';
	} else {
		var alpha = cubicOut(curlanim.time, curlanim.begin, curlanim.change, curlanim.duration);
		document.getElementById('curl').style.opacity = alpha;
		curlanim.time++;
	}
}
