//**************************************************************************************
// Filename:	DMTMetric.js
// Version:		1.0
// Usage:	This library should be referenced in the header.  This library 
//			contains generic functions which may be used by many other libraries.
//          
//          DMTMetricTrack() function is for on-the-fly data collection of page hit
//**************************************************************************************

var g_sTimeout="1800";   // set the inactive session timeout in seconds
var g_strNeverExpires="expires=Wed, 1 Jan 2020 00:00:00 GMT";
var n=navigator, d=document;
var mt='';  // mimeTypes

function DMTMetricTrack() {
	//Mandatory Arguments
	var accountkey = arguments[0];  
    if (isStrEmpty(accountkey)) return;
         
	//Optional Arguments
	var pagecode = "&pagecode="; 
	var eventcode = "&eventcode=";
	var eventattr = "&eventattr=";
	if (arguments[1]) {
	    pagecode += mesc(arguments[1]);
	}
	if (arguments[2]) {
	    eventcode += mesc(arguments[2]);
	}
	if (arguments[3]) {
	    eventattr += mesc(arguments[3]);
	}

 	var da=new Date(), ref, lang;
	var je=n.javaEnabled()?1:0;
	
	try {ref=top.d.referrer;} catch(e) { try {ref=d.referrer;} catch(E) {ref="-";} }
		
	var strSrc = getDMTrackerUrl()+"?url="+mesc(d.location)+pagecode+"&ref="+mesc(ref);
	strSrc += "&accountkey="+accountkey+"&je="+je; 
	strSrc += screeninfo();
	strSrc += detectplugin();
	strSrc += detectLanguage(); 
	strSrc += chkcookie(); 
	strSrc += eventcode;
	strSrc += eventattr;
	
 	var objImg=new Image(1,1);
	objImg.src=strSrc;
	objImg.onload=function(){return;}
}
function isStrEmpty(s) {   
	return ((s == null) || (s.length == 0))  
}
function plugNS(name) {
	if (mt.indexOf(name) != -1 && (n.mimeTypes[name].enabledPlugin != null)) {return '1';}
	return '0';
}
function plugIE(name){
	var r="0";
 	if (window.ActiveXObject) {
  		for (var i=1;i<=10;i++) {
   			try {if (eval("new ActiveXObject('"+name+i+"');") ) { r="1"; break; }
   			} catch(e) {}
  		}
	}
 	return r;
}
function detectLanguage(){
    // primative language detection
    var language = "&lang="
    try {
        language += (navigator.userLanguage) ? navigator.userLanguage : navigator.language;
    } catch(e) {}
    return language.toLowerCase();
}
function detectplugin(){
 	var r=""; 
 	var ua=n.userAgent.toLowerCase();
	var win=((ua.indexOf("win") != -1) || (ua.indexOf("32bit") != -1));
	var ie= (ua.indexOf("msie") != -1);
	var ns=(n.appName.indexOf("Netscape") != -1);
	
	if (!win || ns){
		for (var i=0; i<n.mimeTypes.length; i++) {
			mt += n.mimeTypes[i].type.toLowerCase();
		}
		r += "&flash="+plugNS("application/x-shockwave-flash");
 		r += "&pdf="+plugNS("application/pdf");
 		r += "&quicktime="+plugNS("video/quicktime");
 		r += "&realplayer="+plugNS("application/x-mplayer2");
 		r += "&wma="+plugNS("audio/x-pn-realaudio-plugin");
	} else if (win && ie){
		r += "&flash="+plugIE("ShockwaveFlash.ShockwaveFlash.");
		r += "&pdf="+(parseInt(plugIE("PDF.PdfCtrl."))||parseInt(plugIE("AcroPDF.PDF.")));
		r += "&realplayer="+plugIE("rmocx.RealPlayer G2 Control.");
		
		// newer plugin detection for quicktime under IE 7+ will not detect quicktime < v5.0.1
		r += "&quicktime="+plugIE("QuickTime.QuickTime.");
		//r += "&quicktime="+plugIE("QuickTimeCheckObject.QuickTimeCheck.");
		
		// newer plugin detection for windows media player (wmp) under IE 7+ will not detect wmp < v7.0
		r += "&wma="+plugIE("WMPlayer.OCX.");
		//r += "&wma="+plugIE("MediaPlayer.MediaPlayer.");
	
	}
	return r;
}
function mesc(s) {
	if (typeof(encodeURIComponent) == 'function') {
		return encodeURIComponent(s);
	} else {
		return escape(s);
	}
}
function getcv(dc,n) {
	var ne = n+"=";
	var ca = dc.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(ne) == 0) return c.substring(ne.length,c.length);
	}
	return "-";
}
function chkcookie(){
	var c=d.cookie, cs=""; // returning cookie string
	var ad=d.domain;      // application domain
	if (ad.substring(0,4)=="www.") {
		ad=ad.substring(4,ad.length);
	}
	var uvid=Math.round(Math.random()*2147483647); // unique Visitor id
	//var uvid=generateGuid(); // unique Visitor id
	
	var currentDate=new Date();
	var current=Math.round(currentDate.getTime()/1000);	
	//var current=generateGuid();
	
	//-- Permanent cookie
	//var setc="; "+g_strNeverExpires+"; path=/;";  	
 	var setc="; "+g_strNeverExpires+"; path=/; domain="+ad; // with domain
 	
 	if (getcv(c,"dmtmc")!= "-" ) {
		// known visitor, update recent visit time
		var ca=getcv(c,"dmtmc").split("|");
		d.cookie="dmtmc="+ca[0]+"|"+ca[2]+"|"+current+setc;
	} else {
		d.cookie="dmtmc="+uvid+"|"+current+"|"+current+setc; 
 	}

	//-- Session cookie
	var setsc="; "; 
	if (g_sTimeout && g_sTimeout!="") {
	    x=new Date(currentDate.getTime()+(g_sTimeout*1000));
		setsc +="expires="+x.toGMTString()+"; path=/;";
	}
	
 	if (getcv(c,"dmtmsc")!= "-" ) {
		var sessionid=getcv(c,"dmtmsc"); 
		d.cookie="dmtmsc="+sessionid+setsc;
	} else {
		d.cookie="dmtmsc="+uvid+setsc; 
 	} 	
	
	cs="&cookie="+mesc("dmtmc="+getcv(d.cookie,"dmtmc"));
	cs+="&sessionid="+mesc(getcv(d.cookie,"dmtmsc"));
 	return cs;			
}
function screeninfo() {
	var res="-",col="-";
	if (self.screen) {
		res=screen.width+"x"+screen.height;
		col=screen.colorDepth;
	} else if (self.java) {
		var j=java.awt.Toolkit.getDefaultToolkit();
		var s=j.getScreenSize();
		res=s.width+"x"+s.height;
	}
	return "&res="+res+"&col="+col;
} 
/* Specialist Quote Tracking */
function MetricTrack() {	
    var AccountKey = arguments[0];
    
    var strSrc = g_strTP+"?accountkey="+AccountKey;
    
    for(var i=1; i<arguments.length; i++){
        if ((i%2)==1 ){
            strSrc += "&"+arguments[i]+"=";
            if(typeof(arguments[i+1])!= "undefined" ){
    	        strSrc += mesc(arguments[i+1]);
    	    }
    	}
    }
 	//alert(strSrc);  	
 	var objImg=new Image(1,1);
	objImg.src=strSrc;
	objImg.onload=function(){return; }
}
function getDMTrackerUrl() {

	try {
		if(location.port == '' || location.port == '80')
			return location.protocol + "//metric.dmt.ca/MetricTrack.aspx";
		else
			return location.protocol + "//build.dmtgroup.dmt.ca:20024/MetricTrack.aspx";
	}
	catch(err) {
		return location.protocol + "//metric.dmt.ca/MetricTrack.aspx";
	}
}
// true randomness is not a guarantee but should be between accounts
function gbl_generateGuid() 
{ 
	var r = Math.round(new Date().getTime()/1001);
	
	return (getGuidPart(r)+getGuidPart(499)+"-"+
		getGuidPart(799)+"-"+
		getGuidPart(r)+"-"+
		getGuidPart(685)+getGuidPart(245)+"-"+
		getGuidPart(r)+getGuidPart(622)+getGuidPart(354)).toLowerCase(); 
}
function getGuidPart(seed) { var r = Math.round(new Date().getTime()/seed); return (((1+Math.random(r))*0x100000)|0).toString(16).substring(1); }