﻿var dtCh = "/";
var minYear = 1900;
var maxYear = 2100;

function isInteger(s) {
    var i;
    for (i = 0; i < s.length; i++) {
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag) {
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary(year) {
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}
function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
        this[i] = 31
        if (i == 4 || i == 6 || i == 9 || i == 11) { this[i] = 30 }
        if (i == 2) { this[i] = 29 }
    }
    return this
}

function isDate(dtStr) {
    var daysInMonth = DaysArray(12)
    var pos1 = dtStr.indexOf(dtCh)
    var pos2 = dtStr.indexOf(dtCh, pos1 + 1)
    var strMonth = dtStr.substring(0, pos1)
    var strDay = dtStr.substring(pos1 + 1, pos2)
    var strYear = dtStr.substring(pos2 + 1)
    var message = ""
    strYr = strYear
    if (strDay.charAt(0) == "0" && strDay.length > 1) strDay = strDay.substring(1)
    if (strMonth.charAt(0) == "0" && strMonth.length > 1) strMonth = strMonth.substring(1)
    for (var i = 1; i <= 3; i++) {
        if (strYr.charAt(0) == "0" && strYr.length > 1) strYr = strYr.substring(1)
    }
    month = parseInt(strMonth)
    day = parseInt(strDay)
    year = parseInt(strYr)
    if (pos1 == -1 || pos2 == -1) {
        message = "The date format should be : mm/dd/yyyy"
        return message
    }
    if (strMonth.length < 1 || month < 1 || month > 12) {
        message = "Please enter a valid month"
        return message
    }
    if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) {
       message = "Please enter a valid day"
       return message
    }
    if (strYear.length != 4 || year == 0 || year < minYear || year > maxYear) {
        message = "Please enter a valid 4 digit year between " + minYear + " and " + maxYear
        return message
    }
    if (dtStr.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false) {
        message = "Please enter a valid date"        
        return message
    }
    
    return message
}
function IsEmpty(str) {
    if (str == "")
        return "*"
    else
        return ""

}

function FormatNumber(num,decimalNum,bolLeadingZero,bolParens,bolCommas)
/**********************************************************************
    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!
 **********************************************************************/
{ 
    if (isNaN(parseInt(num))) return "NaN";

    var tmpNum = num;
    var iSign = num < 0 ? -1 : 1;		// Get sign of number
	
    // Adjust number so only the specified number of numbers after
    // the decimal point are shown.
    tmpNum *= Math.pow(10,decimalNum);
    tmpNum = Math.round(Math.abs(tmpNum))
    //tmpNum = Math.floor(Math.abs(tmpNum))
    tmpNum /= Math.pow(10,decimalNum);
    tmpNum *= iSign;					// Readjust for sign
	    	
    // Create a string object to do our formatting on
    var tmpNumStr = new String(tmpNum);
    
    //Add digits 0 needed
    var iPointPoss = tmpNumStr.indexOf(".");
    if (iPointPoss > -1)
    {
        var iNumberLen = tmpNumStr.length;
        var iDecimalCount = iNumberLen - iPointPoss - 1;
        if (iDecimalCount > 0)
        {
            for(var j=1; j <= decimalNum - iDecimalCount ; j++)
            {
              tmpNumStr = tmpNumStr + "0";
            }      
        }
    }
    else
    {
        tmpNumStr = tmpNumStr + ".";
        for(var j=1; j <= decimalNum; j++)
        {
            tmpNumStr = tmpNumStr + "0";
        }
    }
    
    // See if we need to strip out the leading zero or not.
    if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
	    if (num > 0)
		    tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
	    else
		    tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
		
    // See if we need to put in the commas
    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;
	    }		
    }

    // See if we need to use parenthesis
    if (bolParens && num < 0)
	    tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

    return tmpNumStr;		// Return our formatted string!
}



