// WEIHONG 7/19/2007 -- JUST PLAYING WITH SILVERLIGHT, PROOF OF CONCEPT ONLY
// NOT SURE IF THIS WILL BE USED IN PGL

// GLOBAL VARIABLES

var mouseDownPosition = 0;
var mouseDownValue = -1;
var thumbCenter = 100;

//var minAge = <%=Session["Owner_drpAge"] %>;
var minAge = 35;

var maxAge = 95;

var maxSlide = 100;
var minSlide = 0;

var _retirementGoal = 60000;
var _currentAge = minAge;
var _currentSalary = 95000;
var _salaryRaise = 0.05;
var _tax = 0.35;
var _qualified = 50000;
var _nonqualified = 50000;
var _ss = 20000;
var _currentAsset = 220000;
var _contribution = 0.15;
var _ror = 0.05;
var _retirementAge = 65;            

var slider_offset = 650;

var AccountValue = new Array();
var Withdrawal = new Array();
var WithdrawalValue = new Array();
var shortFallAge = 0;


//###############################   SLIDER STUFF #############################################
if(typeof(Sys) !== "undefined")
	Sys.Application.notifyScriptLoaded();


function slider_thumb_MouseLeftButtonDown(sender, args) {
    var slider = sender.findName(sender.name.replace("slider_thumb","slider"));
    sender.captureMouse();    
    mouseDownValue = slider_GetValue(sender);
    mouseDownPosition = args.getPosition(null).x;    
}

function slider_thumb_MouseLeftButtonUp(sender, args) {
    var slider = sender.findName(sender.name.replace("slider_thumb","slider"));
    sender.releaseMouseCapture();
    mouseDownValue = -1;
}

function slider_thumb_MouseMove(sender, args) {
    var slider = sender.findName(sender.name.replace("slider_thumb","slider"));
    if (mouseDownValue != -1) {

        if (args.getPosition(null).x <= maxSlide+1 + slider_offset && args.getPosition(null).x >= minSlide + slider_offset)
        {
            sender["Canvas.Left"] = args.getPosition(null).x  - slider_offset -5;        
            Text_SetValue(sender,args.getPosition(null).x - slider_offset);
            UpdateGraph(sender);
        }
    }   
}

function slider_GetValue(sender) {
    var thumb = sender.findName(sender.name.replace("slider","slider_thumb"));
    return sender["Canvas.Left"] ; 
}

