brand.account = {
  isSignedIn: function(win) { 
    return (page_data.customer && page_data.customer.signed_in == 1) 
  }   
}


brand.account.panel = {
    // summary: 
    //      Handles display of "my account" accordion
    //      Sets default states for accordion & its sub-sections 
    hasSetPanelLinks: false,
    accountConfig:null,
      
    // hack: hide account nav accordion until accordion widget is set up
    init: function(accountConfig) { 
        //console.log("brand.account.panel.init");
        if (!$("accountnav")) { return; }
        var self = this;
        this.accountConfig = accountConfig; 
        
        var getNav = function() {
            var nav = $("psubitem_myaccount");
            if (nav) {
                clearInterval(timer);
                $("accountnav_accordion").style.visibility = "visible";
                self.setState(nav);
            }
        }   
        var timer = setInterval(getNav, 600);
         
        this.setPanelLinks();//in case the links are in panel_open
     
        //subscribe to "my mac" left nav onclick for non-account/checkout pages
        generic.events.observe("globalnav:getcontent/my_mac", function(event) {
            self.handlePanelRefresh({event: "show_panel"});
        });   
    },
    
    handlePanelRefresh: function(args) { 
        brand.account.panel.setPanelLinks();    
    }, 
    
    setPanelLinks: function() {
         //console.log("brand.account.setPanelLinks "+this.hasSetPanelLinks);
         if (this.hasSetPanelLinks) return;
    
         $$(".signout_link").each(function(s) { 
               this.hasSetPanelLinks = true;
               s.observe("click", brand.account.panel.signoutSubmit ); 
         });  
    }, 
    
    signoutSubmit: function() {
         ///console.log("brand.account.signoutSubmit"); 
         var onSuccess = function() {
             generic.events.fire({event:"cartCount:reset",msg:0});  
             location.replace('/account/signin.tmpl?_SUBMIT=signout'); //56485 COG 21 July 2010 - Signout issue fixed
         }
         var onFailure = function() {
             console.log("brand.account.signoutSubmit: SIGNOUT failure");
         } 
         generic.jsonrpc.fetch({method:'rpc.form', params:[{'_SUBMIT':'signout'}], onSuccess:onSuccess, onFailure:onFailure});
        
    },
    
    setState: function(nav) { 
        var pn = page_data.panel_nav["default"]; 
        var section, subsection, activeSection;
        if (pn && pn.item) {
            try {
                section = pn.id;
                subsection = pn.item.id;           
            }
            catch (err) { 
                console.log("setState: ",err);  
            }
        }
        if (section != "account") return;
         
        // find "active" subsection 
        for (i=0; i<this.accountConfig.length; i++) {
                //console.log("test: "+this.accountConfig[i] + " / " + section + " / " + subsection); 
                if (this.accountConfig[i] === section || this.accountConfig[i] == subsection) {
                    activeSection = this.accountConfig[i];  
                    break;
                }
        }                
         
        // set section/subsection image states 
        var activeImg = $("hd_"+activeSection);
        if (activeImg) {
                 activeImg.addClassName("sprite-on");  
                 if (activeImg.descendantOf(nav)) nav.widget.open(); // if page is w/in account subsetion open nav
        } 
       
    } 
} 

brand.account.emailSignup = {
    emailSignupJsonRpcPath: "email.signup",
     
    init: function(args) { 
        var self = this;
        var submitNode = args.submitNode;
        this.fieldNode = args.fieldNode;
        if (!submitNode || !this.fieldNode) return;
        submitNode.observe('click', self.validateEmail.bind(self));
        this.fieldNode.observe('keypress', self.validateEmail.bind(self));
    },
    
    validateEmail: function(event) { 
        if (!this.fieldNode) { return; } 
        
        if ( event.type === "keypress" && (event.keyCode != Event.KEY_RETURN) ) { 
            return false;           
        }
        var email = this.fieldNode;
        var popup; 
        var onSuccess = function() {
            popup = new generic.popupMessage({    
                popup: $("pop_email_valid"),
                buttonClose: $("pop_close_valid"),
                displayDuration: 5000
            }); 
            popup.show();
        }
        var onFailure = function() {
            popup = new generic.popupMessage({    
                popup: $("pop_email_invalid"),
                buttonClose: $("pop_close_invalid"),
                displayDuration: 5000
            });
            popup.show();
        }
        var requestArgs = [{
            EMAIL_ADDRESS: email.value 
        }]; 
            
        if (generic.forms.isEmailAddress(email.value)) { 
            var d = generic.jsonrpc.fetch({method:this.emailSignupJsonRpcPath, params:requestArgs, onSuccess:onSuccess, onFailure:onFailure});
        } else { 
            onFailure();
        }
       
        Event.stop(event);

        return false;
    }
}

