%PDF- %PDF-
| Direktori : /www/varak.net/awstats.varak.net/js/ |
| Current File : //www/varak.net/awstats.varak.net/js/jawstats_web.js |
/*
* JAWStats 0.8.0 Web Statistics
*
* Copyright (c) 2009 Jon Combe (jawstats.com)
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
$.ajaxSetup({
async: false
});
var oPaging = {
oKeywords: {iCurrPage: 0, iRowCount: 0, iRowsPerPage: 15, sSort: "freqDESC"},
oKeyphrases: {iCurrPage: 0, iRowCount: 0, iRowsPerPage: 15, sSort: "freqDESC"}
};
function DrawGraph_EachYear(sStatType) {
sStatType = typeof sStatType !== 'undefined' ? sStatType : "iVisits";
var aItem = [];
var aValue = [];
var aInitial = [];
var cur_visits = [];
oAllMonths = aStatistics["allmonths"];
for (part_idx in oAllMonths)
if (aParts[part_idx].active) {
aValue[part_idx] = [];
cur_visits[part_idx] = 0;
}
var cur_year = oAllMonths[0].aData[0].dtDate.getFullYear();
for (var iIndex in oAllMonths[0].aData) {
var year = oAllMonths[0].aData[iIndex].dtDate.getFullYear();
if (year == cur_year) {
for (part_idx in oAllMonths)
if (aParts[part_idx].active && !(oAllMonths[part_idx].aData[iIndex] === undefined))
cur_visits[part_idx] += oAllMonths[part_idx].aData[iIndex][sStatType];
} else {
aItem.push(cur_year);
aInitial.push(cur_year.toString().substr(2));
for (part_idx in oAllMonths)
if (aParts[part_idx].active)
aValue[part_idx].push(cur_visits[part_idx]);
cur_year = year;
for (part_idx in oAllMonths)
if (aParts[part_idx].active)
cur_visits[part_idx] = oAllMonths[part_idx].aData[iIndex][sStatType];
}
}
aItem.push(cur_year);
aInitial.push(cur_year.toString().substr(2));
for (part_idx in oAllMonths)
if (aParts[part_idx].active)
aValue[part_idx].push(cur_visits[part_idx]);
// remove empty/non-active parts
var aActiveValue = [];
for (iIndex in aValue)
if (aValue[iIndex])
aActiveValue.push(aValue[iIndex]);
DrawBar(aItem, aActiveValue, aInitial);
}
function DrawGraph_AllMonths(sStatType) {
sStatType = typeof sStatType !== 'undefined' ? sStatType : "iVisits";
oAllMonths = aStatistics["allmonths"];
var aItem = [];
var aValue = [];
for (part_idx in oAllMonths)
if (aParts[part_idx].active)
aValue[part_idx] = [];
for (var iIndex in oAllMonths[0].aData) {
aItem.push(oAllMonths[0].aData[iIndex].dtDate);
for (part_idx in oAllMonths)
if (aParts[part_idx].active && (oAllMonths[part_idx] != null))
if (!(oAllMonths[part_idx].aData[iIndex] === undefined))
aValue[part_idx].push(oAllMonths[part_idx].aData[iIndex][sStatType]);
}
DrawGraph(aItem, aValue, [], "time");
}
function DrawGraph_ThisMonth(sStatType) {
sStatType = typeof sStatType !== 'undefined' ? sStatType : "iVisits";
var oThisMonth = aStatistics["thismonth"];
var aItem = [];
var aValue = [];
var aInitial = [];
for (part_idx in oThisMonth)
if (aParts[part_idx].active)
aValue[part_idx] = [];
// populate days
var iDaysInMonth = (new Date(g_iYear, g_iMonth, 0)).getDate();
var iDayOfWeek = (new Date(g_iYear, (g_iMonth - 1), 1)).getDay();
for (var iDay = 0; iDay < iDaysInMonth; iDay++) {
aItem.push(Lang((iDay + 1) + DateSuffix(iDay + 1)));
for (part_idx in oThisMonth)
if (aParts[part_idx].active)
aValue[part_idx].push(0);
aInitial.push(Lang(gc_aDayName[iDayOfWeek].substr(0, 3)));
// day of week
iDayOfWeek++;
if (iDayOfWeek > 6) {
iDayOfWeek = 0;
}
}
// update values we know about
for (var iIndex in oThisMonth[0].aData) {
iDay = (oThisMonth[0].aData[iIndex].dtDate.getDate() - 1);
// populate values for each part:
for (part_idx in oThisMonth) {
if (aParts[part_idx].active)
if (oThisMonth[part_idx].aData[iIndex])
aValue[part_idx][iDay] = oThisMonth[part_idx].aData[iIndex][sStatType];
else
aValue[part_idx][iDay] = 0;
}
}
// remove empty/non-active parts
var aActiveValue = [];
for (iIndex in aValue)
if (aValue[iIndex])
aActiveValue.push(aValue[iIndex]);
DrawBar(aItem, aActiveValue, aInitial);
}
function DrawGraph_Time(sStatType) {
sStatType = typeof sStatType !== 'undefined' ? sStatType : "iPages";
var oTime = aStatistics["time"];
var aItem = [];
var aValue = [];
for (part_idx in oTime)
if (aParts[part_idx].active)
aValue[part_idx] = [];
for (var iRow in oTime[0].aData) {
oRow = oTime[0].aData[iRow];
sHour = oRow.iHour;
if (oRow.iHour < 10) {
sHour = ("0" + sHour)
}
aItem.push(sHour);
for (part_idx in oTime)
if (aParts[part_idx].active && (oTime[part_idx] != null))
aValue[part_idx].push(oTime[part_idx].aData[iRow][sStatType]);
}
DrawGraph(aItem, aValue, [], null);
}
function DrawPage(sPage) {
$("#content").fadeOut(g_iFadeSpeed, function() {
g_sCurrentView = sPage;
var aPage = sPage.split(".");
switch (aPage[0]) {
case "allmonths":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_AllMonths(sPage);
return false;
}
async:false,
PageLayout_AllMonths(aPage[1]);
break;
case "browser":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Browser(sPage);
return false;
}
MergeParts_Browser();
PageLayout_Browser(aPage[1]);
break;
case "country":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Country(sPage);
return false;
}
MergeParts_Country();
PageLayout_Country(aPage[1]);
break;
case "city":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_City(sPage);
return false;
}
MergeParts_City();
PageLayout_City(aPage[1]);
break;
case "org":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Org(sPage);
return false;
}
MergeParts_Org();
PageLayout_Org(aPage[1]);
break;
case "visitor":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Visitor(sPage);
return false;
}
MergeParts_Visitor();
PageLayout_Visitor(aPage[1]);
break;
case "filetypes":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Filetypes(sPage);
return false;
}
MergeParts_Filetypes();
PageLayout_Filetypes();
break;
case "keyphrases":
if (typeof aStatistics["keyphrases"] == "undefined") {
PopulateData_Keyphrases(sPage);
return false;
}
MergeParts_Keyphrases();
PageLayout_Keyphrases(aPage[1]);
break;
case "keywords":
if (typeof oStatistics.oKeywords == "undefined") {
PopulateData_Keywords(sPage);
return false;
}
PageLayout_Keywords(aPage[1]);
break;
case "os":
if (typeof aStatistics["os"] == "undefined") {
PopulateData_OperatingSystems(sPage);
return false;
}
MergeParts_OperatingSystems();
PageLayout_OperatingSystems(aPage[1]);
break;
case "pagerefs":
if (aPage[1] == "se") {
if (typeof aStatistics["pagerefsse"] == "undefined") {
PopulateData_PageRefsSE(sPage);
return false;
}
MergeParts_PageRefsSE();
PageLayout_PageRefsSE();
} else {
if (typeof aStatistics["pagerefs"] == "undefined") {
PopulateData_PageRefs(sPage);
return false;
}
MergeParts_PageRefs();
PageLayout_PageRefs(aPage[1]);
}
break;
case "pages":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Pages(sPage);
return false;
}
MergeParts_Pages();
PageLayout_Pages(aPage[1]);
break;
case "robots":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Robots(sPage);
return false;
}
MergeParts_Robots();
PageLayout_Robots();
break;
case "searches":
switch (aPage[1]) {
case "keyphrasecloud":
if (typeof aStatistics["keyphrases"] == "undefined") {
PopulateData_Keyphrases(sPage);
return false;
}
MergeParts_Keyphrases();
PageLayout_Searches(aPage[1]);
break;
case "keyphrases":
if (typeof aStatistics["keyphrases"] == "undefined") {
PopulateData_Keyphrases(sPage);
return false;
}
MergeParts_Keyphrases();
PageLayout_Searches(aPage[1]);
break;
case "keywordcloud":
if (typeof aStatistics["keywords"] == "undefined") {
PopulateData_Keywords(sPage);
return false;
}
MergeParts_Keywords();
PageLayout_Searches(aPage[1]);
break;
case "keywords":
if (typeof aStatistics["keywords"] == "undefined") {
PopulateData_Keywords(sPage);
return false;
}
MergeParts_Keywords();
PageLayout_Searches(aPage[1]);
break;
}
break;
case "session":
if (typeof aStatistics["session"] == "undefined") {
PopulateData_Session(sPage);
return false;
}
MergeParts_Session();
PageLayout_Session();
break;
case "status":
if (aPage[1] == "404") {
if (typeof aStatistics["status404"] == "undefined") {
PopulateData_Status404(sPage);
return false;
}
MergeParts_Status404();
} else {
if (typeof aStatistics["status"] == "undefined") {
PopulateData_Status(sPage);
return false;
}
MergeParts_Status();
}
PageLayout_Status(aPage[1]);
break;
case "thismonth":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_ThisMonth(sPage);
return false;
}
PageLayout_ThisMonth(aPage[1]);
break;
case "time":
if (typeof aStatistics[aPage[0]] == "undefined") {
PopulateData_Time(sPage);
return false;
}
PageLayout_Time();
break;
}
});
}
function DrawPie_Browser(sPage) {
var oBrowser = aStatistics["browser"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
switch (sPage) {
case "all":
for (var iRow in oBrowser.aData) {
if (iCount < 6) {
aItem.push(oBrowser.aData[iRow].sBrowser);
aValue.push(oBrowser.aData[iRow].iHits);
iRunningTotal += oBrowser.aData[iRow].iHits;
iCount++;
}
}
if (oBrowser.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Browsers"));
aValue.push(oBrowser.iTotalHits - iRunningTotal);
}
DrawPie(oBrowser.iTotalHits, aItem, aValue);
break;
case "family":
for (var iRow in oBrowser.aFamily) {
if (iCount < 6) {
if (oBrowser.aFamily[iRow].iHits > 0) {
aItem.push(gc_aBrowserFamilyCaption[oBrowser.aFamily[iRow].sBrowser]);
aValue.push(oBrowser.aFamily[iRow].iHits);
iRunningTotal += oBrowser.aFamily[iRow].iHits;
iCount++;
}
}
}
if (oBrowser.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Browsers"));
aValue.push(oBrowser.iTotalHits - iRunningTotal);
}
DrawPie(oBrowser.iTotalHits, aItem, aValue);
break;
default:
// find family totals
for (var iRow in aFamily) {
if (aFamily[iRow].sBrowser == sPage) {
iFamilyTotalHits = aFamily[iRow].iHits;
break;
}
}
// extract data
for (var iRow in oBrowser.aData) {
if ((iCount < 6) && (oBrowser.aData[iRow].sFamily == sPage)) {
aItem.push(oBrowser.aData[iRow].sBrowser);
aValue.push(oBrowser.aData[iRow].iHits);
iRunningTotal += oBrowser.aData[iRow].iHits;
iCount++;
}
}
if (iFamilyTotalHits > iRunningTotal) {
aItem.push(Lang("Other Versions"));
aValue.push(iFamilyTotalHits - iRunningTotal);
}
DrawPie(iFamilyTotalHits, aItem, aValue);
break;
}
}
function DrawPie_Country(sContinent) {
var oCountry = aStatistics["country"][aParts.length + 1];
// get values
if (typeof sContinent == "undefined") {
iTotalPages = oCountry.iTotalPages;
} else {
iTotalPages = oCountry.oContinent[sContinent].iTotalPages;
}
aData = oCountry.aData;
// build arrays
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in aData) {
if (iCount < 6) {
if ((typeof sContinent == "undefined") || (aData[iIndex].sContinent == sContinent)) {
aItem.push(Lang(aData[iIndex].sCountryName));
aValue.push(aData[iIndex].iPages);
iRunningTotal += aData[iIndex].iPages;
iCount++;
}
}
}
if (iTotalPages > iRunningTotal) {
aItem.push(Lang("Other Countries"));
aValue.push(iTotalPages - iRunningTotal);
}
if (iTotalPages > 0)
DrawPie(iTotalPages, aItem, aValue);
}
function DrawPie_City(sCountry) {
oCity = aStatistics["city"][aParts.length + 1];
var iTotalHits = 0;
// get values
if (typeof sCountry == "undefined") {
iTotalHits = oCity.iTotalHits;
} else {
iTotalHits = oCity.oCountry[sCountry].iTotalHits;
}
aData = oCity.aData;
// build arrays
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in aData) {
if ((typeof sCountry == "undefined") || (aData[iIndex].sCountry == sCountry)) {
if (iCount < 6) {
aItem.push(Lang(aData[iIndex].sCityName));
aValue.push(aData[iIndex].iHits);
iRunningTotal += aData[iIndex].iHits;
iCount++;
}
}
}
if (iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Cities"));
aValue.push(iTotalHits - iRunningTotal);
}
DrawPie(iTotalHits, aItem, aValue);
}
function DrawPie_CountryContinent() {
var oCountry = aStatistics["country"][aParts.length + 1];
// this section is an anomaly whereby the continents need to be sorted by size before being passsed to the flash
// thankfully there are only 6 (we are interested in)
var aTemp = [];
for (var sContinent in gc_aContinents) {
aTemp.push({"sContinent": sContinent,
"iPages": oCountry.oContinent[sContinent].iTotalPages});
}
aTemp.sort(Sort_Pages);
// pass across to simpler array format
var iTotalPages = oCountry.iTotalPages;
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
for (var iIndex in aTemp) {
aItem.push(Lang(aTemp[iIndex].sContinent));
aValue.push(aTemp[iIndex].iPages);
iRunningTotal += aTemp[iIndex].iPages;
}
if (iTotalPages > iRunningTotal) {
aItem.push(Lang("Other"));
aValue.push(iTotalPages - iRunningTotal);
}
DrawPie(iTotalPages, aItem, aValue);
}
function DrawPie_Org() {
oOrg = aStatistics["org"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oOrg.aData) {
if (iCount < 6) {
aItem.push(oOrg.aData[iIndex].sOrgName);
aValue.push(oOrg.aData[iIndex].iHits);
iRunningTotal += oOrg.aData[iIndex].iHits;
}
iCount++;
}
if (oOrg.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Organizations"));
aValue.push(oOrg.iTotalHits - iRunningTotal);
}
DrawPie(oOrg.iTotalHits, aItem, aValue);
}
function DrawPie_Visitor() {
oVisitor = aStatistics["visitor"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oVisitor.aData) {
if (iCount < 6) {
aItem.push(oVisitor.aData[iIndex].sDesc);
aValue.push(oVisitor.aData[iIndex].iPages);
iRunningTotal += oVisitor.aData[iIndex].iPages;
}
iCount++;
}
if (oVisitor.iTotalPages > iRunningTotal) {
aItem.push(Lang("Other Visitors"));
aValue.push(oVisitor.iTotalPages - iRunningTotal);
}
DrawPie(oVisitor.iTotalPages, aItem, aValue);
}
function DrawPie_Filetypes() {
oFiletypes = aStatistics["filetypes"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oFiletypes.aData) {
if (iCount < 6) {
if (oFiletypes.aData[iIndex].sFiletype != " ") {
aItem.push(oFiletypes.aData[iIndex].sFiletype.toUpperCase() + ": " +
Lang(oFiletypes.aData[iIndex].sDescription));
} else {
aItem.push(Lang(oFiletypes.aData[iIndex].sDescription));
}
aValue.push(oFiletypes.aData[iIndex].iHits);
iRunningTotal += oFiletypes.aData[iIndex].iHits;
}
iCount++;
}
if (oFiletypes.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Filetypes"));
aValue.push(oFiletypes.iTotalHits - iRunningTotal);
}
DrawPie(oFiletypes.iTotalHits, aItem, aValue);
}
function DrawPie_Keyphrases() {
var oKeyphrases = aStatistics["keyphrases"][aParts.length + 1][0];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oKeyphrases.aData) {
if (iCount < 6) {
aItem.push(oKeyphrases.aData[iIndex].sPhrase);
aValue.push(oKeyphrases.aData[iIndex].iFreq);
iRunningTotal += oKeyphrases.aData[iIndex].iFreq;
}
iCount++;
}
if (oKeyphrases.iTotalFreq > iRunningTotal) {
aItem.push(Lang("Other Keyphrases"));
aValue.push(oKeyphrases.iTotalFreq - iRunningTotal);
}
DrawPie(oKeyphrases.iTotalFreq, aItem, aValue);
}
function DrawPie_Keywords() {
var oKeywords = aStatistics["keywords"][aParts.length + 1][0];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oKeywords.aData) {
if (iCount < 6) {
aItem.push(oKeywords.aData[iIndex].sWord);
aValue.push(oKeywords.aData[iIndex].iFreq);
iRunningTotal += oKeywords.aData[iIndex].iFreq;
}
iCount++;
}
if (oKeywords.iTotalFreq > iRunningTotal) {
aItem.push(Lang("Other Keywords"));
aValue.push(oKeywords.iTotalFreq - iRunningTotal);
}
DrawPie(oKeywords.iTotalFreq, aItem, aValue);
}
function DrawPie_OperatingSystems(sPage) {
var oOperatingSystems = aStatistics["os"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
switch (sPage) {
case "all":
for (var iRow in oOperatingSystems.aData) {
if (iCount < 6) {
aItem.push(oOperatingSystems.aData[iRow].sOperatingSystem);
aValue.push(oOperatingSystems.aData[iRow].iHits);
iRunningTotal += oOperatingSystems.aData[iRow].iHits;
iCount++;
}
}
if (oOperatingSystems.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Operating Systems"));
aValue.push(oOperatingSystems.iTotalHits - iRunningTotal);
}
DrawPie(oOperatingSystems.iTotalHits, aItem, aValue);
break;
case "family":
for (var iRow in oOperatingSystems.aFamily) {
if (iCount < 6) {
if (oOperatingSystems.aFamily[iRow].iHits > 0) {
aItem.push(gc_aOSFamilyCaption[oOperatingSystems.aFamily[iRow].sOperatingSystem]);
aValue.push(oOperatingSystems.aFamily[iRow].iHits);
iRunningTotal += oOperatingSystems.aFamily[iRow].iHits;
iCount++;
}
}
}
if (oOperatingSystems.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Operating Systems"));
aValue.push(oOperatingSystems.iTotalHits - iRunningTotal);
}
DrawPie(oOperatingSystems.iTotalHits, aItem, aValue);
break;
default:
// find family totals
for (var iRow in oOperatingSystems.aFamily) {
if (oOperatingSystems.aFamily[iRow].sBrowser == sPage) {
iFamilyTotalHits = oOperatingSystems.aFamily[iRow].iHits;
break;
}
}
// extract data
for (var iRow in oOperatingSystems.aData) {
if ((iCount < 6) && (oOperatingSystems.aData[iRow].sFamily == sPage)) {
aItem.push(oOperatingSystems.aData[iRow].sOperatingSystem);
aValue.push(oOperatingSystems.aData[iRow].iHits);
iRunningTotal += oOperatingSystems.aData[iRow].iHits;
iCount++;
}
}
if (iFamilyTotalHits > iRunningTotal) {
aItem.push(Lang("Other Versions"));
aValue.push(iFamilyTotalHits - iRunningTotal);
}
DrawPie(iFamilyTotalHits, aItem, aValue);
break;
}
}
function DrawPie_PageRefs(sPage) {
var oPageRefs = aStatistics["pagerefs"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
// switch view
switch (sPage) {
case "all":
case "top10":
case "top50":
var aData = oPageRefs.aData;
var sVarName = "sURL";
break;
case "domains":
var aData = oPageRefs.aDataDomain;
var sVarName = "sVisibleURL";
break;
}
// loop through data
for (var iIndex in aData) {
if (iCount < 6) {
aItem.push(aData[iIndex][sVarName]);
aValue.push(aData[iIndex].iPages);
iRunningTotal += aData[iIndex].iPages;
}
iCount++;
}
if (oPageRefs.iTotalPages > iRunningTotal) {
aItem.push(Lang("Other Referrers"));
aValue.push(oPageRefs.iTotalPages - iRunningTotal);
}
DrawPie(oPageRefs.iTotalPages, aItem, aValue);
}
function DrawPie_PageRefsSE(sPage) {
var oPageRefsSE = aStatistics["pagerefsse"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
var aData = oPageRefsSE.aData;
// loop through data
for (var iIndex in aData) {
if (iCount < 6) {
aItem.push(aData[iIndex].sReferrer);
aValue.push(aData[iIndex].iPages);
iRunningTotal += aData[iIndex].iPages;
}
iCount++;
}
if (oPageRefsSE.iTotalPages > iRunningTotal) {
aItem.push(Lang("Other Search Engines"));
aValue.push(oPageRefsSE.iTotalPages - iRunningTotal);
}
DrawPie(oPageRefsSE.iTotalPages, aItem, aValue);
}
function DrawPie_Pages(aData, iTotal, sItemName, bHaveTitles) {
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in aData) {
if (iCount < 6) {
if (bHaveTitles)
aItem.push(aData[iIndex].sTitle);
else
aItem.push(aData[iIndex].sURL);
aValue.push(aData[iIndex][sItemName]);
iRunningTotal += aData[iIndex][sItemName];
}
iCount++;
}
if (iTotal > iRunningTotal) {
aItem.push(Lang("Other URLs"));
aValue.push(iTotal - iRunningTotal);
}
DrawPie(iTotal, aItem, aValue);
}
function DrawPie_Robots() {
var oRobots = aStatistics["robots"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oRobots.aData) {
if (iCount < 6) {
aItem.push(oRobots.aData[iIndex].sRobot);
aValue.push(oRobots.aData[iIndex].iHits);
iRunningTotal += oRobots.aData[iIndex].iHits;
}
iCount++;
}
if (oRobots.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Spiders"));
aValue.push(oRobots.iTotalHits - iRunningTotal);
}
DrawPie(oRobots.iTotalHits, aItem, aValue);
}
function DrawPie_Session() {
var oSession = aStatistics["session"][aParts.length + 1];
var aItem = [Lang("0 seconds - 30 seconds"), Lang("30 seconds - 2 minutes"), Lang("2 minutes - 5 minutes"), Lang("5 minutes - 15 minutes"), Lang("15 minutes - 30 minutes"), Lang("30 minutes - 1 hour"), Lang("More than 1 hour")];
var aValue = [oSession.aData.s0s30s,
oSession.aData.s30s2mn,
oSession.aData.s2mn5mn,
oSession.aData.s5mn15mn,
oSession.aData.s15mn30mn,
oSession.aData.s30mn1h,
oSession.aData.s1h];
DrawPie(oSession.iTotalFreq, aItem, aValue);
}
function DrawPie_Status() {
var oStatus = aStatistics["status"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oStatus.aData) {
if (iCount < 6) {
if (oStatus.aData[iIndex].sDescription != " ") {
aItem.push(oStatus.aData[iIndex].sCode + ": " +
Lang(oStatus.aData[iIndex].sDescription));
} else {
aItem.push(oStatus.aData[iIndex].sCode);
}
aValue.push(oStatus.aData[iIndex].iHits);
iRunningTotal += oStatus.aData[iIndex].iHits;
}
iCount++;
}
if (oStatus.iTotalHits > iRunningTotal) {
aItem.push(Lang("Other Status Codes"));
aValue.push(oStatus.iTotalHits - iRunningTotal);
}
DrawPie(oStatus.iTotalHits, aItem, aValue);
}
function DrawPie_Status404() {
var oStatus404 = aStatistics["status404"][aParts.length + 1];
var aItem = [];
var aValue = [];
var iRunningTotal = 0;
var iCount = 0;
for (var iIndex in oStatus404.aData) {
if (iCount < 6) {
aItem.push(oStatus404.aData[iIndex].sURL.replace(/​/g, ""));
aValue.push(oStatus404.aData[iIndex].iHits);
iRunningTotal += oStatus404.aData[iIndex].iHits;
}
iCount++;
}
if (oStatus404.iTotalHits > iRunningTotal) {
aItem.push("Other URLs");
aValue.push(oStatus404.iTotalHits - iRunningTotal);
}
DrawPie(oStatus404.iTotalHits, aItem, aValue);
}
function DrawTable_AllMonths(sPage) {
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>";
if (sPage == "all") {
sHTML += "<th width=\"16%\">" + Lang("Month") + "</th>";
} else {
sHTML += "<th width=\"16%\">" + Lang("Year") + "</th>";
}
sHTML += "<th width=\"12%\">" + Lang("Total Visitors") + "</th>" +
"<th width=\"12%\">" + Lang("Visitors per Day") + "</th>" +
"<th width=\"12%\">" + Lang("Unique Visitors") + "</th>" +
"<th width=\"12%\">" + Lang("Unique Ratio") + "</th>" +
"<th width=\"12%\">" + Lang("Pages") + "</th>" +
"<th width=\"12%\">" + Lang("Hits") + "</th>" +
"<th width=\"12%\" class=\"noborder\">" + Lang("BW") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
oAllMonths = aStatistics["allmonths"];
// create table body
aHTML = new Array();
var iTotalVisits = 0;
var iTotalUniques = 0;
var iTotalPages = 0;
var iTotalHits = 0;
var iTotalBW = 0;
var iAnnualVisits = 0;
var iAnnualUniques = 0;
var iAnnualPages = 0;
var iAnnualHits = 0;
var iAnnualBW = 0;
var iCurrentYear = oAllMonths[0].aData[0].iYear;
for (var iRow in oAllMonths[0].aData) {
oRow = oAllMonths[0].aData[iRow];
// create single values
var iVisits = SumParts(oAllMonths, "iVisits", iRow);
var iUniques = SumParts(oAllMonths, "iUniques", iRow);
var iPages = SumParts(oAllMonths, "iPages", iRow);
var iHits = SumParts(oAllMonths, "iHits", iRow);
var iBW = SumParts(oAllMonths, "iBW", iRow);
/*var iVisits = oRow.iVisits;
var iUniques = oRow.iUniques;
var iPages = oRow.iPages;
var iHits = oRow.iHits;
var iBW = oRow.iBW;*/
var iDaysInMonth = oRow.iDaysInMonth;
// sum totals
iTotalVisits += iVisits;
iTotalUniques += iUniques;
iTotalPages += iPages;
iTotalHits += iHits;
iTotalBW += iBW;
iAnnualVisits += iVisits;
iAnnualUniques += iUniques;
iAnnualPages += iPages;
iAnnualHits += iHits;
iAnnualBW += iBW;
iCurrentYear = oRow.iYear;
// create table
switch (sPage) {
case "all":
if ((g_iMonth == oRow.iMonth) && (g_iYear == oRow.iYear)) {
var sHTMLRow = "<tr class=\"highlight\">";
} else {
var sHTMLRow = "<tr>";
}
sHTMLRow += "<td><span class=\"hidden\">" + oRow.dtDate.valueOf() + "</span>" + Lang(gc_aMonthName[oRow.iMonth - 1]) + " " + oRow.iYear + "</td>" +
"<td class=\"right\">" + NumberFormat(iVisits, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat((iVisits / iDaysInMonth), 1) + "</td>" +
"<td class=\"right\">" + NumberFormat(iUniques) + "</td>";
if (iVisits > 0) {
sHTMLRow += "<td class=\"right\">" + NumberFormat(((iUniques / iVisits) * 100), 0) + "%</td>";
} else {
sHTMLRow += "<td class=\"right\">0%</td>";
}
sHTMLRow += "<td class=\"right\">" + NumberFormat(iPages, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(iHits, 0) + "</td>" +
"<td class=\"right\">" + DisplayBandwidth(iBW) + "</td>" +
"</tr>\n";
aHTML.push(sHTMLRow);
break;
case "year":
//if ((iCurrentYear != oRow.iYear) || (iRow == (oStatistics.oAllMonths.aData.length - 1))) {
if ((oRow.iMonth == 12) || (iRow == (oAllMonths[0].aData.length - 1))) {
var sHTMLRow = "<tr>" +
"<td>" + iCurrentYear + "</td>" +
"<td class=\"right\">" + NumberFormat(iAnnualVisits) + "</td>" +
"<td class=\"right\">" + NumberFormat((iAnnualVisits / oAllMonths[0].aYearDayCount[iCurrentYear]), 1) + "</td>" +
"<td class=\"right\">" + NumberFormat(iAnnualUniques, 0) + "</td>";
if (iAnnualVisits > 0) {
sHTMLRow += "<td class=\"right\">" + NumberFormat(((iAnnualUniques / iAnnualVisits) * 100), 0) + "%</td>";
} else {
sHTMLRow += "<td class=\"right\">0%</td>";
}
sHTMLRow += "<td class=\"right\">" + NumberFormat(iAnnualPages, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(iAnnualHits, 0) + "</td>" +
"<td class=\"right\">" + DisplayBandwidth(iAnnualBW) + "</td>" +
"</tr>\n";
aHTML.push(sHTMLRow);
// reset values
iAnnualVisits = 0;
iAnnualUniques = 0;
iAnnualPages = 0;
iAnnualHits = 0;
iAnnualBW = 0;
}
break;
}
}
// output
if (aHTML.length > 0) {
sHTML = (sHTML + aHTML.join("\n") + "</tbody><tfoot><tr>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalVisits, 0) + "</td>" +
"<td class=\"noborder right\"> </td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalUniques, 0) + "</td>" +
"<td class=\"noborder right\"> </td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalPages, 0) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalHits, 0) + "</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(iTotalBW) + "</td>" +
"</tr></tfoot></table>")
return ([true, sHTML]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"7\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Browser(sPage) {
var oBrowser = aStatistics["browser"][aParts.length + 1];
// get values
iTotalHits = oBrowser.iTotalHits;
aData = oBrowser.aData;
aFamily = oBrowser.aFamily;
// create table body
aHTML = new Array();
switch (sPage) {
case "all":
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Browser") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create output
for (var iRow in aData) {
iPercent = ((aData[iRow].iHits / iTotalHits) * 100);
aHTML.push("<tr>" +
"<td class=\"browserlogo\"><img src=\"themes/" + sThemeDir + "/browsers/" + aData[iRow].sFamily.replace(" ", "").replace("-", "").replace("\\", "").toLowerCase() + ".gif\" alt=\"" + aData[iRow].sFamily + "\" /></td>" +
"<td>" + aData[iRow].sBrowser + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + iPercent.toFixed(1) + "%</td>" +
"</tr>\n");
}
break;
case "family":
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Browser Family") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create output
for (var iRow in aFamily) {
if (aFamily[iRow].iHits > 0) {
iPercent = ((aFamily[iRow].iHits / iTotalHits) * 100);
aHTML.push("<tr>" +
"<td class=\"browserlogo\"><img src=\"themes/" + sThemeDir + "/browsers/" + aFamily[iRow].sBrowser.replace(" ", "").replace("-", "").replace("\\", "").toLowerCase() + ".gif\" alt=\"" + aFamily[iRow].sBrowser + "\"/></td>" +
"<td>" + gc_aBrowserFamilyCaption[aFamily[iRow].sBrowser] + " <span class=\"fauxlink tiny\" onclick=\"DrawPage('browser." +
aFamily[iRow].sBrowser + "');\">»</span>" + "</td>" +
"<td class=\"right\">" + NumberFormat(aFamily[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + iPercent.toFixed(1) + "%</td>" +
"</tr>\n");
}
}
break;
default:
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Browser") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\" width=\"1\">% " + Lang("within Family") + "</th>" +
"<th class=\"noborder\" width=\"1\">% " + Lang("Overall") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// find family totals
for (var iRow in aFamily) {
if (aFamily[iRow].sBrowser == sPage) {
iFamilyTotalHits = aFamily[iRow].iHits;
break;
}
}
// create output
for (var iRow in aData) {
if (aData[iRow].sFamily == sPage) {
iTotalPercent = ((aData[iRow].iHits / iTotalHits) * 100);
iFamilyPercent = ((aData[iRow].iHits / iFamilyTotalHits) * 100);
aHTML.push("<tr>" +
"<td class=\"browserlogo\"><img src=\"themes/" + sThemeDir + "/browsers/" + aData[iRow].sFamily.replace(" ", "").replace("-", "").replace("\\", "").toLowerCase() + ".gif\" alt=\"" + aData[iRow].sFamily + "\"/></td>" +
"<td>" + aData[iRow].sBrowser + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + iFamilyPercent.toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + iTotalPercent.toFixed(1) + "%</td>" +
"</tr>\n");
}
}
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"4\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Country(sContinent) {
var oCountry = aStatistics["country"][aParts.length + 1];
// get values
if (typeof sContinent == "undefined") {
iTotalPages = oCountry.iTotalPages;
iTotalHits = oCountry.iTotalHits;
iTotalBW = oCountry.iTotalBW;
} else {
iTotalPages = oCountry.oContinent[sContinent].iTotalPages;
iTotalHits = oCountry.oContinent[sContinent].iTotalHits;
iTotalBW = oCountry.oContinent[sContinent].iTotalBW;
}
aData = oCountry.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th> </th>" +
"<th>" + Lang("Country") + "</th>" +
"<th>" + Lang("Pages") + "</th>" +
"<th>%</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th>%</th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th class=\"noborder\">%</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
var aHTML = new Array();
for (var iRow in aData) {
if (aData[iRow].sContinent == "Other") {
aData[iRow].sCountryCode = "trans";
}
if ((typeof sContinent == "undefined") || (aData[iRow].sContinent == sContinent)) {
aHTML.push("<tr>" +
"<td class=\"countryflag\"><img src=\"themes/" + sThemeDir + "/flags/" + aData[iRow].sCountryCode + ".gif\" alt=\"" + aData[iRow].sCountryName + "\" /></td>" +
"<td>" + Lang(aData[iRow].sCountryName) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(aData[iRow].iPages, 0) + "</td>" +
"<td class=\"right\">" + (SafeDivide(aData[iRow].iPages, iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(aData[iRow].iBW) + "</td>" +
"<td class=\"noborder right\">" + ((aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"</tr>");
}
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"8\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_CountryContinent() {
var oCountry = aStatistics["country"][aParts.length + 1];
// get values
var iTotalPages = oCountry.iTotalPages;
var iTotalHits = oCountry.iTotalHits;
var iTotalBW = oCountry.iTotalBW;
var iOtherPages = iTotalPages;
var iOtherHits = iTotalHits;
var iOtherBW = iTotalBW;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Continent") + "</th>" +
"<th>" + Lang("Pages") + "</th>" +
"<th>%</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th>%</th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th class=\"noborder\">%</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var sContinent in gc_aContinents) {
oC = oCountry.oContinent[sContinent];
iOtherPages -= oC.iTotalPages;
iOtherHits -= oC.iTotalHits;
iOtherBW -= oC.iTotalBW;
aHTML.push("<tr>" +
"<td>" + Lang(sContinent) + " <span class=\"fauxlink tiny\" onclick=\"DrawPage('country." + sContinent + "');\">»</span></td>" +
"<td class=\"right\">" + NumberFormat(oC.iTotalPages, 0) + "</td>" +
"<td class=\"right\">" + ((oC.iTotalPages / iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(oC.iTotalHits, 0) + "</td>" +
"<td class=\"right\">" + ((oC.iTotalHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(oC.iTotalBW) + "</td>" +
"<td class=\"noborder right\">" + ((oC.iTotalBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
// add "other" row
aHTML.push("<tr>" +
"<td>" + Lang("Other") + " <span class=\"fauxlink tiny\" onclick=\"DrawPage('country.Other');\">»</span></td>" +
"<td class=\"right\">" + NumberFormat(iOtherPages, 0) + "</td>" +
"<td class=\"right\">" + ((iOtherPages / iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(iOtherHits, 0) + "</td>" +
"<td class=\"right\">" + ((iOtherHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(iOtherBW) + "</td>" +
"<td class=\"noborder right\">" + ((iOtherBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
// output
return (sHTML + aHTML.join("\n") + "</tbody></table>");
}
function DrawTable_City(sCountry) {
oCity = aStatistics["city"][aParts.length + 1];
// get values
// iTotalPages = oCity.iTotalPages;
iTotalHits = oCity.iTotalHits;
// iTotalBW = oCity.iTotalBW;
if (typeof sCountry != "undefined") {
// iTotalPages = oCity.oCountry[sCountry].iTotalPages;
iTotalHits = oCity.oCountry[sCountry].iTotalHits;
// iTotalBW = oCity.oContinent[sCountry].iTotalBW;
}
aData = oCity.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th> </th>" +
"<th>" + Lang("City") + "</th>" +
// "<th>" + Lang("Pages") + "</th>" +
// "<th>%</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th>%</th>" +
// "<th>" + Lang("Bandwidth") + "</th>" +
// "<th class=\"noborder\">%</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
var aHTML = new Array();
for (var iRow in aData) {
/* if (aData[iRow].sContinent == "Other") {
aData[iRow].sCountryCode = "trans";
}*/
if ((typeof sCountry == "undefined") || (aData[iRow].sCountry == sCountry)) {
aHTML.push("<tr>" +
"<td class=\"countryflag\"><img src=\"themes/" + sThemeDir + "/flags/" + aData[iRow].sCountry + ".gif\" alt=\"" + aData[iRow].sCityName + "\" /></td>" +
"<td>" + Lang(aData[iRow].sCityName) + "</td>" +
// "<td class=\"noborder right\">" + NumberFormat(aData[iRow].iPages, 0) + "</td>" +
// "<td class=\"right\">" + (SafeDivide(aData[iRow].iPages, iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
// "<td class=\"noborder right\">" + DisplayBandwidth(aData[iRow].iBW) + "</td>" +
// "<td class=\"noborder right\">" + ((aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"</tr>");
}
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"8\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Filetypes() {
oFiletypes = aStatistics["filetypes"][aParts.length + 1];
// get values
iTotalHits = oFiletypes.iTotalHits;
iTotalBW = oFiletypes.iTotalBW;
iTotalNonCompBW = oFiletypes.iTotalNonCompBW;
iTotalCompBW = oFiletypes.iTotalCompBW;
aData = oFiletypes.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Filetype") + "</th>" +
"<th>" + Lang("Description") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th> </th>" +
"<th class=\"noborder\">" + Lang("Average Size") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
aHTML.push("<tr>" +
"<td>" + oFiletypes.aData[iRow].sFiletype + "</td>" +
"<td>" + Lang(oFiletypes.aData[iRow].sDescription) + "</td>" +
"<td class=\"right\">" + NumberFormat(oFiletypes.aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((oFiletypes.aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(oFiletypes.aData[iRow].iBW) + "</td>" +
"<td class=\"right\">" + ((oFiletypes.aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(oFiletypes.aData[iRow].iBW / oFiletypes.aData[iRow].iHits) + "</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"7\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Org() {
oOrg = aStatistics["org"][aParts.length + 1];
// get values
iTotalHits = oOrg.iTotalHits;
// iTotalBW = oOrg.iTotalBW;
// iTotalNonCompBW = oOrg.iTotalNonCompBW;
// iTotalCompBW = oOrg.iTotalCompBW;
aData = oOrg.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Organization") + "</th>" +
// "<th>" + Lang("Description") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th> </th>" +
/* "<th>" + Lang("Bandwidth") + "</th>" +
"<th> </th>" +
"<th class=\"noborder\">" + Lang("Average Size") + "</th>" +*/
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
var sOrg = oOrg.aData[iRow].sOrgName;
if (!oOrg.aData[iRow].sOrgName)
sOrg = oOrg.aData[iRow].sOrgCode;
aHTML.push("<tr>" +
"<td>" + sOrg + "</td>" +
// "<td>" + Lang(oFiletypes.aData[iRow].sDescription) + "</td>" +
"<td class=\"right\">" + NumberFormat(oOrg.aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((oOrg.aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
/* "<td class=\"right\">" + DisplayBandwidth(oOrg.aData[iRow].iBW) + "</td>" +
"<td class=\"right\">" + ((oOrg.aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(oOrg.aData[iRow].iBW / oOrg.aData[iRow].iHits) + "</td>" +*/
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"7\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Visitor() {
oVisitor = aStatistics["visitor"][aParts.length + 1];
// get values
iTotalPages = oVisitor.iTotalPages;
iTotalHits = oVisitor.iTotalHits;
iTotalBW = oVisitor.iTotalBW;
// iTotalNonCompBW = oVisitor.iTotalNonCompBW;
// iTotalCompBW = oVisitor.iTotalCompBW;
aData = oVisitor.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Address") + "</th>" +
"<th>" + Lang("Pages") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th> </th>" +
"<th class=\"noborder\">" + Lang("Average Size") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
aHTML.push("<tr>" +
"<td>" + oVisitor.aData[iRow].sAddress + "</td>" +
"<td class=\"right\">" + NumberFormat(oVisitor.aData[iRow].iPages, 0) + "</td>" +
"<td class=\"right\">" + ((oVisitor.aData[iRow].iPages / iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(oVisitor.aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((oVisitor.aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(oVisitor.aData[iRow].iBW) + "</td>" +
"<td class=\"right\">" + ((oVisitor.aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(oVisitor.aData[iRow].iBW / oVisitor.aData[iRow].iHits) + "</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"7\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_OperatingSystems(sPage) {
var oOperatingSystems = aStatistics["os"][aParts.length + 1];
// get values
var iTotalHits = oOperatingSystems.iTotalHits;
var aData = oOperatingSystems.aData;
var aFamily = oOperatingSystems.aFamily;
// create table body
var aHTML = [];
switch (sPage) {
case "all":
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Operating System") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create output
for (var iRow in aData) {
var iPercent = ((aData[iRow].iHits / iTotalHits) * 100);
aHTML.push("<tr>" +
"<td class=\"oslogo\"><img src=\"themes/" + sThemeDir + "/os/" + aData[iRow].sFamily.replace(" ", "").toLowerCase() + ".gif\" alt=\"" + aData[iRow].sFamily + "\" /></td>" +
"<td>" + aData[iRow].sOperatingSystem + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + iPercent.toFixed(1) + "%</td>" +
"</tr>\n");
}
break;
case "family":
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Operating System Family") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create output
for (var iRow in aFamily) {
if (aFamily[iRow].iHits > 0) {
var iPercent = ((aFamily[iRow].iHits / iTotalHits) * 100);
aHTML.push("<tr>" +
"<td class=\"oslogo\"><img src=\"themes/" + sThemeDir + "/os/" + aFamily[iRow].sOperatingSystem.replace(" ", "").toLowerCase() + ".gif\" alt=\"" + aFamily[iRow].sOperatingSystem + "\" /></td>" +
"<td>" + gc_aOSFamilyCaption[aFamily[iRow].sOperatingSystem] + " <span class=\"fauxlink tiny\" onclick=\"DrawPage('os." +
aFamily[iRow].sOperatingSystem + "');\">»</span>" + "</td>" +
"<td class=\"right\">" + NumberFormat(aFamily[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + iPercent.toFixed(1) + "%</td>" +
"</tr>\n");
}
}
break;
default:
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Operating System") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\" width=\"1\">% " + (Lang("within Family")).replace(" ", " ") + "</th>" +
"<th class=\"noborder\" width=\"1\">% " + Lang("Overall") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// find family totals
for (var iRow in aFamily) {
if (aFamily[iRow].sOperatingSystem == sPage) {
iFamilyTotalHits = aFamily[iRow].iHits;
break;
}
}
// create output
for (var iRow in aData) {
if (aData[iRow].sFamily == sPage) {
iTotalPercent = ((aData[iRow].iHits / iTotalHits) * 100);
iFamilyPercent = ((aData[iRow].iHits / iFamilyTotalHits) * 100);
aHTML.push("<tr>" +
"<td class=\"oslogo\"><img src=\"themes/" + sThemeDir + "/os/" + aData[iRow].sFamily.replace(" ", "").toLowerCase() + ".gif\" alt=\"" + aData[iRow].sFamily + "\" /></td>" +
"<td>" + aData[iRow].sOperatingSystem + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + iFamilyPercent.toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + iTotalPercent.toFixed(1) + "%</td>" +
"</tr>\n");
}
}
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"3\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_PageRefs(sPage) {
var oPageRefs = aStatistics["pagerefs"][aParts.length + 1];
// get values
iTotalPages = oPageRefs.iTotalPages;
iTotalHits = oPageRefs.iTotalHits;
switch (sPage) {
case "domains":
aData = oPageRefs.aDataDomain;
break;
default:
aData = oPageRefs.aData;
break;
}
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Referrer") + "</th>" +
"<th>" + Lang("Pages") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
switch (sPage) {
case "all":
case "top10":
case "top50":
sReferrer = "<a href=\"" + aData[iRow].sURL + "\" target=\"_blank\">" + aData[iRow].sVisibleURL + "</a>";
break;
case "domains":
sReferrer = "<a href=\"" + aData[iRow].sURL + "\" target=\"_blank\">" + aData[iRow].sVisibleURL + "</a>";
break;
default:
sReferrer = aData[iRow].sURL;
}
aHTML.push("<tr>" +
"<td>" + sReferrer + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iPages, 0) + "</td>" +
"<td class=\"right\">" + (SafeDivide(aData[iRow].iPages, iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + ((aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
if ((sPage == "top10") && (iRow > 9)) {
break;
}
if ((sPage == "top50") && (iRow > 49)) {
break;
}
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"5\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_PageRefsSE(sPage) {
var oPageRefsSE = aStatistics["pagerefsse"][aParts.length + 1];
// get values
iTotalPages = oPageRefsSE.iTotalPages;
iTotalHits = oPageRefsSE.iTotalHits;
aData = oPageRefsSE.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"1\"> </th>" +
"<th>" + Lang("Search Engine") + "</th>" +
"<th>" + Lang("Pages") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
aHTML.push("<tr>" +
"<td class=\"searchenginelogo\">" + aData[iRow].sImage + "</td>" +
"<td><!-- " + aData[iRow].sReferrer + " -->" + aData[iRow].sURL + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iPages, 0) + "</td>" +
"<td class=\"right\">" + (SafeDivide(aData[iRow].iPages, iTotalPages) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iHits, 0) + "</td>" +
"<td class=\"noborder right\">" + ((aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"6\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Pages(aData) {
var oPages = aStatistics["pages"][aParts.length + 1];
// get values
var iTotalPages = oPages.iTotalPages;
var iTotalBW = oPages.iTotalBW;
var iTotalEntry = oPages.iTotalEntry;
var iTotalExit = oPages.iTotalExit;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("URL") + "</th>" +
"<th>" + Lang("Pages") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Entry") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Exit") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
var aHTML = [];
for (var iRow in aData) {
sName = "";
if (oPages.bHaveTitles)
sName = "<td title=\"" + aData[iRow].sURL + "\">" + aData[iRow].sTitle + "</td>";
else
sName = "<td>" + aData[iRow].sURL + "</td>";
aHTML.push("<tr>" +
sName +
"<td class=\"right\">" + NumberFormat(aData[iRow].iPages, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iPages, iTotalPages) * 100, 1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(aData[iRow].iBW) + "</td>" +
"<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iBW, iTotalBW) * 100, 1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iEntry, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iEntry, iTotalEntry) * 100, 1) + "%</td>" +
"<td class=\"right\">" + NumberFormat(aData[iRow].iExit, 0) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(SafeDivide(aData[iRow].iExit, iTotalExit) * 100, 1) + "%</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"9\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Robots() {
var oRobots = aStatistics["robots"][aParts.length + 1];
// get values
iTotalHits = oRobots.iTotalHits;
iTotalBW = oRobots.iTotalBW;
iTotalRobotsTXT = oRobots.iTotalRobotsTXT;
aData = oRobots.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Spider") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Last Visit") + "</th>" +
"<th>Robots.txt</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
sDate = oRobots.aData[iRow].dtLastVisit.toString();
dtDate = new Date(sDate.substr(0, 4),
(parseInt(StripLeadingZeroes(sDate.substr(4, 2))) - 1),
sDate.substr(6, 2),
sDate.substr(8, 2),
sDate.substr(10, 2),
sDate.substr(12, 2));
aHTML.push("<tr>" +
"<td>" + oRobots.aData[iRow].sRobot + "</td>" +
"<td class=\"right\">" + NumberFormat(oRobots.aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((oRobots.aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(oRobots.aData[iRow].iBW) + "</td>" +
"<td class=\"right\">" + ((oRobots.aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\"><span class=\"hidden\">" + sDate + "</span>" + dtDate.getDate() + " " + Lang(gc_aMonthName[dtDate.getMonth()].substr(0, 3)) + " '" + dtDate.getFullYear().toString().substr(2) + " " + AddLeadingZero(dtDate.getHours(), 2) + ":" + AddLeadingZero(dtDate.getMinutes(), 2) + "</td>" +
"<td class=\"right\">" + NumberFormat(oRobots.aData[iRow].iRobotsTXT, 0) + "</td>" +
"<td class=\"noborder right\">" + (SafeDivide(oRobots.aData[iRow].iRobotsTXT, iTotalRobotsTXT) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"8\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Session() {
var oSession = aStatistics["session"][aParts.length + 1];
// get values
var iTotalFreq = oSession.iTotalFreq;
var aData = oSession.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Session Length") + "</th>" +
"<th>" + Lang("Frequency") + "</th>" +
"<th class=\"noborder\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
aHTML.push("<tr>" +
"<td><!-- 7 -->" + Lang("0 seconds - 30 seconds") + "</td>" +
"<td>" + NumberFormat(aData.s0s30s, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s0s30s, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
aHTML.push("<tr>" +
"<td><!-- 6 -->" + Lang("30 seconds - 2 minutes") + "</td>" +
"<td>" + NumberFormat(aData.s30s2mn, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s30s2mn, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
aHTML.push("<tr>" +
"<td><!-- 5 -->" + Lang("2 minutes - 5 minutes") + "</td>" +
"<td>" + NumberFormat(aData.s2mn5mn, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s2mn5mn, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
aHTML.push("<tr>" +
"<td><!-- 4 -->" + Lang("5 minutes - 15 minutes") + "</td>" +
"<td>" + NumberFormat(aData.s5mn15mn, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s5mn15mn, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
aHTML.push("<tr>" +
"<td><!-- 3 -->" + Lang("15 minutes - 30 minutes") + "</td>" +
"<td>" + NumberFormat(aData.s15mn30mn, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s15mn30mn, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
aHTML.push("<tr>" +
"<td><!-- 2 -->" + Lang("30 minutes - 1 hour") + "</td>" +
"<td>" + NumberFormat(aData.s30mn1h, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s30mn1h, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
aHTML.push("<tr>" +
"<td><!-- 1 -->" + Lang("More than 1 hour") + "</td>" +
"<td>" + NumberFormat(aData.s1h, 0) + "</td>" +
"<td>" + NumberFormat(SafeDivide(aData.s1h, iTotalFreq) * 100, 1) + "%</td>" +
"</tr>\n");
// output
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
}
function DrawTable_Status() {
var oStatus = aStatistics["status"][aParts.length + 1];
// get values
iTotalHits = oStatus.iTotalHits;
iTotalBW = oStatus.iTotalBW;
aData = oStatus.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Code") + "</th>" +
"<th>" + Lang("Description") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th> </th>" +
"<th>" + Lang("Bandwidth") + "</th>" +
"<th> </th>" +
"<th class=\"noborder\">" + Lang("Average Size") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
aHTML.push("<tr>" +
"<td>" + oStatus.aData[iRow].sCode + "</td>" +
"<td>" + Lang(oStatus.aData[iRow].sDescription) + "</td>" +
"<td class=\"right\">" + NumberFormat(oStatus.aData[iRow].iHits, 0) + "</td>" +
"<td class=\"right\">" + ((oStatus.aData[iRow].iHits / iTotalHits) * 100).toFixed(1) + "%</td>" +
"<td class=\"right\">" + DisplayBandwidth(oStatus.aData[iRow].iBW) + "</td>" +
"<td class=\"right\">" + ((oStatus.aData[iRow].iBW / iTotalBW) * 100).toFixed(1) + "%</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(oStatus.aData[iRow].iBW / oStatus.aData[iRow].iHits) + "</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"7\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Status404() {
var oStatus404 = aStatistics["status404"][aParts.length + 1];
// get values
iTotalHits = oStatus404.iTotalHits;
aData = oStatus404.aData;
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("URL") + "</th>" +
"<th>" + Lang("Hits") + "</th>" +
"<th>" + Lang("Referrer") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
var sReferrer = "";
for (var iRow in aData) {
if (oStatus404.aData[iRow].sReferrer == "-") {
sReferrer = " ";
} else {
sReferrer = ("<a href=\"" + oStatus404.aData[iRow].sReferrer + "\" target=\"_blank\">" + oStatus404.aData[iRow].sReferrerVisible + "</a>");
}
aHTML.push("<tr>" +
"<td>" + oStatus404.aData[iRow].sURL + "</td>" +
"<td class=\"right\">" + NumberFormat(oStatus404.aData[iRow].iHits, 0) + "</td>" +
"<td>" + sReferrer + "</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
return ([true, (sHTML + aHTML.join("\n") + "</tbody></table>")]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"3\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_ThisMonth() {
var oThisMonth = aStatistics["thismonth"];
var iTotalVisits = 0;
var iTotalPages = 0;
var iTotalHits = 0;
var iTotalPages = 0;
var iTotalBW = 0;
var aData = null;
for (iIndex in aParts)
if (aParts[iIndex].active) {
// get values
iTotalVisits += oThisMonth[iIndex].iTotalVisits;
iTotalPages += oThisMonth[iIndex].iTotalPages;
iTotalHits += oThisMonth[iIndex].iTotalHits;
iTotalBW += oThisMonth[iIndex].iTotalBW;
if (aData == null)
aData = oThisMonth[iIndex].aData;
}
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th width=\"15%\">" + Lang("Day") + "</th>" +
"<th width=\"14%\">" + Lang("Date") + "</th>" +
"<th width=\"9%\">" + Lang("Visits") + "</th>" +
"<th width=\"9%\" class=\"noborder\">" + Lang("Pages") + "</th>" +
"<th width=\"11%\">" + Lang("per Visit") + "</th>" +
"<th width=\"9%\" class=\"noborder\">" + Lang("Hits") + "</th>" +
"<th width=\"11%\">" + Lang("per Visit") + "</th>" +
"<th width=\"9%\" class=\"noborder\">" + Lang("BW") + "</th>" +
"<th width=\"11%\" class=\"noborder\">" + Lang("per Visit") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
for (var iRow in aData) {
oRow = aData[iRow];
sVisibleDate = (oRow.dtDate.getDate() + " " +
Lang(gc_aMonthName[oRow.dtDate.getMonth()].substr(0, 3)) + " '" +
oRow.dtDate.getFullYear().toString().substr(2));
if (oRow.dtDate.getDay() == 5) {
sRowStyle = " class=\"friday\"";
} else if (oRow.dtDate.getDay() == 6) {
sRowStyle = " class=\"saturday\"";
} else {
sRowStyle = "";
}
var iVisits = SumParts(oThisMonth, "iVisits", iRow);
var iPages = SumParts(oThisMonth, "iPages", iRow);
var iHits = SumParts(oThisMonth, "iHits", iRow);
var iBW = SumParts(oThisMonth, "iBW", iRow);
aHTML.push("<tr" + sRowStyle + ">" +
"<td><span class=\"hidden\">" + oRow.dtDate.getDay() + "</span>" + Lang(gc_aDayName[oRow.dtDate.getDay()]) + "</td>" +
"<td><span class=\"hidden\">" + oRow.dtDate.valueOf() + "</span>" + sVisibleDate + "</td>" +
"<td class=\"right\">" + NumberFormat(iVisits, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(iPages, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat((SafeDivide(iPages, iVisits)), 1) + "</td>" +
"<td class=\"right\">" + NumberFormat(iHits, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(SafeDivide(iHits, iVisits), 1) + "</td>" +
"<td class=\"right\">" + DisplayBandwidth(iBW) + "</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(SafeDivide(iBW, iVisits)) + "</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
sHTML = (sHTML + aHTML.join("\n") + "</tbody><tfoot><tr>" +
"<td colspan=\"3\" class=\"noborder right\">" + NumberFormat(iTotalVisits, 0) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalPages, 0) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(SafeDivide(iTotalPages, iTotalVisits), 1) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalHits) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(SafeDivide(iTotalHits, iTotalVisits), 2) + "</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(iTotalBW) + "</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(SafeDivide(iTotalBW, iTotalVisits)) + "</td>" +
"</tr></tfoot></table>")
return ([true, sHTML]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"10\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
}
function DrawTable_Time() {
// get values
var oTime = aStatistics["time"];
var iTotalPages = 0;
var iTotalHits = 0;
var iTotalBW = 0;
var iTotalNVPages = 0;
var iTotalNVHits = 0;
var iTotalNVBW = 0;
for (iIndex in aParts)
if ((aParts[iIndex].active) && (oTime[iIndex] != null)) {
iTotalPages += oTime[iIndex].iTotalPages;
iTotalHits += oTime[iIndex].iTotalHits;
iTotalBW += oTime[iIndex].iTotalBW;
iTotalNVPages += oTime[iIndex].iTotalNVPages;
iTotalNVHits += oTime[iIndex].iTotalNVHits;
iTotalNVBW += oTime[iIndex].iTotalNVBW;
}
// create header
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th>" + Lang("Hour") + "</th>" +
"<th class=\"noborder\">" + Lang("Pages") + "</th>" +
"<th class=\"noborder right\">%</th>" +
"<th class=\"right\">+/-</th>" +
"<th class=\"noborder\">" + Lang("Hits") + "</th>" +
"<th class=\"noborder right\">%</th>" +
"<th class=\"right\">+/-</th>" +
"<th class=\"noborder\">" + Lang("BW") + "</th>" +
"<th class=\"noborder right\">%</th>" +
"<th class=\"right\">+/-</th>" +
"<th width=\"1\"><small>" + (Lang("Not Viewed")).replace(" ", " ") + "</small><br />" + Lang("Pages") + "</th>" +
"<th width=\"1\"><small>" + (Lang("Not Viewed")).replace(" ", " ") + "</small><br />" + Lang("Hits") + "</th>" +
"<th class=\"noborder\" width=\"1\"><small>" + (Lang("Not Viewed")).replace(" ", " ") + "</small><br />" + Lang("BW") + "</th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
var aHTML = [];
var iAvgPages = (iTotalPages / 24);
var iAvgHits = (iTotalHits / 24);
var iAvgBW = (iTotalBW / 24);
for (var iRow in oTime[0].aData) {
var oRow = oTime[0].aData[iRow];
var sHour = oRow.iHour;
if (oRow.iHour < 10) {
sHour = ("0" + sHour)
}
var iPages = SumParts(oTime, "iPages", iRow);
var iNVPages = SumParts(oTime, "iNVPages", iRow);
var iHits = SumParts(oTime, "iHits", iRow);
var iNVHits = SumParts(oTime, "iNVHits", iRow);
var iBW = SumParts(oTime, "iBW", iRow);
var iNVBW = SumParts(oTime, "iNVBW", iRow);
// +/- values
var sPagesDiff = Difference(iPages, iAvgPages);
var sHitsDiff = Difference(iHits, iAvgHits);
var sBWDiff = Difference(iBW, iAvgBW);
// create table
aHTML.push("<tr>" +
"<td>" + sHour + "</td>" +
"<td class=\"right\">" + NumberFormat(iPages, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat((SafeDivide(iPages, iTotalPages) * 100), 1) + "%</td>" +
"<td class=\"right\">" + sPagesDiff + "</td>" +
"<td class=\"right\">" + NumberFormat(iHits, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat((SafeDivide(iHits, iTotalHits) * 100), 1) + "%</td>" +
"<td class=\"right\">" + sHitsDiff + "</td>" +
"<td class=\"right\">" + DisplayBandwidth(iBW) + "</td>" +
"<td class=\"right\">" + NumberFormat((SafeDivide(iBW, iTotalBW) * 100), 1) + "%</td>" +
"<td class=\"right\">" + sBWDiff + "</td>" +
"<td class=\"right\">" + NumberFormat(iNVPages, 0) + "</td>" +
"<td class=\"right\">" + NumberFormat(iNVHits, 0) + "</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(iNVBW) + "</td>" +
"</tr>\n");
}
// output
if (aHTML.length > 0) {
sHTML = (sHTML + aHTML.join("\n") + "</tbody><tfoot><tr>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalPages, 0) + "</td>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalHits, 0) + "</td>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(iTotalBW) + "</td>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder\"> </td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalNVPages, 0) + "</td>" +
"<td class=\"noborder right\">" + NumberFormat(iTotalNVHits, 0) + "</td>" +
"<td class=\"noborder right\">" + DisplayBandwidth(iTotalNVBW) + "</td>" +
"</tr></tfoot></table>")
return ([true, sHTML]);
} else {
return ([false, (sHTML + "<tr><td class=\"center\" colspan=\"4\">" + Lang("There is no data to display") + "</td></tr></tbody></table>")]);
}
function Difference(iValue, iAverage) {
if (iValue == iAverage) {
return "-";
} else {
if (iValue > iAverage) {
return ("<span class=\"tiny positive\">+" + NumberFormat((SafeDivide((iValue - iAverage), iAverage) * 100), 1) + "%</span>");
} else {
return ("<span class=\"tiny negative\">-" + NumberFormat((SafeDivide((iAverage - iValue), iAverage) * 100), 1) + "%</span>");
}
}
}
}
function Lang(sPhrase) {
return (oTranslation[sPhrase] || sPhrase);
}
function Misc_ThisMonthCalendar(sHeadline, sSubMenu, sDataItem) {
var oThisMonth = aStatistics["thismonth"];
// create sum arrays
var aWeek = [];
var aDay = [];
for (var iPart in oThisMonth) {
if (aParts[iPart].active) {
aDay[iPart] = [];
for (var iIndex = 0; iIndex < 7; iIndex++) {
aDay[iPart][iIndex] = {iCount: 0, iTotal: 0};
}
}
}
var iTotal = 0;
// calculate dates
var iFirstWeek = getWeekNr(oThisMonth[0].aData[0].dtDate);
var dtLastDayOfMonth = new Date(oThisMonth[0].aData[0].dtDate.getFullYear(),
(oThisMonth[0].aData[0].dtDate.getMonth() + 1),
0);
var iLastWeek = getWeekNr(dtLastDayOfMonth);
// create table
var sHTML = "<table class=\"calendar\"><tbody>" +
"<tr>" +
"<td class=\"labelTop\"> </td>" +
"<td class=\"labelTop\">" + Lang("Sunday") + "</td>" +
"<td class=\"labelTop\">" + Lang("Monday") + "</td>" +
"<td class=\"labelTop\">" + Lang("Tuesday") + "</td>" +
"<td class=\"labelTop\">" + Lang("Wednesday") + "</td>" +
"<td class=\"labelTop\">" + Lang("Thursday") + "</td>" +
"<td class=\"labelTop\">" + Lang("Friday") + "</td>" +
"<td class=\"labelTop\">" + Lang("Saturday") + "</td>" +
"<td class=\"labelTopSpacer\"> </td>" +
"<td class=\"labelTop\">" + Lang("Week Total") + "</td>" +
"<td class=\"labelTop\">" + Lang("Daily Average") + "</td>" +
"</tr>";
for (var iIndex = iFirstWeek; iIndex <= iLastWeek; iIndex++) {
aWeek[iIndex] = {iCount: 0, iTotal: 0};
sHTML += "<tr>" +
"<td id=\"calWeek" + iIndex + "\" class=\"labelSide\">" + Lang("Week") + ": " + iIndex + "</td>" +
"<td id=\"calDay0-" + iIndex + "\"> </td>" +
"<td id=\"calDay1-" + iIndex + "\"> </td>" +
"<td id=\"calDay2-" + iIndex + "\"> </td>" +
"<td id=\"calDay3-" + iIndex + "\"> </td>" +
"<td id=\"calDay4-" + iIndex + "\"> </td>" +
"<td id=\"calDay5-" + iIndex + "\"> </td>" +
"<td id=\"calDay6-" + iIndex + "\"> </td>" +
"<td> </td>" +
"<td id=\"calTotWk" + iIndex + "\" class=\"calTotWk\"> </td>" +
"<td id=\"calAvgWk" + iIndex + "\" class=\"calAvgWk\"> </td>" +
"</tr>";
}
sHTML += "<tr>" +
"<td> </td>" +
"<td colspan=\"7\" class=\"calGraph\"><div id=\"graph\"> </div></td>" +
"<td colspan=\"3\"> </td>" +
"</tr><tr>" +
"<td class=\"labelSide\">" + Lang("Day of Week Total") + "</td>" +
"<td id=\"calTotDay0\" class=\"calTotDay\"> </td>" +
"<td id=\"calTotDay1\" class=\"calTotDay\"> </td>" +
"<td id=\"calTotDay2\" class=\"calTotDay\"> </td>" +
"<td id=\"calTotDay3\" class=\"calTotDay\"> </td>" +
"<td id=\"calTotDay4\" class=\"calTotDay\"> </td>" +
"<td id=\"calTotDay5\" class=\"calTotDay\"> </td>" +
"<td id=\"calTotDay6\" class=\"calTotDay\"> </td>" +
"<td> </td>" +
"<td colspan=\"2\" id=\"calTotMonth\" class=\"calTotDay\"> </td>" +
"</tr><tr>" +
"<td class=\"labelSide\">" + Lang("Day of Week Average") + "</td>" +
"<td id=\"calAvgDay0\" class=\"calAvgDay\"> </td>" +
"<td id=\"calAvgDay1\" class=\"calAvgDay\"> </td>" +
"<td id=\"calAvgDay2\" class=\"calAvgDay\"> </td>" +
"<td id=\"calAvgDay3\" class=\"calAvgDay\"> </td>" +
"<td id=\"calAvgDay4\" class=\"calAvgDay\"> </td>" +
"<td id=\"calAvgDay5\" class=\"calAvgDay\"> </td>" +
"<td id=\"calAvgDay6\" class=\"calAvgDay\"> </td>" +
"<td> </td>" +
"<td colspan=\"2\" id=\"calAvgMonth\" class=\"calAvgDay\"> </td>" +
"</tr>";
sHTML += "</tbody></table>";
// apply content
$("#content").html("<h2>" + Lang(sHeadline) + "</h2>" +
DrawSubMenu("thismonth", sSubMenu) +
"<div class=\"tableFull\">" + sHTML + "</div>");
// populate daily values
for (var iRow in oThisMonth[0].aData) {
iTotal = 0;
for (iPart in oThisMonth) {
if (aParts[iPart].active) {
var oRow = oThisMonth[iPart].aData[iRow];
var iWeekNumber = getWeekNr(oRow.dtDate);
var iDayNumber = oRow.dtDate.getDay();
// increment counters
aWeek[iWeekNumber].iCount++;
//var iSumParts = SumParts(oThisMonth, sDataItem, iRow);
aWeek[iWeekNumber].iTotal += oRow[sDataItem];
aDay[iPart][iDayNumber].iCount++;
aDay[iPart][iDayNumber].iTotal += oRow[sDataItem];
// aDay[iDayNumber].iTotal += iSumParts;
iTotal += oRow[sDataItem];
}
}
// modify table
if (sDataItem == "iBW") {
sHTML = ("<div class=\"date\">" + oRow.dtDate.getDate() + "</div><div class=\"value\">" + DisplayBandwidth(iTotal) + "</div>");
} else {
sHTML = ("<div class=\"date\">" + oRow.dtDate.getDate() + "</div><div class=\"value\">" + NumberFormat(iTotal, 0) + "</div>");
}
$("#calDay" + iDayNumber + "-" + iWeekNumber).html(sHTML).addClass("calDayPopulated");
}
// populate week totals
for (var iIndex = iFirstWeek; iIndex <= iLastWeek; iIndex++) {
if (aWeek[iIndex].iCount > 0) {
if (sDataItem == "iBW") {
$("#calTotWk" + iIndex).html("<div>" + DisplayBandwidth(aWeek[iIndex].iTotal) + "</div>");
$("#calAvgWk" + iIndex).html("<div>" + DisplayBandwidth(aWeek[iIndex].iTotal / aWeek[iIndex].iCount) + "</div>");
} else {
$("#calTotWk" + iIndex).html("<div>" + NumberFormat(aWeek[iIndex].iTotal, 0) + "</div>");
$("#calAvgWk" + iIndex).html("<div>" + NumberFormat((aWeek[iIndex].iTotal / aWeek[iIndex].iCount), 1) + "</div>");
}
}
}
var iMonthTotal = 0;
var iMonthCount = 0;
// populate day totals
for (var iIndex = 0; iIndex < 7; iIndex++) {
var iCount = 0;
var iTotal = 0;
for (iPart in oThisMonth) {
if (aParts[iPart].active) {
iCount += aDay[iPart][iIndex].iCount;
iTotal += aDay[iPart][iIndex].iTotal;
}
}
if (iCount > 0) {
if (sDataItem == "iBW") {
$("#calTotDay" + iIndex).html("<div>" + DisplayBandwidth(iTotal) + "</div>");
$("#calAvgDay" + iIndex).html("<div>" + DisplayBandwidth(iTotal / iCount) + "</div>");
} else {
$("#calTotDay" + iIndex).html("<div>" + NumberFormat(iTotal, 0) + "</div>");
$("#calAvgDay" + iIndex).html("<div>" + NumberFormat((iTotal / iCount), 1) + "</div>");
}
}
iMonthCount += iCount;
iMonthTotal += iTotal;
}
// fill in any remaining empty days
var dtThisDate = new Date(oRow.dtDate.getFullYear(), oRow.dtDate.getMonth(), (oRow.dtDate.getDate() + 1));
while (dtThisDate.getMonth() == dtLastDayOfMonth.getMonth()) {
$("#calDay" + dtThisDate.getDay() + "-" + getWeekNr(dtThisDate)).html("<div class=\"date\">" + dtThisDate.getDate() + "</div>").addClass("calDay");
dtThisDate.setDate(dtThisDate.getDate() + 1);
}
// populate month totals
if (sDataItem == "iBW") {
$("#calTotMonth").html("<div><span>" + Lang("Total") + ":</span> " + DisplayBandwidth(iMonthTotal) + "</div>");
$("#calAvgMonth").html("<div><span>" + Lang("Average") + ":</span> " + DisplayBandwidth(iMonthTotal / /*oRow.dtDate.getDate()*/ iMonthCount) + "</div>");
} else {
$("#calTotMonth").html("<div><span>" + Lang("Total") + ":</span> " + NumberFormat(iMonthTotal, 0) + "</div>");
$("#calAvgMonth").html("<div><span>" + Lang("Average") + ":</span> " + NumberFormat((iMonthTotal / iMonthCount /*oRow.dtDate.getDate()*/), 1) + "</div>");
}
// draw graph
var aGraphItem = [Lang("Sunday"), Lang("Monday"), Lang("Tuesday"), Lang("Wednesday"), Lang("Thursday"), Lang("Friday"), Lang("Saturday")];
var aGraphValue = [];
for (iPart in oThisMonth)
if (aParts[iPart].active)
aGraphValue[iPart] = [SafeDivide(aDay[iPart][0].iTotal, aDay[iPart][0].iCount),
SafeDivide(aDay[iPart][1].iTotal, aDay[iPart][1].iCount),
SafeDivide(aDay[iPart][2].iTotal, aDay[iPart][2].iCount),
SafeDivide(aDay[iPart][3].iTotal, aDay[iPart][3].iCount),
SafeDivide(aDay[iPart][4].iTotal, aDay[iPart][4].iCount),
SafeDivide(aDay[iPart][5].iTotal, aDay[iPart][5].iCount),
SafeDivide(aDay[iPart][6].iTotal, aDay[iPart][6].iCount)];
if (sDataItem == "iBW")
for (iPart in aGraphValue)
for (iIndex in aGraphValue[iPart])
aGraphValue[iPart][iIndex] = SafeDivide(aGraphValue[iPart][iIndex], 1024 * 1024);
$("#content").fadeIn(g_iFadeSpeed);
DrawBar(["", "", "", "", "", "", ""], aGraphValue, aGraphItem);
}
function PageLayout_AllMonths(sPage) {
var aTable = DrawTable_AllMonths(sPage);
switch (sPage) {
case "all":
var sHTML = "<h2>" + Lang("Visitors each Month") + "</h2>" +
DrawSubMenu("allmonths", "Visitors each Month") +
"<div id=\"graph\" class=\"graph\"> </div>";
break;
case "year":
var sHTML = "<h2>" + Lang("Visitors each Year") + "</h2>" +
DrawSubMenu("allmonths", "Visitors each Year") +
"<div id=\"graph\" class=\"graph\"> </div>";
break;
}
sHTML += "<div class=\"tableFull\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}, 2: {sorter: "commaNumber"}, 3: {sorter: "commaNumber"}, 5: {sorter: "commaNumber"}, 6: {sorter: "commaNumber"}, 7: {sorter: 'bandwidth'}}, sortList: [[0, 0]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
if (sPage == "all") {
DrawGraph_AllMonths();
// observe tablesorter
$(".tablesorter th").click(function() {
switch (this.innerHTML) {
case "Hits":
DrawGraph_AllMonths("iHits");
break;
case "BW":
DrawGraph_AllMonths("iBW");
break;
case "Pages":
DrawGraph_AllMonths("iPages");
break;
case "Unique Visitors":
DrawGraph_AllMonths("iUniques");
break;
case "Visitors per Day":
DrawGraph_AllMonths("iDaysInMonth");
break;
default:
DrawGraph_AllMonths("iVisits");
}
});
} else {
DrawGraph_EachYear();
// observe tablesorter
$(".tablesorter th").click(function() {
switch (this.innerHTML) {
case "Hits":
DrawGraph_EachYear("iHits");
break;
case "BW":
DrawGraph_EachYear("iBW");
break;
case "Pages":
DrawGraph_EachYear("iPages");
break;
case "Unique Visitors":
DrawGraph_EachYear("iUniques");
break;
case "Visitors per Day":
DrawGraph_EachYear("iDaysInMonth");
break;
default:
DrawGraph_EachYear("iVisits");
}
});
}
}
function PageLayout_Browser(sPage) {
var aTable = DrawTable_Browser(sPage);
switch (sPage) {
case "family":
var sHTML = "<h2>" + Lang("Browser Families") + "</h2>" +
DrawSubMenu("browser", "Browser Families") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
case "all":
var sHTML = "<h2>" + Lang("All Browsers") + "</h2>" +
DrawSubMenu("browser", "All Browsers") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
default:
var sHTML = "<h2>" + Lang("Browser Family") + ": " + gc_aBrowserFamilyCaption[sPage] + "</h2>" +
DrawSubMenu("browser", "") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
}
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Browser(sPage);
}
function PageLayout_Country(sPage) {
switch (sPage) {
case "all":
var aTable = DrawTable_Country();
var sHTML = "<h2>" + Lang("Visitors by Country") + "</h2>" +
DrawSubMenu("country", "Countries") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" +
aTable[1] +
"</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: "commaNumber"}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}, 7: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Country();
break;
case "continent":
var sHTML = "<h2>" + Lang("Visitors by Continent") + "</h2>" +
DrawSubMenu("country", "Continents") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" +
DrawTable_CountryContinent() +
"</div>";
$("#content").html(sHTML);
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}, 2: {sorter: false}, 3: {sorter: "commaNumber"}, 4: {sorter: false}, 5: {sorter: 'bandwidth'}, 6: {sorter: false}}, sortList: [[1, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
$("#content").fadeIn(g_iFadeSpeed);
DrawPie_CountryContinent();
break;
default:
if (sPage == "Other") {
var sHTML = "<h2>" + Lang("Other Visitors") + "</h2>";
} else {
var sHTML = "<h2>" + Lang("Visitors from " + sPage) + "</h2>";
}
var aTable = DrawTable_Country(sPage);
sHTML += DrawSubMenu("country", sPage) +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" +
aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: "commaNumber"}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}, 7: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
if (aTable[0] == true) {
DrawPie_Country(sPage);
}
break;
}
}
function GenSubMenu_City() {
oCity = aStatistics["city"][aParts.length + 1];
oSubMenu.city = {"Cities": "city.all"};
for (var sCountryCode in oCity.oCountry) {
if (sCountryCode != "unknown") {
sCountryName = gc_aCountryName[sCountryCode];
oSubMenu.city[sCountryName] = "city." + sCountryCode;
}
}
}
function PageLayout_City(sPage) {
GenSubMenu_City();
switch (sPage) {
case "all":
var aTable = DrawTable_City();
var sHTML = "<h2>" + Lang("Visitors by City") + "</h2>" +
DrawSubMenu("city", "Cities") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" +
aTable[1] +
"</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: "commaNumber"}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}, 7: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_City();
break;
default:
if (sPage == "Other") {
var sHTML = "<h2>" + Lang("Other Visitors") + "</h2>";
} else {
var sHTML = "<h2>" + Lang("Visitors from " + gc_aCountryName[sPage]) + "</h2>";
}
var aTable = DrawTable_City(sPage);
sHTML += DrawSubMenu("city", gc_aCountryName[sPage]) +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" +
aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: "commaNumber"}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}, 7: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_City(sPage);
break;
}
}
function PageLayout_Org() {
var aTable = DrawTable_Org();
var sHTML = "<h2>" + Lang("Organizations") + "</h2><div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: 'bandwidth'}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Org();
}
function PageLayout_Visitor() {
var aTable = DrawTable_Visitor();
var sHTML = "<h2>" + Lang("Visitors") + "</h2>" + DrawSubMenu("visitor", "Top 100") + "<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: 'bandwidth'}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Visitor();
}
function PageLayout_Filetypes() {
var aTable = DrawTable_Filetypes();
var sHTML = "<h2>" + Lang("Filetypes") + "</h2><div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: 'bandwidth'}, 5: {sorter: false}, 6: {sorter: 'bandwidth'}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Filetypes();
}
function PageLayout_OperatingSystems(sPage) {
var aTable = DrawTable_OperatingSystems(sPage);
switch (sPage) {
case "family":
var sHTML = "<h2>" + Lang("Operating System Families") + "</h2>" +
DrawSubMenu("os", "Operating System Families") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
case "all":
var sHTML = "<h2>" + Lang("Operating Systems") + "</h2>" +
DrawSubMenu("os", "All Operating Systems") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
default:
var sHTML = "<h2>" + Lang("Operating System Family") + ": " + gc_aOSFamilyCaption[sPage] + "</h2>" +
DrawSubMenu("os", "") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
}
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_OperatingSystems(sPage);
}
function PageLayout_PageRefs(sPage) {
switch (sPage) {
case "all":
var aTable = DrawTable_PageRefs("all");
var sHTML = "<h2>" + Lang("Referring Pages") + "</h2>" +
DrawSubMenu("pagerefs", "All Referrers") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
case "domains":
var aTable = DrawTable_PageRefs("domains");
var sHTML = "<h2>" + Lang("Referring Domains") + "</h2>" +
DrawSubMenu("pagerefs", "Referring Domains") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
case "top10":
var aTable = DrawTable_PageRefs("top10");
var sHTML = "<h2>" + Lang("Referring Pages") + "</h2>" +
DrawSubMenu("pagerefs", "Top 10 Referrers") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
case "top50":
var aTable = DrawTable_PageRefs("top50");
var sHTML = "<h2>" + Lang("Referring Pages") + "</h2>" +
DrawSubMenu("pagerefs", "Top 50 Referrers") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
break;
}
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}, 2: {sorter: false}, 3: {sorter: "commaNumber"}, 4: {sorter: false}}, sortList: [[1, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_PageRefs(sPage);
}
function PageLayout_PageRefsSE() {
var aTable = DrawTable_PageRefsSE();
var sHTML = "<h2>" + Lang("Referring Search Engines") + "</h2>" +
DrawSubMenu("pagerefs", "Search Engines") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {0: {sorter: false}, 2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: "commaNumber"}, 5: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_PageRefsSE();
}
function PageLayout_Pages(sPage) {
var oPages = aStatistics["pages"][aParts.length + 1];
// select data
switch (sPage) {
case "topBW":
var aData = oPages.aDataBW;
var aSort = [3, 1];
var sSubMenu = "Top Bandwidth";
var iPieTotal = oPages.iTotalBW;
var sPieItem = "iBW";
break;
case "topEntry":
var aData = oPages.aDataEntry;
var aSort = [5, 1];
var sSubMenu = "Top Entry Pages";
var iPieTotal = oPages.iTotalEntry;
var sPieItem = "iEntry";
break;
case "topExit":
var aData = oPages.aDataExit;
var aSort = [7, 1];
var sSubMenu = "Top Exit Pages";
var iPieTotal = oPages.iTotalExit;
var sPieItem = "iExit";
break;
case "topPages":
var aData = oPages.aDataPages;
var aSort = [1, 1];
var sSubMenu = "Top Page Views";
var iPieTotal = oPages.iTotalPages;
var sPieItem = "iPages";
break;
}
// create html
var aTable = DrawTable_Pages(aData);
var sHTML = "<h2>" + Lang("Page Views") + "</h2>" +
DrawSubMenu("pages", sSubMenu) +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {1: {sorter: 'formatted_number'}, 2: {sorter: false}, 3: {sorter: 'bandwidth'}, 4: {sorter: false}, 6: {sorter: false}, 8: {sorter: false}}, sortList: [aSort], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Pages(aData, iPieTotal, sPieItem, oPages.bHaveTitles);
}
function PageLayout_Robots() {
var aTable = DrawTable_Robots();
var sHTML = "<h2>" + Lang("Visiting Spiders") + "</h2><div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}, 2: {sorter: false}, 3: {sorter: 'bandwidth'}, 4: {sorter: false}, 6: {sorter: "commaNumber"}, 7: {sorter: false}}, sortList: [[1, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawPie_Robots();
}
function PageLayout_Searches(sPage) {
switch (sPage) {
case "keyphrasecloud":
var oKeyphrases = aStatistics["keyphrases"][aParts.length + 1][0];
var sHTML = "<h2>" + Lang("Keyphrases Tag Cloud") + "</h2>" +
DrawSubMenu("searches", "Keyphrases Tag Cloud") +
"<div class=\"tagcloud\">" + TagCloud("sPhrase", oKeyphrases, 75) + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
break;
case "keyphrases":
var sHTML = "<h2>" + Lang("Keyphrases") + "</h2>" +
DrawSubMenu("searches", "Keyphrases") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + Paging_Keyphrases() + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
DrawPie_Keyphrases();
break;
case "keywordcloud":
var oKeywords = aStatistics["keywords"][aParts.length + 1][0];
var sHTML = "<h2>" + Lang("Keywords Tag Cloud") + "</h2>" +
DrawSubMenu("searches", "Keywords Tag Cloud") +
"<div class=\"tagcloud\">" + TagCloud("sWord", oKeywords, 150) + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
break;
case "keywords":
var sHTML = "<h2>" + Lang("Keywords") + "</h2>" +
DrawSubMenu("searches", "Keywords") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + Paging_Keywords() + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
DrawPie_Keywords();
break;
}
}
function PageLayout_Session() {
var aTable = DrawTable_Session();
var sHTML = "<h2>" + Lang("Session Duration") + "</h2><div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
if (aTable[0] == true) {
//$(".tablesorter").tablesorter({ headers: { 0: { sorter: false }, 1:{sorter:"commaNumber"}, 2: { sorter: false } }, sortList: [[1,1]],textExtraction:function(node){return node.innerHTML.replace(',', '');}, widgets: ['zebra'] });
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}, 2: {sorter: false}}, sortList: [[0, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
$("#content").fadeIn(g_iFadeSpeed);
DrawPie_Session();
}
function PageLayout_Status(sPage) {
switch (sPage) {
case "404":
var aTable = DrawTable_Status404();
var sHTML = "<h2>" + Lang("HTTP Status Codes") + ": 404s</h2>" +
DrawSubMenu("status", "File Not Found URLs") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}}, sortList: [[1, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
$("#content").fadeIn(g_iFadeSpeed);
DrawPie_Status404(sPage);
break;
default:
var aTable = DrawTable_Status();
var sHTML = "<h2>" + Lang("HTTP Status Codes") + "</h2>" +
DrawSubMenu("status", "Status Codes") +
"<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {2: {sorter: "commaNumber"}, 3: {sorter: false}, 4: {sorter: "bandwidth"}, 5: {sorter: false}}, sortList: [[2, 1]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
$("#content").fadeIn(g_iFadeSpeed);
DrawPie_Status(sPage);
}
}
function PageLayout_ThisMonth(sPage) {
switch (sPage) {
case "all":
var aTable = DrawTable_ThisMonth();
var sHTML = "<h2>" + Lang("Visitors this Month") + "</h2>" +
DrawSubMenu("thismonth", "Overview") +
"<div id=\"graph\" class=\"graph\"> </div><div class=\"tableFull\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {2: {sorter: "commaNumber"}, 3: {sorter: "commaNumber"}, 5: {sorter: "commaNumber"}, 7: {sorter: "bandwidth"}, 8: {sorter: "bandwidth"}}, sortList: [[1, 0]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawGraph_ThisMonth();
// observe tablesorter
$(".tablesorter th").click(function() {
switch (this.innerHTML) {
case "per Visit":
break;
case "Pages":
DrawGraph_ThisMonth("iPages");
break;
case "Hits":
DrawGraph_ThisMonth("iHits");
break;
case "BW":
DrawGraph_ThisMonth("iBW");
break;
default:
DrawGraph_ThisMonth("iVisits");
}
});
break;
case "bandwidth":
Misc_ThisMonthCalendar("Calendar of Bandwidth Usage this Month", "Calendar of Bandwidth Usage", "iBW");
break;
case "hits":
Misc_ThisMonthCalendar("Calendar of Hits this Month", "Calendar of Hits", "iHits");
break;
case "pages":
Misc_ThisMonthCalendar("Calendar of Page Views this Month", "Calendar of Page Views", "iPages");
break;
case "visits":
Misc_ThisMonthCalendar("Calendar of Visitors this Month", "Calendar of Visitors", "iVisits");
break;
}
}
function PageLayout_Time(sPage) {
var aTable = DrawTable_Time(sPage);
var sHTML = "<h2>" + Lang("Visitors over 24 Hours") + "</h2>" +
"<div id=\"graph\" class=\"graph\"> </div>" +
"<div class=\"tableFull\">" + aTable[1] + "</div>";
$("#content").html(sHTML);
$("#content").fadeIn(g_iFadeSpeed);
if (aTable[0] == true) {
$(".tablesorter").tablesorter({headers: {1: {sorter: "commaNumber"}, 2: {sorter: false}, 3: {sorter: false}, 4: {sorter: "commaNumber"}, 5: {sorter: false}, 6: {sorter: false}, 7: {sorter: 'bandwidth'}, 8: {sorter: false}, 9: {sorter: false}, 10: {sorter: "commaNumber"}, 11: {sorter: "commaNumber"}, 12: {sorter: 'bandwidth'}}, sortList: [[0, 0]], textExtraction: function(node) {
return node.innerHTML.replace(',', '');
}, widgets: ['zebra']});
}
DrawGraph_Time();
// observe tablesorter
$(".tablesorter th").click(function() {
switch (this.innerHTML) {
case "Hits":
DrawGraph_Time("iHits");
break;
case "BW":
DrawGraph_Time("iBW");
break;
case "<small>Not Viewed</small><br>Pages":
DrawGraph_Time("iNVPages");
break;
case "<small>Not Viewed</small><br>Hits":
DrawGraph_Time("iNVHits");
break;
case "<small>Not Viewed</small><br>BW":
DrawGraph_Time("iNVBW");
break;
default:
DrawGraph_Time("iPages");
}
});
}
function PagingInputNumber(oEvent, oInput, sType) {
var iCode = (oEvent.charCode || oEvent.keyCode);
if (iCode == 13) {
var iValue = parseFloat($(oInput).val());
if (isNaN(iValue) == true) {
return false;
}
if (iValue < 1) {
return false;
}
if (iValue != Math.round(iValue)) {
return false;
}
switch (sType) {
case "keyphrases":
if (iValue > (Math.floor((oStatistics.oKeyphrases.aData.length - 1) / oPaging.oKeyphrases.iRowsPerPage) + 1)) {
return false;
}
RedrawTable_Keyphrases("iCurrPage", (iValue - 1));
break;
case "keywords":
if (iValue > (Math.floor((oStatistics.oKeywords.aData.length - 1) / oPaging.oKeywords.iRowsPerPage) + 1)) {
return false;
}
RedrawTable_Keywords("iCurrPage", (iValue - 1));
break;
}
}
if ((iCode == 8) || (iCode == 9) || ((iCode > 34) && (iCode < 38)) || (iCode == 39) || (iCode == 46) || ((iCode > 47) && (iCode < 58))) {
return true;
} else {
return false;
}
}
function Paging_Keyphrases() {
var oKeyphrases = aStatistics["keyphrases"][aParts.length + 1][0];
var oKeyphrasesAlphabetical = aStatistics["keyphrases"][aParts.length + 1][1];
// get values
iTotalFreq = oKeyphrases.iTotalFreq;
switch (oPaging.oKeyphrases.sSort) {
case "freqASC":
var sKeyphraseClass = "";
var sFrequencyClass = " headerSortDown";
var sKeyphraseSort = "wordDESC";
var sFrequencySort = "freqDESC";
var aData = oKeyphrases.aData;
var iDisplayOrder = -1;
break;
case "freqDESC":
var sKeyphraseClass = "";
var sFrequencyClass = " headerSortUp";
var sKeyphraseSort = "wordDESC";
var sFrequencySort = "freqASC";
var aData = oKeyphrases.aData;
var iDisplayOrder = 1;
break;
case "wordASC":
var sKeyphraseClass = " headerSortDown";
var sFrequencyClass = "";
var sKeyphraseSort = "wordDESC";
var sFrequencySort = "freqDESC";
var aData = oKeyphrasesAlphabetical.aData;
var iDisplayOrder = -1;
break;
case "wordDESC":
var sKeyphraseClass = " headerSortUp";
var sFrequencyClass = "";
var sKeyphraseSort = "wordASC";
var sFrequencySort = "freqDESC";
var aData = oKeyphrasesAlphabetical.aData;
var iDisplayOrder = 1;
break;
}
// create header
var sDesc = (Lang("Showing [START] to [END] of [TOTAL] keyphrases")).replace("[TOTAL]", aData.length);
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th class=\"header" + sKeyphraseClass + "\" onclick=\"RedrawTable_Keyphrases('sSort', '" + sKeyphraseSort + "')\" width=\"80%\">" + Lang("Keyphrase") + "</th>" +
"<th class=\"header" + sFrequencyClass + "\" onclick=\"RedrawTable_Keyphrases('sSort', '" + sFrequencySort + "')\" width=\"10%\">" + Lang("Frequency") + "</th>" +
"<th class=\"noborder\" width=\"10%\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
if (iDisplayOrder == 1) {
var iStart = (oPaging.oKeyphrases.iCurrPage * oPaging.oKeyphrases.iRowsPerPage);
var iEnd = (iStart + oPaging.oKeyphrases.iRowsPerPage);
if (iEnd > aData.length) {
iEnd = aData.length;
}
sDesc = sDesc.replace("[START]", iStart + 1).replace("[END]", iEnd);
for (var i = iStart; i < iEnd; i++) {
aHTML.push(((i % 2 == 0) ? "<tr>" : "<tr class=\"odd\">") +
"<td>" + aData[i].sPhrase + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[i].iFreq, 0) + "</td>" +
"<td class=\"noborder right\">" + ((aData[i].iFreq / iTotalFreq) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
} else {
if (aData.length > 0) {
var iStart = (aData.length - 1) - (oPaging.oKeyphrases.iCurrPage * oPaging.oKeyphrases.iRowsPerPage);
var iEnd = (iStart - oPaging.oKeyphrases.iRowsPerPage);
if (iEnd < -1) {
iEnd = -1;
}
sDesc = sDesc.replace("[START]", iStart + 1).replace("[END]", iEnd + 2);
for (var i = iStart; i > iEnd; i--) {
aHTML.push(((i % 2 == 0) ? "<tr>" : "<tr class=\"odd\">") +
"<td>" + aData[i].sPhrase + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[i].iFreq, 0) + "</td>" +
"<td class=\"noborder right\">" + ((aData[i].iFreq / iTotalFreq) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
}
}
// output
if (aHTML.length > 0) {
var iMaxPage = Math.floor((aData.length - 1) / oPaging.oKeyphrases.iRowsPerPage);
var sNavigation = "<div id=\"paging\"><span>" + sDesc + "</span>";
if (oPaging.oKeyphrases.iCurrPage > 0) {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/first.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/first_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/first.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keyphrases('iCurrPage', 0)\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/prev.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/prev_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/prev.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keyphrases('iCurrPage', " + (oPaging.oKeyphrases.iCurrPage - 1) + ")\" />";
} else {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/first_off.gif\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/prev_off.gif\" />";
}
sNavigation += "<span><input type=\"text\" value=\"" + (oPaging.oKeyphrases.iCurrPage + 1) + "\" onkeypress=\"return PagingInputNumber(event, this, 'keyphrases');\" />" + " / " + (iMaxPage + 1) + "</span>";
if (oPaging.oKeyphrases.iCurrPage < iMaxPage) {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/next.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/next_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/next.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keyphrases('iCurrPage', " + (oPaging.oKeyphrases.iCurrPage + 1) + ")\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/last.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/last_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/last.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keyphrases('iCurrPage', " + iMaxPage + ")\" />";
} else {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/next_off.gif\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/last_off.gif\" />";
}
sNavigation += "</div>";
return (sHTML + aHTML.join("\n") + "</tbody></table>" + sNavigation);
} else {
return (sHTML + "<tr><td class=\"center\" colspan=\"3\">" + Lang("There is no data to display") + "</td></tr></tbody></table>");
}
}
function Paging_Keywords() {
var oKeywords = aStatistics["keywords"][aParts.length + 1][0];
var oKeywordsAlphabetical = aStatistics["keywords"][aParts.length + 1][1];
// get values
iTotalFreq = oKeywords.iTotalFreq;
switch (oPaging.oKeywords.sSort) {
case "freqASC":
var sKeywordClass = "";
var sFrequencyClass = " headerSortDown";
var sKeywordSort = "wordDESC";
var sFrequencySort = "freqDESC";
var aData = oKeywords.aData;
var iDisplayOrder = -1;
break;
case "freqDESC":
var sKeywordClass = "";
var sFrequencyClass = " headerSortUp";
var sKeywordSort = "wordDESC";
var sFrequencySort = "freqASC";
var aData = oKeywords.aData;
var iDisplayOrder = 1;
break;
case "wordASC":
var sKeywordClass = " headerSortDown";
var sFrequencyClass = "";
var sKeywordSort = "wordDESC";
var sFrequencySort = "freqDESC";
var aData = oKeywordsAlphabetical.aData;
var iDisplayOrder = -1;
break;
case "wordDESC":
var sKeywordClass = " headerSortUp";
var sFrequencyClass = "";
var sKeywordSort = "wordASC";
var sFrequencySort = "freqDESC";
var aData = oKeywordsAlphabetical.aData;
var iDisplayOrder = 1;
break;
}
// create header
var sDesc = (Lang("Showing [START] to [END] of [TOTAL] keywords")).replace("[TOTAL]", aData.length);
var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" +
"<thead><tr>" +
"<th class=\"header" + sKeywordClass + "\" onclick=\"RedrawTable_Keywords('sSort', '" + sKeywordSort + "')\" width=\"80%\">" + Lang("Keyword") + "</th>" +
"<th class=\"header" + sFrequencyClass + "\" onclick=\"RedrawTable_Keywords('sSort', '" + sFrequencySort + "')\" width=\"10%\">" + Lang("Frequency") + "</th>" +
"<th class=\"noborder\" width=\"10%\"> </th>" +
"</tr></thead>\n" +
"<tbody>";
// create table body
aHTML = new Array();
if (iDisplayOrder == 1) {
var iStart = (oPaging.oKeywords.iCurrPage * oPaging.oKeywords.iRowsPerPage);
var iEnd = (iStart + oPaging.oKeywords.iRowsPerPage);
if (iEnd > aData.length) {
iEnd = aData.length;
}
sDesc = sDesc.replace("[START]", iStart + 1).replace("[END]", iEnd);
for (var i = iStart; i < iEnd; i++) {
aHTML.push(((i % 2 == 0) ? "<tr>" : "<tr class=\"odd\">") +
"<td>" + aData[i].sWord + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[i].iFreq, 0) + "</td>" +
"<td class=\"noborder right\">" + ((aData[i].iFreq / iTotalFreq) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
} else {
if (aData.length > 0) {
var iStart = (aData.length - 1) - (oPaging.oKeywords.iCurrPage * oPaging.oKeywords.iRowsPerPage);
var iEnd = (iStart - oPaging.oKeywords.iRowsPerPage);
if (iEnd < -1) {
iEnd = -1;
}
sDesc = sDesc.replace("[START]", iStart + 1).replace("[END]", iEnd + 2);
for (var i = iStart; i > iEnd; i--) {
aHTML.push(((i % 2 == 0) ? "<tr>" : "<tr class=\"odd\">") +
"<td>" + aData[i].sWord + "</td>" +
"<td class=\"right\">" + NumberFormat(aData[i].iFreq, 0) + "</td>" +
"<td class=\"noborder right\">" + ((aData[i].iFreq / iTotalFreq) * 100).toFixed(1) + "%</td>" +
"</tr>\n");
}
}
}
// output
if (aHTML.length > 0) {
var iMaxPage = Math.floor((aData.length - 1) / oPaging.oKeywords.iRowsPerPage);
var sNavigation = "<div id=\"paging\"><span>" + sDesc + "</span>";
if (oPaging.oKeywords.iCurrPage > 0) {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/first.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/first_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/first.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keywords('iCurrPage', 0)\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/prev.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/prev_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/prev.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keywords('iCurrPage', " + (oPaging.oKeywords.iCurrPage - 1) + ")\" />";
} else {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/first_off.gif\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/prev_off.gif\" />";
}
sNavigation += "<span><input type=\"text\" value=\"" + (oPaging.oKeywords.iCurrPage + 1) + "\" onkeypress=\"return PagingInputNumber(event, this, 'keywords');\" />" + " / " + (iMaxPage + 1) + "</span>";
if (oPaging.oKeywords.iCurrPage < iMaxPage) {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/next.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/next_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/next.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keywords('iCurrPage', " + (oPaging.oKeywords.iCurrPage + 1) + ")\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/last.gif\" onmouseover=\"this.src='themes/" + sThemeDir + "/paging/last_on.gif'\" onmouseout=\"this.src='themes/" + sThemeDir + "/paging/last.gif'\" style=\"cursor: pointer;\" onclick=\"RedrawTable_Keywords('iCurrPage', " + iMaxPage + ")\" />";
} else {
sNavigation += "<img src=\"themes/" + sThemeDir + "/paging/next_off.gif\" />" +
"<img src=\"themes/" + sThemeDir + "/paging/last_off.gif\" />";
}
sNavigation += "</div>";
return (sHTML + aHTML.join("\n") + "</tbody></table>" + sNavigation);
} else {
return (sHTML + "<tr><td class=\"center\" colspan=\"3\">" + Lang("There is no data to display") + "</td></tr></tbody></table>");
}
}
function PopulateData_AllMonths(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_AllMonths(sPage, aParts[0]);
}
function AddPart_AllMonths(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_AllMonths(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_AllMonths(sPage, oPart) {
// create data objects
var oAM = {"aData": [], "aYearDayCount": []};
$.ajax({
type: "GET",
url: XMLURL("ALLMONTHS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
var aTemp = [];
var iCurrentYear = 0;
if ($(oXML).find('month').length > 0) {
$(oXML).find('month').each(function() {
dtTemp = new Date(parseInt($(this).attr("year")), (parseInt($(this).attr("month")) - 1), 1);
// days in month
iDaysInMonth = parseFloat($(this).attr("daysinmonth"));
// push items onto array
aTemp.push({"dtDate": new Date(dtTemp.getFullYear(), dtTemp.getMonth(), 1),
"iMonth": $(this).attr("month"),
"iYear": $(this).attr("year"),
"iDaysInMonth": iDaysInMonth,
"iVisits": parseInt($(this).attr("visits")),
"iUniques": parseInt($(this).attr("uniques")),
"iPages": parseInt($(this).attr("pages")),
"iHits": parseInt($(this).attr("hits")),
"iBW": parseInt($(this).attr("bw")),
"iDaysInMonth" : iDaysInMonth
});
// count days in year
if (iCurrentYear != dtTemp.getFullYear()) {
iCurrentYear = dtTemp.getFullYear();
oAM.aYearDayCount[iCurrentYear] = iDaysInMonth;
} else {
oAM.aYearDayCount[iCurrentYear] += iDaysInMonth;
}
});
// apply data
oAM.aData = aTemp;
AddPart_AllMonths(oAM, sPage);
} else
AddPart_AllMonths(null, sPage);
}
});
}
function PopulateData_Browser(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Browser(sPage, aParts[0]);
}
function AddPart_Browser(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Browser(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Browser(sPage, oPart)
{
// create data objects
var oB = {"iTotalHits": 0, "aData": [], "aFamily": []};
// pre-populate browser families (Deep Copy)
// oB.aFamily = eval(gc_aBrowserFamily.toSource());
oB.aFamily = $.evalJSON($.toJSON(gc_aBrowserFamily));
// do ajax call
$.ajax({
type: "GET",
url: XMLURL("BROWSER", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
var sBrowser = $(this).attr("id");
var iHits = parseInt($(this).attr("hits"));
// find family browser belongs to
var bFamilyFound = false;
var sFamily = "";
for (var iRow in oB.aFamily) {
if (sBrowser.substr(0, oB.aFamily[iRow].sBrowser.length) == oB.aFamily[iRow].sBrowser) {
// change name
sBrowser = sBrowser.substr(oB.aFamily[iRow].sBrowser.length);
sBrowser = (gc_aBrowserFamilyCaption[oB.aFamily[iRow].sBrowser] + " " + sBrowser);
// add totals
oB.aFamily[iRow].iHits += iHits;
sFamily = oB.aFamily[iRow].sBrowser;
bFamilyFound = true;
break;
}
}
if (bFamilyFound != true) {
oB.aFamily[oB.aFamily.length - 1].iHits += iHits;
sFamily = "Other Browsers";
}
// increment totals
oB.iTotalHits += iHits;
// populate array
oB.aData.push({"sBrowser": sBrowser,
"iHits": iHits,
"sFamily": sFamily});
});
// apply data
oB.aData.sort(Sort_Hits);
oB.aFamily.sort(Sort_Hits);
AddPart_Browser(oB, sPage);
}
});
}
function MergeParts_Browser()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalHits += oPart.iTotalHits;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sBrowser == oSum.aData[jRow].sBrowser) {
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
// merge family
for (iRow in oPart.aFamily) {
var found = false;
for (jRow in oSum.aFamily)
if (oPart.aFamily[iRow].sBrowser == oSum.aFamily[jRow].sBrowser) {
oSum.aFamily[jRow].iHits += oPart.aFamily[iRow].iHits;
found = true;
break;
}
if (!found)
oSum.aFamily.push(oPart.aFamily[iRow]);
}
}
var foundFirst = false;
var oBrowser = aStatistics["browser"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oBrowser[aParts.length + 1] = $.evalJSON($.toJSON(oBrowser[iIndex]));
foundFirst = true;
} else
mergePart(oBrowser[aParts.length + 1], oBrowser[iIndex]);
// Sort
oBrowser[aParts.length + 1].aData.sort(Sort_Hits);
oBrowser[aParts.length + 1].aFamily.sort(Sort_Hits);
}
function PopulateData_City(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_City(sPage, aParts[0]);
}
function AddPart_City(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_City(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_City(sPage, oPart) {
// create data objects
var oC = {"bPopulated": false, "iTotalPages": 0, "iTotalHits": 0, "iTotalBW": 0, "aData": []};
oC.oCountry = {};
$.ajax({
type: "GET",
url: XMLURL("PLUGIN_geoip_city_maxmind", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sCityCode = $(this).attr("id");
var aSplit = sCityCode.split("_", 2);
var sCountryCode = aSplit[0];
var sCityName = aSplit[1];
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
// increment totals
oC.iTotalPages += iPages;
oC.iTotalHits += iHits;
oC.iTotalBW += iBW;
if ((oC.oCountry[sCountryCode] == null)) {
oC.oCountry[sCountryCode] = {"iTotalPages": 0, "iTotalHits": 0, "iTotalBW": 0};
}
if (oC.oCountry[sCountryCode] != null) {
oC.oCountry[sCountryCode].iTotalPages += iPages;
oC.oCountry[sCountryCode].iTotalHits += iHits;
oC.oCountry[sCountryCode].iTotalBW += iBW;
}
// populate array
oC.aData.push({"sCityCode": sCityCode,
"sCityName": sCityName,
"sCountry": sCountryCode,
"iPages": iPages,
"iHits": iHits,
"iBW": iBW});
});
// apply data
oC.aData.sort(Sort_Hits);
AddPart_City(oC, sPage);
}
});
}
function MergeParts_City() {
// merge helper
function mergePart(oSum, oPart) {
function mergeCountry(oSum, oPart) {
// merge totals
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
}
// merge totals
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sCountryCode == oSum.aData[jRow].sCountryCode) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
for (var idx in oSum.oCountry)
mergeCountry(oSum.oCountry[idx], oPart.oCountry[idx]);
}
var foundFirst = false;
var oCity = aStatistics["city"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oCity[aParts.length + 1] = $.evalJSON($.toJSON(oCity[iIndex]));
foundFirst = true;
} else
mergePart(oCity[aParts.length + 1], oCity[iIndex]);
// Sort
oCity[aParts.length + 1].aData.sort(Sort_Pages);
}
function PopulateData_Org(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Org(sPage, aParts[0]);
}
function AddPart_Org(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Org(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Org(sPage, oPart) {
// create data objects
var oC = {"bPopulated": false, "iTotalPages": 0, "iTotalHits": 0, "iTotalBW": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("PLUGIN_geoip_org_maxmind", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sOrgCode = $(this).attr("id");
var aSplit = sOrgCode.split("_", 2);
var sASN = aSplit[0];
var sOrgName = aSplit[1];
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
// increment totals
oC.iTotalPages += iPages;
oC.iTotalHits += iHits;
oC.iTotalBW += iBW;
// populate array
oC.aData.push({"sOrgCode": sASN,
"sOrgName": sOrgName,
"iPages": iPages,
"iHits": iHits,
"iBW": iBW});
});
// apply data
oC.aData.sort(Sort_Pages);
AddPart_Org(oC, sPage);
}
});
}
function MergeParts_Org()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sOrgCode == oSum.aData[jRow].sOrgCode) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oOrg = aStatistics["org"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oOrg[aParts.length + 1] = $.evalJSON($.toJSON(oOrg[iIndex]));
foundFirst = true;
} else
mergePart(oOrg[aParts.length + 1], oOrg[iIndex]);
// Sort
oOrg[aParts.length + 1].aData.sort(Sort_Pages);
}
function PopulateData_Visitor(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Visitor(sPage, aParts[0]);
}
function AddPart_Visitor(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Visitor(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Visitor(sPage, oPart) {
// create data objects
var oC = {"bPopulated": false, "iTotalPages": 0, "iTotalHits": 0, "iTotalBW": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("VISITOR", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sAddress = $(this).attr("address");
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
var sDesc = $(this).attr("desc");
// increment totals
oC.iTotalPages += iPages;
oC.iTotalHits += iHits;
oC.iTotalBW += iBW;
// populate array
oC.aData.push({"sAddress": sAddress,
"iPages": iPages,
"iHits": iHits,
"iBW": iBW,
"sDesc": sDesc});
});
// apply data
oC.aData.sort(Sort_Pages);
AddPart_Visitor(oC, sPage);
}
});
}
function MergeParts_Visitor()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sAddress == oSum.aData[jRow].sAddress) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oVisitor = aStatistics["visitor"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oVisitor[aParts.length + 1] = $.evalJSON($.toJSON(oVisitor[iIndex]));
foundFirst = true;
} else
mergePart(oVisitor[aParts.length + 1], oVisitor[iIndex]);
// Sort
oVisitor[aParts.length + 1].aData.sort(Sort_Pages);
}
function PopulateData_Filetypes(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Filetypes(sPage, aParts[0]);
}
function AddPart_Filetypes(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Filetypes(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Filetypes(sPage, oPart) {
// create data objects
var oF = {"iTotalHits": 0, "iTotalBW": 0, "iTotalNonCompBW": 0, "iTotalCompBW": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("FILETYPES", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sFiletype = $(this).attr("id");
var sDescription = gc_aFiletypeDesc[sFiletype];
if (typeof gc_aFiletypeDesc[sFiletype] == "undefined") {
sDescription = " ";
}
if (sFiletype == "Unknown") {
sFiletype = " ";
sDescription = "Unknown";
}
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
var iNonCompBW = parseInt($(this).attr("noncompressedbw"));
var iCompBW = parseInt($(this).attr("compressedbw"));
// increment totals
oF.iTotalHits += iHits;
oF.iTotalBW += iBW;
oF.iTotalNonCompBW += iNonCompBW;
oF.iTotalCompBW += iCompBW;
// populate array
oF.aData.push({"sFiletype": sFiletype,
"sDescription": sDescription,
"iHits": iHits,
"iBW": iBW,
"iNonCompBW": iNonCompBW,
"iCompBW": iCompBW});
});
// apply data
oF.aData.sort(Sort_Hits);
AddPart_Filetypes(oF, sPage);
}
});
}
function MergeParts_Filetypes()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sFiletype == oSum.aData[jRow].sFiletype) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oFiletype = aStatistics["filetypes"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oFiletype[aParts.length + 1] = $.evalJSON($.toJSON(oFiletype[iIndex]));
foundFirst = true;
} else
mergePart(oFiletype[aParts.length + 1], oFiletype[iIndex]);
// Sort
oFiletype[aParts.length + 1].aData.sort(Sort_Hits);
}
function PopulateData_Keyphrases(sPage) {
$("#loading").show();
aStatistics["keyphrases"] = [];
GetPart_Keyphrases(sPage, aParts[0]);
}
function AddPart_Keyphrases(oData, sPage)
{
iCount = aStatistics["keyphrases"].push(oData);
if (iCount < aParts.length) {
GetPart_Keyphrases(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Keyphrases(sPage, oPart) {
// create data objects
var oKP = {iMaxFreq: 0, iTotalFreq: 0, aData: []};
var oKPAlpha = {aData: []};
$.ajax({
type: "GET",
url: XMLURL("SEARCHWORDS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sPhrase = $(this).attr("phrase").split("+").join(" ").split("%").join("%​");
var iFreq = parseInt($(this).attr("freq"));
// increment totals
oKP.iTotalFreq += iFreq;
if (iFreq > oKP.iMaxFreq) {
oKP.iMaxFreq = iFreq;
}
// populate array
oKP.aData.push({"sPhrase": sPhrase,
"iFreq": iFreq});
oKPAlpha.aData.push({sWord: sPhrase,
iFreq: iFreq});
});
// apply data
oKP.aData.sort(Sort_Freq);
oKPAlpha.aData.sort(Sort_Phrase);
AddPart_Keyphrases([oKP, oKPAlpha], sPage);
// oStatistics.oKeyphrases = oKP;
// oStatistics.oKeyphrasesAlphabetical = oKPAlpha;
}
});
}
function MergeParts_Keyphrases()
{
// merge helper
function mergePart(oSum, oPart)
{
oSum[0].iTotalFreq += oPart[0].iTotalFreq;
if (oSum[0].iMaxFreq < oPart[0].iMaxFreq)
oSum[0].iMaxFreq = oPart[0].iMaxFreq;
// merge data (Keyphrase)
for (iRow in oPart[0].aData) {
var found = false;
for (jRow in oSum[0].aData)
if (oPart[0].aData[iRow].sPhrase == oSum[0].aData[jRow].sPhrase) {
oSum[0].aData[jRow].iFreq += oPart[0].aData[iRow].iFreq;
found = true;
break;
}
if (!found)
oSum[0].aData.push(oPart[0].aData[iRow]);
}
// merge data (Keyphrase Alpha)
for (iRow in oPart[1].aData) {
var found = false;
for (jRow in oSum[1].aData)
if (oPart[1].aData[iRow].sPhrase == oSum[1].aData[jRow].sPhrase) {
oSum[1].aData[jRow].iFreq += oPart[1].aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum[1].aData.push(oPart[1].aData[iRow]);
}
}
var foundFirst = false;
var oKeyphrases = aStatistics["keyphrases"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oKeyphrases[aParts.length + 1] = $.evalJSON($.toJSON(oKeyphrases[iIndex]));
foundFirst = true;
} else
mergePart(oKeyphrases[aParts.length + 1], oKeyphrases[iIndex]);
}
function PopulateData_Keywords(sPage) {
$("#loading").show();
aStatistics["keywords"] = [];
GetPart_Keywords(sPage, aParts[0]);
}
function AddPart_Keywords(oData, sPage)
{
iCount = aStatistics["keywords"].push(oData);
if (iCount < aParts.length) {
GetPart_Keywords(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Keywords(sPage, oPart) {
// create data objects
var oKW = {iMaxFreq: 0, iTotalFreq: 0, aData: []};
var oKWAlpha = {aData: []};
$.ajax({
type: "GET",
url: XMLURL("KEYWORDS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sWord = $(this).attr("word").split("%").join("%​");
var iFreq = parseInt($(this).attr("freq"));
// increment totals
oKW.iTotalFreq += iFreq;
if (iFreq > oKW.iMaxFreq) {
oKW.iMaxFreq = iFreq;
}
// populate array
oKW.aData.push({sWord: sWord,
iFreq: iFreq});
oKWAlpha.aData.push({sWord: sWord,
iFreq: iFreq});
});
// apply data
oKW.aData.sort(Sort_Freq);
oKWAlpha.aData.sort(Sort_Word);
AddPart_Keywords([oKW, oKWAlpha], sPage);
}
});
}
function MergeParts_Keywords()
{
// merge helper
function mergePart(oSum, oPart)
{
oSum[0].iTotalFreq += oPart[0].iTotalFreq;
if (oSum[0].iMaxFreq < oPart[0].iMaxFreq)
oSum[0].iMaxFreq = oPart[0].iMaxFreq;
// merge data (Keyphrase)
for (iRow in oPart[0].aData) {
var found = false;
for (jRow in oSum[0].aData)
if (oPart[0].aData[iRow].sWord == oSum[0].aData[jRow].sWord) {
oSum[0].aData[jRow].iFreq += oPart[0].aData[iRow].iFreq;
found = true;
break;
}
if (!found)
oSum[0].aData.push(oPart[0].aData[iRow]);
}
// merge data (Keyphrase Alpha)
for (iRow in oPart[1].aData) {
var found = false;
for (jRow in oSum[1].aData)
if (oPart[1].aData[iRow].sPhrase == oSum[1].aData[jRow].sPhrase) {
oSum[1].aData[jRow].iFreq += oPart[1].aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum[1].aData.push(oPart[1].aData[iRow]);
}
}
var foundFirst = false;
var oKeywords = aStatistics["keywords"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oKeywords[aParts.length + 1] = $.evalJSON($.toJSON(oKeywords[iIndex]));
foundFirst = true;
} else
mergePart(oKeywords[aParts.length + 1], oKeywords[iIndex]);
}
function PopulateData_OperatingSystems(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_OperatingSystems(sPage, aParts[0]);
}
function AddPart_OperatingSystems(oData, sPage)
{
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_OperatingSystems(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_OperatingSystems(sPage, oPart)
{
// create data objects
var oOS = {"iTotalHits": 0, "aData": [], "aFamily": []};
// pre-populate browser families (Deep Copy)
oOS.aFamily = $.evalJSON($.toJSON(gc_aOSFamily));
// do ajax call
$.ajax({
type: "GET",
url: XMLURL("OS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
var sOperatingSystem = $(this).attr("id");
var iHits = parseInt($(this).attr("hits"));
// find family OS belongs to
var bFamilyFound = false;
var sFamily = "";
for (var iRow in oOS.aFamily) {
if (sOperatingSystem.substr(0, oOS.aFamily[iRow].sOperatingSystem.length) == oOS.aFamily[iRow].sOperatingSystem) {
// change name
sOperatingSystem = sOperatingSystem.substr(oOS.aFamily[iRow].sOperatingSystem.length);
switch (oOS.aFamily[iRow].sOperatingSystem) {
case "mac":
sOperatingSystem = (sOperatingSystem.substr(0, 1).toUpperCase() + sOperatingSystem.substr(1));
switch (sOperatingSystem) {
case "Intosh":
sOperatingSystem = "Macintosh";
break;
case "Osx":
sOperatingSystem = "OSX";
break;
}
break;
case "sun":
case "win":
sOperatingSystem = sOperatingSystem.toUpperCase();
break;
default:
sOperatingSystem = (sOperatingSystem.substr(0, 1).toUpperCase() + sOperatingSystem.substr(1));
}
sOperatingSystem = (gc_aOSFamilyCaption[oOS.aFamily[iRow].sOperatingSystem] + " " + sOperatingSystem);
// add totals
oOS.aFamily[iRow].iHits += iHits;
sFamily = oOS.aFamily[iRow].sOperatingSystem;
bFamilyFound = true;
break;
}
}
if (bFamilyFound != true) {
oOS.aFamily[oOS.aFamily.length - 1].iHits += iHits;
sFamily = "Other OS";
}
// increment totals
oOS.iTotalHits += iHits;
// populate array
oOS.aData.push({"sOperatingSystem": sOperatingSystem,
"iHits": iHits,
"sFamily": sFamily});
});
// apply data
oOS.aData.sort(Sort_Hits);
oOS.aFamily.sort(Sort_Hits);
AddPart_OperatingSystems(oOS, sPage);
}
});
}
function MergeParts_OperatingSystems()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalHits += oPart.iTotalHits;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sOperatingSystem == oSum.aData[jRow].sOperatingSystem) {
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
// merge family
for (iRow in oPart.aFamily) {
var found = false;
for (jRow in oSum.aFamily)
if (oPart.aFamily[iRow].sOperatingSystem == oSum.aFamily[jRow].sOperatingSystem) {
oSum.aFamily[jRow].iHits += oPart.aFamily[iRow].iHits;
found = true;
break;
}
if (!found)
oSum.aFamily.push(oPart.aFamily[iRow]);
}
}
var foundFirst = false;
var oOS = aStatistics["os"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oOS[aParts.length + 1] = $.evalJSON($.toJSON(oOS[iIndex]));
foundFirst = true;
} else
mergePart(oOS[aParts.length + 1], oOS[iIndex]);
// Sort
oOS[aParts.length + 1].aData.sort(Sort_Hits);
oOS[aParts.length + 1].aFamily.sort(Sort_Hits);
}
function PopulateData_PageRefs(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_PageRefs(sPage, aParts[0]);
}
function AddPart_PageRefs(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_PageRefs(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_PageRefs(sPage, oPart) {
// create data objects
var oPR = {"iTotalPages": 0, "iTotalHits": 0, "aData": [], "aDataDomain": []};
$.ajax({
type: "GET",
url: XMLURL("PAGEREFS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sReferrer = $(this).attr("url");
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
// increment totals
oPR.iTotalPages += iPages;
oPR.iTotalHits += iHits;
// populate array
oPR.aData.push({"sURL": sReferrer,
"sVisibleURL": (sReferrer.length > 100 ? sReferrer.substring(0, 100) + "..." : sReferrer).split("/").join("​/").split("-").join("-​").split("_").join("_​"),
"iPages": iPages,
"iHits": iHits});
// populate domain array
var aTemp = sReferrer.split("/");
var sDomain = (aTemp[0] + "//" + aTemp[2]);
var sVisibleDomain = aTemp[2].replace(/^www./, "");
$bExists = false;
for (var iRow in oPR.aDataDomain) {
if (oPR.aDataDomain[iRow].sVisibleURL == sVisibleDomain) {
oPR.aDataDomain[iRow].iPages += iPages;
oPR.aDataDomain[iRow].iHits += iHits;
$bExists = true;
break
}
}
if ($bExists != true) {
oPR.aDataDomain.push({"sURL": sDomain,
"sVisibleURL": aTemp[2].replace(/^www./, ""),
"iPages": iPages,
"iHits": iHits});
}
});
// apply data
oPR.aData.sort(Sort_Pages);
AddPart_PageRefs(oPR, sPage);
}
});
}
function MergeParts_PageRefs()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sURL == oSum.aData[jRow].sURL) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
// merge data domains
for (iRow in oPart.aDataDomain) {
var found = false;
for (jRow in oSum.aDataDomain)
if (oPart.aDataDomain[iRow].sURL == oSum.aDataDomain[jRow].sURL) {
oSum.aDataDomain[jRow].iPages += oPart.aDataDomain[iRow].iPages;
oSum.aDataDomain[jRow].iHits += oPart.aDataDomain[iRow].iHits;
oSum.aDataDomain[jRow].iBW += oPart.aDataDomain[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aDataDomain.push(oPart.aDataDomain[iRow]);
}
}
var foundFirst = false;
var oPageRefs = aStatistics["pagerefs"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oPageRefs[aParts.length + 1] = $.evalJSON($.toJSON(oPageRefs[iIndex]));
foundFirst = true;
} else
mergePart(oPageRefs[aParts.length + 1], oPageRefs[iIndex]);
// Sort
oPageRefs[aParts.length + 1].aData.sort(Sort_Pages);
}
function PopulateData_PageRefsSE(sPage) {
$("#loading").show();
aStatistics["pagerefsse"] = [];
GetPart_PageRefsSE(sPage, aParts[0]);
}
function AddPart_PageRefsSE(oData, sPage) {
iCount = aStatistics["pagerefsse"].push(oData);
if (iCount < aParts.length) {
GetPart_PageRefsSE(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_PageRefsSE(sPage, oPart) {
// create data objects
var oPR = {"iTotalPages": 0, "iTotalHits": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("SEREFERRALS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sReferrer = $(this).attr("id");
var sURL = sReferrer;
var sImage = " ";
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
// find if exists in array
for (var i = 0; i < gc_aSearchEngines.length; i++) {
if (gc_aSearchEngines[i].sCode == sReferrer) {
sReferrer = gc_aSearchEngines[i].sName;
sURL = gc_aSearchEngines[i].sURL;
sImage = "<img src=\"themes/" + sThemeDir + "/searchengines/" + gc_aSearchEngines[i].sImage + ".gif\" alt=\"" + sReferrer + "\" />";
break;
}
}
// increment totals
oPR.iTotalPages += iPages;
oPR.iTotalHits += iHits;
// populate array
oPR.aData.push({"sReferrer": sReferrer,
"sURL": sURL,
"sImage": sImage,
"iPages": iPages,
"iHits": iHits});
});
// apply data
oPR.aData.sort(Sort_Pages);
AddPart_PageRefsSE(oPR, sPage);
}
});
}
function MergeParts_PageRefsSE()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sURL == oSum.aData[jRow].sURL) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
// merge data domains
for (iRow in oPart.aDataDomain) {
var found = false;
for (jRow in oSum.aDataDomain)
if (oPart.aDataDomain[iRow].sURL == oSum.aDataDomain[jRow].sURL) {
oSum.aDataDomain[jRow].iPages += oPart.aDataDomain[iRow].iPages;
oSum.aDataDomain[jRow].iHits += oPart.aDataDomain[iRow].iHits;
oSum.aDataDomain[jRow].iBW += oPart.aDataDomain[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aDataDomain.push(oPart.aDataDomain[iRow]);
}
}
var foundFirst = false;
var oPageRefsSE = aStatistics["pagerefsse"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oPageRefsSE[aParts.length + 1] = $.evalJSON($.toJSON(oPageRefsSE[iIndex]));
foundFirst = true;
} else
mergePart(oPageRefsSE[aParts.length + 1], oPageRefsSE[iIndex]);
// Sort
oPageRefsSE[aParts.length + 1].aData.sort(Sort_Pages);
}
function PopulateData_Pages(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Pages(sPage, aParts[0]);
}
function AddPart_Pages(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Pages(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Pages(sPage, oPart) {
// create data objects
var oP = {iTotalPages: 0, iTotalBW: 0, iTotalEntry: 0, iTotalExit: 0, bHaveTitles: false, aDataPages: [], aDataBW: [], aDataEntry: [], aDataExit: []};
// do ajax call
$.ajax({
type: "GET",
url: XMLURL("PAGES", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
// retrieve totals
var oXMLTotals = $(oXML).find("totals");
oP.iTotalPages = parseInt(oXMLTotals.attr("pages"));
oP.iTotalBW = parseInt(oXMLTotals.attr("bw"));
oP.iTotalEntry = parseInt(oXMLTotals.attr("entry"));
oP.iTotalExit = parseInt(oXMLTotals.attr("exit"));
// have titles (url alias) ?
if (parseInt($(oXML).find('info').attr("haveTitles")))
oP.bHaveTitles = true;
// extract data blocks
oP.aDataPages = ExtractData($(oXML).find('data_pages'));
oP.aDataBW = ExtractData($(oXML).find('data_bw'));
oP.aDataEntry = ExtractData($(oXML).find('data_entry'));
oP.aDataExit = ExtractData($(oXML).find('data_exit'));
// apply data
AddPart_Pages(oP, sPage);
function ExtractData(oXMLBlock) {
var aData = [];
$(oXMLBlock).find('item').each(function() {
aData.push({"sURL": $(this).attr("url"),
"sTitle": $(this).attr("title"),
"iPages": parseInt($(this).attr("pages")),
"iBW": parseInt($(this).attr("bw")),
"iEntry": parseInt($(this).attr("entry")),
"iExit": parseInt($(this).attr("exit"))});
});
return aData;
}
}
});
}
function MergeParts_Pages()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalPages += oPart.iTotalPages;
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sURL == oSum.aData[jRow].sURL) {
oSum.aData[jRow].iPages += oPart.aData[iRow].iPages;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oPages = aStatistics["pages"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oPages[aParts.length + 1] = $.evalJSON($.toJSON(oPages[iIndex]));
foundFirst = true;
} else
mergePart(oPages[aParts.length + 1], oPages[iIndex]);
// Sort
// oPages[aParts.length+1].aData.sort(Sort_Pages);
}
function PopulateData_Robots(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Robots(sPage, aParts[0]);
}
function AddPart_Robots(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Robots(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Robots(sPage, oPart) {
// create data objects
var oR = {"iTotalHits": 0, "iTotalBW": 0, "dtLastVisit": 0, "iTotalRobotsTXT": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("ROBOT", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sRobot = $(this).attr("id");
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
var dtLastVisit = parseInt($(this).attr("lastvisit"));
var iRobotsTXT = parseInt($(this).attr("robotstxt"));
// increment totals
oR.iTotalHits += iHits;
oR.iTotalBW += iBW;
oR.iTotalRobotsTXT += iRobotsTXT;
// populate array
oR.aData.push({"sRobot": sRobot,
"iHits": iHits,
"iBW": iBW,
"dtLastVisit": dtLastVisit,
"iRobotsTXT": iRobotsTXT});
});
// apply data
AddPart_Robots(oR, sPage);
}
});
}
function MergeParts_Robots()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge total hits
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
oSum.iTotalRobotsTXT += oPart.iRobotsTXT;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sRobot == oSum.aData[jRow].sRobot) {
oSum.aData[jRow].iRobotsTXT += oPart.aData[iRow].iRobotsTXT;
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oRobots = aStatistics["robots"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oRobots[aParts.length + 1] = $.evalJSON($.toJSON(oRobots[iIndex]));
foundFirst = true;
} else
mergePart(oRobots[aParts.length + 1], oRobots[iIndex]);
// Sort
// oPages[aParts.length+1].aData.sort(Sort_Pages);
}
function PopulateData_Session(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Session(sPage, aParts[0]);
}
function AddPart_Session(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Session(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Session(sPage, oPart) {
var oS = {"iTotalFreq": 0, "aData": {s1h: 0, s5mn15mn: 0, s15mn30mn: 0, s30s2mn: 0, s0s30s: 0, s2mn5mn: 0, s30mn1h: 0}};
$.ajax({
type: "GET",
url: XMLURL("SESSION", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sRange = ("s" + $(this).attr("range").replace(RegExp("[ +-]"), ""));
oS.aData[sRange] = parseInt($(this).attr("freq"));
// increment totals
oS.iTotalFreq += oS.aData[sRange];
});
// apply data
AddPart_Session(oS, sPage);
}
});
}
function MergeParts_Session()
{
// merge helper
function mergePart(oSum, oPart)
{
oSum.iTotalFreq += oPart.iTotalFreq;
// merge data
for (sRange in oPart.aData)
oSum.aData[sRange] += oPart.aData[sRange];
}
var foundFirst = false;
var oSession = aStatistics["session"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oSession[aParts.length + 1] = $.evalJSON($.toJSON(oSession[iIndex]));
foundFirst = true;
} else
mergePart(oSession[aParts.length + 1], oSession[iIndex]);
// Sort
// oPages[aParts.length+1].aData.sort(Sort_Pages);
}
function PopulateData_Status(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Status(sPage, aParts[0]);
}
function AddPart_Status(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Status(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Status(sPage, oPart) {
// create data objects
var oS = {"iTotalHits": 0, "iTotalBW": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("ERRORS", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sCode = $(this).attr("id");
var sDescription = gc_aHTTPStatus[sCode];
if (typeof gc_aHTTPStatus[sCode] == "undefined") {
sDescription = " ";
}
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
// increment totals
oS.iTotalHits += iHits;
oS.iTotalBW += iBW;
// populate array
oS.aData.push({"sCode": sCode,
"sDescription": sDescription,
"iHits": iHits,
"iBW": iBW});
});
// apply data
oS.aData.sort(Sort_Hits);
AddPart_Status(oS, sPage);
}
});
}
function MergeParts_Status()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge totals
oSum.iTotalHits += oPart.iTotalHits;
oSum.iTotalBW += oPart.iTotalBW;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sCode == oSum.aData[jRow].sCode) {
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
oSum.aData[jRow].iBW += oPart.aData[iRow].iBW;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oStatus = aStatistics["status"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oStatus[aParts.length + 1] = $.evalJSON($.toJSON(oStatus[iIndex]));
foundFirst = true;
} else
mergePart(oStatus[aParts.length + 1], oStatus[iIndex]);
// Sort
oStatus[aParts.length + 1].aData.sort(Sort_Hits);
}
function PopulateData_Status404(sPage) {
$("#loading").show();
aStatistics["status404"] = [];
GetPart_Status404(sPage, aParts[0]);
}
function AddPart_Status404(oData, sPage) {
iCount = aStatistics["status404"].push(oData);
if (iCount < aParts.length) {
GetPart_Status404(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Status404(sPage, oPart) {
// create data objects
var oS = {"iTotalHits": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("SIDER_404", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
$(oXML).find('item').each(function() {
// collect values
var sURL = $(this).attr("url");
var iHits = parseInt($(this).attr("hits"));
var sReferrer = $(this).attr("referrer");
// increment totals
oS.iTotalHits += iHits;
// populate array
oS.aData.push({"sURL": sURL.split("/").join("​/").split("-").join("-​").split("_").join("_​"),
"iHits": iHits,
"sReferrer": sReferrer,
"sReferrerVisible": sReferrer.split("/").join("​/").split("-").join("-​").split("_").join("_​")});
});
// apply data
oS.aData.sort(Sort_Hits);
AddPart_Status404(oS, sPage);
}
});
}
function MergeParts_Status404()
{
// merge helper
function mergePart(oSum, oPart)
{
// merge totals
oSum.iTotalHits += oPart.iTotalHits;
// merge data
for (iRow in oPart.aData) {
var found = false;
for (jRow in oSum.aData)
if (oPart.aData[iRow].sURL == oSum.aData[jRow].sURL) {
oSum.aData[jRow].iHits += oPart.aData[iRow].iHits;
found = true;
break;
}
if (!found)
oSum.aData.push(oPart.aData[iRow]);
}
}
var foundFirst = false;
var oStatus404 = aStatistics["status404"];
for (iIndex in aParts)
if (aParts[iIndex].active)
if (!foundFirst) { // use first active part as base
// deep copy
oStatus404[aParts.length + 1] = $.evalJSON($.toJSON(oStatus404[iIndex]));
foundFirst = true;
} else
mergePart(oStatus404[aParts.length + 1], oStatus404[iIndex]);
// Sort
oStatus404[aParts.length + 1].aData.sort(Sort_Hits);
}
function PopulateData_ThisMonth(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_ThisMonth(sPage, aParts[0]);
}
function AddPart_ThisMonth(oData, sPage) {
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_ThisMonth(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_ThisMonth(sPage, oPart) {
// create data objects
var oTM = {"iTotalPages": 0, "iTotalHits": 0, "iTotalBW": 0, "iTotalVisits": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("DAY", oPart.name),
success: function(oXML) {
// if (oXML) alert(oXML); else alert("no xml");
CheckLastUpdate(oXML);
var aTemp1 = [];
var iMaxDate = 0;
$(oXML).find('item').each(function() {
// collect values
var sDate = $(this).attr("date");
var iVisits = parseInt($(this).attr("visits"));
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
// increment totals
oTM.iTotalVisits += iVisits;
oTM.iTotalPages += iPages;
oTM.iTotalHits += iHits;
oTM.iTotalBW += iBW;
// create javascript date
dtDate = new Date(sDate.substr(0, 4),
(parseInt(StripLeadingZeroes(sDate.substr(4, 2))) - 1),
sDate.substr(6, 2));
// populate array
aTemp1.push({"dtDate": dtDate,
"iVisits": iVisits,
"iPages": iPages,
"iHits": iHits,
"iBW": iBW});
dtMaxDate = dtDate;
});
// populate complete array (including empty values)
var aTemp2 = [];
var iPointer = 0;
for (var iIndex = 0; iIndex < dtMaxDate.getDate(); iIndex++) {
dtExpectedDate = new Date(dtMaxDate.getFullYear(), dtMaxDate.getMonth(), (iIndex + 1));
if ((aTemp1.length > iPointer) && (aTemp1[iPointer].dtDate.valueOf() == dtExpectedDate.valueOf())) {
aTemp2.push({"dtDate": new Date(dtMaxDate.getFullYear(), dtMaxDate.getMonth(), (iIndex + 1)),
"iVisits": aTemp1[iPointer].iVisits,
"iPages": aTemp1[iPointer].iPages,
"iHits": aTemp1[iPointer].iHits,
"iBW": aTemp1[iPointer].iBW});
iPointer++;
} else {
aTemp2.push({"dtDate": new Date(dtMaxDate.getFullYear(), dtMaxDate.getMonth(), (iIndex + 1)),
"iVisits": 0,
"iPages": 0,
"iHits": 0,
"iBW": 0});
}
}
// apply data
oTM.aData = aTemp2;
AddPart_ThisMonth(oTM, sPage);
}
});
}
function PopulateData_Time(sPage) {
$("#loading").show();
aStatistics[sPage.split(".")[0]] = [];
GetPart_Time(sPage, aParts[0]);
}
function AddPart_Time(oData, sPage)
{
iCount = aStatistics[sPage.split(".")[0]].push(oData);
if (iCount < aParts.length) {
GetPart_Time(sPage, aParts[iCount]);
} else {
$("#loading").hide();
DrawPage(sPage);
}
}
function GetPart_Time(sPage, oPart)
{
// create data objects
var oT = {"iTotalPages": 0, "iTotalHits": 0, "iTotalBW": 0, "iTotalNVPages": 0, "iTotalNVHits": 0, "iTotalNVBW": 0, "aData": []};
$.ajax({
type: "GET",
url: XMLURL("TIME", oPart.name),
success: function(oXML) {
CheckLastUpdate(oXML);
var aTemp = [];
if ($(oXML).find('item').length > 0) {
$(oXML).find('item').each(function() {
// collect values
var iHour = parseInt($(this).attr("hour"));
var iPages = parseInt($(this).attr("pages"));
var iHits = parseInt($(this).attr("hits"));
var iBW = parseInt($(this).attr("bw"));
var iNVPages = parseInt($(this).attr("notviewedpages"));
var iNVHits = parseInt($(this).attr("notviewedhits"));
var iNVBW = parseInt($(this).attr("notviewedbw"));
// increment totals
oT.iTotalPages += iPages;
oT.iTotalHits += iHits;
oT.iTotalBW += iBW;
oT.iTotalNVPages += iPages;
oT.iTotalNVHits += iHits;
oT.iTotalNVBW += iBW;
// populate array
oT.aData.push({"iHour": iHour,
"iPages": iPages,
"iHits": iHits,
"iBW": iBW,
"iNVPages": iNVPages,
"iNVHits": iNVHits,
"iNVBW": iNVBW});
});
// apply data
AddPart_Time(oT, sPage);
} else
AddPart_Time(null, sPage);
}
});
}
function RedrawTable_Keyphrases(sParam, sValue) {
oPaging.oKeyphrases[sParam] = sValue;
$(".tablePie").html(Paging_Keyphrases());
}
function RedrawTable_Keywords(sParam, sValue) {
oPaging.oKeywords[sParam] = sValue;
$(".tablePie").html(Paging_Keywords());
}
function SafeDivide(iFirst, iSecond) {
if (iSecond != 0) {
return (iFirst / iSecond);
} else {
return 0;
}
}
function ShowTools(sID) {
if (arguments.length > 0) {
sToolID = sID;
}
// loop through items
if ($("#tools .tool:visible").size() > 0) {
$("#tools .tool:visible").each(function() {
if ($(this).attr("id") == sToolID) {
$(this).stop().slideUp(350);
} else {
$(this).stop().slideUp(350, ShowTools);
}
});
} else {
$("#" + sToolID).stop().slideDown(350);
}
}
function Sort_Freq(a, b) {
return b.iFreq - a.iFreq;
}
function Sort_Hits(a, b) {
return b.iHits - a.iHits;
}
function Sort_Pages(a, b) {
return b.iPages - a.iPages;
}
function Sort_Hits(a, b) {
return b.iHits - a.iHits;
}
function Sort_Phrase(a, b) {
return ((a.sPhrase < b.sPhrase) ? -1 : ((a.sPhrase > b.sPhrase) ? 1 : 0));
}
function Sort_Word(a, b) {
return ((a.sWord < b.sWord) ? -1 : ((a.sWord > b.sWord) ? 1 : 0));
}
function TagCloud(sType, oData, iMaxCount) {
// create array of top tags, sorted alpahabetically
var aTag = [];
var iCount = oData.aData.length;
if (iCount > iMaxCount) {
iCount = iMaxCount;
}
for (var i = 0; i < iCount; i++) {
aTag.push(oData.aData[i]);
}
if (sType == "sWord") {
aTag.sort(Sort_Word);
} else {
aTag.sort(Sort_Phrase);
}
// apply sizes
aHTML = [];
var iMaxSize = 60;
var iMinSize = 11;
var iDiff = (iMaxSize - iMinSize);
for (var i = 0; i < iCount; i++) {
var iSize = (Math.round((aTag[i].iFreq / oData.iMaxFreq) * iDiff) + iMinSize);
aHTML.push("<span style=\"font-size: " + iSize + "px; line-height: " + Math.round(iSize * 1.35) + "px;\">" + aTag[i][sType] + "</span>");
}
return aHTML.join("\n");
}
function UpdateSite() {
$("#loading").show();
$.ajax({
type: "POST",
url: sUpdateFilename,
data: ("config=" + g_sConfig + "&pass=" + MD5($("#password").val())),
success: function(oXML) {
switch ($(oXML).find('result:eq(0)').attr("type")) {
case "bad_password":
$("#loading").hide();
alert(Lang("The password you entered was incorrect."));
break;
case "updated":
var sURL = "?config=" + g_sConfig + "&year=" + g_iYear + "&month=" + g_iMonth + "&view=" + g_sCurrentView + "&lang=" + g_sLanguage;
self.location.href = sURL;
break;
default:
$("#loading").hide();
}
}
});
}
function UpdateSiteKeyUp(event) {
if (event.keyCode == 13) {
UpdateSite();
}
}
function XMLURL(sPage, part) {
var sURL = "";
if (g_bUseStaticXML == true) {
switch (sPage) {
case "ALLMONTHS":
sURL = ("static/jawstats." + g_sConfig + ".allmonths.xml?cache=" + g_dtLastUpdate);
break;
default:
if (g_iMonth < 10) {
sURL = ("static/jawstats" + g_iYear + "0" + g_iMonth + "." + g_sConfig + "." + sPage.toLowerCase() + ".xml?cache=" + g_dtLastUpdate);
} else {
sURL = ("static/jawstats" + g_iYear + g_iMonth + "." + g_sConfig + "." + sPage.toLowerCase() + ".xml?cache=" + g_dtLastUpdate);
}
}
} else {
switch (sPage) {
case "ALLMONTHS":
sURL = ("xml_history.php?config=" + g_sConfig);
break;
case "PAGES":
sURL = ("xml_pages.php?config=" + g_sConfig + "&year=" + g_iYear + "&month=" + g_iMonth);
break;
case "VISITOR":
sURL = ("xml_stats.php?config=" + g_sConfig + "§ion=" + sPage + "&year=" + g_iYear + "&month=" + g_iMonth + "&max=100");
break;
default:
sURL = ("xml_stats.php?config=" + g_sConfig + "§ion=" + sPage + "&year=" + g_iYear + "&month=" + g_iMonth);
}
}
if (!(part === undefined) && part.length > 0)
sURL += "&part=" + part;
// no-cache, for IE:
sURL += "&uncache=" + new Date().getTime();
return sURL;
}