window.onload = initForm;

var chassisarray = new Array(
// chassis name   slot   #p/s  opt  type 1        type 2             type 3                  type 4                   type 5                      type 6                  type 7
"19 Slot Chassis", "19", "3", "6", "Empty", "0", "AC 60W",    "18", "AC 120W",        "36", "48 VDC 66W",      "20", "48 VDC 120W",        "36", "24 VDC 66W",     "20", "",                       "0",
"5 Slot Chassis",  "5",  "2", "6", "Empty", "0", "AC 33W",    "10", "AC 66W Hi-Flow", "20", "48 VDC 33W",      "10", "48 VDC 66W Hi-Flow", "20", "24 VDC 33W",     "10", "",                       "0",
"2 Slot Chassis",  "2",  "1", "7", "Empty", "0", "AC 8.5W",  "2.6", "AC 16.5W",        "5", "AC 16.5W Hi-Flow", "5", "24-48 VDC 6.6W",      "2", "24-48 VDC 16.5W", "5", "24-48 VDC 16.5W Hi-Flow","5",
"1 Slot Chassis",  "1",  "1", "4", "Empty", "0", "AC 3.3W",  "1.0", "AC 5W",         "1.5", "DC 8.3W",        "2.5", "",                    "0", "",                "0", "",                       "0",
"1 Slot Redundant","1",  "2", "5", "Empty", "0", "US AC/DC",   "3", "IEC AC/DC",       "3", "Terminal",         "3", "PoE",                 "3", "",                "0", "",                       "0"
);

var modulearray = new Array(
"None selected",          "0.0", 
"NMM (8000-X)",           "0.32",
"NMM2 (8000N-0)",         "0.9", 
"10FL/T (830X-X)",        "0.5", 
"10T/2 (8340-0)",         "1.0", 
"100Fx/Tx (836X-X)",      "0.7", 
"10/100 (838X-X)",        "0.95",

"Tx/2Tx (8400-0)",        "0.7", 
"Tx/2Fx (842X-X)",        "1.1", 
"2Fx (844X-X)",           "0.9", 
"4Tx (8480-4)",           "0.9", 
"4Tx VT (8481-4)",        "0.7", 
"4GT (8482-4)",           "1.1",
"Gx (850X-X)",            "1.4",
"Gx AN (850XN-X)",        "0.7", 
"GX/T (852X-X)",          "1.4",
"GX/X (854X-X)",          "2.2", 
"GX/F (856X-X)",          "1.5", 
"XG (8599-X)",            "2.5",
"XG+ (8599N-X)",          "3.75",

"100FF (862X-X)",         "0.5", 
"1000FF (864X-X)",        "0.5",  
"OC3FF (866X-X)",         "0.5", 
"OC12FF (868X-X)",        "0.5", 
"xFF (8699-X)",           "0.5",
"T1/E1 (870X-X)",         "0.7", 
"T3/E3 (874X-X)",         "0.7",   
"RS232 (876X-X)",         "0.5", 
"RS422/RS485 (878X-X)",   "0.5", 
"10/100VT (880X-X)",      "0.7",
"X21 (884X-X)",           "0.6",

"CWDM/X (886X-X)",        "0.03",
"CWDM/AD (887X-X)",       "0.03",
"STM-1 (8899S-0)",        "0.5",
"10/100M (890X-X)",       "1.0",
"10/100M2 (890XN-X)",     "0.9", 
"GX/TM (892X-X)",         "1.5", 
"GX/TM2 (892XN-X)",       "1.1",
"2FXM (8959-X)",          "1.2",
"2FXM2 (8959N-0)",        "1.2", 
"2GXM (8999-0)",          "2.1", 
"2GXM2 (8999N-0)",        "1.1",
"GM3 FF/UTP (892xP-X)",   "1.2", 
"GM3 SFP/UTP (8939P-X)",  "1.2",
"GM3 2xSFP/UTP (8975P-0)","1.6",
"GM3 2xSFP (8999P-0)",    "1.2",
"TM3 FF/UTP (242x-X)",    "1.2",
"TM3 SFP/UTP (2439-x)",   "1.2",
"4xT1/E1 Mux (8485-4)",   "0.6",
"4xT1/E1 Mux (8486-4)",   "1.0"

);

