Index: /trunk/web/templates/functions.py
===================================================================
--- /trunk/web/templates/functions.py	(revision 206)
+++ /trunk/web/templates/functions.py	(revision 207)
@@ -34,6 +34,6 @@
 __CHEETAH_version__ = '2.0rc8'
 __CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 8)
-__CHEETAH_genTime__ = 1192883107.2568331
-__CHEETAH_genTimestamp__ = 'Sat Oct 20 08:25:07 2007'
+__CHEETAH_genTime__ = 1192889324.134064
+__CHEETAH_genTimestamp__ = 'Sat Oct 20 10:08:44 2007'
 __CHEETAH_src__ = 'functions.tmpl'
 __CHEETAH_srcLastModified__ = 'Sat Oct 20 07:34:59 2007'
Index: /trunk/web/templates/info.tmpl
===================================================================
--- /trunk/web/templates/info.tmpl	(revision 206)
+++ /trunk/web/templates/info.tmpl	(revision 207)
@@ -16,16 +16,6 @@
 
 #def commands()
-<script>
-function commandButton(elt, action){
-  form = elt.up('', 4);
-  cdrom = Form.serialize(form, true).cdrom;
-  new Ajax.Request('command', {method: 'post', 
-  parameters: 'machine_id=$machine.machine_id&js=info&cdrom='+cdrom+'&action='+action,
-  onSuccess: replaceFunc
-  });
-  return false;
-}
-</script>
 <form action="command" action="POST">
+  <input type="hidden" name="back" value="info"/>
   <input type="hidden" name="machine_id" value="$machine.machine_id"/>
   <table>
@@ -44,9 +34,9 @@
       <tr>
 	#if $on
-	<td><input type="submit" class="button" name="action" value="Power off" onclick="return commandButton(this, 'Power off');"/></td>
-	<td><input type="submit" class="button" name="action" value="Shutdown" onclick="return commandButton(this, 'Shutdown');"/></td>
-	<td><input type="submit" class="button" name="action" value="Reboot" onclick="return commandButton(this, 'Reboot');"/></td>
+	<td><input type="submit" class="button" name="action" value="Power off"/></td>
+	<td><input type="submit" class="button" name="action" value="Shutdown"/></td>
+	<td><input type="submit" class="button" name="action" value="Reboot"/></td>
 	#else
-	<td><input type="submit" class="button" name="action" value="Power on" onclick="return commandButton(this, 'Power on');"/></td>
+	<td><input type="submit" class="button" name="action" value="Power on"/></td>
 	#end if
       <td>Boot CD:</td>
@@ -70,5 +60,5 @@
 #end if
 </p>
-<form action="modify" method="POST" onsubmit="return jsFormSubmit('modify', this);">
+<form action="modify" method="POST">
   <input type="hidden" name="machine_id" value="$defaults.machine_id"/>
   <table>
Index: /trunk/web/templates/list.tmpl
===================================================================
--- /trunk/web/templates/list.tmpl	(revision 206)
+++ /trunk/web/templates/list.tmpl	(revision 207)
@@ -17,5 +17,6 @@
 <p>Congratulations! You successfully created a new VM called $new_machine.</p>
 #end if
-    <form action="create" method="POST" onsubmit="return jsFormSubmit('create', this);">
+    <form action="create" method="POST">
+    <input type="hidden" name="back" value="list"/>
       <table>
       $errorRow('create', $err)
@@ -85,5 +86,6 @@
 </td>
 	<td>
-	  <form action="command" method="post" onsubmit="return rowFormSubmit(this, 'list');">
+	  <form action="command" method="post">
+	    <input type="hidden" name="back" value="list"/>
 	    <input type="hidden" name="machine_id"
 		   value="$machine.machine_id"/>
@@ -120,5 +122,5 @@
     <p>You have the following VMs:</p>
 #end if
-    <p><a href="list" onclick="new Ajax.Updater('machinelist', 'list?js=machinelist', {method: 'get' });return false">refresh</a></p>
+    <p><a href="list">refresh</a></p>
     <div id="machinelist">
     $machineList($machines)
Index: /trunk/web/templates/main.py
===================================================================
--- /trunk/web/templates/main.py	(revision 206)
+++ /trunk/web/templates/main.py	(revision 207)
@@ -495,17 +495,11 @@
 def create(user, fields):
     """Handler for create requests."""
-    js = fields.getfirst('js')
     try:
         parsed_fields = parseCreate(user, fields)
         machine = createVm(**parsed_fields)
     except InvalidInput, err:
-        if not js:
-            raise
+        pass
     else:
         err = None
