/**
  * This method send create domain request.
  * In order to pending domain creation, response must have status REGISTRY_RESPONSE_STATUS::PENDING
  *	 
  * @param Domain $domain
  * @param int $period Domain registration period
  * @param array $extra Extra data
  * @return CreateDomainResponse
  */
 public function CreateDomain(Domain $domain, $period, $extra = array())
 {
     $DomainInfoResp = $this->GetDomainInfo($domain);
     if ($DomainInfoResp->Data['DOMAIN STATUS'] != 'FIXED') {
         return new CreateDomainResponse(REGISTRY_RESPONSE_STATUS::FAILED, 'Domain is not available for registration');
     }
     $params = array('DOMAIN' => $domain->Name, 'TLD' => $this->Extension, 'TERM YEARS' => $period, 'PRICE' => $DomainInfoResp->Data['PRICE']);
     // Nameservers
     $nslist = $domain->GetNameserverList();
     foreach ($nslist as $i => $ns) {
         $params['DNS SERVER NAME ' . ($i + 1)] = $ns->HostName;
     }
     // Contacts
     $contacttype_srs_map = $this->ContacttypeSRSMap;
     foreach ($domain->GetContactList() as $contacttype => $contact) {
         $params[$contacttype_srs_map[$contacttype]] = $contact->CLID;
     }
     if ($extra && $this->Manifest->GetDomainConfig()->registration->extra_fields->field) {
         $additional_data = array();
         foreach ($extra as $k => $v) {
             $additional_data[] = sprintf('%s:%s', $k, $v);
         }
         $params['ADDITIONAL DATA'] = join(' ', $additional_data);
     }
     $Resp = $this->Request('REGISTER DOMAIN', $params);
     $status = $Resp->Succeed && $Resp->Data['REQUESTID'] ? REGISTRY_RESPONSE_STATUS::SUCCESS : REGISTRY_RESPONSE_STATUS::FAILED;
     $Ret = new CreateDomainResponse($status, $Resp->ErrMsg);
     if ($Ret->Succeed()) {
         $Ret->CreateDate = time();
         $Ret->ExpireDate = (int) $Resp->Data['EXPIRATION DATE'];
         $Ret->AuthCode = '';
         $Ret->Protocol = $Resp->Data['REQUESTID'];
     }
     return $Ret;
 }