function govindaCreateRequest() {
  try {
    govindaRequest = new XMLHttpRequest();
  } catch (tryMS) {
    try {
      govindaRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (otherMS) {
      try {
        govindaRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        govindaRequest = null;
      }
    }
  }
  return govindaRequest;
}


function govindaGetActivatedObject(e) {
  var GovindaObj;
  if (!e) {
    // early version of IE
    GovindaObj = window.event.srcElement;
  } else if (e.srcElement) {
    // IE 7 or later
    GovindaObj = e.srcElement;
  } else {
    // DOM Level 2 browser
    GovindaObj = e.target;
  }
  return GovindaObj;
}

function govindaAddEventHandler(obj, eventName, handler) {
  if (document.attachEvent) {
    obj.attachEvent("on" + eventName, handler);
  } else if (document.addEventListener) {
    obj.addEventListener(eventName, handler, false);
  }
}

function govindaIsArray(arg) {
  if (typeof arg == 'object') {
    var criteria = arg.constructor.toString().match(/array/i);
    return (criteria != null);
  }
  return false;
}

/* ========================== escape HTML entities ==========================  */
function govHTMLEncode(str){
  str = str.replace(/&/g, "&amp;");
  str = str.replace(/>/g, "&gt;");
  str = str.replace(/</g, "&lt;");
  str = str.replace(/"/g, "&quot;");
  str = str.replace(/'/g, "&#039;");
  return str;
}

/* ========================== Trim White Space ==========================  */
function trimWhiteSpace(str) {
	trimmedString=str.replace(/^\s+|\s+$/g, "");
	return trimmedString;
}

/* ========================== URL-encode ==========================  */
function fixedEncodeURIComponent (str) {  
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').  
                                 replace(/\)/g, '%29').replace(/\*/g, '%2A');
}

/* ---------- this one needs re-evaluating: (meanwhile remove it here if not already in use ----------------- */
function likeWebDNAurl(str) {
  return escape(str).replace(/\*/g, '%2A').replace(/\@/g, "%40").replace(/\+/g, '%2B');
}

/* ========================== URL-decode ==========================  */
function fixedDecodeURIComponent (str) {  
  return decodeURIComponent(str).replace(/%21/g, '!').replace(/%27/g, "'").replace(/%28/g, '(').  
                                 replace(/%29/g, ')').replace(/%2A/g, '*');
}

/* ========================== pop a new window ==========================  */
	/* --- see: http://www.javascript-coder.com/window-popup/javascript-window-open.phtml --- */
function popNewJSwindow(fileAddress,urlParams,windowHandle,title,toolbar,location,directories,status,menubar,scrollbars,resizable,width,height,left,top) {
	 var finalURLtoGoto = fileAddress + "?" + urlParams;
	 myWin = window.open(finalURLtoGoto,windowHandle,"toolbar=" + toolbar + ",location=" + location + ",directories=" + directories + ",status=" + status + ",menubar=" + menubar + ",scrollbars=" + scrollbars + ",resizable=" + resizable + ",width=" + width + ",height=" + height + ",left=" + left + ",top=" + top);
}