// ################### SLIDING BAR TEXT ###############################
function Text_SetValue(sender, newValue) {

    var text = sender.findName(sender.name.replace("slider_thumb","txt")); 
    text["Canvas.Left"]=newValue;  
    
    // RETIREMENT GOAL
    if  (sender.name == "slider_thumb0")
    {
        text["Text"] = Currency(parseInt(((newValue * 1000 )).toString()).toString());
        _retirementGoal = parseInt(((newValue * 1000 )).toString());
    }
    // CURRENT AGE
    else if (sender.name == "slider_thumb1")
    {
        text["Text"] = parseInt(((newValue )/1.).toString()).toString();
        _currentAge = parseInt(((newValue )/1.).toString());
        minAge = _currentAge;
    }
    // CURRENT ANNUAL INCOME
    else if (sender.name == "slider_thumb2")
    {
        text["Text"] = Currency(parseInt(((newValue * 100 )*20).toString()).toString());     
        _currentSalary =   parseInt(((newValue * 100 )*20).toString());
    }

    // SALARY INCREASE
    else if (sender.name == "slider_thumb3")
    {
        text["Text"] = parseInt(((newValue*0.2)).toString()).toString()+"%";   
        _salaryRaise = 0.002* parseInt(((newValue)).toString());
    }
    // TAX
    else if (sender.name == "slider_thumb4")
    {
        var str = ((newValue )/2.0).toString();
        text["Text"] = parseInt(str).toString() + " %";
        _tax = 0.01*parseInt(str);
    }
    // QUALIFIED SAVING
    else if (sender.name == "slider_thumb5")
    {
        text["Text"] = Currency(parseInt(((newValue * 1000 )*10).toString()).toString());   
        _qualified =   parseInt(((newValue * 1000 )*10).toString());     
    }
    // NON QUALIFIED SAVING
    else if (sender.name == "slider_thumb6")
    {
        text["Text"] = Currency(parseInt(((newValue * 1000 )*10).toString()).toString());          
        _nonqualified = parseInt(((newValue * 1000 )*10).toString());
    }
    // SS INCOME
    else if (sender.name == "slider_thumb7")
    {
        text["Text"] = Currency(parseInt(((newValue * 500 )).toString()).toString());          
        _ss = parseInt(((newValue * 500 )*1).toString());
    }
    // ASSET
    else if (sender.name == "slider_thumb8")
    {
        text["Text"] = Currency(parseInt(((newValue * 1000 )*100).toString()).toString());          
        _currentAsset = parseInt(((newValue * 1000 )*100).toString());
    }
    // CONTRIBUTION
    else if (sender.name == "slider_thumb9")
    {
        var str = ((newValue )/5.).toString();
        text["Text"] = parseInt(str).toString() + " %";
        _contribution = 0.01*parseInt(str);
    }
    // ROR
    else if (sender.name == "slider_thumb10")
    {
        text["Text"] = parseInt((newValue/10).toString()).toString()+"%";
        _ror = parseInt((newValue/10).toString())*0.01;
    }
    // RETIREMENT AGE
    else if (sender.name == "slider_thumb11")
    {
        text["Text"] = parseInt(((newValue)*0.3+50).toString()).toString();
        _retirementAge = parseInt(((newValue)*0.3+50).toString());
        var gap = 450 / (maxAge - minAge);
        var w = 103+gap * (_retirementAge-minAge) + 5;   
        var retireline = sender.findName("retireline");
        retireline["Canvas.Left"] = w.toString();
        var retireage = sender.findName("retireage1");
        retireage["Text"] = "Retire At "+_retirementAge.toString();
        retireage["Canvas.Left"] = (w+5).toString();
        
    }


    
}

//############### EXTRA CONTROLS ############################
function LoadExtraControls(sender, eventArgs)
{
        // Retrieve a reference to the control.
        var control = sender.getHost();
        var gap = 450 / (maxAge - minAge);
         
        
        // Plus and Minus signs
        for (var i = 1; i < 12; i++) 
        {
            var height = i * 30 +8;            
            var plus = control.content.createFromXaml(
                '<TextBlock Text="+" FontSize="9" Foreground="Gray" Canvas.Left="745" Canvas.Top="'+height.toString()+'" ></TextBlock>'
            );
            sender.children.add(plus);
            var minus = control.content.createFromXaml(
                '<TextBlock Text="-" FontSize="9" Foreground="Gray" Canvas.Left="650" Canvas.Top="'+height.toString()+'" ></TextBlock>'
            );
            sender.children.add(minus);
        }
        
        // age
        for (var i = minAge; i<=maxAge; i++)
        {
            var w = 103+gap * (i-minAge);  
            var age = control.content.createFromXaml(
                '<TextBlock Text="'+i+'" FontSize="9" Foreground="Black" Canvas.Left="'+w+'" Canvas.Top="350" ></TextBlock>'
            );
            
            w = w+5;
            var vbar = control.content.createFromXaml(
                '<TextBlock Text="|" FontSize="5" Foreground="Black" Canvas.Left="'+w+'" Canvas.Top="343" ></TextBlock>'
            );
            if (i % 5 == 0)
            {
                sender.children.add(age);
                sender.children.add(vbar);
            }
            else if (i == minAge)
            {
                sender.children.add(age);
            }
            
            // retireline
            if (i == _retirementAge)
            {
                var retireline = control.content.createFromXaml(
                    '<Rectangle Name="retireline" Opacity="0.5" Canvas.Top = "100" Fill="LimeGreen" Canvas.Left = "'+w+'" Height="250" Width="1"></Rectangle>');
                sender.children.add(retireline);
                
                var retire1 = control.content.createFromXaml(
                    '<TextBlock Name="retireage1" Canvas.Top="105" Canvas.Left = "'+(w+5).toString()+'" Text="Retire At '+_retirementAge.toString()+'" ></TextBlock>');
                sender.children.add(retire1);
            }
        
        }
        
        // amount
        for (var i = 250000; i <=2500000; i = i+250000)
        {
            var h = 340 - parseInt((20*i/250000.).toString());
            var amount = control.content.createFromXaml(
                '<TextBlock Text="'+Currency((i).toString())+'" FontSize="9" Foreground="Gray" Canvas.Top="'+h+'" Canvas.Left="50" ></TextBlock>'
            );
            sender.children.add(amount);
            var hbar = control.content.createFromXaml(
                '<TextBlock Text="-" FontSize="9" Foreground="Black" Canvas.Top="'+h+'" Canvas.Left="110" ></TextBlock>'
            );
            sender.children.add(hbar);
            
            h=h+7;
            var hline = control.content.createFromXaml(
                '<Rectangle Fill="#eeeeee"  Opacity="0.5"  Canvas.Top="'+h+'" Canvas.Left="117" Width="440" Height="1" ></Rectangle>'
            );
            sender.children.add(hline);
            
        }

     
     

     
     
        UpdateGraph(sender);
       
}

  

