// Gate image overlays

sir000 = new Image(60,60);	sir000.src = "images/dff000.gif"
sir001 = new Image(60,60);	sir001.src = "images/dff001.gif"
sir010 = new Image(60,60);	sir010.src = "images/dff010.gif"
sir011 = new Image(60,60);	sir011.src = "images/dff011.gif"
sir100 = new Image(60,60);	sir100.src = "images/dff100.gif"
sir101 = new Image(60,60);	sir101.src = "images/dff101.gif"
sir110 = new Image(60,60);	sir110.src = "images/dff110.gif"
sir111 = new Image(60,60);	sir111.src = "images/dff111.gif"


// gate input and output values

var gatesIn = new Array(0);
gatesIn[0] = new Array(1);	// 8-bit shift register
gatesIn[0][0] = "0";
gatesIn[0][1] = "0";

var gatesOut = new Array(0);
gatesOut[0] = new Array(7);	// 8-bit shift register
gatesOut[0][0] = "0";
gatesOut[0][1] = "0";
gatesOut[0][2] = "0";
gatesOut[0][3] = "0";
gatesOut[0][4] = "0";
gatesOut[0][5] = "0";
gatesOut[0][6] = "0";
gatesOut[0][7] = "0";


// gate names

var gateNames = new Array(0);
gateNames[0] = "sir";


// Input and output counts

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

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


// Pulse state information -- initialize

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


function findOutput(gateID, inputID) {
        myGate = gateID;
        myInput = inputID;
	// Determine output state for current inputs
	if (gatesIn[myGate][myInput] == "0" && myInput == 1) {
		for (i = 7; i > 0; i -= 1) {
			gatesOut[myGate][i] = gatesOut[myGate][i-1];
		}
		gatesOut[myGate][0] = gatesIn[myGate][0];
	}
	overlay("clockline", "clock" + gatesIn[myGate][1]);
	for (i = 7; i > 0; i -= 1) {
		newFFImage = gateNames[myGate];
		newFFImage += gatesOut[myGate][i-1];
		newFFImage += pulseState[myGate];
		newFFImage += gatesOut[myGate][i];
		newFFGate = gateNames[myGate] + i + "Gate";
		overlay(newFFGate, newFFImage);
	}
}