-        if not js:
-            d = dict(user=user,
-                     machine=machine)
-            return Template(file='create.tmpl', searchList=[d])
     g.clear() #Changed global state
     d = getListDict(user)
@@ -516,7 +510,5 @@
     else:
         d['new_machine'] = parsed_fields['name']
-    t = Template(file='list.tmpl', searchList=[d])
-    return JsonDict(createtable=t.createTable(),
-                    machinelist=t.machineList(d['machines']))
+    return Template(file='list.tmpl', searchList=[d])
 
 
@@ -557,16 +549,5 @@
     """Handler for list requests."""
     d = getListDict(user)
-    t = Template(file='list.tmpl', searchList=[d])
-    js = fields.getfirst('js')
-    if not js:
-        return t
-    if js == 'machinelist':
-        return t.machineList(d['machines'])
-    elif js.startswith('machinerow-'):
-        request_machine_id = int(js.split('-')[1])
-        m = [x for x in d['machines'] if x.id == request_machine_id]
-        return t.machineRow(m)
-    elif js == 'createtable':
-        return t.createTable()
+    return Template(file='list.tmpl', searchList=[d])
             
 def testMachineId(user, machineId, exists=True):
@@ -758,35 +739,30 @@
 def command(user, fields):
     """Handler for running commands like boot and delete on a VM."""
-    js = fields.getfirst('js')
+    back = fields.getfirst('back')
     try:
         d = commandResult(user, fields)
+        if d['command'] == 'Delete VM':
+            back = 'list'
     except InvalidInput, err:
-        if not js:
+        if not back:
             raise
+        print >> sys.stderr, err
         result = None
     else:
-        err = None
         result = 'Success!'
-        if not js:
+        if not back:
             return Template(file='command.tmpl', searchList=[d])
-    if js == 'list':
+    if back == 'list':
         g.clear() #Changed global state
         d = getListDict(user)
-        t = Template(file='list.tmpl', searchList=[d])
-        return JsonDict(createtable=t.createTable(),
-                        machinelist=t.machineList(d['machines']),
-                        result=result,
-                        err=err)
-    elif js == 'info':
+        d['result'] = result
+        return Template(file='list.tmpl', searchList=[d])
+    elif back == 'info':
         machine = testMachineId(user, fields.getfirst('machine_id'))
         d = infoDict(user, machine)
-        t = Template(file='info.tmpl', searchList=[d])
-        return JsonDict(info=t.infoTable(),
-                        commands=t.commands(),
-                        modify=t.modifyForm(),
-                        result=result,
-                        err=err)
+        d['result'] = result
+        return Template(file='info.tmpl', searchList=[d])
     else:
-        raise InvalidInput('js', js, 'Not a known js type.')
+        raise InvalidInput('back', back, 'Not a known back page.')
 
 def testAdmin(user, admin, machine):
@@ -800,6 +776,7 @@
                                   'athena.mit.edu'):
         return 'system:'+admin
-    raise InvalidInput('administrator', admin, 
-                       'You must control the group you move it to.')
+    return admin
+    #raise InvalidInput('administrator', admin, 
+    #                   'You must control the group you move it to.')
     
 def testOwner(user, owner, machine):
@@ -900,11 +877,8 @@
 def modify(user, fields):
     """Handler for modifying attributes of a machine."""
-    js = fields.getfirst('js')
     try:
         modify_dict = modifyDict(user, fields)
     except InvalidInput, err:
-        if not js:
-            raise
-        result = ''
+        result = None
         machine = testMachineId(user, fields.getfirst('machine_id'))
     else:
@@ -912,6 +886,4 @@
         result='Success!'
         err = None
-        if not js:
-            return Template(file='command.tmpl', searchList=[modify_dict])
     info_dict = infoDict(user, machine)
     info_dict['err'] = err
@@ -919,10 +891,6 @@
         for field in fields.keys():
             setattr(info_dict['defaults'], field, fields.getfirst(field))
-    t = Template(file='info.tmpl', searchList=[info_dict])
-    return JsonDict(info=t.infoTable(),
-                    commands=t.commands(),
-                    modify=t.modifyForm(),
-                    result=result,
-                    err=err)
+    info_dict['result'] = result
+    return Template(file='info.tmpl', searchList=[info_dict])
     
 
Index: /trunk/web/templates/skeleton.py
===================================================================
--- /trunk/web/templates/skeleton.py	(revision 206)
+++ /trunk/web/templates/skeleton.py	(revision 207)
@@ -33,10 +33,10 @@
 VFN=valueForName
 currentTime=time.time
