﻿var searchGuid;
var retryCount = 0;
var maxRetry = 50;
var adsenseTrackerActive = false;
var adsenseTrackerUnit = '';

function addLoadEvent(func) {
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
	window.onload = func; 
    } else { 
        window.onload = function() { 
            if (oldonload) { 
                oldonload(); 
            } 
            func(); 
        } 
    } 
}


function doLoad()
{
    var head = document.getElementsByTagName("head")[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
	script.src = 'jquery-1.3.2.min.js';
	head.appendChild(script);
	
	script = document.createElement('script');
	script.type = 'text/javascript';
	script.src = 'json.js';
	head.appendChild(script);
	
	script = document.createElement('script');
	script.type = 'text/javascript';
	script.src = 'http://log.ewoss.net/Logger.ashx?proxy';
	head.appendChild(script);

    setTimeout("doLog()", 400);
}

function doLog()
{
    if(typeof $=='function')
    {
        if(typeof Logger=='function')
        {
            searchGuid = getCookie('hitGuid');
            if(searchGuid == null || searchGuid == "")
            {
                searchGuid = guid();
                setCookie('hitGuid', searchGuid, 1);
            }
            
            var s = new Logger();
            s.channel = new JQueryChannel({ jsonp: true });
            s.kwargs = true;
            s.getuserinfo(dump);
            
            var anchors = document.getElementsByTagName("a");
            var size = anchors.length;
            
            for(var i = 0; i < size; i++)
            {
                anchors[i].onclick = doClick(anchors[i], i);
            }
            
            InitAdsenseTracker();
            
        }else
        {
            retryCount++;
            if(retryCount < maxRetry)
            {
                setTimeout("doLog()", 200);
            }
        }
    }else
    {
        retryCount++;
        if(retryCount < maxRetry)
        {
            setTimeout("doLog()", 200);
        }
    }
}

function doClick(anchor, indx)
{
    return function() {
        var s = new Logger();
        s.channel =  new JQueryChannel({ jsonp: true });
        s.kwargs = true;
        s.insertclicklog(searchGuid, anchor.href, anchor.innerHTML, (indx + 1), function() {}); 
    }
}

function JQueryChannel(options) {
    options = options || {};
    this.rpc = function(call) {
        if (call.request.params.constructor === Array)
            throw new Error('Positional parameters are not supported.');
        var params = [];
        $.each(call.request.params, function(k, v) {
            if (v) params.push(k + '=' + encodeURIComponent(v));
        });
        var ajax_REQ = $.ajax({
            url: call.url + '/' + call.request.method,
            type: 'GET',
            jsonp: options.jsonp ? 'jsonp' : null,
            cache: options.cache,
            data: params.join('&'),
            dataType: options.jsonp ? 'jsonp' : 'json',
            timeout: 10000,
            // TODO error: ...
            success: function(data) {
                if (ajax_REQ) { ajax_REQ.abort(); }
                call.callback(data);
            }
        });
    }
}

function dump(response) {
    if(document.referrer != "")
    {
        var s = new Logger();
        s.channel = new JQueryChannel({ jsonp: true });
        s.kwargs = true;
        s.inserthitlog(searchGuid, document.URL, response.result.userIp, response.result.userAgent, document.referrer, userId, dump2);
    }
}

function dump2()
{

}

function S4() {
   return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
   return (S4()+S4()+S4()+S4()+S4()+S4()+S4()+S4());
}

function setCookie(c_name,value,expiredays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function getCookie(c_name)
{
    if (document.cookie.length>0)
      {
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1)
        {
        c_start=c_start + c_name.length+1;
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
        }
      }
    return "";
}

// adsense stuff
function InitAdsenseTracker() {
	var pageHasAdsense = false;
	var el = document.getElementsByTagName("iframe");
	for (var i=0; i<el.length; i++) {
		if ((el[i].src.indexOf('googlesyndication.com') > -1) ||
		    (el[i].src.indexOf('googleads') > -1)) {
			pageHasAdsense = true;

			el[i].onmouseover = adsenseTrackerActivate;
			el[i].onmouseout = adsenseTrackerDeActivate;
		}
	}

	if (pageHasAdsense) {
		if (typeof window.attachEvent != 'undefined') {
			// this works for IE
			window.attachEvent('onbeforeunload', CheckClickAdsenseTracker);
		} else if (typeof window.addEventListener != 'undefined') {
			// this works for firefox
			window.addEventListener('beforeunload', CheckClickAdsenseTracker, false);
		}
	}
}

function CheckClickAdsenseTracker() {
	if (adsenseTrackerActive) {
		var reportedUrl = 'http://adsense.google.com';

		if (adsenseTrackerUnit != '') {
			reportedUrl += '/'+ escape(adsenseTrackerUnit);
		}

		var adsenseClickedAd = '';
		// check for ad Url/AsLinks text (is disabled in Firefox by default)
		if (window.status) {
			if (window.status.substring(0, 6) == 'go to ') {
				adsenseClickedAd = window.status.substring(6);
			} else if (window.status.substring(0, 15) == 'View ads about ') {
				adsenseClickedAd = window.status.substring(15);
			} else if (window.status != '') {
				// universal window.status reporting
				// ad support for your language here...
				adsenseClickedAd = window.status;
			}
		}
		
		if (adsenseClickedAd == '') {
			adsenseClickedAd = 'Google Adsense Ad';
		}

		doAdsenseClick(reportedUrl, adsenseClickedAd, 0);
	}
}

// when moving mouse to adsense frame, activate click tracking for current ad unit...
function adsenseTrackerActivate() {
	adsenseTrackerUnit = '';

	if (this.parentNode) {
		// check for custom asc_ adsense element id
		if (this.parentNode.id.substring(0, 4) == 'asc_') {
			adsenseTrackerUnit = this.parentNode.id.substring(4);
		}
	}
	if (adsenseTrackerUnit == '') {
		// decode format parameter from adsense ads url
		var url = this.src;
		var startIndex = url.indexOf('format=');
		if (startIndex >= 0) {
			var lastIndex = url.indexOf('&', startIndex);
			adsenseTrackerUnit = lastIndex >= 0 ? url.substring(startIndex + 7, lastIndex) : url.substring(startIndex + 7);
		}else
		{
		    var startIndex = url.indexOf('slotname=');
		    if (startIndex >= 0) {
			    var lastIndex = url.indexOf('&', startIndex);
			    adsenseTrackerUnit = lastIndex >= 0 ? url.substring(startIndex + 9, lastIndex) : url.substring(startIndex + 9);
		    }
		}
	}
	adsenseTrackerActive = true;
}

// when moving mouse out of adsense frame, deactivate click tracking...
function adsenseTrackerDeActivate() {
	adsenseTrackerUnit = '';
	adsenseTrackerActive = false;
}

function doAdsenseClick(anchor, innerText, indx)
{
    var s = new Logger();
    s.channel =  new JQueryChannel({ jsonp: true });
    s.kwargs = true;
    s.insertclicklog(searchGuid, anchor, innerText, (indx + 1), function() {}); 
}

addLoadEvent(doLoad);
