/***************************************/
/** functions by Hal Barker           **/
/** use in conjunction with alerts.js **/
/***************************************/
// Global Variables...
var VALUE="value";
var TEXT="text";
var focusTo=null;
var DO_SUBMIT=false;

// preload images used by alerts...
if(document.images) {
  var questionImg=new Image(40,40);
  var warningImg=new Image(40,40);
  questionImg.src="js/image/question.gif";
  warningImg.src="js/image/warning.gif";
}

function trim(sVal) {
/** Remove leading and trailing spaces from the argument. */
  var space=" ";
  while(1) {
   // Left trim
    if(sVal.substring(0, 1)!=space) break;
    sVal=sVal.substring(1, sVal.length); // Remove 1 leading space
  }
  while(1) {
    // Right trim
    if(sVal.substring(sVal.length-1, sVal.length)!=space) break;
    sVal=sVal.substring(0, sVal.length-1); // Remove 1 trailing space
  }
  return sVal;
}
function isNull(obj) {
  if(obj==null || obj=="undefined") return true;
  else return false;
}
function notNull(obj) {
  return !isNull(obj);
}
function isEmpty(val) {
  if(isNull(val) || val=="undefined") return true;
  else if(typeof(val)=="string" && val.length==0) return true;
  else return false;
}
function notEmpty(sVal) {
  // return the opposite of isNull
  var rc=isEmpty(sVal);
  if(notNull(rc)) return !rc;
  else return null;
}
function setEmpty(val) {
  // If the argument is null, set it to the empty string.
  if(isNull(val) || val=="undefined") val="";
  return val;
}
function setEmpty(val, doTrim) {
  if(isNull(val) || val=="undefined") val="";
  else if(doTrim) val=trim(val);
  return val;
}
function isNumber(sVal) { // opposite of built-in function isNaN
  if(sVal.length=0 || isNaN(sVal)) return false;
  return true;
}
function right(str, n) {
  if(n<=0) return "";
  else if(n>String(str).length) return str;
  else {
    var iLen=String(str).length;
    return String(str).substring(iLen, iLen-n);
  }
}
/* quick getElement reference */
function $() {
  var elems=new Array();
  for(var i=0;i<arguments.length;i++) {
    var elem=arguments[i];
    if(typeof(elem)=="string") elem=document.getElementById(elem);
    if(arguments.length==1) return elem;
    elems.push(elem);
  }
  return elems;
}
/* grab Elements from the DOM by className */
function getElementsByClass(searchClass, node, tag) {
  var classElements=new Array();
  if(isNull(node)) node=document;
  if(isNull(tag)) tag="*";
  var elems=node.getElementsByTagName(tag);
  var elemsLen=elems.length;
  var pattern=new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for(var i=0,j=0;i<elemsLen;i++) {
    if(pattern.test(elems[i].className)) {
      classElements[j]=elems[i];
      j++;
    }
  }
  return classElements;
}
/* toggle an element's display */
function toggle(objId) {
  var el=document.getElementById(objId);
  if(el.style.display!="none") el.style.display="none";
  else el.style.display=""; // Allows element to display in its default style (inline, block, etc.)
}
/* insert an element after a particular node */
function insertAfter(parent, node, referenceNode) {
  parent.insertBefore(node, referenceNode.nextSibling);
}
function getCurrentDate() {
  var dt=new Date();
  var month=dt.getMonth()+1;
  var sMonth="";
  if(month<10) sMonth="0"+month;
  else sMonth=month;
  var day=dt.getDate();
  var sDay;
  if(day<10) sDay="0"+day;
  else sDay=day;
  var year=dt.getFullYear();
  return sMonth+"/"+sDay+"/"+year;
}
function isDate(dateStr, focusObj) {
/** JavaScript function to determine if a string represents a valid date.
 ** Parameter "dateStr" must be one of the following formats to pass validation:
 ** m/d/yyyy or m-d-yyyy
 ** mm/dd/yyyy or mm-dd-yyyy
 */
  var datePattern=/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
  var matchArray=dateStr.match(datePattern);  // is format OK?
  if(isNull(matchArray)) {
    focusTo=focusObj;
    buildAlert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
    return false;
  }
  // Parse date into variables...
  month=matchArray[1];
  day=matchArray[3];
  year=matchArray[5];
  // Check month range...
  if(month<1 || month>12) {
    // Date is invalid...
    focusTo=focusObj;
    buildAlert("Month must be between 1 and 12.");
    return false;
  }
  // Check day range...
  if(day<1 || day>31) {
    // Date is invalid...
    focusTo=focusObj;
    buildAlert("Day must be between 1 and 31.");
    return false;
  }
  // Check months with only 30 days...
  if((month==4 || month==6 || month==9 || month==11) && day==31) {
    // Date is invalid...
    focusTo=focusObj;
    buildAlert("Month "+month+" doesn't have 31 days!");
    return false;
  }
  // Check for February 29th...
  if(month==2) {
    var isleap=(year%4==0 && (year%100!=0 || year%400==0));// Is it leap year?
    if(day>29 || (day==29 && !isleap)) {
      // Date is invalid...
      focusTo=focusObj;
      buildAlert("February "+year+" doesn't have "+day+" days!");
      return false;
    }
  }
  focusTo=null;
  return true; // Date is valid
}
function replaceChars(strOriginal, strToReplace, strReplacement) {
  if(isNull(strOriginal)) return "";
  var replacedLen=strToReplace.length;
  var replacementLen=strReplacement.length;
  var pos=strOriginal.indexOf(strToReplace, 0);
  while(pos>=0) {
    strOriginal=strOriginal.substring(0, pos)+strReplacement+strOriginal.substring(pos+replacedLen);
    pos=strOriginal.indexOf(strToReplace, pos+replacementLen);
  }
  return strOriginal;
}
function getNamedNodes(elemName) {
  // return array of nodes with name="<elemName>"
  var namedNodes=document.getElementsByName(elemName);
  return namedNodes;
}
function wordCap(el) {
  // Capitalize the first letter of each word in el
  var hold=new String(setEmpty(el.value, true)); // so first letter won't be a space
  var outstr="";
  if(hold.length>0) {
    // only convert if the value is all upper case of all lower case...
    var up=hold.toUpperCase();
    var low=hold.toLowerCase();
    if(up==hold || low==hold) {
      outstr+=hold.charAt(0).toUpperCase();// Capitalize first letter
      for(var i=1;i<hold.length;i++) {
        if(hold.charAt(i-1)==" " || hold.charAt(i-1)=="(" || hold.charAt(i-1)=="'" || hold.charAt(i-1)=='"' ||
           hold.charAt(i-1)=="&" || hold.charAt(i-1)=="+" || hold.charAt(i-1)=="-")
          outstr+=hold.charAt(i).toUpperCase();
        else outstr+=hold.charAt(i).toLowerCase();
      }
    } else outstr=hold;
  }
  el.value=outstr;
}
// This one gets elements value attribute (value=="") or innerHTML
function getElementValue(elemId, valType) {
  var el=$(elemId);
  if(notNull(el)) {
    if(valType==VALUE) return trim(el.value);
    else if(valType==TEXT) return trim(el.innerHTML);
    else return "";
  }
  return "";
}
// This one sets elements value attribute (value=="") or innerHTML
function setElementValue(elemId, valType, newVal) {
  if(isNull(newVal)) return false;
  var rc=false;
  var el=$(elemId);
  if(notNull(el)) {
    rc=true;
    if(valType==VALUE) el.value=newVal;
    else if(valType==TEXT) el.innerHTML=newVal;
    else rc=false;
  }
  return rc;
}
function stringToXml(xmlString) {
  if(isNull(xmlString)) return "";
  // Convert "&lt;" and "&gt;" in xml document string back to "<" and ">"
  xmlString=replaceChars(xmlString, "&lt;", "<");
  xmlString=replaceChars(xmlString, "&gt;", ">");
  return xmlString;
}
function xmlToString(xmlString) {
  if(isNull(xmlString)) return "";
  // Convert "<" and ">" in xml document string back to "&lt;" and "&gt;"
  xmlString=replaceChars(xmlString, "<", "&lt;");
  xmlString=replaceChars(xmlString, ">", "&gt;");
  xmlString=replaceChars(xmlString, "&", "&amp;");
  return xmlString;
}
function upper(obj) {
  if(typeof(obj)=="object") return obj.value.toUpperCase();
  else return obj;
}

