<?php
require_once ('HTML/QuickForm/Renderer/Default.php');

class HTML_QuickForm_Renderer_MyForms extends HTML_QuickForm_Renderer_Default {
    // {{{ properties

   /**
    * The HTML of the hidden elements in the form  
    * @var      string
    * @access   private
    */
    var $_hiddenelementshtml;

   /**
    * Form template string
    * @var      string
    * @access   private
    */
    var $_formTemplate = '
	{requiredNoteLocation}
	<form{attributes}>
		<table width="100%" border="0" cellpadding="6" cellspacing="0">
			{content}
		</table>
		{hidden}
	</form>
';

   /**
    * Element template string
    * @var      string
    * @access   private
    */
    var $_elementTemplate = '
			<tr id="row_{name}">
				<td class="labelcell"><label for="{name}"><!-- BEGIN required --><span class="required">&#9658;</span> <!-- END required -->{label}</label></td>
				<td>{element}
				<!-- BEGIN error --><br /><span class="errortext">&#9650; {error}</span><!-- END error --></td>
			</tr>';

   /**
    * Required Note template string
    * @var      string
    * @access   private
    */
    var $_requiredNoteTemplate = '<div class="requirednote">{requiredNote}</div>';

    // }}}
    // {{{ constructor
    
    /**
     * Constructor
     *
     * @access public
     * @return void
     */
	function HTML_QuickForm_Renderer_MyForms() {
		$this->HTML_QuickForm_Renderer_Default();
	}
    // }}}

   /**
    * Called when visiting a form, after processing all form elements
    * Adds required note, form attributes, validation javascript and form content.
    * 
    * @param    object      An HTML_QuickForm object being visited
    * @access   public
    * @return   void
    */
    function finishForm(&$form)
    {
        // add form attributes and content
        $html = str_replace('{attributes}', $form->getAttributes(true), $this->_formTemplate);
        $html = str_replace('{hidden}', $this->_hiddenelementshtml, $html);
        $this->_html = str_replace('{content}', $this->_html, $html);
        // add a required note, if one is needed
        if (!empty($form->_required) && !$form->_freezeAll) {
            $this->_html = str_replace('{requiredNoteLocation}', $this->_requiredNoteTemplate, $this->_html);
            $this->_html = str_replace('{requiredNote}', $form->getRequiredNote(), $this->_html);
        } else {
            $this->_html = str_replace('{requiredNoteLocation}', '', $this->_html);
		}
        // add a validation script
        if ('' != ($script = $form->getValidationScript())) {
            $this->_html = $script . "\n" . $this->_html;
        }
    } // end func finishForm

   /**
    * Helper method for renderElement
    *
    * @param    string      Element name
    * @param    mixed       Element label (if using an array of labels, you should set the appropriate template)
    * @param    bool        Whether an element is required
    * @param    string      Error message associated with the element
    * @access   private
    * @see      renderElement()
    * @return   string      Html for element
    */
    function _prepareTemplate($name, $label, $required, $error)
    {
		$html = parent::_prepareTemplate($name, $label, $required, $error);
		if ($label == '')
	        $html = str_replace('<label for="{name}"></label>', '&nbsp;', $html);
		// replace the {name} placeholder in the <label> tag.  properly sets the "for" attribute value.
        $html = str_replace('{name}', $name, $html);
        return $html;
    } // end func _prepareTemplate

   /**
    * Renders an hidden element
    * Called when visiting a hidden element
    * 
    * @param object     An HTML_QuickForm_hidden object being visited
    * @access public
    * @return void
    */
    function renderHidden(&$element)
    {
        $this->_hiddenelementshtml .= "\n\t". $element->toHtml();
    } // end func renderHidden
}
?>