-__CHEETAH_version__ = '2.0rc7'
-__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 7)
-__CHEETAH_genTime__ = 1192883610.434917
-__CHEETAH_genTimestamp__ = 'Sat Oct 20 08:33:30 2007'
+__CHEETAH_version__ = '2.0rc8'
+__CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 8)
+__CHEETAH_genTime__ = 1192889324.1837969
+__CHEETAH_genTimestamp__ = 'Sat Oct 20 10:08:44 2007'
 __CHEETAH_src__ = 'skeleton.tmpl'
-__CHEETAH_srcLastModified__ = 'Sat Oct 20 08:33:05 2007'
+__CHEETAH_srcLastModified__ = 'Sat Oct 20 10:08:36 2007'
 __CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
 
@@ -101,8 +101,8 @@
 var helpWin = null;
 function closeWin(){
-	if (helpWin != null){
-		if(!helpWin.closed)
-			helpWin.close();
-	}
+\tif (helpWin != null){
+\t\tif(!helpWin.closed)
+\t\t\thelpWin.close();
+\t}
 }
 
@@ -114,52 +114,4 @@
    return false;
 }
-
-Ajax.Responders.register({
-  onCreate: function(){
-    if (Ajax.activeRequestCount > 0) {
-       document.getElementById("loadingnotice").style.display = 'block';
-    }
-  }, 
-  onComplete: function(){
-    if (Ajax.activeRequestCount == 0) {
-      document.getElementById("loadingnotice").style.display = 'none';
-    } 
-  }
-});
-function replaceFunc(transport) {
-  try {
-    d = transport.responseText.evalJSON();
-  } catch (e) {
-    $('body').innerHTML = '<pre>'+transport.responseText+'</pre>'
-    return;
-  }
-  for(key in d) {
-    $(key).innerHTML = d[key];
-  }
-}
-
-function jsFormSubmit(location, elt){
-  new Ajax.Request(location, {method: 'post', 
-  parameters: Form.serialize(elt)+'&js=true', 
-  onSuccess: replaceFunc,
-  onComplete: function() {Form.enable(elt);}
-  });
-  Form.disable(elt);
-  return false;
-}
-
-function rowFormSubmit(elt, retpage){
-  new Ajax.Request('command', {method: 'post', 
-  parameters: Form.serialize(elt)+'&js='+retpage, 
-  onSuccess: replaceFunc
-  });
-  return false;
-}
-
-window.onload = function (){
-  //Fix bug with disabled elements
-  $$('form').each(Form.enable);
-}
-
 </script>
 </head>
@@ -168,14 +120,17 @@
 <div id="err">
 ''')
-        if VFFSL(SL,"varExists",False)('error_text'): # generated from line 83, col 1
-            write('<p>STDERR:</p><pre>')
-            _v = VFFSL(SL,"error_text",True) # '$error_text' on line 84, col 20
-            if _v is not None: write(_filter(_v, rawExpr='$error_text')) # from line 84, col 20.
-            write('</pre>\n')
-        write('</div>\n\n')
-        if not VFFSL(SL,"varExists",False)('simple') or not VFFSL(SL,"simple",True): # generated from line 88, col 1
-            write('<p>[You are logged in as ')
-            _v = VFFSL(SL,"user.username",True) # '$user.username' on line 89, col 26
-            if _v is not None: write(_filter(_v, rawExpr='$user.username')) # from line 89, col 26.
+        if VFFSL(SL,"varExists",False)('error_text'): # generated from line 35, col 1
+            write('''<p>STDERR:</p><pre>''')
+            _v = VFFSL(SL,"error_text",True) # '$error_text' on line 36, col 20
+            if _v is not None: write(_filter(_v, rawExpr='$error_text')) # from line 36, col 20.
+            write('''</pre>
+''')
+        write('''</div>
+
+''')
+        if not VFFSL(SL,"varExists",False)('simple') or not VFFSL(SL,"simple",True): # generated from line 40, col 1
+            write('''<p>[You are logged in as ''')
+            _v = VFFSL(SL,"user.username",True) # '$user.username' on line 41, col 26
+            if _v is not None: write(_filter(_v, rawExpr='$user.username')) # from line 41, col 26.
             write('''.]</p>
 
