    var xmlHttp
    var rXmlHttp

    function listNames() {
	rXmlHttp = GetXmlHttpObject()
        if (rXmlHttp == null)
		{
			alert ("Browser does not support HTML Request")
			return
		}
		//var ses = document.form.session.value
		var url = "getNames.cgi"	

		rXmlHttp.onreadystatechange = getNames;
		rXmlHttp.open("GET", url, true);
		rXmlHttp.send(null); //dont know what this sending null stuff is about

    }

    function loadState(ses) {
	rXmlHttp = GetXmlHttpObject()
        if (rXmlHttp == null) {
	  alert ("Browser does not support HTML Request")
	  return
	}
	//var ses = document.form.session.value
	var url = "rebuild.cgi"		
	url = url + "?ses=" + ses //this is how you add arguments
	url = url + "&swatchPath=" + swatchPath	
	
	rXmlHttp.onreadystatechange = rebuildResponse;
	rXmlHttp.open("GET", url, true);
	rXmlHttp.send(null); //dont know what this sending null stuff is about

    }

    function loadImage() {
	xmlHttp = GetXmlHttpObject()
        var email = document.saveLoad.lEmail.value
        var name = document.saveLoad.lName.value
        if (xmlHttp == null)
	{
		alert ("Browser does not support HTML Request")
		return
	}

        if (email == "" || name == "") {
          alert ("you didnt enter enough details")
	  return
	}
	
	var url = "load.cgi"		
        url = url + "?name=" + name //this is how you add arguments
        url = url + "&email=" +email

	xmlHttp.onreadystatechange = loadResult
	xmlHttp.open("GET", url, true);
	xmlHttp.send(null); //dont know what this sending null stuff is about
	removeSaveLoad()	
    }
    
    function getSession() {
	xmlHttp = GetXmlHttpObject()
        if (xmlHttp == null)
	{
		alert ("Browser does not support HTML Request")
		return
	}
	var url = "getSession.cgi"		

	//if (document.form.session.value == "") {

		xmlHttp.onreadystatechange = stateChanged;
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null); //dont know what this sending null stuff is about
	//} else {
	//	loadState(document.form.session.value);
	//}
    }

  function saveImage() {
    saveClick()
    var ses = document.form.session.value
    var email = document.saveLoad.sEmail.value
    //if(!validate(email)) {
    //  alert("invalid email")
    //  return
    //}
    var name = document.saveLoad.sName.value
    if (email == "" || name == "") {
      alert("Save form wasn't filled out correctly")
      return
    }
    if (ses == "") {
      alert("Something went wrong with loading the page")
      return
    }
    xmlHttp = GetXmlHttpObject()
    if (xmlHttp == null) {
      alert ("Browser does not support HTML Request")
      return
    }
    var url = "save.cgi" //insert script here.
    url = url + "?ses=" + ses //this is how you add arguments
    url = url + "&email=" +email
    url = url + "&name=" + name
    xmlHttp.onreadystatechange = saveResult
    xmlHttp.open("GET", url, true)
    xmlHttp.send(null); //dont know what this sending null stuff is about
    removeSaveLoad()	
  }

    function saveClick()  //str is just an arbitrary argument
    {
        if(index > 0) {
		var ses = document.form.session.value
   		xmlHttp = GetXmlHttpObject()
		if (xmlHttp == null)
		{
			alert ("Browser does not support HTML Request")
			return
		}
		
	        //var col = 1;
		//if (colour == "dg") {
		//	col = 2
		//} else if (colour == "lg") {
		//	col = 3
		//} else if (colour == "w") {
		//	col = 4
		//}
		var str = "";
		var trid = ""; 
		var col = "";
		for(var i = 0; i < index; i ++) {
		  str += clicks[i][0] + ":";
		  trid += clicks[i][1] + ":";
		  col += clicks[i][2] + ":";
		}
		index = 0;
		var url = "stateStorer.cgi" //insert script here.
		url = url + "?val=" + str //this is how you add arguments
		url = url + "&width=" + width
		url = url + "&height=" + height
		url = url + "&td=" + trid
		url = url + "&ses=" + ses
		url = url + "&col=" + col
		//xmlHttp.onreadystatechange = debug;
		xmlHttp.open("GET", url, true);
		xmlHttp.send(null); //dont know what this sending null stuff is about
	}
    }

    function rebuildResponse() {

		if (rXmlHttp.readyState == 4 || rXmlHttp.readyState == "complete")
		{
                	document.getElementById("testSpan").innerHTML = rXmlHttp.responseText
			removeBlack()			
		}
    }
    
    function getNames() {

		if (rXmlHttp.readyState == 4 || rXmlHttp.readyState == "complete")
		{
			document.getElementById("box").innerHTML = rXmlHttp.responseText
		}
    }


    function debug()
    {
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
		{
			document.getElementById("testSpan").innerHTML = xmlHttp.responseText
		}
    }


    function loadResult()
    {
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
		{
		 	var result = xmlHttp.responseText;
			//document.getElementById("debug").innerHTML = result
			if(result.slice(1,5) == "fail") {
			  alert("failed to load, image does not exist");
			  removeBlack()
			  return
			}
			document.form.session.value = result
			loadState(document.form.session.value)
			//removeBlack()			
		}
    }
    
    function saveResult()
    {
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
		{
			removeBlack()			
		}
    }
    
    function stateChanged()
    {
		if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
		{
			document.form.session.value = xmlHttp.responseText
		}
    }

    function GetXmlHttpObject(handler)
    {
      var objXMLHttp = null
      try {
        //firefox, safari, opera
	objXMLHttp = new XMLHttpRequest();
      }
      catch (e) {
        //Internet explorer
	try {
	  objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e) {
	  objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
      }
      return objXMLHttp
    }
