var oldCreateElement;

(function() {
	var row, t, c, i, l, e;

	//Add document.getElementById to IE < 7
  if (document.all && !document.getElementById) {
		document.getElementById = function(id) {
			return document.all[id];
		}
  }
  //Add document.getElementsByTagName() to IE < 7
  if (document.all && !document.getElementsByTagName("*")) {
    document.getElementsByTagName = function(str) {
    	if (str == "*") {
        return document.all;
    	} else {
        return document.all.tags(str);
    	}
		}
  }
  //Add addEventListener method to elements in IE < 7
  if (document.attachEvent && !document.addEventListener) {
    l = document.all.length;
    for (i = 0; i < l; i++) {
      if (document.all[i].attachEvent) document.all[i].addEventListener = ieAddEventListener;
    }
    oldCreateElement = document.createElement;
    document.createElement = function(tagName) {
      e = oldCreateElement(tagName);
    	e.addEventListener = ieAddEventListener;
    	return e;
		};
  }
})();

function ieAddEventListener(eventName, handler, capture) {
  this.attachEvent('on' + eventName, handler);
}

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"
    },
    {
        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"
    },
    {
        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"
    }]
}
