<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=VbzCart%2Farchive%2Fcode%2Fpages</id>
	<title>VbzCart/archive/code/pages - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://htyp.org/mw/index.php?action=history&amp;feed=atom&amp;title=VbzCart%2Farchive%2Fcode%2Fpages"/>
	<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/pages&amp;action=history"/>
	<updated>2026-06-28T05:09:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/archive/code/pages&amp;diff=20427&amp;oldid=prev</id>
		<title>Woozle: Woozle moved page VbzCart/code/pages to VbzCart/archive/code/pages</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/pages&amp;diff=20427&amp;oldid=prev"/>
		<updated>2014-12-19T02:16:19Z</updated>

		<summary type="html">&lt;p&gt;Woozle moved page &lt;a href=&quot;/VbzCart/code/pages&quot; class=&quot;mw-redirect&quot; title=&quot;VbzCart/code/pages&quot;&gt;VbzCart/code/pages&lt;/a&gt; to &lt;a href=&quot;/VbzCart/archive/code/pages&quot; title=&quot;VbzCart/archive/code/pages&quot;&gt;VbzCart/archive/code/pages&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:16, 19 December 2014&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
	<entry>
		<id>https://htyp.org/mw/index.php?title=VbzCart/archive/code/pages&amp;diff=17885&amp;oldid=prev</id>
		<title>Woozle: saving before gutting</title>
		<link rel="alternate" type="text/html" href="https://htyp.org/mw/index.php?title=VbzCart/archive/code/pages&amp;diff=17885&amp;oldid=prev"/>
		<updated>2012-05-13T13:09:02Z</updated>

		<summary type="html">&lt;p&gt;saving before gutting&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Code==&lt;br /&gt;
