
brand.checkout.addressForm = {  
       errorData: null,
       hasErrors: false, 
       errorKeys: [ 
	"required_or.phone1.phone2",
	"required.city.address",
	"required.postal_code.address",
	"required.last_name.address",
	"required.first_name.address",
	"required.state.address",
	"required.address1.address"
       ],
       findErrors: function() { 
      	//console.log("brand.checkout.addressForm.hasAddressFormErrors "+this.errorData);
      	if (!this.errorData) return false;
      	var hasErrors = false;
      	var ekeys = this.errorKeys.join(" ");
      	
      	this.errorData.each(function(error){
      	     //console.log("brand.checkout.addressForm.hasAddressFormErrors "+ekeys.indexOf(error.key));
      	     if (ekeys.indexOf(error.key)>-1){ 
      	     	hasErrors = true;
      	     	throw $break;  
      	     }
      	});
      	
      	return hasErrors; 
      }, 
      
      init: function() {
             //console.log("brand.checkout.addressForm.init "+this.errorKeys.length);
             this.getHTMLObjects(); 
             this.initForm();   
             this.initBtns();
             this.addressMenu.init(); 
             
             if (this.addressFormAddressIdNode && this.addressContainerAddressIdNode) {
                  this.addressFormAddressIdNode.value = this.addressContainerAddressIdNode.value;
             }   
      },
      
      getHTMLObjects: function() {
      	   this.addressMenu.node = $$("select.address-select")[0]; 
             this.formContainerNode = $$("form#checkout_shipping div.address-form-container")[0];  
             this.addAddressLink = $$("a.add-address")[0];
             this.editAddressLink = $$("a.edit-address")[0]; 
             this.addressContainer = $$("div.address-container")[0];
             this.addressContainerNoDefaultNode = $$("div.address-container .no-default")[0];
             this.addressContainerAddressIdNode = $$(".address_id_hidden")[0];
             this.addressFormAddressIdNode = $$(".input_address_id")[0];
      },  
      
      initForm: function() {
      	//can be used to manipulate form html
      	//insert submit, handle lightbox etc 
      },
      
      initBtns: function() {  
            var self = this;
            if (this.addAddressLink) {
                this.addAddressLink.observe("click", self.addAddress.bind(self));
             } 
            if (this.editAddressLink) {
               this.editAddressLink.observe("click", self.editAddress.bind(self));
            }
      }
};
   
   
brand.checkout.addressForm.getUserAddresses = function() {
    if ( !Object.isArray(this.userAddresses) ) {
        this.userAddresses = [];
    }
    return this.userAddresses;
} 
  
brand.checkout.addressForm.showForm = function() {  
    this.formContainerNode.removeClassName("hidden");
}

brand.checkout.addressForm.addAddress = function(e) {
    //console.log("brand.checkout.addressForm.addAddress");  
    e.preventDefault();  
    this.populateForm(); 
    this.showForm();  
};

brand.checkout.addressForm.editAddress = function(e) { 
        //console.log("brand.checkout.addressForm.editAddress");
        e.preventDefault();  
         
        // get selected Address ID from select menu
        var selectedAddrId = this.addressMenu.getSelectedAddressId();
      
        // get address info from userAddressesArray
        var userAddressesArray = this.getUserAddresses();
        var selectedAddressData = userAddressesArray.find(function(addr){
            return addr.ADDRESS_ID == selectedAddrId;
        });  
        
        this.populateForm(selectedAddressData);
        this.showForm();   
}; 

