// gems.js

// Browser side logging
var oGemsLogLines = null;
function gemsAlert(sMsg) {
  window.alert(sMsg);
}

function gemsLog(sMsg) {
  if (sMsg == null) return;
  if (oGemsLogLines == null) oGemsLogLines = new Array();
  if (sMsg == null) return;
  oGemsLogLines[oGemsLogLines.length] = sMsg;
}

function getGemsLogLines(sMsg) {
  var oRet = oGemsLogLines;
  oGemsLogLines = null;
  return oRet;
}

function showGemsLogLines() {
  var oSpan = getElement("gemsGemslogLines");
  if (oSpan == null) return;
  var sLogLines = "";
  var oLines = getGemsLogLines();
  if (oLines != null) {
    var i=0;
    for(i=0; i< oLines.length; i++) {
      sLogLines += oLines[i]+"\r\n";
    }
  }
  oSpan.innerHTML = sLogLines;
  displayTag("gemsDynlogLinesHdr",true);
}

/* This turns on/off sections by ID
 */
function displayTag(sTag,bYes) { // HIDE OR DISPLAY TAG BY ID
  var sHow = "none";
  if (bYes) sHow = "block";
  var oTag = null;
  if (document.getElementById) {
    oTag = document.getElementById(sTag);
  } else if (document.all) {
    oTag = document.all[sTag];
  }
  if (oTag == null) {
    alert("Tag "+sTag+" not found");
  } else {
    oTag.style.display = sHow;
  }
}

// Standard function to retrieve HTML element by ID= tag
function getElement(sTag,oWin) {
  if (oWin == null) oWin = window;
  var oDoc = oWin.document;
  if (oDoc.getElementById) {
    var oEl = oDoc.getElementById(sTag);
    if (oEl != null) return oEl;
    //alert("Troule finding "+sTag);
    return null;
  } else if (oDoc.all) {
    return oDoc.all[sTag];
  }
  return null;
}

function isNavigator() {
  if (window.netscape == null) return false;
  return true;
}

function isIE() {
  if (navigator.appName.indexOf("Microsoft") != -1) return true;
  return false;
}

// ------------ Page Load Handling -------------
var gaOnloads = null;
function regOnload(oFunc) {
  if (gaOnloads == null) gaOnloads = new Array();
  gaOnloads[gaOnloads.length] = oFunc;

}

function runOnload() {
  if (gaOnloads == null) return;
  for(var i=0; i<gaOnloads.length; i++) {
    gaOnloads[i]();
  }
}

// ------------ Utility -------------
// This routine is called to open a new pop-up window.  The sizes as
// specified allow pages to be displayed with a specified size and the minimal use
// of scroll-bars and other browser decorations.
function pcOpenAnchor(sID,sName,nWid,nHgt,sExtraParms) {
  var oAnc = getElement(sID);
  if (oAnc == null) return false;
  var sWin = oAnc.href;
  if (sExtraParms != null) {
    var sConj = "?";
    if (sWin.indexOf("?") > 0) sConj = "&";
    sWin += sConj + sExtraParms;
  }
  return pcOpenHREF(sWin,sName,nWid,nHgt);
}
function pcOpenHREF(sWin,sName,nWid,nHgt) {
  if (nWid == null) nWid = 680;
  if (nHgt == null) nHgt = 540;
  var nLeft = Math.floor((screen.width - nWid) / 2);
  var nTop  = Math.floor((screen.height - nHgt) / 2);
  var sPos;
  if (isNavigator()) {
    sPos = " screenX="+nLeft+" screenY="+nTop;
  } else {
    sPos = ",left="+nLeft+",top="+nTop;
  }
  var sExtra = "";
  // Uncomment next during development to show location, status bar
  //sExtra = ",location=yes,status=yes";
  var oW=window.open(sWin,sName,"height="+nHgt+",width="+nWid+sPos+",resizable=yes,scrollbars=yes"+sExtra);
  oW.focus();
  return false;
}

