if (typeof RH == "undefined") {
    // if logging is not setup, then define a no-op, do nothing logger
    RH = {};
}

if (typeof Class == "undefined") {
    console.log("You will need to import prototype.js first.");
}

RH.DropDownMenus = Class.create();
RH.DropDownMenus.prototype = {
        initialize: function(menuIDs) {
            menuIDs.each(function(id) {
                menuHeader = $('mh'+id);
                if(!menuHeader)
                    return;
                menuItems =  $('menuItems'+id);
                if(!menuItems) {
                    return;
                }
                positionMenu = function() {
                    mh2 = $('mh'+id);
                    mi2 = $('menuItems'+id);
                    var cumulativeOffset = Element.cumulativeOffset(mh2);
                    mi2.style.left = cumulativeOffset.left + "px";
                    mi2.style.minWidth = mh2.getWidth()+"px";
                    //mi2.style.top = (cumulativeOffset.top+menuHeader.getHeight())  + "px";
                }
                positionMenu();
                //document.observe("dom:loaded",positionMenu);
                Event.observe(window, 'load', positionMenu);
                Event.observe(window, 'resize', positionMenu);
                //<span id='ppicpagetop1' onmouseout="dmTimerOut(); bg_out('ppicpagetop1');" onmouseover="DMenu('picpagetop1'); dmTimerOver(); bg_over('ppicpagetop1');"><a href='/index.jsp'>Home</a></span> |
                mouseOut = function(event) {
                    mh2 = $('mh'+id);
                    mi2 = $('menuItems'+id);
                    var relatedTarget = event.relatedTarget;
                    if(relatedTarget) {
                        try {
                            inHeader = Element.descendantOf(relatedTarget, mh2);
                            if(inHeader)
                                return;
                            inMenuItems = Element.descendantOf(relatedTarget, mi2);
                            if(inMenuItems)
                                return;
                        } catch(e) {
                            // firefox throws if you mouse over a textarea/input/select.  permission denied to call method blah
                        }
                    }
                    mh2.removeClassName("menuHeaderHighlighted");
                    mi2.removeClassName("menuItemsOpened");
                };
                mouseOver = function(event) {
                    mh2 = $('mh'+id);
                    mi2 = $('menuItems'+id);
                    mh2.addClassName("menuHeaderHighlighted");
                    mi2.addClassName("menuItemsOpened");
                };
                Element.observe(menuHeader, 'mouseout', mouseOut);
                Element.observe(menuHeader, 'mouseover', mouseOver);
                Element.observe(menuItems, 'mouseout', mouseOut);
                Element.observe(menuItems, 'mouseover', mouseOver);
            });
        }
};

RH.FormToQueryString = function(element){
    element = $(element);
    if(!element)
        return null;
    var elements = element.getElements();
    var map = $H({});
    for(var i = 0; i<elements.length;i++){
        map.set(elements[i].name,$F(elements[i]));
    }
    
    return map.toQueryString();
}

Date.prototype.format = function(/** String*/ format) {
    RH.Util.Date.formatDate(this, format);
}
