// Recieve events from EON

var MaxChassisLength=0;

// Use this function to respond to events
function HandleEONEvents(v)
{
	a = v.split("#")	// creates an array
	b = a[0].split("=") // creates an array from the first item of array a
	//if (b[0]!="ExitFullsize") alert(a[0])
	//alert(b[0] + "," + b[1])
	switch(b[0])
	{
		//case "Loaded" : DoSomething(); break;
		//case "SelectedRack" : ShowRackConfig(b[1]); break;
		//case "SelectedRackmountPosition" : ShowRackMP(b[1]); break;
		//case "SelectedChassisLength" : chassislength.value = b[1]; break;
		//case "ModuleAdded" : modulename.value = b[1]; break;
		//case "SelectedModule" : moduleid = b[1] ; img.src = b[2] + ".jpg"; break;
		case "ModelNumber" : modnum(b[1]); break;
		case "ExitFullsize" : EONFullsize(false); break;
		case "MaxChassisLength" : MaxChassisLength=(b[1]);  EONMaxChassisLength(); break;
		//case "ModuleAdded" : moduleAdded(b[0],b[1]); break
	}
}

/*
	In your web pages you can have 
	<a href="javascript:ESQ.addevent('AddModule=C22')"><img src="c22.jpg"></a>
	
	You can use ESQ.addevent("Event=here") whereever you need in your code.
	
	
	
	The way it works is that there are only 4 external in/out events
	
	WEBEvents	inevent	SFString
	WEBEventsDone outevent SFString
	EONEvents outevent SFString
	EONEventsDone SFString
	
	There is a queue. This ensures that events are handled in the order you expect.
	The ESQ function will ensure only one event is sent at a time via WEBEvents and it will not
	send the next event until it receives the WEBEventsDone outevent.
	Similar thing happens inside EON. It has a queue too. It sends EONEvents to web page
	And after processing the events the EONEventsDone is sent back. Only when it gets the event back
	will it send the next and so on.
	
	This ESQ's main advantage is not having to create the external in and outevent nodes in EON.
	That saves time.
	
	The Stuff below is just infrastructure code - you don't need to change it

*/




// this is where the eon_functions.js file sends events from EON
function EON_OnEvent(e,v)
{
    /*if(e == 'ExitFullsize')
	{
         EONFullsize(false);
	}*/
	if (e=="EONEvents")
	{
		if (v.indexOf("@@")!=-1) 	// Multiple events sent separated by "@@"
		{
			var arr = v.split("@@")
			for (var i=1;i<arr.length;i++)
			{
				HandleEONEvents(arr[i])
			}
		}
		else HandleEONEvents(v);
		EONSendEvent("SFSTRING","EONEventsDone","done");	
	}
	
	if (e=="WEBEventsDone")
	{
		if (v=="done")	ESQ.done()	// this will send next event in queue if one exists.
	}
	
	//if( e == 'ModelNumOut' )
	//{
				//alert("its working")
				//document.eon_out_events_form.EonOutput_ModelNumOut.value = v.toString();
	//			document.getElementById("EonOutput_ModelNumOut").innerHTML =  v.toString();
	//}
}

var ESQ = new EventSendingQueue()

function EventSendingQueue()
{
	var ev = this;
	ev.waiting = false;
	ev.addevent = addevent;
	ev.sendevent = sendevent;
	ev.remove = remove;
	ev.done = done;
	ev.events = new Array();

	function addevent(str)
	{
		var nr = ev.events.length;
		ev.events[nr] = str;
		//alert(str)
		sendevent()
	}

	function sendevent()
	{
		if (ev.waiting) return;
		var nr = ev.events.length;
		if (nr==0) return;
		EONSendEvent("SFSTRING","WEBEvents", ev.events[0]);
		ev.waiting = true;
	}

	function remove()
	{
		var nr = ev.events.length;
		if (nr==0) return;
		for (var i=0; i<nr-1; i++)
		{
			ev.events[i] = ev.events[i+1];
		}
		ev.events.length = nr-1;
	}

	function done()
	{
		ev.waiting = false;
		// auto send next
		remove();
		sendevent();
	}
}

function rackVis()
{
	w1 = document.RackVisibility.RackVis0.selectedIndex;
	if (w1==0) ESQ.addevent("ViewRack=1")
	if (w1==1) ESQ.addevent("ViewRack=0")
	if (w1==2) ESQ.addevent("ViewRack=2")
}