function ErrorInfo ()
{
}

ErrorInfo.prototype.errCode;
ErrorInfo.prototype.errorMessage;
ErrorInfo.prototype.service;
ErrorInfo.prototype.method;


// Browser Detect Lite  v2.1
// http://www.dithered.com/javascript/browser_detect/index.html
// modified by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)
//
// modified by Michael Lovitt to include OmniWeb and Dreamcast

function BrowserDetectLite()
{
	var ua = navigator.userAgent.toLowerCase();
	this.ua = ua;

	// browser name
	this.isGecko     = (ua.indexOf('gecko') != -1);
	this.isMozilla   = (this.isGecko && ua.indexOf("gecko/") + 14 == ua.length);
	this.isNS        = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );
	this.isIE        = ( (ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1) );
	this.isOpera     = (ua.indexOf("opera") != -1);
	this.isKonqueror = (ua.indexOf("konqueror") != -1);
	this.isIcab      = (ua.indexOf("icab") != -1);
	this.isSafari      = (ua.indexOf("safari") != -1);

	this.isAol       = (ua.indexOf("aol") != -1);
	this.isWebtv     = (ua.indexOf("webtv") != -1);
	this.isOmniweb   = (ua.indexOf("omniweb") != -1);
	this.isDreamcast   = (ua.indexOf("dreamcast") != -1);
	this.isFireFox   = (ua.indexOf("firefox") != -1);

	// spoofing and compatible browsers
	this.isIECompatible = ( (ua.indexOf("msie") != -1) && !this.isIE);
	this.isNSCompatible = ( (ua.indexOf("mozilla") != -1) && !this.isNS && !this.isMozilla);

	// browser version
	this.versionMinor = parseFloat(navigator.appVersion);

	// correct version number for NS6+
	if (this.isNS && this.isGecko) {
		this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('/') + 1 ) );
	}

	// correct version number for IE4+
	else if (this.isIE && this.versionMinor >= 4) {
		this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
	}

	// correct version number for Opera
	else if (this.isOpera) {
		if (ua.indexOf('opera/') != -1) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera/') + 6 ) );
		}
		else {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera ') + 6 ) );
		}
	}

	// correct version number for Konqueror
	else if (this.isKonqueror) {
		this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
	}

	// correct version number for iCab
	else if (this.isIcab) {
		if (ua.indexOf('icab/') != -1) {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab/') + 6 ) );
		}
		else {
			this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab ') + 6 ) );
		}
	}

	// correct version number for WebTV
	else if (this.isWebtv) {
		this.versionMinor = parseFloat( ua.substring( ua.indexOf('webtv/') + 6 ) );
	}

	this.versionMajor = parseInt(this.versionMinor);
	this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );

	// platform
	this.isWin   = (ua.indexOf('win') != -1);
	this.isWin32 = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1) );
	this.isMac   = (ua.indexOf('mac') != -1);
	this.isUnix  = (ua.indexOf('unix') != -1 || ua.indexOf('linux') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)

	// specific browser shortcuts
	this.isNS4x = (this.isNS && this.versionMajor == 4);
	this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
	this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
	this.isNS4up = (this.isNS && this.versionMinor >= 4);
	this.isNS6x = (this.isNS && this.versionMajor == 6);
	this.isNS6up = (this.isNS && this.versionMajor >= 6);

	this.isIE4x = (this.isIE && this.versionMajor == 4);
	this.isIE4up = (this.isIE && this.versionMajor >= 4);
	this.isIE5x = (this.isIE && this.versionMajor == 5);
	this.isIE55 = (this.isIE && this.versionMinor == 5.5);
	this.isIE5up = (this.isIE && this.versionMajor >= 5);
	this.isIE6x = (this.isIE && this.versionMajor == 6);
	this.isIE6up = (this.isIE && this.versionMajor >= 6);

	this.isIE4xMac = (this.isIE4x && this.isMac);
}

