/*
*   NetMonitor tag 2.0  
*/
/** CALLING THE TAG

<script type="text/javascript" src="nmtracker.js"></script> 
<script type="text/javascript">
// try {
	var netmonitor = new nmTracker(1234);
	netmonitor.track({
		pageName: 'Developers Frontpage',
		page: 'Common',
		outputTarget : 'the_img_goes_here'  
	});
// } catch(error){}
</script>
*/


var nmTracker = function (s) {
	var pcl=(3600*24*31*6);		// presistent cookie length
	var scl=1800; 						// session cookie length
  var ses = "nmses" + s;    // session cookie name
  var per = "nmper" + s;		// persistent cookie name
  var p = {
  	c : 1, 									// cookie test
  	d : 0, 									// duration (seconds since first page load)
		id : s,  								// site id
		n : 1,  								// page load (#)
		l : document.location,  // current page
		r : document.referrer,  // referring page
		v : 0,                  // session id
		p : 0,									// previous session id
		pn : 0                  // Number of previous visits
  };
  
  /* PRIVATE FUNCTIONS */
  var __construct = function () {
		var i=0;
	//	var t="http://batcave.developers.fi/tracker/";
var t="http://tracker5.netmonitor.fi/";
		for (x in p) {
			t=t+(i==0 ? '?' : '&')+escape(x)+"="+ escape(p[x]);
			i++;	
		}
		return "<img src=\""+ t +"\" width=\"0\" height=\"0\" border=\"0\" alt=\"\" style=\"border:0;width:0;height:0;padding:0;margin:0;\" />";
	}
	
	
	var __sc = function(n,l,i) { 								// name,length(as seconds),input
		var d=new Date();
		d.setTime(d.getTime() + (l*1000)); 				// change this to something else so it takes input as seconds,,
		document.cookie=n+"="+i+";expires=" + d.toUTCString(); 	
	}
	
	
	var __gc = function(n) { // name
		if (document.cookie.length>0) {
			var s=document.cookie.indexOf(n+"=");
			if (s!=-1) {
				s=s+n.length+1;
				e=document.cookie.indexOf(";",s);	
    		if (e==-1) e=document.cookie.length;
    		return unescape(document.cookie.substring(s,e)); 	
			}
		}
		return "";	
	}
	
	var __token = function() {												// generate token
		var d=new Date();                               // JS date
		var t=d.getTime();                              // timestamp in milliseconds
		var r=Math.floor( Math.random()*1000001 )				// get random number
		t=t+''+r;                                       // add rand to MStimestamp
		if (r.length < 6) {                             // if rand is too short, add some numbers
			for (i=0; i<(6-r.length); i++) {
				t=t+'0';	
			}
		}
		return t;                                       // return token
	}
		
	
	var __getUts = function() {									// getUnixTimeStamp
		var d = new Date();
		var	m = d.getTime();
		return Math.floor( m / 1000 );
	}
	
	var __pch = function (s) {                   // Persistent cookie handler
		var r = [0,0];                           // input: current session id
		var pg = __gc(per);
		if (pg.length > 0) {
			r = pg.split(",");	
		}
		
		__sc(per, pcl, s+","+ (parseInt(r[1])+1));
		     
		// previous session id + number of sessions
		return r;	
	}
	

	/* 
	    'PUBLIC FUNCTIONS' 
	*/	
	__sc('nm2tc', 60, 'true');					// testing if cookies are enabled (or browser can handle cookies)
	
	this.track = function(o) {	
		if(__gc('nm2tc')=='') p.c=0;								// If nm2tc is empty
	 	var d = new Date();
	 	var sc = __gc(ses);													// get session cookie
	 	var n = __getUts();													// local 'n' = now
	 	var s = __getUts();													// local 'n' = now
		if (sc=='') {            // session starts
			p.v = __token();													// generate a new token      hihi
			var b = __pch(p.v);														// set
      p.p = b[0];
      p.pn = b[1];
		} else {								 // update session
			var b=sc.split(",");													// get cookie values
			p.n = ( parseInt(b[0])+1 );								// first param is pageload # (n)
			var s = parseInt(b[1]);                   // session start time
			p.d = n - s;                 							// get duration from the start of the visit
			p.v = b[2];																// second values is the token (session id)
			p.p = b[3];
      p.pn = b[4];
		}
		__sc(ses,scl, p.n+","+ s +","+p.v+","+p.p+","+p.pn);						// set new values for cookie
		//console.log("duration = " + p.d);
		
		// document.getElementById(o.outputTarget).innerHTML = __construct();// return tag
		document.write( __construct());							// write tag on page
		return false;
	}

	this.event = function() {// event tracking
		return "tag";
	}
	
}
