 
brand.product.productButton = Class.create(
{

    //buttonClass: "form_btn_add_to_bag",

    //cartType: "checkout",
    //cartAction: "add",
    cartHandler: null,
    
    // skus: Array
    // list of skus from page_data for alterCartActOnList
    skus: [],

    // valueField (optional)
    // input field that stores currently selected sku
    valueField: null,
    
    _enabled: true,    

    initialize: function(args) {
        //console.log("brand.product.productButton.init ");   
        if (args) generic.updateProperties.apply(this, [args]); 
        this.cartHandler = brand.checkout.cartHandler;    
          
        var method = (args.method ? args.method : "alterCart"); 
        if (args.node && this[method]) {
            args.node.observe("click", this[method].bind(this));
        }
         
        if (args.progressIndicator) {
            this.progress = new generic.progress({
                containerId: args.node.id, // defaults to hiding this button
                progressId: args.progressIndicator
            });
        } 
    },

    alterCart: function(e) {
        //console.log("brand.product.productButton.alterCart"+this._enabled);
        if (!this._enabled) { return; } 
        var self = this;
        
        var params = {}; 
        var skus = [];
        
        if (this.skus.length>0) { //multisku
        	  skus = this.skus;
        } else {  
            var sku = (this.valueField ? this.valueField.value : e.target.value); // if field for value not defined, look in event target (submit button) 
            skus.push(sku.split("SKU")[1]);
            params["INCREMENT"] = 1;	 
        } 
        if (!skus[0]) return; 
         
        this._enabled = false; 
        params["skus"] = skus;
        
        if (this.progress) {
                this.progress.start();
        }
            
        var callback = function(resp) {
                //console.log("brand.product.productButton.alterCart callback ");
                self.callback(resp);
                self._enabled = true; 
                if (self.progress) {
                    self.progress.clear();
                }
            };
     
       var errbackFunction = self.errback || self.callback;  
       
       var errback = function(err) {
                console.log("brand.product.productButton.alterCart errorback: ");
                errbackFunction(err); 
                self._enabled = true;
                if (self.progress) {
                    self.progress.clear();
                }
              
       }  
       
       this.cartHandler.updateCart( { 
       		params: params, 
       	 	onSuccess:callback,
            	onFailure: errback
       	 }); 
        
    },
    
    alterCollection: function(e) {
        //console.log("brand.product.productButton.alterCollection "+this._enabled); 
        if (!this._enabled) { return; } 
        var self = this;
        
        var field = (this.valueField ? this.valueField.value : e.target.value); // if not field for value defined, look in event target (submit button)
        if (!field) field = this.node.id; 
        sku = field.split("SKU")[1];
        this._enabled = false;
        
        var action = this.action || "add"; 
       
        if (this.progress) {
                this.progress.start();
        }
            
        var callback = function(resp) {
                //console.log("brand.product.productButton.alterCollection callback ");
                self.callback(resp,field);
                self._enabled = true; 
                if (self.progress) {
                    self.progress.clear();
                }
            };
       
       var errbackFunction = self.errback || self.callback;  
       
       var errback = function(err) {
                console.log("brand.product.productButton.alterCart errorback: ");
                errbackFunction(err); 
                self._enabled = true;
                if (self.progress) {
                    self.progress.clear();
                }
              
       }  
            
       generic.account.collection.update( { 
       		skuBaseId: sku, 
       		action: action, 
       	 	onSuccess:callback,
            	onFailure: errback
       	 });  
    },
     
    callback: function() {
        // external callback use    
    } 

});
