
/* {{{

      ___           ___                       ___                              
     /  /\         /  /\        ___          /__/\          ___        ___     
    /  /::\       /  /:/_      /  /\         \  \:\        /__/\      /  /\    
   /  /:/\:\     /  /:/ /\    /  /:/          \  \:\       \  \:\    /  /:/    
  /  /:/~/:/    /  /:/ /:/_  /__/::\      _____\__\:\       \  \:\  /__/::\    
 /__/:/ /:/___ /__/:/ /:/ /\ \__\/\:\__  /__/::::::::\  ___  \__\:\ \__\/\:\__ 
 \  \:\/:::::/ \  \:\/:/ /:/    \  \:\/\ \  \:\~~\~~\/ /__/\ |  |:|    \  \:\/\
  \  \::/~~~~   \  \::/ /:/      \__\::/  \  \:\  ~~~  \  \:\|  |:|     \__\::/
   \  \:\        \  \:\/:/       /__/:/    \  \:\       \  \:\__|:|     /__/:/ 
    \  \:\        \  \::/        \__\/      \  \:\       \__\::::/      \__\/  
     \__\/         \__\/                     \__\/           ~~~~              
      ___           ___           ___           ___                       ___     
     /  /\         /  /\         /  /\         /  /\          ___        /  /\    
    /  /:/_       /  /::\       /  /::\       /  /::\        /  /\      /  /:/_   
   /  /:/ /\     /  /:/\:\     /  /:/\:\     /  /:/\:\      /  /:/     /  /:/ /\  
  /  /:/_/::\   /  /:/  \:\   /  /:/~/:/    /  /:/~/::\    /  /:/     /  /:/ /:/_ 
 /__/:/__\/\:\ /__/:/ \__\:\ /__/:/ /:/___ /__/:/ /:/\:\  /  /::\    /__/:/ /:/ /\
 \  \:\ /~~/:/ \  \:\ /  /:/ \  \:\/:::::/ \  \:\/:/__\/ /__/:/\:\   \  \:\/:/ /:/
  \  \:\  /:/   \  \:\  /:/   \  \::/~~~~   \  \::/      \__\/  \:\   \  \::/ /:/ 
   \  \:\/:/     \  \:\/:/     \  \:\        \  \:\           \  \:\   \  \:\/:/  
    \  \::/       \  \::/       \  \:\        \  \:\           \__\/    \  \::/   
     \__\/         \__\/         \__\/         \__\/                     \__\/    
     
     
     Copyright 2009-forever Reinvigorate. All rights reserved.

}}} */

/* {{{
	$Id: tracking_base.js 1065 2009-10-22 16:29:19Z sean $
}}} */

