function createRequestObject()
{
	 var ro;
	 var browser = navigator.appName;
	 if(browser == "Microsoft Internet Explorer"){
		  ro = new ActiveXObject("Microsoft.XMLHTTP");
	 }else{
		  ro = new XMLHttpRequest();
	 }
	 return ro;
}

var http_clear = createRequestObject();
var http_generate = createRequestObject();
var http_simulate = createRequestObject();

var updates = false;
var update_count = 0;
var num_updates = 0;

function clear_map()
{
	var http_clear = createRequestObject();
	var url = "LvW_ajax.php";
	var params = "method=clearMap";
	
	http_clear.open("POST", url, true);
	http_clear.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_clear.setRequestHeader("Content-length", params.length);
	http_clear.setRequestHeader("Connection", "close");
	http_clear.onreadystatechange = handle_clear_map; // function pointer to what method should fire when the script gets info back from the external script
	
	http_clear.send(params);
}

function handle_clear_map()
{
	if(this.readyState == 4) // not sure why http_clear doesn't work here
	{
		var response = this.responseText;
		var currentTime = new Date();
		document.getElementById('map').src = "display.php?id=" + currentTime.getTime();
	}
}

function generate()
{
	var updates = false;
	var update_count = 0;
	var num_updates = 0;
	document.getElementById('btn_simulate').disabled = false;
	
	// get length and width
	var width = document.getElementById('width').value;
	var height = document.getElementById('height').value;

	var http_generate = createRequestObject();
	var url = "LvW_ajax.php";
	var params = "method=generate&height=" + height + "&width=" + width;
	
	http_generate.open("POST", url, true);
	http_generate.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	http_generate.setRequestHeader("Content-length", params.length);
	http_generate.setRequestHeader("Connection", "close");
	http_generate.onreadystatechange = handle_generate; // function pointer to what method should fire when the script gets info back from the external script
	
	http_generate.send(params);
}

function handle_generate()
{
	if(this.readyState == 4)
	{
		var response = this.responseText;
		var currentTime = new Date();
		document.getElementById('map').src = "display.php?id=" + currentTime.getTime();
	}
}

function simulate()
{
	if(updates == true)
	{
		var http_simulate = createRequestObject();
		var url = "LvW_ajax.php";
		var params = "method=simulate";
		
		http_simulate.open("POST", url, true);
		http_simulate.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		http_simulate.setRequestHeader("Content-length", params.length);
		http_simulate.setRequestHeader("Connection", "close");
		http_simulate.onreadystatechange = handle_simulate; // function pointer to what method should fire when the script gets info back from the external script
		
		http_simulate.send(params);
	}
}

function handle_simulate()
{
	if(this.readyState == 4)
	{
		var response = this.responseText;
		var currentTime = new Date();
		document.getElementById('map').src = "display.php?id=" + currentTime.getTime();
		if(update_count < num_updates)
		{
			update_count++;
			document.getElementById('progress').innerHTML = update_count + "/" + num_updates;
			if(update_count == num_updates)
			{
				updates = false;
				document.getElementById('btn_simulate').disabled = false;
			}
			else
			{
				setTimeout ( "simulate()", 1500);
			}
		}
		else
		{
			updates = false;
			document.getElementById('btn_simulate').disabled = false;
		}
	}
}

function start_simulation()
{
	num = document.getElementById('duration').value;
	updates = true;
	if(num == 0)
	{
		update_count = 0;
		num_updates = 100000;
		document.getElementById('progress').innerHTML = update_count + "/" + num_updates;
	}
	else
	{
		update_count = 0;
		num_updates = Math.abs(num);
		document.getElementById('progress').innerHTML = update_count + "/" + num_updates;
	}
	document.getElementById('btn_simulate').disabled = true;
	simulate();
}

function pause_simulation()
{
	updates = false;
}

function resume_simulation()
{
	if(updates == false && update_count < num_updates)
	{
		updates = true;
		document.getElementById('btn_simulate').disabled = true;
		simulate();
	}
}

function end_simulation()
{
	updates = false;
	update_count = 0;
	num_updates = 0;
	document.getElementById('btn_simulate').disabled = false;
}