

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;



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));
}
}
}

