/**************************************/
/** begin XML and callback functions **/

		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: "Chrome",
					identity: "Chrome"
				},
				{ 	string: navigator.userAgent,
					subString: "OmniWeb",
					versionSearch: "OmniWeb/",
					identity: "OmniWeb"
				},
				{
					string: navigator.vendor,
					subString: "Apple",
					identity: "Safari",
					versionSearch: "Version"
				},
				{
					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();

		var httpRequest = false;

		function delegate( target, callback ) {
			var func;
			if(arguments.length > 2) {
				var _params = [];
				for(var n = 2; n < arguments.length; n++) {
					_params.push(arguments[n]);
				}
				func = function() { 
					var params = [];
					for(var n = 0; n < arguments.length; n++) {
						params.push(arguments[n]);
					}
					for(var n = 0; n < _params.length; n++) {
						params.push(_params[n]);
					}
					callback.apply(target,params); 
				}
			}
			else {
				func =  function() {
					callback.apply(target,arguments);
				}
			}
		
			return func;
		}  

		function makeRequest(url, callFunction)
		{
			httpRequest = false;
			if (window.XMLHttpRequest) { // Mozilla, Safari,...
				httpRequest = new XMLHttpRequest();
				if (httpRequest.overrideMimeType) {
					httpRequest.overrideMimeType('text/xml');
				}
			}
			else if (window.ActiveXObject) { // IE
				try {
					httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch (e) {
					try {
						httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (e) {
					}
				}
			}
			
			if (!httpRequest) {
				alert("Giving up :( Cannot create an XMLHTTP instance");
				return false;
			}
			
			var strbrowserversion = String(BrowserDetect.version);
			
			if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('3') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('4') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('5') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			//8rr Elvin - add support for firefox 6
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('6') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			//8rr Elvin - add support for firefox 7
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('7') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			//8rr Elvin - add support for firefox 8
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('8') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			//8rr Elvin - add support for firefox 9
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('9') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			//8rr Elvin - add support for firefox 10
			else if(BrowserDetect.browser == 'Firefox' && strbrowserversion.indexOf('10') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);	
			else if(BrowserDetect.browser == 'Safari')
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			else if(BrowserDetect.browser == 'Chrome')
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			else if(BrowserDetect.browser == 'Explorer' && strbrowserversion.indexOf('9') >= 0)
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange2, callFunction);
			else
				httpRequest.onreadystatechange = delegate(this, onReadyStateChange, callFunction);
			
			httpRequest.open('GET', url, true);
			httpRequest.send(null);
		}

		function onReadyStateChange(callFunction)
		{
			if(httpRequest.readyState == 4)
			{			
				if (httpRequest.status == 200)
				{
					var xmldoc = httpRequest.responseXML;
					callFunction(xmldoc);
				}
				else {
					alert("There was a problem with the request.");
				}
			}
		}

		// For Safari and FF3
		// Safari and FF3 uses slightly different implementation of delegate methods
		function onReadyStateChange2(e, callFunction) {
			if(httpRequest.readyState == 4) {
				if (httpRequest.status == 200) {
					var xmldoc = httpRequest.responseXML;
					callFunction(xmldoc);
				} else {
					alert("There was a problem with the request.");
				}
			}
		}


/** end XML and callback functions **/
/************************************/

