//-------------------------------------------------------------------
// isNull(value)
//   Returns true if value is null
//-------------------------------------------------------------------
function isNull(val){return(val==null);}

//-------------------------------------------------------------------
// isBlank(value)
//   Returns true if value only contains spaces
//-------------------------------------------------------------------
function isBlank(val){
    if(val==null){return true;}
    for(var i=0;i<val.length;i++) {
        if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
    }
    return true;
}

//-------------------------------------------------------------------
// isInteger(value)
//   Returns true if value contains all digits
//-------------------------------------------------------------------
function isInteger(val){
    if (isBlank(val)){return false;}
    for(var i=0;i<val.length;i++){
        if(!isDigit(val.charAt(i))){return false;}
    }
    return true;
}

//-------------------------------------------------------------------
// isNumeric(value)
//   Returns true if value contains a positive float value
//-------------------------------------------------------------------
function isNumeric(val){return(parseFloat(val,10)==(val*1));}

//-------------------------------------------------------------------
// isArray(obj)
// Returns true if the object is an array, else false
//-------------------------------------------------------------------
function isArray(obj){return(typeof(obj.length)=="undefined")?false:true;}

//-------------------------------------------------------------------
// isDigit(value)
//   Returns true if value is a 1-character digit
//-------------------------------------------------------------------
function isDigit(num) {
    if (num.length>1){return false;}
    var string="1234567890";
    if (string.indexOf(num)!=-1){return true;}
    return false;
}

//---------------------------------------------------------------
// isSpecialChar(value)
// Returns true if value is a non special char value
//---------------------------------------------------------------
function isSpecialChar(val){
    //    if(val.length>1){return false;}
    var string="()>,<+-*\|-_[]{};:/?.`~!@#$%^&*";
    for(var i=0;i<val.length;i++){
        if (string.indexOf(val.charAt(i))==-1){return false;}
    }
    return true;
}

function trim(inputString) {
    // Removes leading and trailing spaces from the passed string. Also removes
    // consecutive spaces and replaces it with one space. If something besides
    // a string is passed in (null, custom object, etc.) then return the input.
    if (typeof inputString != "string") { return inputString; }
    var retValue = inputString;
    var ch = retValue.substring(0, 1);

    while (ch == " " | ch=="\n" | "\r") { // Check for spaces at the beginning of the string
        retValue = retValue.substring(1, retValue.length);
        ch = retValue.substring(0, 1);
    }
    ch = retValue.substring(retValue.length-1, retValue.length);

    while (ch == " " | ch=="\n"| ch == "\r" ) { // Check for spaces at the end of the string
        retValue = retValue.substring(0, retValue.length-1);
        ch = retValue.substring(retValue.length-1, retValue.length);
    }
    while (retValue.indexOf("  ") != -1) { // Note that there are two spaces in the string - look for multiple spaces within the string
        retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); // Again, there are two spaces in each of the strings

    }
    return retValue; // Return the trimmed string back to the user
}

function isStringOnly(val){
    //  if(val.length>1){return false;}
    var string="ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz";
    for(var i=0;i<val.length;i++){
        if (string.indexOf(val.charAt(i))==-1){return false;}
    }
    return true;
}

function isAlphaNumaric(val){
    //  if(val.length>1){return false;}
    var string="ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz1234567890";
    for(var i=0;i<val.length;i++){
        if (string.indexOf(val.charAt(i))==-1){return false;}
    }
    return true;
}

function validationAlert(strAlert, hField) {
    // Displays an alert, focuses a form field, and returns false.
    alert(strAlert);
    try { hField.focus(); } catch(ex) {}
    return false;
}

function validateInput(hInput, minLength, inputDescription) {
    if (hInput.value.length == 0) {
        return validationAlert("Please enter " + inputDescription + ".", hInput);
    } else if (hInput.value.length < minLength) {
        return validationAlert("Please re-enter " + inputDescription + ".\n(The information you entered is incomplete.)", hInput);
    }
    return true;
}

function validateSelectbox(hSelectbox, strAlert) {
    if (hSelectbox.value == '-9999') {
        return validationAlert(strAlert, hSelectbox);
    }
    return true;
}

function validateComparison(hInput, strCompare, inputDescription, extraDescription) {
    if (hInput.value != strCompare) {
        return validationAlert("Please re-enter " + inputDescription + " " + extraDescription + ".", hInput);
    }
    return true;
}

function validateNumbersOnly(hInput, strAlert) {
    if (/[^0-9]/.test(hInput.value)) {
        return validationAlert(strAlert, hInput);
    }
    return true;
}

function validateIntegerInput(hInput, minLength, inputDescription) {
    if (!validateInput(hInput, minLength, inputDescription)) { return false; }
    if (!validateNumbersOnly(hInput, inputDescription)) { return false; }
    return true;
}

function isZipCodeValid(zip) {
    zip = trim(zip);
    if(isInteger(zip)) {
        if(zip.length != 5 && zip.length != 9) {
            return false;
        }
        else
            return true;
    }

    if(zip.indexOf('-') != -1) {
        var firstPart = zip.substring(0,zip.indexOf('-'));
        if(!validateFirstPartZip(firstPart))
            return false;

        var secPart = zip.substring(zip.indexOf('-')+1,zip.length);
        if(!validateSecondPartZip(secPart))
            return false;

        return true;
    }

    return false;
}

function validateFirstPartZip(firstPartZip) {
    firstPartZip = trim(firstPartZip);
    if(!isInteger(firstPartZip))
        return false;

    if(firstPartZip.length != 5)
        return false;

    return true;
}