var reinvigorate =
{
	host: "localhost"
	, port: 80
	, wkey: ""
	, session:
	{
		user_agent: ""
		, url: ""
		, referrer: ""
		, browser: ""
		, browser_version: ""
		, browser_ident: ""
		, platform: ""
		, platform_version: ""
		, unique: false
		, search_engine: ""
		, search_keyword: ""
		, begin: new Date()
	}
	, env:
	{
		duration:
		{
			unique: 86400
			,return_visitor: 86400*365
		}
		, key:
		{
			ret: ""
			, ses: ""
			, ses_index: ""
			, visit_time: ""
		}
	}
	, jobs: []
	, cookie_exists: function(n)
	{
		return document.cookie.indexOf(n + "=") != -1;
	}
	, get_cookie: function(n)
	{
		var b, e, n, t;
		if (document.cookie == "")
			return false;
		with (document.cookie)
		{
			if ((b = indexOf(n + "=")) == -1)
				return false;
			if ((e = substring(b).indexOf(";")) == -1)
				return unescape(substring(b + n.length + 1));
			t = substring(b + n.length + 1);
			return unescape(t.substring(0,t.indexOf(";")));
		}
		return  "";
	}, set_cookie: function(name, value, expires, path, domain, secure)
	{
		var whence = "";
		if (expires)
		{
			var the_date = new Date();
			the_date.setTime(the_date.getTime()+(expires*1000));
			whence = the_date.toGMTString();
		}
	    var cook = name + "=" + escape(value) + (expires ? "; expires=" + whence : "") + (path ? "; path=" + path : "") + (domain ? "; domain=" + domain : "") + (secure ? "secure" : "");
	    document.cookie = cook;
	}
	, add: function(func)
 	{
 		reinvigorate.jobs.push(func);
 	}
	, track: function(_wkey)
 	{
		var _e;
		
		reinvigorate.wkey = _wkey;

		with (reinvigorate.env.key)
		{
			ret = _wkey + "_r";
			ses = _wkey + "_s";
			ses_index = _wkey + "_i";
			visit_time = _wkey + "_vt";
			
			if (!reinvigorate.cookie_exists(ret))
				reinvigorate.set_cookie(ret,0,reinvigorate.env.duration.return_visitor,"/");
			else if (!reinvigorate.get_cookie(ses))
				reinvigorate.set_cookie(ret,parseInt(reinvigorate.get_cookie(ret)) + 1,reinvigorate.env.duration.return_visitor,"/");

			if (!reinvigorate.get_cookie(ses))
			{
				reinvigorate.set_cookie(ses,reinv_util.sid(),reinvigorate.env.duration.unique,"/");
				reinvigorate.set_cookie(ses_index,1,reinvigorate.env.duration.unique,"/");
				reinvigorate.session.unique = true;
			} else
			{
				reinvigorate.set_cookie(ses_index,parseInt(reinvigorate.get_cookie(ses_index)) + 1,reinvigorate.env.duration.unique,"/");
			}
		}
		
		with (reinvigorate.session)
		{
			user_agent = navigator.userAgent.toLowerCase();
			url = (window.location + "").substring(0,250);
		
			reinv_util.get_browser();
			reinv_util.get_platform();
		
			// find referrer
			try
			{
				if (parent.document.referrer != undefined && unique)
	                referrer = parent.document.referrer + "";
			} catch (_e) {}
			
			try
			{
				if (referrer == "")
					referrer = document.referrer + "";
				
				// Try not to track referrers from the same hostname
				if (referrer.indexOf(location.hostname) != -1)
					referrer = "";
			} catch (_e) {}
			
			if (referrer == "blockedReferrer")
				referrer = "";
			
			// Don't count hit if the request is from a user viewing heatmaps
			if ((new RegExp(/heatmap(\/[0-9]*)?$/)).exec(referrer))
				return;

			// was the referrer from a search engine?
			if (referrer != "")
			{
				try
				{
					var matches;
					var exp = new RegExp(/^([a-zA-Z]+:\/\/).*?([^.]+)\.[^.\/]+(\/|$)/);
					
					if (matches = exp.exec(referrer))
					{
						var k = reinv_util.search_engines[matches[2].toLowerCase()];
						var v = "";
						if (typeof k != "undefined")
						{
							var pos = referrer.indexOf(k[1]+"=");
							if (pos > -1)
							{
								v = referrer.substr(pos+k[1].length+1);
								pos = v.indexOf("&");
								if (pos > -1)
									v = v.substr(0,pos);
								v = unescape(v);
							}
						}
					}
					
					if (v != "")
					{
						search_engine = k[0];
						search_keyword = v;
					}
				} catch (_e) {}
			}
		}

		// build output map
 		var map = {};

		map["std"] = 1;
		map["wkey"] = reinvigorate.wkey;
		map["ses"] = reinvigorate.get_cookie(reinvigorate.env.key.ses);
		map["ses_index"] = parseInt(reinvigorate.get_cookie(reinvigorate.env.key.ses_index));
		map["cook"] = !!document.cookie;
		map["lt"] = reinv_util.ltime();
		map["url"] = reinvigorate.session.url;
		map["title"] = (document.title && document.title != "") ? document.title : "Untitled";

		if (typeof re_name_tag != "undefined")
			map["nt"] = re_name_tag;
		if (typeof re_context_tag != "undefined")
			map["ct"] = re_context_tag;
		
		function trim(str)
		{
			return str.replace(/^\s*|\s*$/g,'');
		}
		
		with (reinvigorate.session)
		{
			map["bwr"] = trim(browser);
			map["bwrv"] = trim(browser_version);
			map["os"] = trim(platform);
			map["osv"] = trim(platform_version);
		
			if (unique)
			{
				map["u"] = "1";
				map["ret_index"] = parseInt(reinvigorate.get_cookie(reinvigorate.env.key.ret));
				map["tz"] = (new Date()).getTimezoneOffset()/60;
				map["resw"] = screen.width;
				map["resh"] = screen.height;
			
				if (search_keyword != "")
				{
					map["se"] = search_engine;
					map["kw"] = search_keyword;
				}
			
				if (referrer != ""
					&& reinv_util.server_name(referrer)
					!= reinv_util.server_name(url))
					map["ref"] = referrer;
			} else
			{
				map["vt"] = Math.floor((reinvigorate.session.begin.getTime()-parseInt(reinvigorate.get_cookie(reinvigorate.env.key.visit_time)))/1000);
				if (document.referrer != undefined)
					map["pp"] = document.referrer;
			}
		}
		
		reinvigorate.set_cookie(reinvigorate.env.key.visit_time, reinvigorate.session.begin.getTime(),86400,"/");

		// modules
 		for (var i=0;i<reinvigorate.jobs.length;++i)
 		{
 			var r = reinvigorate.jobs[i]();
			if (typeof r == "object")
			{
	 			for (var k in r)
				{
					try // safety
					{
 						map[k] = r[k];
					} catch (_e) {}
				}
			}
 		}

		map["rnd"] = Math.floor(Math.random()*214748364);

 		var buf = "";
 		for (var k in map)
 			buf += escape(k) + "=" + escape(map[k]) + "&";
 		if (buf.length > 0)
 			buf = buf.substr(0,buf.length-1);

		var img = new Image(1,1);
		var proto = document.location.protocol == "https:" ? "https" : "http";
		img.src = proto + "://" + reinvigorate.host + (reinvigorate.port == 80 ? "" : (":"+reinvigorate.port)) + "/re_/ping?" + buf;
 	}
};