brand.checkout.addressForm.populateForm = function(addressData) {
    if (!this.formContainerNode)  return null; 
    var container = this.formContainerNode; 
    //console.log("brand.checkout.addressForm.populateForm: "+addressData); 
    
    setProp(".input_postal_code","POSTAL_CODE"); 
    setProp(".input_city","CITY");
    setProp(".input_address_1","ADDRESS1");
    setProp(".input_address_2","ADDRESS2");
    setProp(".input_phone_1","PHONE1");
    setProp(".input_phone_2","PHONE2");
    setProp(".input_firstname","FIRST_NAME");
    setProp(".input_lastname","LAST_NAME");
     
    var id = addressData ? addressData.ADDRESS_ID : "";
    this.addressContainerAddressIdNode.value = id;
    this.addressFormAddressIdNode.value = id;
             
    // check Default Shipping Box
    var defaultNode = container.select('.input_default')[0];
    if (defaultNode) {
        defaultNode.checked = addressData ? (addressData.DEFAULT_SHIPPING == 1) : false;
    }  
    
    function setProp(nodeName,propName) { 
    	var node = container.select(nodeName)[0];
    	if (node) node.value = (addressData && addressData[propName]) ? addressData[propName]: ""; 
    }
};
 
brand.checkout.addressForm.updateAddressDisplay = function (addressData) { 
    console.log("brand.checkout.addressForm.updateAddressDisplay");
    
    if (!this.addressContainer) return;
    if (this.addressContainerNoDefaultNode) this.addressContainerNoDefaultNode.addClassName("hidden");
    var container = this.addressContainer;
    
     // combine phone fields & labels
    addressData.PHONE1_TXT = addressData.PHONE2_TXT = "";
    var addressContainer = this.addressContainer;
    var text_labelPhone1 = generic.rbKeys.get('phone') + " ";
    var text_labelPhone2 = generic.rbKeys.get('mobile_phone') + " "; 
    if (addressData.PHONE1) {
        addressData.PHONE1_TXT = text_labelPhone1 + addressData.PHONE1;        
    }
    if (addressData.PHONE2) {
        addressData.PHONE2_TXT = text_labelPhone2 + addressData.PHONE2;        
    } 
    addressData.FULL_NAME = addressData.LAST_NAME + " " + addressData.FIRST_NAME;
   
    var id = addressData ? addressData.ADDRESS_ID : "";
    this.addressContainerAddressIdNode.value = id;
    this.addressFormAddressIdNode.value = id;  
   
    setProp(".address-book-postal-code","POSTAL_CODE"); 
    setProp(".address-book-city","CITY");
    setProp(".address-book-address1","ADDRESS1");
    setProp(".address-book-address2","ADDRESS2");
    setProp(".address-book-phone1","PHONE1_TXT");
    setProp(".address-book-phone2","PHONE2_TXT");
    setProp(".address-book-name","FULL_NAME"); 
    
    function setProp(nodeName,propName) { 
    	var node = container.select(nodeName)[0];
    	if (node) node.innerHTML = (addressData && addressData[propName]) ? addressData[propName]: ""; 
    }
}; 


/** 
  handles the "choose address" select dropdown 
**/
brand.checkout.addressForm.addressMenu = {
        node:null,  
        
        init: function() { 
             if (!this.node) return null; 
             var self = this;
             this.node.observe("change", self.onChange.bind(self)); 
        },
        
        getSelectedAddressId: function() {  
          var n = this.node.options.selectedIndex;
          //console.log("brand.checkout.addressForm.addressMenu.getSelectedAddressId: "+n); 
          
          //default option 
          if (this.node.options[n].value=="") {  
       	  this.node.value = brand.checkout.addressForm.addressContainerAddressIdNode; 
          }  
          
       	return this.node.value; 
        },
        
        onChange: function() { 
            var selectedAddressId = this.node.options[this.node.selectedIndex].value;
            if (selectedAddressId == "") return;
            console.log("brand.checkout.addressForm.addressMenu.onChange " + selectedAddressId);
            
            var userAddressesArray = brand.checkout.addressForm.getUserAddresses();
            var selectedAddressObject = userAddressesArray.find(function(addrObj) {
                return (addrObj.ADDRESS_ID == selectedAddressId);
            });    
            
            if (selectedAddressObject) { 
                // write newly-selected address data to page
                brand.checkout.addressForm.populateForm(selectedAddressObject);
                brand.checkout.addressForm.updateAddressDisplay(selectedAddressObject); 
            } 
        } 
}
  
 