BrowserDetectLite.prototype.useAlphaImageLoader = function ()
{
	// if IE5.5+ on Win32, then display PNGs with AlphaImageLoader
	if ((browser.isIE55 || browser.isIE6up) && browser.isWin32)
	{
		return "pngAlpha";
	}

// else, if the browser can display PNGs normally, then do that
	if ((browser.isGecko) || (browser.isIE5up && browser.isMac) ||
		(browser.isOpera && browser.isWin && browser.versionMajor >= 6) ||
		(browser.isOpera && browser.isUnix && browser.versionMajor >= 6) ||
		(browser.isOpera && browser.isMac && browser.versionMajor >= 5) ||
		(browser.isOmniweb && browser.versionMinor >= 3.1) ||
		(browser.isIcab && browser.versionMinor >= 1.9) ||
		(browser.isWebtv) || (browser.isDreamcast))
	{
		return "pngNormal";
	}

	return "pngNotSupported";
}

BrowserDetectLite.prototype.displayImage = function (strId, strPath, intWidth, intHeight, strClass, strAlt)
{
    document.write (this.getImage (strId, strPath, intWidth, intHeight, strClass, strAlt));
}

BrowserDetectLite.prototype.getImage = function (strId, strPath, intWidth, intHeight, strClass, strAlt)
{
	switch (this.useAlphaImageLoader ())
	{
		case "pngAlpha":
			return ('<div style="height:' + intHeight + 'px; width:' + intWidth +
						'px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader (src=\'' +
						strPath + '.png\', sizingMethod=\'scale\')" id="' + strId +
						'" class="' + strClass + '"></div>');
		break;

		case "pngNormal":
			return ('<img src="' + strPath + '.png" width="' + intWidth + '" height="' + intHeight +
							'" name="' + strId + '" border="0" class="' + strClass + '" alt="' + strAlt + '" />');
		break;

		default:
			return ('<img src="' + strPath + '.gif" width="' + intWidth + '" height="' + intHeight +
							'" name="' + strId + '" border="0" class="' + strClass + '" alt="' + strAlt + '" />');
		break;
	}
}


BrowserDetectLite.prototype.getFrameObject = function (frameName)
{
    var frameObj = document.getElementById(frameName);
    return frameObj.contentWindow;
	//return document.frames ? document.frames(frameName) : document.getElementById(frameName).contentWindow;
}


BrowserDetectLite.prototype.createXmlDocumentElement = function (rootElem)
{
    var xmlDoc;

// Code for IE
	if (window.ActiveXObject)
	{
	    xmlDoc = new ActiveXObject ("Microsoft.XMLDOM");

        var elemRoot = xmlDoc.createElement (rootElem);
        xmlDoc.appendChild (elemRoot);
	}
// Code for Mozilla, Firefox, Opera, etc.
	else
	{
		var parser = new DOMParser();
		xmlDoc = parser.parseFromString ('<?xml version="1.0" encoding="UTF-8"?><' + rootElem + '></' + rootElem + '>', "text/xml");
	}

	return xmlDoc;
}


BrowserDetectLite.prototype.getXmlRootElement = function (xmlDoc, rootElem)
{
    return xmlDoc.getElementsByTagName (rootElem)[0];
}


BrowserDetectLite.prototype.getXmlString = function (xmlDoc)
{
    var xml;

// Code for IE
	if (window.ActiveXObject)
	{
	    xml = xmlDoc.xml;
	}
// Code for Mozilla, Firefox, Opera, etc.
	else
	{
        var serializer = new XMLSerializer ();
	    xml = serializer.serializeToString (xmlDoc);
	}

	return xml;
}


BrowserDetectLite.prototype.getXmlDocumentElementNoValidation = function (xmlString)
{
// Code for IE
	if (window.ActiveXObject)
	{
		var doc = new ActiveXObject ("Microsoft.XMLDOM");
		doc.async = "false";
		var res = doc.loadXML (xmlString);
	}
// Code for Mozilla, Firefox, Opera, etc.
	else
	{
		var parser = new DOMParser();
		var doc = parser.parseFromString (xmlString, "text/xml");
	}

	return doc.documentElement;
}


