﻿function ShowHistory(direction)
{
   if(direction > 0)
   {
      if(statsHistory.length - 1 > historyPointer)
      {
         historyPointer++;
         var statResults = statsHistory[historyPointer];
         statResults.Cached = true;
         GetStats(statResults);
      }
   }
   else
   {
      if(historyPointer > 0)
      {
         historyPointer--;
         var statResults = statsHistory[historyPointer];
         statResults.Cached = true;
         GetStats(statResults);
      }
   }
}

function PopulateGenericStatsSucceeded(statResults)
{
   if(statResults.HasChart)
   {
      GetChart(statResults.StatType);
   }
   
   if(!statResults.Cached)
   {
      if(statsHistory.length >= 10)
      {
         statsHistory.shift();
      }
      
      if(rangeChangedOnly)
      {
         statsHistory[historyPointer] = statResults;
         rangeChangedOnly = false;
      }
      else
      {
         while(statsHistory.length - 1 > historyPointer)
         {
            statsHistory.pop();
         }
         statsHistory.push(statResults);
         historyPointer = statsHistory.length - 1;
      }
   }
   
   var tableStats = $get("TableStats");
   var divStatName = $get("DivStatName");

   var SpanLastUpdate = $get("SpanLastUpdate");
   SpanLastUpdate.innerHTML = statResults.LastUpdate;

   var SpanDateRange = $get("SpanDateRange");
   SpanDateRange.innerHTML = statResults.DateRange;
   
   disablePaging = statResults.DisablePaging;
   
   if(!statResults.Cached)
   {
      statResults.SubStatName = statName;
      statName = "";
   }
   
   if(statResults.SubStatName.length > 0)
   {
      divStatName.innerHTML = statResults.SubStatName + " - " + statResults.StatName;
   }
   else
   {
      divStatName.innerHTML = statResults.StatName;
   }
   
   while(tableStats.tBodies[1].rows.length > 0)
   {
         tableStats.tBodies[1].deleteRow(0);
   }
   
   var result = statResults.StatsDataList;
   
   for(var i = 0; i < result.length; i++)
   {
      var newRow = tableStats.tBodies[0].rows[0].cloneNode(true);
      tableStats.tBodies[1].appendChild(newRow);
      
      newRow.className = i%2==1?"oddrow":"";
      
      newRow.title = result[i].Value;
      newRow.cells[0].innerHTML = result[i].Row;
      if(statResults.StatType == 3)
      {
         var flag = new Image(20, 12);
         newRow.cells[1].appendChild(flag);
         flag.src = "/images/flags/" + result[i].Value2 + ".gif";
         flag.alt = result[i].Value;
         
         var span = document.createElement("SPAN");
         newRow.cells[1].appendChild(span);
         span.innerHTML = "&nbsp;" + result[i].Value;
      }
      else if(statResults.StatType == 2)
      {
         var anchor = document.createElement("A");
         newRow.cells[1].appendChild(anchor);
         anchor.innerHTML = result[i].Value;
         anchor.href = siteUrl + result[i].Value;
         anchor.style.textDecoration = "underline";
         anchor.target = "_blank";
      }
      else
      {
         if(statResults.HasSubResults)
         {
            var anchor = document.createElement("A");
            newRow.cells[1].appendChild(anchor);
            anchor.innerHTML = result[i].Value;
            anchor.href = "javascript:GetSubStats('" + result[i].Value + "', " + result[i].ID + ")";
            anchor.style.textDecoration = "underline";
         }
         else
         {
            newRow.cells[1].innerHTML = result[i].Value;
         }
      }
      newRow.cells[2].innerHTML = result[i].Visitors;
      newRow.cells[3].innerHTML = result[i].VisitorsPercentage;
      newRow.cells[4].innerHTML = result[i].Hits;
      newRow.cells[5].innerHTML = result[i].HitsPercentage;
   }
   
   valueCount = statResults.ValueCount;
   
   ShowSummary();
}

function PopulateGenericStatsFailed(eventArgs)
{
   var ImageLoading = $get("ImageLoading");
   ImageLoading.style.visibility = "hidden";
   
   var SpanLoading = $get("SpanLoading");
   SpanLoading.innerHTML = eventArgs._message;
   
   window.clearInterval(intervalID);
}

