__section__
default
__description__

__title__

__page__
stats
__lang__
en_US
__name__
calculate
__template__
[%
   period  = form.stats_days ==  93 ? 'Quarterly' :
             form.stats_days ==  14 ? 'Biweekly' :
             form.stats_days ==   7 ? 'Weekly' :
             'Forever';

   byweek = 0;
   IF (period == 'Quarterly' || period == 'Forever');
      byweek = 1;
   END;

   days = data.0.data.keys.sort;

   IF (byweek);
      daycount = 0;
      newdays = [];
      FOREACH day = days;
         daycount = daycount + 1;
         IF (!(daycount mod 7)); # || (loop.index == loop.max));
            newdays.push(day);
         END;
      END;
      days = newdays;
   END;

   alldata = [days];
   plotdata = [[]];
   alltypes = [];
   mytotal = {};
   hasneg = 0;
   haspos = 0;

   IF (form.type == 'areapercentage');
      FOREACH this = data;
         daycount = 0;
         daytotal = 0;
         FOREACH day = this.data.keys.sort;
            daycount = daycount + 1;
            mytotal.${day} = (mytotal.${day} || 0) + this.data.${day};

            IF (byweek && (daycount mod 7) && (loop.index != loop.max));
               daytotal = daytotal + mytotal.${day};
               NEXT;
            ELSIF (byweek);
               mytotal.${day} = daytotal;
               IF (form.byweekavg);
                  thisday = daycount mod 7;
                  thisday = thisday || 7;
                  mytotal.${day} = mytotal.${day} div thisday;
               END;
               daytotal = 0;
            END;
         END;
      END;
   END;

   FOREACH this = data;
      nums = [];
      daycount = 0;
      daytotal = 0;
      FOREACH day = this.data.keys.sort;
         daycount = daycount + 1;
         mynum = this.data.${day};

         IF (byweek && (daycount mod 7) && (loop.index != loop.max));
            daytotal = daytotal + mynum;
            NEXT;
         ELSIF (byweek);
            mynum = daytotal;
            IF (form.byweekavg);
               thisday = daycount mod 7;
               thisday = thisday || 7;
               mynum = mynum div thisday;
            END;
            daytotal = 0;
         END;

         IF (form.type == 'areapercentage');
            IF mytotal.${day};
               mynum = mynum / mytotal.${day} * 100;
            ELSE;
               mynum = 0;
            END;
         END;

         nums.push(mynum);

         IF (!hasneg && mynum < 0);
            hasneg = 1;
         END;
         IF (!haspos && mynum > 0);
            haspos = 1;
         END;

      END;

      alldata.push(nums);
      plotdata.push([]);
      plotdata.${plotdata.max}.${alldata.0.max} = nums.${alldata.0.max};
      mytype = this.label || this.type;
      IF (form.op != 'table' && form.op != 'csv');
         mytype = mytype _ " (" _ Slash.commify(nums.${alldata.0.max}) _ ")";
      END;
      alltypes.push(mytype);
   END;

   IF (form.type != 'areastackedindex' && form.showtotal);
      nums = [];
      USE dataloop = iterator(alldata);
      FOREACH this = dataloop;
         thisindex = dataloop.index;
         IF (thisindex > 0);
            USE thisloop = iterator(this);
            FOREACH mynum = thisloop;
               currindex = thisloop.index;
               nums.${currindex} = nums.${currindex} + mynum;
            END;
         END;
      END;

      CALL alldata.splice(1, 0, [nums]);
      CALL plotdata.splice(1, 0, []);
      plotdata.1.${alldata.0.max} = nums.${alldata.0.max};
      mytype = 'Totals';
      IF (form.op != 'table' && form.op != 'csv');
         mytype = mytype _ " (" _ Slash.commify(nums.${alldata.0.max}) _ ")";
      END;
      CALL alltypes.splice(0, 0, mytype);
   END;

   IF ((form.type == 'areastackedindex' || form.showtotal) && form.op != 'table' && form.op != 'csv');
      USE dataloop = iterator(alldata);
      FOREACH this = dataloop;
         thisindex = dataloop.index;
         thismax   = dataloop.max;
         IF (thisindex > 1);
            USE thisloop = iterator(this);
            FOREACH mynum = thisloop;
               newindex  = thisindex + 1;
               currindex = thisloop.index;
               newnum = mynum;
               FOREACH nextindex = [newindex .. thismax];
                  newnum = newnum + alldata.${nextindex}.${currindex};
                  # "$thisindex | $currindex | $mynum | $newnum\n" | stderr;
               END;
               alldata.${thisindex}.${currindex} = newnum;
            END;
         END;
      END;
   END;
%]
__seclev__
1000
__version__
$Id$
