var http_request = false;
var thisTargetObject = false;
var evalReturn = false;
var ajaxRequestVar = "ajax"; // The variable that indicates to the SERVER script that it is receiving an ajax request.

function displayError(errorMessage) {
  window.alert(errorMessage);
}

function loadingAnimation(targetId) {
  if (document.images) {
    pic1= new Image(100,100);
    pic1.src="core/resources/images/global/loading.gif";
  }
  document.getElementById(targetId).innerHTML = "<center><img id='ajaxLoadImg' src='core/resources/images/global/loading.gif' alt='loading' style='vertical-align:middle;'/></center>";
}

function alertContents() {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      result = http_request.responseText;
      if (evalReturn == true) {
        start = (result.indexOf("<script type=\"text/javascript\">") + 31);
        end = (result.indexOf("</script>",start));
        evalString = result.slice(start,end);
        if (start && end && start != end && (start < end)) {
          eval(evalString);
        }
      }
	  if (thisTargetObject) {
        document.getElementById(thisTargetObject).innerHTML = result;
	  }
	  return result;
    } else {
      displayError("There was a problem with the request.");
    }
  }
}

function ajaxPostExecute(targetObject, url, parameters) {
  http_request = false;
  thisTargetObject = targetObject;
  loadingAnimation(thisTargetObject);
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/html');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    displayError('Cannot create XMLHTTP instance');
    return false;
  }
  http_request.onreadystatechange = alertContents;
  http_request.open('POST', url, true);
  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http_request.setRequestHeader("Content-length", parameters.length);
  http_request.setRequestHeader("Connection", "close");
  http_request.send(parameters);
}

function ajaxPost(fromForm, targetObject, targetPage) {
  var getstr = "";

  obj = document.getElementById(fromForm).getElementsByTagName('input');
  for (i = 0; i < obj.length; i++) {
    if (obj[i].type == "text") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "password") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "hidden") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "button") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "file") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "image") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "reset") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "submit") {
      getstr += obj[i].name + "=" + obj[i].value + "&";
    }
    if (obj[i].type == "checkbox") {
      if (obj[i].checked) {
        getstr += obj[i].name + "=" + obj[i].value + "&";
      } else {
        getstr += obj[i].name + "=&";
      }
    }
    if (obj[i].type == "radio") {
      if (obj[i].checked) {
        getstr += obj[i].name + "=" + obj[i].value + "&";
      }
    }
  }
  
  getstr += ajaxRequestVar + "=1&";

  obj = document.getElementById(fromForm).getElementsByTagName('textarea');
  for (i = 0; i < obj.length; i++) {
    getstr += obj[i].name + "=" + encodeURI(obj[i].value) + "&";
  }

  obj = document.getElementById(fromForm).getElementsByTagName('select');
  for (i = 0; i < obj.length; i++) {
    getstr += obj[i].name + "=" + obj[i].options[obj[i].selectedIndex].value + "&";
  }

  ajaxPostExecute(targetObject, targetPage, getstr);
}

function ajaxGet(targetObject, targetPage, eval) {
  //alert("TargetElement: " + targetObject + " | " + "TargetPage: " + targetPage + " | " + "Eval: " + eval); // for Debugging purposes
  thisTargetObject = targetObject;
  loadingAnimation(targetObject);
  evalReturn = eval;
  // Determine how to format query for ajax=1 get variable
  targetFormat1 = targetPage.indexOf("?");
  targetFormat2 = targetPage.indexOf("=");
  if(targetFormat1 == -1) {targetFormat1 = false;}
  if(targetFormat2 == -1) {targetFormat2 = false;}
  if (targetFormat1 && !targetFormat2) {
    alert("here1!");
    targetPage += ajaxRequestVar + "=1";
  } else if (targetFormat2 && targetFormat1) {
	tLength = targetPage.length;
	if(targetPage.charAt(tLength-1) == "&") {
	  targetPage += ajaxRequestVar + "=1";
	} else {
      targetPage += "&" + ajaxRequestVar + "=1";
	}
  } else {
    targetPage += "?" + ajaxRequestVar + "=1";
  }
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/html');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    displayeError('Cannot create XMLHTTP instance');
    return false;
  }
  http_request.onreadystatechange = alertContents;
  http_request.open("GET", targetPage, true);
  http_request.send(null);
}