
/* Statistics Project */

/* 
   Custom software created by
   Will Bontrager Software, LLC
   http://www.willmaster.com/
   June 26, 2011
   Version 1.1, June 13, 2011 (added SE info)
   Version 1.2, June 20, 2011 (added separate SE field)
   Version 1.3, June 26, 2011 (added non-JavaScript browser handling)
*/


/* stats_CookieName and stats_CookieLifeDays may be changed. */
var stats_CookieName = 'Activity';
var stats_CookieLifeDays = 365.25;


//var stats_MaxDataSize = 4000;
var stats_MaxDataSize = 3000;

var stats_Tracks = new Array();
var stats_TracksLength = 0;
var stats_NowTime = 0;
var stats_CookieExpire = stats_NowTimeAndstats_CookieExpireTime();
var stats_CookieDomain = document.domain;
if( stats_CookieDomain.indexOf('www.') == 0 ) { stats_CookieDomain = stats_CookieDomain.substr(4); }
var stats_RefURL = new Array();
stats_RefURL[0] = "http://" + stats_CookieDomain;
stats_RefURL[1] = "http://www." + stats_CookieDomain;
if( /[a-zA-Z]/.test(stats_CookieDomain) ) { stats_CookieDomain = "." + stats_CookieDomain; }

stats_FillTracksFromCookie();
stats_PaqeLoad();

function stats_FillTracksFromCookie() {
var cookieval = "";
if(document.cookie.length > stats_CookieName.length) {
	var cookiename = stats_CookieName + '=';
	var cookiebegin = document.cookie.indexOf(cookiename);
	if(cookiebegin > -1) {
		var cookieend = 0;
		cookiebegin += cookiename.length;
		cookieend = document.cookie.indexOf(";",cookiebegin);
		if(cookieend < cookiebegin) { cookieend = document.cookie.length; }
		cookieval = document.cookie.substring(cookiebegin,cookieend);
		}
	}
if( cookieval.length ) {
	stats_TracksLength = cookieval.length;
	cookieval = unescape(cookieval);
	stats_Tracks = cookieval.split("\t\t\t");
	}
} // function stats_FillTracksFromCookie()

function stats_ShrinkCookieValue() {
while( stats_TracksLength > stats_MaxDataSize ) {
	var track = escape(stats_Tracks[0]);
	stats_TracksLength -= track.length;
	stats_Tracks.shift();
	}
} // function stats_ShrinkCookieValue()

function stats_AddATrack(track) {
track = "When\t" + stats_NowTime + "\t\t" + track;
var escapedtrack = escape(track);
stats_TracksLength += escapedtrack.length;
stats_Tracks.push(track);
if( stats_TracksLength > stats_MaxDataSize ) { stats_ShrinkCookieValue(); }
var cookieval = stats_Tracks.join("\t\t\t");
cookieval = escape(cookieval);
var exp = stats_CookieExpire ? "; expires=" + stats_CookieExpire : "";
document.cookie = stats_CookieName + "=" + cookieval + '; path=/; domain=' + stats_CookieDomain + exp;
} // function stats_AddATrack()

function stats_PaqeLoad() {
var parts = new Array();
parts[0] = "Action\tView page " + document.URL;
var ref = document.referrer ? true : false;
if( ref ) {
	if( document.referrer.indexOf(stats_RefURL[0]) == 0 ) { ref = false; }
	else if( document.referrer.indexOf(stats_RefURL[1]) == 0 ) { ref = false; }
	}
if( ref ) {
	parts.push("Referrer\t" + document.referrer);
	var searched = stats_ReferrerIsSE(document.referrer);
	if( searched.length ) { parts.push("SE\t" + searched); }
	}
stats_AddATrack(parts.join("\t\t"));
} // function stats_PaqeLoad()

function DownloadClickStat(item) {
var parts = new Array();
parts[0] = "Action\tDownload file " + item;
parts[1] = "OnPage\t" + document.URL;
stats_AddATrack(parts.join("\t\t"));
return true;
} // function DownloadClickStat()

function FormUseStat(action) {
var parts = new Array();
parts[0] = "Action\tForm submission to " + action;
parts[1] = "OnPage\t" + document.URL;
stats_AddATrack(parts.join("\t\t"));
return true;
} // function FormUseStat()