var PS = new Array(5);
var maxtypes = 5;
var maxitems = 18;
var maxmoduletypes = (modulearray.length)/2;
var maxslots = 19;
var maxpwrsupplies = 3;
var ChassisSlots = 0;

function initForm() {
	document.getElementById("chassis").onchange = populateSlots;
	for (var i=0; i<maxslots; i++) {
		var currSlot = "mod" + (i+1);
		var currRow  = currSlot + "d";
		var currButton = currSlot + "b";
		var currDown   = currSlot + "bb";
		document.getElementById(currSlot).onchange = getPwr;
		document.getElementById(currRow).style.visibility = "hidden";
		document.getElementById(currSlot).style.visibility = "hidden";
		document.getElementById(currButton).onclick = copySlot;
		document.getElementById(currDown).onclick = copyDown;
	}
	for (i=0; i<maxpwrsupplies; i++) {
		var pwrsupply = "pwr" + (i+1);
		var pwrsupplyval = pwrsupply + "p";
		var pwrsupplycont = "pwrline" + (i+1);
		document.getElementById(pwrsupply).onchange = getPwrSupply;
		document.getElementById(pwrsupply).disabled = true;			
		document.getElementById(pwrsupplycont).style.visibility = "hidden";
		document.getElementById( pwrsupplyval ).value = 0;
		document.getElementById(pwrsupply).options.length = 0;
	}
	
	document.getElementById("chassis").selectedIndex = 0;
	ChassisSlots = 0;
	TotalPwr();
}

function populateSlots() {
	var ChassisTypeSelected = this.options[this.selectedIndex].value;
	if (ChassisTypeSelected != 0) {
		ChassisSlots = chassisarray[ (ChassisTypeSelected-1)*maxitems+1  ];
		var ArrayStart = (ChassisTypeSelected-1)*maxitems+5;
	} else {
		ChassisSlots = 0;
		var ArrayStart = 0;
	}
	for (var i=0; i<maxslots; i++) {
		var currSlot = "mod" + (i+1);
		var currPwr  = currSlot + "p";
		var currRow  = currSlot + "d";
		document.getElementById(currSlot).options.length = 0;
		
		if (i < ChassisSlots) {
			for (var j=0; j<maxmoduletypes; j++) {
				document.getElementById(currSlot).options[j] = new Option( modulearray[j*2] );
			}
			document.getElementById(currSlot).style.visibility = "visible";
			document.getElementById(currPwr).value = "0.0";
			document.getElementById(currRow).style.visibility = "visible";
			
		} else {
			document.getElementById(currSlot).style.visibility = "hidden";
			document.getElementById(currPwr).value = " ";
			document.getElementById(currRow).style.visibility = "hidden";				
		}
	}
	document.getElementById("ptotal").innerHTML = "Total power draw 0";

	if (ChassisTypeSelected != 0) {
		var NumPwrSupplies = chassisarray[ (ChassisTypeSelected-1)*maxitems+2  ];
	} else {
		var NumPwrSupplies = 0;
	}
		
	for (var i=0; i<maxpwrsupplies; i++) {
		var pwrsupply = "pwr" + (i+1);
		var pwrsupplyval = pwrsupply + "p";
		var pwrsupplycont = "pwrline" + (i+1);
		
		if (i < NumPwrSupplies) {
			document.getElementById(pwrsupply).disabled = false;
			document.getElementById(pwrsupplycont).style.visibility = "visible";
			document.getElementById( pwrsupplyval ).value = 0;
			document.getElementById(pwrsupply).options.length = 0;
			var PwrSupplyTypes = chassisarray[ (ChassisTypeSelected-1)*maxitems+ 3  ];
			for (var j=0; j< PwrSupplyTypes; j++) {
					document.getElementById(pwrsupply).options[j] = new Option( chassisarray[ (ChassisTypeSelected-1)*maxitems+ 4 + j*2  ] );
			}
		} else {
			document.getElementById(pwrsupply).disabled = true;			
			document.getElementById(pwrsupplycont).style.visibility = "hidden";
			document.getElementById(pwrsupply).options.length = 0;
			document.getElementById( pwrsupplyval ).value = 0;
		}
	}
	getPwrSupply();
}

