var lastStatus;
var exit;

var fframesrc;
var q_str;
var q_str_limit;

var offset_x;
var offset_y;

var sw;
var sh;
var sc;

var sw_client;
var sh_client;

var sw_grid;//width grid
//var sh_grid;//height grid

var points;
var i2;

var adgreed_account;
var what_ads;
var coord_step;

var time_step;//milliseconds
var unused_time;//milliseconds
var max_points;
var br;//browser
var min_width_proc;//min width in proc when use movetracker

var debug;
var debug_div;
var sendinfo;
var adgreed_url_channel;

function debug_info(str)
{
    if(debug) debug_div.innerHTML = str;
}

function wsize() 
{
  var myWidth = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
  } else if( document.documentElement && document.documentElement.clientWidth ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
  } else if( document.body && document.body.clientWidth) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
  }
  return myWidth;
}


function initTrack()
{
    if(!document.getElementById("mvcodeid")) return false;

    if(window.opera) br = 'opera';
    else
    if(document.layers) br = 'ns4';
    else
    if(document.getElementById && !document.all) br = 'ff';
    else
    if(document.all) br = 'ie';
    else br = '-';
    
    if(br!='ie'&&br!='ff') return false;
    
    sw = screen.width;
    sh = screen.height;
    sc = screen.colorDepth;
    
    proc = 100*wsize()/(sw+1);
    if(proc<min_width_proc) return false;
    
    if(debug)
    {
        debug_div = document.createElement('div')
	    debug_div.style.width = '100%';
	    debug_div.style.height = '20px';
	    debug_div.style.left = '0px';
	    debug_div.style.top = '0px';
	    debug_div.style.position = 'absolute';
	    debug_div.style.backgroundColor = 'yellow';
        v = 50;
        debug_div.style[(br=='ie')?"filter":"MozOpacity"] = (br=='ie')?"alpha(opacity="+v+")":v/100;
	    document.getElementById("mvcodeid").appendChild(debug_div);
        debug_info('debug mode');
    }
    
    document.getElementById("mvcodeid").style.width = screen.width-21;

    lastStatus = '';
    exit = false;
    sendinfo = false;

    fframesrc = '';
    q_str = '';
    q_str_limit = 0;
    

    offset_x = Math.floor(Math.random()*coord_step);
    offset_y = Math.floor(Math.random()*coord_step);

    sw_client = document.body.scrollWidth;
    sh_client = document.body.scrollHeight;

    sw_grid = Math.floor((sw_client+coord_step+offset_x)/coord_step);//width grid
    //sh_grid = Math.floor((sh_client+coord_step+offset_y)/coord_step);//height grid

    points = new Array();
    i2=new Image(1,1);
    return true;
}

function _uVoid() { return; }

function coof(e)
{
  if(exit) return;
  
  if(points.length>max_points) 
  {
    q_str_limit = 1;
    return;
  }

  if(!e) e = window.event;
  
  //was click
  if(e.type=='click') click = 1;
  else click = 0;

  x = Math.floor((e.clientX + document.body.scrollLeft + offset_x)/coord_step);
  y = Math.floor((e.clientY + document.body.scrollTop + offset_y)/coord_step);
  sidx = y*sw_grid+x;

    
  d = new Date();
  if(points.length>0)
  {
    last_point = points[points.length-1];
    last_time = last_point[1];
    new_time = d.getTime();
    offset_time = new_time-last_time;
    q_offset_time = Math.floor(offset_time/unused_time);

    if(!click&&(last_point[0]==sidx||offset_time<time_step)) return;
    if(click&&last_point[0]==sidx)
    {
        if(last_point[2]) return;

        points.push(new Array(sidx, new_time, click));
        q_str += 'k'+q_offset_time.toString(16);//click
        
        debug_info('click: '+click+' | grid: '+sw_grid+'x* | '+x+'x'+y+'x'+sidx+' | rand: '+offset_x+'x'+offset_y+' | elements count: '+points.length+' | bytes: '+q_str.length+' | time offset: '+offset_time);
        return;
    }

  }
  else
  {
    last_time = d.getTime();
    new_time = last_time;
    offset_time = 0;
    q_offset_time = 0;
  }

  points.push(new Array(sidx, new_time, click));
  
  q_str += 's'+sidx.toString(16)+(click?'k':'x')+q_offset_time.toString(16);
  //k - click
  //x - move
  
  debug_info('click: '+click+' | grid: '+sw_grid+'x* | '+x+'x'+y+'x'+sidx+' | rand: '+offset_x+'x'+offset_y+' | elements count: '+points.length+' | bytes: '+q_str.length+' | time offset: '+offset_time);
}

