/*
File: FieldsCheck.js         - functions for input fields validation
Status:                         - in process
Parameters:
----------------------------------------------------------
objInput                 - object for prosessing
msg                         - error message
objValueLength         - object value length
objValue                 - object value
strSymbols                 - line of symbols
objName                        - object name (example string: "parent.f_8.document.ZIPomits.ZIPOmit1")

Functions:
---------------------------------------------------------
fCheckCC(objInput)        - checking Credit card number
fCheckInt(objInput, msg) - checking integer
fCheckIntOrNull(objInput, msg) - checking integer, null allowed
fCheckFloat(objInput, msg) - checking float, returns TRUE if input objInput contains a valid positive or negative float, returns FALSE if input control is not defined (null) or contains invalid float.
fCheckPath(objInput, msg) - checking string for "./:<>?| symbols not allowed
fCheckSic(objInput, msg) - checking SIC number
fCheckLenEQ(objInput1, objInput2, msg) - checking for EQ length
fCheckGTE(objInput1, objInput2, msg) - checking for objInput2 greater then objInput1
fCheckGTEInt(objInput1, objInput2, msg) - integer checking for objInput2 greater then objInput1
fCheckZip(objInput, msg) - checking ZIP code
fCheckCity(objInput, msg) - checking City code
fCheckCounty(objInput, msg) - checking County code
fCheckState(objInput, msg) - checking State code

fSetFocus (objInput) - setting focus to objInput
CheckForEmpty(objInput, msg) - checking objInput for Empty value
CheckForLen(objValueLength, objInput, msg) - checking for objInput EQ to objValueLength length
CheckForExistEmpty(objInput, msg) - checking objInput for Empty value and existanse
CheckForLetterNumber(objInput, msg) - checking objInput for only letters/numbers allowed
fLTrim(objValue) - left trim
fRTrim(objValue) - right trim
fAllTrim(objValue) - all trim (value input parameter)

fCheckEmail(objInput, msg) - validate Email
isEmailFormat(objInput) - validate Email, no message output
CheckString(objValue, strSymbols) - checking for objValue containing only symbols located in strSymbols
objAllTrim(objInput) - all trim (object input parameter)
objSelectFocus(objInput,msg) - alert msg, set focus to objInput, return false
fCheckDate(objInput,msg) - check date format
fCheckMonthValue(monthValue, msg) - check month in 1-12 Range
fCheckDayValue(dayValue, msg) - check day in 1-31 Range
fCheckYearValue(yearValue, msg) - check year in 0-9999 Range
Sample:

function fCheckSometh(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){

                if (condition 1){
                        alert(msg);
                        return false;
                }
                if (condition 2){
                        alert(msg);
                        return false;
                }
                ...
        }
        return true;
}

*/
function fCheckCC(objInput){
        if (String(objInput)!=String("undefined") && objInput != null){

                if (objInput.value.length == 0) return false;

                //check for dileberate hack
                if (objInput.value == "111111111111111") return false;

                // check for correct first digit
                var thischar=objInput.value.charAt(0);
                if (thischar != "4" && thischar != "3" && thischar != "5") return false;

                // check for correct number of digits for Amex
                if (thischar == "3" && objInput.value.length != 15) return false;

                // check for correct number of digits for Visa
                if (thischar == "4" && !(objInput.value.length == 13 || objInput.value.length == 16)) return false;

                // check for correct number of digits for MC
                if (thischar == "5" && objInput.value.length != 16) return false;

                var multiplier=2;
                var sum=0;
                var product=0;

                // Check each digit for keymatch
                for (var i=objInput.value.length-2; i>=0; i--) {
                        thischar=objInput.value.charAt(i);
                        product=multiplier*thischar;
                        if (product > 9) {
                                sum=sum+product-9;
                        }
                        else {
                                sum=sum+product;
                        }
                        multiplier=3-multiplier;
                }

                // mod 10 test
                sum=sum%10;
                if (sum != 0) {
                        sum=10-sum;
                }

                if (sum != objInput.value.charAt(objInput.value.length-1)) return false;

        return true;
        }
}

function fCheckInt(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                var str1 = fAllTrim(objInput.value);
                if (str1.length == 0){
                        alert(msg);
                        return false;
                }
                if (str1.search("[^0-9]") != -1){
                        alert(msg);
                        return false;
                }
        }
        return true;
}

