// Gate image overlays

dcp00000 = new Image(550, 200);	dcp00000.src = "images/dcp00000.gif"
dcp01000 = new Image(550, 200);	dcp01000.src = "images/dcp01000.gif"
dcp00100 = new Image(550, 200);	dcp00100.src = "images/dcp00100.gif"
dcp01100 = new Image(550, 200);	dcp01100.src = "images/dcp01100.gif"
dcp00010 = new Image(550, 200);	dcp00010.src = "images/dcp00010.gif"
dcp01010 = new Image(550, 200);	dcp01010.src = "images/dcp01010.gif"
dcp00110 = new Image(550, 200);	dcp00110.src = "images/dcp00110.gif"
dcp01110 = new Image(550, 200);	dcp01110.src = "images/dcp01110.gif"
dcp00001 = new Image(550, 200);	dcp00001.src = "images/dcp00001.gif"
dcp01001 = new Image(550, 200);	dcp01001.src = "images/dcp01001.gif"
dcp10000 = new Image(550, 200);	dcp10000.src = "images/dcp10000.gif"
dcp11000 = new Image(550, 200);	dcp11000.src = "images/dcp11000.gif"
dcp10100 = new Image(550, 200);	dcp10100.src = "images/dcp10100.gif"
dcp11100 = new Image(550, 200);	dcp11100.src = "images/dcp11100.gif"
dcp10010 = new Image(550, 200);	dcp10010.src = "images/dcp10010.gif"
dcp11010 = new Image(550, 200);	dcp11010.src = "images/dcp11010.gif"
dcp10110 = new Image(550, 200);	dcp10110.src = "images/dcp10110.gif"
dcp11110 = new Image(550, 200);	dcp11110.src = "images/dcp11110.gif"
dcp10001 = new Image(550, 200);	dcp10001.src = "images/dcp10001.gif"
dcp11001 = new Image(550, 200);	dcp11001.src = "images/dcp11001.gif"

hcp0000 = new Image(400, 200);	hcp0000.src = "images/hcp0000.gif"
hcp0100 = new Image(400, 200);	hcp0100.src = "images/hcp0100.gif"
hcp0010 = new Image(400, 200);	hcp0010.src = "images/hcp0010.gif"
hcp0110 = new Image(400, 200);	hcp0110.src = "images/hcp0110.gif"
hcp0001 = new Image(400, 200);	hcp0001.src = "images/hcp0001.gif"
hcp0101 = new Image(400, 200);	hcp0101.src = "images/hcp0101.gif"
hcp1000 = new Image(400, 200);	hcp1000.src = "images/hcp1000.gif"
hcp1100 = new Image(400, 200);	hcp1100.src = "images/hcp1100.gif"
hcp1010 = new Image(400, 200);	hcp1010.src = "images/hcp1010.gif"
hcp1110 = new Image(400, 200);	hcp1110.src = "images/hcp1110.gif"
hcp1001 = new Image(400, 200);	hcp1001.src = "images/hcp1001.gif"
hcp1101 = new Image(400, 200);	hcp1101.src = "images/hcp1101.gif"


// gate input and output values

var gatesIn = new Array(1);
gatesIn[0] = new Array(0);	// 4-bit decimal counter
gatesIn[0][0] = "0";

gatesIn[1] = new Array(0);	// 4-bit base-6 counter
gatesIn[1][0] = "0";


var gatesOut = new Array(1);
gatesOut[0] = new Array(3);	// 4-bit decimal counter
gatesOut[0][0] = "0";
gatesOut[0][1] = "0";
gatesOut[0][2] = "0";
gatesOut[0][3] = "0";

gatesOut[1] = new Array(2);	// 4-bit base-6 counter
gatesOut[1][0] = "0";
gatesOut[1][1] = "0";
gatesOut[1][2] = "0";


// gate names

var gateNames = new Array(1);
gateNames[0] = "dcp";
gateNames[1] = "hcp";


// Input and output counts

var gateInputs = new Array(1);
gateInputs[0] = 1;
gateInputs[1] = 1;

var gateOutputs = new Array(1);
gateOutputs[0] = 4;
gateOutputs[1] = 3;


// Pulse state information -- initialize

var pulseRestingState = new Array(1);
pulseRestingState[0] = 0;
pulseRestingState[1] = 0;

var pulseState = new Array(1);
pulseState[0] = pulseRestingState[0];
pulseState[1] = pulseRestingState[1];


// Determine next output state

var states = new Array(1);
states[0] = new Array(9);
states[0][0] = "1000";
states[0][1] = "0100";
states[0][2] = "1100";
states[0][3] = "0010";
states[0][4] = "1010";
states[0][5] = "0110";
states[0][6] = "1110";
states[0][7] = "0001";
states[0][8] = "1001";
states[0][9] = "0000";

states[1] = new Array(5);
states[1][0] = "100";
states[1][1] = "010";
states[1][2] = "110";
states[1][3] = "001";
states[1][4] = "101";
states[1][5] = "000";


function findOutput(gateID, inputID) {
        myGate = gateID;
        myInput = inputID;
	// Determine output state for current inputs
	if (gatesIn[myGate][myInput] == "0") {
		myPlace = 1;
		myState = 0;
		for ( i = 0; i < gateOutputs[myGate]; i++ ) {
			myState += parseInt(gatesOut[myGate][i]) * myPlace;
			myPlace *= 2;
		}
		newState = states[myGate][myState];
		for ( i = 0; i < gateOutputs[myGate]; i++ ) {
			newOutput = newState.substring(i, i+1);
			gatesOut[myGate][i] = newOutput;
		}
	}
}

