<?php defined('SYSPATH') or die('No direct access allowed.');

/**
 * This class extends Kohana's HTML
 *
 * @package    lnApp/Modifications
 * @category   Classes
 * @category   Helpers
 * @author     Deon George
 * @copyright  (c) 2010 Deon George
 * @license    http://dev.leenooks.net/license.html
 */
abstract class lnApp_Form extends Kohana_Form {
	/**
	 * Render our control group form attributes
	 *
	 * @return array((string) control group wrapper,(array) attributes to exclude
	 */
	private static function _controlgroup($name,array &$attributes=NULL) {
		if (isset($attributes['nocg'])) {
			unset($attributes['nocg']);
			return '%s';
		}

		$output = '';

		$output .= '<div class="control-group">';

		if (isset($attributes['label'])) {
			$output .= Form::label($name,$attributes['label'],array('class'=>'control-label'));
			unset($attributes['label']);
		}

		if (isset($attributes['help-block'])) {
			$help = $attributes['help-block'];
			unset($attributes['help-block']);
		}

		$output .= '<div class="controls">';
		$output .= '%s';

		if (isset($help))
			$output .= sprintf('<span class="help-block">%s</span>',$help);

		$output .= '</div>';
		$output .= '</div>';

		return $output;
	}

	public static function button($name,$body,array $attributes=NULL) {
		return sprintf(static::_controlgroup($name,$attributes),parent::button($name,$body,$attributes));
	}

	/**
	 * Wrap our Form() functions with boostrap HTML
	 *
	 * @usedby Form::hidden
	 * @usedby Form::password
	 * @usedby Form::file
	 * @usedby Form::checkbox
	 * @usedby Form::radio
	 * @usedby Form::submit
	 * @usedby Form::image
	 */
	public static function input($name,$value=NULL,array $attributes=NULL) {
		return sprintf(static::_controlgroup($name,$attributes),parent::input($name,$value,$attributes));
	}

	public static function select($name,array $options=NULL,$selected=NULL,array $attributes=NULL) {
		// If only 1 record, dont show select, but a hidden attribute and a displayed value.
		if (isset($attributes['oneonly']) AND $attributes['oneonly']) {
			$attributes['disabled'] = 'disabled';	
			unset($attributes['oneonly']);
		}

		return sprintf(static::_controlgroup($name,$attributes),parent::select($name,$options,$selected,$attributes));
	}

	public static function textarea($name,$body='',array $attributes=NULL,$double_encode=TRUE) {
		if (! isset($attributes['id']))
			$attributes['id'] = preg_replace('/[\[\]]/','_',$name);

		Script::factory()
			->type('stdin')
			->data('$("#'.$attributes['id'].'").wysihtml5();');

		return sprintf(static::_controlgroup($name,$attributes),parent::textarea($name,$body,$attributes,$double_encode));
	}
}
?>