var reinv_util =
{
	ltime: function()
	{
		var d = new Date();
		var hr = d.getHours()%12;
		return (hr == 0 ? 12 : hr) + ":" + (d.getMinutes().toString().length == 1 ? "0" : "") + d.getMinutes() + " " + (d.getHours() < 12 ? "am" : "pm");
	}
	, sid: function()
	{
		return Math.floor(Math.random()*214748364);
	}
	, get_ua: function(s)
	{
		return reinvigorate.session.user_agent.indexOf(s) + 1;
	}
	, search_engines:
	{
		"google":		["Google","q"]
		,"yahoo":		["Yahoo","p"]
		,"msn":			["MSN","q"]
		,"aol":			["AOL","query"]
		,"lycos":		["Lycos","query"]
		,"ask":			["Ask","q"]
		,"altavista":	["AltaVista","q"]
		,"search": 		["Search.com","q"]
		,"netscape":	["Netscape","s"]
		,"cnn": 		["CNN","query"]
		,"looksmart":	["LookSmart","qt"]
		,"about": 		["About","terms"]
		,"mamma": 		["Mamma","query"]
		,"alltheweb":	["AlltheWeb","q"]
		,"gigablast":	["Gigablast","q"]
		,"voila":		["Voila","kw"]
		,"virgilio":	["Virgilio","qs"]
		,"live":		["Live","q"]
		,"baidu":		["Baidu","wd"]
		,"seznam": 		["Seznam","w"]
		,"yandex": 		["Yandex","text"]
		,"najdi": 		["Najdi","q"]
	}
	, server_name: function(url)
	{
		var matches;
		var exp = new RegExp(/^([a-zA-Z]+:\/\/).*?([^.]+)\.[^.\/]+(\/|$)/);
		if (matches = exp.exec(url))
			return matches[2];

		return "";
	}
	, get_browser: function()
	{
		with (reinvigorate.session)
		{
			// browser
			if (reinv_util.get_ua("konqueror"))
			{
				browser = "Konqueror";
				browser_ident = "konqueror";
			} else if (reinv_util.get_ua("chrome"))
			{
				browser = "Google Chrome";
				browser_ident = "chrome";
			} else if (reinv_util.get_ua("safari"))
			{
				browser = "Safari";
				browser_ident = "safari";
			}  else if (reinv_util.get_ua("opera"))
			{
				browser = "Opera";
				browser_ident = "opera";
			} else if (reinv_util.get_ua("webtv"))
			{
				browser = "WebTV";
				browser_ident = "webtv";
			} else if (reinv_util.get_ua("firefox"))
			{
				browser = "Firefox";
				browser_ident = "firefox";
			} else if (reinv_util.get_ua("msie"))
			{
				browser = "Internet Explorer";
				browser_ident = "msie";
			} else if (reinv_util.get_ua("omniweb"))
			{	
				browser = "OmniWeb";
				browser_ident = "omniweb";
			} else if (reinv_util.get_ua("netscape"))
			{
				browser = "Netscape";
				browser_ident = "netscape";
			} else if (!reinv_util.get_ua("compatible"))
			{
				browser = "Netscape Navigator";
				browser_ident = "Netscape Navigator";
			}

			// browser version
			var i, ua, b, cr;
			if (browser_ident == "Netscape Navigator" && document.layers)
			{
				browser_version = 4;
			} else if (!((i = user_agent.indexOf(browser_ident+" ")) >= 0 || (i = user_agent.indexOf(browser_ident+"/")) >= 0))
			{
				browser_version = "";
			} else
			{
				ua = user_agent.substring(i + browser_ident.length + 1);
				if (ua.charAt(0) == "v")
					ua = ua.substring(1);
				b = "";
				for (cnt=0;cnt<ua.length;cnt++)
				{
					cr = ua.charAt(cnt);
					if ((cr >= 0 && cr <= 9) || cr == ".")
						b += cr;
					else
						break;
				}
				browser_version = b;
			}
		}
	}
	, get_platform: function()
	{
		with (reinvigorate.session)
		{
			// platform
			if(reinv_util.get_ua("iphone"))
				platform = "iPhone";
			else if (reinv_util.get_ua("sunos"))
				platform = "SunOS";
			else if (reinv_util.get_ua("freebsd") || reinv_util.get_ua("openbsd"))
				platform = "BSD";
			else if (reinv_util.get_ua("linux"))
				platform = "Linux";
			else if (reinv_util.get_ua("mac") || reinv_util.get_ua("ppc"))
				platform = "Mac";
			else if (reinv_util.get_ua("x11"))
				platform = "UNIX";
			else if (reinv_util.get_ua("win"))
				platform = "Windows";
			else if (reinv_util.get_ua("nintendo wii"))
				platform = "Nintendo Wii";
			else if (reinv_util.get_ua("playstation 3"))
				platform = "Playstation 3";
			else if (reinv_util.get_ua("playstation portable"))
				platform = "PlayStation Portable";
			else
				platform = "";
			
			// platform version
			var os = platform;
	
			if (os == "Windows")
			{
				if (user_agent.indexOf("win3.11") != -1 || user_agent.indexOf("windows 3.1") != -1)
					platform_version = "3.1";
				else if (user_agent.indexOf("winnt3.51") != -1)
					platform_version = "NT 3.11";
				else if (user_agent.indexOf("winnt4.0") != -1)
					platform_version = "4.0";
				else if (user_agent.indexOf("win95") != -1 || user_agent.indexOf("windows 95") != -1)
					platform_version = "95";
				else if (user_agent.indexOf("win98") != -1 || user_agent.indexOf("windows 98") != -1)
					platform_version = "98";
				else if (user_agent.indexOf("win 9x 4.90") != -1)
					platform_version = "Millennium Edition";
				else if (user_agent.indexOf("nt 5.0") != -1 || user_agent.indexOf("windows 2000") != -1)
					platform_version = "2000";
				else if (user_agent.indexOf("nt 5.1") != -1)
					platform_version = "XP";
				else if (user_agent.indexOf("nt 5.2") != -1)
					platform_version = "Server 2003 / XP Pro (x64 Edition)";
				else if (user_agent.indexOf("nt 6.0") != -1)
					platform_version = "Vista";
				else if (user_agent.indexOf("nt 6.1") != -1)
					platform_version = "7";
				else if (user_agent.indexOf("win32") != -1)
					platform_version = "XP";
				else if (user_agent.indexOf("windows nt") != -1)
					platform_version = "NT";
			} else if (os == "Mac")
			{
				if (user_agent.indexOf("os x") != -1 && user_agent.indexOf("intel") != -1)
					platform_version = "OS X (Intel)";
				else if (user_agent.indexOf("os x") != -1 && user_agent.indexOf("ppc") != -1)
					platform_version = "OS X (PowerPC)";
				else if (user_agent.indexOf("mac") != -1)
					platform_version = "MacOS";
			} else if (os == "SunOS")
			{
				var exp = new RegExp(/sunos ([0-9.]+)/);
				var matches;
				if ((matches = exp.exec(user_agent)) && matches.length == 2)
					platform_version = matches[1];
			}
		}
	}
};


