/* Version Date: 6/6/2006 */
/* Previous Version Dates: 1/15/2003, 5/6/2003, 5/12/2004, 3/25/2005 */
/* Original Author: JPS */
/* 6/6/2006 Corrected jpsjsValid() to allow a . toward the beginning of an e-mail address. */
/* 3/25/2005 jpsjsOpenPopup() was added. */
/* 5/12/2004 The comments at the top of this page were changed. */
/* 5/6/2003 Mostly only comments and tab spacing were changed. */
/* No warranties are either expressed or implied. */
/* Not responsible for any problems. */
var mboljpsjsIsUnsaved;
mboljpsjsIsUnsaved = false;
function jpsjsAskUnsaved() {
var bolOKToContinue;
bolOKToContinue = true;
if (jpsjsIsUnsaved()) {
if (!confirm('Data has not been saved.\n\nAre you sure you want to continue without saving?')) { 
bolOKToContinue = false;
}
}
return bolOKToContinue;
}
function jpsjsCNum(pvarFld) {
var varFld;
varFld = pvarFld.toString();
if (!jpsjsIsNumeric(varFld)) {
varFld = 0;
return varFld;
}
varFld = varFld.replace(/\(/g, "-");
varFld = varFld.replace(/\$/g, "");
varFld = varFld.replace(/\,/g, "");
varFld = varFld.replace(/\+/g, "");
varFld = varFld.replace(/\)/g, "");
varFld = parseFloat(varFld);
return varFld;
}
function jpsjsFormat(pvarFld, pstrFormat) {
var strarrayFormat;
var strFormatType;
var varFld;
var vararrayFldItems;
var strFldItem;
var intMinute;
var intHour;
var intDay;
var intMonth;
var intYr;
var intCurYr;
var intCurCentury;
var strMinute;
var strHour;
var strDay;
var strMonth;
var strYr;
var strAMOrPM;
var intItemNum;
var strItemName;
var strItemValue;
var strItemValueSeparator;
var vararrayItemValueItems;
var strItemValueItem;
var strItemValueOrder;
var intItemLen;
var intItemColonPos;
var strBlank;
var strProb;
var bolIsProbMsg;
var intItemFirstZeroPos;
var intItemDecimalPos;
var intItemDecimalPlaces;
var intDecimalPos;
var intDecimalPlaces;
var intNumOfCharsBeforeDecimal;
var intCommaNum;
var intNumOfCommasNeeded;
var intFirstCommaStartAfterPos;
var intCommaStartAfterPos;
var bolIsNeg;
varFld = pvarFld;
strarrayFormat = pstrFormat.split(";");
intItemLen = strarrayFormat[0].length;
intItemColonPos = strarrayFormat[0].indexOf(":");
strFormatType = strarrayFormat[0].substring(intItemColonPos + 1, strarrayFormat[0].length);
strBlank = varFld;
strProb = varFld;
bolIsProbMsg = false;
for (intItemNum = 1; intItemNum < strarrayFormat.length; intItemNum++) {
intItemLen = strarrayFormat[intItemNum].length;
intItemColonPos = strarrayFormat[intItemNum].indexOf(":");
strItemName = strarrayFormat[intItemNum].substring(0, intItemColonPos)
strItemValue = strarrayFormat[intItemNum].substring(intItemColonPos + 1, strarrayFormat[intItemNum].length);
if (strItemName == "blank") strBlank = strItemValue;
if (strItemName == "prob") strProb = strItemValue;
if (strItemName == "isprobmsg") bolIsProbMsg = strItemValue;
}
if (varFld.toString() == "") return strBlank;
for (intItemNum = 1; intItemNum < strarrayFormat.length; intItemNum++) {
intItemLen = strarrayFormat[intItemNum].length;
intItemColonPos = strarrayFormat[intItemNum].indexOf(":");
strItemName = strarrayFormat[intItemNum].substring(0, intItemColonPos)
strItemValue = strarrayFormat[intItemNum].substring(intItemColonPos + 1, strarrayFormat[intItemNum].length);
switch (strFormatType) {
case "boolean" :
if ((!jpsjsIsNumeric(varFld)) && (varFld != "True") && (varFld != "true") && (varFld != "False") && (varFld != "false")) {
if (bolIsProbMsg) alert("The last entry is not a valid True or False entry.");
return strProb;
}
switch (strItemName) {
case "true" :
if (varFld) varFld = strItemValue;
break;
case "false" :
if (!varFld) varFld = strItemValue;
break;
}
case "date" :
switch (strItemName) {
case "pattern" :
if (strItemValue.indexOf("-") > -1) {
strItemValueSeparator = "-";
}
if (strItemValue.indexOf("/") > -1) {
strItemValueSeparator = "/";
}
vararrayItemValueItems = strItemValue.split(strItemValueSeparator);
vararrayFldItems = varFld.split(strItemValueSeparator);
strItemValueOrder = "";
for (vararrayItemValueItemNum = 0;  vararrayItemValueItemNum < vararrayItemValueItems.length;  vararrayItemValueItemNum++) {
strItemValueItem = vararrayItemValueItems[vararrayItemValueItemNum];
if (strItemValueItem.indexOf("d") > -1) {
strItemValueOrder = strItemValueOrder + "d";
if (vararrayItemValueItemNum < vararrayFldItems.length) {
strDay = vararrayFldItems[vararrayItemValueItemNum];
if (isNaN(strDay)) {
if (bolIsProbMsg) alert("The last entry is not a valid date.");
return strProb;
}
if (strItemValueItem.indexOf("dd") > -1) {
if (strDay.length == 1) {
strDay = "0" + strDay;
}
}
}
else {
if (strItemValueItem.indexOf("dd") > -1) {
strDay = "01";
}
else {
if (strItemValueItem.indexOf("d") > -1) {
strDay = "1";
}
}
}
}
if (strItemValueItem.indexOf("m") > -1) {
strItemValueOrder = strItemValueOrder + "m";
if (vararrayItemValueItemNum < vararrayFldItems.length) {
strMonth = vararrayFldItems[vararrayItemValueItemNum];
if (strItemValueItem.indexOf("mmm") > -1) {
if (!isNaN(strMonth)) {
if (bolIsProbMsg) alert("The last entry is not a valid date.");
return strProb;
}
strMonth = strMonth.substring(0, 1).toUpperCase() + strMonth.substring(1, strMonth.length);
}
else {
if (isNaN(strMonth)) {
if (bolIsProbMsg) alert("The last entry is not a valid date.");
return strProb;
}
if (strItemValueItem.indexOf("mm") > -1) {
if (strMonth.length == 1) {
strMonth = "0" + strMonth;
}
}
}
}
else {
if (strItemValueItem.indexOf("mmm") > -1) {
strMonth = "Jan";
}
else {
if (strItemValueItem.indexOf("mm") > -1) {
strMonth = "01";
}
else {
if (strItemValueItem.indexOf("m") > -1) {
strMonth = "1";
}
}
}
}
}
if (strItemValueItem.indexOf("y") > -1) {
strItemValueOrder = strItemValueOrder + "y";
if (new Date(2000, 0, 1).getYear() == 100) {
intCurYr = new Date().getYear() + 1900;
}
else {
intCurYr = new Date().getYear();
}
intCurCentury = Math.floor(intCurYr / 100) * 100;
if (vararrayItemValueItemNum < vararrayFldItems.length) {
strYr = vararrayFldItems[vararrayItemValueItemNum];
if (isNaN(strYr)) {
if (bolIsProbMsg) alert("The last entry is not a valid date.");
return strProb;
}
if (strYr.length < 3) {
intYr = intCurCentury + parseFloat(strYr);
strYr = intYr.toString();
}
}
else {
if (strItemValueItem.indexOf("yyyy") > -1) {
strYr = intCurYr.toString();
}
else {
if (strItemValueItem.indexOf("yy") > -1) {
strYr = intCurYr.toString();
strYr = strYr.substring(2, 4);
}
}
}
}
}
switch (strItemValueOrder) {
case "dm" :
varFld = strDay + strItemValueSeparator + strMonth;
break;
case "dmy" :
varFld = strDay + strItemValueSeparator + strMonth + strItemValueSeparator + strYr;
break;
case "md" :
varFld = strMonth + strItemValueSeparator + strDay;
break;
case "mdy" :
varFld = strMonth + strItemValueSeparator + strDay + strItemValueSeparator + strYr;
break;
case "my" :
varFld = strMonth + strItemValueSeparator + strYr;
break;
case "ym" :
varFld = strYr + strItemValueSeparator + strMonth;
break;
case "ymd" :
varFld = strYr + strItemValueSeparator + strMonth + strItemValueSeparator + strDay;
break;
}
}
break;
case "number" :
switch (strItemName) {
case "pattern" :
if (!jpsjsIsNumeric(varFld)) {
if (bolIsProbMsg) alert("The last entry is not a valid number.");
return strProb;
}
intItemFirstZeroPos = strItemValue.indexOf("0");
intItemDecimalPos = strItemValue.indexOf(".");
if (intItemDecimalPos > -1) {
intItemDecimalPlaces = strItemValue.lastIndexOf("0") - intItemDecimalPos;
}
else {
intItemDecimalPlaces = 0;
}
varFld = jpsjsCNum(varFld);
varFld = varFld.toString();
if (varFld.lastIndexOf("%") > -1) {
varFld = varFld.substring(0, varFld.length - 1);
varFld = varFld / 100;
}
else {
if ((strItemValue.lastIndexOf("%") > -1) && (strItemValue.lastIndexOf("%notdataentry") == -1)) {
varFld = varFld / 100;
}
}
if (strItemValue.lastIndexOf("%") > -1) {
varFld = jpsjsRound(varFld * 100, intItemDecimalPlaces);
}
else {
varFld = jpsjsRound(varFld, intItemDecimalPlaces);
}
varFld = varFld.toString();
if (intItemDecimalPos > -1) {
intDecimalPos = varFld.lastIndexOf(".");
if (intDecimalPos > -1) {
intDecimalPlaces = varFld.length - intDecimalPos - 1;
if (intDecimalPlaces < intItemDecimalPlaces) {
varFld = varFld + jpsjsRepeatTextLen("0", intItemDecimalPlaces - intDecimalPlaces);
}
if (intDecimalPos == 0) {
varFld = "0" + varFld;
}
}
else {
varFld = varFld + "." + jpsjsRepeatTextLen("0", intItemDecimalPlaces);
}
}
if (varFld < 0) {
varFld = varFld.substring(1, varFld.length);
bolIsNeg = true;
}
else {
bolIsNeg = false;
}
if (strItemValue.indexOf(",") > -1) {
if (intItemDecimalPlaces > 0) {
intNumOfCharsBeforeDecimal = varFld.length - intItemDecimalPlaces - 1;
}
else {
intNumOfCharsBeforeDecimal = varFld.length;
}
intNumOfCommasNeeded = Math.floor((intNumOfCharsBeforeDecimal - 1) / 3);
if (intNumOfCommasNeeded > 0) {
intFirstCommaStartAfterPos = intNumOfCharsBeforeDecimal % 3;
if (intFirstCommaStartAfterPos == 0) intFirstCommaStartAfterPos = 3;
for (intCommaNum = 1;  intCommaNum <= intNumOfCommasNeeded;  intCommaNum++) {
intCommaStartAfterPos = intFirstCommaStartAfterPos + ((intCommaNum - 1) * 4);
varFld = varFld.substring(0, intCommaStartAfterPos) + "," + varFld.substring(intCommaStartAfterPos, varFld.length);
}
}	
}
if (strItemValue.indexOf("$") > -1) {
varFld = "$" + varFld;
}
if (bolIsNeg) {
varFld = "-" + varFld;
}
if (strItemValue.lastIndexOf("%") > -1) {
varFld = varFld + "%";
}
break;
case "neg" :
if (bolIsNeg) {
varFld = strItemValue.substring(0, 1) + varFld.substring(1, varFld.length) + strItemValue.substring(strItemValue.length - 1, strItemValue.length);
}
}
break;
case "string" :
switch (strItemName) {
case "ucase" :
if (strItemValue == "all") {
varFld = varFld.toUpperCase();
break;
}
if (strItemValue == "1") {
varFld = varFld.substring(0, 1).toUpperCase() + varFld.substring(1, varFld.length);
break;
}
}
case "time" :
switch (strItemName) {
case "pattern" :
strItemValueSeparator = ":";
vararrayItemValueItems = strItemValue.split(strItemValueSeparator);
vararrayFldItems = varFld.split(strItemValueSeparator);
for (vararrayItemValueItemNum = 0;  vararrayItemValueItemNum < vararrayItemValueItems.length;  vararrayItemValueItemNum++) {
strItemValueItem = vararrayItemValueItems[vararrayItemValueItemNum];
if (strItemValueItem.indexOf("n") > -1) {
if (vararrayItemValueItemNum < vararrayFldItems.length) {
intMinute = parseFloat(vararrayFldItems[vararrayItemValueItemNum]);
strMinute = intMinute.toString();
if (isNaN(strMinute)) {
if (bolIsProbMsg) alert("The last entry is not a valid time.");
return strProb;
}
if (strItemValueItem.indexOf("nn") > -1) {
if (strMinute.length == 1) {
strMinute = "0" + strMinute;
}
}
}
else {
strMinute = "00";
}
}
if (strItemValueItem.indexOf("h") > -1) {
if (vararrayItemValueItemNum < vararrayFldItems.length) {
strHour = vararrayFldItems[vararrayItemValueItemNum];
if (isNaN(strHour)) {
if (bolIsProbMsg) alert("The last entry is not a valid time.");
return strProb;
}
}
else {
strHour = "12";
}
}
if ((strItemValueItem.indexOf("PM") > -1) || (strItemValueItem.indexOf("pm") > -1)) {
if (vararrayItemValueItemNum < vararrayFldItems.length) {
strFldItem = vararrayFldItems[vararrayItemValueItemNum];
if ((strFldItem.indexOf("AM") > -1) || (strFldItem.indexOf("am") > -1) || (strFldItem.indexOf("PM") > -1) || (strFldItem.indexOf("pm") > -1)) {
if ((strFldItem.indexOf("AM") > -1) || (strFldItem.indexOf("am") > -1)) {
strAMOrPM = "AM";
}
if ((strFldItem.indexOf("PM") > -1) || (strFldItem.indexOf("pm") > -1)) {
strAMOrPM = "PM";
}
}
else {
strAMOrPM = "AM";
}
if (strItemValueItem.indexOf("pm") > -1) {
strAMOrPM = strAMOrPM.toLowerCase();
}
}
}
varFld = strHour + strItemValueSeparator + strMinute + " " + strAMOrPM;
}
}
break;
}
}
return varFld;
}
function jpsjsFormatFld(pstrFldName, pstrFormat) {
eval("document.frmMain." + pstrFldName).value = jpsjsFormat(eval("document.frmMain." + pstrFldName).value, pstrFormat);
}
function jpsjsIsNumeric(pvarFld) {
var varFld;
var strAllowedChars;
var bolIsNumeric;
var ch;
var i;
var j;
varFld = pvarFld.toString();
strAllowedChars = "0123456789$,.+-()%";
bolIsNumeric = true;
if ((varFld == "") || (varFld == "-") || (varFld == "+") || (varFld == "%") || (varFld == "$")) {
return false;
}
for (i = 0;  i < varFld.length;  i++) {
ch = varFld.charAt(i);
for (j = 0;  j < strAllowedChars.length;  j++) {
if (ch == strAllowedChars.charAt(j))
break;
}
if (j == strAllowedChars.length) {
bolIsNumeric = false;
break;
}
}
if (varFld.indexOf(".") != varFld.lastIndexOf("."))
bolIsNumeric = false;
if (varFld.indexOf("+") != varFld.lastIndexOf("+"))
bolIsNumeric = false;
if (varFld.indexOf("-") != varFld.lastIndexOf("-"))
bolIsNumeric = false;
if (varFld.indexOf("(") != varFld.lastIndexOf("("))
bolIsNumeric = false;
if (varFld.indexOf(")") != varFld.lastIndexOf(")"))
bolIsNumeric = false;
if (varFld.indexOf("%") != varFld.lastIndexOf("%"))
bolIsNumeric = false;
return bolIsNumeric;
}
function jpsjsIsUnsaved() {
return mboljpsjsIsUnsaved;
}
function jpsjsNumToHexByte(pintValue) {
var hi = (pintValue >> 4) & 0x0F;
var lo = pintValue & 0x0F;
var digit = "0123456789ABCDEF";
return digit.charAt(hi) + digit.charAt(lo);
}
function jpsjsOpenPopup(pstrURL, pstrWindowName, pstrHow) {
var winOpenPopup;
winOpenPopup = window.open(pstrURL, pstrWindowName, pstrHow);
winOpenPopup.focus();
}
function jpsjsRandomColor() {
var intRed;
var intGreen;
var intBlue;
intRed = jpsjsRandomInt(0, 255);
intGreen = jpsjsRandomInt(0, 255);
intBlue = jpsjsRandomInt(0, 255);
return jpsjsRGBToHex(intRed, intGreen, intBlue);
}
function jpsjsRandomColorItem(pstrItemID) {
if (navigator.userAgent.indexOf("MSIE") != -1) {
eval("document.all." + pstrItemID).style.color = jpsjsRandomColor();
}
else {
eval("document." + pstrItemID).color = jpsjsRandomColor();
}
}
function jpsjsRandomInt(pintMin, pintMax) {
return Math.round(Math.random() * (pintMax - pintMin)) + pintMin;
}
function jpsjsRefreshPg(pstrFldName) {
document.frmMain.FocusedFldName.value = pstrFldName;
alert("Refreshing page to update other field(s) based on your selection.");
document.frmMain.submit();
}
function jpsjsRepeatTextLen(pstrText, pintNumOfChars) {
var strText;
var intNumOfTimes;
var I;
strText = "";
intNumOfTimes = Math.ceil(pintNumOfChars / pstrText.toString().length);
for (I = 0;  I < intNumOfTimes;  I++) {
strText = strText + pstrText;
}
strText = strText.substring(0, pintNumOfChars);
return strText;
}
function jpsjsRGBToHex(pintRed, pintGreen, pintBlue) {
return "#" + jpsjsNumToHexByte(pintRed) + jpsjsNumToHexByte(pintGreen) + jpsjsNumToHexByte(pintBlue);
}
function jpsjsRound(pvarNum, pintDecimalPlaces) {
var varNum;
varNum = pvarNum;
varNum = varNum * Math.pow(10, pintDecimalPlaces);
varNum = Math.round(varNum);
varNum = varNum / Math.pow(10, pintDecimalPlaces);
return varNum;
}
function jpsjsSetUnsaved(pbolIsUnsaved) {
mboljpsjsIsUnsaved = pbolIsUnsaved;
return mboljpsjsIsUnsaved;
}
function jpsjsShowList(pstrFldName, pbolIsShowList) {
eval("document.frmMain." + pstrFldName + "IsShowList").value = pbolIsShowList;
document.frmMain.FocusedFldName.value = pstrFldName;
document.frmMain.submit();
}
function jpsjsTrim(pvarFld) {
var strFld;
var intFirstNonSpaceCh;
var intFinalNonSpaceCh;
var ch;
var chCode;
var i;
strFld = pvarFld.toString();
if (strFld == "") {
return "";
}
intFirstNonSpaceCh = -1;
for (i = 0;  i < strFld.length;  i++) {
chCode = strFld.charCodeAt(i);
if (chCode != 32 && chCode != 160) {
intFirstNonSpaceCh = i;
break;
}
}
if (intFirstNonSpaceCh == -1) {
return "";
}
for (i = strFld.length - 1;  i >= 0;  i--) {
chCode = strFld.charCodeAt(i);
if (chCode != 32 && chCode != 160) {
intFinalNonSpaceCh = i;
break;
}
}
strFld = strFld.substring(intFirstNonSpaceCh, intFinalNonSpaceCh + 1);
return strFld;
}
function jpsjsValid(pvarFld, pstrFldLabel, pstrType, pbolRequired) {
var strValidMsg;
strValidMsg = "";
if (pbolRequired && pvarFld == "") {
strValidMsg = pstrFldLabel + " cannot be blank.\n";
}
else if (!pbolRequired && pvarFld == "") {
}
else {
if (pstrType == "number") {
if (!jpsjsIsNumeric(pvarFld))
strValidMsg = pstrFldLabel + " is not a valid number.\n";
}
else if (pstrType == "date") {
}
else if (pstrType == "email") {
if (pvarFld.indexOf("@") < 1 || pvarFld.indexOf(".") < 1)
strValidMsg = pstrFldLabel + " is not a valid e-mail address.\n";
}
else if (pstrType == "string") {
}
}
return strValidMsg;
}
