<!--
// ############################################################################
// #           A U T O . N E T [_o]  (c)  2 0 0 8 :: AdNWeb division          #
// ############################################################################
// #                     FORM VALIDATION JAVASCRIPT MODULE                    #
// #                     ---------------------------------                    #
// #                           FILE:  validation.js                           #
// #           CREATION (Author, Date):  Vitor Varalonga, 2007/03/15          #
// #         LAST UPDATE (Author, Date):  Vitor Varalonga, 2008/08/06         #
// ############################################################################


// ValidateEmail - E-mail validation

function ValidateEmail(email)
{
	return (email.search(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/) != -1);
}


// ValidatePostalCode - Postal Code validation

function ValidatePostalCode()
{
    if (arguments.length == 2)  // 2 arguments - Postal Code 1 and Postal Code 2
        return (arguments[0].search(/^\d{4}$/) != -1 && arguments[1].search(/^\d{3}$/) != -1)
    else  // 1 arguments - both Postal Code 1 and Postal Code in one string
    	return (arguments[0].search(/^\d{4}-\d{3}$/) != -1);
}


// ValidateInt - Integer validation

function ValidateInt()      // params - string, min. nº digits (opt.), max. nº digits (opt.)
{
    var reInt = ""
    if (arguments.length > 1)
        reInt = "{" + arguments[1] + "," + (arguments.length > 2 ? arguments[2] : "") + "}";
    reInt = new RegExp("^\\d" + (reInt == "" ? "+" : reInt) + "$");
    
    return reInt.test(arguments[0]);
}


// ValidateIntNotZero - Integer (other than zero) validation

function ValidateIntNotZero()      // params - string, min. nº digits (opt.), max. nº digits (opt.)
{
    var idx;
    var arrParam = new Array();
    for (idx = 0; idx < arguments.length; idx++)
        arrParam[idx] = typeof arguments[idx] == "string" ? "\"" + arguments[idx] + "\"" : arguments[idx];
    return eval("ValidateInt(" + arrParam.join(", ")  + ")") && parseInt(arguments[0], 10) > 0;
}


// ValidateFloat - Float validation

function ValidateFloat()      // params - string, min. nº decimal places (opt.), max. nº decimal places (opt.)
{
    var reFloat = "+";
    var opt = "?";
    if (arguments.length > 1)
    {
        var min = arguments[1];
        if (min == 0) min = 1;
        else opt = ""
        reFloat = "{" + min + "," + (arguments.length > 2 ? arguments[2] : "") + "}";
    }
    reFloat = new RegExp("^\\d+((\\.|,)\\d" + reFloat + ")" + opt + "$");
    return reFloat.test(arguments[0]);
}


// ParseStrToFloat - converts a string to a float number

function ParseStrToFloat()     // params - string, doValidation, min. nº decimal places (opt.), max. nº decimal places (opt.)
{
    if (arguments.length == 1 || !arguments[1])
        return parseFloat(arguments[0].replace(",", "."));
    else
    {
        var strParams = "'" + arguments[0] + "'";
        for (var idx = 2; idx < arguments.length; idx++)
            strParams += ", " + arguments[idx];
        return eval("ValidateFloat(" + strParams + ")") ? parseFloat(arguments[0].replace(",", ".")) : null;
    }
}


// ValidateMoney - Money validation

function ValidateMoney(str)
{
    return ValidateFloat(str, 0, 2);    
}


// ValidateMoneyMax - Money validation (with maximum value filtering)
//      RETURN VALUES:  1 - Valid; 0 - Not valid; -1 - Valid but exceeds maximum

function ValidateMoneyMax(str, max)
{
    if (ValidateMoney(str))
        return (parseFloat(str.replace(",", ".")) <= max ? 1 : -1);
    else
        return 0;
}


// ValidateMoneyMin - Money validation (with minimum value filtering)
//      RETURN VALUES:  1 - Valid; 0 - Not valid; -2 - Valid but is above minimum

function ValidateMoneyMin(str, min)
{
    if (ValidateMoney(str))
        return (parseFloat(str.replace(",", ".")) >= min ? 1 : -1);
    else
        return 0;
}


// ValidateDate - Date validation
//      PARAMS:  prefix, day (d[d]), month (m[m]), year (yyyy) [, req (def = true)]

function ValidateDate()
{
    var strPrefix = arguments[0];
    var valDia = arguments[1];
    var valMes = arguments[2];
    var valAno = arguments[3];
    var msgErro = "";
    
    if (arguments.length > 4 && !arguments[4] && valDia == "" && valMes == "" && valAno == "")
        return msgErro;
    
    if (strPrefix != "") strPrefix = " " + strPrefix;
    
    if (!ValidateIntNotZero(valDia, 1, 2))
        return "DIA" + strPrefix + ": não indicado ou inválido";
    
    if (!ValidateIntNotZero(valMes, 1, 2))
        return "MÊS" + strPrefix + ": não indicado ou inválido";
    
    if (!ValidateIntNotZero(valAno, 4, 4))
        return "ANO" + strPrefix + ": não indicado ou inválido";
    
    valDia = parseInt(valDia, 10);
    valMes = parseInt(valMes, 10);
    valAno = parseInt(valAno, 10);
	
    var diasFev = (valAno % 400 == 0 || (valAno % 4 == 0 && valAno % 100 != 0) ? 29 : 28);
    if (valMes == 2 && valDia > diasFev)
	    msgErro = "DIA" + strPrefix + ": o mês de Fevereiro do " + valAno + " só tem " + diasFev + " dias.";
    else if ((valMes == 4 || valMes == 6 || valMes == 9 || valMes == 11) && valDia == 31)
	    msgErro = "DIA" + strPrefix + ": o mês seleccionado só tem 30 dias.";
	
    return msgErro;
}
-->