function fCheckPath(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                if (objInput.value.length == 0){
                        alert(msg);
                        return false;
                }
                if (objInput.value.search('["./:<>?|]') != -1){
                        alert('Characters: "./:<>?| are not allowed here.');
                        return false;
                }
        }
        return true;
}

function fCheckLenEQ(objInput1, objInput2, msg){
        if (String(objInput1)!=String("undefined") && objInput1 != null && String(objInput2)!=String("undefined") && objInput2 != null){
                if (objInput1.value.length != objInput2.value.length){
                        alert(msg);
                        return false;
                }
                return true;
        }
}

function fCheckGTE(objInput1, objInput2, msg){
        if (String(objInput1)!=String("undefined") && objInput1 != null && String(objInput2)!=String("undefined") && objInput2 != null){
                if ((objInput1.value.length != 0) && (objInput2.value.length != 0)){
                        if (objInput1.value >= objInput2.value){
                                alert(msg);
                                return false;
                        }
                }
                return true;
        }
}

function fCheckGTEInt(objInput1, objInput2, msg){
	if (String(objInput1)!=String("undefined") && objInput1 != null && String(objInput2)!=String("undefined") && objInput2 != null){
		if ((objInput1.value.length != 0) && (objInput2.value.length != 0)){
			if (parseInt(objInput1.value) >= parseInt(objInput2.value)){
				alert(msg);
				return false;
			}
		}
		return true;
	}
}

function fCheckZip(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                if (objInput.value.length != 0){
                        if ((objInput.value.length != 3) && (objInput.value.length != 5)){
                                alert(msg);
                                return false;
                        }
                        if (objInput.value.search("[^0-9]") != -1){
                                alert(msg);
                                return false;
                        }
                }
                return true;
        }
}

function fCheckCity(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                if (objInput.value.length != 0){
                        if ((objInput.value.length < 4)){
                                alert(msg);
                                return false;
                        }
                        if (objInput.value.search("[^0-9]") != -1){
                                alert(msg);
                                return false;
                        }
                }
                return true;
        }
}

function fCheckCounty(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                if (objInput.value.length != 0){
                        if (objInput.value.length != 3){
                                alert(msg);
                                return false;
                        }
                        if (objInput.value.search("[^0-9]") != -1){
                                alert(msg);
                                return false;
                        }
                }
                return true;
        }
}

function fCheckState(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                if (objInput.value.length != 0){
                        if (objInput.value.length != 2){
                                alert(msg);
                                return false;
                        }
                        if (objInput.value.search("[^a-zA-Z]") != -1){
                                alert(msg);
                                return false;
                        }
                }
                return true;
        }
}

function fSetFocus (objInput){
        objInput.focus();
}

//Functions for checking Empty Value
function CheckForEmpty(objInput, msg){
        if ( fAllTrim(objInput.value) == "" ){
                alert(msg);
                return false;
        }
        else return true;
}

//Functions for checking Length Value
function CheckForLen(objValueLength, objInput, msg){
        var strInput=fAllTrim(objInput.value);
        if ( strInput.length < objValueLength){
                alert(msg);
                return false;
        }
        else return true;
}

//Check for obj existance; check for thero length; if all ok return true
function CheckForExistEmpty(objInput, msg)
{
        if (String(objInput)!=String("undefined") && objInput != null)
                return  (CheckForEmpty(objInput, msg))
        else
                return true;
}

//Functions for checking Allowable Symbols (only Letters and Numbers)
function CheckForLetterNumber(objInput, msg) {
        for (var i = 0; i < objInput.value.length; i++) {
                ch=objInput.value.charAt(i);
                if (!( (ch >= "A" && ch <= "Z") || (ch >="a" && ch <= "z") || (ch >= "0" && ch <= "9") )) {
                        alert(msg);
                        return false;
                };
        };
        return true;
}

//Functions Left Trim
function fLTrim(objValue) {
        if (objValue.length==0)
                return ('')
        else{
                while (objValue.charAt(0)==' '){
                        if (objValue.length==1)
                                return ('')
                        else
                                objValue=objValue.substring(1,objValue.length);
                }
        }
        return (objValue);
}

//Functions Right Trim
function fRTrim(objValue) {
        if (objValue.length==0)
                return ('')
        else{
                while (objValue.charAt(objValue.length-1)==' '){
                        if (objValue.length==1)
                                return ('')
                        else
                                objValue=objValue.substring(0,objValue.length-1);
                }
        }
        return (objValue);
}

