var maxRuntime = 10000; // ms
var runInterval = 500; // ms
var runtime = 0;
var debug = 0;
var runInt = null;
var ipv4test = null;
var ipv6test = null;
var ipv4ipv6test = null;
var ipv6ipv4test = null;
function testDone(test, value)
{
  switch(test.toLowerCase())
  {
     case "ipv4":
       ipv4test = (test.toLowerCase() == value.toLowerCase());
       objDel('ipv4iframe');
       break;
     case "ipv6":
       ipv6test = (test.toLowerCase() == value.toLowerCase());
       objDel('ipv6iframe');
       break;
     case "ipv4ipv6":
       ipv4ipv6test = value.toLowerCase();
       objDel('ipv4ipv6iframe');
       break;
     case "ipv6ipv4":
       ipv6ipv4test = value.toLowerCase();
       objDel('ipv6ipv4iframe');
       break;
  }
}

function objDel(objid) { document.getElementById(objid).parentNode.removeChild(document.getElementById(objid)); }

function updateStats()
{
  runtime += runInterval;
  if( (runtime > maxRuntime) 
    ||(
       (ipv4test != null) &&
       (ipv6test != null) &&
       (ipv4ipv6test != null) &&
       (ipv6ipv4test != null)
      )
    ){ 
      window.clearInterval(runInt);
      runInt = null;
    };
  doSummary();
}

function doSummary() {
  if(debug){debug++;}
  var ipvtestimg = ipvtestimg = document.getElementById('ipvimg' + debug);
    
  if(ipvtestimg == null)
  {
    ipvtestimg = document.createElement('img');
    ipvtestimg.src = 'ipvtest/none.png';
    ipvtestimg.id = 'ipvimg' + debug;
    document.getElementsByTagName("BODY")[0].appendChild(ipvtestimg);
  }
  ipvtestimg = document.getElementById('ipvimg' + debug);
  var ipv4status = null;
  var ipv6status = null;

  if(ipv4test)
    ipv4status = 'works';
  else
    ipv4status = 'disabled';
  
  if(ipv6test)
    ipv6status = 'works';
  else
    ipv6status = 'disabled';
  
  if( (ipv6status == 'disabled') &&
      (ipv6ipv4test == null) 
    )
    ipv6status = 'broken';

  if( (ipv4status == 'disabled') &&
      (ipv4ipv6test == null) 
     )
    ipv4status = 'broken';

  switch( ipv4status + ipv6status ){
    case 'worksworks': ipvtestimg.src='ipvtest/ipv4ipv6.png'; break;
    case 'worksdisabled': ipvtestimg.src='ipvtest/ipv4only.png'; break;
    case 'worksbroken': ipvtestimg.src='ipvtest/ipv4ipv6broken.png'; break;
    
    case 'disabledworks': ipvtestimg.src='ipvtest/ipv6only.png'; break;
    case 'disableddisabled': ipvtestimg.src='ipvtest/none.png'; break;
    case 'disabledbroken': ipvtestimg.src=''; break; 

    case 'brokenworks': ipvtestimg.src='ipvtest/ipv4brokenipv6.png'; break;
    case 'brokendisabled': ipvtestimg.src=''; break;
    case 'brokenbroken': ipvtestimg.src='ipvtest/ipv4brokenipv6broken.png'; break;
  }
  if(!runInt && pageTracker && ipvtestimg.src)
  {
     var re = new RegExp(".*\/([a-zA-Z0-9]*)\.png");
     pageTracker._trackPageview(ipvtestimg.src.replace(re,"$1"));
  }
}

function test(protocol, address)
{
  var iframe = document.createElement("iframe");
  iframe.id = protocol + "iframe";
  iframe.style.border = '0px';
  iframe.style.width = '0px';
  iframe.style.height = '0px';
  iframe.style.visibility = 'hidden';
  iframe.style.display = 'none';
  document.getElementsByTagName("BODY")[0].appendChild(iframe);
  iframe.src = address;
}

function doTest()
{
  test('ipv4','http://ipv4.erley.org/test.html?top=http://wireless.erley.org');
  test('ipv6','http://ipv6.erley.org/test.html?top=http://wireless.erley.org');
  test('ipv4ipv6','http://ipv4ipv6.erley.org/test.html?top=http://wireless.erley.org');
  test('ipv6ipv4','http://ipv6ipv4.erley.org/test.html?top=http://wireless.erley.org');
  runInt = window.setInterval("updateStats()", runInterval);
}
this.onload = doTest;
