var whitespace = " \t\n\r";


function sqlSafe(s)
{
    var new_s = s;
    new_s = replaceAll(new_s, "'", "|");
    new_s = replaceAll(new_s, "|", "''");
    new_s = replaceAll(new_s, "\"", "|");
    new_s = replaceAll(new_s, "|", "''");
    return new_s;
}


function stripHTML() {
    var re = /<\S[^><]*>/g
    for (i = 0; i < arguments.length; i++)
        arguments[i].value = arguments[i].value.replace(re, "")
}


/** ************************************************************* */

function makeSafe(i)
{
    i.value = sqlSafe(i.value);
}

/** ************************************************************* */

// Check whether string s is empty.

function isEmpty(s)
{
    return ((s == null) || (s.length == 0));
}

/** ************************************************************* */

// Returns true if string s is empty or
// whitespace characters only.

function isWhitespace(s)

{
    var i;

    // Is s empty?
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);

        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

/** ************************************************************* */


function passwordsCheck(s1, s2) {
    if (isWhitespace(s1)) {
//        alert("Please enter a valid password");
        return false;
    }
    if (s1 != s2) {
//        alert("Both the passwords entered must be the same");
        return false;
    }
    return true;
}

function isEmail(s)
{
    if (isEmpty(s))  return false;
    // if (isEmail.arguments.length == 1) return defaultEmptyOK;
    // else return (isEmail.arguments[1] == true);

    // is s whitespace?
    if (isWhitespace(s)) return false;

    // there must be >= 1 character before @, so we
    // start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    {
        i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    {
        i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else

    // makeSafe(s);
        return true;
}

/** ************************************************************* */

// Checks to see if a required field is blank. If it is, a warning
// message is displayed...

function ForceEntryAndDisplayAlert(objField, fieldName)
{
    var strField = new String(objField.value);
    if (isWhitespace(strField)) {
        alert("Please enter a valid value for " + fieldName);
        return false;
    }

    return true;
}

function ForceEntry(objField)
{
    var strField = new String(objField.value);
    if (isWhitespace(strField)) {
        return false;
    }
    return true;
}


function locationsCheck(fromLocation, toLocation)
{
    if (fromLocation == toLocation) {
        alert("Please select different locations for From Location and To Location");
        return false;
    }
    return true;
}

/** ************************************************************* */

// Returns true if the string passed in is a valid number
// (no alpha characters), else it displays an error message

function ForceNumber(objField, FieldName)
{
    var strField = new String(objField.value);

    if (isWhitespace(strField)) return true;

    var i = 0;

    for (i = 0; i < strField.length; i++)
        if (strField.charAt(i) < '0' || strField.charAt(i) > '9') {
            alert(FieldName + " must be a valid numeric entry.  Please do not use commas or any non-numeric symbols.");
            return false;
        }

    return true;
}

/** ************************************************************* */

// Returns true if the string passed in is a valid money
// (no alpha characters except a decimal place),
// else it displays an error message

function ForceMoney(objField, FieldName)
{
    var strField = new String(objField.value);

    if (isWhitespace(strField)) return true;

    var i = 0;

    for (i = 0; i < strField.length; i++)
        if ((strField.charAt(i) < '0' || strField.charAt(i) > '9') && (strField.charAt(i) != '.')) {
            alert(FieldName + " must be a valid numeric entry.  Please do not use commas or dollar signs or any non-numeric symbols.");
            return false;
        }

    return true;
}


/** ************************************************************* */

// Right trims the string... Useful for SQL datatypes of CHAR

function RTrim(strTrim)
{
    var str = new String(strTrim);
    var i = 0;
    var c = "";
    var endpos = 0

    for (i = str.length; i >= 0 && endpos == 0; i = i - 1) {
        c = str.charAt(i);
        if (whitespace.indexOf(c) == -1)
            endpos = i;
    }

    return str.substring(0, endpos + 1);
}

/** ************************************************************* */

/*
 * PURPOSE: Returns true if the string is a valid date number. A method is
 * passed in (1 = month, 2 = day). If the string is nonnumeric, false is passed
 * back. If the day in the date string is greater than 31, false is returned. If
 * the month is greater than 12, an error is returned.
 */

function isDateNumber(strNum, method)
{
    var str = new String(strNum);
    var i = 0;

    if (isNaN(parseInt(str)) || parseInt(str) < 0) return false;

    if (method == 2)
        if (parseInt(str) > 31)
            return false;
    if (method == 1)
        if (parseInt(str) > 12)
            return false;

    for (i = 0; i < str.length; i++)
        if (str.charAt(i) < '0' || str.charAt(i) > '9')
            return false;


    return true;
}

/** ************************************************************* */

// Displays an alert box with the passed in string...

function PromptErrorMsg(Field, strError)
{
    alert(strError + " is invalid. Please make sure it is in dd/mm/yyyy format.");
}

/** ************************************************************* */

/*
 * PURPOSE: Checks to see if the string is a valid date. A valid date is defined
 * as any of the following:
 * 
 * MM/DD/YY, MM/DD/YYYY, M/D/YY, M/D/YYYY, MM-DD-YY, MM-DD-YYYY, M-D-YY,
 * M-D-YYYY
 */

function ForceDate(strDate, strField)
{
    var str = new String(strDate.value);

    if (isWhitespace(str)) {
        return true;
        // if the field is empty, just return true...
    }

    var i = 0, count = str.length, j = 0;
    while ((str.charAt(i) != "/") && i < count)
        i++;

    if (i == count || i > 2) {
        PromptErrorMsg(strDate, strField);
        return false;
    }

    var addOne = false;
    if (i == 2) addOne = true;

    if (!isDateNumber(str.substring(0, i), 2)) {
        PromptErrorMsg(strDate, strField);
        return false;
    }

    j = i + 1;
    i = 0;

    while ((str.charAt(i + j) != "/") && i + j < count)
        i++;

    if (i + j == count || i > 2) {
        PromptErrorMsg(strDate, strField);
        return false;
    }

    if (!isDateNumber(str.substring(j, i + j), 1)) {
        PromptErrorMsg(strDate, strField);
        return false;
    }

    j = i + 3;
    i = 0;

    if (addOne) j++;

    while (i + j < count)
        i++;


    if (i != 2 && i != 4) {
        PromptErrorMsg(strDate, strField);
        return false;
    }

    if (!isDateNumber(str.substring(j, i + j), 3)) {
        PromptErrorMsg(strDate, strField);
        return false;
    }

    return true;
}

/** ************************************************************* */

// This function determines if the string passed in is a valid
// US zip code. It accepts either ##### or #####-####. If the
// string is valid, it returns true, else false.

function isZipcode(strZip)
{
    var s = new String(strZip);

    if (s.length != 5 && s.length != 10)
    // inappropriate length
        return false;


    for (var i = 0; i < s.length; i++)
        if ((s.charAt(i) < '0' || s.charAt(s) > '9') && s.charAt(i) != '-')
            return false;

    return true;
}

/** ************************************************************* */

// This function ensures that a field is less than or equal to the
// Length passed in. You must call this function with the element
// name in your form (for example: "ForceLength(document.forms[0].txtElement)"
// as opposed to "ForceLength(document.forms[0].tx tElement.value)"
// If the field's value is too large, an error message is displayed
// and false is returned, else true is returned.

function ForceLength(objField, nLength, strWarning)
{
    var strField = new String(objField.value);

    if (strField.length > nLength) {
        alert(strWarning);
        return false;
    } else
        return true;
}


function ismaxlength(obj) {
    var mlength = obj.getAttribute ? parseInt(obj.getAttribute("maxlength")) : ""
    if (obj.getAttribute && obj.value.length > mlength)
        obj.value = obj.value.substring(0, mlength)
}

function toggleImage(id, path, toggleCode, extension) {
    var imageSource = document.getElementById(id).src;
    if (imageSource.indexOf(toggleCode) != -1)
        document.getElementById(id).src = path + id + "." + extension;
    else
        document.getElementById(id).src = path + id + toggleCode + "." + extension;
    return false;
}

function isEmailWithoutDomain(s) {
    if (isEmpty(s))  return false;
    if (isWhitespace(s)) return false;
    return s.indexOf("@") == -1;
}


