   var ld=(document.all);
  var ns4=document.layers;
 var ns6=document.getElementById&&!document.all;
 var ie4=document.all;
  if (ns4)
 	ld=document.loading;
 else if (ns6)
 	ld=document.getElementById("loading").style;
 else if (ie4)
 	ld=document.all.loading.style;
 	/*@cc_on @if (@_win32 && @_jscript_version >= 5) if (!window.XMLHttpRequest)
window.XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP') }
@end @*/
  function init()
 {
 }

  var http_request;
  function makePostRequest(url, data) {   
    http_request = false;
    http_request = new XMLHttpRequest();
    data = data;
    if (!http_request) {
      alert('Cannot create XMLHTTP instance');
      return false;
    }
    http_request.onreadystatechange = postResponse;
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Accept-Language", "en-us,en;q=0.5");
    http_request.setRequestHeader("Accept-Encoding", "gzip,deflate");
    http_request.setRequestHeader("Keep-Alive", "300");
    http_request.setRequestHeader("Connection", "keep-alive");
    http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	  http_request.setRequestHeader("Content-Length", data.length);
	  http_request.send(data);
  }
  function postResponse()
  {
    try{
    if (http_request != null && http_request.status == 200) //this means there is a result from the server
      {
        ;//alert(http_request.responseText);     
      }
      }
      catch(err)
      {
      ;
      }
  }
  function exp (base, power, mod)
  {
    c = 1;
    eprime = 0;
    while (eprime < power)
    {
      eprime++;
      c = (base*c)%mod;
    }
    return c;
  }
  function S (d, j)
  {
    k = 0;
    ret = 0;
    oret = 0;
    oldret = 0;
    while (k <= d)
    {
      r = 8*k+j;
      ret += ((exp(16,(d-k),r)/r))%1;
      k++;
    }
    
    while(true)
    {
      oldret = oret;
      oret += (Math.pow(16, (d-k))/(8*k+j))%1;
      if (oret == oldret)
        break;
      else
        k++;
    }
    return ret+oret
  }
  function PS1 (d, j, starti, endi)
  {
      k = starti;
      ret = 0;
      while (k < endi)
      {
        r = 8*k+j;
        ret += ((exp(16,(d-k),r)/r))%1;
        k++;
      }
      return ret;
  }
  function PS2 (d, j)
  {
        oret = 0;
      oldret = 0;
    while(true)
    {
      oldret = oret;
      oret += (Math.pow(16, (d-k))/(8*k+j))%1;
      if (oret == oldret)
        break;
      else
        k++;
    }
    return oldret;
  }
  function calcPartPi(starti, piece, n)
  {
    //find which summation(s) to do return "";
    s1 = n;
    s2 = n*2;
    s3 = n*3;
    s4 = n*4;
    value = 0;
      
    if (starti < s1)
    {
      if (starti + piece > s1)
      {
        value += 4*(PS1(n, 1, starti+1, n)+PS2(n,1))%1;
        piece -= (s1-starti);
        starti = s1;
      }
      else if (starti + piece == s1)
      { 
        value += 4*(PS1(n, 1, starti+1, n)+PS2(n,1))%1;
        return value;
      }
      else
      {
        value += 4*PS1(n, 1, starti+1, starti+1+piece);
        value = value%1;
        return value;
      }
    }
    if (starti < s2)
    {
      if (starti + piece > s2)
      {

        value -= (2*(PS1(n, 4, (starti+1)%n, n)+PS2(n,4)))%1;
        piece -= (s2-starti);
        starti = s2;
      }
      else if (starti + piece == s2)
      {
        value -= (2*(PS1(n, 4, (starti+1)%n, n)+PS2(n,4)))%1;
        return value;
      }
      else
      {
        value -= 2*PS1(n, 4, (starti+1)%n, ((starti+1)%n)+piece);
        value = value%1;
        return value;
      }
      
    }
    if (starti < s3)
    {
      if (starti + piece > s3)
      {
        value -= (PS1(n, 5, (starti)%n, n)+PS2(n,5))%1;
        piece -= (s3-starti);
        starti = s3;
      }
      else if (starti + piece == s3)
      {
        value -= (PS1(n, 5, (starti)%n, n)+PS2(n,5))%1;
        return value;
      }
      else
      {
        value -= PS1(n, 5, (starti)%n, (starti)%n+piece);
        value = value%1;
        return value;
      }
    }
    
    if (starti < s4)
    {
      if (starti + piece > s4)
      {
        value -= (PS1(n, 6, (starti)%n, n)+PS2(n,6))%1;
        piece -= (s4-starti);
        starti = s4;
        return value;
      }
      else if (starti + piece == s4)
      {
        value -= (PS1(n, 6, (starti)%n, n)+PS2(n,6))%1;
        return value;
      }
      else
      {
        value -= PS1(n, 6, (starti)%n, (starti)%n+piece);
        value = value%1;
        return value;        
      }
    }
  }
  function calcPi (n)
  {
    fulltotal = (4*S(n,1) - 2*S(n,4) - S(n,5) - S(n,6))%1;
    if (fulltotal<0)
			fulltotal+=1;
		
      
      fulltotal *= 16*16*16*16*16;
      retstr = parseInt(fulltotal).toString(16);
      len = retstr.length;
      len = 5 - len;
      if (len != 0)
      {        
        for (var i = 0; i < len; i++)
        {
          retstr = "0".concat(retstr);
        }
      }
      return retstr;
  }
  
  function HexPi(browser, version, number, starttime, pflag, pstart, piece)
  {
    /*do browser specific calls here*/
    /*if (browser.toLowerCase() == "firefox")
      
    else if (browser.toLowerCase() == "msie")
      document.write("ie");
    else if (browser.toLowerCase() == "opera") 
      document.write("opera");
    else if (version.indexOf("Chrome")!=-1)
      document.write("chrome");
    else    
      document.write(browser + " " + version);
      */
    /*call calcpi*/
    var date = new Date();
    var startt = date.valueOf();
    var max = 0;
    
    var time = 0;
    var endtime = startt;
    var data2 = "";
    if (!pflag)  
    {
      var value = calcPi(number);
      date = new Date();
      endtime = date.valueOf();
      //alert(endtime);
      time = endtime - startt;
      data2 = "start=" + starttime + "&end=" + endtime + "&value=" + value + "&index=" + number;
      document.write("<p>0x&pi; = 3.243..........." + value + "<br/>Digits " + number + " to " + (number + 5)+ " of 0xPi calculated. <br/> Calculated in " + time + " miliseconds<br/>");
    }
    else
    {
      var value = calcPartPi(pstart, piece, number);
      date = new Date();      
      endtime = date.valueOf();
      time = endtime - startt;
//      if (piece+pstart == number*4)
  //      document.write(value);
      data2 = "start=" + starttime + "&end=" + endtime + "&value=" + value + "&index=" + number + "&pstart=" + (pstart+piece);
      document.write("<p>You calculated " + parseInt((100*(piece/(index*4)))) + "% of the ");
      for (i =0; i < 4; i++)
      {
        document.write(number+i + ", ");
      }
      document.write(number+4 + " digits of 0xPi ("+parseInt(100*(pstart+piece)/(index*4)) +"%) in " + time + " ms.");
    }
    
    
    document.write("<br></p>");
    
    if(ns4){ld.visibility="hidden";}
     else if (ns6||ie4) ld.display="none";
    var data1 = "number=" + version + "&milliseconds=" + time + "&browser=" + browser;    
    makePostRequest("http://seniorproject.korykirk.com/browserinfo.php",data1);
    makePostRequest("http://seniorproject.korykirk.com/pipost.php",data2);
 }
 