<%@ Page language="c#"%>
<script language="c#" runat="server">
//! Support file only, run AjaxTable.html instead !
// Uses new ASP.NET style scripting with event Page_Load
// -------------------------------------------------------------------------------------------------------------------------------
void Page_Load(object sender, System.EventArgs e) 
{
   // --- Database initialization ---
   string Path = System.IO.Path.GetDirectoryName(Context.Request.PhysicalPath);
   System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection("Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database Locking Mode=1;Data Source=\"" + Path + "\\Database.mdb\";Mode=Share Deny None;Jet OLEDB:Engine Type=5;Provider=\"Microsoft.Jet.OLEDB.4.0\";Jet OLEDB:System database=;Jet OLEDB:SFP=False;persist security info=False;Extended Properties=;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Create System Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;User ID=Admin;Jet OLEDB:Global Bulk Transactions=1");
   Conn.Open();
   System.Data.OleDb.OleDbCommand Cmd = Conn.CreateCommand();
   
   // --- Response initialization ---
   Response.ContentType = "text/xml";
   Response.Charset = "utf-8";
   Response.AppendHeader("Cache-Control","max-age=1, must-revalidate");
   System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");

   // --- Save data to database ---
   string XML = Request["TGData"];
   if (XML != "" && XML != null)
   {
      System.Xml.XmlDocument X = new System.Xml.XmlDocument();
      X.LoadXml(HttpUtility.HtmlDecode(XML));
      System.Xml.XmlNodeList Ch = X.GetElementsByTagName("Changes");
      if (Ch.Count > 0) foreach (System.Xml.XmlElement I in Ch[0])
      {
         string SQL = "";
         string id = I.GetAttribute("id");
         
         if(I.GetAttribute("Deleted")=="1") SQL = "DELETE FROM TableData WHERE ID=" + id;
         else if(I.GetAttribute("Added")=="1")
         {
            SQL = "INSERT INTO TableData(ID,Project,Resource,Week,Hours) VALUES("
               + id + ","
               + "'" + I.GetAttribute("Project").Replace("'","''") + "'," 
               + "'" + I.GetAttribute("Resource").Replace("'","''") + "'," 
               + I.GetAttribute("Week") + "," 
               + I.GetAttribute("Hours") + ")";
         }
         else if(I.GetAttribute("Changed")=="1")
         {
            SQL = "UPDATE TableData SET ";
            for(int idx=0;idx<I.Attributes.Count;idx++)
            {
               System.Xml.XmlAttribute A = I.Attributes[idx];
               if (A!=null)
               { 
                  string name = A.Name;
                  string val = A.Value;
                  if(name=="Project" || name=="Resource") SQL += name + " = '" + val.Replace("'","''") + "',";
                  else if(name=="Week" || name=="Hours") SQL += name + " = " + val + ",";
               }
            }
            SQL = SQL.TrimEnd(",".ToCharArray()); // Last comma away
            SQL += " WHERE ID=" + id;
         }
         Cmd.CommandText = SQL;
         Cmd.ExecuteNonQuery();  
      }
      Response.Write("<Grid><IO Result='0'/></Grid>");
   }

   // --- Load data from database ---
   else
   {
      Cmd.CommandText = "SELECT * FROM TableData";
      System.Data.OleDb.OleDbDataReader R = Cmd.ExecuteReader();
      Response.Write("<Grid><Body><B>");
      while (R.Read())
      {
         Response.Write("<I id='" + R[0].ToString() + "'"
            + " Project='" + R[1].ToString().Replace("&", "&amp;").Replace("'", "&apos;").Replace("<", "&lt;") + "'"
            + " Resource='" + R[2].ToString().Replace("&", "&amp;").Replace("'", "&apos;").Replace("<", "&lt;") + "'"
            + " Week='" + R[3].ToString() + "'"
            + " Hours='" + R[4].ToString() + "'"
            + "/>");
      }
      Response.Write("</B></Body></Grid>");
   }

   // ---   
   Conn.Close();      
}
// -------------------------------------------------------------------------------------------------------------------------------
</script>
