function xmlhttpPost(strURL,strELEMENTID, intEVENTID) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //alert(strURL);
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            updatewidget(self.xmlHttpReq.responseText, strELEMENTID, intEVENTID);
        }
    }
    self.xmlHttpReq.send(getquerystring());

}

function getquerystring() {
    //var form     = document.forms['f1'];
    //var word = form.word.value;
    //qstr = 'w=' + escape(word);  // NOTE: no '?' before querystring
    //return qstr;
}

// update widget with data from returned function
function updatewidget(str, strELEMENTID, intEVENTID){
 	// update object
    document.getElementById(strELEMENTID).innerHTML = str;

	// clear flag    
    eventbusy[intEVENTID] = 0;
}

// define array for timer events for ajax functions
var eventsurl=new Array();
var eventselementid=new Array();
var eventstimer=new Array();
var eventstimercountdown=new Array();
var eventbusy=new Array();
var watchdog=0;

// configure event
function setEvent(strURL, strELEMENTID, intDELAY, intEVENTID){
	// store event parms
	eventsurl[intEVENTID] = strURL;
	eventselementid[intEVENTID] = strELEMENTID;
	eventstimer[intEVENTID] = intDELAY;
	eventstimercountdown[intEVENTID] = intDELAY;
}

// single manual fire of event
function fireEvent(intEVENTID){
	eventstimercountdown[intEVENTID] = 1;
}

// process events sequentially
function timerEvent(){

	// are events busy?
	if (iseventbusy() == 0){
	 
	 	// clear watchdog
	 	watchdog = 0;

		// step through events
		for (eventiter=0; eventiter<=10; eventiter++){
		 	// ensure inside loop that all events are clear
		 	if (iseventbusy() == 0) {
			 	// dec event counter so when hits zero can be executed
			 	eventstimercountdown[eventiter]--;
			 	
			 	// if counter zero and actual event been set
			 	if (eventstimercountdown[eventiter] <= 0 && eventstimer[eventiter] > 0) {
			 	 
			 	 	// set busy flag
					eventbusy[eventiter] = 1;
	
			 	 	// update widget
					xmlhttpPost(eventsurl[eventiter],eventselementid[eventiter],eventiter);
	
					// reset timer
					eventstimercountdown[eventiter] = eventstimer[eventiter];
				}
			}
		}
	} else {
	 	// watchdog timer
		watchdog++;
		
		// if no activity for 5 seconds then force restart of events
		if (watchdog > 50) {
		 	// clear watchdog
		 	watchdog = 0;
		 
			// step through events
			for (eventiter=0; eventiter<=10; eventiter++){
				// clear event flag
			 	eventbusy[eventiter] = 0;
			}			
		}
	}
	
	// set delay to re-enter function
	setTimeout('JavaScript:timerEvent()',100);
}

// are any events running? if so return 1 else 0 
function iseventbusy(){

	// step through events
	for (a_eventiter=0; a_eventiter<=10; a_eventiter++){
		// check events and if busy return 1 	
	 	if (eventbusy[a_eventiter] == 1) {
	 	 	// return 1
	 	 	return 1;
	 	}
	}
	
	// if execution reaches here then no events busy
	return 0;

}

























