function csscrush_filter(CssCrush_Rule $rule)
{
    if ($rule->propertyCount('-ms-filter') < 1) {
        return;
    }
    $filter_prefix = 'progid:DXImageTransform.Microsoft.';
    $new_set = array();
    foreach ($rule as $declaration) {
        if ($declaration->skip or $declaration->property !== '-ms-filter') {
            $new_set[] = $declaration;
            continue;
        }
        $list = array_map('trim', explode(',', $declaration->value));
        foreach ($list as &$item) {
            if (strpos($item, $filter_prefix) !== 0 and strpos($item, 'alpha') !== 0) {
                $item = $filter_prefix . ucfirst($item);
            }
        }
        $declaration->value = implode(',', $list);
        if (!$rule->propertyCount('zoom')) {
            // Filters need hasLayout
            $new_set[] = $rule->createDeclaration('zoom', 1);
        }
        // Quoted version for -ms-filter IE >= 8
        $new_set[] = $rule->createDeclaration('-ms-filter', "\"{$declaration->value}\"");
        // Star escaped property for IE < 8
        $new_set[] = $rule->createDeclaration('*filter', $declaration->value);
    }
    $rule->declarations = $new_set;
}
function csscrush_opacity(CssCrush_Rule $rule)
{
    if ($rule->propertyCount('opacity') < 1) {
        return;
    }
    $new_set = array();
    foreach ($rule as $declaration) {
        $new_set[] = $declaration;
        if ($declaration->skip or $declaration->property != 'opacity') {
            continue;
        }
        $opacity = (double) $declaration->value;
        $opacity = round($opacity * 100);
        if (!$rule->propertyCount('zoom')) {
            // Filters need hasLayout
            $new_set[] = $rule->createDeclaration('zoom', 1);
        }
        $value = "alpha(opacity={$opacity})";
        $new_set[] = $rule->createDeclaration('-ms-filter', "\"{$value}\"");
        $new_set[] = $rule->createDeclaration('*filter', $value);
    }
    $rule->declarations = $new_set;
}
function csscrush_minheight(CssCrush_Rule $rule)
{
    if ($rule->propertyCount('min-height') < 1) {
        return;
    }
    $new_set = array();
    foreach ($rule as $declaration) {
        $new_set[] = $declaration;
        if ($declaration->skip or $declaration->property !== 'min-height') {
            continue;
        }
        $new_set[] = $rule->createDeclaration('_height', $declaration->value);
    }
    $rule->declarations = $new_set;
}
function csscrush_clip(CssCrush_Rule $rule)
{
    // Assume it's been dealt with if the property occurs more than once
    if ($rule->propertyCount('clip') !== 1) {
        return;
    }
    $new_set = array();
    foreach ($rule as $declaration) {
        $new_set[] = $declaration;
        if ($declaration->skip or $declaration->property !== 'clip') {
            continue;
        }
        $new_set[] = $rule->createDeclaration('*clip', str_replace(',', ' ', $rule->getDeclarationValue($declaration)));
    }
    $rule->declarations = $new_set;
}
function csscrush_display_inlineblock(CssCrush_Rule $rule)
{
    if ($rule->propertyCount('display') < 1) {
        return;
    }
    $new_set = array();
    foreach ($rule as $declaration) {
        $new_set[] = $declaration;
        $is_display = $declaration->property === 'display';
        if ($declaration->skip or !$is_display or $is_display and $declaration->value !== 'inline-block') {
            continue;
        }
        $new_set[] = $rule->createDeclaration('*display', 'inline');
        $new_set[] = $rule->createDeclaration('*zoom', 1);
    }
    $rule->declarations = $new_set;
}