// Functions All Trim
function fAllTrim(objValue) {
        return (fRTrim(fLTrim(objValue)))
}

// Functions for checking E-Mail
function fCheckEmail(objInput, msg){
        if (!isEmailFormat(objInput)){
                alert(msg);
                return false;
        }
        return true;
}

// Functions for checking E-Mail format without showing any message
function isEmailFormat(objInput) {
        var strInputAll = fAllTrim(objInput.value);
        var blnResult = true;
        if (strInputAll.length > 0){
                var strEmails="";
                strInputAll=strInputAll.replace(/,/g,";");
                var strArrInput=strInputAll.split(";");
                for (i = 0; i < strArrInput.length; i++){
                        var strInput = fAllTrim(strArrInput[i]);
                        if (strInput.length > 0){
                                if (strInput.length < 6 || strInput.indexOf("@") < 1 || strInput.indexOf(" ") >= 0 || strInput.length - strInput.indexOf("@") < 4)
                                        blnResult = false;
                                else {
                                        var strOutTmp = strInput;
                                        while (strOutTmp.indexOf(".") >= 0)
                                                strOutTmp = strOutTmp.substring(strOutTmp.indexOf(".") + 1, strOutTmp.length);
                                        if (strOutTmp.length != 4 && strOutTmp.length != 3 && strOutTmp.length != 2) // Changed 07/17/03 by Alexey Prochukhan: 4-char email domain extension support.
                                                blnResult = false;
                                }
                                if (blnResult)
                                        strEmails+=((strEmails.length>0)?(";"+((strArrInput[i].length!=strInput.length)?" ":"")):"")+strInput
                                else
                                        break;
                        };
                };
                if (strEmails == "")
      blnResult = false;
                if (blnResult)
                        objInput.value=strEmails;
        };
        return blnResult;
}

//Functions for checking Allowable Symbols (Each symbol from objValue should be found in strSymbols)
function CheckString(objValue, strSymbols){
        if (objValue.length>0){
                for (var i = 0; i < objValue.length; i++){
                        if (strSymbols.indexOf(objValue.charAt(i))<0)
                                return false;
                }
        }
        return true;
}

function objAllTrim(objInput){
        objInput.value=fAllTrim(objInput.value);
        return (objInput.value);
}

function objSelectFocus(objInput,msg){
        alert(msg);
        objInput.focus();
        objInput.select();
        return false;
}

function contoobj(val){
 this.value = val;
}

function fCheckDateValue(objvalue, msg){
        t = new contoobj(objvalue);
  return fCheckDate(t, msg);
}

function fCheckDate(objInput, msg)
    {
        objInput_value = objInput.value;

        var passed = true;
        if (objInput_value.length == 0)
                return true;
        isplit = objInput_value.indexOf('/');
        if (isplit == -1 || isplit == objInput_value.length)
                {passed = false;}
        sMonth = objInput_value.substring(0, isplit);
        if (sMonth.length == 0)
                {passed = false;}
        isplit = objInput_value.indexOf('/', isplit + 1);
        if (isplit == -1 || (isplit + 1 ) == objInput_value.length)
                {passed = false;}
        sDay = objInput_value.substring((sMonth.length + 1), isplit);
        if (sDay.length == 0)
                {passed = false;}
        sYear = objInput_value.substring(isplit + 1);
        if (!fCheckInteger(sMonth)) //check month
                {passed = false;}
        else
        if (!fCheckRange(sMonth, 1, 12) || sMonth.length == 0) //check month
                {passed = false;}
        else
        if (!fCheckInteger(sYear) || sYear.length == 0) //check year
                {passed = false;}
        else
        if (!fCheckRange(sYear, 1900,2099)) //check year
                {passed = false;}
        else
        if (!fCheckInteger(sDay) || sDay.length == 0) //check day
                {passed = false;}
        else
        if (!fCheckDay(sYear, sMonth, sDay)) // check day
                {passed = false;}
        else
                return true;

        if(!passed)
                alert(msg);
                return false;

    }

function fCheckMonthValue(monthValue, msg)
{
    var passed = true;
        if (!fCheckInteger(monthValue)) //check month
                {passed = false;}
        else
        if (!fCheckRange(monthValue, 1, 12)) //check month
                {passed = false;}
        else
                return true;

        if(!passed)
                alert(msg);
                return false;
}

