// Gate image overlays

rct00000 = new Image(430, 150);	rct00000.src = "images/rct00000.gif"
rct00001 = new Image(430, 150);	rct00001.src = "images/rct00001.gif"
rct00010 = new Image(430, 150);	rct00010.src = "images/rct00010.gif"
rct00011 = new Image(430, 150);	rct00011.src = "images/rct00011.gif"
rct00100 = new Image(430, 150);	rct00100.src = "images/rct00100.gif"
rct00101 = new Image(430, 150);	rct00101.src = "images/rct00101.gif"
rct00110 = new Image(430, 150);	rct00110.src = "images/rct00110.gif"
rct00111 = new Image(430, 150);	rct00111.src = "images/rct00111.gif"
rct01000 = new Image(430, 150);	rct01000.src = "images/rct01000.gif"
rct01001 = new Image(430, 150);	rct01001.src = "images/rct01001.gif"
rct01010 = new Image(430, 150);	rct01010.src = "images/rct01010.gif"
rct01011 = new Image(430, 150);	rct01011.src = "images/rct01011.gif"
rct01100 = new Image(430, 150);	rct01100.src = "images/rct01100.gif"
rct01101 = new Image(430, 150);	rct01101.src = "images/rct01101.gif"
rct01110 = new Image(430, 150);	rct01110.src = "images/rct01110.gif"
rct01111 = new Image(430, 150);	rct01111.src = "images/rct01111.gif"
rct10000 = new Image(430, 150);	rct10000.src = "images/rct10000.gif"
rct10001 = new Image(430, 150);	rct10001.src = "images/rct10001.gif"
rct10010 = new Image(430, 150);	rct10010.src = "images/rct10010.gif"
rct10011 = new Image(430, 150);	rct10011.src = "images/rct10011.gif"
rct10100 = new Image(430, 150);	rct10100.src = "images/rct10100.gif"
rct10101 = new Image(430, 150);	rct10101.src = "images/rct10101.gif"
rct10110 = new Image(430, 150);	rct10110.src = "images/rct10110.gif"
rct10111 = new Image(430, 150);	rct10111.src = "images/rct10111.gif"
rct11000 = new Image(430, 150);	rct11000.src = "images/rct11000.gif"
rct11001 = new Image(430, 150);	rct11001.src = "images/rct11001.gif"
rct11010 = new Image(430, 150);	rct11010.src = "images/rct11010.gif"
rct11011 = new Image(430, 150);	rct11011.src = "images/rct11011.gif"
rct11100 = new Image(430, 150);	rct11100.src = "images/rct11100.gif"
rct11101 = new Image(430, 150);	rct11101.src = "images/rct11101.gif"
rct11110 = new Image(430, 150);	rct11110.src = "images/rct11110.gif"
rct11111 = new Image(430, 150);	rct11111.src = "images/rct11111.gif"

rcp00000 = new Image(430, 150);	rcp00000.src = "images/rct00000.gif"
rcp00001 = new Image(430, 150);	rcp00001.src = "images/rct00001.gif"
rcp00010 = new Image(430, 150);	rcp00010.src = "images/rct00010.gif"
rcp00011 = new Image(430, 150);	rcp00011.src = "images/rct00011.gif"
rcp00100 = new Image(430, 150);	rcp00100.src = "images/rct00100.gif"
rcp00101 = new Image(430, 150);	rcp00101.src = "images/rct00101.gif"
rcp00110 = new Image(430, 150);	rcp00110.src = "images/rct00110.gif"
rcp00111 = new Image(430, 150);	rcp00111.src = "images/rct00111.gif"
rcp01000 = new Image(430, 150);	rcp01000.src = "images/rct01000.gif"
rcp01001 = new Image(430, 150);	rcp01001.src = "images/rct01001.gif"
rcp01010 = new Image(430, 150);	rcp01010.src = "images/rct01010.gif"
rcp01011 = new Image(430, 150);	rcp01011.src = "images/rct01011.gif"
rcp01100 = new Image(430, 150);	rcp01100.src = "images/rct01100.gif"
rcp01101 = new Image(430, 150);	rcp01101.src = "images/rct01101.gif"
rcp01110 = new Image(430, 150);	rcp01110.src = "images/rct01110.gif"
rcp01111 = new Image(430, 150);	rcp01111.src = "images/rct01111.gif"
rcp10000 = new Image(430, 150);	rcp10000.src = "images/rct10000.gif"
rcp10001 = new Image(430, 150);	rcp10001.src = "images/rct10001.gif"
rcp10010 = new Image(430, 150);	rcp10010.src = "images/rct10010.gif"
rcp10011 = new Image(430, 150);	rcp10011.src = "images/rct10011.gif"
rcp10100 = new Image(430, 150);	rcp10100.src = "images/rct10100.gif"
rcp10101 = new Image(430, 150);	rcp10101.src = "images/rct10101.gif"
rcp10110 = new Image(430, 150);	rcp10110.src = "images/rct10110.gif"
rcp10111 = new Image(430, 150);	rcp10111.src = "images/rct10111.gif"
rcp11000 = new Image(430, 150);	rcp11000.src = "images/rct11000.gif"
rcp11001 = new Image(430, 150);	rcp11001.src = "images/rct11001.gif"
rcp11010 = new Image(430, 150);	rcp11010.src = "images/rct11010.gif"
rcp11011 = new Image(430, 150);	rcp11011.src = "images/rct11011.gif"
rcp11100 = new Image(430, 150);	rcp11100.src = "images/rct11100.gif"
rcp11101 = new Image(430, 150);	rcp11101.src = "images/rct11101.gif"
rcp11110 = new Image(430, 150);	rcp11110.src = "images/rct11110.gif"
rcp11111 = new Image(430, 150);	rcp11111.src = "images/rct11111.gif"

// gate input and output values

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

gatesIn[1] = new Array(0);	// 4-bit ripple counter with pulse input
gatesIn[1][0] = "0";


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

gatesOut[1] = new Array(3);	// 4-bit ripple counter with pulse input
gatesOut[1][0] = "0";
gatesOut[1][1] = "0";
gatesOut[1][2] = "0";
gatesOut[1][3] = "0";


// gate names

var gateNames = new Array(1);
gateNames[0] = "rct";
gateNames[1] = "rcp";


// 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] = 4;


// 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];


function findOutput(gateID, inputID) {
        myGate = gateID;
        myInput = inputID;
	// Determine output state for current inputs
	if (gatesIn[myGate][myInput] == "0") {
		myOutput = "0";
		i = 0;
		while (myOutput == "0" && i < 4) {
			myOutput = (gatesOut[myGate][i] == "0") ? "1" : "0";
			gatesOut[myGate][i] = myOutput;
			i++;
		}
	}
}

