	/**
	 * Acutal Fuction that does all the work. Returns an array with all the info.
	 * My Assumption is that most of the browsers will have arial set as their default san-serif font.
	 */
	var Detector = function(){
		var h = document.getElementsByTagName("BODY")[0];
		var d = document.createElement("DIV");
		var s = document.createElement("SPAN");

		d.appendChild(s);
		d.style.fontFamily = "sans-serif";		//font for the parent element DIV.
		s.style.fontFamily = "sans-serif";		//arial font used as a comparator.
		s.style.fontSize   = "72px";			//we test using 72px font size, we may use any size. I guess larger the better.
		s.innerHTML        = "mmmmmmmmmml";		//we use m or w because these two characters take up the maximum width. And we use a L so that the same matching fonts can get separated
		h.appendChild(d);
		var defaultWidth   = s.offsetWidth;		//now we have the defaultWidth
		var defaultHeight  = s.offsetHeight;	//and the defaultHeight, we compare other fonts with these.
		h.removeChild(d);

		/* test
		 * params:
		 * font - name of the font you wish to detect
		 * return: 
		 * f[0] - Input font name.
		 * f[1] - Computed width.
		 * f[2] - Computed height.
		 * f[3] - Detected? (true/false).
		 */
		function test(font) {
			h.appendChild(d);
			var f = [];
			f[0] = s.style.fontFamily = font;	// Name of the font
			f[1] = s.offsetWidth;				// Width
			f[2] = s.offsetHeight;				// Height
			h.removeChild(d);

			font = font.toLowerCase();
			if (font == "arial" || font == "sans-serif") {
				f[3] = true;	// to set arial and sans-serif true
			} else {
				f[3] = (f[1] != defaultWidth || f[2] != defaultHeight);	// Detected?
			}
			return f;
		}
		this.test = test;
	}

	
	var fonts = [];
	/**
	 * other stuff
	 */
	function fntinit() {
		fonts.push("cursive");
		fonts.push("monospace");
		fonts.push("serif");
		fonts.push("sans-serif");
		fonts.push("fantasy");
		fonts.push("default");

		fonts.push("Arial");
		fonts.push("Arial Black");
		fonts.push("Arial Narrow");
		fonts.push("Arial Rounded MT Bold");
		fonts.push("Bookman Old Style");
		fonts.push("Bradley Hand ITC");
		fonts.push("Century");
		fonts.push("Century Gothic");
		fonts.push("Comic Sans MS");
		fonts.push("Courier");
		fonts.push("Courier New");
		fonts.push("Georgia");
		fonts.push("Gentium");
		fonts.push("Impact");
		fonts.push("King");
		fonts.push("Lucida Console");
		fonts.push("Lalit");
		fonts.push("Modena");
		fonts.push("Monotype Corsiva");
		fonts.push("Papyrus");
		fonts.push("Tahoma");	
		fonts.push("TeX");
		fonts.push("Times");
		fonts.push("Times New Roman");
		fonts.push("Trebuchet MS");
		fonts.push("Verdana");
		fonts.push("Verona");

		d = new Detector();
		// compute height and width for all fonts
		for (i=0; i<fonts.length; i++) {
			fonts.push(d.test(fonts.shift()));
		}
		
		//sortResults();
		//listResults();
	}



	function listResults() {
		var table = document.getElementById('table');
		for (i=0; i<fonts.length; i++) {
			row = table.insertRow(-1);
			col = row.insertCell(-1);
			col.appendChild(document.createTextNode(fonts[i][0]))
			col.style.fontFamily = fonts[i][0];
			col = row.insertCell(-1).appendChild(document.createTextNode(fonts[i][1]));
			col = row.insertCell(-1).appendChild(document.createTextNode(fonts[i][2]));
			col = row.insertCell(-1);
			fonts[i][3] ? col.className = "true" : col.className = "false";
			col.appendChild(document.createTextNode(fonts[i][3]));
			
		}
	}

	function sortResults() {
		for (i=0; i<fonts.length-1; i++) {
			for (j=i; j<fonts.length; j++) {
				if(fonts[i][1] < fonts[j][1]) {
					t = fonts[i];
					fonts[i] = fonts[j];
					fonts[j] = t;
				}
			}
		}
	}


