
var siteCookieName = "alkac";
var fileReq = location.pathname;
if (fileReq=="" || fileReq=="/") fileReq = new String("/index.htm");

var b32l = "abcdefghijklmnopqrstuvwxyz6789-." 
var B32U = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
var cookStr = "";

function to32(x, c, trans) {

	var retStr = "";
	for (var i=0; i<c; i++) {
		retStr += trans.charAt(x % 32);
		x >>>= 5;
		}
	return(retStr);
	}
	
function from32(s, trans) {
	
	var retVal = 0;
	for (var i=s.length-1; i>=0; i--) {
		retVal <<= 5;
		retVal += trans.indexOf(s.charAt(i));
		}
	return(retVal);
	}

function makeHash() {

	stdChars = "abcdefghijklmnopqrstuvwxyz0123456789";

	var s = new String(fileReq);
	s = s.toLowerCase();
	if (s.length>220) s = s.substring(0,220);

	var xorCode = 0;
	var offsetCode = 0;
	for (i=0; i<s.length; i++) {
		c = stdChars.indexOf(s.charAt(i)) + 1; // +1 moves -1 into valid 0-?
		offsetCode += (i*37) + c;
		xorCode ^= ((c << (i%9)) & 0x07fff);
		}

	return(to32(offsetCode,4, B32U) + to32(xorCode,3, B32U));
	}

function updateCookie(hashStr) {

	var d = new Date();
	var i,j,k,m,n,t;
	var img = new Image();

	t = d.getTime();
	m = Math.floor(t/60000);	// minute
	n = Math.floor(t/2592000000);		// coarse monthstamp
	idH = ""+Math.floor(t/1000000);	// split time into two pieces to accomdate WebTV
	idL = "000000"+(t%1000000);		// and allow for padding of low order value
	idL = idL.substring(idL.length-6,idL.length);
	
	d.setFullYear(d.getFullYear()+1);
	var expStr = d.toGMTString();

	cookStr = document.cookie;
	if (!document.cookie || cookStr.indexOf(siteCookieName)<0) {
		cookStr = siteCookieName+"="+idH+idL+"_1_"+m+"_"+hashStr+to32(n,2,b32l)+"ba; path=/; expires="+expStr;
		document.cookie = cookStr;
		if (!document.cookie) {
			cookStr = '/z' + fileReq +'_0_0_0_';
			img.src = cookStr;
			}
		else {
			cookStr = '/z' + fileReq + '_' + idH+idL + '_1_1_';
			img.src = cookStr;
			}
		}

	// else inc refresh and also inc visits if last visit > 20 minutes ago
	else {
		cVal = new Object();
		cVal[0] = 0; // userId
		cVal[1] = 0; // visits
		cVal[2] = 0; // last_timestamp in minutes

		var cookieDB = "";

		j = cookStr.indexOf('=', cookStr.indexOf(siteCookieName))+1;
		cookStr = cookStr.substring(j, cookStr.length) + ';';	// make sure it ends
		j = cookStr.indexOf(';');
		cookStr = cookStr.substring(0,j) + '_';	// add delimiter
		j = 0;
		// get userId, visits and last timestamp 
		for (i=0; i<3; i++) {
			k = cookStr.indexOf('_', j);
			cVal[i] = cookStr.substring(j,k);
			if (i==2) cVal[i] = cVal[i]-0;	// convert timestamp to number
			j = k + 1;
			}
		cookieDB = cookStr.substring(j,cookStr.indexOf('_',j));		// leave this as string
		if (m-cVal[2] > 20) cVal[1]++;
		cVal[2] = m;

		k = cookieDB.indexOf(hashStr);
		if (k<0) { // not found (if too large erase oldest to make room, but not the first or the last--they're a pain)
			if (cookieDB.length>3900) {
				min=1024; // month stamps have to be less than this;
				minIndex=11;
				for (i=11; i<cookieDB.length-15; i+=11) {
					tmp = from32(cookieDB.substring(i+7, i+9), b32l);
					if (tmp < min) {
						min = tmp;
						minIndex = i;
						}
					}
				cookieDB = cookieDB.substring(0,minIndex) + cookieDB.substring(minIndex+11,cookieDB.length);
				}
			cookieDB = cookieDB.substring(0,cookieDB.length) + hashStr + to32(n,2,b32l) + "ba";
			i = 1;	// set refresh value for this page
			}
		else { // update refresh
			tmpStr = cookieDB.substring(k, k+11);
			i = from32(tmpStr.substring(9,11), b32l) + 1;
			cookieDB = cookieDB.substring(0,k+7) + to32(n,2,b32l) + to32(i,2,b32l) + cookieDB.substring(k+11,cookieDB.length);
			}

		document.cookie = siteCookieName+"="+cVal[0]+"_"+cVal[1]+"_"+cVal[2]+"_"+cookieDB+"; path=/; expires="+expStr;
		cookStr = '/z' + fileReq + '_' + cVal[0] + '_' + cVal[1] + '_' + i + '_';
		img.src = cookStr;
		}
	}

if (document.images!=null) updateCookie(makeHash());
