var generic = generic || {};
var brx = brx || {};

// resource bundling

brx.globalnav = {
    emailInputNode : null,
    emailContainerNode : null,
    emailFormNode : null,
    emailSubmitNode : null,
    emailProgressNode : null,
    initEmailSignup : function() {
        emailContainerNode = $$("div.sign_up_email")[0];
        if (!emailContainerNode) {
            return null;
        }
        emailFormNode = emailContainerNode.select("form")[0];
        emailSubmitNode = emailContainerNode.select("input.input-image")[0];
        emailInputNode = emailContainerNode.select("input.email-signup")[0];
        emailFormNode.observe("submit", function(submitEvt) {
            submitEvt.preventDefault();
            var params = emailFormNode.serialize(true);
            var rb = generic.rb('language');
            generic.jsonrpc.fetch({
                method : 'rpc.form',
                params: [params],
                onSuccess:function(jsonRpcResponse) {
                    var d = jsonRpcResponse.getData();
                    var msg = rb.get("email_signup_text");
                    emailInputNode.value = rb.get("thanks");
                    emailInputNode.style.color = "#BED30E";
                },
                onFailure: function(jsonRpcResponse){
                    var errorObjectsArray = jsonRpcResponse.getMessages();
                    emailInputNode.value =  rb.get("please_try_again");
                    emailInputNode.style.color = "#BED30E";
                }
            });
        });
    },
    initEmailSignupNew : function() {
        emailContainerNodeNew = $$("div.sign_up_email_new")[0];
        if (!emailContainerNodeNew) {
            return null;
        }
        emailFormNodeNew = emailContainerNodeNew.select("form")[0];
        emailSubmitNodeNew = emailContainerNodeNew.select("input.button")[0];
        emailInputNodeNew = emailContainerNodeNew.select("input.message")[0];
        emailFormNodeNew.observe("submit", function(submitEvt) {
            submitEvt.preventDefault();
            var params = emailFormNodeNew.serialize(true);
            var rb = generic.rb('language');
            generic.jsonrpc.fetch({
                method : 'rpc.form',
                params: [params],
                onSuccess:function(jsonRpcResponse) {
                    var d = jsonRpcResponse.getData();
                    var msg = rb.get("email_signup_text");
                    emailInputNodeNew.value = rb.get("thanks");
                    emailInputNodeNew.style.color = "#BED30E";
                },
                onFailure: function(jsonRpcResponse){
                    var errorObjectsArray = jsonRpcResponse.getMessages();
                    emailInputNodeNew.value =  rb.get("please_try_again");
                    emailInputNodeNew.style.color = "#BED30E";
                }
            });
        });
    }
};

brx.popupEmailSignup = {
    emailInputNode : null,
    emailContainerNode : null,
    emailFormNode : null,
    emailSubmitNode : null,
    emailProgressNode : null,
	emailFormPane : null,
    emailThankyouPane : null,
    initEmailSignup : function(popup_template) {
		var containerDiv = new Element("div", { "class":"overlay-content" });
		containerDiv.style.display = "none";
		containerDiv.addClassName("overlay-content-container");
		
		var req = new Ajax.Request(popup_template, {
			method:'get',
			onSuccess: function(transport) {
				var response = transport.responseText || "no response text";
				containerDiv.update(response);
				document.body.appendChild(containerDiv);
				brx.popupEmailSignup.initEmailPop(containerDiv, popup_template);
			},
			onFailure: function(){
				var errMsg = "Error loading " + popup_template;
				containerDiv.update(errMsg);
			}
		});
	},
	initEmailPop : function(containerDiv, popup_template) {
		var styleObj = {};
		styleObj.width = '420px';
		styleObj.height = '566px';
		var cssClass = "emailpop";
		
		containerDiv.style.display = "block";
		generic.overlay.launch({
			url: popup_template,
			content: containerDiv,
			includeBackground: true,
			cssStyle: styleObj,
			cssClass: cssClass
		});
		
        emailContainerNode = containerDiv.select("div#popup_email_signup")[0];
		emailFormPane = containerDiv.select("div#email_popup_form")[0];
		emailThankyouPane = containerDiv.select("div#email_popup_thankyou")[0];
        if (!emailContainerNode) {
            return null;
        }
		
        emailFormNode = containerDiv.select("form")[0];
        emailSubmitNode = containerDiv.select("input.input-image")[0];
        emailInputNode = containerDiv.select("input.email-signup")[0];
		
        emailFormNode.observe("submit", function(submitEvt) {
            submitEvt.preventDefault();
            var params = emailFormNode.serialize(true);
            var rb = generic.rb('language');
            generic.jsonrpc.fetch({
                method : 'rpc.form',
                params: [params],
                onSuccess:function(jsonRpcResponse) {
                    var d = jsonRpcResponse.getData();
                    var msg = rb.get("email_signup_text");
                    emailInputNode.value = rb.get("thanks");
					emailFormPane.addClassName('hidden');
					emailThankyouPane.removeClassName('hidden');
                },
                onFailure: function(jsonRpcResponse){
                    var errorObjectsArray = jsonRpcResponse.getMessages();
                    emailInputNode.value =  rb.get("please_try_again");
                }
            });
        });
    }
};

