function $() 
{
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1) 
      return element;

    elements.push(element);
  }
  return elements;
}

//Ajax Start

function Ajax_GetXMLHttpRequest() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else {
    if (window.Ajax_XMLHttpRequestProgID) {
      return new ActiveXObject(window.Ajax_XMLHttpRequestProgID);
    } else {
      var progIDs = ["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
      for (var i = 0; i < progIDs.length; ++i) {
	      var progID = progIDs[i];
	      try {
		      var x = new ActiveXObject(progID);
		      window.Ajax_XMLHttpRequestProgID = progID;
		      return x;
	      } catch (e) {
	      }
      }
    }
  }
  return null;
}

function Ajax_CallBack(type, id, method, args, clientCallBack, debugRequestText, debugResponseText, debugErrors, includeControlValuesWithCallBack, url) {
	
  if (!url)
  {
    url = window.location.href;
    url = url.replace(/\#.*$/, '');
    if (url.indexOf('?') > -1)
      url += "&Ajax_CallBack=true";
    else
    {
      if (url.substr(url.length - 1, 1) == "/")
	      url += "default.aspx";
				
      url += "?Ajax_CallBack=true";
    }
  }

  var x = Ajax_GetXMLHttpRequest();
  var result = null;
  if (!x) {
    result = { "value":null, "error": "NOXMLHTTP"};
    if (debugErrors) {
      alert("error: " + result.error);
    }
    if (clientCallBack) {
      clientCallBack(result);
    }
    return result;
  }

  x.open("POST", url, clientCallBack ? true : false);
  x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
  if (clientCallBack) {
    x.onreadystatechange = function() {
      var result = null;
		
      if (x.readyState != 4) {
	      return;
      }
			
      if (debugResponseText) {
	      alert(x.responseText);
      }
			
      try
      {
	      var result = eval("(" + x.responseText + ")");
	      if (debugErrors && result.error) {
		      alert("error: " + result.error);
	      }
      }
      catch (err)
      {
	      if (window.confirm('The following error occured while processing an AJAX request: ' + err.message + '\n\nWould you like to see the response?'))
	      {
		      var w = window.open();
		      w.document.open('text/plain');
		      w.document.write(x.responseText);
		      w.document.close();
	      }
				
	      result = new Object();
	      result.error = 'An AJAX error occured.  The response is invalid.';
      }
			
      clientCallBack(result);			
    }
  }
  var encodedData = "Ajax_CallBackType=" + type;
  if (id) {
    encodedData += "&Ajax_CallBackID=" + id.split("$").join(":");
  }
  encodedData += "&Ajax_CallBackMethod=" + method;
  if (args) {
    for (var i in args) {
      encodedData += "&Ajax_CallBackArgument" + i + "=" + encodeURIComponent(args[i]);
    }
  }
  if (includeControlValuesWithCallBack && document.forms.length > 0) {
    var form = document.getElementById('aspnetForm');
    for (var i = 0; i < form.length; ++i) {
      var element = form.elements[i];
      if (element.name) {
	      var elementValue = null;
	      if (element.nodeName == "INPUT") {
		      var inputType = element.getAttribute("TYPE").toUpperCase();
		      if (inputType == "TEXT" || inputType == "PASSWORD" || inputType == "HIDDEN") {
			      elementValue = element.value;
		      } else if (inputType == "CHECKBOX" || inputType == "RADIO") {
			      if (element.checked) {
				      elementValue = element.value;
			      }
		      }
	      } else if (element.nodeName == "SELECT") {
		      elementValue = element.value;
	      } else if (element.nodeName == "TEXTAREA") {
		      elementValue = element.value;
	      }
	      if (elementValue) {
		      encodedData += "&" + element.name + "=" + encodeURIComponent(elementValue);
	      }
      }
    }
  }
  if (debugRequestText) {
    alert(encodedData);
  }
  x.send(encodedData);
  if (!clientCallBack) {
    if (debugResponseText) {
      alert(x.responseText);
    }
    result = eval("(" + x.responseText + ")");
    if (debugErrors && result.error) {
      alert("error: " + result.error);
    }
  }
  delete x;
  return result;
}
