// update 1.3

// 492 = PowerBook 160c [eric]
// M001WP =  [Janez]
// 3AM = PowerBook 150 Taiwan
// C2A = ColourClassic
// XB01 = SE Superdrive (steve)
// M0001ED = Macintosh 512Ke
// M0435 = Classic  (steve)

var buildPlaces = new Array();
buildPlaces["F"]  = "Fremont, California, USA";
buildPlaces["FC"] = "Fountain, Colorado, USA";
buildPlaces["XA"] = "Elk Grove, Sacramento, USA";
buildPlaces["XB"] = "Elk Grove, Sacramento, USA";
buildPlaces["G"]  = "USA";
buildPlaces["MW"] = "USA";
buildPlaces["YM"] = "China";
buildPlaces["VM"] = "China";
buildPlaces["CK"] = "Cork, Ireland";
buildPlaces["C"]  = "Cork, Ireland";
buildPlaces["SQ"] = "Ireland";
buildPlaces["SG"] = "Singapore";
buildPlaces["E"]  = "Singapore";
buildPlaces["EE"] = "Taiwan";
buildPlaces["QT"] = "Taiwan";
buildPlaces["UV"] = "Taiwan";
buildPlaces["LT"] = "Taiwan";
buildPlaces["MB"] = "Malaysia";
buildPlaces["PK"] = "Mexico";
buildPlaces["SI"] = "Mexico";

var buildModels = new Array();

// ---- in 198x produziert ) HARDDRIVES:

buildModels["M0135"] =   "Apple HardDisk 20";
buildModels["M0130"] =   "Apple 400K External Drive";
buildModels["M0131"] =   "Apple 800K External Drive";

// Apple II in 198x produziert ):


buildModels["A2S4100"] = "Apple //c";

// ---- in 198x produziert ):

buildModels["M001"] =    "original Macintosh 1984 (128k)";
buildModels["M0001"] =   "original Macintosh 1984 (128k)";
buildModels["M0001P"] =  "Macintosh 128k/512k";
buildModels["M001WP"] =  "Macintosh 128k to 512k (upgrade)";
buildModels["M001W"] =   "Macintosh 512k";
buildModels["M0001W"] =  "Macintosh 512k";
buildModels["M0001ED"] =  "Macintosh 512Ke";
buildModels["M001E"] =   "Macintosh 512Ke";
buildModels["M0001E"] =  "Macintosh 512Ke";
buildModels["M0001D"] =  "Macintosh 512K ED (Educational version)";
buildModels["M0001WP"] = "Macintosh 512K (European Macintosh ED)";

// ---- ab 198x - auch im Jahre 1990 produziert - bis 1998 ):

buildModels["M001A"] =  "Macintosh Plus";
buildModels["M001P"] =  "Macintosh Plus";
buildModels["M001D"] =  "Macintosh Plus";
buildModels["M0001A"] = "Macintosh Plus";
buildModels["M5880"] =  "Macintosh Plus";
buildModels["M5880X"] =  "Macintosh Plus";
buildModels["M0001AP"] ="European Macintosh Plus";
buildModels["M001AP"] = "European Macintosh Plus";
buildModels["M5010"] =  "Macintosh SE(shipped with 2 floppy drives)";
buildModels["M5011"] =  "Macintosh SE FDHD";
buildModels["B01"] =    "Macintosh SE FDHD";
buildModels["B02"] =    "Macintosh SE FDHD";
buildModels["B03"] =    "Macintosh SE FDHD";
buildModels["C70"] =    "Macintosh SE with hard disk";
buildModels["XB01"] =   "Macintosh SE Superdrive (M5011) **";
buildModels["M5115"] =  "Macintosh SE with hard disk";
buildModels["M6052"] =  "Macintosh SE 1.44M drive ppgrade (drive & ROMs)";
buildModels["M0713"] =  "Macintosh SE (+ SE/30 logic board upgrade)";

buildModels["M5000"] = 		"Macintosh II with 800k floppy";
buildModels["M5400"] = 		"Macintosh II (MC68020 CPU)";
buildModels["M6051"] = 		"Macintosh II with 1,4 MB floppy";
buildModels["M6051"] = 		"Macintosh II with 1,4 MB floppy";
buildModels["M5404"] = 		"Macintosh II";
buildModels["M5840"] =		"Macintosh IIx";
buildModels["M5840"] = 		"Macintosh IIx";
buildModels["M5650"] = 		"Macintosh IIcx";