function MovePage(pageDirection)
{
   if(disablePaging)
   {
      return;
   }
   
   if(rangeStart + (range * pageDirection) > valueCount)
   {
      return;
   }
   
   if(rangeStart == 1 && pageDirection == -1)
   {
      return;
   }
   
   rangeStart = rangeStart + (range * pageDirection);
   
   if(rangeStart < 0)
   {
      rangeStart = 1;
   }
   
   GetStats();
}

function SetRange(newRange)
{
   var oldRange = range;
   range = parseInt(newRange);
   rangeChangedOnly = true;
   
   if((valueCount > oldRange && oldRange < range) || valueCount > range)
   {
      GetStats();
   }
   else
   {
      statsHistory[historyPointer].Range = range;
   }
}

function GetNewStats(statID)
{
   statType = statID;
   rangeStart = 1;
   valueID = 0;
   GetStats();
}

function ShowProgress()
{
   var ImageLoading = $get("ImageLoading");
   ImageLoading.style.visibility = "visible";
}

function ShowSummary()
{
   var spanRange = $get("SpanRange");
   var endOfRange = rangeStart + range - 1;
   
   if(endOfRange > valueCount)
   {
      endOfRange = valueCount;
   }
   spanRange.innerHTML =   rangeStart + " - " + endOfRange + " (" + valueCount + ")";
   
   var ImageLoading = $get("ImageLoading");
   ImageLoading.style.visibility = "hidden";
   
   var tableStats = $get("TableStats");
   tableStats.tHead.style.visibility = "visible";
   tableStats.tFoot.style.visibility = "visible";
   tableStats.disabled = false;
   
   window.clearInterval(intervalID);
}

function GetChart(statType)
{
   var divStats = $get("DivStats");
   divStats.style.display = "inline";
   
   CreateChart("DivStats", statType, startDate, endDate, rangeStart, range, valueID)
}

function CreateChart(divName, statType, startDate, endDate, rangeStart, range, valueID)
{
   var chart1 = new FusionCharts("../FusionCharts/FCF_MSColumn3D.swf", "embed" + divName, "600", "300"); 
   var url = "StatsXml.aspx%3FStartDate%3D" + startDate + "%26EndDate%3D" + endDate + "%26StatType%3D" + statType + "%26Range%3D" + range + "%26rangeStart%3D" + rangeStart;
   chart1.setDataURL(url);
   chart1.render(divName);
}

function GetSubStats(name, ID)
{
   statName = name;
   valueID = ID == null ? 0 : ID;
   
   GetStats();
}

function GetStats(statResults)
{
   var ImageLoading = $get("ImageLoading");
   ImageLoading.alt = loadingText;
   ImageLoading.title = loadingText;
   ImageLoading.style.visibility = "visible";
   
   var SpanLoading = $get("SpanLoading");
   SpanLoading.innerHTML = "";
   
   var tableStats = $get("TableStats");
   tableStats.disabled = true;
   
   var divStats = $get("DivStats");
   divStats.style.display = "none";
   
   intervalID = window.setInterval(ShowProgress, 1000);
   
   if(statResults == null)
   {
      if(startDate.length > 0 && endDate.length > 0)
      {
         ToplistWeb.ToplistWS.GetStats(statType, startDate, endDate, rangeStart, range, valueID, PopulateGenericStatsSucceeded, PopulateGenericStatsFailed);
      }
   }
   else
   {
      statType = statResults.StatType;
      startDate = statResults.StartDate;
      endDate = statResults.EndDate;
      rangeStart = statResults.RangeStart;
      range = statResults.Range;
      valueID = statResults.ValueID;
      
      var selectRange = $get("SelectRange");
      for(var i = 0; i < selectRange.options.length; i++)
      {
         if(selectRange.options[i].value == range)
         {
            selectRange.options[i].selected = true;
         }
      }
      
      
      calendar1.cfg.setProperty("SELECTED", startDate, false);
      calendar1.render();
      
      calendar2.cfg.setProperty("SELECTED", endDate, false);
      calendar2.render();
      
      PopulateGenericStatsSucceeded(statResults);
   }
}
