function clearDefault(el) {
    if (el.defaultValue == el.value) el.value = ""
}

var isCSS = false;
var isW3C = false;
var isIE4 = false;
var isNN4 = false;
var isIE6 = false;
var isGecko = false;
var isOpera = false;
var isDHTML = false;
var isSafari = false;


function configure() {


    isCSS = (document.body && document.body.style) ? true : false;
    isW3C = (isCSS && document.getElementById) ? true : false;
    isIE4 = (isCSS && document.all && readIEVer() >= 4.0) ? true : false;
    isNN4 = (document.layers) ? true : false;
    isGecko = (isCSS && navigator && navigator.product && navigator.product == "Gecko");
    isOpera = (isCSS && navigator.userAgent.indexOf("Opera") != -1 );
    isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
    isIE6 = ( isIE6CSS && readIEVer() >= 6.0 );
    isDHTML = isCSS && ( isIE4 || isGecko || isOpera );
    isSafari = isAppleWebKit();

}


function isAppleWebKit() {
    // String found if this is a AppleWebKit based product
    var kitName = "applewebkit/";
    var tempStr = navigator.userAgent.toLowerCase();
    var pos = tempStr.indexOf(kitName);
    return (pos != -1);
}

function getScrollOffset() {
    var ypos = 0;
    if (window.innerHeight)
    {
        ypos = window.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop)
    {
        ypos = document.documentElement.scrollTop
    }
    else if (document.body)
    {
        ypos = document.body.scrollTop
    }
    return ypos;
}


// Seek nested NN4 layer from string name
function seekLayer(doc, name)
{
    var theObj;
    for (var i = 0; i < doc.layers.length; i++)
    {
        if (doc.layers[i].name == name)
        {
            theObj = doc.layers[i];
            break;
        }

        // dive into nested layers if necessary
        if (doc.layers[i].document.layers.length > 0)
        {
            theObj = seekLayer(document.layers[i].document, name);
        }
    }
    return theObj;
}

function parentNode(elem)
{
    if (elem.parentElement)
    {
        return elem.parentElement;
    }

    if (elem.parentNode)
    {
        return elem.parentNode;
    }

    return null;
}

// Convert object name string or object reference
// into a valid element object reference
function getRawObject(obj)
{
    var theObj;
    if (typeof obj == "string")
    {
        if (isW3C)
        {
            theObj = document.getElementById(obj);

        }
        else if (isIE4)
        {
            theObj = document.all(obj);
        }
        else if (isNN4)
        {
            theObj = seekLayer(document, obj);
        }
    }
    else
    {
        // pass through object reference
        theObj = obj;
    }
    return theObj;
}

// Convert object name string or object reference
// into a valid style (or NN4 layer) reference
function getObject(obj)
{
    var theObj = getRawObject(obj);
    if (theObj && isCSS)
    {
        theObj = theObj.style;
    }
    return theObj;
}

function getObjectsByTag(tag)
{
    if (document.getElementsByTagName)
    {
        return document.getElementsByTagName(tag);
    }
    else if (document.all)
    {
        return document.all.tags(tag);
    }

    return null;
}

// get the element an event refers to
function eventToElement(evt)
{
    var elem = null;

    if (evt.target)
    {
        elem = evt.target;
    }
    else if (evt.toElement)
    {
        elem = evt.toElement;
    }

    if (elem && elem.nodeName == "#text")
    {
        elem = elem.parentNode;
    }

    return elem;
}

// Set the visibility of an object to visible
function show(obj)
{
    var theObj = getObject(obj);
    if (theObj)
    {
        theObj.visibility = "visible";
    }
}

// Set the visibility of an object to hidden
function hide(obj)
{
    var theObj = getObject(obj);
    if (theObj)
    {
        theObj.visibility = "hidden";
    }
}

// Set the visibility of an object to hidden
function isVisible(obj)
{
    var theObj = getObject(obj);
    return (theObj) ? ( theObj.visibility == "visible" ) : false;
}

// Position an object at a specific pixel coordinate
function shiftTo(obj, x, y)
{
    var theObj = getObject(obj);
    if (theObj)
    {
        if (isCSS)
        {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0
            theObj.left = x + units;
            theObj.top = y + units;
        }
        else if (isNN4)
        {
            theObj.moveTo(x, y)
        }
    }
}

// Retrieve the x coordinate of a positionable object
function getObjectLeft(obj)
{
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView)
    {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("left");
    }
    else if (elem.currentStyle)
    {
        result = elem.currentStyle.left;
    }
    else if (elem.style)
    {
        result = elem.style.left;
    }
    else if (isNN4)
    {
        result = elem.left;
    }
    return parseInt(result);
}

// Retrieve the y coordinate of a positionable object
function getObjectTop(obj)
{
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView)
    {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("top");
    }
    else if (elem.currentStyle)
    {
        result = elem.currentStyle.top;
    }
    else if (elem.style)
    {
        result = elem.style.top;
    }
    else if (isNN4)
    {
        result = elem.top;
    }
    return parseInt(result);
}

// Retrieve the rendered width of an element
function getObjectWidth(obj)
{
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetWidth)
    {
        result = elem.offsetWidth;
    }
    else if (elem.clip && elem.clip.width)
    {
        result = elem.clip.width;
    }
    else if (elem.style && elem.style.pixelWidth)
    {
        result = elem.style.pixelWidth;
    }
    return parseInt(result);
}

// Retrieve the rendered height of an element
function getObjectHeight(obj)
{
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetHeight)
    {
        result = elem.offsetHeight;
    }
    else if (elem.clip && elem.clip.height)
    {
        result = elem.clip.height;
    }
    else if (elem.style && elem.style.pixelHeight)
    {
        result = elem.style.pixelHeight;
    }
    return parseInt(result);
}

// Return the available content width space in browser window
function getInsideWindowWidth()
{
    if (window.innerWidth)
    {
        return window.innerWidth;
    }
    else if (isIE6CSS)
    {
        // measure the html element's clientWidth     
        return document.body.parentElement.clientWidth;
    }
    else if (document.body && document.body.clientWidth)
    {
        return document.body.clientWidth;
    }
    return 0;
}

// Return the available content height space in browser window
function getInsideWindowHeight()
{
    if (window.innerHeight)
    {
        return window.innerHeight;
    }
    else if (isIE6CSS)
    {
        // measure the html element's clientHeight
        return document.body.parentElement.clientHeight
    }
    else if (document.body && document.body.clientHeight)
    {
        return document.body.clientHeight;
    }
    return 0;
}

function readIEVer()
{
    var agent = navigator.userAgent;
    var offset = agent.indexOf("MSIE");
    if (offset < 0)
    {
        return 0;
    }
    return parseFloat(agent.substring(offset + 5, agent.indexOf(";", offset)));
}
