$Qzones = $OSCOM_PDO->prepare('select zone_name from :table_zones where zone_country_id = :zone_country_id order by zone_name');
            $Qzones->bindInt(':zone_country_id', $_POST['country']);
            $Qzones->execute();
            $zones_array = array();
            while ($Qzones->fetch()) {
                $zones_array[] = array('id' => $Qzones->value('zone_name'), 'text' => $Qzones->value('zone_name'));
            }
            echo HTML::selectMenu('state', $zones_array);
        } else {
            echo HTML::inputField('state');
        }
    } else {
        $zone = null;
        if (isset($osC_oiAddress)) {
            if ($osC_oiAddress->exists('zone_id') && $osC_oiAddress->getInt('zone_id') > 0) {
                $zone = Address::getZoneName($osC_oiAddress->getInt('zone_id'));
            } elseif ($osC_oiAddress->exists('state')) {
                $zone = $osC_oiAddress->get('state');
            }
        }
        echo HTML::inputField('state', $zone);
    }
    ?>

  </li>

<?php 
}
?>

  <li>
 public function setBillingAddress($address)
 {
     $OSCOM_Customer = Registry::get('Customer');
     $OSCOM_PDO = Registry::get('PDO');
     $previous_address = false;
     if (isset($this->_billing_address['id'])) {
         $previous_address = $this->getBillingAddress();
     }
     if ($OSCOM_Customer->isLoggedOn() && is_numeric($address)) {
         $Qaddress = $OSCOM_PDO->prepare('select ab.*, z.zone_code, z.zone_name, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format from :table_address_book ab left join :table_zones z on (ab.entry_zone_id = z.zone_id) left join :table_countries c on (ab.entry_country_id = c.countries_id) where ab.customers_id = :customers_id and ab.address_book_id = :address_book_id');
         $Qaddress->bindInt(':customers_id', $OSCOM_Customer->getID());
         $Qaddress->bindInt(':address_book_id', $address);
         $Qaddress->execute();
         if ($Qaddress->fetch() !== false) {
             $this->_billing_address = array('id' => (int) $address, 'firstname' => $Qaddress->valueProtected('entry_firstname'), 'lastname' => $Qaddress->valueProtected('entry_lastname'), 'gender' => $Qaddress->valueProtected('entry_gender'), 'company' => $Qaddress->valueProtected('entry_company'), 'street_address' => $Qaddress->valueProtected('entry_street_address'), 'suburb' => $Qaddress->valueProtected('entry_suburb'), 'city' => $Qaddress->valueProtected('entry_city'), 'postcode' => $Qaddress->valueProtected('entry_postcode'), 'state' => strlen($Qaddress->valueProtected('entry_state')) > 0 ? $Qaddress->valueProtected('entry_state') : $Qaddress->valueProtected('zone_name'), 'zone_id' => $Qaddress->valueInt('entry_zone_id'), 'zone_code' => $Qaddress->value('zone_code'), 'country_id' => $Qaddress->valueInt('entry_country_id'), 'country_title' => $Qaddress->valueProtected('countries_name'), 'country_iso_code_2' => $Qaddress->valueProtected('countries_iso_code_2'), 'country_iso_code_3' => $Qaddress->valueProtected('countries_iso_code_3'), 'format' => $Qaddress->value('address_format'), 'telephone' => $Qaddress->valueProtected('entry_telephone'), 'fax' => $Qaddress->valueProtected('entry_fax'));
         }
     } else {
         $this->_billing_address = array('id' => 0, 'firstname' => HTML::outputProtected($address['firstname']), 'lastname' => HTML::outputProtected($address['lastname']), 'gender' => HTML::outputProtected($address['gender']), 'company' => HTML::outputProtected($address['company']), 'street_address' => HTML::outputProtected($address['street_address']), 'suburb' => HTML::outputProtected($address['suburb']), 'city' => HTML::outputProtected($address['city']), 'postcode' => HTML::outputProtected($address['postcode']), 'state' => isset($address['state']) && !empty($address['state']) ? HTML::outputProtected($address['state']) : HTML::outputProtected(Address::getZoneName($address['zone_id'])), 'zone_id' => (int) $address['zone_id'], 'zone_code' => HTML::outputProtected(Address::getZoneCode($address['zone_id'])), 'country_id' => HTML::outputProtected($address['country_id']), 'country_title' => HTML::outputProtected(Address::getCountryName($address['country_id'])), 'country_iso_code_2' => HTML::outputProtected(Address::getCountryIsoCode2($address['country_id'])), 'country_iso_code_3' => HTML::outputProtected(Address::getCountryIsoCode3($address['country_id'])), 'format' => Address::getFormat($address['country_id']), 'telephone' => HTML::outputProtected($address['telephone']), 'fax' => HTML::outputProtected($address['fax']));
     }
     if (is_array($previous_address) && ($previous_address['id'] != $this->_billing_address['id'] || $previous_address['country_id'] != $this->_billing_address['country_id'] || $previous_address['zone_id'] != $this->_billing_address['zone_id'] || $previous_address['state'] != $this->_billing_address['state'] || $previous_address['postcode'] != $this->_billing_address['postcode'])) {
         $this->_calculate();
     }
 }