// gautils.js - Developed by Panalysis Pty Ltd www.panalysis.com
// version 1.00 22/12/2008

var _gaDTypes = new Array(".pdf",".doc",".docx",".xls",".xlsx",".zip",".rtf");
var _gAutoTrackLinks= true; // automatically tag the links to PDFs, email addresses, etc
var _gaDelay = 500; // the delay to capture clicks to external links. Set to 0 to prevent any delay
var _gaUNSWSSCookieNames = Array("unswid"); // set this to the cookies to look for to detect a student
var _gaIsUNSWScript="http://www.law.unsw.edu.au/_activeLibrary/iptest.asp";
var _gAccount="";
var _gAccList = Array(
	Array('law','UA-4749586-1'),
	Array('gtcentre','UA-4749586-2'),
	Array('cle','UA-4749586-3'),
	Array('ilc','UA-4749586-5'),
	Array('atax','UA-4749586-6')
);


// do not modify below this line
var _gaBaseDir = "/tracking/"; // the directory to record any page views 
var _gaBaseDomain = "";
var _gTimeIn;
var _gCVid;
var _gEventTrackingEnabled = true; // set to true if Google Analytics has event tracking
var pageTracker;
if(! self.isUNSW)
	var isUNSW = false;

// general tracking utility. Used to track email links, PDF links, other sites, etc.
// usage _gaTrackThis(URL, type, Optional URL to record)
// trigger when a URL is to be recorded that isn't automatically tracked in Google Analytics.

