function _ElemPosition (left, top ) {
  this.left = left;
  this.top = top;
}
  
function _GetRealPos(eElement)
{
    var posleft = eElement.offsetLeft;          
    var postop = eElement.offsetTop;
    var eParElement = eElement.offsetParent;     
    while (eParElement != null)
    {                                            
        posleft += eParElement.offsetLeft;
        postop += eParElement.offsetTop;      
        eParElement = eParElement.offsetParent;  
    }
    return new _ElemPosition(posleft, postop);                             
}

function getBodyWidth() {

    var bw = new Number(document.body.offsetWidth) + 10; 
    //if (document.body.leftMargin != null) bw += new Number(document.body.leftMargin);
    if (getBrowserScrollLeft() > 0) bw += new Number(getBrowserScrollLeft()); 
    return bw + "px";
}

function getBodyHeight() {
    var bh = new Number(document.body.offsetHeight) + 10;
    //if (document.body.topMargin != null) bh += new Number(document.body.topMargin);
    
    return bh + "px";

}

function getBrowserWidth() {

    if( typeof( window.innerWidth ) == 'number' ) {
        return window.innerWidth;
    } 
    else {
        return document.documentElement.clientWidth;
    }
}

function getBrowserHeight() {

    if( typeof( window.innerHeight ) == 'number' ) {
        return window.innerHeight;
    } 
    else {
        return document.documentElement.clientHeight;
    }
}

function getBrowserScrollTop() {
    
    if (document.documentElement && (document.documentElement.scrollTop)) {
        return document.documentElement.scrollTop;
    } 
    else {
        return document.body.scrollTop;
    }
}
    
function getBrowserScrollLeft() {
    
    if (document.documentElement && (document.documentElement.scrollLeft)) {
        return document.documentElement.scrollLeft;
    } 
    else {
        return document.body.scrollLeft;
    }
}

function addEvent(elementObject, eventName, functionObject) {
    var fp;
    if (window.addEventListener) {
        fp = function (evt) {functionObject(elementObject, evt);};
        elementObject.addEventListener(eventName, fp, false);
    }
    else if (window.attachEvent) {
        fp = function () {functionObject(elementObject);};
        elementObject.attachEvent("on" + eventName, fp);
    }
    
    return fp;
}

function deleteEvent(elementObject, eventName, fp) {
    if (window.removeEventListener) {
        elementObject.removeEventListener(eventName, fp, false);
    }
    else if (window.detachEvent) {
        elementObject.detachEvent("on" + eventName, fp);
    }
}

function callMouseEvent(targetObject, eventName) {
    try {
        if (document.fireEvent) {
            // IE way
            targetObject.fireEvent("on" + eventName);
        }
        else if (document.createEvent) {
            // WC3 and mozilla way
            var evt = document.createEvent("MouseEvents");
            evt.initMouseEvent(eventName, true, true, window, 
                0, 0, 0, 0, 0, false, false, false, false, 0, null);
            targetObject.dispatchEvent(evt);
        }
    }
    catch (e) {}
}

function sendClickTrackRequest(url) {
	if(document.images){
		(new Image()).src=url;
	}
	return true;
}

function getElementsByClassName(classname, tagname, node) {
    if(!node) node = document.getElementsByTagName("body")[0];
    if (!tagname) tagname = "*";
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName(tagname);
    for(var i=0,j=els.length; i<j; i++)
    if(re.test(els[i].className))a.push(els[i]);
    return a;
}

function sizeDockedElements()
{
    var browserHeight = getBrowserHeight();
    var sizingElements = getElementsByClassName("verticalFill")
    var footer = document.getElementById("Footer");
    if (sizingElements == null || footer == null) return;
    for(var i=0; i<sizingElements.length; i++)
    {
        var elm = sizingElements[i];
        var elm_pos = _GetRealPos(elm);
        //alert("Browserheight = " + browserHeight + "; footer top = " + _GetRealPos(footer).top);
        var footer_height = footer.offsetHeight;
        var newheight = browserHeight - elm_pos.top - footer_height - 20;
        elm.style.height = newheight + "px";
        
        // If footer is not completely on the page after this than recalc position of elements
        // and adjust for how much of the footer is off the page.
        var footer_offset = (_GetRealPos(footer).top + footer.offsetHeight + 5) - browserHeight;
        if (footer_offset > 0) {
            //alert("adjusting offset: " + footer_offset);
            elm.style.height = elm.offsetHeight + footer_offset + "px";
        }
    }
}

function floatFooter()
{
    var browserHeight = getBrowserHeight();
    var browserWidth = getBrowserWidth();
    var footerAnchor = document.getElementById("FooterAnchor")
    var footer = document.getElementById("Footer");
    if (footerAnchor == null || footer == null) return;
     
    var anchor_pos = _GetRealPos(footerAnchor);
    
    var footer_height = footer.offsetHeight;
    
    var padding = 10;
    var pos1 = anchor_pos.top + footerAnchor.offsetHeight + padding;
    var pos2 = browserHeight - footer.offsetHeight - padding - 5;
 
    footer.style.position = "absolute";
    footer.style.top = Math.max(pos1, pos2) + "px";
    footer.style.left = "5px";
    footer.style.width = (browserWidth - 10) + "px";   
}

function convertDates(parent, id, dateformat)
{
    if (parent != null) 
    {
        // Find all date fields that need converting
        var dts = parent.getElementsByTagName("span");
        if (dts != null)
        {
            var curdt = new Date();
            for (var i = 0; i < dts.length; i++) 
            {
                if (getNameAttr(dts[i]) == id)
                {
                    var prev = dts[i].previousSibling;
                    var utc = parseInt(dts[i].innerHTML);
                    if (utc > 0)
                    {
                        curdt.setTime(utc);
                        prev.innerHTML = FormatDate(curdt, dateformat);
                    }
                    else
                    {
                        prev.innerHTML = "N/A";
                    }
                }
            }
        }
    }
}

function getNameAttr(node) {
    if (node.name != undefined) return node.name;
    var attrs = node.attributes;
    if (attrs != null && attrs["name"] != null) return attrs["name"].nodeValue;
    return "";
}


function toggleDiv(link, hxdivid)
{
    var hxdiv = document.getElementById(hxdivid);
    if (hxdiv != null) {
        if (hxdiv.style.display == "none") {
            hxdiv.style.display = "block";
            link.innerHTML = "[-]";
        }
        else {
            hxdiv.style.display = "none";
            link.innerHTML = "[+]";
        }
    }
}

function OpenContactUs(url) {
    window.open(url, "_blank", "status=no,titlebar=no,toolbar=no,scrollbars=no,resizable=no,menubar=no,location=no,height=640,width=800");
    return false;
}
