
	function setupReqObject(listener, url, newThread) {
  // newThread - pass in true if it should run on separate thread  
  //             pass in false if it should run on same thread as browser event thread
    if (window.XMLHttpRequest){ // Non-IE6
      reqObj = new XMLHttpRequest();
      reqObj.onreadystatechange = listener;
      try {
      	reqObj.open("GET", url, newThread); 
      } catch (e) {
         alert("Cannot connect to server");
      }
    } else if (window.ActiveXObject) { // IE6
      reqObj = new ActiveXObject("Microsoft.XMLHTTP");
      if (reqObj) {
        reqObj.onreadystatechange = listener;
        reqObj.open("GET", url, newThread);
       }
    }
  }

  function reqObjSend()
  {
	if (BrowserDetect.browser.indexOf( 'Explorer' ) != -1 && BrowserDetect.version<7)
	{
		reqObj.send();
	}
  }

  function populateDropList(control,text) {
	returnElements=text.split(";");
	document.getElementById(control).options.length=0;
	for ( var i=0; i<returnElements.length; i++ ) {
		valueLabelPair = returnElements[i].split("|");
	    document.getElementById(control).options[i] = new Option(valueLabelPair[1], valueLabelPair[0]);
	}
	if (text == '801') {
	     alert('An error occurred while retrieving the data.  Please try again.');
	  }
	}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();


	function checkAjaxResult( request )
	{
		var status = request.status;
		var statusText = request.statusText;
  	var responseText = request.responseText;

		if ( status != 200 ) // HTTP_OK
		{
			alert( 'Unexpected server response: "' + status + ' ' + statusText + '".  Please try again.' );
			return false;
		}

		if ( responseText.substring( 0, 5 ) == 'Error' )
		{
		  alert( responseText );
			return false;
		}

		if ( responseText == '801' || responseText.indexOf( 'j_acegi_security_check.do' ) > 0 )
		{
			alert( 'Your session has expired.  Please logout and login again.' );
			return false;
		}

		if ( responseText == '802' )
		{
  		alert( 'An application exception occurred.  Please try again.' );
			return false;
		}

		return true;
	}


var HTTP_READY_STATE_UNINITIALIZED = 0;
var HTTP_READY_STATE_LOADING = 1;
var HTTP_READY_STATE_LOADED = 2;
var HTTP_READY_STATE_INTERACTIVE = 3;
var HTTP_READY_STATE_COMPLETE = 4;

var SC_OK = 200;
var SC_REQUEST_TIMEOUT = 408;
var SC_INTERNAL_SERVER_ERROR = 500;

function sendHttpRequest(url,callback,async) {
  var sent = false;

  httpRequestCallback = callback;

  if (!async) {
    async = true;
  }

  try {
    httpRequest = createHttpRequestObject();
    httpRequest.onreadystatechange = httpRequestListener;
    httpRequest.open("GET", url, async);
    httpRequest.send(null);
    sent = true;
  } catch (e) {
    alert("Cannot connect to server: " + e);
  }

  return sent;
}

function httpRequestListener() {
  if (isReqReady(httpRequest)) {
    if (checkReqStatus(httpRequest)) {
      httpRequestCallback(httpRequest.responseText);
    }
  }
}

function createHttpRequestObject() {
  var httpRequest = null;

  if (window.ActiveXObject) { // IE
    try {
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (err) {
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
  } else if (window.XMLHttpRequest) { // non-IE
    httpRequest = new XMLHttpRequest();
  } else {
    throw ("Cannot create HTTP request");
  }

  return httpRequest;
}

function isReqReady(request) {
  var ready = false;

  try {
    ready = (request.readyState == HTTP_READY_STATE_COMPLETE);
  } catch (e) {
    // just in case (e.g. firefox may throw JavaScript error on timeout)
    ready = true;
  }

  return ready;
}

function checkReqStatus(request) {
  var result = false;

  var status = null;
  try {
    status = request.status;
  } catch (e) {
    // just in case (e.g. firefox may throw JavaScript error on timeout)
    status = SC_REQUEST_TIMEOUT;
  }

  switch (status) {
  case SC_OK:
    result = true;
    break;
  case SC_REQUEST_TIMEOUT:
    alert('Your session has expired.  Please logout and login again.');
    break;
  case SC_INTERNAL_SERVER_ERROR:
    alert('An application exception has occurred.  Please try again later.');
    break;
  default:
    alert('Unexpected server response (' + request.status + ')');
    break;
  }

  return result;
}

function addToDropdown(ddlb,responseText) {
  var options = responseText.split('|');
  for (var i = 0; i < options.length; i++) {
    var pair = options[i].split(';');
    ddlb.options[ddlb.options.length] = new Option(pair[1],pair[0]);
  }
}