function _gaTrackThis(u,t,o)
{
	_gaMyDest = u;
	if(t=="o")
	{
		u = u.replace(/http[s]?:\/\//,"");
		u = _gaBaseDir + "outbound/" + u;
	}
	else if(t=="d")
	{
		var re1 = new RegExp("http[s]?://[^\/]*?(\/.*)");
		var m = re1.exec(u);
		if(m)
			u = m[1];
	}
	else if (t=="e")
	{
		var re1 = new RegExp("mailto:(.*)");
		var m = re1.exec(u);
		if(m)
			u = _gaBaseDir + "email/" + m[1];
	}
	else if (o != "")
	{
		u = o; // record the overriding URL
	}

	if(self.urchinTracker)
	{
		urchinTracker(u);
	}
	else if(self.pageTracker)
	{
		pageTracker._trackPageview(u);
	}

	if(t =="e" || _gaDelay==0)
	{
		return true;
	}
	else
	{
		setTimeout("_gaSendToDest()",_gaDelay); // delay for 1/2 second
		return false;
	}
	
}

// Redirect the visitor to their final destination
// This function is used to track links to external sites that load into the
// same browser window.
// Automatic function. Do not call directly
function _gaSendToDest()
{
	document.location.href=_gaMyDest;
}

// set up the link tracking by looping through the document and then examining each link
// trigger on the window.onload event
function _gaTrackLinks()
{
	var hashVal ="";

	if(! self.pageTracker && ! self.urchinTracker)
		return true;

	var mL = document.getElementsByTagName("a");
	
	for(var i=0;i<mL.length;i++)
	{
		var bTDL = true;
		var re1 = new RegExp("http[s]?:\/\/([^\/]*?)(\/.*)");
		var re2 = new RegExp("mailto:(.*)");
		var m = re1.exec(mL[i].href.toLowerCase());
		var m2 = re2.exec(mL[i].href.toLowerCase());

		if(m)
		{
			if(m[1].indexOf(_gaBaseDomain)<0)
			{
				mL[i].onclick = function () { _gaTrackThis(this.href,'o',''); return false;};
				bTDL = false;
			}
		}
		else if (m2)
		{
			mL[i].onclick = function () { _gaTrackThis(this.href,'e','');  return true;};
			bTDL = false;
		}

		if(bTDL == true)
		{
			for(x=0;x<_gaDTypes.length;x++)
			{
				if(mL[i].href.toLowerCase().indexOf(_gaDTypes[x])>-1)
				{
					mL[i].onclick = function () { _gaTrackThis(this.href,'d',''); return false;};
				}
			}
		}
	}
}

// extract any hash parameters by name. 
// internal function to capture query parameter like data
// from the hash rather than the URL query string
function _gaGetHashParam(strParam){

	var _pstr = document.location.hash.substring(1);
	var _uparams = _pstr.split("&");
	for(i = 0; i < _uparams.length; i++){
		var np = _uparams[i].split("=");
		if(trim(np[0].toLowerCase()) == strParam.toLowerCase())
			return trim(np[1]);
	}
	return "";
}

// set cookies
function _gaSetCookie(cookieName,cookieValue,nDays,strDomain) {
	var today = new Date();
	var expire = new Date();
	var pdm = "";
	if (nDays==null || nDays==0) nDays=1;
	expire.setTime(today.getTime() + 3600000*24*nDays);
	if (strDomain && strDomain!="") 
		pdm=" domain="+strDomain+";"; 
	else if(self._udn)
		pdm=" domain="+_udn+";";
	else
		pdm = " domain=." + _gaBaseDomain;
	document.cookie = cookieName+"="+cookieValue + ";expires="+expire.toGMTString() + "; path=/;" + pdm;
}

// get a cookie by name
function _gaGetCookie(strParam){
	if(! document.cookie)
		return;
		
	var _ucookies = document.cookie.split(";");
	var re = new RegExp("([^=]*)=(.*)");
	for(i = 0; i < _ucookies.length; i++){
		
		var np = re.exec(_ucookies[i]);
		
		if(trim(np[1].toLowerCase()) == strParam.toLowerCase())
			return trim(np[2]);
	}
	return "";
}


// startVideoTimer
// captures the name of the video and the time when it was requested
// records this into Google Analytics using the Event Tracking functions
// trigger when the visitor clicks on the link to launch the video
function startVideoTimer(myVid)
{
	var myDate = new Date();
	_gTimeIn = myDate.getTime();
	_gCVid = myVid;
	try
	{
		if(_gEventTrackingEnabled)
		{
			pageTracker._trackEvent("videos", "start", myVid);
		}
	} catch (err) {}
}

// endVideoTimer
// captures the end of the video when the visitor has closed the
// video popup window.
// triggered in the video popup window onUnload event
function endVideoTimer()
{

	var duration;
	var myDate = new Date();
	var timeOut = myDate.getTime();
	
	duration = Math.round((timeOut - _gTimeIn)/1000);
	try
	{
		if(_gEventTrackingEnabled)
		{
			pageTracker._trackEvent("videos", "end", _gCVid,duration);
		}
	} catch (err) {}
}


// courseSearch
// captures the user's search query when they are searching the Law Course database
function courseSearch(theForm)
{
	var df = document.forms[theForm].action; 
	if(df.indexOf("cq=")>0)
	{
		var l = df.indexOf("cq=");
		document.forms[theForm].action = df.substring(l,0) + "cq=" + document.forms[theForm].key.value;
	}
	else
		document.forms[theForm].action = df + "?cq=" + document.forms[theForm].key.value;
	return true;
}

// _gaDoInternalSearch
// internal function to submit search query
function _gaDoInternalSearch()
{
	document.forms['googleForm'].submit();
}

// internalSearch
// track the visitor's search queries entered into the Google search engine on the Law site.
function internalSearch()
{
	//try {

		if(document.googleForm.q.value !="")
		{
			pageTracker._trackPageview('/sitesearch.asp?q=' + document.googleForm.q.value);
			setTimeout("_gaDoInternalSearch()",_gaDelay); // delay for 1/2 second
			
		}
		else
		{
			alert("Please enter a search query");
		}
		//return false;
	//}catch (err) {}
}
// trim
// removes any leading or trailing whitespace from the value passed to it.
function trim(val){ return val.replace(/^\s+|\s+$/g, '') ; }

// ************************** Start Main ********************************/

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

if(_gaIsUNSWScript != "")
{
	document.write(unescape("%3Cscript src='" + _gaIsUNSWScript + "' type='text/javascript'%3E%3C/script%3E"));
}


// attach any events that need to occur after the document has fully loaded
window.onload= function ()
{
	
	for(var ii=0;ii<_gAccList.length;ii++)
	{
		if(document.location.host.indexOf(_gAccList[ii][0])>0)
		{
			_gaBaseDomain = _gAccList[ii][0]+".unsw.edu.au";
			_gAccount = _gAccList[ii][1];
		}
	}
	
	// change the search link:
	var dl = document.getElementsByTagName('a');
	var mGS=false;
	for(var ia=0;ia<dl.length;ia++)
	{
		if(dl[ia].href=="javascript:document.googleForm.submit()")
		{
			dl[ia].href="javascript:internalSearch()";
			mGS=true;
		}
	}
	
	
	if(mGS==false && document.forms['googleForm'])
	{
		document.forms['googleForm'].onsubmit= function() { return internalSearch(); }
	}
	
	if(document.forms['ugform'])
		document.forms['ugform'].onsubmit= function() { return courseSearch('ugform'); }
	if(document.forms['pgform'])
		document.forms['pgform'].onsubmit= function() { return courseSearch('pgform'); }
	if(document.forms['gform'])
		document.forms['gform'].onsubmit= function() { return courseSearch('gform'); }
	
	
	if(_gAccount=="")
		return;
	
// Visitor Segmentation
// if the user has logged in then look for the expected cookie and 
// then set the user variable to either a staff member or student

	try {
		// if there is a cookie that specifies the visitor type then 
		// set the visitor to the UNSW Students and Staff segment
		var _gaIsMatched = false;
		for(var i =0; i<_gaUNSWSSCookieNames.length;i++)
		{
			if(document.cookie.indexOf(_gaUNSWSSCookieNames[i]) >=0)
				_gaIsMatched = true;
		}
		
		// has the visitor been referred from any private internal sites
		if(document.referrer.toLowerCase().indexOf('extranet.law.unsw.edu.au')>=0)
			_gaIsMatched = true;
		else if(document.referrer.toLowerCase().indexOf('mail.law.unsw.edu.au')>=0)
			_gaIsMatched = true;
			
		if(_gaIsMatched == true || isUNSW == true)
		{
			// to avoid tracking this transaction as a page view we
			// create a new tracker and set this to point to null
			var tmpTracker = _gat._getTracker("UA-0-0");
			tmpTracker._setDomainName(_gaBaseDomain);
			
			// then set the user defined variable
			tmpTracker._setVar('UNSW Students and Staff');
		}
	} catch (err) {} 
	
	
	try {
		// track the page view in Google Analytics
		pageTracker = _gat._getTracker(_gAccount);
		pageTracker._setDomainName(_gaBaseDomain);
		pageTracker._addIgnoredRef(_gaBaseDomain);
		pageTracker._addIgnoredRef('googlesyndicatedsearch.com');
		// clear the organic search list to remove the googlesynticated search site
		// from the list of organic search engines
		pageTracker._clearOrganic();
		
		// rebuild the organic search list
		pageTracker._addOrganic("google.","q");
		pageTracker._addOrganic("yahoo","p");
		pageTracker._addOrganic("msn","q");
		pageTracker._addOrganic("aol","query");
		pageTracker._addOrganic("aol","encquery");
		pageTracker._addOrganic("lycos","query");
		pageTracker._addOrganic("ask","q");
		pageTracker._addOrganic("altavista","q");
		pageTracker._addOrganic("netscape","query");
		pageTracker._addOrganic("cnn","query");
		pageTracker._addOrganic("looksmart","qt");
		pageTracker._addOrganic("about","terms");
		pageTracker._addOrganic("mamma","query");
		pageTracker._addOrganic("alltheweb","q");
		pageTracker._addOrganic("gigablast","q");
		pageTracker._addOrganic("voila","rdata");
		pageTracker._addOrganic("virgilio","qs");
		pageTracker._addOrganic("live","q");
		pageTracker._addOrganic("baidu","wd");
		pageTracker._addOrganic("alice","qs");
		pageTracker._addOrganic("yandex","text");
		pageTracker._addOrganic("najdi","q");
		pageTracker._addOrganic("aol","q");
		pageTracker._addOrganic("club-internet","query");
		pageTracker._addOrganic("mama","query");
		pageTracker._addOrganic("seznam","q");
		pageTracker._addOrganic("search","q");
		pageTracker._addOrganic("wp","szukaj");
		pageTracker._addOrganic("onet","qt");
		pageTracker._addOrganic("netsprint","q");
		pageTracker._addOrganic("google.interia","q");
		pageTracker._addOrganic("szukacz","q");
		pageTracker._addOrganic("yam","k");
		pageTracker._addOrganic("pchome","q");
		pageTracker._addOrganic("kvasir","searchExpr");
		pageTracker._addOrganic("sesam","q");
		pageTracker._addOrganic("ozu","q");
		pageTracker._addOrganic("terra","query");
		pageTracker._addOrganic("nostrum","query");
		pageTracker._addOrganic("mynet","q");
		pageTracker._addOrganic("ekolay","q");
		pageTracker._addOrganic("search.ilse","search_for");
		
		pageTracker._trackPageview();
		// initialise the link tracking
		if(_gAutoTrackLinks==true)
			_gaTrackLinks();
	} catch(err) {}
}
