// Contest DIV Generator
// -- (c) 2008 Vern Baker
// -- vbaker@engenic.com

// Set default website value
var mSpeed=1;  //  sb 1 - For controlling polling and refresh speed

function ContestRollOver(img_name, img_src)
{
   document[img_name].src = img_src;
}
   
function ContestsStartUp()
{
  document.ContestWork.ContestWorkStatus.value = 'START';
  t=setTimeout('ContestsStartTime()',100*mSpeed);
}  

// Update the DIV with updated bars ever 500 ms
function ContestsStartTime()
{
  // Find the time that we started the contest info
  var today=new Date();
  var h=today.getHours();
  var m=today.getMinutes();
  var s=today.getSeconds();
  // add a zero in front of numbers<10
  m=checkTime(m);
  s=checkTime(s);

  // Populating this gives contests permission to start updating
  //document.getElementById('ContestValue').innerHTML=h+":"+m+":"+s; //+"    "+formatNextPennyPercent(dDiffMs);

  // If we have no data for the contest, then load 
  if (document.ContestWork.ContestWorkStatus.value == 'START') 
  {
    // Get information about the contest from the contest server
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
      //alert ("Browser does not support HTTP Request")
      return;
    }
    
    if (xmlHttp!=null)
    {  
      url="contests/contests-info.php";
      xmlHttp.onreadystatechange=HttpObjectStateChange;
      xmlHttp.open("POST",url,true);
      //xmlHttp.open('GET',url, true);
      // Personal messages
      mRequest=('<REQUEST action="ContestDATA">');
      mRequest=mRequest.concat('</REQUEST>');
      xmlHttp.send(mRequest);
      
      // Let the system know we are waiting for contests
      //document.ContestWork.ContestWorkStatus.value = 'WAITING';
      t=setTimeout('ContestsStartTime()',500*mSpeed);
    }
  }
  else if (document.ContestWork.ContestWorkStatus.value == 'GETHTML') 
  {
    // Get information about the contest from the contest server
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
      //alert ("Browser does not support HTTP Request")
      return;
    }
    
    if (xmlHttp!=null)
    {  
      url="contests/contests-info.php";
      xmlHttp.onreadystatechange=HttpObjectStateChange;
      xmlHttp.open("POST",url,true);
      //xmlHttp.open('GET',url, true);
      // Personal messages
      mRequest=('<REQUEST action="ContestHTML">');
      mRequest=mRequest.concat('</REQUEST>');
      xmlHttp.send(mRequest);

      // Let the system know we are in timer mode now
      document.ContestWork.ContestWorkStatus.value = 'TIMER';
      t=setTimeout('ContestsStartTime()',500*mSpeed);
    }
  }
  else if (document.ContestWork.ContestWorkStatus.value == 'WAITING') 
  {
     // DEBUG
     //document.ContestWork.ContestWorkStatus.value = 'START';
     // Contest@, StartY,M,D, Seed$, AddPerDay$, CapAt$
     //ContestBox("01",2008,04,29,  20.00, 11.00,  200.00);
  }
  else if (document.ContestWork.ContestWorkStatus.value == 'TIMER') 
  {
     // Update the contest boxes
     ContestBox("01",document.getElementById("C1Name")  .innerHTML,
                     document.getElementById("C1Y")     .innerHTML,
                     document.getElementById("C1M")     .innerHTML,
                     document.getElementById("C1D")     .innerHTML,
                     document.getElementById("C1Base")  .innerHTML,
                     document.getElementById("C1DayAdd").innerHTML,
                     document.getElementById("C1Max")   .innerHTML,
                     document.getElementById("C1Hold")  .innerHTML);

     ContestBox("02",document.getElementById("C2Name")  .innerHTML,
                     document.getElementById("C2Y")     .innerHTML,
                     document.getElementById("C2M")     .innerHTML,
                     document.getElementById("C2D")     .innerHTML,
                     document.getElementById("C2Base")  .innerHTML,
                     document.getElementById("C2DayAdd").innerHTML,
                     document.getElementById("C2Max")   .innerHTML,
                     document.getElementById("C2Hold")  .innerHTML);

     ContestBox("03",document.getElementById("C3Name")  .innerHTML,
                     document.getElementById("C3Y")     .innerHTML,
                     document.getElementById("C3M")     .innerHTML,
                     document.getElementById("C3D")     .innerHTML,
                     document.getElementById("C3Base")  .innerHTML,
                     document.getElementById("C3DayAdd").innerHTML,
                     document.getElementById("C3Max")   .innerHTML,
                     document.getElementById("C3Hold")  .innerHTML);

     ContestBox("04",document.getElementById("C4Name")  .innerHTML,
                     document.getElementById("C4Y")     .innerHTML,
                     document.getElementById("C4M")     .innerHTML,
                     document.getElementById("C4D")     .innerHTML,
                     document.getElementById("C4Base")  .innerHTML,
                     document.getElementById("C4DayAdd").innerHTML,
                     document.getElementById("C4Max")   .innerHTML,
                     document.getElementById("C4Hold")  .innerHTML);
                     
     t=setTimeout('ContestsStartTime()',500*mSpeed);  
  }
} // ContestsStartTime


