var editRequestObject;

//var thisScriptURL = "/champions/champion_info.php";
var editScriptURL = "/community/community_edit_xml.php";
var adminScriptURL = "/community/community_admin_xml.php";


var usingAJAX = false;
var currentSection;

function editSection(e, buttonElement)
{
  // Get reference to div containing text
  //buttonElement = (e.srcElement||e.target);
  var element = buttonElement.parentNode;
  var theParent = element.parentNode;
  //alert("theParent: " + theParent.nodeName);
  var fieldType = getChildByID(theParent, "fieldType").value;
  //var fieldName = getChildByID(theParent, "databaseKey").value;

  textDiv = getChildByID(theParent, "data");
  //text = textDiv.firstChild.nodeValue;
  text = textDiv.innerHTML;
  text = text.replace(/^\s+|\s+$/g, "");
  text = text.replace(/<br\/?>/g, "\r\n");
  text = text.replace(/<BR\/?>/g, "\r\n");
  text = text.replace(/<a.*?>(.*?)<\/a>/g, "$1");
  text = text.replace(/<A.*?>(.*?)<\/A>/g, "$1");

  var theClass = textDiv.className;
  //alert("theClass: " + theClass);
  
  // Create new text box
  if(fieldType == "long")
  {
    textBox = document.createElement("textarea");
  }
  else if(fieldType == "short")
  {
    textBox = document.createElement("input");
  }
  textBox.className = theClass;
  textBox.id = "data";
  textBox.value = text;
  
  // Create new buttons
  submitButton = document.createElement("button");
  if(fieldType == "short")
  {
    submitButton.appendChild(document.createTextNode("Submit"));
  }
  else
  {
    submitButton.appendChild(document.createTextNode("Submit changes"));
  }
  cancelButton = document.createElement("button");
  cancelButton.appendChild(document.createTextNode("Cancel"));
  
  element.removeChild(element.getElementsByTagName('button')[0]);
  element.appendChild(submitButton);
  element.appendChild(cancelButton);

  submitButton.onclick = function() { updateSection(arguments[0], this, "submit") };
  cancelButton.onclick = function() { updateSection(arguments[0], this, "cancel") };
  
  theParent.replaceChild(textBox, textDiv);
}

function DatabaseField(sectionDiv)
{
  this.table = "";
  this.idField = "";
  this.idValue = "";
  this.version = "";
  this.keyField = "";
  this.keyValue = "";
  this.mapIDField = "";
  this.mapIDValue = "";
  this.fieldRange = "single"; // Default
  this.field = "";
  this.value = "";

  if(sectionDiv)
  {
    this.table = getChildByID(sectionDiv, "table").value;
    this.idField = getChildByID(sectionDiv, "idField").value;
    this.idValue = getChildByID(sectionDiv, "idValue").value;
    this.version = getChildByID(sectionDiv, "version").value;
    if(getChildByID(sectionDiv, "keyField"))
    {
      this.keyField = getChildByID(sectionDiv, "keyField").value;
      this.keyValue = getChildByID(sectionDiv, "keyValue").value;
    }
    else
    {
      this.keyField = "";
      this.keyValue = "";
    }
    if(getChildByID(sectionDiv, "mapIDField"))
    {
      this.mapIDField = getChildByID(sectionDiv, "mapIDField").value;
      this.mapIDValue = getChildByID(sectionDiv, "mapIDValue").value;
    }
    else
    {
      this.mapIDField = "";
      this.mapIDValue = "";
    }
    this.fieldRange = getChildByID(sectionDiv, "fieldRange").value;
    this.field = getChildByID(sectionDiv, "field").value;
  }
  
  this.getParameterString = function()
  {
    var parameters = "table=" + encodeURIComponent(this.table);
    parameters += "&idField=" + encodeURIComponent(this.idField);
    parameters += "&idValue=" + encodeURIComponent(this.idValue);
    parameters += "&version=" + encodeURIComponent(this.version);
    if(this.keyField)
    {
      parameters += "&keyField=" + encodeURIComponent(this.keyField);
      parameters += "&keyValue=" + encodeURIComponent(this.keyValue);
    }
    if(this.mapIDField)
    {
      parameters += "&mapIDField=" + encodeURIComponent(this.mapIDField);
      parameters += "&mapIDValue=" + encodeURIComponent(this.mapIDValue);
    }
    parameters += "&fieldRange=" + encodeURIComponent(this.fieldRange);
    parameters += "&field=" + encodeURIComponent(this.field);
    
    return parameters;
  }
  
  this.setIDField = function(idField, idValue)
  {
    this.idField = idField;
    this.idValue = idValue;
  }
  
  this.setMapIDField = function(mapIDField, mapIDValue)
  {
    this.mapIDField = mapIDField;
    this.mapIDValue = mapIDValue;
  }
  
  this.setField = function(field, value)
  {
    this.field = field;
    this.value = value;
  }
  
  this.addHiddenInputs = function(element)
  {
    addHiddenInput(element, "table", this.table);
    addHiddenInput(element, "idField", this.idField);
    addHiddenInput(element, "idValue", this.idValue);
    addHiddenInput(element, "version", this.version);
    addHiddenInput(element, "keyField", this.keyField);
    addHiddenInput(element, "keyValue", this.keyValue);
    addHiddenInput(element, "mapIDField", this.mapIDField);
    addHiddenInput(element, "mapIDValue", this.mapIDValue);
    addHiddenInput(element, "fieldRange", this.fieldRange);
    addHiddenInput(element, "field", this.field);
  }
}

