function build_xref(&$final_array_node, &$product)
{
    global $map_array, $config_cat_ids, $config_ids, $swatches;
    static $tmp = array();
    $product_config_cats = (array) $product->product_config_cats_in_seq;
    if (isset($product_config_cats["product_config_cat"][count((array) $tmp)])) {
        $rtmp =& $product_config_cats["product_config_cat"][count((array) $tmp)];
        $cat_id = (int) $rtmp["id"];
        if (!in_array($cat_id, @(array) $config_cat_ids[(int) $product["product_id"]])) {
            $config_cat_ids[(int) $product["product_id"]][] = $cat_id;
        }
        foreach ($rtmp->product_configs->product_config as $product_config) {
            $config_id = (int) $product_config["id"];
            if (!in_array($config_id, @(array) $config_ids[(int) $product["product_id"]][$cat_id])) {
                $config_ids[(int) $product["product_id"]][$cat_id][] = $config_id;
            }
            $swatch_array = array();
            if (strlen((string) $product_config->swatch)) {
                $swatch_array["image"] = (string) $product_config->swatch;
                $swatch_array["caption"] = (string) $product_config->swatch_label;
            }
            if (count($swatch_array)) {
                $swatches[(int) $product["product_id"]][$cat_id][$config_id] = $swatch_array;
            }
            $tmp[$cat_id] = $config_id;
            build_xref($final_array_node[$config_id], $product);
            array_pop($tmp);
        }
        return;
    }
    $tmp2 = $tmp;
    ksort($tmp2, SORT_NUMERIC);
    if (isset($map_array[serialize($tmp2)])) {
        $final_array_node = $map_array[serialize($tmp2)];
    }
}
        /*
               print_r($config_cat_ids);
               print_r($config_ids);
               print_r($map_array);
               print_r($config_array);
               exit;
        */
        //build ensemble product map_array
        foreach ($cross_sell_products->cross_sell_products_group as $cross_sell_products_group) {
            foreach ($cross_sell_products_group->products->product as $cross_sell_product) {
                $map_array = array();
                foreach ($cross_sell_product->exact_products->exact_product as $cross_sell_exact_product) {
                    map_array_build($map_array, (int) $cross_sell_product["product_id"], $cross_sell_exact_product, $cross_sell_exact_product->product_config);
                }
                $final_array = array();
                build_xref($final_array, $cross_sell_product);
                $max_orderable_qty[(int) $cross_sell_product["product_id"]] = (int) $cross_sell_product->max_orderable_qty;
                $min_product_price[(int) $cross_sell_product["product_id"]] = (string) $cross_sell_product->discounted_retail_min_price;
                $swatch_array = array();
                if (strlen((string) $cross_sell_product->thumbnail_image->url)) {
                    $swatch_array["image"] = (string) $cross_sell_product->thumbnail_image->url;
                    $swatch_array["caption"] = (string) (strlen((string) $cross_sell_product->thumbnail_image->caption) ? $cross_sell_product->thumbnail_image->caption : $cross_sell_product->name);
                }
                $swatches[(int) $cross_sell_product["product_id"]][0] = $swatch_array;
                $config_array[(int) $cross_sell_product["product_id"]] = $final_array;
            }
        }
    }
}
//print "--retailers: ".(int)$has_retailers;
?>