BrowserDetectLite.prototype.getXmlDocumentElement = function (xmlString)
{
	var docElem = this.getXmlDocumentElementNoValidation (xmlString);
	
	if (docElem != null)
	{
		HUM.SetAjaxSessionData (docElem.getAttributeNode("sessiondata").value);
	}

	if (DEBUG_PROMPT_ON_XML_ERROR)
	{
		if (docElem == null)
		{
	    	if (confirm ("XML Error.\r\nDo you want to break for debug?"))
	    	{
	    		debugger;
	    	}
	    	else
	    	{
	    		alert (xmlString);
	    	}
		}
	    else if (this.isXmlError (docElem))
	    {
	    	var errInfo = this.getXmlErrorInfo (docElem);

	    	if (confirm (errInfo.service + " - " + errInfo.method + ": Error number " + errInfo.errCode + ": " + errInfo.errorMessage + ".\r\nDo you want to break for debug?"))
	    	{
	    		debugger;
	    	}
	    }
	}

	return docElem;
}


BrowserDetectLite.prototype.isXmlError = function (docElem)
{
	return docElem == null || docElem.getAttributeNode("rc").value != "0";
}


BrowserDetectLite.prototype.getXmlErrorInfo = function (docElem)
{
	var errInfo = new ErrorInfo ();

	if (docElem == null)
	{
		errInfo.errCode = "-1";
		errInfo.errorMessage = "Invalid XML";
		errInfo.service = "Unknown Service";
		errInfo.method = "Unknown Method";
	}
	else
	{
		errInfo.errCode = docElem.getAttributeNode("rc").value;
		errInfo.errorMessage = docElem.getAttributeNode("errormessage").value;
		errInfo.service = docElem.getAttributeNode("service").value;
		errInfo.method = docElem.nodeName;
	}

	if (errInfo.errorMessage == "")
	{
		errInfo.errorMessage = "No error message provided";
	}

	return errInfo;
}


BrowserDetectLite.prototype.getXmlChildrenCount = function (xmlElem)
{
	if (xmlElem == null)
	{
		return;
	}

	if (this.isIE)
	{
		return xmlElem.childNodes.length;
	}
	else
	{
//		return Math.floor (xmlElem.childNodes.length / 2);
		return xmlElem.childNodes.length;
	}
}


BrowserDetectLite.prototype.getXmlChildNodeByIndex = function (xmlElem, index)
{
	if (xmlElem == null)
	{
		return;
	}

	if (this.isIE)
	{
		return xmlElem.childNodes.item (index);
	}
	else
	{
//	    var add = 1;
//	    if (arguments.length>2) add = arguments[2];

//		return xmlElem.childNodes.item (index * 2 + add);
		return xmlElem.childNodes.item (index);
	}
}


BrowserDetectLite.prototype.isCssClassExists = function (className)
{
    var cssRules;

    if (this.isIE)
    {
        cssRules = 'rules';
    }
    else
    {
    return false;
        cssRules = 'cssRules';
    }

    for (var s = 0; s < document.styleSheets.length; s++)
    {
        for (var r = 0; r < document.styleSheets [s][cssRules].length; r++)
        {
            if (document.styleSheets [s][cssRules][r].selectorText == className)
            {
                return true;
            }
        }
    }

    return false;
}


BrowserDetectLite.prototype.getNumOfChildren = function (obj)
{
    var childObj;

    if (this.isIE)
    {
        childObj = obj.children;
    }
    else
    {
        childObj = obj.childNodes;
    }

    return childObj.length;
}


BrowserDetectLite.prototype.getParent = function (obj)
{
    var parentObj;

    if (this.isIE)
    {
        parentObj = obj.parentElement;
    }
    else
    {
        parentObj = obj.parentNode;
    }

    return parentObj;
}


BrowserDetectLite.prototype.getChildByIndex = function (obj, childIndex)
{
    var childObj;

    if (this.isIE)
    {
        childObj = obj.children (childIndex);
    }
    else
    {
        var childCount = -1;

        for (var i = 0; i < obj.childNodes.length; i++)
        {
            if (obj.childNodes [i].nodeName == "#text")
            {
                continue;
            }

            childCount++;
            
            if (childCount == childIndex)
            {
                childObj = obj.childNodes [i];
                break;
            }
        }
    }

    return childObj;
}


BrowserDetectLite.prototype.clearTbodyContent = function (tbodyObj)
{
	if (browser.isIE)
	{
		tbodyObj.innerText = "";
	}
	else
	{
		tbodyObj.innerHTML = "";
	}
}


var browser = new BrowserDetectLite ();

