﻿// JScript File
function ValidateDate(sender, args) {
    var strValidDateRegex = /^\d{2}\-\d{2}\-\d{4}$/;
    var re = new RegExp(strValidDateRegex);

    args.IsValid = false;
    if (args.Value.match(re)) {
        arrDate = args.Value.split("-");
        var len = arrDate.length;
        if (len != 3)
            return;

        var dd = parseInt(arrDate[0], 10);
        var mm = parseInt(arrDate[1], 10);
        var yy = parseInt(arrDate[2], 10);

        if (mm < 0 || mm > 12)
            return;

        var validdays = 31;
        switch (mm) {
            case 1: validdays = 31; break;
            case 2:
                if (new Date(yy, 2 - 1, 29).getDate() == 29)
                    validdays = 29;
                else
                    validdays = 28;
                break;
            case 3: validdays = 31; break;
            case 4: validdays = 30; break;
            case 5: validdays = 31; break;
            case 6: validdays = 30; break;
            case 7: validdays = 31; break;
            case 8: validdays = 31; break;
            case 9: validdays = 30; break;
            case 10: validdays = 31; break;
            case 11: validdays = 30; break;
            case 12: validdays = 31; break;
        }
        if (dd < 0 || dd > validdays)
            return;

        args.IsValid = true;
    }
}

function ValidateNumber(sender, args) {
    // Need to strip comma
    var re = new RegExp(/,/g);
    numberValue = args.Value.replace(re, "");
    args.IsValid = (!isNaN(numberValue));
}

function ValidateTime(sender, args) {
    var strValidDateRegex = /^\d{2}\:\d{2}\:\d{2}$/;
    var re = new RegExp(strValidDateRegex);

    args.IsValid = false;

    if (args.Value.match(re)) {
        arrTime = args.Value.split(":");
        var len = arrTime.length;
        if (len != 3)
            return;

        var hh = parseInt(arrTime[0], 10);
        var mm = parseInt(arrTime[1], 10);
        var ss = parseInt(arrTime[2], 10);

        if (hh < 0 || hh > 23)
            return;
        if (mm < 0 || mm > 59)
            return;
        if (ss < 0 || ss > 59)
            return;

        args.IsValid = true;
    }
}

function ValidateEmail(sender, args) {
    var strValidEmailRegex = /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
    var re = new RegExp(strValidEmailRegex);

    args.IsValid = args.Value.match(re);
}

/*
* IN:
*  num - the number to format
*  decimalNum - the number of decimal places to format the number to
*  bolLeadingZero - true / false - display a leading zero for numbers between -1 and 1
*  bolParens - true / false - use parenthesis around negative numbers
*  bolCommas - put commas as number separators.
*
* RETVAL:
*  The formatted number!
*/
function FormatNumber(num, decimalNum, bolLeadingZero, bolParens, bolCommas) {
    num = "" + num;     // force numeric string
    var re = new RegExp(/,/g);
    num = num.replace(re, "");
    if (isNaN(parseInt(num))) return num;

    var tmpNum = num;
    var iSign = num < 0 ? -1 : 1;

    tmpNum *= Math.pow(10, decimalNum);
    tmpNum = Math.round(Math.abs(tmpNum))
    tmpNum /= Math.pow(10, decimalNum);

    var tmpNumStr = new String(tmpNum);

    if (decimalNum > 0) {
        var dp = tmpNumStr.indexOf(".");
        if (dp < 0) {
            tmpNumStr += ".";
            dp++;
        }
        else
            dp = tmpNumStr.length - tmpNumStr.indexOf(".") - 1;
        for (i = dp; i < decimalNum; i++)
            tmpNumStr += "0";
    }

    if (!bolLeadingZero && num < 1 && num > -1 && num != 0) {
        if (num > 0)
            tmpNumStr = tmpNumStr.substring(1, tmpNumStr.length);
        else
            tmpNumStr = "-" + tmpNumStr.substring(2, tmpNumStr.length);
    }

    if (bolCommas && (num >= 1000 || num <= -1000)) {
        var iStart = tmpNumStr.indexOf(".");
        if (iStart < 0)
            iStart = tmpNumStr.length;

        iStart -= 3;
        while (iStart >= 1) {
            tmpNumStr = tmpNumStr.substring(0, iStart) + "," + tmpNumStr.substring(iStart, tmpNumStr.length)
            iStart -= 3;
        }
    }

    if (bolParens && num < 0)
        tmpNumStr = "(" + tmpNumStr + ")";
    else if (num < 0)
        tmpNumStr = "-" + tmpNumStr;

    return tmpNumStr;
}

function FormatMe(me, dp) {
    me.value = FormatNumber(me.value, dp, true, false, true);
}

function parseFloatCommas(floatNumber) {
    var re = new RegExp(/,/g);
    floatNumber = floatNumber.replace(re, "")
    if (isNaN(floatNumber) == true)
        return 0;
    if (trim(floatNumber) == "")
        return 0;
    return parseFloat(floatNumber);
}

function trim(str) {
    return str.replace(/^\s*|\s*$/g, "");
}