function stats_FormField() {
var replaceloglines = new Array();
var replaceseterms = new Array();
var inputarray = document.getElementsByTagName('INPUT');
for (var i = 0; i < inputarray.length; i++) {
	var classvar = inputarray[i].className ? inputarray[i].className : '';
	if( classvar.length && classvar == "statistics_field" ) { replaceloglines.push(inputarray[i]); }
	else if( classvar.length && classvar == "Search_Engine" ) { replaceseterms.push(inputarray[i]); }

	}
var now = new Date();
var field = new String();
var se = new String();
field = 'Dates and times are according to the site visitor\'s computer.\r\n\r\n';
se = '';
for( var i=0; i<stats_Tracks.length; i++ ) {
	var parts = stats_Tracks[i].split("\t\t");
	var pieces = new Array();
	for( var ii=0; ii<parts.length; ii++ ) {
		var ta = parts[ii].split("\t");
		pieces[ta[0]] = ta[1];
		}
	var tm = pieces["When"];
	now.setTime(tm);
	var day = now.getDate(tm);
	var mon = now.getMonth(tm);
	var month = new String();
	switch(mon) {
		case 0 : month = 'Jan'; break;
		case 1 : month = 'Feb'; break;
		case 2 : month = 'Mar'; break;
		case 3 : month = 'Apr'; break;
		case 4 : month = 'May'; break;
		case 5 : month = 'Jun'; break;
		case 6 : month = 'Jul'; break;
		case 7 : month = 'Aug'; break;
		case 8 : month = 'Sep'; break;
		case 9 : month = 'Oct'; break;
		case 10: month = 'Nov'; break;
		case 11: month = 'Dec';
		}
	var year = now.getFullYear(tm);
	var hours = now.getHours(tm);
	var minutes = now.getMinutes(tm);
	if( minutes < 10 ) { minutes = "0" + minutes; }
	var seconds = now.getSeconds(tm);
	if( seconds < 10 ) { seconds = "0" + seconds; }
	var action = pieces["Action"];
	field += day + " " + month + " " + year + " " + hours + ":" + minutes + ":" + seconds + "\r\n";
	field += action + "\r\n";
	if( action.indexOf("View ") == 0 ) {
		field += ( pieces["Referrer"] ? "   Referrer: " + pieces["Referrer"] + "\r\n" : "" );
		field += ( pieces["SE"] ? "   Search Engine: " + pieces["SE"] + "\r\n" : "" );
		se += ( pieces["SE"] ? pieces["SE"] + "\r\n" : "" );
		}
	else { field += ( pieces["OnPage"] ? "   On page: " + pieces["OnPage"] + "\r\n" : "" ); }
	field += "\r\n";
	}
for(var i=0;i<replaceloglines.length;i++) { replaceloglines[i].value = field; }
for(var i=0;i<replaceseterms.length;i++) { replaceseterms[i].value = se; }
} // function stats_FormField()

function stats_NowTimeAndstats_CookieExpireTime() {
if(stats_CookieLifeDays > 0) {
	var now = new Date();
	stats_NowTime = now.getTime();
	var then = stats_NowTime + parseInt(stats_CookieLifeDays * 24 * 60 * 60 * 1000);
	now.setTime(then);
	return now.toGMTString();
	}
return 0;
} // function stats_NowTimeAndstats_CookieExpireTime()

function stats_ReferrerIsSE(referrer) {
if( /google\./.test(referrer) ) { 
	var engine = "Google";
	var terms = stats_GetTerms("q",referrer);
	if( terms.length ) { return "Google - " + stats_URLdecode(terms); }
	}
if( /bing\./.test(referrer) ) { 
	var terms = stats_GetTerms("q",referrer);
	if( terms.length ) { return "Bing - " + stats_URLdecode(terms); }
	}
if( /yahoo\./.test(referrer) ) { 
	var terms = stats_GetTerms("p",referrer);
	if( terms.length ) { return "Yahoo - " + stats_URLdecode(terms);	}
	}
} // function stats_ReferrerIsSE()

function stats_URLdecode(url) {
	url = url.replace(/\+/g," ");
	url = unescape(url);
	return url;
} // function stats_URLdecode()

function stats_GetTerms(amp,referrer) {
var ta = referrer.split('?');
ta = ta[1].split('&');
for( var i=0; i<ta.length; i++ ) {
	if( ta[i].indexOf(amp + "=") == 0 ) { return ta[i].substr(2); }
	}
} // function stats_GetTerms()

function stats_AddOnloadEvent(f) {
if(typeof window.onload != 'function') { window.onload = f; }
else {
	var cache = window.onload;
	window.onload = function() {
		if(cache) { cache(); }
		f();
		};
	}
} // function stats_AddOnloadEvent()
stats_AddOnloadEvent(stats_FormField);



