var generic = generic || {};
var el = el || {};

// resource bundling

el.globalnav = {
    defaultValue: "",
    initEmailSignup : function() {        
        $$("div.email-signup-container").each(function(emailContainerNode) {
            var self = this;
            
            if (!emailContainerNode) {
                return null;
            }
            var emailFormNode = emailContainerNode.select("form")[0];
            var emailSubmitNode = emailContainerNode.select("input.input-image")[0];
            var emailErrorMsgNode = emailContainerNode.select("div.error-message")[0];
            var emailInputNode = emailContainerNode.select("input.email-signup")[0];
            
            if (!this.defaultValue) {
                this.defaultValue = emailInputNode.value;
            }
            
            emailInputNode.observe("blur", function(evt) {
                if (this.value === "") {
                    this.value = this.defaultValue;
                }
            });
            
            emailInputNode.observe("focus", function(evt) {
                if (this.value && this.value === self.defaultValue) {
                    this.value = "";
                }
            });
            
            emailFormNode.observe("submit", function(submitEvt) {
                submitEvt.preventDefault();
                var params = emailFormNode.serialize(true);
                generic.jsonrpc.fetch({
                    method : 'rpc.form',
                    params: [params],
                    onSuccess:function(jsonRpcResponse) {
                        window.location = "/cms/promotions/email_signup_thanks.tmpl";
                    },
                    onFailure: function(jsonRpcResponse){
                        $(emailErrorMsgNode).style.display = "block";
                    }
                });
            });
        });
    }
};

/* For email signup */
var popup_timeout;

el.globalnav.show_signup = function() {
    if (popup_timeout){ clearTimeout(popup_timeout) }
    $('email_sign_up_popover_div').style.display='block';
};

el.globalnav.hide_signup = function() {
    popup_timeout = setTimeout( function(){ 
        $('email_sign_up_popover_div').style.display='none';   
    }, 500);
};

/* /For email signup */

/* Ported from MICA EL menu handling code*/
el.globalnav.siblingColumns = {
    init: function() {
        var colset = $$(".sibling_cols");
        for (var i=0; i<colset.length; i++) {
            this.create_layout_table(colset[i]);
        }
    },
    
    create_layout_table: function(container) {
        var nodes = container.childNodes;
        if (!nodes) return false;

        var table = document.createElement("table");
        table.className = "sibling_table";
        var table_body = document.createElement("tbody");
        var table_row =  document.createElement("tr");

        for (var i=0; i<nodes.length; i++) {
            if (nodes[i].nodeType == 1) { /* is element */
                var table_cell = this.create_layout_cell(nodes[i]);
                table_cell.className = "sibling_cell";
                nodes = container.childNodes;
                i--;
                table_row.appendChild(table_cell);
            }
        }
        table_row.lastChild.className  += " sibling_col_last";
        table_row.firstChild.className += " sibling_col_first";

        table_body.appendChild(table_row);
        table.appendChild(table_body);      
        container.appendChild(table);

        return true;
    },
    
    create_layout_cell: function(node) {
        var table_cell =  document.createElement("td");
        table_cell.appendChild(node);
        return table_cell;
    }
};

el.globalnav.menuNav = {
    init: function() {
        nav_items = $$("#globalnav .section_item");
        if (nav_items == undefined) return;

        var is_mac = navigator.userAgent.toLowerCase().indexOf("mac") != -1;
        var is_safari = navigator.userAgent.toLowerCase().indexOf("safari") != -1;

        for (i=0; i<nav_items.length; i++) {
            this.center_drop_pane( nav_items[i] );

            if (i == 1) {
                this.add_anim(nav_items[i], nav_items[i].select(".menu_pane")[0]);
            }

            /* add numbering if relevent */
            if (nav_items[i].parentNode.className.match("progress_nav")) {
                nav_items[i].className += (" progress_nav_" + (i+1));
                continue;
            }

            // only install mouseover listeners if we are IE lt 7
            // -or- safari :: added for drop-menu positioning - safari can't calculate offsetWidth at load time
            if (!(document.all&&document.getElementById&&!is_mac) && !(is_safari)) continue;
            nav_items[i].idx = i;
            this.install_listeners(nav_items[i]);
        }
    },
    
    center_drop_pane: function( elm ) {
        
        var amt = -0.5;
        if( elm.id == 'globalnav_CAT631' ) {
            amt = -0.22;
        } else if( elm.id == 'globalnav_CAT681' ) {
            amt = -0.33;
        } else if( elm.id == 'globalnav_whats_new' ) {
            amt = 0.0;
        }

        var menu_item = elm.select(".menu_item")[0];
        var menu_item_width = menu_item.offsetWidth;

        var drop_pane = elm.select(".menu_pane")[0];
        if (drop_pane == undefined) return;
        var drop_pane_width = drop_pane.offsetWidth;

        drop_pane.style.left = Math.floor(((drop_pane_width - menu_item_width) * amt)) + "px";
        this.add_anim(elm, drop_pane);
    },

    add_anim: function(elm, drop_pane) {
        if (elm == undefined || drop_pane == undefined) return;
        drop_pane.id = elm.id + "_menu_pane";
        elm.observe('mouseover', function(e) {
            el.globalnav.menuPaneAnim.start();
        });
        
        elm.observe('mouseout', function(e) {
            el.globalnav.menuPaneAnim.end();
        });
    },
    
    install_listeners: function(elm) {
        if (!(elm.className.match("has_menu_pane"))) return;
        var self = this;

        elm.observe('mouseover', function(e) {
            this.className+=" over has_menu_pane_over";
            self.center_drop_pane( elm );
        });
        
        elm.observe('mouseout', function(e) {
            this.className = this.className.replace(" over",""); 
            this.className = this.className.replace(" has_menu_pane_over","");
        });
    }
}

el.globalnav.menuPaneAnim = {
    start: function(e) {
        // TODO: Implement animation for global nav dropdown 
        // promo pane
        return;
    },
    end: function(e) {
        // TODO: ""
        return;
    }
}

/* /Ported from MICA EL menu handling code*/

document.observe("dom:loaded", function() {
    // setup user
    var userParams = {};
    userParams.pageDataKey = 'globalnav.user';
    generic.user.getUser(userParams);

    // setup cart
    var cartParams = {};
    cartParams.pageDataKey = 'globalnav.cart';
    generic.checkout.cart.getCart(cartParams);
    
    el.globalnav.initEmailSignup();
    
    el.globalnav.siblingColumns.init();
    
    el.globalnav.menuNav.init();    
});

document.observe("cart:countsUpdated", function(){
    console.log( "cart:countsUpdated event caught" );
    var cartCount = generic.checkout.cart.getTotalItems()
    if ($('shoppingbag_count')) {
        $('shoppingbag_count').update(cartCount);
    }
});

// assumes user:loaded event exists
document.observe("user:updated", function(){
    console.log( "user:updated event caught" );
    // update any user-dependent display
});

