var patchList = [
	"Ab",1,"Accurate Bookmark",
	"Af",1,"AFD Disable",
	"Ar","http://www.tapworld.net/content/view/419/47/","Auto Reboot (TAP)",
	"Au",0,"No AutoStart",
	"B2",1,"Timeshift Extend (2 hours)",
	"B4",1,"Timeshift Extend (4 hours)",
	"Bb",1,"Bookmark Blue",
	"Bf",1,"Bios Fix",
	"Bm",1,"Bookmark",
	"Bq",1,"Bios Queue Fix",
	"Br",1,"Bookmark Red",
	"By",1,"Bookmark Yellow",
	"C", 1,"Cable Ready",
	"C0",1,"No CYR",
	"Cb",1,"Callbacks",
	"Ce",1,"Current Event",
	"Cf",1,"Cut Fix",
	"Ck",1,"Clock Fix",
	"Cp",0,"Click Push",
	"Ct",1,"Cut Points",
	"Cw",1,"Chase Pause Works",
	"Cy",1,"Not CYR",
	"D", 1,"HDD Detection",
	"De",1,"Desc Ext",
	"Ds",1,"Deselect AV on boot",
	"E", 1,"EPG Mem Patch",
	"E0",1,"EPG Mem 0.5",
	"E1",1,"EPG Mem 1.5",
	"E2",1,"EPG Mem 2.25",
	"Ec",1,"EIT CRC Fix",
	"Ed",0,"EIT Disable",
	"Ee",1,"EIT Check End",
	"Ef",1,"EIT Dup Fix",
	"Eg",1,"EPG Grid",
	"Em",1,"EPG Move",
	"Ep",0,"EPG Play",
	"Er",0,"EIT Run Stat",
	"Es",1,"EIT Section Cache",
	"Ev",1,"EIT Valid Mem",
	"Ex",0,"Except 64",
	"Ez",1,"EPG Size",
	"F", 1,"TAP Disk Fix",
	"Fl",0,"Flen Fix",
	"Fm","http://www.toppy.org.uk/~bellissimo/toppyfontmanager.html","Font Manager (TAP)",
	"Fp",0,"FP ISR Fix",
	"Fs",1,"File Saver",
	"Gm",1,"GetMsg",
	"Gx",1,"Ext Cmd Enable (TAP)",
	"H", 1,"HDD Patch",
	"He",1,"Header Event",
	"Hr",1,"12 Hour FP",
	"Hs",0,"Half Scan",
	"I", 1,"PBSiS",
	"Kt",1,"Keep Timeshift",
	"M", 1,"Dream Free",
	"Mh",1,"MHEG State",
	"Mk",1,"Masterpiece Keys",
	"N", 1,"Disable Master Pin",
	"Nf",1,"NIT fix",
	"Nr",0,"No Idle Reenter",
	"Ot",1,"OTA Disable",
	"P", 1,"Power Restore",
	"Pc",1,"PiP Channel Fix",
	"Pd",0,"Power Off Deselect",
	"Pe",1,"Plug EIT",
	"Pf",0,"Present following",
	"Po",1,"Power Off",
	"Ps",1,"Play No Stutter",
	"R", 1,"Rec Roundel",
	"R0",1,"No Roundels",
	"R2",1,"Quick Roundels x2",
	"R3",1,"Quick Roundels x3",
	"R5",1,"Quick Roundels x5",
	"Ra",1,"Rec Audio PID",
	"Re",1,"Rem Ext",
	"Rh",1,"Recording Header Fixer",
	"Rm",0,"Remote Map (5810)",
	"Rp",1,"Rec PiP Fix",
	"Rs",1,"Recording Saver",
	"Rt",1,"Repeat Timer",
	"Ry",1,"Rem Codes To TF5810",
	"S", 1,"Startup Accelerator",
	"Sc",1,"Start Channel",
	"Sd",1,"SDT Fix",
	"Sf",1,"Standby Fix (5810)",
	"Sl",1,"Series Link",
	"Sr",1,"Speedy Rec",
	"St",1,"StopTs fix",
	"Sx",0,"Special fixes (5810)",
	"Sy",1,"SysID 456",
	"T", 1,"Timer Patch V4b",
	"T2",1,"Timer Patch T2b",
	"Ta",0,"Timer API",
	"Td",1,"Timer Data",
	"Te",1,"TAP Curr Ev",
	"Tf",1,"Timer Filename",
	"Tp",1,"Time Path",
	"Tq",0,"TAP Quit",
	"Ts",1,"Timer Setting",
	"Tt",0,"TAP Timers",
	"U", 1,"USB Accelerator",
	"Ua",0,"USB All Files",
	"Uc",0,"USB Read Callback",
	"Us",1,"USB Serial",
	"Uu",1,"USB Upload",
	"Ux",0,"USB Super Turbo",
	"Uy",0,"USB Super Turbo B",
	"Vb",1,"Volume Boost",
	"Vc",1,"Volume Cinch",
	"Vd",1,"Volume Disable",
	"Vr",1,"Version Number",
	"Vt",0,"Version string tweak",
	"Vy",1,"Video YUV",
	"We",0,"Wake Early",
	"Wf",1,"Wind Faster",
	"Ws",1,"Widescreen Scaling",
	"Ww",1,"WWWW (TAP)",
	"X", 1,"EPG Short Desc",
	"Xl",1,"aXeL",
	"Xp",1,"Play No CYR",
	"Xw",1,"Watch No CYR",
	"Z", 1,"Disable 0 Aspect Switching"
];

function writePatches(patches) {
	var total = 0;
	if (patches.length > 0) {
		var re = /(\d{2}).?(\d{2})/;
		var arr = patches.match(re);
		if (arr != null && arr.length > 2)
			document.write("<p>Firmware version: "+arr[1]+"."+arr[2]+"</p>");

		document.write('<table>');
		document.write('<tr><th style="width:80px">Patch ID</th><th style="width:250px">Patch Name</th></tr>');
		re = /([A-Z][a-z0-9]*)/g;
		var arr = patches.match(re);
		var unrecognised = "";
		for (var i = 0; i < patchList.length; i+=3) {
			for (var j = 0; j < arr.length; ++j) {
				if (patchList[i] == arr[j]) {
					writePatch(i);
					arr[j] = "";
					++total;
					break;
				}
			}
		}
		for (var i = 0; i < arr.length; ++i) {
			if (arr[i].length > 0) {
				document.write('<tr><td>' + arr[i] + '</td><td>Unrecognised</td></tr>');
			}
		}
	} else {
		document.write('<table>');
		document.write('<tr><th style="width:80px">Patch ID</th><th style="width:250px">Patch Name</th></tr>');
		for (var i = 0; i < patchList.length; i+=3) {
			writePatch(i);
		}
		total = patchList.length/3;
	}
	document.write('<tr><td>Total</td><td>' + total + '</td></tr>');
	document.write('</table>');
}

function writePatch(i) {
	document.write('<tr><td>' + patchList[i] + '</td><td>');
	switch (patchList[i+1])
	{
		case 0:
			writePatchName(patchList[i+2], 'http://www.toppy.org.uk/~r2-d2/indev.html#' + patchList[i]);
			break;
		case 1:
			writePatchName(patchList[i+2], 'http://www.toppy.org.uk/~r2-d2/patches.html#' + patchList[i]);
			break;
		default:
			writePatchName(patchList[i+2], patchList[i+1]);
			break;
	}
	document.write('</td></tr>');
}

function writePatchName(name, url) {
	if (url != null)
		document.write('<a href="' + url + '">' + name + '</a>');
	else
		document.write(name);
}

