function show_language_menu() {
    $('language_menu').show();
}

function hide_language_menu() {
    $('language_menu').hide();
}

function change_language(value) {
    $('language_input').value = value;
    $('language_form').submit();
}

function toggle_menu_item(id) {
    var menu = $(id);

    menu.up('ul').select('ul').each(function (e) { e.hide(); });

    menu.show();
}

var main_menu_hover = null;
function init_main_menu() {
    $$("#main_menu > ul > li > a").each(function (e) {
            if($(e.up("li").identify() + "_drop")) {
                e.observe("mouseenter", main_menu_mouse_enter);
                $(e.up("li").identify() + "_drop").select(".menu_name")[0].observe("mouseenter", main_menu_mouse_enter);
                $(e.up("li").identify() + "_drop").select(".drop_down_menu_items")[0].observe("mouseenter", main_menu_mouse_enter);
                $(e.up("li").identify() + "_drop").select(".menu_name")[0].observe("mouseleave", main_menu_mouse_leave);
                $(e.up("li").identify() + "_drop").select(".drop_down_menu_items")[0].observe("mouseleave", main_menu_mouse_leave);
            }
        });

    $("product_link").observe("mouseenter", product_link_enter);
    $$("#products_box_drop .menu_name").each(function (node) { node.observe("mouseenter", product_link_enter); });
    $$("#products_box_drop dl").each(function (node) { node.observe("mouseenter", product_link_enter); });
    $$("#products_box_drop .menu_name").each(function (node) { node.observe("mouseleave", product_link_leave); });
    $$("#products_box_drop dl").each(function (node) { node.observe("mouseleave", product_link_leave); });

    $$("#products_box_drop dt").each(function (node) {
            node.observe("mouseenter", function (e) {
                    var element = e.element();
                    if(!element.id) { element = element.up("dt"); }
                    if(!element) { return; }
                    $$("#products_box_drop dt", "#products_box_drop dd").each(function (node) { node.removeClassName("active"); });
                    element.addClassName("active");
                    $(element.identify() + "_desc").addClassName("active");
                });
        });
}

function main_menu_mouse_enter(e) {
    var menu;
    if(e.element().up("#main_menu")) {
        menu = $(e.element().up("li").identify() + "_drop");
    } else {
        menu = $(e.element().up(".drop_down_menu"));
    }
    if(!menu) { return; }

    if(main_menu_hover == menu) {
        return;
    }

    main_menu_hover = menu;

    show_modal_bg();

    if(e.element().up("#main_menu") && menu.getStyle("left") == "0px") {
        /*
            There is a bug in clonePosition when the destination element has absolute positioning with IE6 that has yet to be fixed.
            See https://prototype.lighthouseapp.com/projects/8886/tickets/90-cloneposition-problem-in-ie7#ticket-90-31
        */
        menu.setStyle( { position: 'relative' } );

        menu.clonePosition(e.element().up("li"), { setWidth: 0, setHeight: 0, offsetTop: 7, offsetLeft: 0 });

        /*
            There is also a bug in clonePosition where it doesn't take into account the scrolling of the browser window.
            If the browser window is scrolled then the dropped down menu will not be correctly aligned.
        */
        var scroll = menu.cumulativeScrollOffset();
        menu.setStyle({ 'left': (parseInt(menu.getStyle('left').slice(0, -2)) + scroll['left'])+'px',
                        'top': (parseInt(menu.getStyle('top').slice(0, -2)) + scroll['top'])+'px' });

        menu.select("div")[0].setStyle(e.element().getDimensions());

        menu.setStyle( { position: 'absolute' } );
    }

    menu.show({ queue: { scope: "menu", position: "end" } })
}

function main_menu_mouse_leave(e) {
    main_menu_hover = null;

    main_menu_fade.delay(0.15, e.element(), { queue: { scope: "menu" } });
}

function main_menu_fade(e) {
    if(main_menu_hover != e.up(".drop_down_menu")) {
        e.up(".drop_down_menu").hide({ queue: { scope: "menu", position: "end" } });
    }

    if(!main_menu_hover) { hide_modal_bg(); }
}

function show_hide_states(e) {
    var country = $('id_country');
    var states = $('id_state').up('tr');

    if(country.selectedIndex == 2) {
        states.show();
    } else {
        states.hide();
    }
}

var product_link_hover = false;
function product_link_enter(e) {
    if(product_link_hover) { return; }

    product_link_hover = true;

    show_modal_bg();

    var menu = $("products_box_drop");
    if(menu.getStyle("left") == "0px") {
        /*
            There is a bug in clonePosition when the destination element has absolute positioning with IE6 that has yet to be fixed.
            See https://prototype.lighthouseapp.com/projects/8886/tickets/90-cloneposition-problem-in-ie7#ticket-90-31
        */
        menu.setStyle( { position: 'relative' } );

        menu.clonePosition($("product_link").up("li"), { setWidth: 0, setHeight: 0, offsetTop: 10 - (Prototype.Browser.IE ? 6 : 0), offsetLeft: 0 });

        /*
            There is also a bug in clonePosition where it doesn't take into account the scrolling of the browser window.
            If the browser window is scrolled then the dropped down menu will not be correctly aligned.
        */
        var scroll = menu.cumulativeScrollOffset();
        menu.setStyle({ 'left': (parseInt(menu.getStyle('left').slice(0, -2)) + scroll['left'])+'px',
                        'top': (parseInt(menu.getStyle('top').slice(0, -2)) + scroll['top'])+'px' });

        menu.select(".menu_name")[0].setStyle(e.element().getDimensions());

        menu.setStyle( { position: 'absolute' } );
    }

    menu.show({ queue: { scope: "menu", position: "end" } });
}

function product_link_leave(e) {
    product_link_hover = false;

    product_box_fade.delay(0.15);
}

function product_box_fade() {
    if(product_link_hover) { return; }

    hide_modal_bg();

    $("products_box_drop").hide({ queue: { scope: "menu", position: "end" } });
}

var modal_bg_visible = false;
function show_modal_bg() {
    if(!modal_bg_visible) {
        var footer_height = $('footer').positionedOffset()["top"] + $('footer').getHeight() + 6;
        var viewport_height = document.viewport.getHeight()

        $('modal_background').setStyle({ width: document.viewport.getWidth() + "px",  height: (footer_height > viewport_height ? footer_height : viewport_height) + "px" });
        $('modal_background').appear({ duration: 0.1, from: 0.0, to: 0.5, queue: { scope: "menu", position: "end" } });

        modal_bg_visible = true;
    }
}

function hide_modal_bg() {
    if(modal_bg_visible) {
        $('modal_background').fade({ duration: 0.1, from: 0.5, to: 0.0 , queue: { scope: "menu", position: "end" } });

        modal_bg_visible = false;
    }
}

