// browser detection
//http://www.quirksmode.org/js/detect.htm
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.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
var bid=BrowserDetect.browser+BrowserDetect.version;
//alert(BrowserDetect.browser+BrowserDetect.version);
//alert(bid);

function dih (id,innerhtml) {
return;
	var e=document.getElementById(id);
	if (e) {e.innerHTML=innerhtml;}
}
function evbreak (evt) {
	evt.cancelBubble=true;
	if (evt.stopPropagation) evt.stopPropagation();
	return(false);
}
var ctralt=0;
function kd(evt) {
	var el=document.getElementById('kc');
	if (el) {
		el.innerHTML=evt.keyCode;
	}
	evt=(evt) ? evt : ((event) ? event : null);
	if (evt) {
		dih('kd',evt.keyCode);
		if (!ctralt) {
			ctralt=evt.keyCode==17 | evt.keyCode==18;
		}
		if (bid.substring(0,2).match(/Ex|Sa|Ch/)) {
			switch (evt.keyCode) {
			case 13:
				select();
				evbreak(evt);
				return;
			case 36:
				evbreak(evt);
				qip(evt.keyCode,'');
				return;
			case 37:
				evbreak(evt)
				qip(0,'\b');
				return;
			case 38:
				up();
				evbreak(evt);
				return;
			case 39:
				select();
				evbreak(evt);
				return;
			case 40:
				down();
				evbreak(evt);
				return;
			}
		}
		var kc=evt.keyCode
		if (evt.keyCode) {
			if (kc==36) {
				//alert(36);
				//qip(0,'');
				return;
				//evbreak(evt);
				//return evbreak(evt);
			}
			if (bid.substring(0,2)=='Ex') {
				if (evt.keyCode<=40) {
					//alert('Ex:'+evt.keyCode);
					switch (evt.keyCode) {
					case 8:
						qip(0,'\b');
						return evbreak(evt);
					case 32:
						qip(0,' ');
						return evbreak(evt);
					case 37:
						qip(0,'\b');
						return evbreak(evt);
					case 9:
						qip(0,'\t');
						return evbreak(evt);
					}
					if (evt.keyCode != 17 && evt.keyCode != 18) {
						//alert('kd:keyCode='+evt.keyCode);
						return evbreak(evt);
					}
				}
			}
			//alert('xx:kc='+kc);
			switch (kc) {
			case 38:
				keyskip=1;
				up();
				return(evbreak(evt));
				//return(false);
			case 39:
				keyskip=1;
				select();
				evbreak(evt);
				return(false);
			case 40:
				//alert('kc='+kc);
				keyskip=1;
				down();
				evbreak(evt);
				return(false);
			}
		}
	}
}
var keyskip=0;
function kp(evt) {
	if (keyskip) {
		//alert('keyskip=1');
		evbreak(evt);
		//alert('kp:keyskip');
		keyskip=0;
		return(false);
	}
	evt=(evt) ? evt : ((event) ? event : null);
	if (evt) {
		dih('cp',evt.keyCode);
		if (bid.substring(0,2).match(/Fi|Op|Mo/)) {
			//alert('Fi-Op-Mo');
			switch (evt.keyCode) {
			case 13:
				select();
				evbreak(evt);
				return;
			case 36:
				keyskip=1;
				evbreak(evt);
				qip(evt.keyCode,'');
				return(false);
			case 37:
				evbreak(evt);
				qip(0,'\b');
				return(false);
			case 38:
				evbreak(evt);
				up();
				return(false);
			case 39:
				select();
				evbreak(evt);
				return(false);
			case 40:
				evbreak(evt);
				down();
				return(false);
			}
		}
		if (evt.charCode) {
		    dih('cp',evt.charCode);
		}
		var charCode=(evt.charCode) ? evt.charCode : evt.keyCode;
		var c=String.fromCharCode(charCode);
		dih('c',c);
		if (ctralt) {
			ctralt=0;
			return(true);
		}
		if (evt.keyCode) {
			//always IE7
			//alert('navigation-key:'+evt.keyCode);
			evt.cancelBubble=true;
			if (evt.stopPropagation) evt.stopPropagation();
			qip(0,c);
			return(false);
		} else {
			//ie7
			evt.cancelBubble=true;
			if (evt.stopPropagation) evt.stopPropagation();
			if (c.length) {
				qip(0,c);
				return(false);
			}
		}
	}
}
function ku(evt) {
	evt=(evt) ? evt : ((event) ? event : null);
	if (evt) {
		dih('ku',evt.keyCode);
		if (ctralt) {
			ctralt=!((evt.keyCode==17)|(evt.keyCode==18));
		}
	}
}
//document.onkeydown=kd;
//document.onkeypress=kp;
//document.onkeyup=ku;

