﻿var BW_DownRate = 0;
var BW_UpRate = 0;
var BW_LastDownRate=0;
var BW_StartTime = 0;
var BW_ZeroLengthTot = 0;
var BW_ZeroLength = 0;
var BW_LastDataLength = 0;
var BW_Cnt = 0;
var BW_TestCnt = 0;
var BW_TestComplete = false;

var BW_URL = "/Home/BandwidthTest";
var BW_SetURL = "/Home/BandwidthSet";

 function StartBandwidthTest() {
    DebugWrite("BandwidthTest");
    setTimeout("BandwidthTestZeroPnt()",1);
    //setTimeout("BandwidthTestSub(" + (1024) +")",1);
 }
 function BandwidthTestZeroPnt() {
    DebugWrite("BandwidthTestZeroPnt");
    //Length, Data
    var Data = "";
    var DLength = 0;
    
    var N = new Date();
    BW_StartTime = N.getTime();
    $.post(BW_URL, { Data: Data, Length: DLength }, function(data) {
        BandwidthTestRespZeroPnt();
    });
 
 }
 
 function BandwidthTestRespZeroPnt() {
    var N = new Date();
    DebugWrite("BandwidthTestRespZeroPnt");
    var TP = (N.getTime()-BW_StartTime);
    BW_ZeroLengthTot = BW_ZeroLengthTot + TP; 
    BW_Cnt=BW_Cnt+1;
    BW_ZeroLength= TP; //BW_ZeroLengthTot/BW_Cnt;
    DebugWrite("ZeroLength Last=" + TP);
    DebugWrite("ZeroLength=" + BW_ZeroLength);
    if (BW_Cnt >4) {
        setTimeout("BandwidthTestSub(" + (1024) +")",1);
    } else {
        setTimeout("BandwidthTestZeroPnt()",1);
    }
 }
 function BandwidthTestSub(Length) {
    DebugWrite("BandwidthTestSub");
    BW_LastDataLength=Length;
    
    var Data = "";
    var DLength = Length;
    
    
    var N = new Date();
    BW_StartTime = N.getTime();
    $.post(BW_URL, { Data: Data, Length: DLength }, function(data) {
        BandwidthTestResp();
    });
 
 }
 
 function BandwidthTestResp() {
    //var TestAm = {2000,1000,500,0};
    //var TestCnt = {0,1,2,3};
    var N = new Date();
    DebugWrite("BandwidthTestResp");
    var Tm = ((N.getTime()-BW_StartTime) - BW_ZeroLength)/1000;
    BW_DownRate = (BW_LastDataLength / Tm) / 1024 * 8;
    
    DebugWrite("Size=" + BW_LastDataLength);
    DebugWrite("Tm=" + Tm);
    DebugWrite("Rate=" + BW_DownRate);
    if (Tm<=1) {
        setTimeout("BandwidthTestSub(" + (BW_LastDataLength * 10) + ")",1);
    } else {
        DebugWrite("BW_DownRate=" + BW_DownRate);
        DebugWrite("BW_TestCnt=" + BW_TestCnt);
        BW_LastDownRate=BW_DownRate;
        var IsDone = false;
        if (BW_DownRate>=2000 && BW_TestCnt>=0) {
            IsDone=true;
        } else {
            if (BW_DownRate>=1000 && BW_TestCnt>=0) {
                IsDone=true;
            } else {
                if (BW_DownRate>=500 && BW_TestCnt>=0) {
                    IsDone=true;
                } else {
                    if (BW_TestCnt>=0) {
                        IsDone=true;
                    } else {
                        
                    }
                }
            }
        }
        if (IsDone) {
            //alert(BW_DownRate);
            BW_TestComplete = true;
            $.post(BW_SetURL, { UpRate: BW_UpRate, DownRate: BW_DownRate });
        } else {
            BW_TestCnt = BW_TestCnt + 1;
            setTimeout("BandwidthTestSub(" + (1024) +")",1);
        }
    }
 }