%PDF- %PDF-
Direktori : /www/varak.net/awstats.varak.net/js/ |
Current File : /www/varak.net/awstats.varak.net/js/jawstats_mail.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. */ var oPaging = { oKeywords: {iCurrPage: 0, iRowCount: 0, iRowsPerPage: 15, sSort: "freqDESC"}, oKeyphrases: {iCurrPage: 0, iRowCount: 0, iRowsPerPage: 15, sSort: "freqDESC"} }; function DrawGraph_EachYear() { var aItem = []; var aValue = []; var aInitial = []; var cur_emails = []; oAllMonths = aStatistics["allmonths"]; for (part_idx in oAllMonths) if (aParts[part_idx].active) { aValue[part_idx] = []; cur_emails[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) cur_emails[part_idx] += parseInt(oAllMonths[part_idx].aData[iIndex].iPages); } else { aItem.push(cur_year); aInitial.push(cur_year.toString().substr(2)); for (part_idx in oAllMonths) if (aParts[part_idx].active) aValue.push(cur_emails[part_idx]); cur_year = year; for (part_idx in oAllMonths) if (aParts[part_idx].active) cur_emails[part_idx] = parseInt(oAllMonths[part_idx].aData[iIndex].iPages); } } 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_emails[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() { 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) aValue[part_idx].push(oAllMonths[part_idx].aData[iIndex].iPages); } DrawGraph(aItem, aValue, [], "time"); } function DrawGraph_ThisMonth() { 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; } } 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].iPages; 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, aValue, aInitial); } function DrawGraph_Time() { 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) aValue[part_idx].push(oTime[part_idx].aData[iRow].iPages); } 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; } PageLayout_AllMonths(aPage[1]); break; case "country": if (typeof aStatistics[aPage[0]] == "undefined") { PopulateData_Country(sPage); return false; } MergeParts_Country(); PageLayout_Country(aPage[1]); break; case "hosts": if (typeof aStatistics[aPage[0]] == "undefined") { PopulateData_Hosts(sPage); return false; } MergeParts_Hosts(); PageLayout_EmailHosts(aPage[1]); break; case "senders": if (typeof aStatistics[aPage[0]] == "undefined") { PopulateData_Senders(sPage); return false; } MergeParts_Senders(); PageLayout_EmailSenders(aPage[1]); break; case "recipients": if (typeof aStatistics[aPage[0]] == "undefined") { PopulateData_Recipients(sPage); return false; } MergeParts_Recipients(); PageLayout_EmailRecipients(aPage[1]); break; case "status": 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_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_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_Emails(aData, iTotal, sItemName) { var aItem = []; var aValue = []; var iRunningTotal = 0; var iCount = 0; for (var iIndex in aData) { if (iCount < 6) { aItem.push(aData[iIndex].sAddress); aValue.push(aData[iIndex][sItemName]); iRunningTotal += aData[iIndex][sItemName]; } iCount++; } if (iTotal > iRunningTotal) { aItem.push(Lang("Other Adresses")); aValue.push(iTotal - iRunningTotal); } DrawPie(iTotal, 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 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 Emails") + "</th>" + "<th width=\"12%\">" + Lang("Emails per Day") + "</th>" + "<th width=\"12%\" class=\"noborder\">" + Lang("BW") + "</th>" + "</tr></thead>\n" + "<tbody>"; oAllMonths = aStatistics["allmonths"]; // create table body aHTML = new Array(); var iTotalEmails = 0; var iTotalBW = 0; var iAnnualEmails = 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 iEmails = SumParts(oAllMonths, "iPages", iRow); var iBW = SumParts(oAllMonths, "iBW", iRow); var iDaysInMonth = parseFloat(oRow.iDaysInMonth); // sum totals iTotalEmails += iEmails; iTotalBW += iBW; iAnnualEmails += iEmails; 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(iEmails, 0) + "</td>" + "<td class=\"right\">" + NumberFormat((iEmails / iDaysInMonth), 1) + "</td>" + "<td class=\"right\">" + DisplayBandwidth(iBW) + "</td>" + "</tr>\n"; aHTML.push(sHTMLRow); break; case "year": //if ((iCurrentYear != oRow.iYear) || (iRow == (oAllMonths.aData.length - 1))) { if ((oRow.iMonth == 12) || (iRow == (oAllMonths[0].aData.length - 1))) { var sHTMLRow = "<tr>" + "<td>" + iCurrentYear + "</td>" + "<td class=\"right\">" + NumberFormat(iAnnualEmails) + "</td>" + "<td class=\"right\">" + NumberFormat((iAnnualEmails / oAllMonths[0].aYearDayCount[iCurrentYear]), 1) + "</td>" + "<td class=\"right\">" + DisplayBandwidth(iAnnualBW) + "</td>" + "</tr>\n"; aHTML.push(sHTMLRow); // reset values iAnnualEmails = 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(iTotalEmails, 0) + "</td>" + "<td class=\"noborder right\"> </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_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("EMails") + "</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_EmailHost(aData) { oHosts = aStatistics["hosts"][aParts.length + 1]; // get values var iTotalEmails = oHosts.iTotalEmails; var iTotalBW = oHosts.iTotalBW; // create header var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" + "<thead><tr>" + "<th>" + Lang("Host") + "</th>" + "<th>" + Lang("Emails") + "</th>" + "<th> </th>" + "<th>" + Lang("Bandwidth") + "</th>" + "<th class=\"noborder\"> </th>" + "</tr></thead>\n" + "<tbody>"; // create table body var aHTML = []; for (var iRow in aData) { aHTML.push("<tr>" + "<td>" + aData[iRow].sAddress + "</td>" + "<td class=\"right\">" + NumberFormat(aData[iRow].iEmails, 0) + "</td>" + "<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iEmails, iTotalEmails) * 100, 1) + "%</td>" + "<td class=\"right\">" + DisplayBandwidth(aData[iRow].iBW) + "</td>" + "<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iBW, iTotalBW) * 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_EmailSender(aData) { var oSenders = aStatistics["senders"][aParts.length + 1]; // get values var iTotalEmails = oSenders.iTotalEmails; var iTotalBW = oSenders.iTotalBW; // create header var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" + "<thead><tr>" + "<th>" + Lang("Sender") + "</th>" + "<th>" + Lang("Emails") + "</th>" + "<th> </th>" + "<th>" + Lang("Bandwidth") + "</th>" + "<th class=\"noborder\"> </th>" + "</tr></thead>\n" + "<tbody>"; // create table body var aHTML = []; for (var iRow in aData) { aHTML.push("<tr>" + "<td>" + aData[iRow].sAddress + "</td>" + "<td class=\"right\">" + NumberFormat(aData[iRow].iEmails, 0) + "</td>" + "<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iEmails, iTotalEmails) * 100, 1) + "%</td>" + "<td class=\"right\">" + DisplayBandwidth(aData[iRow].iBW) + "</td>" + "<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iBW, iTotalBW) * 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_EmailRecipient(aData) { var oRecipients = aStatistics["recipients"][aParts.length + 1]; // get values var iTotalEmails = oRecipients.iTotalEmails; var iTotalBW = oRecipients.iTotalBW; // create header var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" + "<thead><tr>" + "<th>" + Lang("Recipient") + "</th>" + "<th>" + Lang("Emails") + "</th>" + "<th> </th>" + "<th>" + Lang("Bandwidth") + "</th>" + "<th class=\"noborder\"> </th>" + "</tr></thead>\n" + "<tbody>"; // create table body var aHTML = []; for (var iRow in aData) { aHTML.push("<tr>" + "<td>" + aData[iRow].sAddress + "</td>" + "<td class=\"right\">" + NumberFormat(aData[iRow].iEmails, 0) + "</td>" + "<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iEmails, iTotalEmails) * 100, 1) + "%</td>" + "<td class=\"right\">" + DisplayBandwidth(aData[iRow].iBW) + "</td>" + "<td class=\"right\">" + NumberFormat(SafeDivide(aData[iRow].iBW, iTotalBW) * 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_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("Messages") + "</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_ThisMonth() { var oThisMonth = aStatistics["thismonth"]; // get values iTotalEmails = 0; iTotalBW = 0; aData = null; for (iIndex in aParts) if (aParts[iIndex].active) { // get values iTotalEmails += oThisMonth[iIndex].iTotalPages; 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%\" class=\"noborder\">" + Lang("Emails") + "</th>" + "<th width=\"11%\">" + Lang("per Mail") + "</th>" + "<th width=\"9%\" class=\"noborder\">" + Lang("BW") + "</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 iEmails = SumParts(oThisMonth, "iPages", 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(iEmails, 0) + "</td>" + "<td class=\"right\">" + DisplayBandwidth((SafeDivide(iBW, iEmails))) + "</td>" + "<td class=\"noborder right\">" + DisplayBandwidth(iBW) + "</td>" + "</tr>\n"); } // output if (aHTML.length > 0) { sHTML = (sHTML + aHTML.join("\n") + "</tbody><tfoot><tr>" + "<td colspan=\"3\" class=\"noborder right\">" + NumberFormat(iTotalEmails, 0) + "</td>" + "<td class=\"noborder right\">" + DisplayBandwidth(iTotalBW) + "</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() { var oTime = aStatistics["time"]; // get values var iTotalEmails = 0; var iTotalBW = 0; var iTotalNVEmails = 0; var iTotalNVBW = 0; aData = null; for (iIndex in aParts) if (aParts[iIndex].active) { iTotalEmails += oTime[iIndex].iTotalPages; iTotalBW += oTime[iIndex].iTotalBW; iTotalNVEmails += oTime[iIndex].iTotalNVPages; iTotalNVBW += oTime[iIndex].iTotalNVBW; if (aData == null) aData = oTime[iIndex].aData; } // create header var sHTML = "<table class=\"tablesorter\" cellspacing=\"0\">\n" + "<thead><tr>" + "<th>" + Lang("Hour") + "</th>" + "<th class=\"noborder\">" + Lang("Emails") + "</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>" + "</tr></thead>\n" + "<tbody>"; // create table body var aHTML = []; var iAvgEmails = (iTotalEmails / 24); var iAvgBW = (iTotalBW / 24); for (var iRow in aData) { var oRow = aData[iRow]; var sHour = oRow.iHour; if (oRow.iHour < 10) { sHour = ("0" + sHour) } // +/- values var sEmailsDiff = Difference(SumParts(oTime, "iPages", iRow), iAvgEmails); var sBWDiff = Difference(SumParts(oTime, "iBW", iRow), iAvgBW); // create table aHTML.push("<tr>" + "<td>" + sHour + "</td>" + "<td class=\"right\">" + NumberFormat(SumParts(oTime, "iPages", iRow), 0) + "</td>" + "<td class=\"right\">" + NumberFormat((SafeDivide(SumParts(oTime, "iPages", iRow), iTotalEmails) * 100), 1) + "%</td>" + "<td class=\"right\">" + sEmailsDiff + "</td>" + "<td class=\"right\">" + DisplayBandwidth(SumParts(oTime, "iBW", iRow)) + "</td>" + "<td class=\"right\">" + NumberFormat((SafeDivide(SumParts(oTime, "iBW", iRow), iTotalBW) * 100), 1) + "%</td>" + "<td class=\"right\">" + sBWDiff + "</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(iTotalEmails, 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>" + "</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=\"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 id=\"calTotDay0\" 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=\"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 id=\"calAvgDay0\" 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 += aDay[iPart][iDayNumber].iTotal; ; } } // modify table if (sDataItem == "iBW") { sHTML = ("<div class=\"date\">" + oRow.dtDate.getDate() + "</div><div class=\"value\">" + DisplayBandwidth(oRow[sDataItem]) + "</div>"); } else { sHTML = ("<div class=\"date\">" + oRow.dtDate.getDate() + "</div><div class=\"value\">" + NumberFormat(oRow[sDataItem], 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>"); } } } // 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>"); } } } // 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(iTotal) + "</div>"); $("#calAvgMonth").html("<div><span>" + Lang("Average") + ":</span> " + DisplayBandwidth(iTotal / oRow.dtDate.getDate()) + "</div>"); } else { $("#calTotMonth").html("<div><span>" + Lang("Total") + ":</span> " + NumberFormat(iTotal, 0) + "</div>"); $("#calAvgMonth").html("<div><span>" + Lang("Average") + ":</span> " + NumberFormat((iTotal / 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("Emails each Month") + "</h2>" + DrawSubMenu("allmonths", "Emails each Month") + "<div id=\"graph\" class=\"graph\"> </div>"; break; case "year": var sHTML = "<h2>" + Lang("Emails each Year") + "</h2>" + DrawSubMenu("allmonths", "Emails 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(); } else { DrawGraph_EachYear(); } } function PageLayout_Country(sPage) { switch (sPage) { case "all": var aTable = DrawTable_Country(); var sHTML = "<h2>" + Lang("Emails 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 Emails") + "</h2>"; } else { var sHTML = "<h2>" + Lang("Emails 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); 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']}); } $("#content").fadeIn(g_iFadeSpeed); DrawPie_Country(sPage); break; } } function PageLayout_EmailHosts(sPage) { var oHosts = aStatistics["hosts"][aParts.length + 1]; var aData = oHosts.aData; var iPieTotal = oHosts.iTotalEmails; var sPieItem = "iEmails"; var aTable = DrawTable_EmailHost(aData); var sHTML = "<h2>" + Lang("Email Hosts") + "</h2>" + /* DrawSubMenu("emails", 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: { 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'] }); $(".tablesorter").tablesorter({widgets: ['zebra']}); } DrawPie_Emails(aData, iPieTotal, sPieItem); } function PageLayout_EmailSenders(sPage) { var oSenders = aStatistics["senders"][aParts.length + 1]; var aData = oSenders.aData; var iPieTotal = oSenders.iTotalEmails; var sPieItem = "iEmails"; var aTable = DrawTable_EmailSender(aData); var sHTML = "<h2>" + Lang("Email Senders") + "</h2>" + /* DrawSubMenu("emails", sSubMenu) + */ "<div id=\"pie\" class=\"pie\"> </div><div class=\"tablePie\">" + aTable[1] + "</div>"; $("#content").fadeIn(g_iFadeSpeed); $("#content").html(sHTML); if (aTable[0] == true) { // $(".tablesorter").tablesorter({ headers: { 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'] }); $(".tablesorter").tablesorter({widgets: ['zebra']}); } DrawPie_Emails(aData, iPieTotal, sPieItem); } function PageLayout_EmailRecipients(sPage) { var oRecipients = aStatistics["recipients"][aParts.length + 1]; var aData = oRecipients.aData; var iPieTotal = oRecipients.iTotalEmails; var sPieItem = "iEmails"; var aTable = DrawTable_EmailRecipient(aData); var sHTML = "<h2>" + Lang("Email Recipients") + "</h2>" + /* DrawSubMenu("emails", 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: { 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'] }); $(".tablesorter").tablesorter({widgets: ['zebra']}); } DrawPie_Emails(aData, iPieTotal, sPieItem); } function PageLayout_Status(sPage) { switch (sPage) { /* case "404": var aTable = DrawTable_Status404(); var sHTML = "<h2>" + Lang("SMTP 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("SMTP Status Codes") + "</h2>" + DrawSubMenu("status", "Status Codes") + "<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 } }, sortList: [[2,1]],textExtraction:function(node){return node.innerHTML.replace(',', '');}, widgets: ['zebra'] }); $(".tablesorter").tablesorter({widgets: ['zebra']}); } DrawPie_Status(sPage); } } function PageLayout_ThisMonth(sPage) { switch (sPage) { case "all": var aTable = DrawTable_ThisMonth(); var sHTML = "<h2>" + Lang("Emails 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(); break; case "emails": Misc_ThisMonthCalendar("Calendar of Emails this Month", "Calendar of Emails", "iPages"); break; case "bandwidth": Misc_ThisMonthCalendar("Calendar of Bandwidth Usage this Month", "Calendar of Bandwidth Usage", "iBW"); break; } } function PageLayout_Time(sPage) { var aTable = DrawTable_Time(sPage); var sHTML = "<h2>" + Lang("Emails 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(); } 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 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); disabled until update problem is fixed. only affects this call. var aTemp = []; var iCurrentYear = 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": $(this).attr("visits"), "iUniques": $(this).attr("uniques"), "iPages": $(this).attr("pages"), "iHits": $(this).attr("hits"), "iBW": $(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); } }); } 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_aSMTPStatus[sCode]; if (typeof gc_aSMTPStatus[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 total hits 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_Hosts(sPage) { $("#loading").show(); aStatistics[sPage.split(".")[0]] = []; GetPart_Hosts(sPage, aParts[0]); } function AddPart_Hosts(oData, sPage) { iCount = aStatistics[sPage.split(".")[0]].push(oData); if (iCount < aParts.length) { GetPart_Hosts(sPage, aParts[iCount]); } else { $("#loading").hide(); DrawPage(sPage); } } function GetPart_Hosts(sPage, oPart) { // create data objects var oTM = {"iTotalEmails": 0, "iTotalBW": 0, "aData": []}; $.ajax({ type: "GET", url: XMLURL("VISITOR", oPart.name), success: function(oXML) { CheckLastUpdate(oXML); var aTemp1 = []; var iMaxDate = 0; var iTotalEmails = 0; var iTotalBW = 0; $(oXML).find('item').each(function() { // collect values var sAddress = $(this).attr("address"); var iEmails = parseInt($(this).attr("pages")); var iBW = parseInt($(this).attr("bw")); var sLastVisit = $(this).attr("lastvisit"); // 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({"sAddress": sAddress, "iEmails": iEmails, "iBW": iBW}); //dtMaxDate = dtDate; iTotalEmails += iEmails; iTotalBW += iBW; }); oTM.aData = aTemp1; oTM.iTotalEmails = iTotalEmails; oTM.iTotalBW = iTotalBW; AddPart_Hosts(oTM, sPage); }}); } function MergeParts_Hosts() { // merge helper function mergePart(oSum, oPart) { // merge total hits oSum.iTotalEmails += oPart.iTotalEmails; 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].iEmails += oPart.aData[iRow].iEmails; oSum.aData[jRow].iBW += oPart.aData[iRow].iBW; found = true; break; } if (!found) oSum.aData.push(oPart.aData[iRow]); } } var foundFirst = false; var oHost = aStatistics["hosts"]; for (iIndex in aParts) if (aParts[iIndex].active) if (!foundFirst) { // use first active part as base // deep copy oHost[aParts.length + 1] = $.evalJSON($.toJSON(oHost[iIndex])); foundFirst = true; } else mergePart(oHost[aParts.length + 1], oHost[iIndex]); // Sort oHost[aParts.length + 1].aData.sort(Sort_Emails); } function PopulateData_Senders(sPage) { $("#loading").show(); aStatistics[sPage.split(".")[0]] = []; GetPart_Senders(sPage, aParts[0]); } function AddPart_Senders(oData, sPage) { iCount = aStatistics[sPage.split(".")[0]].push(oData); if (iCount < aParts.length) { GetPart_Senders(sPage, aParts[iCount]); } else { $("#loading").hide(); DrawPage(sPage); } } function GetPart_Senders(sPage, oPart) { // create data objects var oTM = {"iTotalEmails": 0, "iTotalBW": 0, "aData": []}; $.ajax({ type: "GET", url: XMLURL("EMAILSENDER", oPart.name), success: function(oXML) { CheckLastUpdate(oXML); var aTemp1 = []; var iMaxDate = 0; var iTotalEmails = 0; var iTotalBW = 0; $(oXML).find('item').each(function() { // collect values var sAddress = $(this).attr("address"); var iEmails = parseInt($(this).attr("emails")); var iBW = parseInt($(this).attr("bw")); var sLastVisit = $(this).attr("lastvisit"); // 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({"sAddress": sAddress, "iEmails": iEmails, "iBW": iBW}); //dtMaxDate = dtDate; iTotalEmails += iEmails; iTotalBW += iBW; }); oTM.aData = aTemp1; oTM.iTotalEmails = iTotalEmails; oTM.iTotalBW = iTotalBW; AddPart_Senders(oTM, sPage); }}); } function MergeParts_Senders() { // merge helper function mergePart(oSum, oPart) { // merge total hits oSum.iTotalEmails += oPart.iTotalEmails; 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].iEmails += oPart.aData[iRow].iEmails; oSum.aData[jRow].iBW += oPart.aData[iRow].iBW; found = true; break; } if (!found) oSum.aData.push(oPart.aData[iRow]); } } var foundFirst = false; var oSenders = aStatistics["senders"]; for (iIndex in aParts) if (aParts[iIndex].active) if (!foundFirst) { // use first active part as base // deep copy oSenders[aParts.length + 1] = $.evalJSON($.toJSON(oSenders[iIndex])); foundFirst = true; } else mergePart(oSenders[aParts.length + 1], oSenders[iIndex]); // Sort oSenders[aParts.length + 1].aData.sort(Sort_Emails); } function PopulateData_Recipients(sPage) { $("#loading").show(); aStatistics[sPage.split(".")[0]] = []; GetPart_Recipients(sPage, aParts[0]); } function AddPart_Recipients(oData, sPage) { iCount = aStatistics[sPage.split(".")[0]].push(oData); if (iCount < aParts.length) { GetPart_Recipients(sPage, aParts[iCount]); } else { $("#loading").hide(); DrawPage(sPage); } } function GetPart_Recipients(sPage, oPart) { // create data objects var oTM = {"iTotalEmails": 0, "iTotalBW": 0, "aData": []}; $.ajax({ type: "GET", url: XMLURL("EMAILRECEIVER", oPart.name), success: function(oXML) { CheckLastUpdate(oXML); var aTemp1 = []; var iMaxDate = 0; var iTotalEmails = 0; var iTotalBW = 0; $(oXML).find('item').each(function() { // collect values var sAddress = $(this).attr("address"); var iEmails = parseInt($(this).attr("emails")); var iBW = parseInt($(this).attr("bw")); var sLastVisit = $(this).attr("lastvisit"); // 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({"sAddress": sAddress, "iEmails": iEmails, "iBW": iBW}); //dtMaxDate = dtDate; iTotalEmails += iEmails; iTotalBW += iBW; }); oTM.aData = aTemp1; oTM.iTotalEmails = iTotalEmails; oTM.iTotalBW = iTotalBW; AddPart_Recipients(oTM, sPage); }}); } function MergeParts_Recipients() { // merge helper function mergePart(oSum, oPart) { // merge total hits oSum.iTotalEmails += oPart.iTotalEmails; 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].iEmails += oPart.aData[iRow].iEmails; oSum.aData[jRow].iBW += oPart.aData[iRow].iBW; found = true; break; } if (!found) oSum.aData.push(oPart.aData[iRow]); } } var foundFirst = false; var oRecipients = aStatistics["recipients"]; for (iIndex in aParts) if (aParts[iIndex].active) if (!foundFirst) { // use first active part as base // deep copy oRecipients[aParts.length + 1] = $.evalJSON($.toJSON(oRecipients[iIndex])); foundFirst = true; } else mergePart(oRecipients[aParts.length + 1], oRecipients[iIndex]); // Sort oRecipients[aParts.length + 1].aData.sort(Sort_Emails); } 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) { 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[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 = []; $(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); } }); } 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_Emails(a, b) { return b.iEmails - a.iEmails; } 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 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 "EMAILSENDER": sURL = ("xml_stats.php?config=" + g_sConfig + "§ion=" + sPage + "&year=" + g_iYear + "&month=" + g_iMonth + "&max=80"); break; case "EMAILRECEIVER": sURL = ("xml_stats.php?config=" + g_sConfig + "§ion=" + sPage + "&year=" + g_iYear + "&month=" + g_iMonth + "&max=80"); 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; }