function phpAds_getBannerCache($banner)
{
    global $phpAds_config;
    $buffer = $banner['htmltemplate'];
    // Strip slashes from urls
    $banner['url'] = stripslashes($banner['url']);
    $banner['imageurl'] = stripslashes($banner['imageurl']);
    // The following properties depend on data from the invocation process
    // and can't yet be determined: {zoneid}, {bannerid}
    // These properties will be set during invocation
    // Banner Networks
    if ($banner['storagetype'] == 'network') {
        $buffer = phpAds_parseNetworkInfo($buffer);
    }
    // Auto change HTML banner
    if ($banner['storagetype'] == 'html' || $banner['storagetype'] == 'network') {
        if ($banner['autohtml'] == 't' && $phpAds_config['type_html_auto']) {
            if ($buffer != '') {
                // Automatic remove all target='...'
                $buffer = eregi_replace(" target=['|\"]{0,1}[^'|\"|[:space:]]+['|\"]{0,1}", " ", $buffer);
                // Determine which types are present in the HTML
                $formpresent = eregi('<form', $buffer);
                $linkpresent = eregi('<a', $buffer);
                $areapresent = eregi('<area', $buffer);
                if ($formpresent) {
                    // Add hidden field to forms
                    $buffer = eregi_replace("(<form([^>]*)action=['|\"]{0,1})([^'|\"|[:space:]]+)(['|\"]{0,1}([^>]*)>)", "\\1{url_prefix}/adclick.php\\4" . "<input type='hidden' name='dest' value='\\3'>" . "<input type='hidden' name='bannerid' value='{bannerid}'>" . "<input type='hidden' name='source' value='{source}'>" . "<input type='hidden' name='zoneid' value='{zoneid}'>", $buffer);
                    // Add target to all URLs
                    $buffer = eregi_replace("<form ", "<form target='{target}' ", $buffer);
                }
                // Process link and areas
                if ($linkpresent || $areapresent) {
                    // Replace all links with adclick.php
                    $newbanner = '';
                    $prevhrefpos = '';
                    $lowerbanner = strtolower($buffer);
                    $hrefpos = strpos($lowerbanner, 'href=');
                    while ($hrefpos > 0) {
                        $tagpos = $hrefpos;
                        $taglength = 0;
                        // travel back to first '<' found
                        while (substr($lowerbanner, $tagpos - 1, 1) != '<') {
                            $tagpos--;
                        }
                        // travel up to next space
                        while (substr($lowerbanner, $tagpos + $taglength, 1) != ' ') {
                            $taglength++;
                        }
                        $tag = substr($lowerbanner, $tagpos, $taglength);
                        // Do not convert href's inside of link tags
                        // because if external css files are used an
                        // adclick is logged for every impression.
                        if ($tag != 'link' && $tag != 'base') {
                            $hrefpos = $hrefpos + 5;
                            $doublequotepos = strpos($lowerbanner, '"', $hrefpos);
                            $singlequotepos = strpos($lowerbanner, "'", $hrefpos);
                            if ($doublequotepos > 0 && $singlequotepos > 0) {
                                if ($doublequotepos < $singlequotepos) {
                                    $quotepos = $doublequotepos;
                                    $quotechar = '"';
                                } else {
                                    $quotepos = $singlequotepos;
                                    $quotechar = "'";
                                }
                            } else {
                                if ($doublequotepos > 0) {
                                    $quotepos = $doublequotepos;
                                    $quotechar = '"';
                                } elseif ($singlequotepos > 0) {
                                    $quotepos = $singlequotepos;
                                    $quotechar = "'";
                                } else {
                                    $quotepos = 0;
                                }
                            }
                            if ($quotepos > 0) {
                                $endquotepos = strpos($lowerbanner, $quotechar, $quotepos + 1);
                                if (substr($buffer, $quotepos + 1, 10) != '{targeturl' && strtolower(substr($buffer, $quotepos + 1, 11)) != 'javascript:' && strtolower(substr($buffer, $quotepos + 1, 7)) != 'mailto:') {
                                    $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . $quotechar . '{url_prefix}/adclick.php?bannerid=' . '{bannerid}&amp;zoneid={zoneid}&amp;source={source}&amp;dest=' . urlencode(phpAds_UnHTMLentities(substr($buffer, $quotepos + 1, $endquotepos - $quotepos - 1))) . '&amp;ismap=';
                                } else {
                                    $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . $quotechar . substr($buffer, $quotepos + 1, $endquotepos - $quotepos - 1);
                                }
                                $prevhrefpos = $hrefpos + ($endquotepos - $quotepos);
                            } else {
                                $spacepos = strpos($lowerbanner, ' ', $hrefpos + 1);
                                $endtagpos = strpos($lowerbanner, '>', $hrefpos + 1);
                                if ($spacepos < $endtagpos) {
                                    $endpos = $spacepos;
                                } else {
                                    $endpos = $endtagpos;
                                }
                                if (substr($buffer, $hrefpos, 10) != '{targeturl' && strtolower(substr($buffer, $hrefpos, 11)) != 'javascript:' && strtolower(substr($buffer, $hrefpos, 7)) != 'mailto:') {
                                    $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . '"' . '{url_prefix}/adclick.php?bannerid=' . '{bannerid}&amp;zoneid={zoneid}&amp;source={source}&amp;dest=' . urlencode(phpAds_UnHTMLentities(substr($buffer, $hrefpos, $endpos - $hrefpos))) . '&amp;ismap="';
                                } else {
                                    $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . '"' . substr($buffer, $hrefpos, $endpos - $hrefpos) . '"';
                                }
                                $prevhrefpos = $hrefpos + ($endpos - $hrefpos);
                            }
                        }
                        $hrefpos = strpos($lowerbanner, 'href=', $hrefpos + 1);
                    }
                    $buffer = $newbanner . substr($buffer, $prevhrefpos);
                    // Add target to all URLs
                    $buffer = eregi_replace("<a ", "<a target='{target}' ", $buffer);
                    $buffer = eregi_replace("<area ", "<area target='{target}' ", $buffer);
                }
                if (!$formpresent && !$linkpresent && !$areapresent && $banner['url'] != '') {
                    // No link, area or form
                    // Check if we really want to place the HTML code inside a link...
                    // Do not do this if the HTML code contains an iframe, object or script tag,
                    // Because we can then safely assume the link is handled by the HTML code itself
                    if (!eregi('<script', $buffer) && !eregi('<object', $buffer) && !eregi('<iframe', $buffer)) {
                        $buffer = "<a href='{url_prefix}/adclick.php?bannerid={bannerid}&amp;zoneid={zoneid}&amp;source={source}&amp;ismap=' target='{target}'>" . $buffer . "</a>";
                    }
                }
                // Check for Google AdSense banners
                if (preg_match('/<script.*?src=".*?googlesyndication\\.com/is', $buffer)) {
                    // Add workaround to count clicks
                    $buffer = "<span>" . "<script language='JavaScript' type='text/javascript'><!--\n" . "/* openads={url_prefix} bannerid={bannerid} zoneid={zoneid} source={source} */\n" . "if (typeof phpAds_adg == 'undefined') {\n" . "\tdocument.write('<scr'+'ipt language=\"JavaScript\" type=\"text/javascript\" src=\"{url_prefix}/adg.js\"></scr'+'ipt>');\n" . "}\n" . "//--></script>" . $buffer . "</span>";
                }
            } else {
                if ($banner['url'] != '') {
                    // HTML banner is left empty, but destination url is specified,
                    // build an iframe with the right width and height to show the
                    // destination URL
                    $buffer = "<iframe width='" . $banner['width'] . "' height='" . $banner['height'] . "' framespacing='0' frameborder='no' src='" . $banner['url'] . "'>";
                    $buffer .= "</iframe>";
                }
            }
        }
        if (strpos($buffer, "{targeturl:") > 0) {
            while (eregi("\\{targeturl:([^\\}]*)\\}", $buffer, $regs)) {
                if (strpos($regs[1], '|source:') != false) {
                    list($url, $source) = explode('|source:', $regs[1]);
                    if (substr($source, 0, 1) == '+') {
                        $source = '{source}-' . substr($source, 1, strlen($source) - 1);
                    }
                } else {
                    $source = '{source}';
                    $url = $regs[1];
                }
                $buffer = str_replace($regs[0], '{url_prefix}/adclick.php?bannerid={bannerid}&amp;zoneid={zoneid}&amp;source=' . $source . '&amp;dest=' . urlencode(phpAds_UnHTMLentities($url)) . '&amp;ismap=', $buffer);
            }
        }
        $buffer = str_replace('{targeturl=}', '{url_prefix}/adclick.php?bannerid={bannerid}&amp;zoneid={zoneid}&amp;source={source}&amp;dest=', $buffer);
    }
    // Set known properties
    $buffer = str_replace('{width}', $banner['width'], $buffer);
    $buffer = str_replace('{height}', $banner['height'], $buffer);
    $buffer = str_replace('{alt}', $banner['alt'], $buffer);
    // Set status text
    if (isset($banner['status']) && $banner['status'] != '') {
        // Add HTML entities, leaving single quotes as-is
        $banner['status'] = htmlspecialchars($banner['status']);
        $buffer = str_replace('{status}', $banner['status'], $buffer);
        $buffer = str_replace('[status]', '', $buffer);
        $buffer = str_replace('[/status]', '', $buffer);
    } else {
        $buffer = preg_replace("#\\[status\\](.*)\\[\\/status\\]#iU", '', $buffer);
    }
    // Set bannertext
    if (isset($banner['bannertext']) && $banner['bannertext'] != '') {
        $buffer = str_replace('{bannertext}', stripslashes($banner['bannertext']), $buffer);
    } else {
        $buffer = str_replace('{bannertext}', '', $buffer);
        $buffer = eregi_replace("\\[bannertext\\](.*)\\[\\/bannertext\\]", '', $buffer);
    }
    // Set imageurl
    if ($banner['storagetype'] == 'sql' || $banner['storagetype'] == 'web' || $banner['storagetype'] == 'url') {
        $buffer = str_replace('{imageurl}', $banner['imageurl'], $buffer);
    }
    // Set flash variables
    if ($banner['contenttype'] == 'swf') {
        if ($banner['url'] != '') {
            $buffer = str_replace('{swf_param}', 'clickTAG={url_prefix}/adclick.php%3Fbannerid={bannerid}%26zoneid={zoneid}%26source={source}%26dest=' . urlencode($banner['url']), $buffer);
        } else {
            $buffer = str_replace('{swf_con}{swf_param}', '', $buffer);
            $buffer = str_replace('{swf_param}', '', $buffer);
        }
        if (isset($banner['transparent']) && $banner['transparent'] == 't') {
            $buffer = preg_replace('#\\[/?transparent\\]#', '', $buffer);
        } else {
            $buffer = preg_replace('#\\[transparent\\].*?\\[/transparent\\]#', '', $buffer);
        }
        switch ($banner['storagetype']) {
            case 'sql':
                $buffer = str_replace('{swf_con}', '&amp;', $buffer);
                break;
            case 'web':
                $buffer = str_replace('{swf_con}', '?', $buffer);
                break;
            case 'url':
                $buffer = str_replace('{swf_con}', '?', $buffer);
                break;
        }
        // Replace targeturl:
        while (eregi("\\{targeturl:([^\\}]*)\\}", $buffer, $matches)) {
            if (strpos($matches[1], '|source:') != false) {
                list($url, $source) = explode('|source:', $matches[1]);
                if (substr($source, 0, 1) == '+') {
                    $source = '{source}-' . substr($source, 1, strlen($source) - 1);
                }
            } else {
                $source = '{source}';
                $url = $matches[1];
            }
            $buffer = str_replace($matches[0], '{url_prefix}/adclick.php%3Fbannerid={bannerid}%26zoneid={zoneid}%26source=' . $source . '%26dest=' . urlencode($url), $buffer);
        }
    }
    // Replace targeturl
    if (isset($banner['url']) && $banner['url'] != '') {
        $buffer = str_replace('{targeturl}', '{url_prefix}/adclick.php?bannerid={bannerid}&amp;zoneid={zoneid}&amp;source={source}&amp;dest=' . urlencode($banner['url']), $buffer);
        $buffer = str_replace('[targeturl]', '', $buffer);
        $buffer = str_replace('[/targeturl]', '', $buffer);
        $buffer = preg_replace("#\\[nourl\\](.*)\\[\\/nourl\\]#iU", '', $buffer);
    } else {
        $buffer = str_replace('{targeturl}', '', $buffer);
        $buffer = str_replace('[nourl]', '', $buffer);
        $buffer = str_replace('[/nourl]', '', $buffer);
        $buffer = preg_replace("#\\[targeturl\\](.*)\\[\\/targeturl\\]#iU", '', $buffer);
    }
    // Set Player version
    if (eregi("\\{pluginversion:([^\\}]*)\\}", $buffer, $matches)) {
        // Get default version
        $pluginversion = $matches[1];
        // Flash player 3 or higher
        if ($banner['contenttype'] == 'swf' && $banner['pluginversion'] > 4) {
            $pluginversion = $banner['pluginversion'] . ',0,0,0';
        }
        $buffer = str_replace($matches[0], $pluginversion, $buffer);
    }
    // Append
    if (isset($banner['append']) && $banner['append'] != '') {
        $buffer .= $banner['append'];
    }
    return $buffer;
}
function phpAds_buildBannerName($bannerid, $description = '', $alt = '', $limit = 0, $html = true)
{
    global $strUntitled;
    if (!$limit) {
        $limit = 30;
    }
    $name = '';
    if ($description != "") {
        $name .= $description;
    } elseif ($alt != "") {
        // Un-HTML-entitizize ALT field
        $name .= phpAds_UnHTMLentities($alt);
    } else {
        $name .= $strUntitled;
    }
    if (strlen($name) > $limit) {
        $name = phpAds_breakString($name, $limit);
    }
    if ($html) {
        $name = htmlspecialchars($name);
    }
    if ($bannerid != '') {
        if ($html) {
            $name = "<span dir='" . $GLOBALS['phpAds_TextDirection'] . "'>[id{$bannerid}]</span> " . $name;
        } else {
            $name = "[id{$bannerid}] " . $name;
        }
    }
    return $name;
}