CheckoutAddressForm= {
    sType: 'billing',
    inited: false,
    current: {},
    global_init: function() {
        if(CheckoutAddressForm.inited)
            return;
        $('opc-billing').select('div.head')[0].observe('click', function(){
           CheckoutAddressForm.sType='billing';
           CheckoutAddressForm.update(false,$(CheckoutAddressForm.id('%type%-address-select')));
        });
        $('opc-shipping').select('div.head')[0].observe('click', function(){
           CheckoutAddressForm.sType='shipping';
           CheckoutAddressForm.update(false,$(CheckoutAddressForm.id('%type%-address-select')));
    
        });
        CheckoutAddressForm.inited=true;
    },
    setType: function (sType) {
        this.sType=sType;
        this.init();
    },
    setSelectedOption: function(oSelect,sValue) {
       if(!oSelect)
           return;
       var aOption=Element.select(oSelect,'option');
       for(var i=0,j=aOption.length;i<j;i++) {
           if(aOption[i].value==sValue) {
                aOption[i].selected="selected";
                break;
           }
       }
       
    },
    getFieldName: function(oRef,sType) {
        if(!sType)
            sType=CheckoutAddressForm.sType;
        re=new RegExp(sType+"\\[([a-zA-Z0-9_]+?)\\](.+)?");
      //  var sName=re.exec(oRef.name);
      var sName=re.exec(oRef.name);
      if(!sName)
          sName=oRef.name;
      else
          sName=sName[1];
      return sName;
    },
    save: function () {
      var aAddress={};
      var aFields=$(CheckoutAddressForm.id('%type%-new-address-form')).select('input,select');
      for(var i=0,j=aFields.length;i<j;i++) {
          var sField=CheckoutAddressForm.getFieldName(aFields[i]);
          if((aFields[i].type!='radio'||(aFields[i].type=="radio"&&aFields[i].checked))&&(aFields[i].type!='checkbox'||(aFields[i].type=="checkbox"&&aFields[i].checked)))
            aAddress[sField]=aFields[i].value;
      }
      CheckoutAddressForm.current[CheckoutAddressForm.sType]=aAddress;
    },
    load: function(oAddressData) {
        if(!oAddressData)
            return;
        var aFields=$(CheckoutAddressForm.id('%type%-new-address-form')).select('input');
        var i;
        var j;
        for(i=0,j=aFields.length;i<j;i++) {
            var sName=CheckoutAddressForm.getFieldName(aFields[i]);
            if(oAddressData[sName]){
                if(aFields[i].type=='radio'||aFields[i].type=='checkbox') {
                    if(aFields[i].value==oAddressData[sName])
                        aFields[i].checked="checked";
                    else
                        aFields[i].removeAttribute('checked');
                }
                else {
                    aFields[i].value=oAddressData[sName];
                }
            }
            else {
                if(aFields[i].type=='radio'||aFields[i].type=="checkbox") {
                    aFields[i].removeAttribute('checked');
                }
                else {
                    if(aFields[i].type!='hidden')
                        aFields[i].value='';
                }
            }
        }
        var aSelects=$(CheckoutAddressForm.id('%type%-new-address-form')).select('select');
        for(i=0,j=aSelects.length;i<j;i++) {
            var sName=CheckoutAddressForm.getFieldName(aSelects[i]);
            if(oAddressData[sName])
                CheckoutAddressForm.setSelectedOption(aSelects[i], oAddressData[sName]);
        }
        $(CheckoutAddressForm.id('%type%-new-address-form')).show();
    },
    sameAsBilling:function (set) {
        if(set) {
            CheckoutAddressForm.load(CheckoutAddressForm.current['billing']);
        }
        else {
        /*    var oContainer=$(CheckoutAddressForm.id('%type%-new-address-form')).select('div.col-2')[0];
            var aInputs=oContainer.select('input');
            for(oInput in aInputs) {
                if(oInput.type=='radio')
                    oInput.removeAttribute('checked');
                else
                    oInput.value='';
            }*/
     //       var aSelects=oContainer.select('select');
       //     for(oSelect in aSelects) {
         //       CheckoutAddressForm.setSelectedOption(oSelect, '');
           // }
        }
        $(CheckoutAddressForm.id('%type%-new-address-form')).show();
    },
    partialReset: function (oParent) {
        
        if(!oParent)
            return;
        var aInputs=oParent.select('input');
        for(var i=0,j=aInputs.length;i<j;i++) {
            if(aInputs[i].type=='radio')
                aInputs[i].removeAttribute('checked');
            else
                if(aInputs[i].type!='checkbox'||aInputs[i].type!='hidden')
                    aInputs[i].value='';
        }
        var aSelects=oParent.select('select');
        for(var i=0,j=aSelects.length;i<j;i++) {
            CheckoutAddressForm.setSelectedOption(aSelects[i], '');
        }
    },
    nextStep: function () {
        var validator = new Validation($(CheckoutAddressForm.id('co-%type%-form')));
        var sC=CheckoutAddressForm.sType;
        if(validator.validate()) {
            CheckoutAddressForm.save();
            if(CheckoutAddressForm.sType=='billing') {
                CheckoutAddressForm.setType('shipping');
                $('shipping:same_as_billing').checked=$('billing:use_for_shipping_yes').checked;
            }
        }
        if(CheckoutAddressForm.sType=='shipping'&&$('shipping:same_as_billing').checked) {
            CheckoutAddressForm.load(CheckoutAddressForm.current['billing']);
            CheckoutAddressForm.save();
        }
        else
            if(CheckoutAddressForm.sType=='shipping'&&sC=='billing')
                 CheckoutAddressForm.partialReset($('shipping-new-address-form').select('div.col-2')[0]);
        $(CheckoutAddressForm.id('co-%type%-form')).show();
    },
    init: function () {
        CheckoutAddressForm.global_init();
        // Removing "new address from form"
        oSelect=$(CheckoutAddressForm.id('%type%-address-select'));
        if(oSelect) {
        var options=oSelect.select('option');
        for(var i=0,j=options.length;i<j;i++) {
            if(options[i].value=='')
                 options[i].remove();
        }
        
        // make observers
        oSelect.observe('change',function(){
            CheckoutAddressForm.update(this);
            $(CheckoutAddressForm.id('%type%:address_id')).value=this.value;
        });
        }

        var oForm=$(CheckoutAddressForm.id('co-%type%-form'));
        if(oForm&&oForm.select('a')[0])
            oNewAddressLink=oForm.select('a')[0];
        else
           oNewAddressLink=false;
        if(oNewAddressLink) {
        oNewAddressLink.observe('click',function(){
            CheckoutAddressForm.reset();
            var aOptions=$(CheckoutAddressForm.id("%type%-address-select")).select('option');
            for(var i=0,j=aOptions.length;i<j;i++) {
                if(aOptions[i].value=='')
                    return;
            }
            $(CheckoutAddressForm.id("%type%-address-select")).insert('<option value="">New address</option>');
        });
        }
        if(oSelect) {
        CheckoutAddressForm.update($(CheckoutAddressForm.id("%type%-address-select")));
        $(CheckoutAddressForm.id('%type%:address_id')).value=oSelect.value;
        }
        //
        

    },
    update: function (oRef,oFallback) {
        if(oRef===false) {
            if(CheckoutAddressForm.current[CheckoutAddressForm.sType]) {
                CheckoutAddressForm.load(CheckoutAddressForm.current[CheckoutAddressForm.sType]);
                return;
            }
            else
                if(oFallback) {
                    CheckoutAddressForm.update(oFallback);
                }
        }
        if(oCustomerAddresses&&oCustomerAddresses[oRef.value]) {
            CheckoutAddressForm.load(oCustomerAddresses[oRef.value]);
        }
        else
            CheckoutAddressForm.reset();
        var aAdvices=$(CheckoutAddressForm.id('%type%-new-address-form')).select('div.validation-advice');
        for(var i=0,j=aAdvices.length;i<j;i++) {
            aAdvices[i].remove();
        }
    },
    id: function (sSchema) {
        return sSchema.replace('%type%', CheckoutAddressForm.sType);
    },
    reset: function() {
            var aInputs=$(CheckoutAddressForm.id('co-%type%-form')).select('input[type=text],select');
            for(var i=0,j=aInputs.length;i<j;i++) {
                aInputs[i].value='';
            }
            $(CheckoutAddressForm.id('co-%type%-form')).select('input[type=hidden]')[0].value='';
    },
    setDefault: function() {
        if(oCustomerAddresses['default_billing'])
            CheckoutAddressForm.load(oCustomerAddresses['default_billing']);
    }
}
