# File lib/amazon/search/marketplace.rb, line 64
        def keyword_search(keyword, heavy=HEAVY, keyword_search=nil,
                           browse_id=nil, zipcode=nil, area_id=nil,
                           geo=nil, sort=nil, index=nil)
          
          url = "/onca/xml3?t=%s&MarketplaceSearch=keyword&f=xml&type=%s" +
                "&dev-t=%s&keyword=%s"

          type = heavy ? 'heavy' : 'lite'
          keyword = url_encode(keyword)

          unless keyword_search.nil?
            if Marketplace.keyword_searches.include? keyword_search
              url += "&keyword-search=%s" % keyword_search
            else
              raise KeywordSearchError,
                "'keyword_search' must be one of %s" %
                  keyword_searches.join(', ')
            end
          end

          unless browse_id.nil?
            url += "&browse-id=%s" % browse_id
          end

          unless zipcode.nil?
            if zipcode !~ /^\d{5}$/
              raise ZipcodeError, "'zipcode' must be 5 digits"
            end
            url += "&zipcode=%s" % zipcode
          end

          unless area_id.nil? && geo.nil?
            if geo.nil?
              raise GeoError,
                "'geo' must be specified in combination with 'area_id'"
            elsif area_id.nil?
              raise AreaIdError,
                "'area_id' must be specified in combination with 'geo'"
            elsif area_id !~ /^4000\d\d\d$/
              raise AreaIdError, "area code not well formed"
            elsif ! Marketplace.geos.include? geo
              raise GeoError, "'geo' must be one of %s" % geos.join(', ')
            end

            url += "&area-id=%s&geo=%s" % [area_id, geo]
          end

          unless sort.nil?
            if Marketplace.sorts.include? sort
              url += "&sort=%s" % sort
            else
              raise SortError,
                "'sort' must be one of %s" % sorts.join(', ')
            end
          end

          unless index.nil?
            if Marketplace.indices.include? index
              url += "&index=%s" % index
            else
              raise IndexError,
                "'index' must be one of %s" % indices.join(', ')
            end
          end

          search(url % [@id, type, @token, keyword])
        end