die($res->getMessage());
}
// If nothing is found, send to object not found.
if ($res->numRows() < 1) {
    $t->assign('heading', "Error");
    $t->assign('message', "Did not find the object you were looking for.");
    $t->display('error.tpl');
    die;
}
// Assign vars to resonse
$response = array();
while ($row = $res->fetchRow()) {
    $response['obj_id'] = $row['id'];
    $response['obj_num'] = $row['objnum'];
    $response['objectName'] = convert_smart_quotes($row['name']);
    $response['objectDescription'] = convert_smart_quotes(allEntitiesDecode($row['notes'], ENT_COMPAT, "UTF-8"));
    $response['obj_order'] = $row['order_num'];
    $response['obj_img'] = $row['img_path'];
    // HACK to accommodate the current zoomer tool
    // dirs for filenames have spaces replaced with underscores for ZOOMs
    $lastSlash = strrpos($row['img_path'], "/") + 1;
    if ($lastSlash === false) {
        $path = substr($row['img_path'], 0, -4);
    } else {
        // Use up to slash, plus filename without extension where space converted to _.
        $path = substr($row['img_path'], 0, $lastSlash) . str_replace(" ", "_", substr($row['img_path'], $lastSlash, -4));
    }
    $response['obj_zoomDir'] = $path;
    // trims off .jpg
}
// Free the result
function cleanFormDataAllowHTML($str)
{
    // TODO Tags for which we should remove all content as well as the tags.
    //$dangerousTags = array('script', 'style', 'title', 'xml' );
    // Tags we'll allow.
    $safeFormatTags = array('b', 'i', 'strong', 'em', 'br', 'hr', 'strike');
    // $hyperLinkTag = 'a';
    // $safeHyperLinkProtocols = array('http', 'mailto' );
    // $keys = array_keys($safeFormatTags);
    $str = stripslashes($str);
    // First, close up all space around the angle brackets.
    $str = eregi_replace("<[[:space:]]*([^>]*)[[:space:]]*>", "<\\1>", $str);
    // TODO If we allow hyperlinks, then tighten up the format and constrain args. REVIEW
    //$str = eregi_replace("<a([^>]*)href=\"?([^\"]*)\"?([^>]*)>","<a href=\"\\2\">", $str);
    $tmp = '';
    // Find the first tag in the string
    while (eregi("<([^> ]*)([^>]*)>", $str, $reg)) {
        $i = strpos($str, $reg[0]);
        $l = strlen($reg[0]);
        // Fold tag string for compare
        if ($reg[1][0] == "/") {
            // Close tag?
            $tag = strtolower(substr($reg[1], 1));
            $closetag = true;
        } else {
            $tag = strtolower($reg[1]);
            $closetag = false;
        }
        if (in_array($tag, $safeFormatTags)) {
            if ($closetag) {
                $tag = "</{$tag}>";
            } else {
                $tag = "<{$tag}>";
            }
            // TODO - put in code to catch dangerous tags and remove them and content.
        } elseif ($tag == 'script') {
            $tag = '';
            // elide the tag
            $pos = strpos($str, '</script>');
            if ($pos === false) {
                // No closing tag, so toss the rest of the string
                $l = 0;
                $str = substr($str, 0, $i);
            } else {
                // Strip everything up to the end of the closing tag
                $l = $pos - $i + strlen('</script>');
            }
        } else {
            $tag = '';
        }
        // elide the tag
        // Append the string up to the tag and the filtered tag string
        // Need to ensure we safely store entities in the DB.
        // But html_entity_decode misses some important ones, including
        //  mdash, ndash.
        $tmp .= htmlentities(allEntitiesDecode(substr($str, 0, $i), ENT_QUOTES, ""), ENT_QUOTES, "UTF-8") . $tag;
        // Reset the string
        $str = substr($str, $i + $l);
    }
    // Append the end of the string
    $str = $tmp . htmlentities(allEntitiesDecode($str, ENT_QUOTES, ""), ENT_QUOTES, "UTF-8");
    // Squash PHP tags unconditionally
    $str = ereg_replace("<\\?", "", $str);
    // Squash comment tags unconditionally
    $str = ereg_replace("<!--", "", $str);
    return $str;
}