brx.initHover = function(ulId) {
    if(document.getElementById(ulId) !=  null){
        var sfEls = document.getElementById(ulId).getElementsByTagName("LI");
        for (var i=0; i<sfEls.length; i++) {
            sfEls[i].onmouseover=function() {
                this.className+=" sfhover";
            }
            sfEls[i].onmouseout=function() {
                this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
            }
        }
    }
};

brx.initHovers = function() {
    var ullist = ["global_nav", "service_nav"];
    for (var x=0; x<ullist.length; x++) {
        brx.initHover(ullist[x]);
    }
};

document.observe("dom:loaded", function() {
    brx.initHovers();
    // 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);
    
    if (!!(generic.env.isIE6)) {
        //brx.initHovers();  initialize hover states for IE6     
    }

   var emailContainerNode = $$("div.sign_up_email")[0];
   if(emailContainerNode) {
       var emailInputNode = emailContainerNode.select("input.email-signup")[0];
       emailInputNode.observe("focus", function(e) {
           emailInputNode.value = '';
           emailInputNode.style.color = "#939393";
       });
   } 

   var emailContainerNodeNew = $$("div.sign_up_email_new")[0];
   if(emailContainerNodeNew) {
       var emailInputNodeNew = emailContainerNodeNew.select("input.message")[0];
       emailInputNodeNew.observe("focus", function(e) {
           emailInputNodeNew.value = '';
           emailInputNodeNew.style.color = "#939393";
       });
   } 
    
    brx.globalnav.initEmailSignup();
    brx.globalnav.initEmailSignupNew();
});

document.observe("cart:countsUpdated", function(){
    var items = generic.checkout.cart.order.items;
    var samples = generic.checkout.cart.order.samples;
    var cartItems = items.concat(samples);
    var cartCount = generic.checkout.cart.getTotalItems()
 
    if (parent.$('global_cart_count')) {
        parent.$('global_cart_count').update(cartCount);
    }

    var subtotal = 0;
    var cartParentNode = parent.$$('li.item')[0];
    var cartServiceNav = parent.$$('#service_nav')[0];
    var cartButtonsNode = parent.$$('div.viewbag_btn')[0];
    var cartItemsNode = parent.$$('div.cart_items')[0];
    if(cartItemsNode) {
        cartItemsNode.update("");
    }

    var cartCloseBtn = parent.$$('a.cart_close_btn')[0];   
    if(cartCloseBtn) {
        cartCloseBtn.observe('click', function(e) {
            var cartNode = parent.$$('ul#service_nav li.item.sfhover')[0];
            cartNode.removeClassName('sfhover');
        });
    }

    if(cartCount && cartParentNode) {
        // $$('div.cart_menu')[0].removeClassName("hidden");
        cartParentNode.addClassName("cart_has_items");
        if(cartServiceNav)cartServiceNav.addClassName("cart_true");
        var skuCnt = 0;
        cartItems.each( function(cartItem) {
            var item_total = cartItem.UNIT_PRICE * cartItem.ITEM_QUANTITY;
            var template = '/templates/util-cart-item.tmpl';
            var url = cartItem['prod.url'];
            if(cartItem['itemType'] == "SampleItem") {
                template = '/templates/util-cart-sample.tmpl';
                url = '';
            }
            data = {
              name: cartItem['prod.PROD_RGN_NAME'],
              url: url,
              item_qty: cartItem.ITEM_QUANTITY,
              item_total: item_total.toFixed(2)
            };
            if(skuCnt < 10) {
                generic.templatefactory.get({path: template}).evaluateCallback({
                    object: data,
                    callback: function(html) {
                        parent.$$('div.cart_items')[0].insert(html);
                    }
                })        
            }
            subtotal += cartItem.UNIT_PRICE * cartItem.ITEM_QUANTITY;
            skuCnt++;
        });

        if(skuCnt >= 10) {
            parent.$$('a.more_link')[0].removeClassName('hidden');
        }

        if (parent.$$('span.cart_subtotal')[0]) {
            var rb = generic.rb('brand');
            var label;
            if(cartCount == 1) {
                label = rb.get("item_in_cart");
            } else {
                label = rb.get("items_in_cart");
            }
            parent.$$('span.cart_subtotal')[0].update(cartCount + label + "$" + subtotal.toFixed(2));
        }
    } else if(cartParentNode) {
        cartParentNode.removeClassName("cart_has_items");
        // $$('div.cart_menu')[0].addClassName("no_items");
    }
});

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


