
function num(a) {
    if (a.substr(0, 1) == '$') {
        return Number(a.substr(1, a.length - 1));
    }
    else {
        return Number(a);
    }
}

function FormatDate(date) {
    var strMonthArray = new Array(12);
    strMonthArray[0] = 'Jan';
    strMonthArray[1] = 'Feb';
    strMonthArray[2] = 'Mar';
    strMonthArray[3] = 'Apr';
    strMonthArray[4] = 'May';
    strMonthArray[5] = 'Jun';
    strMonthArray[6] = 'Jul';
    strMonthArray[7] = 'Aug';
    strMonthArray[8] = 'Sep';
    strMonthArray[9] = 'Oct';
    strMonthArray[10] = 'Nov';
    strMonthArray[11] = 'Dec';
    return date.getDate() + '-' + strMonthArray[date.getMonth()] + '-' + date.getFullYear();
}


function FormatNumber(n) {
    if (isNaN(n)) return '0.00';
    var n100 = Math.round(Number(n) * 100) / 100;
    if (isNaN(n100)) {
        n100 = 0;
    }
    var ns = String(n100);
    if (ns.indexOf('.') == -1) ns = ns + '.00';
    else if (ns.indexOf('.') == ns.length - 1) ns = ns + '0';
    return ns;
}
function checkdate(objName) {
    var datefield = objName;
    if (chkdate(objName) == false) {
        datefield.select();
        alert('That date is invalid.  Please try again.');
        datefield.focus();
        return false;
    }
    else {
        return true;
    }
}

function chkdate(objName) {
    //var strDatestyle = 'US'; //United States date style
    var strDatestyle = 'EU';  //European date style
    var strDate;
    var strDateArray;
    var strDay;
    var strMonth;
    var strYear;
    var intday;
    var intMonth;
    var intYear;
    var booFound = false;
    var datefield = objName;
    var strSeparatorArray = new Array('-', ' ', '/', '.');
    var intElementNr;
    var err = 0;
    var strMonthArray = new Array(12);
    strMonthArray[0] = 'Jan';
    strMonthArray[1] = 'Feb';
    strMonthArray[2] = 'Mar';
    strMonthArray[3] = 'Apr';
    strMonthArray[4] = 'May';
    strMonthArray[5] = 'Jun';
    strMonthArray[6] = 'Jul';
    strMonthArray[7] = 'Aug';
    strMonthArray[8] = 'Sep';
    strMonthArray[9] = 'Oct';
    strMonthArray[10] = 'Nov';
    strMonthArray[11] = 'Dec';
    strDate = datefield.value;
    if (strDate.length < 1) {
        return true;
    }
    for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
        if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
            strDateArray = strDate.split(strSeparatorArray[intElementNr]);
            if (strDateArray.length != 3) {
                err = 1;
                return false;
            }
            else {
                strDay = strDateArray[0];
                strMonth = strDateArray[1];
                strYear = strDateArray[2];
            }
            booFound = true;
        }
    }
    if (booFound == false) {
        if (strDate.length > 5) {
            strDay = strDate.substr(0, 2);
            strMonth = strDate.substr(2, 2);
            strYear = strDate.substr(4);
        }
    }
    if (strYear.length == 2) {
        strYear = '20' + strYear;
    }
    // US style
    if (strDatestyle == 'US') {
        strTemp = strDay;
        strDay = strMonth;
        strMonth = strTemp;
    }
    intday = parseInt(strDay, 10);
    if (isNaN(intday)) {
        err = 2;
        return false;
    }
    intMonth = parseInt(strMonth, 10);
    if (isNaN(intMonth)) {
        for (i = 0; i < 12; i++) {
            if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
                intMonth = i + 1;
                strMonth = strMonthArray[i];
                i = 12;
            }
        }
        if (isNaN(intMonth)) {
            err = 3;
            return false;
        }
    }
    intYear = parseInt(strYear, 10);
    if (isNaN(intYear)) {
        err = 4;
        return false;
    }
    if (intMonth > 12 || intMonth < 1) {
        err = 5;
        return false;
    }
    if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
        err = 6;
        return false;
    }
    if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
        err = 7;
        return false;
    }
    if (intMonth == 2) {
        if (intday < 1) {
            err = 8;
            return false;
        }
        if (LeapYear(intYear) == true) {
            if (intday > 29) {
                err = 9;
                return false;
            }
        }
        else {
            if (intday > 28) {
                err = 10;
                return false;
            }
        }
    }
    if (strDatestyle == 'US') {
        datefield.value = strMonthArray[intMonth - 1] + ' ' + intday + ' ' + strYear;
    }
    else {
        datefield.value = intday + '-' + strMonthArray[intMonth - 1] + '-' + strYear;
    }
    return true;
}
function LeapYear(intYear) {
    if (intYear % 100 == 0) {
        if (intYear % 400 == 0) { return true; }
    }
    else {
        if ((intYear % 4) == 0) { return true; }
    }
    return false;
}
function doDateCheck(from, to) {
    if (Date.parse(from.value) <= Date.parse(to.value)) {
        alert('The dates are valid.');
    }
    else {
        if (from.value == '' || to.value == '')
            alert('Both dates must be entered.');
        else
            alert('To date must occur after the from date.');
    }
}


function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}



// Numeric Textbox Mask functions

function setFocusPosition(textbox) {
    var pos = textbox.value.length;
    var len = textbox.value.length;
    var i = 0;
    while (i < len && pos == len) {
        if (textbox.value.charAt(i) == '_')
            pos = i;
        i++;
    }
    setCursorPosition(textbox, pos);
}

