/*
 * returns true if a valid date entered
 */
function isValidDate(day, month, year)
{
    // returns true if a valid date
    var valid = false;
    var daysinmonths = new Array(12);
    daysinmonths["01"] = 31;
    daysinmonths["02"] = 28;
    daysinmonths["03"] = 31;
    daysinmonths["04"] = 30;
    daysinmonths["05"] = 31;
    daysinmonths["06"] = 30;
    daysinmonths["07"] = 31;
    daysinmonths["08"] = 31;
    daysinmonths["09"] = 30;
    daysinmonths["10"] = 31;
    daysinmonths["11"] = 30;
    daysinmonths["12"] = 31;

    // check that they all have a value
    if (day == "" || month == "" || year == "")
    {
        return false;
    }

    if (isNaN(day))
    {
        if (day.substr(0,1) == "0")
        {
            day = parseInt(day.substr(1,1));
        }
        else
        {
            day = parseInt(day);
        }
    }

    if (isNaN(month))
    {
        if ( (month.substr(0,1) != "0") && (month.length < 2) )
        {
            month = "0" + month;
        }
    }
    else
    {
        if (month.toString().length < 2)
        {
            month = "0" + month.toString();
        }
        else
        {
            month = month.toString();
        }
    }

    if (isNaN(year))
    {
        year = parseInt(year);
    }

    if ( (year % 4 == 0) && (month == "02") )
    {
        if (day >= 1 && day <= daysinmonths[month] + 1)
        {
            valid = true;
        }
    }
    else
    {
        if (day >= 1 && day <= daysinmonths[month])
        {
            valid = true;
        }
    }

    return valid;
}

/*
 * checks is +ve integer
 * arguments: string to validate
 * returns: true if +ve integer
 */
function isPosInteger(inputVal)
{
    inputStr = inputVal.toString()
    for (var i = 0; i < inputStr.length; i++)
    {
        var oneChar = inputStr.charAt(i);
        if (oneChar < "0" || oneChar > "9")
        {
            return false;
        }
    }
    return true;
}

/*
 * general check for +ve or -ve number
 * arguments: string to validate
 * returns: true if number
 */
function isNumber(inputVal)
{
    oneDecimal = false;
    inputStr = inputVal.toString();
    for (var i = 0; i < inputStr.length; i++)
    {
        var oneChar = inputStr.charAt(i);
        if (i == 0 && oneChar == "-")
        {
            continue;
        }
        if (oneChar == "." && !oneDecimal)
        {
            oneDecimal = true;
            continue;
        }
        if (oneChar < "0" || oneChar > "9")
        {
            return false;
        }
    }
    return true;
}

/*
 * adds commas eg 1,000,000
 */
function addCommas(number)
{
    // adds commas to numbers eg 1,000,000
    number = '' + number;
    if (number.length > 3)
    {
        var mod = number.length % 3;
        var output = (mod > 0 ? (number.substring(0,mod)) : '');
        for (i=0 ; i < Math.floor(number.length / 3); i++)
        {
            if ((mod == 0) && (i == 0))
            {
                output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
            }
            else
            {
                output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
            }
        }
        return (output);
    }
    else
    {
        return number;
    }
}

/*
 * removes commas
 */
function removeCommas(number)
{
    number = number.toString();
    return number.replace(",", "");
}

/*
 * format number string to specified no decimal places
 */
function format (expr, decPlaces)
{
    var str = "" + Math.round(eval(expr) * Math.pow(10,decPlaces));
    var decPoint = str.length - decPlaces;
    return (str.substring(0,decPoint) +"." + str.substring(decPoint,str.length));
}

/*
 * converts a string to proper case
 */
function properCase(strInput, strSplitChar)
{
    // converts a string to Proper Case
    if (strSplitChar == undefined)
    {
          // use space by default
          var strSplitChar = " ";
    }

    strArray = strInput.split(strSplitChar);

    for (var i = 0; i < strArray.length; i++)
    {
        if (strArray[i].length > 1)
        {
            strArray[i] = strArray[i].charAt(0).toUpperCase() + strArray[i].substr(1).toLowerCase();
        }
        else if (strArray[i].length == 1)
        {
            strArray[i] = strArray[i].toUpperCase();
        }
    }
    return strArray.join(" ");
}

/*
 * returns true of the filename portion of a full path contains a space
 */
function filenameHasSpaces(fullpath)
{
    var hasSpaces = false;
    var filename  = "";
    var lastslash = fullpath.lastIndexOf("\\");

    if (lastslash > 0)
    {
        filename = fullpath.substr(lastslash + 1, fullpath.length - (lastslash));
    }
    else
    {
        filename = fullpath;
    }

    if (filename.indexOf(" ") > 0)
    {
        hasSpaces = true;
    }

    return hasSpaces;
}

/*
 * returns true if the file extension of the file is in the validtypes string
 * eg validtype = "gif,jpg,jpeg"
 */
function validFileType(fullpath, validtypes)
{
    var valid = false; // assume not a valid type
    var ext_start = fullpath.lastIndexOf(".");

    if (ext_start != -1)
    {
        var ext = fullpath.substring(ext_start + 1);
        ext = ext.replace(/(^\s)|(\s$)/g,"");

        if (validtypes != "")
        {
            var arr = validtypes.split(",");

            for (var i = 0; i < arr.length; i++)
            {
                var type = arr[i];
                type = type.replace(/(^\s)|(\s$)/g,"");

                if (type == ext)
                {
                    valid = true;
                    break;
                }
            }

        }

    }

    return valid;
}

