/******************************************************************/
/* Firefox and IE handle the source element variables differently */
/******************************************************************/
var m_version       = -1;
var m_browserName   = "unknown";
var m_isIE          = false;
var m_isFirefox     = false;
var m_isOpera       = false;

/*****************/
/* Define object */
/*****************/
function Browser()
{
    this.isIE                       = mGetIsIE;
    this.isFirefox                  = mGetIsFirefox;
    this.isOpera                    = mGetIsOpera;
    this.name                       = mBrowser_name;
    this.version                    = mBrowser_version;
    this.getSourceElement           = mBrowser_getSourceElement;
    this.getE                       = mGetE;
    this.getX                       = mGetX;
    this.getY                       = mGetY;
    this.getChildren                = mBrowser_getChildren;
    this.removeChildren             = mBrowser_removeChildren;
    this.removeChildrenByTagName    = mBrowser_removeChildrenByTagName;
    this.getParentElement           = mBrowser_getParent;
    this.cssIsEnabled               = mBrowser_cssIsEnabled;
}


/*********************/
/* Private Functions */
/*********************/
function mBrowser_name()
{
    mdetectBrowserInfo();
    return m_browserName;
}

function mGetIsIE()
{
    mdetectBrowserInfo();
    return m_isIE;
}

function mGetIsFirefox()
{
    mdetectBrowserInfo();
    return m_isFirefox;
}

function mGetIsOpera()
{
    mdetectBrowserInfo();
    return m_isOpera;
}

function mBrowser_version()
{
    mdetectBrowserInfo();
    return m_version;
}

/* Function that initializes browser
   name and version member variables
*/
function mdetectBrowserInfo()
{
    //if these variables have already been initialized, then exit this function
    if(m_browserName != "unknown" ||
       m_isIE != false ||
       m_isFirefox != false ||
       m_isOpera != false)
    {
        return;
    }

    //otherwise, initialize member variables.
    var version, versionindex;
    /***********/
    /* Firefox */
    /***********/
    if(navigator.userAgent.indexOf("Firefox") != -1)
    {
        versionindex    = navigator.userAgent.indexOf("Firefox")+8;
        m_browserName   = "firefox";
        m_version       = parseInt(navigator.userAgent.charAt(versionindex));
        m_isFirefox     = true;
    }

    /*********************/
    /* Internet Explorer */
    /*********************/
    else if (navigator.appVersion.indexOf("MSIE")!=-1)
    {
        version = 0;
        temp = navigator.appVersion.split("MSIE");
        version = parseFloat(temp[1]);
        if (version >= 5.5) //NON IE browser will return 0
        {
            m_browserName   = "ie";
            m_version       = version;
            m_isIE          = true;
        }
    }
    /*********/
    /* Opera */
    /*********/
    else if(navigator.userAgent.indexOf("Opera") != -1)
    {
        m_browserName   = "opera";
        versionindex    = navigator.userAgent.indexOf("Opera")+6
        //if (parseInt(navigator.userAgent.charAt(versionindex))>=8)
        m_version       = parseInt(navigator.userAgent.charAt(versionindex))
        m_isOpera       = true;
    }
}

function mBrowser_getChildren(parentElement)
{
    if(mGetIsFirefox())
        return parentElement.childNodes;
    else if(mGetIsIE())
        return parentElement.children;
    return null;
}

function mBrowser_getParent(srcElement)
{
    if(mGetIsFirefox())
        return srcElement.parentNode;
    else if(mGetIsIE())
        return srcElement.parentElement;
    return null;
}

function mBrowser_removeChildren(parentElement)
{
    if(parentElement != null)
    {
        if(mGetIsIE())
        {
            while (parentElement.childNodes.length != 0)
            {
                parentElement.removeChild(parentElement.childNodes(0));
            }
        }
        else
        {
            var children = mBrowser_getChildren(parentElement);
            while (children.length != 0)
            {
                parentElement.removeChild(children[0]);
            }
        }
    }
}

function mBrowser_removeChildrenByTagName(parentElement, tagName)
{
    if(parentElement != null)
    {
        if(mGetIsIE())
        {
            var children = parentElement.childNodes;
            while (children.length != 0)
            {
                var isDone = true
                var idxToRemove = 0;
                for(i=0; i < children.length; i++)
                {
                    if(children(i).tagName == tagName)
                    {
                        isDone = false;
                        idxToRemove = i;
                        break;
                    }
                }
                if(isDone) { return; }
                parentElement.removeChild(children(idxToRemove));
            }
        }
        else
        {
            var children = mBrowser_getChildren(parentElement);
            while (children.length != 0)
            {
                var isDone = true
                var idxToRemove = 0;
                for(i=0; i < children.length; i++)
                {
                    if(children[i].tagName == tagName)
                    {
                        isDone = false;
                        idxToRemove = i;
                        break;
                    }
                }
                if(isDone) { return; }
                parentElement.removeChild(children[idxToRemove]);
            }
        }
    }
}

function mBrowser_getSourceElement(e)
{
    var sourceElement;
    if(mGetIsFirefox())
    {
        sourceElement = e.target;
    }
    else if(mGetIsIE())
    {
        if(event != null)
        {
            sourceElement = event.srcElement;
        }
        else
        {
            alert("can't find the source element");
        }
    }
    return sourceElement;
}

function mGetX(e)
{
    if(mGetIsFirefox()){ return e.clientX; }
    else if(mGetIsIE()){ return event.x; }
}
function mGetY(e)
{
    if(mGetIsFirefox()){ return e.clientY; }
    else if(mGetIsIE()){ return event.y; }
}
function mGetE(e)
{
    if(mGetIsFirefox())
    {
        return e;
    }
    else if(mGetIsIE())
    {
        return event;
    }
}

//check that nav styles are enabled
function mBrowser_cssIsEnabled()
{
    //reference to test link
    var linkObj = document.getElementById("ss");

    //link display
    var linkDisplay;// = "inline";

    //retrieve the computedStyle display of the link
    //this is mozilla and opera 7.2+
    if(typeof document.defaultView != "undefined" && typeof document.defaultView.getComputedStyle != "undefined")
    {
        linkDisplay = document.defaultView.getComputedStyle(linkObj,"").getPropertyValue("display");
    }
    //retrieve the currentStyle display of the link
    //this is internet explorer
    else if(typeof linkObj.currentStyle != "undefined")
    {
        linkDisplay = linkObj.currentStyle.display;
    }
    return (linkDisplay);
}