function getSelectionRangeStart(obj) {
    if (obj.setSelectionRange) { //FF
        return obj.selectionStart;
    }
    else if (document.selection) { //IE  
        var range = document.selection.createRange();
        var r2 = range.duplicate();
        return (0 - r2.moveStart('character', -100000));
    }
}

function getSelectionRangeEnd(obj) {
    if (obj.setSelectionRange) { //FF
        return obj.selectionEnd;
    }
    else if (document.selection) { //IE  
        var range = document.selection.createRange();
        var r2 = range.duplicate();
        return (-1 * r2.moveEnd('character', -100000));
    }
}

function setCursorPosition(obj, pos) {
    if (obj.setSelectionRange) {
        obj.setSelectionRange(pos, pos);
    }
    else if (obj) {
        var tr = obj.createTextRange();
        if (obj && tr) {
            tr.moveStart("character", pos);
            tr.collapse();
            tr.select();
            return true;
        }
    }
    return false;
}

function getCursorPosition(obj) {
    var result = 0;
    if (obj.setSelectionRange != null) {
        result = obj.selectionStart;
    }
    else if (document.selection && document.selection.createRange) {
        var range = document.selection.createRange();
        var r2 = range.duplicate();
        result = 0 - r2.moveStart('character', -100000);
    }
    return result;
}


function dFilter(e, textbox, dFilterMask, maskType) {
    var key = window.event ? e.keyCode : e.which;
    var pos = -1;
    var ctrl = e.ctrlKey;
    var startSelection = getSelectionRangeStart(textbox);
    var endSelection = getSelectionRangeEnd(textbox);
    if (key == 9 || key == 37 || key == 39) {
        return true;
    }
    else if (key == 8) // backspace
    {
        if (startSelection != endSelection)
            processSelectionDelete(textbox, dFilterMask, startSelection, endSelection);
        else {
            var cpos = getCursorPosition(textbox);
            if (cpos > 0) {
                cpos = previousMask(dFilterMask, cpos - 1);
                if (cpos != -1) {
                    setCursorPosition(textbox, previousMask(dFilterMask, cpos));
                    processDelete(textbox, dFilterMask);
                }
            }
        }
    }
    else if (key == 46) // the all-important delete key
    {
        if (startSelection != endSelection)
            processSelectionDelete(textbox, dFilterMask, startSelection, endSelection);
        else
            processDelete(textbox, dFilterMask);
    }
    else if (key == 35 || key == 36) // the end key (35) or home key (36)
    {
        return true;
    }
    else if (key == 27) // the esc key
    {
        textbox.value = dFilterMask;
        setCursorPosition(textbox, 0);
    }
    else if ((key > 47 && key < 58) || (key > 95 && key < 106)) // numeric key
    {
        if (startSelection != endSelection)
            processSelectionDelete(textbox, dFilterMask, startSelection, endSelection);
        processKey(key, textbox, dFilterMask);
    }
    else if (maskType == 'a' && key >= 65 && key <= 90) {
        if (startSelection != endSelection)
            processSelectionDelete(textbox, dFilterMask, startSelection, endSelection);
        processKey(key, textbox, dFilterMask);
    }
    e.cancelBubble = 1;
    return false;
}

function processKey(key, textbox, dFilterMask) {
    var cpos = getCursorPosition(textbox);
    if (cpos >= dFilterMask.length && textbox.value == dFilterMask)
        cpos = 0;
    pos = dFilterMask.indexOf('_', cpos);
    if (pos > dFilterMask.length + 1) pos = -1;
    if (pos != -1) {
        if (dFilterMask.charAt(pos) != '_')
            return;
        var i = previousMask(dFilterMask, dFilterMask.length - 1);
        while (i > pos) {
            var pos2 = previousMask(dFilterMask, i - 1);
            if (pos2 != -1) {
                var temp = textbox.value;
                temp = temp.substring(0, i) + temp.charAt(pos2) + temp.substring(i + 1, temp.length);
                temp = temp.substring(0, pos2) + '_' + temp.substring(pos2 + 1, temp.length);
                textbox.value = temp;
                i = pos2;
            }
            else {
                i = pos;
            }
        }
        if (key > 95) key -= 48;
        var temp = textbox.value;
        temp = temp.substring(0, pos) + String.fromCharCode(key) + temp.substring(pos + 1, temp.length);
        textbox.value = temp;
        setCursorPosition(textbox, pos + 1);
    }
}

function processSelectionDelete(textbox, dFilterMask, start, end) {
    for (i = start; i < end; i++)
        processDelete(textbox, dFilterMask);
    setCursorPosition(textbox, start);
}

function processDelete(textbox, dFilterMask) {
    var cpos = getCursorPosition(textbox);
    if (cpos < dFilterMask.length) {
        pos = dFilterMask.indexOf('_', cpos);
        if (pos == -1) {
            return false;
        }
        while (pos < dFilterMask.length) {
            var pos2 = dFilterMask.indexOf('_', pos + 1);
            if (pos2 != -1) {
                var temp = textbox.value;
                temp = temp.substring(0, pos) + temp.charAt(pos2) + temp.substring(pos + 1, temp.length);
                temp = temp.substring(0, pos2) + '_' + temp.substring(pos2 + 1, temp.length);
                textbox.value = temp;
                pos = pos2;
            }
            else {
                var temp = textbox.value;
                temp = temp.substring(0, pos) + '_' + temp.substring(pos + 1, temp.length);
                textbox.value = temp;
                pos = dFilterMask.length;
            }
        }
        setCursorPosition(textbox, cpos);
    }
    return true;
}


function previousMask(mask, cpos) {
    for (i = cpos; i >= 0; i--) {
        if (mask.charAt(i) == '_')
            return i;
    }
    return -1;
}