//########################## CREATE OBJECT ############################

function createRetirementControl()
{  
    Silverlight.createObject(
        "RetirementNeed.xaml",                  // Source property value.
        parentElement,                  // DOM reference to hosting DIV tag.
        "mySilverlightControl",         // Unique control ID value.
        {                               // Control properties.
            width:'900',                // Width of rectangular region of 
                                        // control in pixels.
            height:'400',               // Height of rectangular region of 
                                        // control in pixels.
            inplaceInstallPrompt:false, // Determines whether to display 
                                        // in-place install prompt if 
                                        // invalid version detected.
            background:'#ffffff',       // Background color of control.
            isWindowless:'false',       // Determines whether to display control 
                                        // in Windowless mode.
            framerate:'24',             // MaxFrameRate property value.
            version:'0.9'               // Control version to use.
            
        },
        {
            onError:null,               // OnError property value -- 
                                        // event handler function name.
            onLoad:null                 // OnLoad property value -- 
                                        // event handler function name.
        },
        null);                          // Context value -- event handler function name.
}



// #################### CALCULATE THE GRAPH #####################
function UpdateGraph(sender)

{

//            var _retirementGoal = 75000;
//            var _currentAge = minAge;
//            var _currentSalary = 95000;
//            var _salaryRaise = 0.05;
//            var _tax = 0.35;
//            var _qualified = 250000;
//            var _nonqualified = 50000;
//            var _ss = 20000;
//            var _currentAsset = 220000;
//            var _contribution = 0.15;
//            var _ror = 0.1;
//            var _retirementAge = 60; 
    

    





    var totalCurrentSaving = _qualified + _nonqualified;


    var scale = 10000;
    var ChartData = "";
    var _X = 0;
    var _Y = 0;
    var _Ywith=0;
    var maxX = 0;
    
    var _currentSalaryAfterTax = _currentSalary;
    var _currentSalaryAfterRaise = _currentSalary;
    var gap = 450 / ((95-_currentAge)*1);
    var maxAccountValueAtRetirement = 0;
    var shortFallAge = 0;
    var shortfalltext = sender.findName("shortFallText");
    var chart = sender.findName("AccountValue");
    var retirementGoalText = sender.findName("retirementGoalText");
    retirementGoalText["Text"] = "Your Annual Income Goal: "+Currency(_retirementGoal);
    var annualIncomeText = sender.findName("annualIncomeText");
    AccountValue[0]=totalCurrentSaving;
    var maxXwith=0;
    
    var withData="";
    var withChart = sender.findName("Withdrawal");
    var gap = 450.0 / ((95-_currentAge)*1 );
    
    


    // total account value at retirement
    for (var i = 0 ; i <= (95-_currentAge)*1 ; i++)
    {



        if (i % 1 == 0) _currentSalaryAfterRaise = _currentSalaryAfterRaise + _currentSalaryAfterRaise * _salaryRaise;
        _currentSalaryAfterTax = _currentSalaryAfterRaise -  _currentSalaryAfterRaise *  parseFloat(_tax) ;
        //totalCurrentSaving = totalCurrentSaving + _currentSalaryAfterTax * _contribution / 1.;
        
        // before retirement
        if (i < (_retirementAge - _currentAge)*1)
        {
            if (i>0) AccountValue[i] =  (AccountValue[i-1]+ _currentSalaryAfterTax * _contribution / 1.) * (1.0+_ror/1.) ;
            if (maxAccountValueAtRetirement < AccountValue[i]) maxAccountValueAtRetirement = AccountValue[i];
            WithdrawalValue[i]=0.0;
        }
        // after retirement
        else
        {
            // assume post retirement rate of return will be half and tax braket will be half
            var _postRetirementROR = _ror / 2.;
            var _postRetirementTax = _tax * 0.75;
            WithdrawalValue[i]= (WithdrawalValue[i-1]+_retirementGoal/1.)*(1.0 -_postRetirementROR / 1.);
            AccountValue[i] = _ss/1. + (maxAccountValueAtRetirement - _retirementGoal/1.)* (1.0 + _postRetirementROR / 1.) - (_retirementGoal/1.) * (_postRetirementTax );
            // taking account of social security
            maxAccountValueAtRetirement =  AccountValue[i] ;
            if (AccountValue[i] < 0 && shortFallAge ==0) 
            {
                shortFallAge = parseInt(i / 1.) + _currentAge ;               
                maxXwith = parseInt(( i )*gap );
            }
        }

        if (shortFallAge > 0) {
            shortfalltext["Text"]="Shortfall: At Age "+shortFallAge+ ", you will run out of money!";
            shortfalltext["Foreground"]="Red";
        }
        else
        {
            shortfalltext["Text"]="";
            shortfalltext["Foreground"]="Green";
        }
        
        _X = parseInt(( i )*gap );
        if (_X > maxX) maxX = _X;
        
        _Y = 250.0 - parseInt((AccountValue[i]/scale).toString());
        if (_Y < 0) _Y = 0;
        if (AccountValue[i] > 0 ) ChartData += " " +_X +" , "+ parseInt(_Y.toString()).toString() + " ";
        
        // withdrawal
        _Ywith = 250.0 -  parseInt((WithdrawalValue[i]/scale).toString());
        if (AccountValue[i]>0) withData += " " +_X +" , "+ parseInt(_Ywith.toString()).toString() + " ";


    }
    
   
    // last point
    ChartData += maxX + " , 250 0, 250" ; 



    if (maxXwith == 0) maxXwith = maxX;
    withData += maxXwith + " , 250 0, 250" ; 

    








    chart["Data"] = "M "+ChartData;
    withChart["Data"] = "M "+withData;  
    //document.write(_retirementAge);
    
    
}

// ###################  MOUSE ENTER ##################
function mouseEnter(sender,args)
{
    var age = args.getPosition(null).x;
    var gap = 450.0 / ((95-_currentAge)*1 );
    var _X = parseInt(( (age-110) )*gap );
    var _Y = AccountValue[_X];
    var accountValueText = sender.findName("accountValueText");
    //accountValueText["Text"]=""+_X+" :" + Currency(_Y);
    
}

// #################  CONVERT STRING TO CURRENCY ####################3

function Currency(strValue)
{
	strValue = strValue.toString().replace(/\$|\,/g,'');
	dblValue = parseFloat(strValue);

	blnSign = (dblValue == (dblValue = Math.abs(dblValue)));
	dblValue = Math.floor(dblValue*100+0.50000000001);
	intCents = dblValue%100;
	strCents = intCents.toString();
	dblValue = Math.floor(dblValue/100).toString();
	if(intCents<10)
		strCents = "0" + strCents;
	for (var i = 0; i < Math.floor((dblValue.length-(1+i))/3); i++)
		dblValue = dblValue.substring(0,dblValue.length-(4*i+3))+','+
		dblValue.substring(dblValue.length-(4*i+3));
	return (((blnSign)?'':'-') + '$' + dblValue );
}