// Create the code for the contest boxes
function ContestBox(pContestID, pName, pDateY, pDateM, pDateD, pStartDollars, pDailyDollars, pCapDollars, pHoldDollars)
{
// Determine constants
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var years = days*365;

var d2 = new Date();
var t2 = d2.getTime();
var y2 = t2/years;

// Determine passed information
var mDollarsDay    = Number(pDailyDollars); //20.00;
var mDollarsStart  = Number(pStartDollars); //100.00;
var mContestStartY = Number(pDateY); //2008;
var mContestStartM = Number(pDateM); // 04;
var mContestStartD = Number(pDateD); // 01;

// Get ms difference from start
var dStart1970 = new Date();
var dStartDate = new Date();
dStartDate.setFullYear(mContestStartY,mContestStartM-1,mContestStartD);
dStartDate.setHours(0);
dStartDate.setMinutes(0);
dStartDate.setSeconds(0);
dStartDate.setMilliseconds(0);

// Cap the amounts
var dDiffMs = mDollarsStart + (dStart1970.getTime() - dStartDate.getTime()) * (mDollarsDay/86400000);
if (dDiffMs > (pCapDollars))
{
   dDiffMs = pCapDollars;
}

//document.getElementById('contest'+pContestID).innerHTML="$"+formatDollars(dDiffMs);
// Update the divs accounting for on hold amounts
if (dDiffMs < (pHoldDollars))
{
  // Moving bars
  document.getElementById('contestbar'+pContestID).innerHTML=""+
     "<table width=100% border=0 cellpadding=0 cellspacing=2>"+
     "<tr bgcolor=#EEEEEE>"+
     "<td class=\"contestbar\" width="+formatNextPennyPercent(dDiffMs)+"% bgcolor=#FFCC00>"+
     "<img src='spacer.gif' border='0'></td>"+
     "<td class=\"contestbarback\"><img src='spacer.gif' border='0'></td>"+
     "</tr>"+
     "</table>";
  // Show the amount element a little differently for new amounts
  if (formatNextPennyPercent(dDiffMs) == 1) 
  {
     document.getElementById('contestamount'+pContestID).innerHTML=""+
     "<i>$"+formatDollars(dDiffMs)+"</i>";
  }
  else
  {
     document.getElementById('contestamount'+pContestID).innerHTML=""+
     "<b>$"+formatDollars(dDiffMs)+"</b>";
  }
  
}
else
{
  // Halted bars
  document.getElementById('contestbar'+pContestID).innerHTML=""+
     "<table width=100% border=0 cellpadding=0 cellspacing=2>"+
     "<tr bgcolor=#EEEEEE>"+
     "<td class=\"contestbar\" width=50% bgcolor=#FFCC00>"+
     "<img src='spacer.gif' border='0'></td>"+
     "<td class=\"contestbarback\"><img src='spacer.gif' border='0'></td>"+
     "</tr>"+
     "</table>";
  document.getElementById('contestamount'+pContestID).innerHTML=""+
     "<u>$"+formatDollars(pHoldDollars)+"</u>"; 
}     
     
} // ContestBox


// Return the money in a good looking format
function formatDollars(i)
{
  var mFind = 0;
  // Turn into a string with zeros at the end
  var mStr = i+".0000A";
  mFind = mStr.indexOf(".");
  //i = mFind;
  var mResult = mStr.substr(0,mFind)+"."+
                mStr.substr(mFind+1,2);
return mResult ;
}

// Return the money in a good looking format
function formatNextPennyPercent(i)
{
  var mFind = 0;
  // Turn into a string with zeros at the end
  var mStr = i+".0000A";
  mFind = mStr.indexOf(".");
  //i = mFind;
  var mResult = mStr.substr(mFind+3,2);
  if (mResult == 0)
  {
    mResult = 1;
  }
return mResult ;
}

