var editing;

function getObj(name) {
  if (document.getElementById) {
    this.obj   = document.getElementById(name);
    this.style = document.getElementById(name).style;
  } else if (document.all) {
    this.obj   = document.all[name];
    this.style = document.all[name].style;
  } else if (document.layers) {
    this.obj   = document.layers[name];
    this.style = document.layers[name];
  }
}

function load_page(url, redir, response, method, post_str) {
  if ((response != "") && (response != "document")) {
    var responseObj = new getObj(response);
    var loadingObj  = new getObj('loading');
    loadingObj.style.display = "";
  }

  var http_req;
  editing = false;

  try {                                           // Firefox, Opera 8.0+, Safari
    http_req = new XMLHttpRequest();
  } catch (e) {                                   // Internet Explorer
    try {
      http_req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        alert ("Your browser does not support HTTP Request - Please enable javascript or update your browser");
      }
    }
  }

  http_req.onreadystatechange = function() {
    if (http_req.readyState == 4 || http_req.readyState == "complete")  {
      if (response != "" && redir == "") {
        if (response == "document") {
          document.write(http_req.responseText);
        } else {
          responseObj.obj.innerHTML = http_req.responseText;
          loadingObj.style.display = "none";
        }

      } else if (response != "" && redir != "") {
        load_page(redir, "", response, "GET", "");
      }
    }
  }

  http_req.open(method, url, true);

  if (method == "POST") {
    http_req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_req.setRequestHeader("Content-length", post_str.length);
    http_req.setRequestHeader("Connection", "close");
    http_req.send(post_str);
  } else if (method == "GET") {
    http_req.send(null);
  }
}

function quick_load(url, response) {
  load_page(url, "", response, "GET", "");
}

/* ---------------------- FORM/INPUT MANIPULATION ---------------------- */
function process_onchange(tag, url, response) {
  var tagObj = document.getElementById(tag);
//  var tagObj = getObj(tag);

  if (tagObj.tagName == "INPUT") {
    if ((tagObj.type == "text") || (tagObj.type == "hidden")) {
      if ((tagObj.value != "")     &&
          (tagObj.value != "null") &&
          (tagObj.value != "NULL")) {
        if (url.indexOf('?') == -1)
          url += "?";
        else
          url += "&";

        url += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.value);
        quick_load(url, response);

      } else {
        return;
      }
    }

  } else if (tagObj.tagName == "SELECT"){
    if ((tagObj.options[tagObj.selectedIndex].value != "null") &&
        (tagObj.options[tagObj.selectedIndex].value != "NULL") &&
        (tagObj.options[tagObj.selectedIndex].value != "")) {
      if (url.indexOf('?') == -1)
        url += "?";
      else
        url += "&";

      url += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.options[tagObj.selectedIndex].value);
      quick_load(url, response);

    } else {
      return;
    }
  }
}

function process_edit(tag, url, response) {
  var tagObj = document.getElementById(tag);
//  var tagObj = getObj(tag);
  var str = "";

  if (tagObj.tagName == "INPUT") {
    if (tagObj.type == "text") {
      str += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.value) + "&";
    } else if (tagObj.type == "password") {
      str += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.value) + "&";
    } else if (tagObj.type == "hidden") {
      str += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.value) + "&";
    } else if (tagObj.type == "checkbox") {
      if (tagObj.checked)
        str += escape(tagObj.name) + "=1&";
      else
        str += escape(tagObj.name) + "=0&";
    } else if (tagObj.type == "radio") {
      if (tagObj.checked)
        str += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.value) + "&";
    }
  } else if (tagObj.tagName == "SELECT") {
    str += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.options[tagObj.selectedIndex].value) + "&";
    str += "selectdata=" + encodeURIComponent(tagObj.options[tagObj.selectedIndex].text) + "&";
  } else if (tagObj.tagName == "TEXTAREA") {
    str += escape(tagObj.name) + "=" + encodeURIComponent(tagObj.value) + "&";
  }

  if (url.indexOf('?') == -1)
    url += "?" + str;
  else
    url += "&" + str;

  load_page(url, "", response, "GET", "");
}

function process_form(form, url, redir, response, method) {
  var formObj = document.getElementById(form);
//  var formObj = getObj(form);

  if (method == "GET") {
    var get_str = "";

    for (i = 0; i < formObj.length; i++) {
      if (formObj.elements[i].tagName == "INPUT") {
        if (formObj.elements[i].type == "text") {
          get_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        } else if (formObj.elements[i].type == "password") {
          get_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        } else if (formObj.elements[i].type == "hidden") {
          get_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        } else if (formObj.elements[i].type == "checkbox") {
          if (formObj.elements[i].checked)
            get_str += escape(formObj.elements[i].name) + "=1&";
          else
            get_str += escape(formObj.elements[i].name) + "=0&";
        } else if (formObj.elements[i].type == "radio") {
          if (formObj.elements[i].checked)
            get_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        }
      } else if (formObj.elements[i].tagName == "SELECT") {
        get_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].options[formObj.elements[i].selectedIndex].value) + "&";
      } else if (formObj.elements[i].tagName == "TEXTAREA") {
        get_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
      }
    }

    if (url.indexOf('?') == -1)
      url += "?" + get_str;
    else
      url += "&" + get_str;

  } else if (method == "POST") {
    var post_str = "";

    for (i = 0; i < formObj.length; i++) {
      if (formObj.elements[i].tagName == "INPUT") {
        if (formObj.elements[i].type == "text") {
          post_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        } else if (formObj.elements[i].type == "checkbox") {
          if (formObj.elements[i].checked)
            post_str += escape(formObj.elements[i].name) + "=1&";
          else
            post_str += escape(formObj.elements[i].name) + "=0&";
        } else if (formObj.elements[i].type == "hidden") {
          post_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        } else if (formObj.elements[i].type == "password") {
          post_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        } else if (formObj.elements[i].type == "radio") {
          if (formObj.elements[i].checked)
            post_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
        }
      } else if (formObj.elements[i].tagName == "SELECT") {
        post_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].options[formObj.elements[i].selectedIndex].value) + "&";
      } else if (formObj.elements[i].tagName == "TEXTAREA") {
        post_str += escape(formObj.elements[i].name) + "=" + encodeURIComponent(formObj.elements[i].value) + "&";
      }
    }
  }

  load_page(url, redir, response, method, post_str);
}

/* ------------------------- RECORD MANIPULATION ------------------------- */
function delete_record(url, redir, response) {
  var confirm_delete = confirm("Are you sure you want to delete this record?");

  if (confirm_delete == true) {
    load_page(url, redir, response, "GET", "");
    return true;

  } else {
    return false;
  }
}

/* ----------------------------- SUGGESTIONS ---------------------------- */
function suggest(db, table, field, tag, id) {
  var tagObj = document.getElementById(tag);
  var url    =  "/v3/lib/suggest.php?db="    + encodeURIComponent(db) + 
                                   "&table=" + encodeURIComponent(table) + 
                                   "&field=" + encodeURIComponent(field) + 
                                   "&value=" + encodeURIComponent(tagObj.value) + 
                                   "&id="    + encodeURIComponent(id) + 
                                   "&tag="   + encodeURIComponent(tag);
  quick_load(url, tag + '_suggest');
}

function set_suggest(response, value, id) {
  var responseObj   = document.getElementById(response);
  responseObj.value = value;

  if (id != "") {
    var responseIdObj   = document.getElementById(response + "_id");
    responseIdObj.value = id;
  }
}