&amp;lt;php&amp;gt;&amp;lt;?php&lt;br /&gt;
/*&lt;br /&gt;
  FILE: store.php&lt;br /&gt;
  PURPOSE: VbzCart page-rendering classes&lt;br /&gt;
  HISTORY:&lt;br /&gt;
    2012-05-08 split off from store.php&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
if (!defined(&amp;#039;LIBMGR&amp;#039;)) {&lt;br /&gt;
    require(KFP_LIB.&amp;#039;/libmgr.php&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
clsLibMgr::Add(&amp;#039;vbz.db&amp;#039;,	KFP_LIB_VBZ.&amp;#039;/store.php&amp;#039;,__FILE__,__LINE__);&lt;br /&gt;
  clsLibMgr::AddClass(&amp;#039;clsVbzTable&amp;#039;,&amp;#039;vbz.db&amp;#039;);&lt;br /&gt;
clsLibMgr::Add(&amp;#039;rtext.html&amp;#039;,	KFP_LIB.&amp;#039;/rtext-html.php&amp;#039;,__FILE__,__LINE__);&lt;br /&gt;
  clsLibMgr::AddClass(&amp;#039;clsRTDoc_HTML&amp;#039;,&amp;#039;rtext.html&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
/*====&lt;br /&gt;
  NOTES:&lt;br /&gt;
    2011-02-02 This could use some rewriting. A lot of it is kind of pointless,&lt;br /&gt;
      and other parts duplicate RichText objects.&lt;br /&gt;
*/&lt;br /&gt;
class clsPageOutput_WHO_USES_THIS {&lt;br /&gt;
    public $out;&lt;br /&gt;
    private $isOdd;&lt;br /&gt;
    public $inTbl;&lt;br /&gt;
    private $fpTools;&lt;br /&gt;
    private $fsLogo;&lt;br /&gt;
&lt;br /&gt;
    static public function SectionHeader($iTitle) {&lt;br /&gt;
	return &amp;#039;&amp;lt;p class=&amp;quot;hdr-sub&amp;quot;&amp;gt;&amp;#039;.$iTitle.&amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function __construct($ifpTools,$iLogoRel) {&lt;br /&gt;
	$this-&amp;gt;out = &amp;#039;&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;isOdd = false;&lt;br /&gt;
	$this-&amp;gt;inTbl = 0;&lt;br /&gt;
	$this-&amp;gt;fpTools = $ifpTools;&lt;br /&gt;
	$this-&amp;gt;fsLogo = $this-&amp;gt;ImageSpec($iLogoRel);&lt;br /&gt;
    }&lt;br /&gt;
/*&lt;br /&gt;
    function Clear() {&lt;br /&gt;
      $this-&amp;gt;out = &amp;#039;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
*/&lt;br /&gt;
    function AddText($iText) {&lt;br /&gt;
      $this-&amp;gt;out .= $iText;&lt;br /&gt;
    }&lt;br /&gt;
    function SectionHdr($iTitle) {	// this is specifically duplicated (where?)&lt;br /&gt;
      $this-&amp;gt;out .= &amp;#039;&amp;lt;p class=&amp;quot;hdr-sub&amp;quot;&amp;gt;&amp;#039;.$iTitle.&amp;#039;&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
      return $this-&amp;gt;out;&lt;br /&gt;
    }&lt;br /&gt;
    // eventually there needs to be a non-MediaWiki clsRichText, and these can go there&lt;br /&gt;
/*&lt;br /&gt;
    public function TableOpen($iAttr=NULL) {&lt;br /&gt;
    }&lt;br /&gt;
    public function TableShut() {&lt;br /&gt;
    }&lt;br /&gt;
    public function TblRowOpen($iAttr=NULL,$iHdr=FALSE) {&lt;br /&gt;
    }&lt;br /&gt;
    public function TblRowShut() {&lt;br /&gt;
    }&lt;br /&gt;
    public function TblCell($iText,$iAttr=NULL) {&lt;br /&gt;
    }&lt;br /&gt;
*/&lt;br /&gt;
/* this duplicates RichText&lt;br /&gt;
  function StartTable($iTitle) {&lt;br /&gt;
    if ($iTitle) {&lt;br /&gt;
      $this-&amp;gt;SectionHdr($iTitle);&lt;br /&gt;
      $this-&amp;gt;out .= &amp;#039;&amp;lt;table class=content&amp;gt;&amp;#039;;&lt;br /&gt;
      $this-&amp;gt;inTbl++;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  function RowStart($iClass=&amp;#039;&amp;#039;) {&lt;br /&gt;
    if ($iClass) {&lt;br /&gt;
      $this-&amp;gt;out .= &amp;#039;&amp;lt;tr class=&amp;quot;&amp;#039;.$iClass.&amp;#039;&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      $this-&amp;gt;out .= &amp;#039;&amp;lt;tr&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  function RowStop() {&lt;br /&gt;
    $this-&amp;gt;out .= &amp;#039;&amp;lt;/tr&amp;gt;&amp;#039;;&lt;br /&gt;
    $this-&amp;gt;isOdd = !$this-&amp;gt;isOdd;&lt;br /&gt;
  }&lt;br /&gt;
  function ColAdd($iText) {&lt;br /&gt;
    if ($this-&amp;gt;isOdd) {&lt;br /&gt;
      $cellOpen = &amp;#039;&amp;lt;td class=catalog-stripe valign=top&amp;gt;&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      $cellOpen = &amp;#039;&amp;lt;td class=catalog valign=top&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    $this-&amp;gt;out .= $cellOpen.$iText.&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
  }&lt;br /&gt;
  function EndTable() {&lt;br /&gt;
    if ($this-&amp;gt;inTbl) {&lt;br /&gt;
      $this-&amp;gt;out .= &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;;&lt;br /&gt;
      $this-&amp;gt;inTbl--;&lt;br /&gt;
    }&lt;br /&gt;
    return $this-&amp;gt;out;&lt;br /&gt;
  }&lt;br /&gt;
*/&lt;br /&gt;
  function ShowImgUnavail() {&lt;br /&gt;
    $this-&amp;gt;out .= &amp;#039;&amp;lt;table class=border cellpadding=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;table class=&amp;quot;hdr&amp;quot; cellpadding=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;page-title&amp;quot;&amp;gt;No Images&amp;lt;br&amp;gt;Available&amp;lt;br&amp;gt;&amp;lt;/span&amp;gt;for this item&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;:-(&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;;&lt;br /&gt;
    return $this-&amp;gt;out;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/* ===================&lt;br /&gt;
  CLASS: clsVbzSkin&lt;br /&gt;
  PURPOSE: Abstract skin class&lt;br /&gt;
    Specifies all the bits that we&amp;#039;ll want to have, but doesn&amp;#039;t define them&lt;br /&gt;
    Provides some basic support services, but no actual content (text or formatting)&lt;br /&gt;
*/&lt;br /&gt;
abstract class clsVbzSkin {&lt;br /&gt;
    protected $objDoc;&lt;br /&gt;
    public function __construct() {&lt;br /&gt;
	$this-&amp;gt;objDoc = new clsRTDoc_HTML();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public function Doc() {&lt;br /&gt;
	return $this-&amp;gt;objDoc;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /*-----&lt;br /&gt;
      USAGE: Normal main entry point -- should be called from index.php&lt;br /&gt;
    */&lt;br /&gt;
    public function DoPage() {&lt;br /&gt;
	try {&lt;br /&gt;
	    $this-&amp;gt;DoPreContent();&lt;br /&gt;
	    $this-&amp;gt;DoContent();&lt;br /&gt;
	    $this-&amp;gt;DoPostContent();&lt;br /&gt;
	} catch(exception $e) {&lt;br /&gt;
	    $this-&amp;gt;DoEmailException($e);&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    /*----&lt;br /&gt;
      HISTORY:&lt;br /&gt;
	2011-03-31 added Page and Cookie to list of reported variables&lt;br /&gt;
    */&lt;br /&gt;
    protected function DoEmailException(exception $e) {&lt;br /&gt;
	$msg = $e-&amp;gt;getMessage();&lt;br /&gt;
&lt;br /&gt;
	$arErr = array(&lt;br /&gt;
	  &amp;#039;descr&amp;#039;	=&amp;gt; $e-&amp;gt;getMessage(),&lt;br /&gt;
	  &amp;#039;stack&amp;#039;	=&amp;gt; $e-&amp;gt;getTraceAsString(),&lt;br /&gt;
	  &amp;#039;guest.addr&amp;#039;	=&amp;gt; $_SERVER[&amp;#039;REMOTE_ADDR&amp;#039;],&lt;br /&gt;
	  &amp;#039;guest.agent&amp;#039;	=&amp;gt; $_SERVER[&amp;#039;HTTP_USER_AGENT&amp;#039;],&lt;br /&gt;
	  &amp;#039;guest.ref&amp;#039;	=&amp;gt; NzArray($_SERVER,&amp;#039;HTTP_REFERER&amp;#039;),&lt;br /&gt;
	  &amp;#039;guest.page&amp;#039;	=&amp;gt; $_SERVER[&amp;#039;REQUEST_URI&amp;#039;],&lt;br /&gt;
	  &amp;#039;guest.ckie&amp;#039;	=&amp;gt; NzArray($_SERVER,&amp;#039;HTTP_COOKIE&amp;#039;),&lt;br /&gt;
	  );&lt;br /&gt;
&lt;br /&gt;
	$out = $this-&amp;gt;Message_toEmail_forException($arErr);	// generate the message to email&lt;br /&gt;
	$subj = $this-&amp;gt;Subject_toEmail_forException($arErr);&lt;br /&gt;
	$ok = mail(KS_TEXT_EMAIL_ADDR_ERROR,$subj,$out);	// email the message&lt;br /&gt;
&lt;br /&gt;
	echo $this-&amp;gt;Message_toShow_forException($msg);		// display something for the guest&lt;br /&gt;
&lt;br /&gt;
	throw $e;&lt;br /&gt;
&lt;br /&gt;
	// FUTURE: log the error and whether the email was successful&lt;br /&gt;
    }&lt;br /&gt;
    abstract protected function Message_toEmail_forException(array $arErr);&lt;br /&gt;
    abstract protected function Subject_toEmail_forException(array $arErr);&lt;br /&gt;
    abstract protected function Message_toShow_forException($iMsg);&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Displays everything *before* the main page contents&lt;br /&gt;
    */&lt;br /&gt;
    protected function DoPreContent() {&lt;br /&gt;
	$this-&amp;gt;ParseInput();&lt;br /&gt;
	$this-&amp;gt;HandleInput();&lt;br /&gt;
	$this-&amp;gt;RenderHdrBlocks();&lt;br /&gt;
    }&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Displays everything *after* the main page contents&lt;br /&gt;
    */&lt;br /&gt;
    protected function DoPostContent() {&lt;br /&gt;
	$this-&amp;gt;RenderFtrBlocks();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// ABSTRACT section //&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Displays the main page contents&lt;br /&gt;
    */&lt;br /&gt;
    protected abstract function DoContent();&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Grab any expected input and interpret it&lt;br /&gt;
    */&lt;br /&gt;
    protected abstract function ParseInput();&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Take the parsed input and do any needed processing (e.g. looking up data)&lt;br /&gt;
    */&lt;br /&gt;
    protected abstract function HandleInput();&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Render any output that appears *before* the main content&lt;br /&gt;
    */&lt;br /&gt;
    protected abstract function RenderHdrBlocks();&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Render any output that appears *after* the main content&lt;br /&gt;
    */&lt;br /&gt;
    protected abstract function RenderFtrBlocks();&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Start a new section&lt;br /&gt;
    */&lt;br /&gt;
    public abstract function NewSection($iName);&lt;br /&gt;
    /*-----&lt;br /&gt;
      ACTION: Open a table, with appropriate CSS class etc.&lt;br /&gt;
    */&lt;br /&gt;
    public abstract function NewTable($iClass=&amp;#039;content&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
/* ===================&lt;br /&gt;
  CLASS: clsVbzSkin_Standard&lt;br /&gt;
  PURPOSE: Standard skin class&lt;br /&gt;
    Will later be replaceable with other skins&lt;br /&gt;
*/&lt;br /&gt;
abstract class clsVbzSkin_Standard extends clsVbzSkin {&lt;br /&gt;
    private $objApp;&lt;br /&gt;
    private $fpTools;&lt;br /&gt;
    private $fsLogo;&lt;br /&gt;
&lt;br /&gt;
    public function __construct() {&lt;br /&gt;
	parent::__construct();&lt;br /&gt;
	$this-&amp;gt;fpTools = KWP_TOOLS;&lt;br /&gt;
	$this-&amp;gt;fsLogo = KWP_LOGO_HEADER;&lt;br /&gt;
    }&lt;br /&gt;
    public function App(clsVbzApp $iApp=NULL) {&lt;br /&gt;
	if (!is_null($iApp)) {&lt;br /&gt;
	    $this-&amp;gt;objApp = $iApp;&lt;br /&gt;
	}&lt;br /&gt;
	return $this-&amp;gt;objApp;&lt;br /&gt;
    }&lt;br /&gt;
    protected function Data() {&lt;br /&gt;
	return $this-&amp;gt;App()-&amp;gt;Data();&lt;br /&gt;
    }&lt;br /&gt;
    public function NewSection($iTitle) {&lt;br /&gt;
	$obj = $this-&amp;gt;Doc()-&amp;gt;NewSection($iTitle,&amp;#039;hdr-sub&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
    public function NewTable($iClass=&amp;#039;content&amp;#039;) {&lt;br /&gt;
	$objDoc = $this-&amp;gt;Doc();&lt;br /&gt;
	$obj = $objDoc-&amp;gt;NewTable();&lt;br /&gt;
	$obj-&amp;gt;ClassName($iClass);&lt;br /&gt;
	return $obj;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    protected function Message_toEmail_forException(array $arErr) {&lt;br /&gt;
	$guest_ip = $arErr[&amp;#039;guest.addr&amp;#039;];&lt;br /&gt;
	$guest_br = $arErr[&amp;#039;guest.agent&amp;#039;];&lt;br /&gt;
	$guest_pg = $arErr[&amp;#039;guest.page&amp;#039;];&lt;br /&gt;
	$guest_rf = $arErr[&amp;#039;guest.ref&amp;#039;];&lt;br /&gt;
	$guest_ck = $arErr[&amp;#039;guest.ckie&amp;#039;];&lt;br /&gt;
	&lt;br /&gt;
	$out = &amp;#039;Description: &amp;#039;.$arErr[&amp;#039;descr&amp;#039;];&lt;br /&gt;
	$out .= &amp;quot;\nStack trace:\n&amp;quot;.$arErr[&amp;#039;stack&amp;#039;];&lt;br /&gt;
	$out .= &amp;lt;&amp;lt;&amp;lt;__END__&lt;br /&gt;
&lt;br /&gt;
Client information:&lt;br /&gt;
 - IP Addr : $guest_ip&lt;br /&gt;
 - Browser : $guest_br&lt;br /&gt;
 - Cur Page: $guest_pg&lt;br /&gt;
 - Prv Page: $guest_rf&lt;br /&gt;
 - Cookie  : $guest_ck&lt;br /&gt;
__END__;&lt;br /&gt;
&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    protected function Subject_toEmail_forException(array $arErr) {&lt;br /&gt;
	return &amp;#039;error in VBZ from IP &amp;#039;.$arErr[&amp;#039;guest.addr&amp;#039;];&lt;br /&gt;
    }&lt;br /&gt;
    protected function Message_toShow_forException($iMsg) {&lt;br /&gt;
	$msg = $iMsg;&lt;br /&gt;
	$out = &amp;lt;&amp;lt;&amp;lt;__END__&lt;br /&gt;
&amp;lt;b&amp;gt;Ack!&amp;lt;/b&amp;gt; We seem to have a small problem here. (If it was a large problem, you wouldn&amp;#039;t be seeing this message.)&lt;br /&gt;
The webmaster is being alerted about this.&lt;br /&gt;
&amp;lt;br&amp;gt;Meanwhile, you might try reloading the page -- a lot of errors are transient,&lt;br /&gt;
which makes them hard to fix, which is why there are more of them than the other kind.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
We apologize for the nuisance.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Error Message&amp;lt;/b&amp;gt;: $msg&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
__END__;&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    protected function RenderHdrBlocks() {&lt;br /&gt;
	$this-&amp;gt;RenderHtmlStart();&lt;br /&gt;
	$this-&amp;gt;RenderContentHdr();&lt;br /&gt;
	$this-&amp;gt;DoSidebar();&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderFtrBlocks() {&lt;br /&gt;
	$this-&amp;gt;RenderContentFtr();&lt;br /&gt;
	$this-&amp;gt;RenderHtmlStop();&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderContentFtr() {&lt;br /&gt;
	global $didPage,$fltStart;&lt;br /&gt;
&lt;br /&gt;
	echo &amp;#039;&amp;lt;div style=&amp;quot;clear: both;&amp;quot; align=right&amp;gt;&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;DoSepBar();&lt;br /&gt;
	echo &amp;#039;&amp;lt;table width=100%&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td align=right&amp;gt;&amp;lt;small&amp;gt;&amp;lt;i&amp;gt;&amp;#039;;&lt;br /&gt;
	$fltExecTime = microtime(true)-$fltStart;&lt;br /&gt;
	$dat = getrusage();&lt;br /&gt;
	$fltUserTime = $dat[&amp;quot;ru_utime.tv_usec&amp;quot;]/1000000;&lt;br /&gt;
	$strServer = $_SERVER[&amp;#039;SERVER_SOFTWARE&amp;#039;];&lt;br /&gt;
	echo $strServer.&amp;#039; .. &amp;#039;;&lt;br /&gt;
	echo &amp;#039;PHP &amp;#039;.phpversion().&amp;#039; .. Generated in &amp;lt;b&amp;gt;&amp;#039;.$fltUserTime.&amp;#039;&amp;lt;/b&amp;gt; seconds (script execution &amp;#039;.$fltExecTime.&amp;#039; sec.) .. &amp;#039;;&lt;br /&gt;
	$strWikiPg = $this-&amp;gt;strWikiPg;&lt;br /&gt;
	if ($strWikiPg) {&lt;br /&gt;
	    echo &amp;#039;wiki: &amp;lt;a href=&amp;quot;&amp;#039;.KWP_WIKI.kEmbeddedPagePrefix.$this-&amp;gt;strWikiPg.&amp;#039;&amp;quot;&amp;gt;&amp;#039;.$strWikiPg.&amp;#039;&amp;lt;/a&amp;gt; .. &amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	echo date(&amp;#039;Y-m-d H:i:s&amp;#039;);&lt;br /&gt;
	echo &amp;#039;&amp;lt;/i&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
	$didPage = true;&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderHtmlStop() {&lt;br /&gt;
	echo &amp;quot;\n&amp;lt;/body&amp;gt;\n&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// NEW METHODS for this class //&lt;br /&gt;
    protected function DoSidebar() {&lt;br /&gt;
//	$objCache = $this-&amp;gt;CacheMgr();&lt;br /&gt;
// TO DO: these should be pulled from the [stats] table&lt;br /&gt;
/*&lt;br /&gt;
if ($objCache-&amp;gt;dtNewest) {&lt;br /&gt;
    $timeSidebarBuild=$objCache-&amp;gt;dtNewest;&lt;br /&gt;
} else {&lt;br /&gt;
    $timeSidebarBuild = NULL;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
    $timeSidebarBuild = NULL;&lt;br /&gt;
$statsQtyTitlesAvail = 2245;&lt;br /&gt;
$statsQtyStockPieces = 1395;&lt;br /&gt;
$statsQtyStockItems = 753;&lt;br /&gt;
$statsQtyArtists = 136;&lt;br /&gt;
$statsQtyTopics = 1048;&lt;br /&gt;
//---------&lt;br /&gt;
&lt;br /&gt;
	echo &amp;#039;&amp;lt;table class=border align=left cellpadding=3 bgcolor=&amp;quot;#000000&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;table class=sidebar bgcolor=&amp;quot;#ffffff&amp;quot; cellpadding=5&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;table border=0 class=menu-title width=&amp;quot;100%&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td class=menu-title&amp;gt;&amp;lt;a href=&amp;quot;/&amp;quot;&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;span class=menu-text&amp;gt;&amp;lt;dl&amp;gt;&amp;#039;;&lt;br /&gt;
/*&lt;br /&gt;
&amp;lt;span class=menu-text&amp;gt;&amp;lt;p style=&amp;quot;background: #eeeeee;&amp;quot;&amp;gt;&amp;lt;dl&amp;gt;&lt;br /&gt;
*/&lt;br /&gt;
	echo $this-&amp;gt;lstTop-&amp;gt;Output(&amp;#039;&amp;lt;dt&amp;gt;&amp;lt;b&amp;gt;&amp;#039;,&amp;#039;&amp;lt;/b&amp;gt;: &amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
//  echo &amp;#039;&amp;lt;/p&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/dl&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;/dl&amp;gt;&amp;#039;;&lt;br /&gt;
	if ($this-&amp;gt;strSideXtra) {&lt;br /&gt;
	    echo &amp;#039;&amp;lt;dl style=&amp;quot;background: #eeeeee;&amp;quot;&amp;gt;&amp;#039;.$this-&amp;gt;strSideXtra.&amp;#039;&amp;lt;/dl&amp;gt;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;#039;&amp;lt;form action=&amp;quot;/search/&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;Search &amp;#039;.$statsQtyTitlesAvail.&amp;#039; items:&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;input size=10 name=search&amp;gt;&amp;lt;input type=submit value=&amp;quot;Go&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;a href=&amp;quot;/search/&amp;quot;&amp;gt;advanced&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Indexes&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	echo &amp;#039;&amp;lt;br&amp;gt; ...&amp;lt;a href=&amp;quot;&amp;#039;.KWP_SHOP_SUPP.&amp;#039;&amp;quot; title=&amp;quot;list of suppliers and what we carry from each one&amp;quot;&amp;gt;&amp;lt;b&amp;gt;S&amp;lt;/b&amp;gt;uppliers&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
/*&lt;br /&gt;
	echo &amp;#039;&amp;lt;br&amp;gt; ...&amp;lt;a href=&amp;quot;/stock/&amp;quot; title=&amp;quot;&amp;#039;&lt;br /&gt;
	  .$statsQtyStockPieces.&amp;#039; pieces, &amp;#039;&lt;br /&gt;
	  .$statsQtyStockItems.&amp;#039;. items&amp;quot;&amp;gt;&amp;lt;b&amp;gt;S&amp;lt;/b&amp;gt;tock&amp;lt;/a&amp;gt; (&amp;#039;.$statsQtyStockPieces.&amp;#039;)&amp;#039;;&lt;br /&gt;
*/&lt;br /&gt;
	echo &amp;#039;&amp;lt;br&amp;gt; ...&amp;lt;a href=&amp;quot;&amp;#039;.KWP_SHOP_STOCK.&amp;#039;&amp;quot; title=&amp;quot;what\&amp;#039;s currently in stock&amp;quot;&amp;gt;&amp;lt;b&amp;gt;S&amp;lt;/b&amp;gt;tock&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;br&amp;gt; ...&amp;lt;a href=&amp;quot;&amp;#039;.KWP_SHOP_TOPICS.&amp;#039;&amp;quot; title=&amp;quot;topic master index (topics are like category tags)&amp;quot;&amp;gt;&amp;lt;b&amp;gt;T&amp;lt;/b&amp;gt;opics&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
//	echo &amp;#039;&amp;lt;br&amp;gt; ...&amp;lt;a href=&amp;quot;/artists/&amp;quot; title=&amp;quot;&amp;#039;.$statsQtyArtists.&amp;#039;.artists&amp;quot;&amp;gt;&amp;lt;b&amp;gt;A&amp;lt;/b&amp;gt;rtists&amp;lt;/a&amp;gt; (&amp;#039;.$statsQtyArtists.&amp;#039;)&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;p&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;[[ &amp;lt;a href=&amp;quot;&amp;#039;.KWP_WIKI.&amp;#039;&amp;quot; title=&amp;quot;vbz wiki homepage&amp;quot;&amp;gt;&amp;lt;b&amp;gt;wiki&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt; ]]&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;-- [[ &amp;lt;a href=&amp;quot;&amp;#039;.KWP_HELP_HOME.&amp;#039;&amp;quot; title=&amp;quot;help main index&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Help&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt; ]]&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;-- [[ &amp;lt;a href=&amp;quot;&amp;#039;.KWP_HELP_ABOUT.&amp;#039;&amp;quot; title=&amp;quot;about vbz.net (probably more than you want to know)&amp;quot;&amp;gt;&amp;lt;b&amp;gt;About&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt; ]]&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;-- [[ &amp;lt;a href=&amp;quot;&amp;#039;.KWP_HELP_CONTACT.&amp;#039;&amp;quot; title=&amp;quot;contact vbz.net (several different methods)&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Contact&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt; ]]&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;-- [[ &amp;lt;a href=&amp;quot;&amp;#039;.KWP_WIKI.&amp;#039;VBZwiki_talk:Community_portal&amp;quot; title=&amp;quot;leave your comments and suggestions&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Comments&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt; ]]&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;p&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;a href=&amp;quot;/email/&amp;quot; title=&amp;quot;web form for sending us email&amp;quot;&amp;gt;email form&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;a href=&amp;quot;/cart/&amp;quot; title=&amp;quot;your shopping cart&amp;quot;&amp;gt;shopping cart&amp;lt;/a&amp;gt;&amp;lt;p&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    protected function DoSepBar() {&lt;br /&gt;
      echo $this-&amp;gt;Render_HLine();&lt;br /&gt;
    }&lt;br /&gt;
    protected function ImageSpec($iFileName) {&lt;br /&gt;
	return $this-&amp;gt;fpTools.&amp;#039;/img&amp;#039;.$iFileName;&lt;br /&gt;
    }&lt;br /&gt;
    public function Render_HLine($iHeight=NULL) {&lt;br /&gt;
      $htHt = is_null($iHeight)?&amp;#039;&amp;#039;:(&amp;#039;height=&amp;#039;.$iHeight);&lt;br /&gt;
      return &amp;#039;&amp;lt;img src=&amp;quot;&amp;#039;.$this-&amp;gt;ImageSpec(&amp;#039;/bg/hlines/&amp;#039;).&amp;#039;&amp;quot;&amp;#039;.$htHt.&amp;#039; alt=&amp;quot;-----&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    private function ToolbarItem($iURL,$iIcon,$iTitle,$iAlt) {&lt;br /&gt;
	return &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.$iURL.&amp;#039;&amp;quot;&amp;gt;&amp;lt;img border=0 src=&amp;quot;&amp;#039;.$this-&amp;gt;ImageSpec(&amp;#039;/icons/&amp;#039;.$iIcon.&amp;#039;.050pxh.png&amp;#039;).&amp;#039;&amp;quot; title=&amp;quot;&amp;#039;.$iTitle.&amp;#039;&amp;quot; alt=&amp;quot;&amp;#039;.$iAlt.&amp;#039;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
    protected function DoToolbar() {&lt;br /&gt;
	global $fpPages,$fwpCart;&lt;br /&gt;
&lt;br /&gt;
	echo $this-&amp;gt;ToolbarItem($fpPages.&amp;#039;/&amp;#039;,&amp;#039;home&amp;#039;,KS_STORE_NAME.&amp;#039; home page&amp;#039;,&amp;#039;home page&amp;#039;);&lt;br /&gt;
	echo $this-&amp;gt;ToolbarItem($fpPages.&amp;#039;/search/&amp;#039;,&amp;#039;search&amp;#039;,&amp;#039;search page&amp;#039;,&amp;#039;search page&amp;#039;);&lt;br /&gt;
	echo $this-&amp;gt;ToolbarItem($fwpCart,&amp;#039;cart&amp;#039;,&amp;#039;shopping cart&amp;#039;,&amp;#039;shopping cart&amp;#039;);&lt;br /&gt;
	echo $this-&amp;gt;ToolbarItem(KWP_HELP_HOME,&amp;#039;help&amp;#039;,&amp;#039;help!&amp;#039;,&amp;#039;help&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// NEW METHODS for this class //&lt;br /&gt;
    /*----&lt;br /&gt;
      PURPOSE: Renders HTML inside &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt; section&lt;br /&gt;
      HISTORY:&lt;br /&gt;
	2011-01-11 Created&lt;br /&gt;
    */&lt;br /&gt;
    protected function RenderHtmlHeaderSection() {&lt;br /&gt;
	$strTitle = KS_STORE_NAME.&amp;#039; - &amp;#039;.$this-&amp;gt;strName;&lt;br /&gt;
	$out = &amp;quot;\n&amp;lt;title&amp;gt;$strTitle&amp;lt;/title&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	$arVars = array(&amp;#039;sheet&amp;#039; =&amp;gt; $this-&amp;gt;strSheet);&lt;br /&gt;
	$objStrTplt = new clsStringTemplate_array(NULL,NULL,$arVars);&lt;br /&gt;
	$objStrTplt-&amp;gt;MarkedValue(KHT_PAGE_STYLE);&lt;br /&gt;
	$out .= $objStrTplt-&amp;gt;Replace();&lt;br /&gt;
	//$out .= KHT_PAGE_STYLE;&lt;br /&gt;
	if (!empty($this-&amp;gt;strName)) {&lt;br /&gt;
	    $ftName = &amp;#039;: &amp;#039;.htmlspecialchars($this-&amp;gt;strName);&lt;br /&gt;
	} else {&lt;br /&gt;
	    $ftName = &amp;#039;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	$strContent = KS_STORE_NAME_META.$ftName;&lt;br /&gt;
	$out .= &amp;quot;\n&amp;lt;meta name=description content=\&amp;quot;$strContent\&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
	return $out;&lt;br /&gt;
    }&lt;br /&gt;
    /*----&lt;br /&gt;
      PURPOSE: Renders HTML up to beginning of BODY.&lt;br /&gt;
      HISTORY:&lt;br /&gt;
	2011-01-11 Extracted everything between &amp;lt;head&amp;gt; and &amp;lt;/head&amp;gt; into RenderHtmlHeaderSection()&lt;br /&gt;
    */&lt;br /&gt;
    protected function RenderHtmlStart() {&lt;br /&gt;
	//$this-&amp;gt;strCalcTitle = KS_STORE_NAME.&amp;#039; - &amp;#039;.$this-&amp;gt;strName;&lt;br /&gt;
	$out = KHT_PAGE_DOCTYPE;&lt;br /&gt;
	$out .= &amp;quot;\n&amp;lt;html&amp;gt;\n&amp;lt;head&amp;gt;&amp;quot;;&lt;br /&gt;
	$out .= $this-&amp;gt;RenderHtmlHeaderSection();&lt;br /&gt;
	$out .= &amp;quot;\n&amp;lt;/head&amp;gt;&amp;quot;;&lt;br /&gt;
	$out .= KHT_PAGE_BODY_TAG;&lt;br /&gt;
	echo $out;&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderContentHdr() {&lt;br /&gt;
	//$strWikiPg = $this-&amp;gt;strWikiPg;&lt;br /&gt;
&lt;br /&gt;
      // begin content header&lt;br /&gt;
	echo &amp;#039;&amp;lt;table width=&amp;quot;100%&amp;quot; class=border cellpadding=5&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;table width=&amp;quot;100%&amp;quot; class=hdr cellpadding=2&amp;gt;&amp;lt;tr&amp;gt;&amp;#039;;&lt;br /&gt;
      // === LEFT HEADER: Title ===&lt;br /&gt;
	echo &amp;#039;&amp;lt;td&amp;gt;&amp;#039;;&lt;br /&gt;
	echo &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.KWP_HOME_ABS.&amp;#039;&amp;quot;&amp;gt;&amp;lt;img align=left border=0 src=&amp;quot;&amp;#039;.$this-&amp;gt;fsLogo.&amp;#039;&amp;quot; title=&amp;quot;&amp;#039;.KS_STORE_NAME.&amp;#039; home&amp;quot; alt=&amp;quot;&amp;#039;.KS_SMALL_LOGO_ALT.&amp;#039;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
	if ($this-&amp;gt;strTitleContext) {&lt;br /&gt;
	  echo &amp;#039;&amp;lt;span class=pretitle&amp;gt;&amp;lt;b&amp;gt;&amp;lt;a href=&amp;quot;/&amp;quot;&amp;gt;&amp;#039;.KS_STORE_NAME.&amp;#039;&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;: &amp;#039;.$this-&amp;gt;strTitleContext.&amp;#039;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;#039;&amp;lt;span class=page-title&amp;gt;&amp;#039;.$this-&amp;gt;strTitle.&amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
      // === END LEFT HEADER ===&lt;br /&gt;
&lt;br /&gt;
      // === RIGHT HEADER: nav icons ===&lt;br /&gt;
	echo &amp;#039;&amp;lt;td align=right&amp;gt;&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;DoToolbar();&lt;br /&gt;
	echo &amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
      // === END RIGHT HEADER ===&lt;br /&gt;
	echo &amp;quot;\n&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;\n&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;!-- end html header --&amp;gt;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*%%%%&lt;br /&gt;
  CLASS: clsVbzApp&lt;br /&gt;
  PURPOSE: container for the chosen skin and database&lt;br /&gt;
*/&lt;br /&gt;
class clsVbzApp {&lt;br /&gt;
    private $objSkin;&lt;br /&gt;
    private $objData;&lt;br /&gt;
&lt;br /&gt;
    public function __constructor(clsVbzSkin $iSkin, clsVbzData $iData) {&lt;br /&gt;
	$this-&amp;gt;objSkin = $iSkin;&lt;br /&gt;
	$this-&amp;gt;objData = $iData;&lt;br /&gt;
    }&lt;br /&gt;
    public function Skin() {&lt;br /&gt;
	return $this-&amp;gt;objSkin;&lt;br /&gt;
    }&lt;br /&gt;
    public function Data() {&lt;br /&gt;
	return $this-&amp;gt;objData;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===================&lt;br /&gt;
  CLASS: clsVbzPage_Cat&lt;br /&gt;
  PURPOSE: Handles display of catalog page types&lt;br /&gt;
  TO DO: These classes still need more tidying -- see clsPageCat --&lt;br /&gt;
    and still need a bit of work to allow user-choosable skins.&lt;br /&gt;
*/&lt;br /&gt;
abstract class clsVbzPage_Cat extends clsVbzSkin_Standard {&lt;br /&gt;
// helper objects&lt;br /&gt;
    protected $db;	// database - CHANGE TO PRIVATE&lt;br /&gt;
// query&lt;br /&gt;
    protected $strReq;	// requested page&lt;br /&gt;
// page definition&lt;br /&gt;
    protected $strName;	// short title: {item name} (goes into html title, prefixed with store name)&lt;br /&gt;
    protected $strTitle;	// longer, descriptive title: {&amp;quot;item name&amp;quot; by Supplier} (goes at top of page)&lt;br /&gt;
    protected $strSheet;	// name of style sheet to use (without the .css)&lt;br /&gt;
    protected $strWikiPg;	// name of wiki page to embed, if any (blank = suppress embedding)&lt;br /&gt;
    protected $strTitleContext;	// context of short title, in HTML: {Supplier: Department:} (goes above title, in small print)&lt;br /&gt;
    protected $strHdrXtra;	// any extra stuff (HTML) for the header&lt;br /&gt;
    protected $strSideXtra;	// any extra stuff for the sidebar&lt;br /&gt;
    protected $lstTop;	// stuff listed at the top of the sidebar&lt;br /&gt;
// calculated fields&lt;br /&gt;
//    protected $strCalcTitle;&lt;br /&gt;
    protected $strContText;&lt;br /&gt;
// flags set by wiki contents&lt;br /&gt;
    protected $hideImgs;&lt;br /&gt;
&lt;br /&gt;
    public function __construct() {&lt;br /&gt;
	parent::__construct();&lt;br /&gt;
	$this-&amp;gt;lstTop = new clsNavList();&lt;br /&gt;
    }&lt;br /&gt;
    protected function HandleInput() {&lt;br /&gt;
	$this-&amp;gt;strSheet	= &amp;#039;browse&amp;#039;;	// default&lt;br /&gt;
    }&lt;br /&gt;
    /*-----&lt;br /&gt;
      IMPLEMENTATION: Retrieves request from URL and parses it&lt;br /&gt;
	URL data identifies page, keyed to cat_pages data&lt;br /&gt;
    */&lt;br /&gt;
    protected function ParseInput() {&lt;br /&gt;
	if (isset($_SERVER[&amp;#039;PATH_INFO&amp;#039;])) {&lt;br /&gt;
	    $strReq = $_SERVER[&amp;#039;PATH_INFO&amp;#039;];&lt;br /&gt;
	} else {&lt;br /&gt;
	    $strReq = &amp;#039;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	$this-&amp;gt;strReq = $strReq;&lt;br /&gt;
	if (strrpos($strReq,&amp;#039;/&amp;#039;)+1 &amp;lt; strlen($strReq)) {&lt;br /&gt;
	    $strRedir = KWP_CAT_REL.substr($strReq,1).&amp;#039;/&amp;#039;;&lt;br /&gt;
	    header(&amp;#039;Location: &amp;#039;.$strRedir);&lt;br /&gt;
	    exit;	// retry with new URL&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
// DIFFERENT TYPES OF PAGES&lt;br /&gt;
    protected function DoNotFound() {&lt;br /&gt;
	$this-&amp;gt;strWikiPg	= &amp;#039;&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strTitle	= &amp;#039;Unknown Page&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strName	= &amp;#039;unknown title in catalog&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strTitleContext	= &amp;#039;Tomb of the...&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strHdrXtra	= &amp;#039;&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strSideXtra	= &amp;#039;&amp;lt;dt&amp;gt;&amp;lt;b&amp;gt;Cat #&amp;lt;/b&amp;gt;: &amp;#039;.$this-&amp;gt;strReq;&lt;br /&gt;
    }&lt;br /&gt;
// UTILITY&lt;br /&gt;
    protected function AddText($iText) {&lt;br /&gt;
	$this-&amp;gt;strContText .= $iText;&lt;br /&gt;
    }&lt;br /&gt;
    private function DoWikiContent() {&lt;br /&gt;
# WIKI CONTENTS&lt;br /&gt;
#	$txtPage = GetEmbedPage(&amp;#039;cat&amp;#039;);&lt;br /&gt;
	if (KF_USE_WIKI) {&lt;br /&gt;
	    $txtWiki = GetWikiPage($this-&amp;gt;strWikiPg);&lt;br /&gt;
	    if ($txtWiki) {&lt;br /&gt;
		if (strpos($txtWiki,&amp;#039;__NOIMG__&amp;#039;) != -1) {&lt;br /&gt;
		    $txtWiki = str_replace(&amp;#039;__NOIMG__&amp;#039;,&amp;#039;&amp;#039;,$txtWiki);&lt;br /&gt;
		    $this-&amp;gt;hideImgs = true;&lt;br /&gt;
		}&lt;br /&gt;
	    }&lt;br /&gt;
	    if ($txtWiki) {&lt;br /&gt;
		echo &amp;#039;&amp;lt;table class=main&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;#039;.$txtWiki.&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*%%%%&lt;br /&gt;
  TODO:&lt;br /&gt;
    * figure out why we need to have this as a separate class from clsVbzPage_Cat&lt;br /&gt;
    * give it a better name&lt;br /&gt;
*/&lt;br /&gt;
class clsPageCat extends clsVbzPage_Cat {&lt;br /&gt;
    private $objCatPage;	// object for identifying page to display&lt;br /&gt;
&lt;br /&gt;
    private function Suppliers($id=NULL) {&lt;br /&gt;
	$tbl = $this-&amp;gt;Data()-&amp;gt;Suppliers();&lt;br /&gt;
	$tbl-&amp;gt;Page($this);&lt;br /&gt;
	if (is_null($id)) {&lt;br /&gt;
	    return $tbl;&lt;br /&gt;
	} else {&lt;br /&gt;
	    $rc = $tbl-&amp;gt;GetItem($id);&lt;br /&gt;
	    return $rc;&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    protected function RenderHdrBlocks() {&lt;br /&gt;
	if ($this-&amp;gt;useSkin) {&lt;br /&gt;
	    parent::RenderHdrBlocks();&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    protected function RenderFtrBlocks() {&lt;br /&gt;
	if ($this-&amp;gt;useSkin) {&lt;br /&gt;
	    parent::RenderFtrBlocks();&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    protected function HandleInput() {&lt;br /&gt;
	parent::HandleInput();&lt;br /&gt;
	$strReq = $this-&amp;gt;strReq;&lt;br /&gt;
	$this-&amp;gt;objCatPage = $this-&amp;gt;Data()-&amp;gt;Pages()-&amp;gt;GetItem_byKey($strReq);&lt;br /&gt;
	$objPage = $this-&amp;gt;objCatPage;&lt;br /&gt;
	$this-&amp;gt;useSkin = TRUE;&lt;br /&gt;
&lt;br /&gt;
	if ($this-&amp;gt;strReq) {&lt;br /&gt;
	    if (is_object($objPage)) {&lt;br /&gt;
		switch ($objPage-&amp;gt;Type) {&lt;br /&gt;
		case &amp;#039;S&amp;#039;:&lt;br /&gt;
		  $this-&amp;gt;DoCatSupp();&lt;br /&gt;
		  break;&lt;br /&gt;
		case &amp;#039;D&amp;#039;:&lt;br /&gt;
		  $this-&amp;gt;DoCatDept();&lt;br /&gt;
		  break;&lt;br /&gt;
		case &amp;#039;T&amp;#039;:&lt;br /&gt;
		  $this-&amp;gt;DoCatTitle();&lt;br /&gt;
		  break;&lt;br /&gt;
		case &amp;#039;I&amp;#039;:&lt;br /&gt;
		  $this-&amp;gt;useSkin = FALSE;&lt;br /&gt;
		  $this-&amp;gt;DoCatImage();&lt;br /&gt;
		  break;&lt;br /&gt;
		}&lt;br /&gt;
	    } else {&lt;br /&gt;
		$this-&amp;gt;DoNotFound();&lt;br /&gt;
	    }&lt;br /&gt;
	} else {&lt;br /&gt;
	    $this-&amp;gt;DoCatHome();&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    public function DoContent() {&lt;br /&gt;
	echo $this-&amp;gt;Doc()-&amp;gt;Render();&lt;br /&gt;
    }&lt;br /&gt;
// SIDEBAR INFO for different types of pages&lt;br /&gt;
  private function DoCatIndicia() {&lt;br /&gt;
    $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;Section&amp;#039;,&amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.KWP_CAT_REL.&amp;#039;&amp;quot;&amp;gt;by supplier&amp;lt;/a&amp;gt;&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
  private function DoSuppIndicia($iSupp,$isFinal=true) {&lt;br /&gt;
    $this-&amp;gt;DoCatIndicia();&lt;br /&gt;
    if ($isFinal) {&lt;br /&gt;
      $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;Supplier&amp;#039;,$iSupp-&amp;gt;Name);&lt;br /&gt;
      $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.KWP_WIKI.$iSupp-&amp;gt;Name.&amp;#039;&amp;quot;&amp;gt;more info&amp;lt;/a&amp;gt;&amp;#039;);&lt;br /&gt;
    } else {&lt;br /&gt;
      $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;Supplier&amp;#039;,$iSupp-&amp;gt;Link());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private function DoDeptIndicia($iDept,$isFinal=true) {&lt;br /&gt;
    $this-&amp;gt;DoSuppIndicia($iDept-&amp;gt;Supplier(),false);&lt;br /&gt;
    if ($isFinal) {&lt;br /&gt;
      $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;Dept.&amp;#039;,$iDept-&amp;gt;Name);&lt;br /&gt;
    } else {&lt;br /&gt;
      $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;Dept.&amp;#039;,$iDept-&amp;gt;LinkName());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private function DoTitleIndicia($iTitle) {&lt;br /&gt;
    $this-&amp;gt;DoDeptIndicia($iTitle-&amp;gt;Dept(),false);&lt;br /&gt;
    $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039;Title&amp;#039;,$iTitle-&amp;gt;Name);&lt;br /&gt;
    $this-&amp;gt;lstTop-&amp;gt;Add(&amp;#039; - catalog #&amp;#039;,$iTitle-&amp;gt;CatNum());&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    private function DoCatHome() {&lt;br /&gt;
	$this-&amp;gt;DoCatIndicia();&lt;br /&gt;
	$this-&amp;gt;strWikiPg	= &amp;#039;cat&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strTitle	= &amp;#039;Catalog Home&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strName	= &amp;#039;Catalog main page&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;strTitleContext	= &amp;#039;hello and welcome to the...&amp;#039;;&lt;br /&gt;
	$this-&amp;gt;Suppliers()-&amp;gt;DoHomePage();&lt;br /&gt;
	$this-&amp;gt;AddText($this-&amp;gt;Doc()-&amp;gt;Render());&lt;br /&gt;
    }&lt;br /&gt;
    private function DoCatSupp() {&lt;br /&gt;
	$idRow = $this-&amp;gt;objCatPage-&amp;gt;Value(&amp;#039;ID_Row&amp;#039;);&lt;br /&gt;
	$rcSupp = $this-&amp;gt;Suppliers($idRow);&lt;br /&gt;
	assert(&amp;#039;is_object($rcSupp)&amp;#039;);&lt;br /&gt;
	$strSuppName = $rcSupp-&amp;gt;Value(&amp;#039;Name&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;DoSuppIndicia($rcSupp);&lt;br /&gt;
	$this-&amp;gt;strWikiPg	= &amp;#039;supp:&amp;#039;.strtoupper($rcSupp-&amp;gt;Value(&amp;#039;CatKey&amp;#039;));&lt;br /&gt;
	$this-&amp;gt;strTitle	= $strSuppName;&lt;br /&gt;
	$this-&amp;gt;strName	= &amp;#039;listing for &amp;#039;.$strSuppName;&lt;br /&gt;
	$this-&amp;gt;strTitleContext	= &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039;.KWP_CAT_REL.&amp;#039;&amp;quot;&amp;gt;Suppliers&amp;lt;/a&amp;gt;: &amp;lt;b&amp;gt;&amp;#039;.$strSuppName.&amp;#039;&amp;lt;/b&amp;gt;:&amp;#039;;&lt;br /&gt;
	$rcSupp-&amp;gt;DoDeptsPage();&lt;br /&gt;
	$this-&amp;gt;AddText($this-&amp;gt;Doc()-&amp;gt;Render());&lt;br /&gt;
    }&lt;br /&gt;
  private function DoCatDept() {&lt;br /&gt;
    CallEnter($this,__LINE__,&amp;#039;clsPage.DoCatDept()&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
//    $objDeptTbl = VbzClasses::Depts();&lt;br /&gt;
    $objDeptTbl = $this-&amp;gt;Depts();&lt;br /&gt;
    $objDept = $objDeptTbl-&amp;gt;GetItem($this-&amp;gt;objCatPage-&amp;gt;ID_Row);&lt;br /&gt;
    assert(&amp;#039;is_object($objDept)&amp;#039;);&lt;br /&gt;
    $objSupp = $objDept-&amp;gt;Supplier();&lt;br /&gt;
    assert(&amp;#039;is_object($objSupp)&amp;#039;);&lt;br /&gt;
    $strDeptName = $objDept-&amp;gt;Name;&lt;br /&gt;
    $strSuppName = $objSupp-&amp;gt;Name;&lt;br /&gt;
    $strDeptLink = $objDept-&amp;gt;LinkName();&lt;br /&gt;
    $strSuppLink = $objSupp-&amp;gt;Link();&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;DoDeptIndicia($objDept);&lt;br /&gt;
    $this-&amp;gt;strWikiPg	= &amp;#039;dept:&amp;#039;.strtoupper($objDept-&amp;gt;PageKey);&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;strTitle	= $strSuppName;&lt;br /&gt;
    $this-&amp;gt;strName	= $strDeptName.&amp;#039; dept. of &amp;#039;.$strSuppName;&lt;br /&gt;
    $this-&amp;gt;strTitleContext	= &amp;#039;items &amp;lt;a href=&amp;quot;&amp;#039;.KWP_CAT_REL.&amp;#039;&amp;quot;&amp;gt;supplied&amp;lt;/a&amp;gt; by &amp;#039;.$strSuppLink.&amp;#039;\&amp;#039;s &amp;lt;b&amp;gt;&amp;#039;.$strDeptName.&amp;#039;&amp;lt;/b&amp;gt; department:&amp;#039;;&lt;br /&gt;
    $this-&amp;gt;AddText($objDept-&amp;gt;DoPage());&lt;br /&gt;
    CallExit(&amp;#039;clsPage.DoCatDept()&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
  private function DoCatTitle() {&lt;br /&gt;
    CallEnter($this,__LINE__,&amp;#039;clsPage.DoCatTitle()&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    $strPageKey = $this-&amp;gt;objCatPage-&amp;gt;Path;&lt;br /&gt;
//    $objTitleTbl = VbzClasses::Titles();&lt;br /&gt;
    $objTitleTbl = $this-&amp;gt;Titles();&lt;br /&gt;
&lt;br /&gt;
    $idRow = $this-&amp;gt;objCatPage-&amp;gt;ID_Row;&lt;br /&gt;
    $objTitle = $objTitleTbl-&amp;gt;GetItem($idRow);&lt;br /&gt;
    assert(&amp;#039;is_object($objTitle)&amp;#039;);&lt;br /&gt;
    $objDept = $objTitle-&amp;gt;Dept();&lt;br /&gt;
    assert(&amp;#039;is_object($objDept)&amp;#039;);&lt;br /&gt;
    $objSupp = $objDept-&amp;gt;Supplier();&lt;br /&gt;
    assert(&amp;#039;is_object($objSupp)&amp;#039;);&lt;br /&gt;
    $strTitleName = $objTitle-&amp;gt;Name;&lt;br /&gt;
&lt;br /&gt;
    $this-&amp;gt;DoTitleIndicia($objTitle);&lt;br /&gt;
&lt;br /&gt;
//    $this-&amp;gt;strAbbr	= &amp;#039;title:&amp;#039;.strtoupper($strCatNum);&lt;br /&gt;
    $this-&amp;gt;strWikiPg	= &amp;#039;title:&amp;#039;.$objTitle-&amp;gt;CatNum();&lt;br /&gt;
//print &amp;#039;ABBR=&amp;#039;.$this-&amp;gt;strAbbr;&lt;br /&gt;
    $this-&amp;gt;strTitle	= $strTitleName;&lt;br /&gt;
    $this-&amp;gt;strName	= $strPageKey.&amp;#039; &amp;quot;&amp;#039;.$strTitleName.&amp;#039;&amp;quot; from &amp;#039;.$objSupp-&amp;gt;Name;&lt;br /&gt;
    $this-&amp;gt;strTitleContext 	= &lt;br /&gt;
      &amp;#039;items &amp;lt;a href=&amp;quot;&amp;#039;.KWP_CAT_REL.&lt;br /&gt;
      &amp;#039;&amp;quot;&amp;gt;supplied&amp;lt;/a&amp;gt; by &amp;#039;.$objSupp-&amp;gt;Link().&amp;#039;\&amp;#039;s &amp;#039;.&lt;br /&gt;
      $objDept-&amp;gt;LinkName().&amp;#039; department:&amp;#039;;&lt;br /&gt;
    $objTitle-&amp;gt;hideImgs = $this-&amp;gt;hideImgs;&lt;br /&gt;
    $this-&amp;gt;AddText($objTitle-&amp;gt;DoPage());&lt;br /&gt;
    CallExit(&amp;#039;clsPage.DoCatTitle()&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
  private function DoCatImage() {&lt;br /&gt;
    CallEnter($this,__LINE__,&amp;#039;clsPage.DoCatImage()&amp;#039;);&lt;br /&gt;
//    $objImageTbl = VbzClasses::Images();&lt;br /&gt;
    $objImageTbl = $this-&amp;gt;Images();&lt;br /&gt;
    $objImage = $objImageTbl-&amp;gt;GetItem($this-&amp;gt;objCatPage-&amp;gt;ID_Row);&lt;br /&gt;
    $objImage-&amp;gt;DoPage();&lt;br /&gt;
    CallExit(&amp;#039;clsPage.DoCatImage()&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Woozle</name></author>
	</entry>
</feed>