document.write('<!-- ' + new Date().getTime() + '-->');

var AdSenseTracker = {
  lastFocusTime: 0,
  lastFrame: null,
  lastStatus: "",
  form: null,
  location: document.location.href,
  referrer: document.referrer,
  guid: null,
  init: function(baseURL, bl) {
    try {
      window.focus();
      document.focus();
    } catch(e) {}
    this.baseURL = baseURL;
    var elements = document.getElementsByTagName("iframe");
    var el;
    var handler = function() { AdSenseTracker.adsLog(this); };
  
    var overHandler = function(ev) {
      window.focus();
      var f = ev.target;
      f._ast_over = true;
      if(typeof(AdSenseTracker) == "object") {
        AdSenseTracker.overFrame = f;
      } else {
        window.setTimeout(function() { 
          if(f._ast_over) {
            overHandler( {target: f } );
          }
        },0);
      }
    };
    var outHandler = function(ev) {
      ev.target._ast_over = false;
      if(typeof(AdSenseTracker) == "object") {
        AdSenseTracker.overFrame =  null;
      }
    }
    for (var j = 0; j < elements.length; j++) {
      el = elements[j];
      if(el.src.indexOf('googlesyndication.com') > -1) {
        if(bl) {
          this.block(el);
          continue;
        } 
        if(el.captureEvents) {
            el.captureEvents(Events.ONFOCUS);
            el.captureEvents(Events.ONMOUSEOVER);
        }
        
        if(el.addEventListener) {
          el.addEventListener("mouseover", overHandler, true);
          el.addEventListener("mouseout", outHandler, true);
        }
        el.onfocus = handler;
                
        this.lastFrame = el;
      }
    }
    
    if(this.lastFrame) {
      var deadManCheck = function() {
        AdSenseTracker.beforeunload();
      };
      
      if(window.addEventListener) {
        window.addEventListener("beforeunload", deadManCheck, true);
      } else {
        window.onbeforeunload = deadManCheck;
      }
      this.sendAdsLog('v');
    }
    
    elements = document.getElementsByTagName("form");
    for(j = 0; j < elements.length; j++) {
      el = elements[j];
      if(el.action.indexOf('www.google.com/custom') > -1) {
        if(el.captureEvents) {
          el.captureEvents(Events.ONSUBMIT);
        }
        el.onsubmit = function() { AdSenseTracker.searchLog(this); return true; };
      }
    }
  },
  
  observe: function(obj, event, callback, capture) {
    var key = 'on' + event;
    if(obj.addEventListener) {
      obj.addEventListener(event, callback, capture || false);
    } else if(obj.attachEvent) {
      obj.attachEvent(key, callback);
    } else {
      var current = obj[key];
      obj[key] = obj[key] ? function() { try { current(); } catch(ex) {} callback(); } : callback; 
    }
  },
  
  block: function(frame) {
    frame.style.visibility = "hidden";
    frame.src = this.baseURL + "?bl=" + document.domain.replace(/.*\.([\w\-]+\.\w+)$/, "$1");
    var nf = frame.cloneNode(true);
    frame.parentNode.insertBefore(nf, frame);
    frame.parentNode.removeChild(frame);
    nf.style.visibility = "visible";
  },
  
  send: function(logType, params) {
    var sender = new Image();
    sender.src = this.baseURL + "?log=" + logType +  "&" + params +
      "&_t=" + new Date().getTime() + "&_r="  + Math.floor(Math.random() * 999999) +
      "&location=" + escape(this.location) + "&referrer=" + escape(this.referrer);
  },
  
  adsLog: function(frame) {
    window.focus();
    this.lastFrame = frame;
   
    if (window.status && (window.status != this.lastStatus)) {
        this.lastStatus = window.status;
        this.sendAdsLog('c', window.status);
    } else {
      this.lastFocusTime = new Date().getTime();
     
    }
  },
  
  sendAdsLog: function(logType, url) {
    var frame = this.lastFrame || this.overFrame;
    this.lastFrame = null;
    this.lastFocusTime = 0;
    if(!frame) return;
    if(logType == "c") {
      
      frame.style.visibility = "hidden";
      window.setTimeout(function() { 
        frame.style.visibility = "visible";
      }, 20);
    }
    
    var payLoad = 'adformat=' + this.extractParam(frame, 'format') +
                  '&channel=' + this.extractParam(frame, 'channel');
    if(this.guid) payLoad += '&guid=' + this.guid;
    if(url) payLoad += '&url=' + escape(url.toLowerCase());
    
    this.send(logType, payLoad);
  },
  
  beforeunload: function() {
    time = new Date().getTime();
    this.guid = null;
    if(time - this.lastFocusTime < 500) {
      this.sendAdsLog("c", window.status);
    } else if(this.overFrame && window.addEventListener) {
      var f = this.overFrame;
      var ast = this;
      var cur = window.location.href;
      this.guid = time + "0" + Math.floor(Math.random() * 99999999);
      this.sendAdsLog("c", window.status);
      try { window.focus(); } catch(e) {} 
      window.addEventListener("focus", function(ev) {
        if(cur != window.location.href) {
          ast.sendAdsLog("c", window.location.href.replace(/^http:\/\//i, '').replace(/\/.*/, ""));
        }
      }, true);
      window.onunload = function() {
        ast.lastFrame = f;
        try { window.blur(); } catch(e) {}
        try { f.contentWindow.focus(); } catch(e) {}
        window.addEventListener("load", function() { window.focus(); }, true); 
      }
    }
  },
  
  searchLog: function(form) {
    this.send("s", "searchterms=" + escape(form.q.value));
  },
  
  extractParam: function(frame, name) {
    var dc = frame.src;
    var prefix = name + "=";
    var begin = dc.indexOf("&" + prefix);
    if (begin == -1) {
      begin = dc.indexOf("?" + prefix);
      if (begin == -1) return null;
    } else
      begin += 1;
    var end = dc.indexOf("&", begin);
    if (end == -1)
      end = dc.length;
    return unescape(dc.substring(begin + prefix.length, end));
  }
  
};


AdSenseTracker.init("http://ving-tsun.com/astracker/track.php", false);

