var is = new Array(20);	
var results = new Array(20);
var phase;		
var best;	
var cdata = new Array(10);
var gbytes;		
var gphases;
var gconcurrency;
var gfname;
var big;
var avglatency;
var cnt;

window.onload=teststart;

function teststart() {
  var n = new Date();
  phase = 1;
  best = 999999;
  big = 1;
  test(2,1,"agent.xml",1);
}

function test(phases,concurrency,fname,bytes) {
  if (phase == 1) {
    var x;
    for (x=1; x<=2; x++) {
      is[x] = null;	
      results[x] = null;
    }
  }

  var parallel = 1;
  while (parallel <= concurrency) {
	  var req = new XMLHttpRequest('image/jpeg');

    gbytes = bytes;
    gphases = phases;
    gconcurrency = concurrency;
    gfname = fname;

	  req.onreadystatechange = perf(req, test_done);

	  var cachebuster = Math.random();
	  //req.open("GET", "http://test.vo.llnwd.net/o1/"+fname+"?"+cachebuster, true);
	  req.open("GET", "http://www.limelightnetworks.com/perf/"+fname+"?"+cachebuster, true);
	  is[parallel] = new Date();
	  req.send(null);
          cdata[parallel] = req;
	  parallel = parallel + 1;
  }
}

function test_done(req) {
  var end = new Date();
  var fini = 0;
  var isparallel;
  var answer;

  for(x=1; x<=2; x++) {
    if (cdata[x] == req) {
      isparallel = x;
    }
  }
  var ms = end - is[isparallel];
  if (ms > 0) {
    results[isparallel] = end - is[isparallel];
  } else {
    return;
  }

  if (1) {
    var x;
    var avg = 0;
    var worst = 0;
    var ok = 0;

    if (gconcurrency > 1) {
      for(x=1; x<=2; x++) {
        if (results[x]) {
          fini++;
          if (results[x] > worst) {
            worst = results[x];
          }
          if (results[x] != 1000 && results[x] != 0) {
            ok = ok+1;
          }
        }
      }
      if (best > 250) {
        best = 250;
      }
      if (worst-best) {
        var bps = ((gbytes*8) / (worst/1000));
        var kbps = (bps / 1024);
        avg = (kbps * fini);
      }
      answer = Math.round(avg);
    } else {
      fini++;
      if (results[1] > 0 && results[1] < best) {
        best = results[1];
      }
      if (phase > 1) {
        cnt++;
        avglatency += results[1];
      }
    }
  }
  if (fini == gconcurrency) {
    phase = phase + 1;
    if (phase <= gphases) {
      test(1,2,"test4.jpg",10927);
    } else {
      if (gconcurrency == 1) {
        phase = 1;
      } else {

        var req = XMLReqHandle(false);
        if (cnt) {
          avglatency = Math.round(avglatency/cnt);
        } else {
          avglatency = 0;
        }

	var unixtimems= end.getTime();
	var unixtime= parseInt(unixtimems /1000);
	var destSite="test.vo.llnwd.net";
	var testObject="test4.jpg";
	downloadms = Math.round(worst);


	req.open("POST", "http://perfagent.limelightnetworks.com/perf/netperf.pyc?k="+key+"&s="+document.location.host+"&d="+destSite+"&dt=0&ct="+best+"&pt="+downloadms+"&ps="+gbytes+"&r=test&o="+testObject, false);
        //req.open("POST", "http://perfagent.limelightnetworks.com/perf/client.php?eventTime="+unixtime+"&srcIP="+document.location.host+"&dstIP="+destSite+"&dnsTime=0&connTime="+best+"&perfTime="+downloadms+"&perfSize="+gbytes+"&object="+testObject, false);
	      req.send(null);
      }
    }
  }
}


function XMLReqHandle(typ) {
	var xmlreq = false;
	if (window.XMLHttpRequest) {
		xmlreq = new XMLHttpRequest();
		if (typ && xmlreq.overrideMimeType) {
		   xmlreq.overrideMimeType(typ);
		}
	} else if (window.ActiveXObject) {
		try {
			xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) { 
			try {
				xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
			} 
		}
 	}
  return xmlreq;
}


function perf(req, proc) {
  return function () {
    if (req.readyState == 4) {
        proc(req);
/*
      if (req.status == 200) {
        proc(req);
      } else {
		    if (req.status == 404) {
      	            } else {
                    }
      }
*/
    }
  }
}