function alc()
{
    if(sendinfo) return;
    
	exit = true;
	sendinfo = true;
    url = 'acc='+escape(adgreed_account);
    url += '&url='+escape(''+document.location.href);
    url += '&mv='+q_str;
    url += '&ml='+q_str_limit;
    url += '&sw='+sw;
    url += '&sh='+sh;
    url += '&swc='+sw_client;
    url += '&shc='+sh_client;
    url += '&cs='+coord_step;
    url += '&ts='+time_step;
    url += '&ut='+unused_time;
    url += '&mp='+max_points;
    url += '&ox='+offset_x;
    url += '&oy='+offset_y;
    url += '&ol='+document.getElementById("mvcodeid").offsetLeft;
    url += '&ot='+document.getElementById("mvcodeid").offsetTop;
    url += '&br='+br;
    url += '&sc='+sc;
    url += '&auc='+adgreed_url_channel;

	if(!fframesrc) 
	{
        url += '&tg=';
        url += '&fr=1';
        url += '&ref='+escape(''+document.referrer);
        
	    url = 'http://www.adgreed.com/move_tracker.php?'+url;
	    //alert('unload... bytes: '+url.length);
	    
	    i2.src = url;
	    i2.onload=function() { _uVoid(); }
        return;
	}
	window.focus();
	ref = escape(''+fframesrc);

	if(br=='ff')//ff
		lastStatus = '-';
	else//ie
	{
		if(!window.status) lastStatus = '+';
		else lastStatus = window.status;
	}

    url += '&tg='+escape(''+lastStatus);
    url += '&ref='+ref;
    url = 'http://www.adgreed.com/move_tracker.php?'+url;

    //alert('unload... bytes: '+url.length);
	i2.src = url;
	i2.onload=function() { _uVoid(); }
}

function adgreed_tracker()
{
    if(!initTrack()) return false;

    d = new Date();
    new_time = d.getTime();
    points.push(new Array(0, new_time, 0));
    
	elements = document.getElementsByTagName("iframe");
	for (var i = 0; i < elements.length; i++) 
	{
		if(elements[i].src.indexOf(what_ads) > -1)
		{
			if(br=='ff')//ff
			{
				elements[i].addEventListener('mouseover', function(e){if(!exit)fframesrc=e.target.src;}, true);
			}
			else//ie, opera
			{
				elements[i].onfocus = function(){if(!exit)fframesrc=window.event.srcElement.src;};
			}
		}
	}
    if(br=='ff')//ff
    {
    
 		window.addEventListener('scroll', coof, true);
 		window.addEventListener("mousemove", coof, true);
 		window.addEventListener("click", coof, true);
 		
 		window.addEventListener('mouseover', function(e){if(!exit)fframesrc=''}, true);
		window.addEventListener('keypress', function(e){if(!exit&&e.keyCode==116)fframesrc=''}, true);
		window.addEventListener('unload', alc, false);
	    window.addEventListener("beforeunload", function(e){exit=true;}, false);
    }
    else//ie, opera
    {
        document.body.onmousemove = coof;
        document.body.onscroll = coof;
        document.body.onclick = coof;
        
		document.body.onmouseover = function(){if(!exit)fframesrc='';};
		document.body.onkeypress = function(){if(!exit&&window.event.keyCode==116)fframesrc=''};
		window.onbeforeunload = alc;
    }
}