/*****************************************/
/** Replacements for javascript popups  **/
/**   alert(msg) and confirm(prompt)    **/
/*****************************************/
// display a mouseover type informational message...
function showMsg(msg) {
  var msgDiv=$("msgDiv");
  if(notNull(msgDiv)) {
    msgDiv.innerHTML=msg;
    msgDiv.style.display="";  // Allows element to display in default mode (inline, block, etc.)
  }
  return;
}
function hideMsg() {
  var msgDiv=$("msgDiv");
  if(notNull(msgDiv)) {
    msgDiv.style.display="none";
    msgDiv.innerHtml="";
  }
  if(notNull(focusTo) && typeof(focusTo)=="object") focusTo.focus();
  focusTo=null;
  return;
}
// default version of buildAlert...
function buildAlert(msg) {
  var alertDiv=$("alertDiv");
  if(notNull(alertDiv)) {
    var html='<span>'+msg+'</span><br /><br /><button id="alertBtn" type="button" class="minorBtn" onclick="hideAlert()">OK</button>';
    alertDiv.innerHTML=html;
    alertDiv.style.display="block";
    var btn=$("alertBtn");
    if(notNull(btn)) btn.focus();
  }
  return;
}
// overloaded version of buildAlert that displays an icon...
function buildAlert(msg, icon) {
  var alertDiv=$("alertDiv");
  if(notNull(alertDiv)) {
    var html="";
    if(isNull(icon) || isEmpty(icon)) icon="";
    else html+='<img name="alertImg" class="alertIcon" />';
    html+='<span>'+msg+'</span><br /><br /><button id="alertBtn" type="button" class="minorBtn" onclick="hideAlert()">OK</button>';
    alertDiv.innerHTML=html;
    if(notEmpty(icon)) {
      var iconImg=eval(icon+"Img.src");
      document["alertImg"].src=iconImg;
    }
    alertDiv.style.display="block";
    var btn=$("alertBtn");
    if(notNull(btn)) btn.focus();
  }
  return;
}
// default version of buildConfirm
function buildConfirm(msg, btn1Text, btn2Text, yesAction) {
  var alertDiv=$("alertDiv");
  if(notNull(alertDiv)) {
    var html='<span>'+msg+'</span><br /><br />';
    html+='<button type="button" id="yesBtn" class="minorBtn" onclick="confirmTrue(\''+yesAction+'\')">'+btn1Text+'</button>&nbsp;&nbsp;';
    html+='<button type="button" id="noBtn" class="minorBtn" onclick="confirmFalse()">'+btn2Text+'</button>';
    alertDiv.innerHTML=html;
    alertDiv.style.display="block";
    var btn=$("noBtn");
    if(notNull(btn)) btn.focus();
  }
  return;
}
// overloaded version of buildConfirm that sets focus to button with id="<activeBtn>"...
function buildConfirm(msg, btn1Text, btn2Text, yesAction, activeBtn) {
  var alertDiv=$("alertDiv");
  if(notNull(alertDiv)) {
    var html='<span>'+msg+'</span><br /><br />';
    html+='<button type="button" id="yesBtn" class="minorBtn" onclick="confirmTrue(\''+yesAction+'\')">'+btn1Text+'</button>&nbsp;&nbsp;';
    html+='<button type="button" id="noBtn" class="minorBtn" onclick="confirmFalse()">'+btn2Text+'</button>';
    alertDiv.innerHTML=html;
    alertDiv.style.display="block";
    if(isNull(activeBtn) || isEmpty(activeBtn)) activeBtn="noBtn";// default button to get focus
    var btn=$(activeBtn);
    if(notNull(btn)) btn.focus();
  }
  return;
}
// // overloaded version of buildConfirm that sets focus to button with id="<activeBtn>" and displays an icon...
function buildConfirm(msg, btn1Text, btn2Text, yesAction, activeBtn, icon) {
  var alertDiv=$("alertDiv");
  if(notNull(alertDiv)) {
    var html="";
    if(isNull(icon)) icon="";
    else html+='<img name="alertImg" class="alertIcon" />';
    html+='<span>'+msg+'</span><br /><br />';
    html+='<button type="button" id="yesBtn" class="minorBtn" onclick="confirmTrue(\''+yesAction+'\')">'+btn1Text+'</button>&nbsp;&nbsp;';
    html+='<button type="button" id="noBtn" class="minorBtn" onclick="confirmFalse()">'+btn2Text+'</button>';
    alertDiv.innerHTML=html;
    if(notEmpty(icon)) {
      var iconImg=eval(icon+"Img.src");
      document["alertImg"].src=iconImg;
    }
    alertDiv.style.display="block";
    if(isNull(activeBtn) || isEmpty(activeBtn)) activeBtn="noBtn";// default button to get focus
    var btn=$(activeBtn);
    if(notNull(btn)) btn.focus();
  }
  return;
}
function confirmTrue(yesAction) {
  hideAlert();
  DO_SUBMIT=true; // may or may not be used by calling page
  if(notEmpty(yesAction)) {
    var frm=$(yesAction);
    if(notNull(frm)) {  // yesAction is the id attribute of a form...
      document.body.style.cursor="wait";
      frm.submit();
    } else {
      // Do something else based on the text yesAction...
      if(yesAction=="doDefault") doDefault();// call the default function for the page
      else if(yesAction=="verifySubmit") verifySubmit();
      else if(yesAction=="corphome") goCorpHome();
      else if(yesAction=="wait") doWait();
      else if(yesAction=="submit") doSubmitAR();
      else if(yesAction.indexOf("delete_")!=-1) {
        var rowId=yesAction.substring(yesAction.indexOf("_")+1);  // get the text following 'delete_'
        doDelete(rowId);
      }
    }
  }
  return;
}
function confirmFalse() {
  hideAlert();
  DO_SUBMIT=false;// may or may not be used by calling page
  return;
}
function hideAlert() {
  var alertDiv=$("alertDiv");
  if(notNull(alertDiv)) {
    alertDiv.style.display="none";
    alertDiv.innerHtml="";
  }
  if(notNull(focusTo) && typeof(focusTo)=="object") focusTo.focus();
  focusTo=null;
  return;
}