// Formating 
function checkTime(i)
{
if (i<10)
  {
  i="0" + i;
  }
return i;
}

// Create an HTTP XML Object
function GetXmlHttpObject()
{ 
  var objXMLHttp=null
  if (window.XMLHttpRequest)
  {
    objXMLHttp=new XMLHttpRequest()
  }
  else if (window.ActiveXObject)
  {
    objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  }
  return objXMLHttp
}

// When a response is returned
function HttpObjectStateChange()
{
  //alert ("Browser runs XML Request2"+xmlHttp.readyState+" "+xmlHttp.status);
  if (xmlHttp.readyState==4)
  {// 4 = "loaded"
    if (xmlHttp.status==200)
    {// 200 = OK
      // This works... the XML approach
      //document.getElementById("ContestDebug").innerHTML="A"+xmlHttp.responseText+"B";
 
      // The XML approach
      var xmlDoc=xmlHttp.responseXML;  // responseText
      
      // First, see if we got HTML for the contest
      mSearch = xmlHttp.responseText.substr(4,13);
      //document.getElementById("ContestDebug").innerHTML="A"+mSearch+"B";
      
      if (mSearch == 'TFCONTESTHTML')
      {
         // Populate the information that goes with it.
         document.getElementById("contest-box").innerHTML=xmlHttp.responseText; 

         // Exit.  We are done
         return;
      }
      
      // Continue on if found
      
      //mValue = xmlDoc.getElementsByTagName("response")[0].childNodes[0].nodeValue;
      mValue = xmlDoc.getElementsByTagName("response").item(0).attributes.getNamedItem("datatype").value;
      if (mValue == 'ContestDATA')
      {
          // General information (this probably wont be used because of issues with re-directs)
          mWebSite = xmlDoc.getElementsByTagName("response").item(0).attributes.getNamedItem("website").value;
          
          // Contest information
          document.getElementById("C1Name")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("name").value;
          document.getElementById("C1Y")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("year").value;
          document.getElementById("C1M")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("month").value;
          document.getElementById("C1D")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("day").value;
          document.getElementById("C1Base")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("base").value;
          document.getElementById("C1DayAdd").innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("dayadd").value;
          document.getElementById("C1Max")   .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("max").value;         
          document.getElementById("C1Hold")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(0).attributes.getNamedItem("hold").value;         
                   
          document.getElementById("C2Name")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("name").value;
          document.getElementById("C2Y")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("year").value;
          document.getElementById("C2M")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("month").value;
          document.getElementById("C2D")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("day").value;
          document.getElementById("C2Base")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("base").value;
          document.getElementById("C2DayAdd").innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("dayadd").value;
          document.getElementById("C2Max")   .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("max").value;         
          document.getElementById("C2Hold")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(1).attributes.getNamedItem("hold").value;         

          document.getElementById("C3Name")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("name").value;
          document.getElementById("C3Y")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("year").value;
          document.getElementById("C3M")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("month").value;
          document.getElementById("C3D")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("day").value;
          document.getElementById("C3Base")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("base").value;
          document.getElementById("C3DayAdd").innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("dayadd").value;
          document.getElementById("C3Max")   .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("max").value;         
          document.getElementById("C3Hold")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(2).attributes.getNamedItem("hold").value;         

          document.getElementById("C4Name")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("name").value;
          document.getElementById("C4Y")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("year").value;
          document.getElementById("C4M")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("month").value;
          document.getElementById("C4D")     .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("day").value;
          document.getElementById("C4Base")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("base").value;
          document.getElementById("C4DayAdd").innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("dayadd").value;
          document.getElementById("C4Max")   .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("max").value;         
          document.getElementById("C4Hold")  .innerHTML=xmlDoc.getElementsByTagName("contest").item(3).attributes.getNamedItem("hold").value;         
 
          // We have the data, now, tell the contest to populate
          document.ContestWork.ContestWorkStatus.value = 'GETHTML';
          return;

          /*          
          mMsgNo = xmlDoc.getElementsByTagName("Message")[0].childNodes[0].nodeValue;
          // Get the last message number for the first cycle
          if (document.MsgTimer.LastMsgID.value == 0)
          {
            document.MsgTimer.LastMsgID.value=mMsgNo;
          }
          else
          {
            // All following cycles, check for new messages?
            document.MsgTimer.MessageSts.value=mValue;
            document.MsgTimer.LastMsgID.value=mMsgNo;
          } */
      }
      else
      {
         // Error 
      }
    }
    else
    {
      alert("Problem retrieving XML data");
    }
  }
} // HttpObjectStateChange