function fCheckDayValue(dayValue, msg)
{
    var passed = true;
        if (!fCheckInteger(dayValue)) //check day
                {passed = false;}
        else
        if (!fCheckRange(dayValue, 1, 31)) //check day
                {passed = false;}
        else
                return true;

        if(!passed)
                alert(msg);
                return false;
}

function fCheckYearValue(yearValue, msg)
{
    var passed = true;
        if (!fCheckInteger(yearValue)) //check day
                {passed = false;}
        else
        if (!fCheckRange(yearValue, 0, 9999)) //check day
                {passed = false;}
        else
                return true;

        if(!passed)
                alert(msg);
                return false;
}

function fCheckInteger(object_value)
    {
    if (object_value.length == 0)
        return true;
        var decimal_format = ".";
        var check_char;
        check_char = object_value.indexOf(decimal_format)
    if (check_char < 1)
        return fCheckNumber(object_value);
    else
        return false;
    }
function fCheckRange(object_value, min_value, max_value)
    {
    if (object_value.length == 0)
        return true;
    if (!fNumberRange(object_value))
        {
        return false;
        }
    else
        {
        return (fNumberRange((eval(object_value)), min_value, max_value));
        }
    return true;
    }
function fCheckDay(checkYear, checkMonth, checkDay)
    {

        maxDay = 31;
        if (checkMonth == 4 || checkMonth == 6 ||
                        checkMonth == 9 || checkMonth == 11)
                maxDay = 30;
        else
        if (checkMonth == 2)
        {
                if (checkYear % 4 > 0)
                        maxDay =28;
                else
                if (checkYear % 100 == 0 && checkYear % 400 > 0)
                        maxDay = 28;
                else
                        maxDay = 29;
        }
        return fCheckRange(checkDay, 1, maxDay);
    }
function fNumberRange(object_value, min_value, max_value)
    {
    if (min_value != null)
        {
        if (object_value < min_value)
                return false;
        }
    if (max_value != null)
        {
        if (object_value > max_value)
                return false;
        }

    return true;
    }
function fCheckNumber(object_value)
    {
    if (object_value.length == 0)
        return true;
        var start_format = " .+-0123456789";
        var number_format = " .0123456789";
        var check_char;
        var decimal = false;
        var trailing_blank = false;
        var digits = false;

        check_char = start_format.indexOf(object_value.charAt(0))
        if (check_char == 1)
            decimal = true;
        else if (check_char < 1)
                return false;
        for (var i = 1; i < object_value.length; i++)
        {
                check_char = number_format.indexOf(object_value.charAt(i))
                if (check_char < 0)
                        return false;
                else if (check_char == 1)
                {
                        if (decimal)                // Second decimal.
                                return false;
                        else
                                decimal = true;
                }
                else if (check_char == 0)
                {
                        if (decimal || digits)
                                trailing_blank = true;
                }
                else if (trailing_blank)
                        return false;
                else
                        digits = true;
        }
    return true
    }

function fCheckIntOrNull(objInput, msg){
        if (String(objInput)!=String("undefined") && objInput != null){
                var str1 = fAllTrim(objInput.value);
                if (str1.search("[^0-9]") != -1){
                        alert(msg);
                        objInput.focus();
                        return false;
                }
        }
        return true;
}

/**
 * Returns TRUE if text input control contains a valid float number.
 * @param   objInput    the text input control to validate.
 * @param   msg         the error message to display the text input control contains a non-float number.
 * @return              TRUE if text input control contains a valid positive or negative float number,
 *                        or it is empty. FALSE if text input control contains a non-valid float number or
 *                      control is not defined (null).
 */
function fCheckFloat(objInput, msg) {
    var valid = true;
    if ((String (objInput) != String ("undefined")) && (objInput != null)) {
        var str = fAllTrim(objInput.value);
        if (str.length == 0)
            valid = true;
        else {
            if (str.charAt(0) == "+")
                str = str.substr(1);
            if ((str.length == 0) ||
                (str.indexOf("-")>0) ||
                (str.split("-").length > 2) ||
                (str.search("[^0-9.\-]") != -1) ||
                (str.search("[0-9]") == -1) ||
                (str.split(".").length > 2) ||
                (str.charAt(str.length-1)=="."))
                valid = false;
        }
    } else
        valid = false;
    if (!valid)
        alert(msg);
    return valid;
}