﻿/*

    Formatting of input fields.

*/


// define the different format styles
// c = currency
// i = interest
// d = date.

var zerostyle = "#707070";

function FormatElement( id, style )
{
    var e = getHandleOnControlID( "input", id );
    
    if (e == null)
        return;
    
    // Save the formatting style.
    e.formatstyle = style;
    e.originalcolor = e.style.color;
    
    // remove $, %, space and comma
    e.value = e.value.replace("$", "");
    e.value = e.value.replace(" ", "");
    e.value = e.value.replace(",", "");
    e.value = e.value.replace("%", "");

    // Initialize the data.
    switch( e.formatstyle )
    {
        case 'c':
            if( e.value == null || e.value == "" )
                e.value = 0;
            e.value = formatCurrency( e.value );
            if( isZero( e.value ) )
            {
                e.style.color = zerostyle;
            }
            break;
            
        case 'i':
            if( e.value == null || e.value == "" )
                e.value = 0;
            e.value = formatInterest( e.value );
            if( isZero( e.value ) )
            {
                e.style.color = zerostyle;
            }
            break;
            
        case 'd':
            break;
    }

    
    e.onblur = function()
    {
    
        switch( this.formatstyle )
        {
            case 'c':
                this.value = preformatNumber( this.value);
                this.value = formatCurrency( this.value );
                formatZero( this );
                break;
                
            case 'i':
                this.value = preformatNumber( this.value);
                this.value = formatInterest( this.value );
                formatZero( this );
                break;
                
            case 'd':
                this.value = preformatDate( this.value);
                var d = completeDate( this.value );
                if( d == null & this.value != "" )
                {
                    this.value += "?";
                    e.style.color = zerostyle;
                }
                else
                {
                    this.value = formatDate( d, "MM/dd/yyyy" );
                }
                break;
        }
    }
   
    
    e.onfocus = function()
    {
        switch( this.formatstyle )
        {
            case 'c':
            case 'i':
                this.value = unformatNumber( this.value );
                break;
                
            case 'd':
                // remove the question mark if one.
                this.value = this.value.replace( "?", "" );
                break;
        }
        this.style.color = this.originalcolor;    
        this.select();
    }
}

function preformatNumber( num ) 
{
    num= num.replace("$", "");
    num = num.replace(" ", "");
    num = num.replace(",", "");
    num = num.replace("%", "");
    return num;
}

function preformatDate( val ) 
{
    val = val.replace("\\", "/");
    val = val.replace(" ", "/");
    val = val.replace(",", "/");
    val = val.replace(".", "/");
    val = val.replace("-", "/");
    return val;
}

function formatZero( e )
{
    // Gray out if zero.        
    if( isZero( e.value ) )
    {
        e.style.color = zerostyle;
    }
    else
    {
        e.style.color = e.originalcolor;
    }
}

function formatInterest(num)
{
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
        num = "0";

    num = Math.floor( num*100000+0.50000000001);
    return num/100000 + " %";
}

function isZero( num )
{
    num = unformatNumber( num );
    if(isNaN(num))
        num = "0";
        
    return num.valueOf() == 0;        

}

function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
        cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
        
    return (((sign)?'':'-') + '$ ' + num + '.' + cents);
}

//returns the plain input format numbers plus a decimal.
function unformatNumber( text )
{
    var r = "";
    var keep =  new String("1234567890."); 

    for( i = 0; i < text.length; i++ )
    {
        var s = text.substring( i, i+1 );
        
        if( -1 != keep.indexOf( s ) )
            r += s;
    }
    return r;
}


function completeDate( v )
{
    // Allows quick entry.
    v = v.replace(/^\s+/,"");
    var result = v.split(/[ .\/]/);
    
    var d = new Date();

    var month = Number( result [ 0 ] );
    if( isNaN(month) ) return null;
    if( month < 1 || month > 12 ) return null
    
    month -= 1;
        
    var day = Number( result[ 1 ] );
    if( isNaN(day) ) return null;
    if( day < 1 || day > 31 ) return null;
       
    if( result[ 2 ] == null )
        result[ 2 ] = d.getFullYear();
        
    var year = Number( result[ 2 ] );
    if( isNaN(year) ) return null;
    if( year < 99 )
        year = Math.floor( d.getFullYear() / 100 ) * 100 + year;
        
    d.setFullYear( year, month, day );        
    return d;
}


function addZero(vNumber)
{ 
    return ((vNumber < 10) ? "0" : "") + vNumber 
} 
        
function formatDate(vDate, vFormat){ 
    var vDay                = addZero(vDate.getDate()); 
    var vMonth              = addZero(vDate.getMonth()+1); 
    var vYearLong           = addZero(vDate.getFullYear()); 
    var vYearShort          = addZero(vDate.getFullYear().toString().substring(3,4)); 
    var vYear               = (vFormat.indexOf("yyyy")>-1?vYearLong:vYearShort) 
    var vHour               = addZero(vDate.getHours()); 
    var vMinute             = addZero(vDate.getMinutes()); 
    var vSecond             = addZero(vDate.getSeconds()); 
    var vDateString         = vFormat.replace(/dd/g, vDay).replace(/MM/g, vMonth).replace(/y{1,4}/g, vYear) 
    vDateString             = vDateString.replace(/hh/g, vHour).replace(/mm/g, vMinute).replace(/ss/g, vSecond) 
    return vDateString 
}

function formatSSN( tb )
{
    re = /\D/g; // remove any characters that are not numbers
    socnum=tb.value.replace(re,"")
    sslen=socnum.length
    if(sslen>3&&sslen<6)
    {
        ssa=socnum.slice(0,3)
        ssb=socnum.slice(3,5)
        tb.value=ssa+"-"+ssb 
    }
    else
    {
        if(sslen>5)
        {
            ssa=socnum.slice(0,3)
            ssb=socnum.slice(3,5)
            ssc=socnum.slice(5,9)
            tb.value=ssa+"-"+ssb+"-"+ssc
        }
        else
        {
            tb.value=socnum
        }
    }
}