$url2search_no_html = substr($url2search, 0, -5);
         }
         if (strtolower(substr($url2search, -4)) == ".htm") {
             $url2search_no_html = substr($url2search, 0, -4);
         }
         if (!empty($url2search_no_html)) {
             $clean_url_html_sql_lookup = "or (value = '" . $url2search_no_html . "' and attribute_id IN ('" . implode("','", $clean_url_html_attribute_ids) . "'))";
         }
     }
     $data = cw_query_first("SELECT item_id, item_type\n                        FROM {$tables['attributes_values']}\n                        WHERE attribute_id IN ('" . implode("','", $clean_url_attrubute_ids) . "') AND \n                        (value = '" . $url2search . "' {$clean_url_html_sql_lookup}) AND code = '{$lang}'");
     if (empty($data)) {
         array_unshift($clean_url_values, array_pop($clean_url_parts));
     }
 } while (empty($data) && count($clean_url_parts));
 if (cw_clean_url_check_url_is_in_history($clean_url) && empty($data)) {
     $redirect_url = cw_clean_url_get_url_by_history_url($clean_url);
     $clean_urls[$urk_key] = $redirect_url;
     $location = $current_location . '/' . implode('/', $clean_urls);
     $location .= cw_clean_url_get_additional_query($url['query'], $params_query);
     cw_header_location($location, true, false, 301);
 }
 $params = array('P' => array('target' => 'product', 'param' => 'product_id'), 'C' => array('target' => 'index', 'param' => 'cat'), 'M' => array('target' => 'manufacturers', 'param' => 'manufacturer_id'), 'AB' => array('target' => 'pages', 'param' => 'page_id'), 'Q' => array('target' => 'search', 'param' => 'mode'));
 if ($data['item_type'] == 'O') {
     // owner urls
     $static_url = cw_query_first_cell("\n                        SELECT value\n                        FROM {$tables['attributes_values']}\n                        WHERE item_id = '{$data['item_id']}' AND item_type = 'OS' AND value <> ''\n                    ");
     $parsed_static_url = parse_url($static_url);
     if (!empty($parsed_static_url['query'])) {
         parse_str($parsed_static_url['query'], $parsed_arr);
         if (is_array($parsed_arr) && !empty($parsed_arr)) {
             foreach ($parsed_arr as $_key => $_value) {
                 global ${$_key};
/**
 * Translate seo/mixed URL to dynamic
 * 
 * @param string $url - mixed url
 *  http://domain.com/cw/CustomFacetUrl/AttributeA/AttributeB-value?page=2&sort=name
 * 
 * @return string $url - dynamic url 
 * http://domain.com/cw/index.php?target=search&mode=search&att[A][]=AV&att[B][]=value&att[C][]=CV&page=2&sort=name
 */
function cw_clean_url_get_dynamic_url($mixed_url)
{
    global $tables, $app_web_dir;
    cw_load('attributes');
    $clean_urls = $params0 = $paramsC = $paramsF = $paramsS = $params1 = array();
    $url = parse_url($mixed_url);
    parse_str($url['query'], $params0);
    $clean_url = $url['path'];
    if (strlen($app_web_dir) && strpos($url['path'], $app_web_dir) === 0) {
        $clean_url = substr($url['path'], strlen($app_web_dir));
    }
    $clean_url = trim($clean_url, '/');
    if (!empty($clean_url)) {
        $clean_urls = explode('/', $clean_url);
    }
    // Translate history URLs to actual
    if (count($clean_urls)) {
        foreach ($clean_urls as $k => $u) {
            $clean_urls[$k] = cw_clean_url_get_url_by_history_url($u);
        }
    }
    // Translate custom defined urls
    if (count($clean_urls)) {
        $attributeO = cw_call('cw_attributes_filter', array(array('field' => 'clean_url', 'item_type' => 'O'), true));
        //$attributeOS = cw_call('cw_attributes_filter',array(array('field'=>'clean_url','item_type'=>'OS'), true));
        $_clean_urls = array();
        foreach ($clean_urls as $k => $u) {
            $static_url = cw_query_first_cell("\n            SELECT item_id\n            FROM {$tables['attributes_values']}\n            WHERE attribute_id='{$attributeO['attribute_id']}' AND item_type='O' AND\n            value = '" . mysql_real_escape_string($u) . "'\n            ");
            if ($static_url) {
                $dynamic_url = cw_query_first_cell("\n                SELECT value\n                FROM {$tables['attributes_values']}\n                WHERE attribute_id='{$attributeO['attribute_id']}' AND item_type='OS' AND\n                item_id = {$static_url} ");
                $parsed_dynamic_url = parse_url($dynamic_url);
                parse_str($parsed_dynamic_url['query'], $_paramsC);
                $paramsC = array_merge($paramsC, $_paramsC);
                unset($clean_urls[$k]);
                $_clean_urls = array_merge($_clean_urls, explode('/', trim($parsed_dynamic_url['path'], '/')));
            }
        }
        $clean_urls = array_merge($clean_urls, $_clean_urls);
        unset($_clean_urls);
    }
    if (count($clean_urls)) {
        foreach ($clean_urls as $k => $u) {
            if ($u == '' || $u == 'index.php') {
                unset($clean_urls[$k]);
            }
        }
    }
    // Translate clean urls
    if (count($clean_urls)) {
        $item_type_params = array('P' => array('target' => 'product', 'param' => 'product_id'), 'C' => array('target' => 'index', 'param' => 'cat'), 'M' => array('target' => 'manufacturers', 'param' => 'manufacturer_id'), 'AB' => array('target' => 'pages', 'param' => 'page_id'));
        $attributes = cw_call('cw_attributes_filter', array(array('field' => 'clean_url')));
        $att_ids = array_column($attributes, 'attribute_id');
        foreach ($clean_urls as $k => $u) {
            $data = cw_query_first("SELECT item_id, attribute_id, item_type FROM {$tables['attributes_values']}\n            WHERE attribute_id IN (" . join(',', $att_ids) . ") AND\n            value = '" . mysql_real_escape_string($u) . "'");
            $found = true;
            if ($item_type_params[$data['item_type']]) {
                $params1['target'] = $item_type_params[$data['item_type']]['target'];
                $params1[$item_type_params[$data['item_type']]['param']] = $data['item_id'];
            } elseif ($data['item_type'] == 'Q') {
                $params1['target'] = 'search';
                $params1['mode'] = 'search';
            } elseif ($data['item_type'] == 'AV') {
                $params1['att'][$data['attribute_id']][] = $data['item_id'];
            } else {
                $found = false;
            }
            if ($found) {
                unset($clean_urls[$k]);
            }
        }
    }
    // Translate custom facet urls
    if (count($clean_urls)) {
        foreach ($clean_urls as $k => $u) {
            $value_ids = cw_query_first_cell("\n                SELECT GROUP_CONCAT(fuo.attribute_value_ids SEPARATOR ',') as ids\n                FROM {$tables['clean_urls_custom_facet_urls']} fu, {$tables['clean_urls_custom_facet_urls_options']} fuo\n                WHERE fu.custom_facet_url = '{$u}' and fu.url_id=fuo.url_id\n                GROUP BY fu.url_id\n            ");
            if ($value_ids) {
                $att_params = cw_query("SELECT attribute_id, attribute_value_id \n                    FROM {$tables['attributes_default']} WHERE attribute_value_id IN ({$value_ids})");
                foreach ($att_params as $att_param) {
                    $paramsF['att'][$att_param['attribute_id']][] = $att_param['attribute_value_id'];
                }
                unset($clean_urls[$k]);
            }
        }
    }
    // Translate complex URL with attribute and value
    if (count($clean_urls)) {
        $attributePA = cw_call('cw_attributes_filter', array(array('field' => 'clean_url', 'item_type' => 'PA'), true));
        foreach ($clean_urls as $k => $u) {
            // Detect data
            $clean_url_values = array();
            // values for range or select attributes
            $clean_url_parts = explode('-', $u);
            if (count($clean_url_parts) == 1) {
                continue;
            }
            // for substring use special code
            if ($clean_url_parts[0] == 'substring') {
                unset($clean_url_parts[0]);
                $paramsS['att']['substring'] = implode('-', $clean_url_parts);
                unset($clean_urls[$k]);
                continue;
            }
            do {
                $data = cw_query_first("SELECT item_id, item_type\n                    FROM {$tables['attributes_values']}\n                    WHERE attribute_id = {$attributePA['attribute_id']} AND \n                    value = '" . addslashes(implode('-', $clean_url_parts)) . "'");
                if (empty($data)) {
                    array_unshift($clean_url_values, array_pop($clean_url_parts));
                }
            } while (empty($data) && count($clean_url_parts));
            if (empty($data)) {
                continue;
            }
            $attribute = cw_call('cw_attributes_filter', array(array('attribute_id' => $data['item_id']), true));
            if (in_array($attribute['type'], array("decimal", "integer"))) {
                $paramsS['att'][$attribute['attribute_id']]['min'] = $clean_url_values[0];
                $paramsS['att'][$attribute['attribute_id']]['max'] = $clean_url_values[1];
            } elseif ($attribute['type'] == "manufacturer-selector") {
                $attributeM = cw_call('cw_attributes_filter', array(array('field' => 'clean_url', 'item_type' => 'M'), true));
                $manufacturer_item_id = cw_query_first_cell("SELECT av.item_id\n                    FROM {$tables['attributes_values']} av\n                    WHERE av.attribute_id={$attributeM['attribute_id']} \n                        AND av.value = '" . addslashes(implode('-', $clean_url_values)) . "'");
                $paramsS['att'][$attribute['attribute_id']][] = $manufacturer_item_id;
            } else {
                $paramsS['att'][$attribute['attribute_id']][] = implode('-', $clean_url_values);
            }
            unset($clean_urls[$k]);
        }
    }
    $result = array_replace_recursive($paramsC, $paramsF, $params1, $paramsS, $params0);
    //cw_var_dump($result,$paramsC, $paramsF, $params1, $paramsS, $params0);
    $url['query'] = urldecode(http_build_query($result));
    $scheme = isset($url['scheme']) ? $url['scheme'] . '://' : '';
    $host = isset($url['host']) ? $url['host'] : '';
    $path = isset($url['path']) ? (!empty($app_web_dir) && strpos($url['path'], $app_web_dir) === 0 ? $app_web_dir : '') . '/index.php' : '';
    $query = isset($url['query']) ? '?' . $url['query'] : '';
    return $scheme . $host . $path . $query;
}