//Some configuration variables. Do only change if you are sure what you do!

//Line separator for HTML-code
var newLine = "<br />";

//supported date pattern tokens (see the class SimpleDateFormat of Java)
//Array: patternDescription, dateNormal-Pattern, dateStrict-Pattern
//created by guggero, 27.07.04
var day       = new Array("dd",     "(\\d{1,2})",   "(\\d{2})");
var month     = new Array("MM",     "(\\d{1,2})",   "(\\d{2})");
var year      = new Array("yyyy",   "(\\d{4})",     "(\\d{4})");

var hour      = new Array("HH",     "(\\d{1,2})",   "(\\d{2})");
var minute    = new Array("mm",     "(\\d{1,2})",   "(\\d{2})");
var second    = new Array("ss",     "(\\d{1,2})",   "(\\d{2})");

var tokens    = new Array(day, month, year, hour, minute, second);

//function to validate any date with a specific pattern
//created by guggero, 27.07.04
function doValidateDate(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oDate = new DateValidations();
    for (x in oDate) {
        var value = form[oDate[x][0]].value;
        var patternStrict = true;
        var datePattern = oDate[x][2]("datePatternStrict");
        if (datePattern == null || datePattern == "undefined") {
            datePattern = oDate[x][2]("datePattern");
            if (datePattern == null || datePattern == "undefined") {
                datePattern = "dd.MM.yyyy";
                patternStrict = false;
            } else {
                patternStrict = false;
            }
        }
        var patternIndex = patternStrict ? 2 : 1;
        if (  (form[oDate[x][0]].type == 'text' || form[oDate[x][0]].type == 'textarea') &&
              (value.length > 0) && (datePattern.length > 0)) {
         var positions = getDateTokenPositions(datePattern);
         for (var j = 0;j<tokens.length;j++) {
          datePattern = replaceSubstring(datePattern,tokens[j][0],tokens[j][patternIndex]);
         }
            var regex = new RegExp(datePattern);
            var matched = regex.exec(value);
            if (matched != null) {
                var vDay    = positions[0] != -1 ? matched[positions[0]] : 0;
                var vMonth  = positions[1] != -1 ? matched[positions[1]] : 0;
                var vYear   = positions[2] != -1 ? matched[positions[2]] : 0;
                var vHour   = positions[3] != -1 ? matched[positions[3]] : 0;
                var vMinute = positions[4] != -1 ? matched[positions[4]] : 0;
                var vSecond = positions[5] != -1 ? matched[positions[5]] : 0;
                if (!isValidDateTime(vDay,vMonth,vYear,vHour,vMinute,vSecond)) {
     if (i == 0) {
         focusField = form[oDate[x][0]];
     }
     fields[i++] = oDate[x][1];
     bValid =  false;
                }
   } else {
    if (i == 0) {
        focusField = form[oDate[x][0]];
    }
    fields[i++] = oDate[x][1];
    bValid =  false;
   }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

//checks if date and time are valid
function isValidDateTime(day, month, year, hour, minute, second) {
    return isValidDate(day, month, year) && isValidTime(hour, minute, second);
}

//checks if the time ist valid
function isValidTime(hour, minute, second) {
    return (hour >=0 && hour <25) && (minute >=0 && minute <60) &&
           (second >=0 && second<60);
}

function isValidDate(day, month, year) {
if (month < 1 || month > 12) {
        return false;
    }
    if (day < 1 || day > 31) {
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) &&
        (day == 31)) {
        return false;
    }
    if (month == 2) {
        var leap = (year % 4 == 0 &&
                   (year % 100 != 0 || year % 400 == 0));
        if (day>29 || (day == 29 && !leap)) {
            return false;
        }
    }
    return true;
}

function doValidateRequired(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRequired = new required();
    for (x in oRequired) {
        var field = form[oRequired[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'file' ||
            field.type == 'select-one' ||
            field.type == 'radio' ||
            field.type == 'password') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (trim(value).length == 0) {

                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oRequired[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

// Trim whitespace from left and right sides of s.
function trim(s) {
    return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}

function doValidateMinLength(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMinLength = new minlength();
    for (x in oMinLength) {
        var field = form[oMinLength[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea') {

            var iMin = parseInt(oMinLength[x][2]("minlength"));
            if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oMinLength[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

function doValidateMaxLength(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMaxLength = new maxlength();
    for (x in oMaxLength) {
        var field = form[oMaxLength[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea') {

            var iMax = parseInt(oMaxLength[x][2]("maxlength"));
            if (field.value.length > iMax) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oMaxLength[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

function doValidateMask(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMasked = new mask();
    for (x in oMasked) {
        var field = form[oMasked[x][0]];

        if ((field.type == 'text' ||
             field.type == 'textarea') &&
             (field.value.length > 0)) {

            if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oMasked[x][1];
                isValid = false;
            }
        }
    }

    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

function matchPattern(value, mask) {
   return mask.exec(value);
}

function doValidateByte(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oByte = new ByteValidations();
    for (x in oByte) {
        var field = form[oByte[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (value.length > 0) {
                if (!isAllDigits(value)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oByte[x][1];

                } else {

                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oByte[x][1];
                        bValid = false;
                    }
                }
            }

        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function doValidateShort(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oShort = new ShortValidations();
    for (x in oShort) {
        var field = form[oShort[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (value.length > 0) {
                if (!isAllDigits(value)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oShort[x][1];

                } else {

                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oShort[x][1];
                        bValid = false;
                    }
               }
           }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function doValidateInteger(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oInteger = new IntegerValidations();

    for (x in oInteger) {
        var field = form[oInteger[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (value.length > 0) {

                if (!isAllDigits(value)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oInteger[x][1];

                } else {
                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oInteger[x][1];
                        bValid = false;
                   }
               }
           }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function doValidateLong(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oLong = new LongValidations();

    for (x in oLong) {
        var field = form[oLong[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (value.length > 0) {

                if (!isAllDigits(value)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oLong[x][1];

                } else {
                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oLong[x][1];
                        bValid = false;
                   }
               }
           }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function isAllDigits(argvalue) {
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    if (argvalue.substring(0, 2) == "0x") {
       validChars = "0123456789abcdefABCDEF";
       startFrom = 2;
    } else if (argvalue.charAt(0) == "0") {
       validChars = "01234567";
       startFrom = 1;
    } else if (argvalue.charAt(0) == "-") {
        startFrom = 1;
    }

    for (var n = startFrom; n < argvalue.length; n++) {
        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
    }
    return true;
}

function doValidateFloat(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oFloat = new FloatValidations();
    for (x in oFloat) {
        var field = form[oFloat[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (value.length > 0) {
                // remove '.' before checking digits
                var tempArray = value.split('.');
                var joinedString= tempArray.join('');

                if (!isAllDigits(joinedString)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oFloat[x][1];

                } else {
                    var iValue = parseFloat(value);
                    if (isNaN(iValue)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oFloat[x][1];
                        bValid = false;
                    }
                }
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function doValidateDouble(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oDouble = new DoubleValidations();
    for (x in oDouble) {
        var field = form[oDouble[x][0]];

        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {

            var value = '';
            // get field's value
            if (field.type == "select-one") {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            } else {
                value = field.value;
            }

            if (value.length > 0) {
                // remove '.' before checking digits
                var tempArray = value.split('.');
                var joinedString= tempArray.join('');

                if (!isAllDigits(joinedString)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oDouble[x][1];

                } else {
                    var iValue = parseFloat(value);
                    if (isNaN(iValue)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oDouble[x][1];
                        bValid = false;
                    }
                }
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function doValidateRange(form) {
    return validateIntRange(form);
}

function doValidateIntRange(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRange = new intRange();
    for (x in oRange) {
        var field = form[oRange[x][0]];

        if ((field.type == 'text' ||
             field.type == 'textarea') &&
            (field.value.length > 0)) {

            var iMin = parseInt(oRange[x][2]("min"));
            var iMax = parseInt(oRange[x][2]("max"));
            var iValue = parseInt(field.value);
            if (!(iValue >= iMin && iValue <= iMax)) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oRange[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

function doValidateFloatRange(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRange = new floatRange();
    for (x in oRange) {
        var field = form[oRange[x][0]];

        if ((field.type == 'text' ||
             field.type == 'textarea') &&
            (field.value.length > 0)) {

            var fMin = parseFloat(oRange[x][2]("min"));
            var fMax = parseFloat(oRange[x][2]("max"));
            var fValue = parseFloat(field.value);
            if (!(fValue >= fMin && fValue <= fMax)) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oRange[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

function doValidateDoubleRange(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRange = new doubleRange();
    for (x in oRange) {
        var field = form[oRange[x][0]];

        if ((field.type == 'text' ||
             field.type == 'textarea') &&
            (field.value.length > 0)) {

            var fMin = parseFloat(oRange[x][2]("min"));
            var fMax = parseFloat(oRange[x][2]("max"));
            var fValue = parseFloat(field.value);
            if (!(fValue >= fMin && fValue <= fMax)) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oRange[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        showErrorMessage(fields.join(newLine));
    }
    return isValid;
}

function doValidateCreditCard(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oCreditCard = new creditCard();
    for (x in oCreditCard) {
        if ((form[oCreditCard[x][0]].type == 'text' ||
             form[oCreditCard[x][0]].type == 'textarea') &&
            (form[oCreditCard[x][0]].value.length > 0)) {
            if (!luhnCheck(form[oCreditCard[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oCreditCard[x][0]];
                }
                fields[i++] = oCreditCard[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function luhnCheck(cardNumber) {
    if (isLuhnNum(cardNumber)) {
        var no_digit = cardNumber.length;
        var oddoeven = no_digit & 1;
        var sum = 0;
        for (var count = 0; count < no_digit; count++) {
            var digit = parseInt(cardNumber.charAt(count));
            if (!((count & 1) ^ oddoeven)) {
                digit *= 2;
                if (digit > 9) digit -= 9;
            };
            sum += digit;
        };
        if (sum == 0) return false;
        if (sum % 10 == 0) return true;
    };
    return false;
}

function isLuhnNum(argvalue) {
    argvalue = argvalue.toString();
    if (argvalue.length == 0) {
        return false;
    }
    for (var n = 0; n < argvalue.length; n++) {
        if ((argvalue.substring(n, n+1) < "0") ||
            (argvalue.substring(n,n+1) > "9")) {
            return false;
        }
    }
    return true;
}

function doValidateEmail(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oEmail = new email();
    for (x in oEmail) {
        if ((form[oEmail[x][0]].type == 'text' ||
             form[oEmail[x][0]].type == 'textarea') &&
            (form[oEmail[x][0]].value.length > 0)) {
            if (!checkEmail(form[oEmail[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oEmail[x][0]];
                }
                fields[i++] = oEmail[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        showErrorMessage(fields.join(newLine));
    }
    return bValid;
}

function checkEmail(emailStr) {
   if (emailStr.length == 0) {
       return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
       return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
       return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
       for (var i = 1; i <= 4; i++) {
          if (IPArray[i] > 255) {
             return false;
          }
       }
       return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
       return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
       (domArr[domArr.length-1].length > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}

function showErrorMessage(message)
{
    showMessage(message);
}

//created by guggero, 27.07.04
function showMessage(message)
{
    message = replaceSubstring(message, newLine, "\n");
    message = replaceSubstring(message, "&auml;", "\u00E4");
    message = replaceSubstring(message, "&ouml;", "\u00F6");
    message = replaceSubstring(message, "&uuml;", "\u00FC");
    message = replaceSubstring(message, "&Auml;", "\u00C4");
    message = replaceSubstring(message, "&Ouml;", "\u00D6");
    message = replaceSubstring(message, "&Uuml;", "\u00DC");
    alert(message);
}


//created by guggero, 27.07.04
function getDateTokenPositions(pattern) {
    var strPositions = new Array(pattern.indexOf(day[0]),
                                 pattern.indexOf(month[0]),
                                 pattern.indexOf(year[0]),
                                 pattern.indexOf(hour[0]),
                                 pattern.indexOf(minute[0]),
                                 pattern.indexOf(second[0]));
    var tokCopy = new Array(day, month, year, hour, minute, second);
    for (var i = 0;i<tokCopy.length;i++) {
        for (var j = 0;j<tokCopy.length-1;j++) {
            if (strPositions[j]>strPositions[j+1]) {
                var save = strPositions[j];
                strPositions[j] = strPositions[j+1];
                strPositions[j+1] = save;
                save = tokCopy[j];
                tokCopy[j] = tokCopy[j+1];
                tokCopy[j+1] = save;
            }
        }
    }
    var newTokens = new Array();
    var newIndex = 0;
    for (var i = 0;i<strPositions.length;i++) {
      if (strPositions[i] != -1) newTokens[newIndex++] = tokCopy[i];
    }
    var positions = new Array(findValueInArray(day[0],newTokens),
                              findValueInArray(month[0],newTokens),
                              findValueInArray(year[0],newTokens),
                              findValueInArray(hour[0],newTokens),
                              findValueInArray(minute[0],newTokens),
                              findValueInArray(second[0],newTokens));
    return positions;
}

//created by guggero, 27.07.04
function findValueInArray(value,array) {
    for (var i = 0;i<array.length;i++) {
        if (array[i][0] == value) return i+1;
    }
    return -1;
}

//replace a substring in a string with another, return original string if searched string not found
//created by guggero, 27.07.04
function replaceSubstring(inputString, fromString, toString) {
   // Goes through the inputString and replaces every occurrence of fromString with toString
   var temp = inputString;
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      // Find a string that doesn't exist in the inputString to be used
      // as an "inbetween" string
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      } // Keep on going until we build an "inbetween" string that doesn't exist
      // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      // Next, replace the "inbetween" string with the "toString"
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } // Ends the check to see if the string being replaced is part of the replacement string or not
   return temp; // Send the updated string back to the user
} // Ends the "replaceSubstring" function