function EditableSection(type, dbField)
{
  this.type = type;
  this.dbField = dbField;
  
  this.className = "";
  
  this.getSection = function()
  {
    var sectionDiv = document.createElement("div");
    sectionDiv.id = "editableSection";
    
    var fieldElement = null;
    var buttonText = "Edit";
    if(this.type == "short")
    {
      fieldElement = document.createElement("span");
    }
    else
    {
      buttonText = "Edit this section";
      fieldElement = document.createElement("div");
    }
    fieldElement.id="data";
    fieldElement.className = this.className;
    
    if(this.dbField.value)
    {
      // This is wrong because some data has HTML markup
      //fieldElement.appendChild(document.createTextNode(this.dbField.value));
      // Instead:
      fieldElement.innerHTML = this.dbField.value;
    }
    
    sectionDiv.appendChild(fieldElement);
    
    var buttonsDiv = document.createElement("div");
    buttonsDiv.id = "buttons";
    buttonsDiv.style.textAlign = "right";
    var editButton = document.createElement("button");
    editButton.appendChild(document.createTextNode(buttonText));
    editButton.onclick = function() { editSection(arguments[0], editButton); };
    buttonsDiv.appendChild(editButton);
    
    sectionDiv.appendChild(buttonsDiv);
    
    addHiddenInput(sectionDiv, "fieldType", this.type);
    this.dbField.addHiddenInputs(sectionDiv);
    
    return sectionDiv;
  }
}