buildModels["M5119"] = 		"Macintosh SE/30 **";
buildModels["KA1"] =   		"Macintosh SE/30 **";
buildModels["KAT"] =   		"Macintosh SE/30 **";

buildModels["M5780"] = 		"Macintosh IIci **";
buildModels["M5525"] = 		"Macintosh IIfx **";
buildModels["C40"] = 		"Macintosh IIfx **";
buildModels["M1350-IIVX"] = "Macintosh IIvx **";
buildModels["3BF"] = 		"Macintosh IIvx **";
buildModels["3B5"] = 		"Macintosh IIvx **";
buildModels["M1350"] = 		"Macintosh IIvx or vi **";  // ungenaue Modelbezeichnung
buildModels["3B1"] = 		"Macintosh IIvi **";
buildModels["M0360"] = 		"Macintosh IIsi **";

buildModels["D39"] =   "Macintosh Performa 200 **";
buildModels["M4150"] = "Macintosh Performa 200 **";
buildModels["M1420"] = "Macintosh Classic **";
buildModels["M0420"] = "Macintosh Classic **";
buildModels["M0421"] = "Macintosh Classic **";
buildModels["MO421LL/A"] = "Macintosh Classic **";
buildModels["M0422"] = "Macintosh Classic, Revision A **";
buildModels["M0435"] = "Macintosh Classic **";
buildModels["M0435LL/A"] = "Macintosh Classic **";
buildModels["D04"] =   "Macintosh Classic **";
buildModels["D10"] =   "Macintosh Classic **";
buildModels["D11"] =   "Macintosh Classic **";
buildModels["V23"] =   "Macintosh Classic **";
buildModels["M4150"] = "Mac Classic II **";
buildModels["M1542"] = "Mac Classic II **";
buildModels["M1542LL/A"] = "Mac Classic II **";
buildModels["D22"] =   "Mac Classic II **";
buildModels["D23"] =   "Mac Classic II **";
buildModels["D24"] =   "Mac Classic II **";
buildModels["M1600"] = "Macintosh Color Classic **";
buildModels["C2D"] =   "Macintosh Colour Classic **";
buildModels["C2A"] =   "Macintosh Colour Classic **";
buildModels["M1600"] = "Macintosh Color Classic II **";   

buildModels["M5120"] = "Macintosh Portable **";
buildModels["M59"] =   "Macintosh Portable";
buildModels["M5126"] = "Macintosh Portable-BackLit **";
buildModels["M61"] =   "Macintosh Portable-BackLit **";

buildModels["M0350"] = 		"Macintosh LC **";
buildModels["L02"] = 		"Macintosh LC **";
buildModels["L13"] = 		"Macintosh LC **";

buildModels["F04"] =  		"Macintosh LC II **";
buildModels["CF07"] =  		"Macintosh LC II **";
buildModels["M1700"] = 		"Mac LC II (Performa) **";  // ungenaue Modelbezeichnung
buildModels["M1700"] = 		"Mac LC II (Performa) **";  // ungenaue Modelbezeichnung
buildModels["0A1"] = 		"Mac Performa (re-released LC II) **";  // ungenaue Modelbezeichnung

buildModels["M1254"] = 		"LC III, Performa 450 **";  // ungenaue Modelbezeichnung
buildModels["VA1"] = 		"Macintosh LC III **";
buildModels["VA2"] = 		"Macintosh LC III **";
buildModels["4RJ"] = 		"Macintosh LC 475 **";
buildModels["4AH"] = 		"Macintosh LC 475 **";
buildModels["12L"] = 		"Macintosh LC 475 **";

buildModels["B47"] = 		"20th Anniversary Macintosh **";
buildModels["M3459"] = 		"20th Anniversary Macintosh **";

buildModels["M1476"] = 		"Macintosh LC (Performa) **";
buildModels["1PT"] = 		"Macintosh LC (Performa) **"; // ungenaue Modelbezeichnung
buildModels["L0Y"] = 		"Performa 450 **";
buildModels["10Y"] = 		"Performa 450 **";
buildModels["M1640"] = 		"Performa 520 **";
buildModels["M1640-520"] = 	"Performa 520 **";
buildModels["M1640-550"] = 	"Performa 550 or 560 **";
buildModels["M1640-575"] = 	"Performa 575, 577 or 578 **";
buildModels["M3872"] =     	"Performa 580/ 33 MHz **";
buildModels["M1350-P600"]= 	"Performa 600 **";
buildModels["35C"] =       	"Performa 630 **";