brand.account.addressDeleteLinks = {

    popPrefix: "popup-delete-address-",
    addressContainerPrefix: "rel-delete-address-",
    popovers: {},
    
    init: function(args) { 
        if (!args.linkNodes) {
            return false;
        }
        
        var self = this;
        var prefix = this.popPrefix;
        
        args.linkNodes.each(function(node) {             
            var addressId = node.value;
            var popover;

            // confirmation popover triggered from remove button
            popover = self.popovers[addressId] = new generic.popupMessage({
                trigger: node,
                popup: $(prefix + addressId),
                buttonClose: $(prefix + addressId + "-close")
            });
            
            // cancel link
            var linkCancel = $(prefix + addressId + "-cancel");
            if (linkCancel) linkCancel.observe("click", popover.close.bind(popover));

            // confirm delete link
            var linkConfirm = $(prefix + addressId + "-confirm");
            if (linkConfirm) linkConfirm.observe("click", function() {
                self.onConfirm(addressId);              
            });
            
        });
    },
    
    onConfirm: function(addressId) {
        var self = this;
        generic.jsonrpc.fetch({
            method: "rpc.form",
            params: [{
                '_SUBMIT' : "address_delete",
                'ADDRESS_ID' : addressId
            }],
            onSuccess: function(response) {
                self.onConfirmCallback(addressId);
            },
            onError: function (response) {
                console.log("error");
                console.log(response.getMessages());
            }
        });     
    },
    
    onConfirmCallback: function(addressId) {
        var popover = this.popovers[addressId];
        popover.close();
        var container = $(this.addressContainerPrefix + addressId);
        if (container) container.hide();
    }
}


// SS: old-style page-refresh version of pswd retrieval. At some point should probably get replaced by the brx-style rpc pswd retrieval
brand.account.forgotPassLink = {
    path: "/account/password_request.tmpl",
    modeValueDefault: "signin",
    modeValuePassword: "password_request",
    
    init: function(args) {
        if (!args.linkNode || !args.formContainer) {
            return false;
        }
        this.isCheckout = (args.isCheckout ? args.isCheckout : false);  
        this.formObj = args.formContainer.select("form")[0]; // using formContainer instead of form name since formContainer is consistent btwn account & checkout forms, while form id's are not
        var link = args.linkNode;
        this.emailFieldName = args.emailFieldName;
        this.modeFieldName = args.modeFieldName;
        var email;

        if (this.formObj && this.formObj[this.emailFieldName]) {
            email = 
            this.path = this.path + "?" + this.emailFieldName + "="; // add fieldname to path query
            var modeField = this.formObj[this.modeFieldName];
            if (modeField.value === this.modeValuePassword) {
                modeField.value = this.modeValueDefault; // set form submit mode to default "sigin" (necessary if previous submit has set this field to "password_request")
            }
            
            var self = this;
            link.observe("click", self.onClick.bind(self));
        }      
    },
    
    onClick: function(e) {
        var email = this.formObj[this.emailFieldName].value;
        var qstr = email;
        if (this.isCheckout) {
            qstr = qstr + "&checkout=1";
        }
        this.formObj.action = this.path + qstr; // add values to path query
        this.formObj[this.modeFieldName].value = this.modeValuePassword; // set form submit mode (signin vs. lost pswd)
console.log("form = "+this.formObj.id + " | _SUBMIT field value = "+this.formObj["_SUBMIT"].value + "  | url/action = "+this.formObj.action);
        this.formObj.submit();
    }    
}

// registration: toggle form field display on registration page (in existing user mode)
// SS NOTE: should this be part of checkout.AddressBook ??
brand.account.toggleProfileContent = {
    groups: {},
    init: function(args) {
        var self = this;
        
        for (arg in args) {
            var group = args[arg];
            if (group.link) {
                this.groups[group.link] = group;
                var node = $(group.link);
                if (node) node.observe("click", self.onClick.bind(self)); 
            }
        }
    },
    
    onClick: function(e) {
        var group = this.groups[e.target.id];
        if (group) {
            var toShow = $(group.toShow);
            if (toShow) toShow.removeClassName('hidden');
            var toHide = $(group.toHide);
            if (toHide) toHide.hide();
        }
    }    
}