function validateSecondPartZip(secPartZip) {
    secPartZip = trim(secPartZip);
    if(!isInteger(secPartZip))
        return false;

    if(secPartZip.length != 4)
        return false;

    return true;
}

function isValidEmail(strEmail) {
    var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

    if (strEmail.length < 5) { return false; }

    if (!strEmail.match(re)) { return false; }

    return true;
}

// phone number validation methods

//Strips the given string of special characters
function removeSpecialChars(val) {
    var specialChars = [' ','!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=', '{', '}', '[', ']', '\\', '|', '/', '?', '>', '<', ':', ';', '\'', '"', '`', '~'];
    var newVal = val;
    for(var i=0;i<specialChars.length;i++) {
        while(val.indexOf(specialChars[i]) != -1) {
            val = val.substring(0,val.indexOf(specialChars[i])) + val.substring(val.indexOf(specialChars[i])+1, val.length);
        }
    }

    return val;
}

//====================== Validation methods
function isValidPhoneNo(val){
    //if (isBlank(val)){return false;}
    for(var i=0;i<val.length;i++){
        if(!isPhoneNoString(val.charAt(i))){
            return false;}
    }
    var newVal = removeSpecialChars(val);

    if(!isPhNoStartValid(newVal))
        return false;

    if(newVal.length < 10 || newVal.length > 11)
        return false;
    return true;
}

function isPhNoStartValid(phNo)  {
    var invalidStarts = ['999', '411', '1010', '600', '700', '710', '88', '900', '555'];
    for(var i=0;i<invalidStarts.length;i++) {
        if(phNo.indexOf(invalidStarts[i]) == 0) {
            return false;
        }
    }
    return true;
}

function isPhoneNoString(num) {
    if (num.length>1){return false;}
    var string="1234567890 -()+";
    if (string.indexOf(num)!=-1){return true;}
    return false;
}



// phone number validation methods end

function processContactUsForm(document)
{

    var fieldName;
    var form = document.forms[0];

    for (var i=0; i < form.elements.length; i++)
    {
        fieldName = form.elements[i].name;

        if(fieldName == "name")
        {
            if (trim(form.name.value) == "")
            {
                validationAlert("First Name is required.",form.elements[i]);
                return false;
            }
            else if(!isStringOnly(trim(form.name.value)))
            {
                validationAlert("Please enter your name with only letters.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("First Name field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "name2")
        {
            if (trim(form.name2.value) == "")
            {
                validationAlert("Last Name is required.",form.elements[i]);
                return false;
            }
            else if(!isStringOnly(trim(form.name2.value)))
            {
                validationAlert("Please enter your last name with only letters.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Last Name field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "organization")
        {
            if (trim(form.organization.value) == "")
            {
                validationAlert("Company is required.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Company field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "address")
        {
            if (trim(form.address.value) == "")
            {
                validationAlert("Address is required.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Address field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "city")
        {
            if (trim(form.city.value) == "")
            {
                validationAlert("City is required.",form.elements[i]);
                return false;
            }
            else if(!isStringOnly(trim(form.city.value)))
            {
                validationAlert("Please enter your city with only letters.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("City field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "state")
        {
            if (trim(form.state.value) == "")
            {
                validationAlert("State is required.",form.elements[i]);
                return false;
            }
            else if(!isStringOnly(trim(form.state.value)))
            {
                validationAlert("Please enter your State with only letters.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "country")
        {
            if (trim(form.country.value) == "")
            {
                validationAlert("Country is required.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Country field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "phone" || fieldName == "phone3" || fieldName == "phone4")
        {
            var phoneVal = trim(form.phone.value + form.phone3.value + form.phone4.value);
            if(phoneVal == "")
            {
                validationAlert("Phone no is required", form.elements[i]);
                return false;
            }
            else if(!isValidPhoneNo(phoneVal))
            {
                validationAlert("The Phone Number you have entered is not valid, please enter a valid phone number.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "email")
        {
            if (trim(form.email.value) == "")
            {
                validationAlert("Email is required.",form.elements[i]);
                return false;
            }
            else if(!isValidEmail(trim(form.email.value))) {
                validationAlert("Please enter a valid email address.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Email field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "product")
        {
            if (trim(form.product.value) == "")
            {
                validationAlert("Product is required.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Product field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "website")
        {
            if (trim(form.website.value) == "")
            {
                validationAlert("Website is required.",form.elements[i]);
                return false;
            }
            else if(checkProfane(form.elements[i].value))
            {
                validationAlert("Website field contains profane words.",form.elements[i]);
                return false;
            }
        }
        else if(fieldName == "cpaMetric")
        {
            if (!validateSelectbox(form.elements[i], "Please select a CPA Metric."))
            {
                return false;
            }
        }
        else if(fieldName == "comments")
        {
            if(checkProfane(form.elements[i].value))
            {
                validationAlert("Comments contain profane words", form.elements[i]);
                return false;
            }
        }

    }
    return true;

}

function checkProfane(fieldVal)
{
    var profaneWords = new Array('.*fuck.*','.*shit.*','.*sucker.*','.*fuk.*','.*ass.*','.*booty.*','.*bitch.*','.*dog.*','.*sonofabitch.*','.*pig.*','.*spam.*','.*\\spopu.*','.*[w\\s]hore.*','.*suck.*','.*slut.*','.*piss.*','.*cunt.*','.*\\stits.*','.*\\sscrew.*','.*\\sbutt.*','.*pussy.*','.*poop.*','.*vagina.*','.*\\sfart\\s.*');

    for(var i=0;i<profaneWords.length;i++)
    {
        if(fieldVal.match(profaneWords[i]))
            return true;
    }
    return false;
}