function getPwrSupply() {
	var chassistype = document.getElementById("chassis").selectedIndex;
	var NumPwrSupplies = chassisarray[ (chassistype-1)*maxitems+2  ];

	for (var i=0; i<NumPwrSupplies; i++) {
		var pwrsupply = "pwr" + (i+1);
		var pwrsupplyval = pwrsupply + "p";
		var pwrvidx = document.getElementById(pwrsupply).selectedIndex;
		var currentpwrsupply = chassisarray[ (chassistype-1)*maxitems + 5 + (pwrvidx *2) ]
//		document.getElementById( pwrsupplyval ).value = currentpwrsupply;
		PS[ (i+1) ] = parseFloat(currentpwrsupply);	
		document.getElementById( pwrsupplyval ).value = PS[ (i+1) ] ;
	}
	TotalPwr();
}

function getPwr() {
	document.getElementById(this.id+"p").value = modulearray[this.selectedIndex*2+1];
	TotalPwr();
}

function copySlot() {
	var currSlot = "mod" + (parseInt(this.id.substr(3,2)));
	var nextSlot = "mod" + (parseInt(this.id.substr(3,2))+1);

	document.getElementById(nextSlot).selectedIndex = document.getElementById(currSlot).selectedIndex;
	document.getElementById(nextSlot+"p").value = modulearray[document.getElementById(currSlot).selectedIndex*2+1];
	TotalPwr();
}

function copyDown() {
	var currSlotNum = (parseInt(this.id.substr(3,2)));
	var currSlot = "mod" + (parseInt(this.id.substr(3,2)));
	var currIndex = document.getElementById(currSlot).selectedIndex;
//	document.getElementById("a1").innerHTML = currIndex;

	for (var i = currSlotNum; i < ChassisSlots; i++) {
		var nextSlot = "mod" + (i+1);	
		document.getElementById(nextSlot).selectedIndex = currIndex;
		document.getElementById(nextSlot+"p").value = modulearray[currIndex*2+1];
	}
	
	TotalPwr();
}

function TotalPwr() {
	var Ptotal = 0.0;
	for (var i=0; i < ChassisSlots; i++) {
		var currPwr = "mod" + (i+1) + "p";
		Ptotal += parseFloat(document.getElementById(currPwr).value);
	}
	Ptotal = Math.round(Ptotal*10)/10;
	document.getElementById("ptotal").innerHTML = Ptotal + "  amps @ 3.3VDC";

	var chassistype = document.getElementById("chassis").selectedIndex;
	var pwrsupplytotal = 0;
	var pwrsupplymin = 100;
	var currentpwrsupply = 0;
	var NumPwrSupplies = chassisarray[ (chassistype-1)*maxitems+2  ];
	var ActualNumPwrSupplies = 0;
	
	for (i=0; i< NumPwrSupplies; i++) {
		var pwrsupply = "pwr" + (i+1);
		var pwrsupplyval = pwrsupply + "p";
		var pwrvidx = document.getElementById(pwrsupply).selectedIndex;
		currentpwrsupply = parseFloat( chassisarray[ (chassistype-1)*maxitems + 5 + (pwrvidx *2) ] );
		pwrsupplytotal += currentpwrsupply;

		
		if (currentpwrsupply > 0) {
			ActualNumPwrSupplies++;
			if (currentpwrsupply < pwrsupplymin) pwrsupplymin = currentpwrsupply;
	
			}
	}

	document.getElementById("pselect").innerHTML = pwrsupplytotal + " amps @ 3.3VDC";
	
	if (Ptotal > pwrsupplytotal) {
		document.getElementById("status").innerHTML = "<p class=red>Chassis not fully powered</p>";
	} else if (pwrsupplytotal == 0) {
		document.getElementById("status").innerHTML = "<p class=red>No power supply selected</p>";
	} else {
		document.getElementById("status").innerHTML = "<p class=green>Chassis fully powered</p>";
	}

// default
	document.getElementById("redstat").innerHTML = "<p class=red>Select chassis for redundancy status</p>";
	document.getElementById("recommend").innerHTML = "<p class=blue>Select a chassis</p>";
	
// 1-Module and 2-Module chassis
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 1) && (NumPwrSupplies == 1) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Redundancy not available on this chassis</p>";
		document.getElementById("recommend").innerHTML = "<p>Consider a redundant powered chassis</p>";	
	} 
	if ( (Ptotal > pwrsupplytotal) && (ActualNumPwrSupplies == 1) && (NumPwrSupplies == 1) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Redundancy not available on this chassis</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select another chassis or power option</p>";	
	} 
	if (                               (ActualNumPwrSupplies == 0) && (NumPwrSupplies == 1) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Redundancy not available on this chassis</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a power option</p>";	
	} 

