var isNav4, isNav6, isIE4;
function isPositionFixedSupported() {
var br=getBrowser();
if ((br[0] == 'safari' && parseFloat(br[1]) >= 412) || 
(br[2] == 'msie' && parseFloat(br[3]) >= 7.0) ||
(br[0] == 'opera' && parseFloat(br[1]) >= 7.5) ||
(br[2] == 'gecko' && parseInt(br[3]) >= 20040623))
{
return true;
}
else
{
return false;
}
}
function setBrowser()
{
if (navigator.appVersion.charAt(0) == "4")
{
if (navigator.appName.indexOf("Explorer") >= 0)
{
isIE4 = true;
}
else
{
isNav4 = true;
}
}
else if (navigator.appVersion.charAt(0) > "4")
{
isNav6 = true;
}
}
function shiftTo(obj, x, y) 
{
if (obj.moveTo) 
{
obj.moveTo(x,y);
} 
else if (obj.style) 
{
obj.style.left = x + 'px';
obj.style.top = y + 'px';
}
}
function getOpacity(element)
{
if(element._opacity)
{ 
return element._opacity;
}
else if(typeof element.style.opacity != 'undefined') 
{
return element.style.opacity;
}
else
{
return 1;
}
}
function setOpacity(element,opacity)
{
if(typeof element.style.opacity != 'undefined') 
{
element.style.opacity = opacity;
element._opacity = opacity;
} 
else if(typeof element.style.filter != 'undefined') 
{
if (element.style.filter.indexOf("alpha") == -1) 
{
var existingFilters="";
if (element.style.filter) {
existingFilters = element.style.filter+" ";
}
element.style.filter = existingFilters+"alpha(opacity="+ (opacity * 100) + ")";
element._opacity = opacity;
}
else
{
element.filters.alpha.opacity = opacity * 100;
element._opacity = opacity;
}
}
}
function getStyleBySelector( selector )
{
if (!isNav6)
{
return null;
}
var sheetList = document.styleSheets;
var ruleList;
var i, j;
for (i=sheetList.length-1; i >= 0; i--)
{
ruleList = sheetList[i].cssRules;
for (j=0; j<ruleList.length; j++)
{
if (ruleList[j].type == CSSRule.STYLE_RULE &&
ruleList[j].selectorText == selector)
{
return ruleList[j].style;
}   
}
}
return null;
}
function getIdProperty( id, property )
{
if (isNav6)
{
var styleObject = document.getElementById( id );
if (styleObject != null)
{
styleObject = styleObject.style;
if (styleObject[property])
{
return styleObject[ property ];
}
}
styleObject = getStyleBySelector( "#" + id );
return (styleObject != null) ?
styleObject[property] :
null;
}
else if (isNav4)
{
return document[id][property];
}
else
{
return document.all[id].style[property];
}
}
var dynamicallyLoadedJavaScript = new Object();
function addJavaScript(href)
{
if (!dynamicallyLoadedJavaScript[href])
{
var found = false;
var links = document.getElementsByTagName('script')
for (var i = 0; i < links.length ; i++)
{
if (links[i].src.indexOf(href) >= 0)
{
found = true
break
}
}
if (!found)
{
var objHead = document.getElementsByTagName('head')
if (objHead[0])
{
var objJS = document.createElement('script')
objJS.src = href
objJS.type = 'text/javascript'
objHead[0].appendChild(objJS)
}
}
dynamicallyLoadedJavaScript[href] = true
}
else
{
}
}
var dynamicallyLoadedStyleSheets = new Object();
function addStyleSheet(href)
{
if (!dynamicallyLoadedStyleSheets[href])
{
var found = false;
var links = document.getElementsByTagName('link')
for (var i = 0; i < links.length ; i++)
{
if (links[i].rel == 'stylesheet' && links[i].href.indexOf(href) >= 0)
{
found = true
break
}
}
if (!found)
{
var objHead = document.getElementsByTagName('head')
if (objHead[0])
{
var objCSS = document.createElement('link')
objCSS.rel = 'stylesheet'
objCSS.href = href
objCSS.type = 'text/css'
objHead[0].appendChild(objCSS)
}
}
dynamicallyLoadedStyleSheets[href] = true
}
else
{
}
}
function getLinkText (link) {
return link.text ? link.text :
link.innerText ? link.innerText :
link.firstChild.nodeType == 3 ? link.firstChild.nodeValue :
'';
}
function setIdProperty( id, property, value )
{
if (isNav6)
{
var styleObject = document.getElementById( id );
if (styleObject != null)
{
styleObject = styleObject.style;
styleObject[ property ] = value;
}
}
else if (isNav4)
{
document[id][property] = value;
}
else if (isIE4)
{
if (document.all[id] != null)
{
document.all[id].style[property] = value;
}
}
}
function expandElement(id,width,height,delay)
{
if (document.getElementById)
{
var e = document.getElementById(id);
if (e)
{
}
}
}
function getRealLeft(el) 
{
xPos = el.offsetLeft; 
tempEl = el.offsetParent; 
while (tempEl != null) { 
xPos += tempEl.offsetLeft; 
tempEl = tempEl.offsetParent; 
} 
return xPos; 
} 
function getRelativeTop(parent,el) 
{
return getRealTop(el) - getRealTop(parent);
} 
function getRealTop(el) 
{
yPos = el.offsetTop; 
tempEl = el.offsetParent; 
while (tempEl != null) { 
yPos += tempEl.offsetTop; 
tempEl = tempEl.offsetParent; 
} 
return yPos; 
} 
function generic_move( id, xValue, yValue, additive )
{
var left = getIdProperty(id, "left");
var top = getIdProperty(id, "top");
var leftMatch, topMatch;
if (isNav4)
{
leftMatch = new Array( 0, left, "");
topMatch = new Array( 0, top, "");
}
else if (isNav6 || isIE4 )
{
var splitexp = /([-0-9.]+)(\w+)/;
leftMatch = splitexp.exec( left );
topMatch = splitexp.exec( top );
if (leftMatch == null || topMatch == null)
{
leftMatch = new Array(0, 0, "px");
topMatch = new Array(0, 0, "px");
}
}
left = ((additive) ? parseFloat( leftMatch[1] ) : 0) + xValue;
top = ((additive) ? parseFloat( topMatch[1] ) : 0) + yValue;
setIdProperty( id, "left", left + leftMatch[2] );
setIdProperty( id, "top", top + topMatch[2] );
}
function moveTo( id, x, y )
{
generic_move( id, x, y, false );
} 
function hex( n )
{
var hexdigits = "0123456789abcdef";
return ( hexdigits.charAt(n >> 4) + hexdigits.charAt(n & 0x0f) );
} 
function getBackgroundColor( id )
{
var color;
if (isNav4)
{
color = document[id].bgColor;
}
else if (isNav6)
{
var parseExp = /rgb.(\d+),(\d+),(\d+)./;
var rgbvals;
color = getIdProperty( id, "backgroundColor" );
if (color)
{
rgbvals = parseExp.exec( color );
if (rgbvals)
{
color = "#" + hex( rgbvals[1] ) + hex( rgbvals[2] ) +
hex( rgbvals[3] );
}
}
return color;
}
else if (isIE4)
{
return document.all[id].backgroundColor;
}
return "";
}
function showObject(obj)
{
if (obj && (obj.style.display == 'none'))
{
obj.style.display = '';
}
}
function hideObject(obj)
{
if (obj && (obj.style.display == ''))
{
obj.style.display = 'none';
}
}
function isObjectVisible(obj)
{
if (obj)
{
if (obj.style.display == '')
{
return true;
}
else if (obj.style.display = 'none')
{
return false;
}
}
else
{
return null;
}
}
function hideElementWithId(id)
{
hideObject(document.getElementById(id));
}
function showElementWithId(id)
{
showObject(document.getElementById(id));
}
function checkBoxShowHideLink(checkBoxObj,linkedId)
{
if (document.getElementById)
{
var o = document.getElementById(linkedId);
if (o)
{
if (isObjectVisible(o) && !checkBoxObj.checked)
{
hideObject(o);
}
else if (!isObjectVisible(o) && checkBoxObj.checked)
{
showObject(o);
}
}
else
{
}
}
else
{
}
}
function showSelectedTechInfo(sel)
{
for ( j=0 ; j < sel.options.length; j++) 
{
var id = 'techinfo-' + sel.options[j].value;
var o = document.getElementById(id);
if (o)
{
if (sel.options[j].selected)
{
showObject(o);
}
else
{
hideObject(o);
}
}
else
{
}
}
}
function isElementWithIdVisible(id)
{
isObjectVisible(document.getElementById(id));
}
function eventStop(evt)
{
evt = (evt) ? evt : window.event;
var target = evt.target ? evt.target : evt.srcElement;
event.returnValue = false;
return false;
}
function getBrowserSize() {
var size = { width: 0, height: 0};
if( typeof( window.innerWidth ) == 'number' ) {
size.width = window.innerWidth;
size.height = window.innerHeight;
} else if( document.documentElement &&
( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
size.width = document.documentElement.clientWidth;
size.height = document.documentElement.clientHeight;
} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
size.width = document.body.clientWidth;
size.height = document.body.clientHeight;
}
return size;
}
function getScrollCoords() {
var coords = {x: 0, y: 0};
if( window.pageYOffset && typeof  window.pageYOffset != 'undefined' )
{
coords.y = window.pageYOffset;
coords.x = window.pageXOffset;
}
else if (document.body && (document.body.scrollLeft || document.body.scrollTop) ) 
{
coords.y = document.body.scrollTop;
coords.x = document.body.scrollLeft;
} 
else if( document.documentElement &&
( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
{
coords.y = document.documentElement.scrollTop;
coords.x = document.documentElement.scrollLeft;
}
return coords;
}
function getMouseCoords (event)
{
var posx = 0;
var posy = 0;
if (event.pageX || event.pageY)
{
posx = event.pageX;
posy = event.pageY;
}
else if (event.clientX || event.clientY)
{
var sc = getScrollCoords()
posx = event.clientX + sc.x
posy = event.clientY + sc.y;
}
return  {x: posx, y: posy};
}
function getPageCoords (element) {
var coords = {x: 0, y: 0};
var el = element;
do {
coords.x += el.offsetLeft;
coords.y += el.offsetTop;
}
while ((el = el.offsetParent));
return coords;
}
function scrollIntoView (element) {
var coords = getPageCoords(element);
var w = element.offsetWidth;
var h = element.offsetHeight;
var scrollCoords = getScrollCoords();
var browserSize = getBrowserSize();
DEBUG("viewport is: [" + scrollCoords.x + 'x' + scrollCoords.y + ", " +
(scrollCoords.x + browserSize.width) + 'x' + (scrollCoords.y + browserSize.height) + 
']; element coords are [' + coords.x + 'x' + coords.y + ', ' + (coords.x +w) + 'x' +
(coords.y + h) + ']');
var deltaY = 0;
var deltaX = 0;
if (coords.y < scrollCoords.y)
{
deltaY = coords.y - scrollCoords.y;
}
else if (coords.y + h > scrollCoords.y + browserSize.height)
{
deltaY = (coords.y + h) - (scrollCoords.y + browserSize.height);
}
window.scrollBy (deltaX,deltaY);
}
function isClassNameSet(element,className)
{
if (element.className)
{
var classes = element.className.split(' ');
for (var i = 0; i < classes.length; i++) 
{
if (classes[i] == className)
{
return true;
}
}
}
return false;
}
function addClassName(element,className)
{
if (!isClassNameSet(element,className))
{
element.className = element.className + ' ' + className;
}
}
function removeClassName(element,className)
{
if (element.className)
{
var oldClasses = element.className.split(' ');
var newClasses = new Array();
var didRemove = false;
for (var i = 0; i < oldClasses.length; i++) 
{
if (oldClasses[i] != className)
{
newClasses.push(oldClasses[i]);
}
else
{
didRemove = true;
}
}
if (didRemove)
{
element.className = newClasses.join(' ');
}
}
}
function repopulateSelectListFromFilter(selectId,newOptions,filterIds)
{
var filteredOptions = new Array();
for (var i = 0; i < newOptions.length; i++)
{
var row = newOptions[i];
var filterMatches = false;
for (var x = 0; x < filterIds.length; x++)
{
for (var y = 0; y < row[2].length; y++)
{
if (row[2][y] == filterIds[x])
{
filterMatches = true;
}
else
{
}
}
}
if (filterMatches)
{
filteredOptions.push(row);
}
}
repopulateSelectList(selectId,filteredOptions);
return 1;
}
function repopulateSelectListObject(selectList,newOptions)
{
var isSelected = new Array();
for (var i = 0; i < selectList.options.length; i++)
{
isSelected[selectList.options[i].value] = selectList.options[i].selected;
}
selectList.options.length = 0;
for (var i = 0; i < newOptions.length; i++)
{
var row = newOptions[i];
selectList.options[selectList.length] = new Option(
row[1], /* name */
row[0], /* id */
false, 
isSelected[row[0]]); /* is selected */
}
}
function repopulateSelectListId(selectId,newOptions)
{
if (document.getElementById)
{
var selectList = document.getElementById(selectId);
if (selectList)
{
repopulateSelectListObject(selectList,newOptions);
}
else
{
}
}
else
{
}
return 1;
}
function scrollItemIntoView(parent,child)
{
var relTop = getRelativeTop(parent,child) 
var endPx = relTop + child.offsetHeight;
var selHeight = parent.offsetHeight;
if (endPx > selHeight + parent.scrollTop)
{
var diff = endPx - selHeight + 3;
parent.scrollTop = diff;
}
if (relTop < parent.scrollTop)
{
parent.scrollTop = relTop;
}
}
function logError(msg)
{
if (debugWindow)
{
}
else
{
alert(msg);
}
} 
function getBrowser(obj) {
var b=new Array("unknown", "unknown", "unknown", "unknown");
(isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);
if (brs.search(/omniweb[\/\s]v?(\d+([\.-]\d)*)/) != -1) {
b[0]="omniweb";
b[1]=brs.match(/omniweb[\/\s]v?(\d+([\.-]\d)*)/)[1];
(b[1] > 4.5 ? b[2]="khtml" : b[2]="omniweb");
(brs.search(/omniweb[\/\s]((\d+([\.-]\d)*)-)?v(\d+([\.-]\d)*)/) == -1 ?       b[3]=brs.match(/omniweb[\/\s](\d+([\.-]\d)*)/)[1] :        b[3]=brs.match(/omniweb[\/\s]((\d+([\.-]\d)*)-)?v(\d+([\.-]\d)*)/)[4]);
return b;
} else if (brs.search(/opera[\/\s](\d+(\.?\d)*)/) != -1) {
b[0]="opera";
b[1]=brs.match(/opera[\/\s](\d+(\.?\d)*)/)[1];
b[2]="opera";
b[3]=b[1];
return b;
} else if (brs.search(/crazy\s?browser\s(\d+(\.?\d)*)/) != -1) {
b[0]="crazy";
b[1]=brs.match(/crazy\s?browser\s(\d+(\.?\d)*)/)[1];
b[2]="msie";
b[3]=getMSIEVersion();
return b;
} else if (brs.search(/myie2/) != -1) {
b[0]="myie2";
b[2]="msie";
b[3]=brs.match(/msie\s(\d+(\.?\d)*)/)[1];
return b;
} else if (brs.search(/netcaptor/) != -1) {
b[0]="netcaptor";
b[1]=brs.match(/netcaptor\s(\d+(\.?\d)*)/)[1];
b[2]="msie";
b[3]=getMSIEVersion();
return b;
} else if (brs.search(/avant\sbrowser/) != -1) {
b[0]="avantbrowser";
b[2]="msie";
b[3]=getMSIEVersion();
return b;
} else if (brs.search(/msn\s(\d+(\.?\d)*)/) != -1) {
b[0]="msn";
b[1]=brs.match(/msn\s(\d+(\.?\d)*)/)[1];
b[2]="msie";
b[3]=getMSIEVersion();
return b;
} else if (brs.search(/msie\s(\d+(\.?\d)*)/) != -1) {
b[0]="msie";
b[1]=getMSIEVersion();
b[2]="msie";
b[3]=b[1];
return b;
} else if (brs.search(/powermarks\/(\d+(\.?\d)*)/) != -1) {
b[0]="powermarks";
b[1]=brs.match(/powermarks\/(\d+(\.?\d)*)/)[1];
b[2]="msie";
try {
b[3]=getMSIEVersion();
} catch (e) { }
return b;
} else if (brs.search(/konqueror[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="konqueror";
b[1]=brs.match(/konqueror[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="khtml";
return b;
} else if (brs.search(/safari\/(\d)*/) != -1) {
b[0]="safari";
b[1]=brs.match(/safari\/(\d+(\.?\d*)*)/)[1];
b[2]="khtml";
b[3]=brs.match(/applewebkit\/(\d+(\.?\d*)*)/)[1];
return b;
} else if(brs.search(/zyborg/) != -1) {
b[0]="zyborg";
b[1]=brs.match(/zyborg\/(\d+(\.?\d)*)/)[1];
b[2]="robot";
b[3]="-1"
return b;
} else if (brs.search(/netscape6[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="netscape";
b[1]=brs.match(/netscape6[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/netscape\/(7\.\d*)/) != -1) {
b[0]="netscape";
b[1]=brs.match(/netscape\/(7\.\d*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/galeon[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="galeon";
b[1]=brs.match(/galeon[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/nautilus[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="nautilus";
b[1]=brs.match(/nautilus[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/firefox[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="firefox";
b[1]=brs.match(/firefox[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/k-meleon[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="kmeleon";
b[1]=brs.match(/k-meleon[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/firebird[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="firebird";
b[1]=brs.match(/firebird[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/phoenix[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="phoenix";
b[1]=brs.match(/phoenix[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/camino[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="camino";
b[1]=brs.match(/camino[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/epiphany[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="epiphany";
b[1]=brs.match(/epiphany[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/chimera[\/\s](\d+([\.-]\d)*)/) != -1) {
b[0]="chimera";
b[1]=brs.match(/chimera[\/\s](\d+([\.-]\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/icab[\s\/]?(\d+(\.?\d)*)/) !=-1) {
b[0]="icab";
b[1]=brs.match(/icab[\s\/]?(\d+(\.?\d)*)/)[1];
b[2]="icab";
b[3]=b[1];
return b;
} else if (brs.search(/netfront\/(\d+([\._]\d)*)/) != -1) {
b[0]="netfront";
b[1]=brs.match(/netfront\/(\d+([\._]\d)*)/)[1];
b[2]="netfront";
b[3]=b[1];
return b;
} else if (brs.search(/netscape4\/(\d+([\.-]\d)*)/) != -1) {
b[0]="netscape";
b[1]=brs.match(/netscape4\/(\d+([\.-]\d)*)/)[1];
b[2]="mozold";
b[3]=b[1];
return b;
} else if ( (brs.search(/mozilla\/(4.\d*)/) != -1) && (brs.search(/msie\s(\d+(\.?\d)*)/) == -1) ) {
b[0]="netscape";
b[1]=brs.match(/mozilla\/(4.\d*)/)[1];
b[2]="mozold";
b[3]=b[1];
return b;
} else if ((brs.search(/mozilla\/5.0/) != -1) && (brs.search(/gecko\//) != -1)) {
b[0]="mozsea";
b[1]=brs.match(/rv\x3a(\d+(\.?\d)*)/)[1];
b[2]="gecko";
b[3]=getGeckoVersion();
return b;
} else if (brs.search(/elinks/) != -1) {
b[0]="elinks";
(brs.search(/elinks\/(\d+(\.?\d)*)/) == -1 ?
b[1]=brs.match(/elinks\s\x28(\d+(\.?\d)*)/)[1] :
b[1]=brs.match(/elinks\/(\d+(\.?\d)*)/)[1]);
b[2]="elinks";
b[3]=b[1];
return b;
} else if (brs.search(/w3m\/(\d+(\.?\d)*)/) != -1) {
b[0]="w3m"
b[1]=brs.match(/(^w3m|\sw3m)\/(\d+(\.?\d)*)/)[2];
b[2]="w3m";
b[3]=b[1];
return b;
} else if (brs.search(/links/) != -1) {
b[0]="links";
(brs.search(/links\/(\d+(\.?\d)*)/) == -1 ? b[1]=brs.match(/links\s\x28(\d+(\.?\d)*)/)[1] : b[1]=brs.match(/links\/(\d+(\.?\d)*)/)[1]);
b[2]="links";
b[3]=b[1];
return b;
} else if (brs.search(/java[\/\s]?(\d+([\._]\d)*)/) != -1) {
b[0]="java";
b[1]=brs.match(/java[\/\s]?(\d+([\._]\d)*)/)[1];
b[2]="java";
b[3]=b[1];
return b;
} else if(brs.search(/lynx/) != -1) {
b[0]="lynx";
b[1]=brs.match(/lynx\/(\d+(\.?\d)*)/)[1];
b[2]="libwww-fm";
b[3]=brs.match(/libwww-fm\/(\d+(\.?\d)*)/)[1];
return b;
} else if(brs.search(/dillo/) != -1) {
b[0]="dillo";
b[1]=brs.match(/dillo\s*\/*(\d+(\.?\d)*)/)[1];
b[2]="dillo";
b[3]=b[1];
return b;
} else if(brs.search(/wget/) != -1) {
b[0]="wget";
b[1]=brs.match(/wget\/(\d+(\.?\d)*)/)[1];
b[2]="robot";
b[3]="-1"
return b;
} else if(brs.search(/googlebot\-image/) != -1) {
b[0]="googlebotimg";
b[1]=brs.match(/googlebot\-image\/(\d+(\.?\d)*)/)[1];
b[2]="robot";
b[3]="-1"
return b;
} else if(brs.search(/googlebot/) != -1) {
b[0]="googlebot";
b[1]=brs.match(/googlebot\/(\d+(\.?\d)*)/)[1];
b[2]="robot";
b[3]="-1"
return b;
} else if(brs.search(/msnbot/) != -1) {
b[0]="msnbot";
b[1]=brs.match(/msnbot\/(\d+(\.?\d)*)/)[1];
b[2]="robot";
b[3]="-1"
return b;
} else if(brs.search(/turnitinbot/) != -1) {
b[0]="turnitinbot";
b[1]=brs.match(/turnitinbot\/(\d+(\.?\d)*)/)[1];
b[2]="robot";
b[3]="-1"
return b;
} else {
b[0]="unknown";
return b;
}
}
function getMajorVersion(v) {
return (isEmpty(v) ? -1 : (hasDot(v) ? v : v.match(/(\d*)(\.\d*)*/)[1]))
}
function getMinorVersion(v) {
return (!isEmpty(v) ? (!hasDot(v) ? v.match(/\.(\d*([-\.]\d*)*)/)[1] : 0) :
-1)
}
function getOS(obj) {
var os=new Array("unknown", "unknown");
(isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);
if (brs.search(/windows\sce/) != -1) {
os[0]="wince";
try {
os[1]=brs.match(/windows\sce\/(\d+(\.?\d)*)/)[1];
} catch (e) { }
return os;
} else if ( (brs.search(/windows/) !=-1) || ((brs.search(/win9\d{1}/) !=-1))
) {
os[0]="win";
if (brs.search(/nt\s5\.1/) != -1) {
os[1]="xp";
} else if (brs.search(/nt\s5\.0/) != -1) {
os[1]="2000";
} else if ( (brs.search(/win98/) != -1) || (brs.search(/windows\s98/)!=
-1 ) ) {
os[1]="98";
} else if (brs.search(/windows\sme/) != -1) {
os[1]="me";
} else if (brs.search(/nt\s5\.2/) != -1) {
os[1]="win2k3";
} else if ( (brs.search(/windows\s95/) != -1) || (brs.search(/win95/)!=
-1 ) ) {
os[1]="95";
} else if ( (brs.search(/nt\s4\.0/) != -1) || (brs.search(/nt4\.0/) ) !=
-1) {
os[1]="nt4";
}
return os;
} else if (brs.search(/linux/) !=-1) {
os[0]="linux";
try {
os[1] = brs.match(/linux\s?(\d+(\.?\d)*)/)[1];
} catch (e) { }
return os;
} else if (brs.search(/mac\sos\sx/) !=-1) {
os[0]="macosx";
return os;
} else if (brs.search(/freebsd/) !=-1) {
os[0]="freebsd";
try {
os[1] = brs.match(/freebsd\s(\d(\.\d)*)*/)[1];
} catch (e) { }
return os;
} else if (brs.search(/sunos/) !=-1) {
os[0]="sunos";
try {
os[1]=brs.match(/sunos\s(\d(\.\d)*)*/)[1];
} catch (e) { }
return os;
} else if (brs.search(/irix/) !=-1) {
os[0]="irix";
try {
os[1]=brs.match(/irix\s(\d(\.\d)*)*/)[1];
} catch (e) { }
return os;
} else if (brs.search(/openbsd/) !=-1) {
os[0]="openbsd";
try {
os[1] = brs.match(/openbsd\s(\d(\.\d)*)*/)[1];
} catch (e) { }
return os;
} else if ( (brs.search(/macintosh/) !=-1) || (brs.search(/mac\x5fpowerpc/)
!= -1) ) {
os[0]="macclassic";
return os;
} else if (brs.search(/os\/2/) !=-1) {
os[0]="os2";
try {
os[1]=brs.match(/warp\s((\d(\.\d)*)*)/)[1];
} catch (e) { }
return os;
} else if (brs.search(/openvms/) !=-1) {
os[0]="openvms";
try {
os[1]=brs.match(/openvms\sv((\d(\.\d)*)*)/)[1];
} catch (e)  { }
return os;
} else if ( (brs.search(/amigaos/) !=-1) || (brs.search(/amiga/) != -1) ) {
os[0]="amigaos";
try {
os[1]=brs.match(/amigaos\s?(\d(\.\d)*)*/)[1];
} catch (e) { }
return os;
} else if (brs.search(/hurd/) !=-1) {
os[0]="hurd";
return os;
} else if (brs.search(/hp\-ux/) != -1) {
os[0]="hpux";
try {
os[1]=brs.match(/hp\-ux\sb\.[\/\s]?(\d+([\._]\d)*)/)[1];
} catch (e) { }
return os;
} else if ( (brs.search(/unix/) !=-1) || (brs.search(/x11/) != -1 ) ) {
os[0]="unix";
return os;
} else if (brs.search(/cygwin/) !=-1) {
os[0]="cygwin";
return os;
} else if (brs.search(/java[\/\s]?(\d+([\._]\d)*)/) != -1) {
os[0]="java";
try {
os[1]=brs.match(/java[\/\s]?(\d+([\._]\d)*)/)[1];
} catch (e) { }
return os;
} else if (brs.search(/palmos/) != -1) {
os[0]="palmos";
return os;
} else if (brs.search(/symbian\s?os\/(\d+([\._]\d)*)/) != -1) {
os[0]="symbian";
try {
os[1]=brs.match(/symbian\s?os\/(\d+([\._]\d)*)/)[1];
} catch (e) { }
return os;
} else {
os[0]="unknown";
return os;
}
}
function getGeckoVersion() {
return brs.match(/gecko\/([0-9]+)/)[1];
}
function getMSIEVersion() {
return brs.match(/msie\s(\d+(\.?\d)*)/)[1];
}
function getFullUAString(obj) {
(isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);
return brs;
}
function hasFlashPlugin(obj) {
(isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj);
var f=new Array("0", "0");
var brwEng=getBrowser(obj)[2];
if ( (brwEng=="gecko") || (brwEng="opera") || (brwEng="khtml") || (brwEng="mozold")) {
if (navigator.plugins && navigator.plugins.length) {
x = navigator.plugins["Shockwave Flash"];
if (x) {
f[0] = 2;
if (x.description) {
y = x.description;
f[1] = y.charAt(y.indexOf('.')-1);
}
} else {
f[0] = 1;
}
if (navigator.plugins["Shockwave Flash 2.0"]) {
f[0] = 2;
f[0] = 2;
}
} else if (navigator.mimeTypes && navigator.mimeTypes.length) {
x = navigator.mimeTypes['application/x-shockwave-flash'];
if (x && x.enabledPlugin) {
f[0] = 2;
} else {
f[0] = 1;
}
}
return f;
} else if (brwEng=="msie") {
for(var i=7; i>0; i--) {
try {
var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
f[1] = i;
break;
} catch(e) { }
}
if (f[1]>0) {
f[0]=2
} else {
f[0]=1
}
return f;
} else {
f[0]=0;
f[1]=0;
return f;
}
}
function appendOption(select,option)
{
try {
select.add(option, null); // standards compliant; doesn't work in IE
}
catch(ex) {
select.add(option); // IE only
}
}
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(searchElement,fromIndex)
{
var i = (fromIndex < 0) ? this.length+fromIndex : fromIndex || 0;
for(;i<this.length;i++)
if(searchElement === this[i]) return i;
return -1
}
}
Array.prototype.intersection = function(arr2)  {
var returnArray = new Array(); var y = 0;
for(var x=0;x<this.length;x++)  {
if(arr2.contains(this[x]))  {
returnArray[y++] = this[x];
}}  return y==0?null:returnArray;
}
Array.prototype.contains = function(r)  {
for(var x=0;x<this.length;x++)  {
if(this[x]==r)  {
return true;
}}  return false;
} 
function stopObservingDocumentScroll(listener)
{
if (document.getElementById)
{
if (navigator.userAgent.match(/Firefox\/1\.0/) && document.documentElement)
{
}
else if (navigator.userAgent.match(/Firefox\/1\.5/) && document.documentElement)
{
stopObserving(document.documentElement,'scroll',listener)
stopObserving(document.documentElement,'resize',listener)
}
else
{
stopObserving(window,'scroll',listener)
stopObserving(window,'resize',listener)
}
}
}
function observeDocumentScroll(listener)
{
if (document.getElementById)
{
if (navigator.userAgent.match(/Firefox\/1\.0/) && document.documentElement)
{
}
else if (navigator.userAgent.match(/Firefox\/1\.5/) && document.documentElement)
{
observe(document.documentElement,'scroll',listener)
observe(document.documentElement,'resize',listener)
}
else
{
observe(window,'scroll',listener)
observe(window,'resize',listener)
}
}
}
function isEmpty(input) {
return (input==null || input =="")
}
function hasDot(input) {
return (input.search(/\./) == -1)
}