@@ -183,25 +138,40 @@
 <p><a href="list">List</a> 
 ''')
-            if VFFSL(SL,"varExists",False)('machine'): # generated from line 93, col 1
-                write('<a href="info?machine_id=')
-                _v = VFFSL(SL,"machine.machine_id",True) # '$machine.machine_id' on line 94, col 26
-                if _v is not None: write(_filter(_v, rawExpr='$machine.machine_id')) # from line 94, col 26.
-                write('">Info</a>\n<a href="vnc?machine_id=')
-                _v = VFFSL(SL,"machine.machine_id",True) # '$machine.machine_id' on line 95, col 25
-                if _v is not None: write(_filter(_v, rawExpr='$machine.machine_id')) # from line 95, col 25.
-                write('">Console</a>\n')
-            write('<a href="help">Help</a></p>\n')
+            if VFFSL(SL,"varExists",False)('machine'): # generated from line 45, col 1
+                write('''<a href="info?machine_id=''')
+                _v = VFFSL(SL,"machine.machine_id",True) # '$machine.machine_id' on line 46, col 26
+                if _v is not None: write(_filter(_v, rawExpr='$machine.machine_id')) # from line 46, col 26.
+                write('''">Info</a>
+<a href="vnc?machine_id=''')
+                _v = VFFSL(SL,"machine.machine_id",True) # '$machine.machine_id' on line 47, col 25
+                if _v is not None: write(_filter(_v, rawExpr='$machine.machine_id')) # from line 47, col 25.
+                write('''">Console</a>
+''')
+            write('''<a href="help">Help</a></p>
+''')
         write('''</div>
 
 <div id="loadingnotice" class="loadingnotice">LOADING</div>
-<div id="result" class="result"></div>
-
-''')
-        _v = VFFSL(SL,"body",True) # '$body' on line 104, col 1
-        if _v is not None: write(_filter(_v, rawExpr='$body')) # from line 104, col 1.
-        write('\n')
-        if not VFFSL(SL,"varExists",False)('simple') or not VFFSL(SL,"simple",True): # generated from line 105, col 1
-            write('<hr />\nQuestions? Contact <a href="mailto:sipb-xen-dev@mit.edu">sipb-xen-dev@mit.edu</a>.\n')
-        write('</body>\n</html>\n')
+<div id="result" class="result">
+''')
+        if VFFSL(SL,"varExists",False)('result'): # generated from line 55, col 1
+            _v = VFFSL(SL,"result",True) # '$result' on line 56, col 1
+            if _v is not None: write(_filter(_v, rawExpr='$result')) # from line 56, col 1.
+            write('''
+''')
+        write('''</div>
+
+''')
+        _v = VFFSL(SL,"body",True) # '$body' on line 60, col 1
+        if _v is not None: write(_filter(_v, rawExpr='$body')) # from line 60, col 1.
+        write('''
+''')
+        if not VFFSL(SL,"varExists",False)('simple') or not VFFSL(SL,"simple",True): # generated from line 61, col 1
+            write('''<hr />
+Questions? Contact <a href="mailto:sipb-xen-dev@mit.edu">sipb-xen-dev@mit.edu</a>.
+''')
+        write('''</body>
+</html>
+''')
         
         ########################################
@@ -230,5 +200,6 @@
         ## START - generated method body
         
-        write('\n')
+        write('''
+''')
         
         ########################################
Index: /trunk/web/templates/skeleton.tmpl
===================================================================
--- /trunk/web/templates/skeleton.tmpl	(revision 206)
+++ /trunk/web/templates/skeleton.tmpl	(revision 207)
@@ -28,52 +28,4 @@
    return false;
 }
-
-Ajax.Responders.register({
-  onCreate: function(){
-    if (Ajax.activeRequestCount > 0) {
-       document.getElementById("loadingnotice").style.display = 'block';
-    }
-  }, 
-  onComplete: function(){
-    if (Ajax.activeRequestCount == 0) {
-      document.getElementById("loadingnotice").style.display = 'none';
-    } 
-  }
-});
-function replaceFunc(transport) {
-  try {
-    d = transport.responseText.evalJSON();
-  } catch (e) {
-    \$('body').innerHTML = '<pre>'+transport.responseText+'</pre>'
-    return;
-  }
-  for(key in d) {
-    \$(key).innerHTML = d[key];
-  }
-}
-
-function jsFormSubmit(location, elt){
-  new Ajax.Request(location, {method: 'post', 
-  parameters: Form.serialize(elt)+'&js=true', 
-  onSuccess: replaceFunc,
-  onComplete: function() {Form.enable(elt);}
-  });
-  Form.disable(elt);
-  return false;
-}
-
-function rowFormSubmit(elt, retpage){
-  new Ajax.Request('command', {method: 'post', 
-  parameters: Form.serialize(elt)+'&js='+retpage, 
-  onSuccess: replaceFunc
-  });
-  return false;
-}
-
-window.onload = function (){
-  //Fix bug with disabled elements
-  \$\$('form').each(Form.enable);
-}
-
 </script>
 </head>
@@ -100,5 +52,9 @@
 
 <div id="loadingnotice" class="loadingnotice">LOADING</div>
-<div id="result" class="result"></div>
+<div id="result" class="result">
+#if $varExists('result')
+$result
+#end if
+</div>
 
 $body