buildModels["M1444"] = 		"Macintosh Centris 610 **";
buildModels["M1250"] = 		"Macintosh Centris 650 **";
buildModels["CC5"] = 		"Macintosh Centris 650 **";
buildModels["CC2"] = 		"Macintosh Centris 650 **";
buildModels["M9040"] = 		"Mac Centris (Quadra 660AV) **";

buildModels["M1476"] = 		"Macintosh Quadra 605 **";
buildModels["1XS"] = 		"Macintosh Quadra 610 **";
buildModels["M2118"] = 		"Macintosh Quadra 650 **";
buildModels["2D9"] = 		"Macintosh Quadra 650 **";
buildModels["CC2"] = 		"Macintosh Quadra 650 **";
buildModels["1M1"] = 		"Macintosh Quadra 650 **";
buildModels["1XU"] = 		"Macintosh Quadra 650 **";
buildModels["1LZ"] = 		"Macintosh Quadra 650 **";
buildModels["20C"] = 		"Macintosh Quadra 660 AV **";
buildModels["M5920"] = 		"Macintosh Quadra 700 **";
buildModels["C82"] = 		"Macintosh Quadra 700 **";
buildModels["CC7"] = 		"Macintosh Quadra 800 **";
buildModels["M4200"] = 		"Macintosh Quadra 900 **";
buildModels["M4300"] = 		"Macintosh Quadra 950 **";

buildModels["M1506"] = 		"PowerBook 100 **";
buildModels["599"] = 		"PowerBook 100 **";
buildModels["M5416"] = 		"PowerBook 140 **";
buildModels["M5409-145"] = 	"PowerBook 145 **";
buildModels["M5409-145B"] = "PowerBook 145B, 25MHz **";
buildModels["M2740"] = 		"PowerBook 150 **";
buildModels["3AM"] = 		"PowerBook 150 **";
buildModels["M4550"] = 		"PowerBook 160 **";
buildModels["492"] = 		"PowerBook 160c **";
buildModels["M5409-170"] = 	"PowerBook 170 **";
buildModels["M4440"] = 		"PowerBook 180 **";
buildModels["M7940"] = 		"PowerBook 180c, 33MHz, **";
buildModels["M7777"] = 		"PowerBook Duo **";
buildModels["M7777-210"] = 	"PowerBook Duo 210 **";
buildModels["M7777-230"] = 	"PowerBook Duo 230 **";
buildModels["M7777-250"] = 	"PowerBook Duo 250 **";
buildModels["M7777-270C"] = "PowerBook Duo 270c, **";
buildModels["M7777-280"] = 	"PowerBook Duo 280 **";
buildModels["M7777-280C"] = "PowerBook Duo 280c **";
buildModels["M7777-2300"] = "PowerBook Duo 2300c, **";
buildModels["M4880"] = 		"PowerBook 520, **";
buildModels["M2785"] = 		"PowerBook 5300, 100 MHz, **";

buildModels["M3076-630S"] = 	"Mac LC 630 (68LC040, 33MHz) **";
buildModels["M3076-6200S"] = 	"PowerMac/Performa 6200, 6300 **";
buildModels["M3406"] = 			"PowerMac 5200/75 (Performa 5200, 5215) **";
buildModels["4ZA"] = 			"PowerMac Performa 5200 **";
buildModels["M3406-5400"] = 	"PowerMac 5400/120 **";
buildModels["M1596"] = 			"PowerMac 6100 **";
buildModels["M1596-60"] = 		"PowerMac 6100/60 **";
buildModels["41Y"] = 			"PowerMac 6100/60 **";
buildModels["37R"] = 			"PowerMac 6100/60 **";
buildModels["1GX"] = 			"PowerMac 6100/60 **";
buildModels["M1596-66"] = 		"PowerMac 6100/66 **";
buildModels["M3548"] = 			"PowerMac 6500/225 **";
buildModels["9CL"] = 			"PowerMac 6500/225 **";
buildModels["M2391"] = 			"PowerMac 7100 **";
buildModels["M2391-66"] = 		"PowerMac 7100/66 **";
buildModels["M2391-80"] = 		"PowerMac 7100/80 **";
buildModels["44H"] = 			"PowerMac 7100/80 **";
buildModels["M3979"] = 			"PowerMac 7200/75 **";
buildModels["M1688"] = 			"PowerMac 8100/80 **";
buildModels["1H2"] = 			"PowerMac 8100/80 **";