function changeImage(e, buttonElement)
{
  // Get reference to div containing image
  var element = buttonElement.parentNode;
  var theParent = element.parentNode;
  var fieldType = getChildByID(theParent, "fieldType").value;
  //var fieldName = getChildByID(theParent, "databaseKey").value;
  /*
  var table = getChildByID(theParent, "idValue").value;
  var idField = getChildByID(theParent, "idField").value;
  var idValue = getChildByID(theParent, "idValue").value;
  var keyField = getChildByID(theParent, "keyField").value;
  var keyValue = getChildByID(theParent, "keyValue").value;
  var field = getChildByID(theParent, "idValue").value;
  */
  var dbField = new DatabaseField(theParent);
  
  var imageElement = getChildByID(theParent, "data");

  var dimDiv = document.createElement("div");
  var dimText = "";
  if(imageElement.getAttribute("width", 2))
  {
    dimText += "Width:" + imageElement.width;
  }
  if(imageElement.getAttribute("height", 2))
  {
    dimText += " Height:" + imageElement.height;
  }
  dimDiv.appendChild(document.createTextNode(dimText));
  dimDiv.style.textAlign = "center";
  dimDiv.style.fontSize = "11px";
  element.appendChild(dimDiv);

  var imageDropDown = document.createElement("select");
  var option = document.createElement("option");
  option.appendChild(document.createTextNode("(None)"));
  option.value = "";
  imageDropDown.appendChild(option);
  imageDropDown.id = "imageDropDown";
  imageDropDown.style.width = "100%";
  element.appendChild(imageDropDown);

  element.appendChild(document.createElement("br"));
  
  submitButton = document.createElement("button");
  submitButton.appendChild(document.createTextNode("Switch to this file"));
  element.appendChild(submitButton);
  
  // Create file browser form
  var form = document.createElement("form");
  element.appendChild(form);

  form.action = editScriptURL;
  form.method = "post";
  form.encoding = "multipart/form-data";
  
  var fileDiv = document.createElement("div");
  fileDiv.style.textAlign = "left";

  addHiddenInput(form, "MAX_FILE_SIZE", "256468");

  var fileField = document.createElement("input");
  fileField.type = "file";
  fileField.name = "file";
  fileField.style.width = "180px";
  fileDiv.appendChild(fileField);
  form.appendChild(fileDiv);
  
  addHiddenInput(form, "requestType", "upload_image_file");
  addHiddenInput(form, "table", dbField.table);
  addHiddenInput(form, "idField", dbField.idField);
  addHiddenInput(form, "idValue", dbField.idValue);
  addHiddenInput(form, "version", dbField.version);
  addHiddenInput(form, "field", dbField.field);
  if(dbField.keyField)
  {
    addHiddenInput(form, "keyField", dbField.keyField);
    addHiddenInput(form, "keyValue", dbField.keyValue);
  }
  if(dbField.mapIDField)
  {
    addHiddenInput(form, "mapIDField", dbField.mapIDField);
    addHiddenInput(form, "mapIDValue", dbField.mapIDValue);
  }

  /*var fieldNameField = document.createElement("input");
  fieldNameField.type = "hidden";
  fieldNameField.name = "sectionName";
  fieldNameField.value = fieldName;
  form.appendChild(fieldNameField);*/

  uploadButton = document.createElement("input");
  uploadButton.type = "submit";
  uploadButton.name = "submit";
  uploadButton.value = "Upload new image";
  form.appendChild(uploadButton);

  form.onsubmit = function() { return AIM.submit(this, {'onStart' : startCallback, 'onComplete' : completeCallback}) };

  // Create new buttons
  cancelButton = document.createElement("button");
  cancelButton.appendChild(document.createTextNode("Cancel"));
  
  element.removeChild(element.getElementsByTagName('button')[0]);
  element.appendChild(cancelButton);

  submitButton.onclick = function() { updateSection(arguments[0], this, "submit") };
  cancelButton.onclick = function() { updateSection(arguments[0], this, "cancel") };

  editRequestObject = getXmlHttpObject();
  if (editRequestObject == null)
  {
    alert("Browser does not support HTTP Request");
    return;
  }

  // Construct URL for request, including parameters, and send via XMLHTTPRequest object
  var requestURL = editScriptURL;
  requestURL += "?requestType=get_image_list";
  requestURL += "&" + dbField.getParameterString();
  requestURL += "&sid=" + Math.random();

  if(usingAJAX)
  {
    alert("Can only update one field at a time.");
    return;
  }
  else
  {
    usingAJAX = true;
    currentSection = theParent;
  }

  editRequestObject.onreadystatechange = editRequestStateChanged;
  document.getElementById("debugDisplay").innerHTML += "<br/>" + requestURL;
  editRequestObject.open("GET", requestURL, true);
  editRequestObject.send(null);
}

function addHiddenInput(parentElement, name, value)
{
  var hiddenInput = document.createElement("input");
  hiddenInput.type = "hidden";
  hiddenInput.name = name;
  hiddenInput.id = name;
  hiddenInput.value = value;
  parentElement.appendChild(hiddenInput);
}

