if (typeof HolUtils == "undefined") {
    var HolUtils = {};
}

HolUtils.getRefToElemId = function (elemID) {
    if (document.getElementById) {
        return document.getElementById(elemID);
    }
    if (document.all) {
        return document.all[elemID];
    }
    return document[elemID];
}

HolUtils.addEvent = function (element, eventType, func, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, func, useCapture);
        return true;
    } else if (element.attachEvent) {
        return element.attachEvent('on' + eventType, func);
    } else {
        return false;
    }
}

HolUtils.addLoadEvent = function (func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

HolUtils.maximumCompanyLogoHeight = 60;
HolUtils.maximumCompanyLogoWidth = 205;
HolUtils.correctCompanyLogoSize = function () {
    function minimizeHeaderMargin() {
        var header = HolUtils.getRefToElemId('company-information-header');
        if (header != null) {
            header.style.marginBottom = '20px';
        }
    }

    try {
        var companyLogo = HolUtils.getRefToElemId('width-autofit');
        if (companyLogo == null) return;
        if (companyLogo.offsetWidth > HolUtils.maximumCompanyLogoWidth ||
            companyLogo.offsetHeight > HolUtils.maximumCompanyLogoHeight) {
            var height = companyLogo.offsetHeight;
            var width = companyLogo.offsetWidth;
            var factor = 1;
            var widthFactor = HolUtils.maximumCompanyLogoWidth / width;
            var heightFactor = (HolUtils.maximumCompanyLogoHeight + 30) / height;
            factor = Math.min(widthFactor, heightFactor);
            if (widthFactor > HolUtils.maximumCompanyLogoHeight / height) {
                minimizeHeaderMargin();
            }
            if (factor < 1) {
                companyLogo.style.height = factor * height + 'px';
                companyLogo.style.width = factor * width + 'px';
            }
        }
    } catch(e) {
        //
    }
}

HolUtils.trimHeading = function ()
{
    function getParentElementById(child, id) {
        var p = child.parentNode;
        while (p != null && p.id != id) {
            p = p.parentNode;
        }
        return p;
    }

    function trimEllipse(d)
    {
        if (d.firstChild == null)
            return;

        var x = getParentElementById(d, 'name_frame').offsetWidth;
        var txt = d.firstChild.data;

        while (x < d.offsetWidth) {
            txt = txt.substring(0, txt.length * x / d.offsetWidth - 2);
            d.firstChild.data = txt + '\u2026';
        }
    }

    var spans = document.getElementsByTagName('span');
    for (var i = 0, len = spans.length; i < len; ++i) {
        if (spans[i].id == "ellipsis") {
            trimEllipse(spans[i]);
        }
    }
}

HolUtils.clickOnChildLink = function(element) {
    var links = element.getElementsByTagName('a');
    if (links != null && links.length != 0 && links[0] != null && links[0].onclick != null) {
        links[0].onclick();
    }
}

HolUtils.turnOffTabs = function() {
    var ul = HolUtils.getRefToElemId('navigation_panel');
    if (ul == null) return;
    var lis = ul.getElementsByTagName('li');
    if (lis.length < 2) return;
    lis[0].className = 'first';
    lis[1].className = '';
}


HolUtils.trim = function (string) {
    return string.replace(/(^\s+)|(\s+$)/g, "");
}

// show displayId if there is no absenceId
HolUtils.showIfAbsence = function(absenceId, displayId) {
    var absence = HolUtils.getRefToElemId(absenceId);
    if (absence == null || HolUtils.trim(absence.innerHTML) == '') {
        var display = HolUtils.getRefToElemId(displayId);
        display.style.display = 'block';
    } else {
        var display = HolUtils.getRefToElemId(displayId);
        display.style.display = 'none';
    }
}

// show displayId if there is presenceId
HolUtils.showIfPresence = function(presenceId, displayId) {
    var presence = HolUtils.getRefToElemId(presenceId);
    if (presence != null && HolUtils.trim(presence.innerHTML) != '') {
        var display = HolUtils.getRefToElemId(displayId);
        display.style.display = 'block';
    } else {
        var display = HolUtils.getRefToElemId(displayId);
        display.style.display = 'none';
    }
}

function isDateRangeValid() {
    var beginDate = extractDate("searchRequestForm:beginDate");
    var endDate = extractDate("searchRequestForm:endDate");

    if (beginDate > endDate) {
        $("searchRequestForm:dateRangeErrorMessage").style.visibility = 'visible';
        return false;
    } else {
        $("searchRequestForm:dateRangeErrorMessage").style.visibility = 'hidden';
        return true;
    }
}

function extractDate(calendar) {
    var dateString = $(calendar).component.getSelectedDate("MMM d, yyyy");
    return Date.parse(dateString);
}

function print(target) {
    preparePrintContent(target);
    target.focus();
    target.print();
}

function preparePrintContent(target) {
    var containerDiv = document.getElementById("printContent");
    target.document.body.innerHTML = containerDiv.innerHTML;
}

function img2txt(img) {
  img.parentNode.innerHTML = img.alt;
}

HolUtils.showSpan = function (img, span_id) {
    $(span_id).style.display = 'block';
    img.style.display = 'none';
}

HolUtils.imageError = null;
HolUtils.imageAlt = null;

function maximizeStatusPane(paneId) {
    var statusPane = document.getElementById(paneId);
    var parent = statusPane.parentNode;
    while( parent != null && parent.className != 'block-content' ) {
        parent = parent.parentNode;
    }
//    alert(parent.offsetHeight + '(' + parent.className + ') = ' + statusPane.offsetHeight);
    if( parent != null && parent.offsetHeight != statusPane.offsetHeight ) {
        statusPane.style.height = parent.offsetHeight;
    }
}

function shareURI(firmName, releaseHeading, addThisButton, addThisId, url, uiLanguage) {
    var maxLenOfDescForTwitter = 138 - url.length;
    var desc = firmName + (releaseHeading == null ? "" : (" - " + releaseHeading));
    var addthis_ui_config = {
        ui_language: uiLanguage,                
        services_compact: 'facebook, twitter, linkedin, myspace, email, digg, delicious, newsvine, wordpress, reddit, '
                + 'google, live, buzz, stumbleupon, xing, hyves, technorati, viadeo, blogger, '
                + 'tumblr, meinvz, oknotizie, vkontakte, netlog, friendster, copainsdavant, skyrock, more',
        services_custom: [
          {
            name: "Copainsdavant",
            url: "http://copainsdavant.linternaute.com",
            icon: "http://copainsdavant.linternaute.com/favicon.ico"
          },
          {
            name: "Skyrock",
            url: "http://skyrock.com",
            icon: "http://skyrock.com/favicon.ico"
          }
        ]

    };
    var twitter_desc = desc;
    if (twitter_desc.length > maxLenOfDescForTwitter) {
        twitter_desc = twitter_desc.substring(0, maxLenOfDescForTwitter - 4) + " ...";
    }
    var addthis_share_config = {
        title: desc, // used by gmail
        url: url,
        templates: {
            twitter: twitter_desc + ': ' + url,
            copainsdavant: desc + ': ' + url,
            skyrock: desc + ': ' + url
        }
    };

   addThisButton(addThisId , addthis_ui_config, addthis_share_config);
}