reinvigorate.add(function()
{
	re_heatmap_click_cnt=0;
	var heatmap_click_event = function(e)
	{
		if(!e)
			e = window.event;
		if (++re_heatmap_click_cnt > 3)
			return;
		var w = document.clientWidth !== undefined ? document.clientWidth : window.innerWidth;
		var h = document.clientHeight !== undefined ? document.clientHeight : window.innerHeight;
		var scrollx = window.pageXOffset === undefined ? document.scrollLeft : window.pageXOffset;
		var scrolly = window.pageYOffset === undefined ? document.scrollTop : window.pageYOffset;
		if(e.clientX > w || e.clientX < 0 || e.clientY > h || e.clientY < 0)
			return;
		var params = 'heatmap=1&wkey=' + escape(reinvigorate.wkey) + '&x=' + (e.clientX + scrollx) + '&y=' + (e.clientY + scrolly) + '&w=' + w + '&h=' + h + '&url=' + escape(reinvigorate.session.url) + '&title=' + escape((document.title && document.title != '') ? document.title : 'Untitled');
		if (((e.clientX + scrollx)+(e.clientY + scrolly))*w*h == 0)
			return;
		var img = new Image(1,1);
		var proto = document.location.protocol == "https:" ? "https" : "http";
		img.src = proto + '://' + reinvigorate.host + (reinvigorate.port == 80 ? '' : (':'+reinvigorate.port)) + '/re_/ping?' + params;
	}
	if (document.addEventListener)
		document.addEventListener('mouseup', heatmap_click_event, false);
	else if (document.attachEvent)
		document.attachEvent('onmouseup', heatmap_click_event);
	return {};
});

function log_region()
{
	var map = {};
	if (reinvigorate.session.unique)
	{
		map["tz"] = ((new Date()).getTimezoneOffset()/60)+"";
		if (navigator.language)
			map["lang"] = navigator.language.toLowerCase();
	}
	return map;
}
reinvigorate.add(log_region);

reinvigorate.host = "beta.reinvigorate.net";

reinvigorate.port = 80;