// ------------ Utility -------------
function trim(sStr) {
  sStr = sStr.replace(/^ +/,"");
  while(sStr.length > 0 && sStr.charAt(sStr.length-1) == ' ') sStr = sStr.substring(0,sStr.length-1);
  return sStr;
}

function dw(sText){document.write(sText);}

// ------------ XMLHttp Routines ---------------
//var oXmlReq;
/* This routine send a POST request to the server.
 * It quietly returns if the client does not support
 * the request.
 */

// EC5C11 - based on code from www.
function createXMLHttpRequest() {
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  try { return new XMLHttpRequest(); } catch(e) {}
  alert("XMLHttpRequest not supported");
  return null;
}

var gbXMLHttpBusy = false;
function sendXMLHttpReq(sURL,sParms,bASync) {
  if (bASync == null) bASync = true;
  var oXmlReq = createXMLHttpRequest();
  if (oXmlReq) {
    if (bASync) oXmlReq.onreadystatechange = function() {
      if (oXmlReq.readyState == 4) {
        procXMLHttpMsg(oXmlReq);
      }
    }
    // Fix from DataRequestor code
    if ((typeof oXmlReq.abort) != "undefined" && oXmlReq.readyState!=0) { // Opera can't abort().
      //alert("Issuing abort");
      oXmlReq.abort();
      //alert("Issued abort");
    }
    oXmlReq.open('POST',sURL,bASync);
    oXmlReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    //if (sParms != null) sParms = escape(sParms);
    gbXMLHttpBusy = true;
    oXmlReq.send(sParms);
    if (!bASync) {
      procXMLHttpMsg(oXmlReq);
    }
  }
}

/* Used in the ASync mode of sendXMLHttp to monitor
 * the progress of the request.
 */
function procXMLHttpChg() {
  // only if req shows "complete"
  if (oXmlReq.readyState == 4) {
    procXMLHttpMsg(oXmlReq);
  }
}

/* Used to process a completed XMLHttpRequest.send
 * request.
 */
function procXMLHttpMsg(oXmlReq) {
  gbXMLHttpBusy = false;
  if (oXmlReq.status == 200) {
    var oResp    = oXmlReq.responseXML.documentElement;
    var sMethod  = oResp.getElementsByTagName('method')[0].firstChild.data;
    var sText    = oResp.getElementsByTagName('result')[0].firstChild.data;
    eval(sMethod + "(sText);");
  } else {
    alert("XMLHttpRequest failure: Status="+oXmlReq.status+"\nStatusText:"+oXmlReq.statusText);
  }
}

//EC7130
function submitSimpleSAR(sOP,oReq,sCallBack,sApp,sRepURL) {
  var oTub = makeTub();
  oTub.add("OP",sOP);
  var oSpan = getElement("gemsDynlogLines");
  if (oSpan != null) oTub.add("log","yes");
  if (oReq != null) oTub.add("Req",oReq);
  simpleServerActionReq("call",oTub.toText(),sCallBack,sApp,sRepURL);
  return false;
}

var gbSimpleSARResult = false;
function simpleServerActionReq(sMeth,sTub,sCallBack,sApp,sRepURL) {
  var sURL = ""+window.location;
  var nIX = sURL.indexOf("/"+sApp);
  if (nIX > 0) sURL = sURL.substring(0,nIX)+"/"+sRepURL;
  var sParms = "ok=serverGood"+sCallBack+"&fail=serverBad"+sCallBack;
  if (sTub != null) sParms += "&Tub=" + sTub;
  gbSimpleSARResult = false;
  gemsLog("URL="+sURL);
  gemsLog("Parms="+sParms);
  sendXMLHttpReq(sURL,sParms,true);
  //alert("Now at "+gbSARResult+" "+sURL);
  return gbSimpleSARResult;
}


