var nodes = []; 
var ajax = null; 
var ajax_limit= 10000; // In milliseconds 
var timer; 
var timer_interval = 1000;  // In milliseconds 

// This does not seem to work on Windows???
// json_url is redefined in start().
var json_url = "../json/";
var parameters; 

var miniserver_name;
var miniserver_timestamp;
var miniserver_update;
var miniserver_interval;

function start() {
    var i = "webserver_time";
    nodes[i] = new DOMNode( i ); 
    
    i = "webserver_timestamp";
    nodes[i] = new DOMNode( i ); 
    
    i = "header";
    nodes[i] = new DOMNode( i );
    // Reading some configuration info from the web page.
    var info = nodes[i].element.title;
    // Should do error checking here...
    var regexp = /Miniserver Name:\s+(\w+)/;
    var ar = regexp.exec(info);
    miniserver_name = ar[1];
    regexp = /Staleness:\s+(\d+)/;
    ar = regexp.exec(info);
    miniserver_staleness = ar[1];    
    miniserver_timestamp = miniserver_name.toLowerCase() + "_timestamp";
    miniserver_update = miniserver_name.toLowerCase() + "_update";
    // Putting some miniserver behind HTTPS/SSL.
    if (miniserver_name.toLowerCase() == "carrier") {
        json_url = "/ssl/" + miniserver_name.toLowerCase() + "/json/";
    } else {
        json_url = "/" + miniserver_name.toLowerCase() + "/json/";
    }
    ajax = new ajaxObject(json_url,init); 
    ajax.update(); 
}

function init(responseText,responseStatus) {
    if (responseStatus==200) {
	parameters = eval( '(' + responseText + ')' );
	assign();
    }
}

function assign() {     
   for (var i in parameters) { 
      nodes[i] = new DOMNode( i );  
    } 
    // Changing Ajax response handler.
    ajax = new ajaxObject(json_url,request); 
    requester();
    timer = setInterval(requester, timer_interval);
} 

function requester() { 
    /* Check if ajax has stalled. */
    if ( ajax != null && 
         ajax.updating &&
         ((new Date()).getTime() - ajax.updating) > ajax_limit ) { 
        ajax.abort(); 
        ajax = null;
    }
    /* Create a new this.ajax instance, if needed. */
    if ( ajax == null ) {
        ajax = new ajaxObject(json_url,request);
    }
   // Seem to need this for IE to update???
    ajax.update( "ts="+(new Date().getTime()));  
} 

function request(responseText,responseStatus) {
    if (responseStatus==200) {
	if (isset(repaint)) {
	    repaint( eval('(' + responseText  + ')'));
	}
    }
}

function repaint( d ) {
    for (var index in d) {
	if( isset(nodes[index]) && ! isnull(nodes[index])) {
	    nodes[index].text(d[index]);
	}
    }
    // Update header, including background color.
    var str =  '<big>Current ' + miniserver_name + ' Parameters</big><br /> Displaying Data from ' + d[miniserver_update];
    if ( isset( d[miniserver_timestamp] ) &&
	 isset( d.webserver_timestamp ) &&
	 isset( miniserver_staleness ) &&
	 d.webserver_timestamp - d[miniserver_timestamp] < miniserver_staleness ) {
	nodes.header.html(str).ok();	
    } else {
	nodes.header.html(str).error();
    }
}

function stop() {
    clearInterval(timer);
}

function isset( variable ) { 
    return ( typeof (variable) != 'undefined' ); 
}  

/* Helper function to see if variable has been set to null */
function isnull  ( variable ) {
  return ( variable == null );
}