function populateImageDropDown(rootElement)
{
  var dropDown = getChildByID(currentSection, "imageDropDown");
  var imageElement = getChildByID(currentSection, "data");
  
  var currentImageURL = decodeURI(imageElement.src);
    
  var elements = rootElement.getElementsByTagName("image");
  for(var i = 0; i < elements.length; i++)
  {
    var thisImageURL = getTextFromXMLElement(elements.item(i));
    if(thisImageURL)
    {
      var thisImageURLTrimmed = thisImageURL.replace(/.*\//, "");
      var thisOption = document.createElement("option");
      
      thisOption.appendChild(document.createTextNode(thisImageURLTrimmed));
      thisOption.value = thisImageURL;
      
      dropDown.appendChild(thisOption);

      if(currentImageURL.search(new RegExp(thisImageURL + "$")) != -1)
      {
        thisOption.selected = true;
      }
    }
  }
  
}

function updateSection(e, buttonElement, mode)
{
  // Get reference to textarea containing text
  var element = buttonElement.parentNode;
  var theParent = element.parentNode;
  var fieldType = getChildByID(theParent, "fieldType").value;
  var dbField = new DatabaseField(theParent);
  var text;
  if(fieldType == "image")
  {
    if(mode == "cancel")
    {
      // Original image will still be there so don't need to go to the database
      element.innerHTML = "";
      var editButton = document.createElement("button");
      var editButtonText = "Change image";
      editButton.appendChild(document.createTextNode(editButtonText));
      element.appendChild(editButton);
      
      editButton.onclick = function() { changeImage(arguments[0], this) };
      return;
    }
    var imageDropDown = getChildByID(theParent, "imageDropDown");
    text = imageDropDown.options[imageDropDown.selectedIndex].value;
  }
  else
  {
    textBox = getChildByID(theParent, "data");
    if(fieldType == "dropdown")
    {
      text = textBox.options[textBox.selectedIndex].value;
    }
    else if(fieldType == "multi-dropdown")
    {
      text = "";
      for(thisOptionIndex = 0; thisOptionIndex < textBox.options.length; thisOptionIndex++)
      {
        var thisOption = textBox.options[thisOptionIndex];
        if(thisOption.selected == true)
        {
          if(text != "")
          {
            text += "+";
          }
          text += thisOption.value;
        }
      }
    }
    else
    {
      text = textBox.value;
      text = processText(text);
    }
    //alert("text: " + text);
  }
  
  /*  
  var sectionName = getChildByID(theParent, "databaseKey").value;
  var tableName = getChildByID(theParent, "databaseTable").value;
  var subfieldName;
  if(tableName == "MEMBER_IMAGE")
    subfieldName = getChildByID(theParent, "databaseField").value;
  //alert("sectionName: " + sectionName);
  */
  
  var requestType;
  if(mode == "submit")
    requestType = "change_section";
  else
    requestType = "get_section";
  
  editRequestObject = getXmlHttpObject();
  if (editRequestObject == null)
  {
    alert("Browser does not support HTTP Request");
    return;
  }

  // Construct URL for request, including parameters, and send via XMLHTTPRequest object
  var requestURL = editScriptURL;
  var requestParameters = "requestType=" + requestType;
  requestParameters += "&fieldType=" + encodeURIComponent(fieldType);
  requestParameters += "&" + dbField.getParameterString();
  if(mode == "submit")
    requestParameters += "&sectionValue=" + encodeURIComponent(text);
  requestParameters += "&sid=" + Math.random();


  if(usingAJAX)
  {
    alert("Can only update one field at a time.");
    return;
  }
  else
  {
    usingAJAX = true;
    currentSection = theParent;
  }

  editRequestObject.onreadystatechange = editRequestStateChanged;
  document.getElementById("debugDisplay").innerHTML += "<br/>" + requestURL;
  editRequestObject.open("POST", requestURL, true);
  editRequestObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  editRequestObject.setRequestHeader("Content-length", requestParameters.length);
  editRequestObject.setRequestHeader("Connection", "close");
  editRequestObject.send(requestParameters);
}

function processText(text)
{
  text = text.replace(/(\r\n|\r|\n)/g, "<br/>");
  return text;
}

function startCallback()
{
}

function completeCallback(response)
{
  // Trim off the 'blah' we put at the beginning to stop the crap browser (IE) from trying to style this as XML
  // and change tag names to lower case (as IE has a tendency to change them to upper case)
  //alert(response);
  document.getElementById("debugDisplay").innerHTML += "<br/>Response from xmlHttp:" + response;
  response = response.replace(/<([\/]?[\w]+?)>/g, function(a,x){ return ('<'+x.toLowerCase()+'>'); } )
  if(response.indexOf("<response>") < 0)
  {
    alert("Couldn't find <response> tag: response was: " + response);
    return;
  }
  response = response.substring(response.indexOf("<response>"));
  //response = response.replace(/<([\/]?[\w]+?)>/g, function(a,x){ return ('<'+x.toLowerCase()+'>'); } )
  //alert("Response:"+response);
  //document.getElementById("debugDisplay").innerHTML += "<br/>Response from xmlHttp:" + response;
  
  // Parse the XML
  var xmlDoc = loadXMLString(response);
  var rootElement = xmlDoc.documentElement;
  // Check success of operation
  var success = getTextFromXMLElement(rootElement.getElementsByTagName("success").item(0));
  if(success == "false")
  {
    var message = getTextFromXMLElement(rootElement.getElementsByTagName("message").item(0));
    alert("Operation failed: " + message);
  }
  else
  {
    var filename = getTextFromXMLElement(rootElement.getElementsByTagName("filename").item(0));
    var image = getChildByID(currentSection, "data");
    image.src = filename;
    
    element = getChildByID(currentSection, "buttons");
    element.innerHTML = "";
    //element.removeChild(element.getElementsByTagName('button')[0]);
    //element.removeChild(element.getElementsByTagName('button')[0]);
    var editButton = document.createElement("button");
    var editButtonText = "Change image";
    editButton.appendChild(document.createTextNode(editButtonText));
    element.appendChild(editButton);
    
    editButton.onclick = function() { changeImage(arguments[0], this) };
  }
}

function editRequestStateChanged() 
{ 
  if (editRequestObject.readyState==4 || editRequestObject.readyState=="complete")
  {
    usingAJAX = false;
    //alert("Response from xmlHttp:" + editRequestObject.responseText);
    document.getElementById("debugDisplay").innerHTML += "<br/>Response from xmlHttp:" + editRequestObject.responseText;
    
    var xmlDoc = loadXMLString(editRequestObject.responseText);
    var rootElement = xmlDoc.documentElement;
    
    var requestType = getTextFromXMLElement(rootElement.getElementsByTagName("requestType").item(0));
    //alert(requestType);
    if(requestType == "create_new_draft")
    {
      // Draft created, so refresh page
      var newURL = thisScriptURL + "?id=" + id + "&version=Draft";
      //alert("selectStatus: " + newURL);
      document.location.href = newURL;
    }
    else if(requestType == "submit_draft")
    {
      // Check success of operation
      var success = getTextFromXMLElement(rootElement.getElementsByTagName("success").item(0));
      if(success == "false")
      {
        var message = getTextFromXMLElement(rootElement.getElementsByTagName("message").item(0));
        alert("Operation failed: " + message);
      }
      else
      {
        // Draft submitted, so refresh page
        var newURL = thisScriptURL + "?id=" + id + "&version=SubmittedDraft";
        //alert("selectStatus: " + newURL);
        document.location.href = newURL;
      }
    }
    else if(requestType == "publish_draft")
    {
      // Check success of operation
      var success = getTextFromXMLElement(rootElement.getElementsByTagName("success").item(0));
      if(success == "false")
      {
        var message = getTextFromXMLElement(rootElement.getElementsByTagName("message").item(0));
        alert("Operation failed: " + message);
      }
      else
      {
        // Draft published, so refresh page
        var newURL = thisScriptURL + "?id=" + id + "&version=Publish";
        //alert("selectStatus: " + newURL);
        document.location.href = newURL;
      }
    }
    else if(requestType == "reject_draft")
    {
      // Check success of operation
      var success = getTextFromXMLElement(rootElement.getElementsByTagName("success").item(0));
      if(success == "false")
      {
        var message = getTextFromXMLElement(rootElement.getElementsByTagName("message").item(0));
        alert("Operation failed: " + message);
      }
      else
      {
        // Draft rejected (version goes back to 'Draft'), so refresh page
        var newURL = thisScriptURL + "?id=" + id + "&version=Draft";
        //alert("selectStatus: " + newURL);
        document.location.href = newURL;
      }
    }
    else if(requestType == "get_image_list")
    {
      populateImageDropDown(rootElement);
    }
    else
    {
      // Field has been updated or edit cancelled
      var text = getTextFromXMLElement(rootElement.getElementsByTagName("value").item(0));
      if(!text)
      {
        text = "";
      }
      var fieldType = getChildByID(currentSection, "fieldType").value;
      //var fieldStyle = getChildByID(currentSection, "fieldStyle").value;
      //var fieldClass = getChildByID(currentSection, "fieldClass").value;
      var updatedField = getChildByID(currentSection, "data");
      var theClass = updatedField.className;
      //alert("theClass: " + theClass);
      
      if(fieldType == "image")
      {
        updatedField.src = text;
      }
      else if(fieldType == "dropdown")
      {
        // Value should be already selected, but we search the options for value matching 'text' and
        // select that option, just in case
        for(thisOptionIndex = 0; thisOptionIndex < updatedField.options.length; thisOptionIndex++)
        {
          var thisOption = updatedField.options[thisOptionIndex];
          if(thisOption.value == text)
          {
            thisOption.selected = true;
          }
        }
      }
      else if(fieldType == "multi-dropdown")
      {
        // Values should be already selected, but we search the options for values matching those returned
        // and select them, just in case
        var values = new Array();
        var valueElements = rootElement.getElementsByTagName("value");
        for(thisValueIndex = 0; thisValueIndex < valueElements.length; thisValueIndex++)
        {
          var thisValue = getTextFromXMLElement(valueElements.item(thisValueIndex));
          values[thisValue] = thisValue;
        }
        
        for(thisOptionIndex = 0; thisOptionIndex < updatedField.options.length; thisOptionIndex++)
        {
          var thisOption = updatedField.options[thisOptionIndex];
          if(typeof values[thisOption.value] != 'undefined')
          {
            thisOption.selected = true;
          }
          else
          {
            thisOption.selected = false;
          }
        }
      }
      else
      {
        if(fieldType == "long")
        {
          var textDiv = document.createElement("div");
        }
        else if(fieldType == "short")
        {
          var textDiv = document.createElement("span");
        }
        textDiv.id = "data";
        textDiv.className = theClass;
        //textDiv.className = "style_normal_text";
        //textDiv.appendChild(document.createTextNode(text));
        textDiv.innerHTML = text;
        currentSection.replaceChild(textDiv, updatedField);
      }
      
      if(fieldType == "dropdown" || fieldType == "multi-dropdown")
      {
        alert("Update completed");
      }
      else
      {
        // Switch buttons back to original state (from 'submit' + 'cancel' to 'edit')
        element = getChildByID(currentSection, "buttons");
        element.innerHTML = "";
        //element.removeChild(element.getElementsByTagName('button')[0]);
        //element.removeChild(element.getElementsByTagName('button')[0]);
        var editButton = document.createElement("button");
        var editButtonText = "Edit";
        if(fieldType == "long")
        {
          editButtonText = "Edit this section";
        }
        else if(fieldType == "image")
        {
          editButtonText = "Change image";
        }
        editButton.appendChild(document.createTextNode(editButtonText));
        element.appendChild(editButton);
        
        if(fieldType == "image")
        {
          editButton.onclick = function() { changeImage(arguments[0], this) };
        }
        else
        {
          editButton.onclick = function() { editSection(arguments[0], this) };
        }
      }
    }
  }
}

function getChildByID(element, id)
{
  var children = element.getElementsByTagName("*");
  for(var i = 0; i < children.length; i++)
  {
    if(children[i].id == id)
      return children[i];
  }
}

function getTextFromXMLElement(element)
{
  if(element.textContent)
  {
    return element.textContent;
  }
  else
  {
    // For once I agree with IE on this one
    return element.text;
  }
}

function getXmlHttpObject()
{ 
  var xmlHttpObject = null;
  if (window.XMLHttpRequest)
  {
    xmlHttpObject = new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
    xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
  }
  return xmlHttpObject;
}

function selectStatus()
{
  var statusDropdown = document.getElementById("selectStatusDropdown");
  var newStatus = statusDropdown.options[statusDropdown.selectedIndex].value;
  
  var newURL = thisScriptURL + "?id=" + id + "&version=" + newStatus;
  //alert("selectStatus: " + newURL);
  document.location.href = newURL;
}

function createNewDraft()
{
  editRequestObject = getXmlHttpObject();
  if (editRequestObject == null)
  {
    alert("Browser does not support HTTP Request");
    return;
  }

  // Construct URL for request, including parameters, and send via XMLHTTPRequest object
  var requestURL = editScriptURL;
  requestURL += "?requestType=create_new_draft";
  if(pageType == "member")
  {
    requestURL += "&idField=Member_ID";
    requestURL += "&idValue=" + encodeURIComponent(memberID);
  }
  else if(pageType == "project")
  {
    requestURL += "&idField=Project_ID";
    requestURL += "&idValue=" + encodeURIComponent(projectID);
  }
  requestURL += "&sid=" + Math.random();

  if(usingAJAX)
  {
    alert("You can only perform one update at a time.");
    return;
  }
  else
  {
    usingAJAX = true;
  }

  editRequestObject.onreadystatechange = editRequestStateChanged;
  document.getElementById("debugDisplay").innerHTML += "<br/>" + requestURL;
  editRequestObject.open("GET", requestURL, true);
  editRequestObject.send(null);
  
}

function submitDraft()
{
  editRequestObject = getXmlHttpObject();
  if (editRequestObject == null)
  {
    alert("Browser does not support HTTP Request");
    return;
  }
  
  // Construct URL for request, including parameters, and send via XMLHTTPRequest object
  var requestURL = editScriptURL;
  requestURL += "?requestType=submit_draft";
  if(pageType == "member")
  {
    requestURL += "&idField=Member_ID";
    requestURL += "&idValue=" + encodeURIComponent(memberID);
  }
  else if(pageType == "project")
  {
    requestURL += "&idField=Project_ID";
    requestURL += "&idValue=" + encodeURIComponent(projectID);
  }
  requestURL += "&sid=" + Math.random();
  
  if(usingAJAX)
  {
    alert("You can only perform one update at a time.");
    return;
  }
  else
  {
    usingAJAX = true;
  }

  var answer = confirm("Are you sure you want to submit this page for publication?");
  if(!answer)
  {
    usingAJAX = false;
    return;
  }

  editRequestObject.onreadystatechange = editRequestStateChanged;
  document.getElementById("debugDisplay").innerHTML += "<br/>" + requestURL;
  editRequestObject.open("GET", requestURL, true);
  editRequestObject.send(null);
}

function publishDraft()
{
  editRequestObject = getXmlHttpObject();
  if (editRequestObject == null)
  {
    alert("Browser does not support HTTP Request");
    return;
  }

  if(usingAJAX)
  {
    alert("You can only perform one update at a time.");
    return;
  }
  else
  {
    usingAJAX = true;
  }

  var answer = confirm("Are you sure you want to publish this submitted page?");
  if(!answer)
  {
    usingAJAX = false;
    return;
  }

  var requestURL = adminScriptURL;
  requestURL += "?requestType=publish_draft";
  if(pageType == "member")
  {
    requestURL += "&idField=Member_ID";
    requestURL += "&idValue=" + encodeURIComponent(memberID);
  }
  else if(pageType == "project")
  {
    requestURL += "&idField=Project_ID";
    requestURL += "&idValue=" + encodeURIComponent(projectID);
  }
  requestURL += "&version=" + encodeURIComponent(version);
  requestURL += "&sid=" + Math.random();

  editRequestObject.onreadystatechange = editRequestStateChanged;
  document.getElementById("debugDisplay").innerHTML += "<br/>" + requestURL;
  editRequestObject.open("GET", requestURL, true);
  editRequestObject.send(null);
  
}

function toggleRejectionForm(rejectButton)
{
  var rejectionForm = document.getElementById("rejectionForm");
  if(rejectionForm.style.display == "none")
  {
    rejectionForm.style.display = "block";
    rejectButton.innerHTML = "Hide rejection form"
  }
  else
  {
    rejectionForm.style.display = "none";
    rejectButton.innerHTML = "Reject"
  }
}

function rejectDraft()
{
  editRequestObject = getXmlHttpObject();
  if (editRequestObject == null)
  {
    alert("Browser does not support HTTP Request");
    return;
  }

  if(usingAJAX)
  {
    alert("You can only perform one update at a time.");
    return;
  }
  else
  {
    usingAJAX = true;
  }

  var answer = confirm("Are you sure you want to reject this submitted page?");
  if(!answer)
  {
    usingAJAX = false;
    return;
  }
  
  var rejectionReason = ""
  var rejectionTextbox = document.getElementById("rejectionText");
  if(rejectionTextbox)
  {
    rejectionReason = rejectionTextbox.value;
  }

  var requestURL = adminScriptURL;
  requestURL += "?requestType=reject_draft";
  if(pageType == "member")
  {
    requestURL += "&idField=Member_ID";
    requestURL += "&idValue=" + encodeURIComponent(memberID);
  }
  else if(pageType == "project")
  {
    requestURL += "&idField=Project_ID";
    requestURL += "&idValue=" + encodeURIComponent(projectID);
  }
  requestURL += "&version=" + encodeURIComponent(version);
  requestURL += "&reason=" + encodeURIComponent(rejectionReason);
  requestURL += "&sid=" + Math.random();
  
  editRequestObject.onreadystatechange = editRequestStateChanged;
  document.getElementById("debugDisplay").innerHTML += "<br/>" + requestURL;
  editRequestObject.open("GET", requestURL, true);
  editRequestObject.send(null);
}

/**
*
*  AJAX IFRAME METHOD (AIM)
*  http://www.webtoolkit.info/
*
**/
 
AIM = {
 
	frame : function(c) {
    //alert("frame called");
		var n = 'f' + Math.floor(Math.random() * 99999);
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
		document.body.appendChild(d);
 
		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = c.onComplete;
		}
 
		return n;
	},
 
	form : function(f, name) {
    //alert("form called with name " + name);
		f.setAttribute('target', name);
	},
 
	submit : function(f, c) {
    //alert("submit called");
		AIM.form(f, AIM.frame(c));
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart();
		} else {
			return true;
		}
	},
 
	loaded : function(id) {
		var i = document.getElementById(id);
		if (i.contentDocument) {
			var d = i.contentDocument;
		} else if (i.contentWindow) {
			var d = i.contentWindow.document;
		} else {
			var d = window.frames[id].document;
		}
		if (d.location.href == "about:blank") {
			return;
		}
 
		if (typeof(i.onComplete) == 'function') {
			i.onComplete(d.body.innerHTML);
		}
	}
 
}

function loadXMLString(txt) 
{
  try //Firefox, Mozilla, Opera, etc.
  {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(txt,"text/xml");
    return xmlDoc;
  }
  catch(e)
  {
    try //Internet Explorer, a piece of crap written by morons
    {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async="false";
      xmlDoc.loadXML(txt);
      return xmlDoc; 
    }
    catch(e) {alert(e.message)}
  }
  return null;
}
