#!/usr/bin/perl -i

# V2.0

use CGI ':standard';

if(-e "L10HC_Params.pl") {	
	require "L10HC_Params.pl";
} else { 
	$timeAdj = 0;
	require "L10HC_LIB.pl";
	if(param('action') eq "init") {
		&initScript();
	} else {
		&initForm(); 
	}
	exit 0;
}

require "L10HC_LIB.pl";

$repSecs=0;
$repTime="";
$repDate="";

($curMonYr,$curMonMo,$curMonDay) = MondayOfWeek($curWk,$curWkYr);

@MoAbv = ("","Jan","Feb","March","April","May","June","July","Aug","Sept","Oct","Nov","Dec");
@MoName = ("","January","Febuary","March","April","May","June","July","August","September","October","November","December");
@DoWAbv = ("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
@DoWName = ("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");

$url = param('page');
$url =~ s/http:\/\///i;
$url =~ s/https:\/\///i;
if($url eq "") {
	$url = '[unknown]';
}

if(param('action') eq "getMsgs") {
	&getMsgs();
	exit 0;
}

if(param('action') eq "tempext") {
	require "L10HC_LIB2.pl";
	&archiveExtended();
	print header;
	print "Extended Archived";
	exit 0;
}

if(param('action') eq "initAdmin") {
	&initAdmin();
	exit 0;
} elsif(param('action') eq "auth") {
	&authPassword();
	exit 0;
} elsif(param('action') eq "sTD") {
	print header;
	print "sDate=$curMo/$curDay/$curYr&";
	if($curMin<10) {
		$curMin = "0$curMin";
	}
	if($curSec<10) {
		$curSec = "0$curSec";
	}
	print "sTime=$curHr:$curMin:$curSec&";
	exit 0;
} elsif(param('action') eq "updateKC") {
	&updateKC();
}

if(!$protectStats || (param('pw') eq $password))	{
	if(param('action') eq "summary") {
		&summaryReport();
		exit 0;
	} elsif(param('action') eq "pageComp") {
		&pageComparison();
		exit 0;
	} elsif(param('action') eq "period") {
		&periodReport();
		exit 0;
	} elsif(param('action') eq "history") {
		&historyReport();
		exit 0;
	} elsif(param('action') eq "refs") {
		&refReport();
		exit 0;
	}elsif(param('action') eq "ext") {
		&extendedReport();
		exit 0;
	}
}

if(param('pw') eq $password) {
	if(param('action') eq "changeParams") {
		&changeParams();
		exit 0;
	}  elsif(param('action') eq "genHTMLTag") {
		&genHTMLTag();
		exit 0;
	}  elsif(param('action') eq "resetRef") {
		&resetRef();
		exit 0;
	}  elsif(param('action') eq "resetExt") {
		&resetExt();
		exit 0;
	}  elsif(param('action') eq "getRefLog") {
		&exportRefLog();
		exit 0;
	}  elsif(param('action') eq "getExtLog") {
		&exportExtLog();
		exit 0;
	}
} else {
	print header;
	print '<html><head><title>L10 Hit Counter</title></head><body style="font-family : Arial, Helvetica, sans-serif;">';
	print '<center><b>L10 Hit Counter successfuly installed!</b><br><br><span style="font-size:x-small">Script Sponsors<br><a href="http://www.leveltendesign.com">LevelTen Web Design</a> | <a href="http://www.websitedesignpromotion.org">Website Design &amp; Promotion</a> | <a href="http://www.10minuteflash.com">10Minute Flash</a><br>';
	print '&copy; 2002 <a href="http://www.lorentzconsulting.com">Lorentz Consulting Group, LLC</a> - All Rights Reserved</span>'."\n";
	print "<!-- action=".param('action')." -->\n";
	print '</body></html>';
}

exit 0;

#####################################################
# Subroutine start
#####################################################

sub initForm() {
	@script = split(/\//,$ENV{'SCRIPT_NAME'});
	print header;
	print "<html>\n<header>\n<title>L10 Hit Counter script init</title>\n<style>body {font-family : Arial, Helvetica, sans-serif;}</style>\n";
	print "<script language=JavaScript> function initForm() {document.theForm.cgi.value = window.location.href}</script>\n";
	print "</header>\n<body onLoad=initForm()>\n";
	print "<form name=theForm action=\"$script[$#script]\" method=POST>\n";
	print "<input type=hidden name=action value=init>\n";
	
	$err = 0; 
	print "<table align=center>";
	print "<tr><b>Script Install Form</b></tr>\n";
	
	unless($err) {
		print "<tr><td><br><br><b>URL for L10HC_Admin.cgi:</b> (this script)<br>\n<input name=cgi type=text size=80 value='http://'></td></tr>\n";
		print "<tr><td><br><br><b>URL for L10HC_Admin.html:</b><br>\n<input name=url type=text size=80 value='http://'></td></tr>\n";
		print "<tr><td align=center><br><input type=submit name='init' value='Initialize L10 Hit Counter'>\n</td></tr></table></form>";
	}

	print "</body></html>";
	exit 0;	

}

sub initScript() {

	$startDate = $dateStamp;
	$startDateDisplay = "$curMo/$curDay/$curYr";
	$timeAdj = 0; #new
	@phrases = ('<P ALIGN="CENTER"><FONT FACE="_sans" SIZE="14" COLOR="#000000">--SV0-- visitors since --TD0--</FONT></P>','<P ALIGN="CENTER"><FONT FACE="_sans" SIZE="14" COLOR="#000000">--PH0-- page views since --TD0--</FONT></P>');
	$bTagClr = "000000";
	$removeDisplay = 0;
	$removeBranding = 0; #new
	$password = "password";
	$logLimit = 100;
	$allowLocalFiles = 0;
	$protectStats = 1;
	$adminURL = param('url');
	$enableAdminLink = 1;
	$displaySize = "250X22";
	$fileLockTO = 15;
	$keyCode = ''; # new
	$kcErr = 0; # new
	
	&writeParams();
	
	unless (-e "L10HC_Hits.dat") {
		open (DSTAT_FH, ">L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at DoInit");
		print DSTAT_FH "$dateStamp\n";
		print DSTAT_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
		print DSTAT_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
		print DSTAT_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
		print DSTAT_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
		print DSTAT_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
		print DSTAT_FH "[unknown]\n";
		print DSTAT_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
		close (DSTAT_FH);
	}
	
	open (FILE, ">L10HC_Refs.dat") || &gen_error("Cannot open L10HC_Refs.dat at DoInit");
	close (FILE);
	
	open (FILE, ">L10HC_Extended.dat") || &gen_error("Cannot open L10HC_Extended.dat at DoInit");
	close (FILE);
	
	open (FILE, ">L10HC_IP.log") || &gen_error("Cannot open L10HC_IP.log at DoInit");
	close (FILE);
	open (FILE, ">L10HC_IP2.log") || &gen_error("Cannot open L10HC_IP2.log at DoInit");
	close (FILE);
	
	open (FILE, ">L10HC_Security.log") || &gen_error("Cannot open L10HC_Security.log at DoInit");
	close (FILE);
	open (FILE, ">L10HC_Security2.log") || &gen_error("Cannot open L10HC_Security2.log at DoInit");
	close (FILE);
	
	unless (-e "L10HC_Archive") {mkdir "L10HC_Archive", 0777;}
	unless (-e "L10HC_Archive/Doms") {mkdir "L10HC_Archive/Doms", 0777;}
	unless (-e "L10HC_Archive/Refs") {mkdir "L10HC_Archive/Refs", 0777;}
	unless (-e "L10HC_Archive/KWs") {mkdir "L10HC_Archive/KWs", 0777;}
	unless (-e "L10HC_Archive/sRefs") {mkdir "L10HC_Archive/sRefs", 0777;}
	unless (-e "L10HC_Archive/pRefs") {mkdir "L10HC_Archive/pRefs", 0777;}
	
	unless (-e "L10HC_Archive/SiteHistory_Hits.dat") {
		open (SITE_FH, ">L10HC_Archive/SiteHistory_Hits.dat") || &gen_error("Cannot open SiteHistory_Hits.dat at DoInit");
		close (SITE_FH);
	}
	open (SITE_FH, ">L10HC_Archive/Hits_Yesterday.dat") || &gen_error("Cannot open Hits_Yesterday.dat at DoInit");
	close (SITE_FH);
	open (SITE_FH, ">L10HC_Archive/Hits_LastWeek.dat") || &gen_error("Cannot open Hits_LastWeek.dat at DoInit");
	close (SITE_FH);
	open (SITE_FH, ">L10HC_Archive/Hits_LastMonth.dat") || &gen_error("Cannot open Hits_LastMonth.dat at DoInit");
	close (SITE_FH);
	open (SITE_FH, ">L10HC_Archive/Hits_LastYear.dat") || &gen_error("Cannot open Hits_LastMonth.dat at DoInit");
	close (SITE_FH);
	open (SITE_FH, ">L10HC_Archive/Pages.dat") || &gen_error("Cannot open Pages.dat at DoInit");
	close (SITE_FH);
	
	open (SITE_FH, ">L10HC_Archive/Hits_byPeriod.dat") || &gen_error("Cannot open Hits_byPeriod.dat at DoInit");
	print SITE_FH "0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	print SITE_FH "0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\n";
	close (SITE_FH);
	
	open (PLIST_FH, ">L10HC_FlashParams.txt") || &gen_error("Cannot open pagelist at L10HC_AdminParams.txt");
	print PLIST_FH "res=OK&cgiPath=".param('cgi')."\&";
	close (PLIST_FH);
	
	print header;
	print "<html><header><title>L10 Hit Counter script init</title><style>body {font-family : Arial, Helvetica, sans-serif;}</style></header><body>\n";
	print "<table align=center>";
	print "<tr><td nowrap><b>L10 Hit Counter script successfully initialized!</b><br>\n<br></td></tr>\n";
	print "</table></body></html>";
	exit 0;	
}

sub getMsgs() {
	open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
	@dStat = <DSTAT_FH>;
	close(DSTAT_FH);

	print header;
	if($enableAdminLink) {
		print "adminPath=$adminURL\&";
	} else {
		print "adminPath=\&";
	}
	
	@sStats = split(/\t/,$dStat[1]);
	@hvStats = split(/\t/,$dStat[4]);
	@hhStats = split(/\t/,$dStat[5]);
	@pStats = (0,0,0,0,0,0,0,0,0);
	for($i=6; $i<=$#dStat; $i++) {
		chomp($dStat[$i]);
		if($url eq $dStat[$i]) {
			$i++;
			chop($dStat[$i]);
			@pStats = split(/\t/,$dStat[$i]);
			$i = $#dStat;
		} else {
			$i++;
		}
	}
	for($i=0;$i<=4;$i++) {
		print "SV$i=$sStats[$i]\&";
		print "SH$i=$sStats[$i+5]\&";
		print "PV$i=$pStats[$i]\&";
		print "PH$i=$pStats[$i+5]\&"; 
	}
	($sYr,$sMo,$sDay) = split(/\//,$startDate);
	($curMonYr,$curMonMo,$curMonDay) = &MondayOfWeek($curYr,$curMo,$curDay);
	$DoW = &DayOfWeek($curYr,$curMo,$curDay);
	&setRepTime();
	($rHr,$rMin,$rSec) = split(/:/,$repTime);
	($rSec,$rMod) = split(/ /,$rSec);
	print "SV5=$hvStats[$curHr]\&";
	print "SH5=$hhStats[$curHr]\&";
	print "TD0=$sMo/$sDay\&";
	print "TD1=$sMo/$sDay/".substr($curMonYr,2)."\&";
	print "TD2=$sMo/$sDay/$sYr\&";
	print "TD3=".substr($curYr,2)."\&";
	print "TD4=$curYr\&";
	print "TD5=$curMo\&";
	print "TD6=$MoAbv[$curMo]\&";
	print "TD7=$MoName[$curMo]\&";
	print "TD8=$curMonMo/$curMonDay\&";
	print "TD9=$curMonMo/$curMonDay/".substr($curMonYr,2)."\&";
	print "TD10=$curMonMo/$curMonDay/$curMonYr\&";
	print "TD11=$curMo/$curDay\&";
	print "TD12=$curMo/$curDay/".substr($curYr,2)."\&";
	print "TD13=$curMo/$curDay/$curYr\&";
	print "TD14=$curDay\&";
	print "TD15=$DoWAbv[$DoW]\&";
	print "TD16=$DoWName[$DoW]\&";
	print "TD17=$rHr:$rMin $rMod\&";
	print "TD18=$repTime\&";
	print "TD19=$curHr\&";
	print "TD20=$rHr\&";
	print "TD21=$rMin\&";
	print "TD22=$rSec\&";
	print "TD23=$rMod\&";
	
	
	$i=0;
	foreach (@phrases) {
		print "p$i=$_\&";
		$i++;
	}
	exit 0;
}

sub initAdmin() {
	print header;
	print "res=OK&";
	@cookies = split(/;/,$ENV{'HTTP_COOKIE'});
	$blockBrowser = 0;
	foreach (@cookies) {
		($cKey,$cValue) = split(/=/,$_);
		if(($cKey =~ m/L10HC_BB/) && ($cValue eq "1")) {
			$blockBrowser = 1;
		}
	}
	print "sDate=$curMo/$curDay/$curYr&";
	@iDate = split(/\//,$startDate);
	print "iDate=$iDate[1]/$iDate[2]/$iDate[0]&";
	if($curMin<10) {
		$curMin = "0$curMin";
	}
	if($curSec<10) {
		$curSec = "0$curSec";
	}
	print "sTime=$curHr:$curMin:$curSec&";
	
	print "timeAdj=$timeAdj&";
	print "kc=$keyCode&";
	print "kcErr=$kcErr&";
	print "rb=$removeBranding&";
	print "blockBrowser=$blockBrowser\&";
	print "protectStats=$protectStats\&";
	print "adminPath=$adminURL&";
	print "enableAdminLink=$enableAdminLink\&";
	print "removeHCDisplay=$removeDisplay\&";
	print "AdminURL=$adminURL\&";
	print "auth=0\&";
	print "bTagClr=$bTagClr\&";
	foreach $phrase (@phrases) {
		$i++;
		print "p$i=$phrase\&";
	}
	open (FILE, "L10HC_SE.txt");
	%SEName = ();
	%SEGroups = ();
	$SEMain = '';
	$i = 0;
	foreach (<FILE>) {
		chop($_);
		@t = split(/\t/,$_);
		if($i) {
			$SEName{$t[1]} = '';	
		} else {
			for(;$i<=$#t;$i++) {
				$SEGroups{$t[$i]} = '';
			}
			$i=1;
		}		
	}
	close(FILE);
	foreach $SEN (sort (keys %SEName)) {
		$mf = 0;
		foreach (keys %SEGroups) {			
			if($SEN =~ m/$_/i) {
				if($SEGroups{$_} eq '') {
					$SEMain = "$SEMain$_>,";
				}
				$SEN =~ s/$_//i;
				if($SEN eq '') {
					$SEGroups{$_} = "$SEGroups{$_}Main,";	
				} else {
					$SEN =~ s/^ //;
					$SEGroups{$_} = "$SEGroups{$_}$SEN,";
				}				
				$mf = 1;				
				last;
			}
		}
		if(!$mf && $SEN ne '') {
			$SEMain = "$SEMain$SEN,";
		}			
	}	
	chop($SEMain);
	print "SEM=$SEMain&";
	$i=0;
	foreach (keys %SEGroups) {
		$l = $_;
		$l =~ s/ /_/g;
		chop($SEGroups{$_});
		print "SEM$l=$SEGroups{$_}&";
		print "SEM_$i=$l&";
		print "SEMV_$i=$_&";
		$i++;
	}

}

sub authPassword() {
	print header;
	if(param('pw') eq $password) {
		print "auth=1\&";	
	} else {
		print "auth=0\&"; 
	}
}

sub summaryReport() {
	unless(&lock_stats()) {
		&log_error("$curMo/$curDay/$curYr $curHr:$curMin:$curSec fileLockTO exceeded.");
		print header;
		print "res=Err&msg=File lock timeout exceeded";
		exit 0;
	}
	open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
	@dStat = <DSTAT_FH>;
	close(DSTAT_FH);
	
	if($dStat[0] ne "$dateStamp\n") {
		&log_event("Stats archived by time.");
		require "L10HC_LIB2.pl";
		&archiveStats();
	}
	&unlock_stats();

	open (DSTAT_FH, "L10HC_Archive/Hits_byPeriod.dat") || &gen_error("L10HC_Archive/Hits_byPeriod.dat at \"Read Today's Stats Data\"");
	@bStat = <DSTAT_FH>;
	close(DSTAT_FH);
	
	print header;

	($sYr,$sMo,$sDay) = split(/\//,$startDate);
	$AD = &DeltaDays($sYr,$sMo,$sDay,$curYr,$curMo,$curDay);
	if($sYr < $curYr) {
		$YD = &DeltaDays($curYr,1,1,$curYr,$curMo,$curDay);
	} else {
		$YD = &DeltaDays($sYr,$sMo,$sDay,$curYr,$curMo,$curDay);
	}
	if($sMo < $curMo) {
		$MD = &DeltaDays($curYr,$curMo,1,$curYr,$curMo,$curDay);
	} else {
		$MD = &DeltaDays($sYr,$sMo,$sDay,$curYr,$curMo,$curDay);
	}
	($curMonYr,$curMonMo,$curMonDay) = &MondayOfWeek($curYr,$curMo,$curDay);
	($sMonYr,$sMonMo,$sMonDay) = &MondayOfWeek($sYr,$sMo,$sDay);
	if($sWk < $curWk) {
		$WD = DeltaDays($curMonYr,$curMonMo,$curMonDay,$curYr,$curMo,$curDay);
	} else {
		$WD = DeltaDays($sYr,$sMo,$sDay,$curYr,$curMo,$curDay);
	}
	
	@pStats = split(/\t/,$dStat[1]);
	
	&setRepTime();
	
	print "SD=$startDate\&";
	print "Date=$repDate\&";
	print "Time=$repTime\&";
	print "Secs=$repSecs\&";
	print "DoW=".&DayOfWeek($curYr,$curMo,$curDay)."&";
	print "AV=$pStats[0]\&";
	print "AH=$pStats[5]\&";
	print "AD=$AD\&";
	print "YV=$pStats[1]\&";
	print "YH=$pStats[6]\&";
	print "YD=$YD\&";
	print "MV=$pStats[2]\&";
	print "MH=$pStats[7]\&";
	print "MD=$MD\&";
	print "WV=$pStats[3]\&";
	print "WH=$pStats[8]\&";
	print "WD=$WD\&";
	print "DV=$pStats[4]\&";
	print "DH=$pStats[9]\&";
	
	@pStats = split(/\t/,$bStat[3]);
	@pStats2 = split(/\t/,$bStat[4]);
	@pStats3 = split(/\t/,$dStat[4]);
	@pStats4 = split(/\t/,$dStat[5]);
	for($i=0;$i<24;$i++) {
		print "HVA$i=$pStats[$i]\&";
		print "HHA$i=$pStats2[$i]\&";
		print "HV$i=$pStats3[$i]\&";
		print "HH$i=$pStats4[$i]\&";
	}
	print "THV=$pStats3[$curHr]\&";
	print "THH=$pStats4[$curHr]\&";
	@pStats = split(/\t/,$bStat[10]);
	@pStats2 = split(/\t/,$bStat[11]);
	@pStats3 = split(/\t/,$bStat[12]);
	@pStats4 = split(/\t/,$bStat[13]);
	for($i=0;$i<7;$i++) {
		print "DVA$i=$pStats[$i]\&";
		print "DHA$i=$pStats2[$i]\&";
		print "DV$i=$pStats3[$i]\&";
		print "DH$i=$pStats4[$i]\&";
	}
	
	
	
}

sub pageComparison() {
	open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
	@dStat = <DSTAT_FH>;
	close(DSTAT_FH);

	&setRepTime();
	print header;
	if(param('p') ne "") {
		$p = param('p');
	} else {
		$p = 4;
	}
	chomp($dStat[1]);
	@pStats = split(/\t/,$dStat[1]);
	print "Date=$repDate\&";
	print "Time=$repTime\&";
	print "ES=$pStats[$p]\&";
	print "HS=$pStats[$p+5]\&";
	@sorted = ();
	for($i=6;$i<=$#dStat;$i+=2) {
		chomp($dStat[$i]);
		chomp($dStat[$i+1]);
		@t = split(/\t/,$dStat[$i+1]);
		if(param('d') eq "1") {
			if($t[$p] > 0) {
				push(@sorted,join("\t",$t[$p],$t[$p+5],$dStat[$i]));
			}
		} else {
			if($t[$p+5] > 0) {
				push(@sorted,join("\t",$t[$p+5],$t[$p],$dStat[$i]));
			}
		}
	}
	@sorted = sort {$b <=> $a} @sorted;
	for($i=0;$i<=$#sorted;$i++) {
		@t = split(/\t/,$sorted[$i]);
		if(param('d') eq "1") {
			print "P$i=$t[2]&E$i=$t[0]&H$i=$t[1]\&";
		} else {
			print "P$i=$t[2]&E$i=$t[1]&H$i=$t[0]\&";
		}
	}

}

sub periodReport() {
	&setRepTime();
	print header;
	print "Date=$repDate\&";
	print "Time=$repTime\&";
	open (FILE, "L10HC_Archive/Hits_byPeriod.dat") || &gen_error("L10HC_Archive/Hits_byPeriod.dat at \"Read Today's Stats Data\"");
	@bStat = <FILE>;
	close(FILE);
	
	@d = ();
	@s1 = ();
	@s2 = ();
	@ave = ();
	@wave = ();
	
	$iMod = 0;
	if(param('c') eq '1') {
		$iMod = 1;
	}
	if(param('p') eq "2") {
		@d = split(/\t/,$bStat[16]);
		@ave = split(/\t/,$bStat[17+$iMod]);
		@wave = split(/\t/,$bStat[19+$iMod]);
		@s1 = split(/\t/,$bStat[21+$iMod]);
		@s2 = split(/\t/,$bStat[23+$iMod]);
	} elsif(param('p') eq "1") {
		@d = split(/\t/,$bStat[7]);
		@ave = split(/\t/,$bStat[8+$iMod]);
		@wave = split(/\t/,$bStat[10+$iMod]);
		@s1 = split(/\t/,$bStat[12+$iMod]);
		@s2 = split(/\t/,$bStat[14+$iMod]);
	} else {
		chop($bStat[0]);
		for($i=0;$i<24;$i++) {
			push(@d,$bStat[0]);	
		}
		@ave = split(/\t/,$bStat[1+$iMod]);
		@wave = split(/\t/,$bStat[3+$iMod]);
		@s2 = split(/\t/,$bStat[5+$iMod]);
		open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
		@dStat = <DSTAT_FH>;
		close(DSTAT_FH);
		@s1 = split(/\t/,$dStat[4+$iMod]);
	}
	for($i=0;$i<=$#d;$i++) {
		print "d$i=$d[$i]&";
		print "s1$i=$s1[$i]&";
		print "s2$i=$s2[$i]&";
		print "ave$i=$ave[$i]&";
		print "wave$i=$wave[$i]&";	
	}
	
}

sub historyReport () {
	if(param('b') ne 'All') {
		&historyByRefReport();
		return;
	}
	
	
	open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
	@dStat = <DSTAT_FH>;
	close(DSTAT_FH);
	
	@tStats = split(/\t/,$dStat[1]);
	&setRepTime();
	$sYr = param('bY');
	$sMo = param('bM');
	$sDay = param('bD');
	$dataCnt = 0;
	@xLables = ();
	$period = "";
	$todaysStats = "";
	if(param('p') eq 'Y') {
		$startDate = "Y$sYr";
		$dataCnt = 10;
		$xL = $sYr - $dataCnt;
		$xL++;
		$period = "$xL - $sYr";
		for($i=0;$i<$dataCnt;$i++) {			
			push(@xLables,"$xL");
			$xL++;
		}
		$todaysStats = "Y\t$tStats[1]\t$tStats[6]";
	} elsif(param('p') eq 'M') {
		$startDate = "M$sYr/$sMo";
		$dataCnt = 12;
		$xLYr = $sYr - 1;
		$xLMo = $sMo;
		$xLMo ++;
		if($xLMo > 12) {
			$xLMo = $xLMo-12;
			$xLYr ++;
		}
		$period = "$xLMo/$xLYr - $sMo/$sYr";
		for($i=0;$i<$dataCnt;$i++) {
			push(@xLables,"$xLMo/$xLYr");
			$xLMo ++;
			if($xLMo > 12) {
				$xLMo = $xLMo-12;
				$xLYr ++;
			}
		}
		$todaysStats = "M\t$tStats[2]\t$tStats[7]";
	} elsif(param('p') eq 'W') {
		($mYr,$mMo,$mDay) = &MondayOfWeek($sYr,$sMo,$sDay);
		$startDate = "W$mYr/$mMo/$mDay";
		$period = "$mMo/$mDay/$mYr";
		$dataCnt = 26;
		($xYr,$xMo,$xDay) = &AddDeltaDays($sYr,$sMo,$sDay,-7*$dataCnt); 
		($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,7); 
		($mYr,$mMo,$mDay) = &MondayOfWeek($xYr,$xMo,$xDay);
		$period = "$mMo/$mDay/$mYr - $period";
		for($i=0;$i<$dataCnt;$i++) {

			push(@xLables,"$mMo/$mDay/$mYr");
			($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,7); 
			($mYr,$mMo,$mDay) = &MondayOfWeek($xYr,$xMo,$xDay);
		}
		$todaysStats = "W\t$tStats[3]\t$tStats[8]";
	} else {
		$startDate = "D$sYr/$sMo/$sDay";
		$dataCnt = 30;
		($xYr,$xMo,$xDay) = &AddDeltaDays($sYr,$sMo,$sDay,-1 * $dataCnt); 
		($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,1);
		$period = "$xMo/$xDay/$xYr - $sMo/$sDay/$sYr";
		for($i=0;$i<$dataCnt;$i++) {			 
			push(@xLables,"$xMo/$xDay/$xYr");
			($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,1);
		}
		$todaysStats = "D\t$tStats[4]\t$tStats[9]";
	}
	
	open (FILE, "L10HC_Archive/SiteHistory_Hits.dat") || &gen_error("Cannot open L10HC_Archive/SiteHistory_Hits.dat at historyReport()");
		@hist = <FILE>;
	close (FILE);
	$sIndex=0;
	print header;
	print "Date=$repDate\&";
	print "Time=$repTime\&";
	$inPer = 0;
	for($i=1;$i <= $#hist;$i++) {
		# print "$hist[$i]-$startDate<Br>";
		if(!$inPer && (param('p') eq substr($hist[$i],0,1))) {
			$inPer = 1;
		} elsif($inPer && (param('p') ne substr($hist[$i],0,1))) {
			if(($curDay == $sDay) && ($curMo == $sMo) &&($curYr == $sYr)) {
				$hist[$i] = $todaysStats;
				$sIndex = $i;
				$i = $#hist;
			}
		}
		if($hist[$i] =~ m/$startDate/) {
			if(($curDay == $sDay) && ($curMo == $sMo) &&($curYr == $sYr)) {
				$hist[$i] = $todaysStats;
			}
			$sIndex = $i;
			$i = $#hist;
		}
	}
	if(($sIndex == 0) && ($curDay == $sDay) && ($curMo == $sMo) && ($curYr == $sYr)) {
		push(@hist,$todaysStats);
		$sIndex = $#hist;
	}
	if($sIndex == 0) {
			print "res=ND\&startDate=$startDate";
	} else {
		print "ps=$period\&";
		for($i=0;$i<$dataCnt;$i++) {
		# print "<br>h$i=$hist[$sIndex - $dataCnt + $i+1], substr=".substr($hist[$sIndex - $dataCnt + $i+1],0,1)."<br>";
		
			if((($sIndex - $dataCnt + $i+1) < 1) || (substr($hist[$sIndex - $dataCnt + $i+1],0,1) ne param('p'))) {
				print "V$i=0\&H$i=0\&";
			} else {
				$hist[$sIndex - $dataCnt + $i+1] =~ s/\n//;
				@pStat = split(/\t/,$hist[$sIndex - $dataCnt + $i+1]);
				print "V$i=$pStat[1]\&H$i=$pStat[2]\&";
			}
			print "xL$i=$xLables[$i]\&";
		}
	}
	
	
	
}

sub historyByRefReport() {
	$sYr = param('bY');
	$sMo = param('bM');
	$sDay = param('bD');
	$eYr = $sYr;
	$eMo = $sMo;
	$eDay = $sDay;
	$dataCnt = 0;
	@xLables = ();
	@values1 = ();
	@values2 = ();
	$period = "";
	if(param('p') eq 'Y') {
		$startDate = "Y$sYr";
		$dataCnt = 10;
		$xL = $sYr - $dataCnt;
		$xL++;
		$eYr = xL;
		$eMo = 1;
		$eDay = 1;
		$period = "$xL - $sYr";
		for($i=0;$i<$dataCnt;$i++) {			
			push(@xLables,"$xL");
			push(@values1,0);
			push(@values2,0);
			$xL++;
		}
	} elsif(param('p') eq 'M') {
		$dataCnt = 12;
		$xLYr = $sYr - 1;
		$xLMo = $sMo;
		$xLMo ++;
		$eYr = $xLYr;
		$eMo = $xLMo;
		$eDay = 1;
		if($xLMo > 12) {
			$xLMo = $xLMo-12;
			$xLYr ++;
		}
		$period = "$xLMo/$xLYr - $sMo/$sYr";
		for($i=0;$i<$dataCnt;$i++) {
			push(@xLables,"$xLMo/$xLYr");
			push(@values1,0);
			push(@values2,0);
			$xLMo ++;
			if($xLMo > 12) {
				$xLMo = $xLMo-12;
				$xLYr ++;
			}
		}
	} elsif(param('p') eq 'W') {
		($mYr,$mMo,$mDay) = &MondayOfWeek($sYr,$sMo,$sDay);
		$period = "$mMo/$mDay/$mYr";
		$dataCnt = 26;
		($xYr,$xMo,$xDay) = &AddDeltaDays($sYr,$sMo,$sDay,-7*$dataCnt); 
		($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,7); 
		($mYr,$mMo,$mDay) = &MondayOfWeek($xYr,$xMo,$xDay);
		$period = "$mMo/$mDay/$mYr - $period";
		$eYr = $mYr;
		$eMo = $mMo;
		$eDay = $mDay;
		for($i=0;$i<$dataCnt;$i++) {
			push(@xLables,"$mMo/$mDay/$mYr");
			push(@values1,0);
			push(@values2,0);
			($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,7); 
			($mYr,$mMo,$mDay) = &MondayOfWeek($xYr,$xMo,$xDay);
		}
	} else {
		$startDate = "D$sYr/$sMo/$sDay";
		$dataCnt = 30;
		($xYr,$xMo,$xDay) = &AddDeltaDays($sYr,$sMo,$sDay,-1 * $dataCnt); 
		($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,1);
		$period = "$xMo/$xDay/$xYr - $sMo/$sDay/$sYr";
		$eYr = $xYr;
		$eMo = $xMo;
		$eDay = $xDay;
		for($i=0;$i<$dataCnt;$i++) {			 
			push(@xLables,"$xMo/$xDay/$xYr");
			push(@values1,0);
			push(@values2,0);
			($xYr,$xMo,$xDay) = &AddDeltaDays($xYr,$xMo,$xDay,1);
		}
	}
	if(($sDay == $curDay) && ($sMo == $curMo) && ($sYr == $curYr)) {
		open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
		@dStat = <DSTAT_FH>;
		close(DSTAT_FH);
		chop($dStat[0]);
		($aYr,$aMo,$aDay) = split(/\//,$dStat[0]);
		require "L10HC_LIB2.pl";
		&archiveRefs();
	}
	$srcFile = "";
	$search = "";
	if(param('b') eq "Domain") {
		$srcFile = "Doms/Doms_";
		$search = param('d');
	} elsif(param('b') eq "SE") {
		$srcFile = "KWs/KWs_";
	} else {
		$srcFile = "KWs/KWs_";
		$search = param('b');
	}
	$lYr = $sYr;
	$lMo = $sMo;
	$lDay = $sDay;
	if(param('p') eq "W") {
		($lYr,$lMo,$lDay) = &MondayOfWeek($sYr,$sMo,$sDay);
	} 

	$dataIndex = $dataCnt -1;
	$cnt = 0;
	&setRepTime();
	print header;
	print "Date=$repDate\&";
	print "Time=$repTime\&";
	for($i=0;$i<3653;$i++) {
		$pYr = substr($sYr,2);
		if($sMo < 10) {$pMo = "0$sMo";} else {$pMo = $sMo;}
		if($sDay < 10) {$pDay = "0$sDay";} else {$pDay = $sDay;}
		open (FILE, "L10HC_Archive/$srcFile$pYr$pMo$pDay.dat") || last;
		@fRefs = <FILE>;
		close(FILE);
		open (FILE, "L10HC_Archive/sRefs/sRefs_$pYr$pMo$pDay.dat") || last;
		@fCnt = <FILE>;
		close(FILE);
		for($j=0;$j<$#fRefs;$j++) {
			if(param('b') eq "SE") {
				if(length($fRefs[$j]) > 1) {
					$values1[$dataIndex] += $fCnt[$j];
				}
			} elsif(param('b') eq "Domain") {
				if($fRefs[$j] =~ m/^$search/i) {
					$values1[$dataIndex] += $fCnt[$j];
				}
			} else {
				@fR = split(/\t/,$fRefs[$j]);
				if($fR[0] eq $search) {
					$values1[$dataIndex] += $fCnt[$j];
				}
			}
			$values2[$dataIndex] += $fCnt[$j];
		}
	
		$cnt=$i;

		($sYr,$sMo,$sDay) = &AddDeltaDays($sYr,$sMo,$sDay,-1);
		if(param('p') eq "Y") {
			if($sYr != $lYr) {
				$dataIndex --;
				if($dataIndex < 0) {last;}
				$lYr = $sYr;
			}
		} elsif(param('p') eq "M") {
			if($sMo != $lMo) {
				$dataIndex --;
				if($dataIndex < 0) {last;}
				$lMo = $sMo;
			}
		} elsif(param('p') eq "W") {
			($mYr,$mMo,$mDay) = &MondayOfWeek($sYr,$sMo,$sDay);
			if($mDay != $lDay) {
				$dataIndex --;
				if($dataIndex < 0) {last;}
				$lDay = $mDay;
			}
		} else {
			$dataIndex --;
			if($dataIndex < 0) {last;}
		}
	}
	
	if($cnt == 0) {
			print "res=ND\&startDate=$startDate";
	} else {
		print "ps=$period\&";
		for($i=0;$i<$dataCnt;$i++) {
			print "V$i=$values1[$i]&";
			print "H$i=$values2[$i]&";
			print "xL$i=$xLables[$i]&";
		}
	}
}

sub refReport() {
	$sYr = param('bY');
	$sMo = param('bM');
	$sDay = param('bD');
	&refReport_Full();
}

sub refReport_Full() {
	my $dayCnt = 0;
	my $archive = 0;
	if(param('p') == 0) { # Today
		$sYr = $curYr;
		$sMo = $curMo;
		$sDay = $curDay;
		$dayCnt = 1;
		$archive = 1;
	} elsif(param('p') == -1) { # Yesterday
		($sYr,$sMo,$sDay) = &AddDeltaDays($curYr,$curMo,$curDay,-1);
		$dayCnt = 1;
	} elsif(param('p') == -2) { # This Week
		($sYr,$sMo,$sDay) = &MondayOfWeek($curYr,$curMo,$curDay);
		$dayCnt = 7;
		$archive = 1;
	} elsif(param('p') == -3) { # Last Week
		($sYr,$sMo,$sDay) = &AddDeltaDays($curYr,$curMo,$curDay,-7);
		($sYr,$sMo,$sDay) = &MondayOfWeek($sYr,$sMo,$sDay);
		$dayCnt = 7;
	} elsif(param('p') == -4) { # This Month
		$sYr = $curYr;
		$sMo = $curMo;
		$sDay = 1;
		$dayCnt = $DpMo[$sMo];
		$archive = 1;
	} elsif(param('p') == -5) { # Last Week
		($sYr,$sMo,$sDay) = &AddDeltaDays($curYr,$curMo,$curDay,-$DpMo[$curMo]);
		$sDay = 1;
		$dayCnt = $DpMo[$sMo];
	} elsif(param('p') == -6) {
		$sYr = $curYr;
		$sMo = 1;
		$sDay = 1;
		$dayCnt = 365 + &isLeapYr($sYr);
		$archive = 1;
	} else {
		($sYr,$sMo,$sDay) = &AddDeltaDays(param('bY'),param('bM'),param('bD'),1-param('p'));	
		$dayCnt = param('p');
		if(($sDay == $curDay) && ($sMo == $curMo) && ($sYr == $curYr)) {
			$archive = 1;
		}
	}
	if($archive) {
		open (DSTAT_FH, "L10HC_Hits.dat") || &gen_error("Cannot open L10HC_Hits.dat at \"Read Today's Stats Data\"");
		@dStat = <DSTAT_FH>;
		close(DSTAT_FH);
		chop($dStat[0]);
		($aYr,$aMo,$aDay) = split(/\//,$dStat[0]);
		require "L10HC_LIB2.pl";
		&archiveRefs();
	}
	
	$startDate = "$sMo/$sDay/$sYr";
	
	%rRefs = ();
	my $total = 0;
	my $daysFound = 0;
	for($i=0;$i<$dayCnt;$i++) {
		$fileDate = &getFileDateStr($sYr,$sMo,$sDay);
		($sYr,$sMo,$sDay) = &AddDeltaDays($sYr,$sMo,$sDay,1);			
		
		@refs = ();
		@sRefs = ();
		if(-e "L10HC_Archive/sRefs/sRefs_$fileDate.dat") {
			open (FILE, "L10HC_Archive/sRefs/sRefs_$fileDate.dat") || &retNoData();
			@sRefs2 = <FILE>;
			close(FILE);
		} else {
			next;
		}
		if(param('b') eq "") {
			if(-e "L10HC_Archive/Refs/Refs_$fileDate.dat") {
				open (FILE, "L10HC_Archive/Refs/Refs_$fileDate.dat") || &retNoData();
				@refs = <FILE>;
				close(FILE);
				@sRefs = @sRefs2;
				$daysFound ++;
			} else {
				next;
			}
		} elsif(param('b') eq "Domain") {
			if(-e "L10HC_Archive/Doms/Doms_$fileDate.dat") {
				open (FILE, "L10HC_Archive/Doms/Doms_$fileDate.dat") || &retNoData();
				@refs = <FILE>;
				close(FILE);
				@sRefs = @sRefs2;
				$daysFound ++;
			} else {
				next;
			}
		} else {	
			if(-e "L10HC_Archive/KWs/KWs_$fileDate.dat") {
				open (FILE, "L10HC_Archive/KWs/KWs_$fileDate.dat") || &retNoData();
				@refs2 = <FILE>;
				close(FILE);
				$daysFound ++;
			} else {
				next;
			}

			@refs = ();
			if(param('b') eq "SE") {
				for($j=0;$j<=$#refs2;$j++) {
					($SE,$KW) = split(/\t/,$refs2[$j]);
					if($refs2[$j] ne "\n") { push(@refs,$SE); push(@sRefs,$sRefs2[$j]); }
				}
			} elsif(param('b') eq "KW") {
				for($j=0;$j<=$#refs2;$j++) {
					($SE,$KW) = split(/\t/,$refs2[$j]);
					if($refs2[$j] ne "\n" && (index($KW,'/') == -1)) { push(@refs,$KW); push(@sRefs,$sRefs2[$j]); }
				}
			} elsif(param('b') eq "KWbSE") {
				for($j=0;$j<=$#refs2;$j++) {
					if($refs2[$j] ne "\n") {
						$refs2[$j] =~ s/\t/ - /;
						push (@refs,$refs2[$j]);
						push(@sRefs,$sRefs2[$j]); 
					}
				}
			} else {
				for($j=0;$j<=$#refs2;$j++) {
					my ($SE,$KW) = split(/\t/,$refs2[$j]);
					if($SE eq param('b')) { push(@refs,$KW); push(@sRefs,$sRefs2[$j]); }
				}
			}
		}
	
		for($j=0;$j<=$#refs;$j++) {
			chop($sRefs[$j]);
			$rRefs{$refs[$j]} += $sRefs[$j];
			$total += $sRefs[$j];
		}
		if(exists $rRefs{"\n"}) {
			if(param('b') eq "KW") {
				$total -= $rRefs{"\n"};
				delete $rRefs{"\n"};
			}
			$rRefs{'[No Referrer]'} += $rRefs{"\n"};
			delete($rRefs{"\n"});
		}
		if(exists $rRefs{''}) {
			$total -= $rRefs{''};
			delete $rRefs{''};
		}
	}
	($sYr,$sMo,$sDay) = &AddDeltaDays($sYr,$sMo,$sDay,-1);
	$endDate="$sMo/$sDay/$sYr";
	if($daysFound == 0) {
		&retNoData()
	} else {
		&setRepTime();
		print header;
		print "res=OK&TR=$total&DF=$daysFound&DS=$dayCnt&";
		print "Date=$repDate&Time=$repTime&";
		print "SD=$startDate&ED=$endDate&";
		$i = 0;
		foreach (sort {$rRefs{$b} <=> $rRefs{$a}} (keys %rRefs)) {
			print "R$i=$_&C$i=$rRefs{$_}&";
			$i++;
		}
	}
	
}



sub refAscSort() {
	$rRefs{$a} <=> $rRefs{$b};
}

sub extendedReport() {
	$theFile = "";
	&setRepTime();
	print header;
	print "res=OK&TR=$total&DF=$daysFound&DS=$dayCnt&";
	print "Date=$repDate&Time=$repTime&";
	print "SD=$startDate&ED=$endDate&";
	if(param('b') eq "OS") {
		$theFile = "OSs";			
	} elsif(param('b') eq "Browser") {
		$theFile = "Browsers";
	} elsif(param('b') eq "BrowserVer") {
		$theFile = "BrowserVers";
	} elsif(param('b') eq "Language") {
		$theFile = "Languages";
	} elsif(param('b') eq "ScreenRes") {
		$theFile = "ScreenRes";
	} elsif(param('b') eq "ScreenClr") {
		$theFile = "ScreenClrs";
	}
	if(-e "L10HC_Archive/$theFile.dat") {
		open (FILE, "L10HC_Archive/$theFile.dat") || &gen_error("Cannot open L10HC_Archive/$theFile.dat at archiveStats() 2");
		$i=0;
		$total = 0;
		foreach (<FILE>) {
			chop($_);
			@l = split(/\t/,$_);
			print "k$i=$l[0]&v$i=$l[1]&";
			$total += $l[1];
			$i++;
		}
		close (FILE);
		print "total=$total";
	} else {
		&retNoData();
	}
}

sub retNoData() {
	print header;
	print "res=ND";
	exit 0;
}

sub changeParams() {
	if(param('param') eq "msgs") {
		@phrases = ();
		for($i=0;param("m$i") ne "";$i++) {
			$str = param("m$i");
			$str =~ s/\%/\%25/g;
			$str =~ s/\&amp;/\%26/g;
			$str =~ s/\+/\%2B/g;
			
			push(@phrases,$str);
		}
	} elsif(param('param') eq "displayOptions") {
		$bTagClr = param('bTagClr');
		$removeDisplay = param('removeDisplay');
		$enableAdminLink = param('enableAdminLink');
	} elsif(param('param') eq "password") {
		if(param('newPW') ne "") {
			$password = param('newPW');
		}
		$protectStats = param('protectStats');
	} elsif(param('param') eq "timeAdj") {
		$timeAdj = param('timeAdj');
	}

	&writeParams();
	
	print header;
	print "res=OK";
}

sub updateKC() {
	print header;
	unless($ENV{'HTTP_REFERER'} =~ m/^http:\/\/www.websitedesignpromotion.org\//) {
		print "invalid ref!";
		exit 0;
	}
	
	$keyCode = param('kc');
	$kcErr = param('kce');
	$removeBranding = param('rb');
			
	&writeParams();
	
	print "<html><head><title>L10 Hit Counter Update</title></head><body style={font-family : arial, helvetica, sans-serif}><table width=500 align=center><tr><td>\n";
	print param('msg');
	print "\n</td></tr></table></body></html>";

	exit 0;	
}

sub genHTMLTag () {
	$scriptURL = $ENV{'SERVER_NAME'}.$ENV{'SCRIPT_NAME'};
	$scriptURL =~ s/L10HC_Admin\./L10HC_Counter\./i;
	$displayURL = $adminURL;
	$displayURL =~ s/L10HC_Admin.html/L10HC_Display.swf/i;
	print header;
	print '<HTML><head><title>L10 Hit Counter HTML page tag</title></head><body>'."\n";
	print '<table width=550 align=center><tr><td style="font-family: arial,helvetica,sans-serif">';
	print 'Copy the tag below and paste into all pages you want to track on your website.';
	print '</tr></td><tr><td>';
	print '<form action=""><textarea cols=80 rows=20>'."\n";
	print '<!-- L10 Hit Counter page code -->'."\n";
	print "<style>.L10HC {color=\"$bTagClr\"; font-size: xx-small; text-decoration: none;} </style>"."\n";
	print '<script language="javascript">'."\n";
	if(!$removeDisplay) {
		print 'var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1;'."\n";
		print 'function L10HC_Display_DoFSCommand(command, args) {'."\n";
		print 'var L10HC_DisplayObj = InternetExplorer ? L10HC_Display : window.document.L10HC_Display;'."\n";
		print 'if(command == "init") { L10HC_DisplayObj.SetVariable("page",document.URL.toString()); L10HC_DisplayObj.GotoFrame(3); } }'."\n";
		print 'if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {'."\n";
		print "document.write(\'<SCRIPT LANGUAGE=VBScript\\> \\n on error resume next \\nSub L10HC_Display_FSCommand(ByVal command, ByVal args)\\n  call L10HC_Display_DoFSCommand(command, args)\\nend sub\\n </SCRIPT\\> \\n\'); }"."\n";
	}
	print 'var L10qstr,L10pc,L10ref,L10a,L10pg; L10pg=document.URL.toString(); L10ref=document.referrer;'."\n";
	print 'if(top.document.location==document.referrer || (document.referrer == "" && top.document.location != "")) {L10ref=top.document.referrer;}'."\n";
	print 'L10a = ""; L10cl = document.cookie.split(";");'."\n";
	print 'for(i=0;i<L10cl.length;i++) { L10r=L10cl[i].split("="); if(L10r[1] == ("L10HC"+L10pg)) {L10a="r";} }'."\n";
	print 'document.cookie="L10HC_CC=L10HC"+L10pg;'."\n";
	print 'L10qStr = "a="+L10a+"&pg="+escape(L10pg)+"&ref="+escape(L10ref)+"&os="+escape(navigator.userAgent)+"&nn="+escape(navigator.appName)+"&nv="+escape(navigator.appVersion)+"&nl="+escape(navigator.language)+"&sl="+escape(navigator.systemLanguage);'."\n";
	print 'if(navigator.appVersion.substring(0,1) > "3") { L10d = new Date(); L10qStr = L10qStr+"&cd="+screen.colorDepth+"&sx="+screen.width+"&sy="+screen.height+"&tz="+L10d.getTimezoneOffset();}'."\n";
	print 'if((location.href.substr(0,6)=="https:") || (location.href.substr(0,6)=="HTTPS:")) { L10pc="https"; } else { L10pc="http"; }'."\n";
	print 'document.write('."\'".'<a href="'.$adminURL.'"><img border=0 hspace=0 vspace=0 width=1 height=1 src="'."\'".'+L10pc+'."\'".'://'.$scriptURL.'?'."\'".'+L10qStr+'."\'".'"></a>'."\'".');'."\n";
	print '</script><noscript><a href="'.$adminURL.'"><img border=0 hspace=0 vspace=0 src="http://'."$scriptURL".'"></a></noscript>'."\n";
	print '<table border=0 cellspacing=0 cellpadding=0 align=center>'."\n";
	if(!$removeDisplay) {
		print '<tr><td><OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" ID="L10HC_Display" WIDTH="250" HEIGHT="22" ALIGN=""><PARAM NAME=movie VALUE="'.$displayURL.'"> <PARAM NAME=quality VALUE=high> <PARAM NAME=wmode VALUE=transparent> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="'.$displayURL.'" quality=high wmode=transparent bgcolor=#FFFFFF  WIDTH="250" HEIGHT="22" swLiveConnect=true ID="L10HC_Display" NAME="L10HC_Display" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT></td></tr>'."\n";
	}
	if(!$removeBranding) {
		print '<tr><td align="center" class="L10HC"><a href="http://www.websitedesignpromotion.org/apps/L10_Hit_Counter/" target="_blank" class="L10HC">L10 Hit Counter</a> by <a href="http://www.leveltendesign.com" target="_blank" class="L10HC">LevelTen Web Design</a></td></tr></table>'."\n";
	}print '<!-- end: L10 Hit Counter page code -->'."\n";
	print '</textarea></tr></td></table></body></html>';

}

sub resetRef() {
	open (FILE, ">L10HC_Refs.dat") || &gen_error("Cannot open L10HC_Refs.dat at DoInit");
	close (FILE);
	
}

sub resetExt() {
	open (FILE, ">L10HC_Extended.dat") || &gen_error("Cannot open L10HC_Extended.dat at DoInit");
	close (FILE);
}

sub exportRefLog() {
	print "Content-type:  text/tab-separated-values\n\n";
	print "Referrer\tEntry Page\n";
	open (FILE, "L10HC_Refs.dat") || &gen_error("Cannot open L10HC_Refs.dat at DoInit");
	foreach (<FILE>) {
		print $_;
	}
	close (FILE);

}

sub exportExtLog() {
	print "Content-type:  text/tab-separated-values\n\n";
	# print "Content-Disposition: attached; filename=extLog.txt\n\n";
	print "OS\tNavigator\tNavigator Version\tLanguage\tCookies Enabled\tJavaScript Enabled\tColor Depth\tScreen Size\tTime Zone Offset\n";
	open (FILE, "L10HC_Extended.dat") || &gen_error("Cannot open L10HC_Extended.dat at DoInit");
	foreach (<FILE>) {
		print $_;
	}
	close (FILE);
}

sub setRepTime () {
	$hr = $curHr;
	$min = $curMin;
	$sec = $curSec;
	$repSecs = $curHr*3600+$curMin*60+$curSec;

	$timeMod = "AM";
	if($hr>=11) {
		$timeMod = "PM";
	}
	if($hr>11) {
		$hr = $hr - 12;
	}
	if($hr==0) {
		$hr=12;
	}
	if($min<10) {
		$min = "0$min";
	}
	if($sec<10) {
		$sec = "0$sec";
	}
	
	$repTime = "$hr:$min:$sec $timeMod";
	$repDate = "$curMo/$curDay/$curYr";
}