
document.write("<script src='firebug.js'></script>");

//var DEBUG = true;
var DEBUG = false;
var BASE = 'http://aelite.ajaxperformance.com/';

res = {}
res.start = new Date().getTime();

pageEvent = function(name) {
   this.name = name;
   this.start = new Date().getTime();
}

pageEvent.prototype.closeInterval = function() {
   this.pending = false;
   this.end = new Date().getTime();
}

pageEvent.prototype.send = function() {

   var relativeStart = this.start - res.start;
   var duration = -1;
   if (this.end) {
      duration = this.end - this.start;
   }

   var src = BASE + "events/create?event[hit_id]=" + res.hit_id + "&event[name]=" +
      escape(this.name) + "&event[start]=" + relativeStart + 
      "&event[duration]=" + duration;
   send(src);
}

var events = new Array();

function startInterval(name) {
   //gomez.startInterval(name);
   console.time(name);
   var evt = new pageEvent(name);
   evt.pending = true;
   events[name] = evt;
   events[events.length] = evt;
}

function nameEvent(name) {
   //gomez.nameEvent(name);
   var evt = new pageEvent(name);
   console.log(name + " happened at " + (evt.start - res.start));
   events[name] = evt;
   events[events.length] = evt;
   if (events.closed) {
      events[name].send();
      events[name] = null;
   }
}

function endInterval(name) {
   //gomez.endInterval(name);
   console.timeEnd(name);
   debug("endInterval(" + name + ")");
   if (events[name]) events[name].closeInterval();
   if (events.closed) {
      events[name].send();
      events[name] = null;
   }
}

function sendPendingEvents() {
   var newEventsArray = new Array();
   for(var i=0; i<events.length; ++i) {
      var evt = events[i];
      if (evt.pending) {
         newEventsArray[newEventsArray.size]=evt;
         newEventsArray[evt.name]=evt;
         continue;
      } 
      evt.send();
   } 
   events = newEventsArray;
   events.closed = true;
}

function debug(str) {
   if (!DEBUG) return;
   console.debug(str);
}

var BrowserDetect = {
   init: function () {
      this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
      this.version = this.searchVersion(navigator.userAgent)
         || this.searchVersion(navigator.appVersion)
         || "an unknown version";
      this.OS = this.searchString(this.dataOS) || "an unknown OS";
   },
   searchString: function (data) {
      for (var i=0;i<data.length;i++)  {
         var dataString = data[i].string;
         var dataProp = data[i].prop;
         this.versionSearchString = data[i].versionSearch || data[i].identity;
         if (dataString) {
            if (dataString.indexOf(data[i].subString) != -1)
               return data[i].identity;
         }
         else if (dataProp)
            return data[i].identity;
      }
   },
   searchVersion: function (dataString) {
      var index = dataString.indexOf(this.versionSearchString);
      if (index == -1) return;
      return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
   },
   dataBrowser: [
      {  string: navigator.userAgent,
         subString: "OmniWeb",
         versionSearch: "OmniWeb/",
         identity: "OmniWeb"
      },
      {
         string: navigator.vendor,
         subString: "Apple",
         identity: "Safari"
      },
      {
         prop: window.opera,
         identity: "Opera"
      },
      {
         string: navigator.vendor,
         subString: "iCab",
         identity: "iCab"
      },
      {
         string: navigator.vendor,
         subString: "KDE",
         identity: "Konqueror"
      },
      {
         string: navigator.userAgent,
         subString: "Firefox",
         identity: "Firefox"
      },
      {
         string: navigator.vendor,
         subString: "Camino",
         identity: "Camino"
      },
      {     // for newer Netscapes (6+)
         string: navigator.userAgent,
         subString: "Netscape",
         identity: "Netscape"
      },
      {
         string: navigator.userAgent,
         subString: "MSIE",
         identity: "Explorer",
         versionSearch: "MSIE"
      },
      {
         string: navigator.userAgent,
         subString: "Gecko",
         identity: "Mozilla",
         versionSearch: "rv"
      },
      {     // for older Netscapes (4-)
         string: navigator.userAgent,
         subString: "Mozilla",
         identity: "Netscape",
         versionSearch: "Mozilla"
      }
   ],
   dataOS : [
      {
         string: navigator.platform,
         subString: "Win",
         identity: "Windows"
      },
      {
         string: navigator.platform,
         subString: "Mac",
         identity: "Mac"
      },
      {
         string: navigator.platform,
         subString: "Linux",
         identity: "Linux"
      }
   ]

};
BrowserDetect.init();

function send(src) {
   var scr = document.createElement("SCRIPT");
   scr.src = src;
   document.documentElement.appendChild(scr);
}

function domContentLoaded() {
   // debug('domContentLoaded');
   res.dom_loaded = new Date().getTime(); 
}

function docOnload() {
   debug('docOnload');
   res.doc_loaded = new Date().getTime();
   
   if (res.dom_loaded == undefined) {
      res.dom_loaded = res.doc_loaded;
   }
   res.domLoad = res.dom_loaded - res.start;
   res.docOnLoad = res.doc_loaded - res.start;

   var msg = BASE + 'hits/create?hit[page_id]=' + res.page_id + 
      '&hit[browser_type]=' + BrowserDetect.browser + '&hit[os]=' + BrowserDetect.OS +
      '&hit[browser_version]=' + BrowserDetect.version;
   if (!res.no_defaults) msg += '&domready=' + res.domLoad + '&onload=' + res.docOnLoad; 
   send(msg);
}


// for Mozilla browsers

if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", domContentLoaded, false);
    window.addEventListener("load", docOnload, false);
}

// for Internet Explorer (using conditional comments)
/*@cc_on @*/
/*@if (@_win32)
attachEvent('onload', docOnload);
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
    if (this.readyState == "complete") {
        domContentLoaded(); // call the onload handler
    }
};
/*@end @*/

if (/WebKit/i.test(navigator.userAgent)) { // sniff
    var _timer = setInterval(function() {
        if (/loaded|complete/.test(document.readyState)) {
            clearInterval(_timer);
            domContentLoaded(); // call the onload handler
        }
    }, 10);
}