// 5-Module and 1-Module redundant chassis
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 1) && (NumPwrSupplies == 2) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a second power supply</p>";	
	}
	if ( (Ptotal >  pwrsupplytotal) && (ActualNumPwrSupplies == 2) && (NumPwrSupplies == 2) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a different power option</p>";	
	}	
	if ( (Ptotal >  pwrsupplytotal) && (ActualNumPwrSupplies == 1) && (NumPwrSupplies == 2) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a second power supply</p>";	
	}	
	if (                               (ActualNumPwrSupplies == 0) && (NumPwrSupplies == 2) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a power option</p>";	
	}	
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 2) && (NumPwrSupplies == 2) && (Ptotal >= pwrsupplymin) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Load sharing, but not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a different power option</p>";	
	}
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 2) && (NumPwrSupplies == 2) && (Ptotal < pwrsupplymin) ){
		document.getElementById("redstat").innerHTML = "<p class=green>1+1 Redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>No changes needed</p>";	
	}
	
// 19-Module chassis
	if (                               (ActualNumPwrSupplies == 0) && (NumPwrSupplies == 3) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a power supply</p>";	
	}	


	if ( (Ptotal >  pwrsupplytotal) && (ActualNumPwrSupplies == 1) && (NumPwrSupplies == 3) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a different power option or a second power supply</p>";	
	}
	if ( (Ptotal >  pwrsupplytotal) && (ActualNumPwrSupplies == 2) && (NumPwrSupplies == 3) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a different power option or a third power supply</p>";	
	}	
	
	
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 1) && (NumPwrSupplies == 3) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a second power supply for redundancy</p>";	
	}
	
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 2) && (NumPwrSupplies == 3) && (Ptotal > pwrsupplymin) ){
		document.getElementById("redstat").innerHTML = "<p class=blue>Load sharing, but not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a different power option or a third power supply</p>";	
	}
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 2) && (NumPwrSupplies == 3) && (Ptotal <= pwrsupplymin) ){
		document.getElementById("redstat").innerHTML = "<p class=green>1+1 Power Redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>No changes needed</p>";	
	}
	

	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 3) && (NumPwrSupplies == 3) && 
	     ( (Ptotal > (PS[1] + PS[2]) ) || (Ptotal > (PS[1] + PS[3]) ) || (Ptotal > (PS[2] + PS[3]) )   )    ) {
		document.getElementById("redstat").innerHTML = "<p class=blue>Load sharing, but not redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>Select a different power option</p>";	
	}
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 3) && (NumPwrSupplies == 3) && 
	     ( (Ptotal <= (PS[1] + PS[2])) && (Ptotal <= (PS[1] + PS[3])) && (Ptotal <= (PS[2] + PS[3])) )   ) {	
		document.getElementById("redstat").innerHTML = "<p class=green>2+1 Power Redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>No changes needed</p>";	
	}
	if ( (Ptotal <= pwrsupplytotal) && (ActualNumPwrSupplies == 3) && (NumPwrSupplies == 3) && (Ptotal <= pwrsupplymin) ){
		document.getElementById("redstat").innerHTML = "<p class=green>1+1 Power Redundant</p>";
		document.getElementById("recommend").innerHTML = "<p class=blue>No changes needed";	
	}
}