buildModels["M3098"] = 			"Mac Workgroup Server 9150/120 **";
buildModels["M1640-580"] = 		"Macintosh TV **";
buildModels["G20"] = 			"Macintosh TV **";

function scan_mac_id()
{
	// ########## 
	var input = document.forms[0].input;
	var output = document.forms[0].output;
	
	// 0. Reinige input von Whitespaces
	var inputValue = input.value.toUpperCase().replace(/\s+/g, "");

	// 1. Ortserkennung ------------------ 
	// Position 2 checken
	if (Number(inputValue.charAt(1)) >= 0)	{
		// ist ne Nummer, einstellige Ortskennung
		var buildPlace = inputValue.substr(0, 1);
		var pos = 1;
	}
	else {
		// keine nummer, zweistellige Ortskennung
		// :BUG: Fd ist keine Ortskennung, Sonderbehandlung notwendig
		var buildPlace = inputValue.substr(0, 2);
		var pos = 2;
	}

	// 2. Herstellungsjahr --------------------- 
	var buildYear = Number(inputValue.charAt(pos++));
	
	// ein erster Check, wird bei 6. verfeinert
	if (buildYear != 0) {
		buildYear += 1980;
	}
	else {
		buildYear += 1990;
	}

	// 3. Herstellungswoche --------------------- 
	var buildWeek = Number(inputValue.substr(pos, 2));
	pos += 2;

	// 3.b Suffix für buildWeek ---------------------
	var buildWeekSuffix = "";
	switch (Number(buildWeek)) {
		case 1: buildWeekSuffix = "st"; break;
		case 2: buildWeekSuffix = "nd"; break;
		case 3: buildWeekSuffix = "rd"; break;
		default: buildWeekSuffix = "th"; break;
	}

	// 4. Herstellungsnummer in dieser Woche ----- 
	var codec = "0123456789ABCEDFGHJKLMNPQRSTUVWXYZ";
	var tmpBuildID = inputValue.substr(pos, 3);
	pos += 3;

	var	buildID = codec.indexOf(tmpBuildID.charAt(0)) * Math.pow(codec.length, 2)
		+ codec.indexOf(tmpBuildID.charAt(1)) * codec.length
		+ codec.indexOf(tmpBuildID.charAt(2));

	// 4.b Suffix für buildID ---------------------
	var buildIDSuffix = "";
	switch (Number(buildID)) {
		case 1: buildIDSuffix = "st"; break;
		case 2: buildIDSuffix = "nd"; break;
		case 3: buildIDSuffix = "rd"; break;
		default: buildIDSuffix = "th"; break;
	}

	// 5. Modellreihe ----------------------------
	var buildModel = inputValue.substr(pos, inputValue.length-pos);

	// 6. Alter und Anzeige für Macs nach 1990 korrigieren (markiert mit "**")
	var buildModelName = "";
	if (!buildModels[buildModel]) {
		buildModelName = "unknown Mac";
	}
	else if (buildModels[buildModel].indexOf(" **") > -1) {
		// it's marked as "built in 199x"
		buildYear += 10;
		buildModelName = buildModels[buildModel].substr(0, buildModels[buildModel].length-3);
	}
	else {
		// no change needed, good old 198x mac
		buildModelName = buildModels[buildModel];
	}
  
	// output liste
	output.value = "";
	output.value += "Manufactured in: " + buildPlace + " => " + buildPlaces[buildPlace] + "\n";
	output.value += "Year of production: " + buildYear + "\n";
	output.value += "Week of production: " + buildWeek + "\n";
	output.value += "Production number: " + tmpBuildID + " => "+ buildID + "\n";
	output.value += "Modell ID: " + buildModel + " => " + buildModelName + "\n\n";
	
    // output textversion
	output.value += "Your " + buildModelName + " was the " + buildID + buildIDSuffix + " Mac ";
	output.value += "manufactured during the " + buildWeek + buildWeekSuffix + " week of ";
	output.value += buildYear + " in " + buildPlaces[buildPlace] + ".\n";

	return false;
}
