<?php
class LineEdit {
	private $label, $name, $value;
		
	function LineEdit($label, $name, $value = "")
	{
		$this->label = $label;
		$this->name = $name;
		$this->value = $value;
	}

	function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\">". $this->label ."</div>\n";
		$str .= $indent . "  <div class=\"widget\"><input name=\"vars[".$this->name."]\" value=\"".$this->value."\"/></div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class FileUpload {
	private $label, $name, $accept;

	public function FileUpload($label, $name, $accept = "*")
	{
		$this->label = $label;
		$this->name = $name;
		$this->accept = $accept;
	}

	public function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\">". $this->label . "</div>\n";
		$str .= $indent . "  <div class=\"widget\"><input type=\"file\" name=\"" 
			. $this->name. "\" accept=\"". $this->accept ."\"/></div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class Button {
	private $label;

	public function Button($label)
	{
		$this->label = $label;
	}

	public function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\"></div>\n";
		$str .= $indent . "  <div class=\"widget\"><button type=\"submit\">".
			$this->label."</button></div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class CheckBox {
	private $label, $name, $value;
		
	public function CheckBox($label, $name, $value = "")
	{
		$this->label = $label;
		$this->name = $name;
		$this->value = $value;
	}

	public function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\">". $this->label ."</div>\n";
		$str .= $indent . "  <div class=\"widget\"><input type=\"checkbox\" name=\"vars[".$this->name."]\" value=\"".$this->value."\"/></div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class ComboBox {
	private $label, $name, $value, $values;
		
	public function ComboBox($label, $name, $value, $values)
	{
		$this->label = $label;
		$this->name = $name;
		$this->value = $value;
		$this->values = $values;
	}

	public function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\">".$this->label."</div>\n";
		$str .= $indent . "  <div class=\"widget\">\n";
		$str .= $indent . "    <select name=\"vars[".$this->name."]\">\n";
		foreach($this->values as $k => $v) {
			if($v != $this->value) $str .= $indent . "      <option value=\"".$v."\">".$k."</option>\n";
			else $str .= $indent .  "      <option value=\"".$v."\" selected>".$k."</option>\n";
		}
		$str .= $indent . "    </select>\n";
		$str .= $indent . "  </div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class Hidden {
	private $values;
		
	public function Hidden($values)
	{
		$this->values = $values;
	}

	public function render($indent = "")
	{
		$str = "";
		foreach($this->values as $key => $value) {
			$str .= $indent . "<input type=\"hidden\" name=\"vars[".$key."]\" value=\"".$value."\"/>\n";
		}
		return $str;
	}
}

class TextEdit {
	private $label, $name, $value;
		
	function TextEdit($label, $name, $value = "")
	{
		$this->label = $label;
		$this->name = $name;
		$this->value = $value;
	}

	function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\">". $this->label ."</div>\n";
    $str .= $indent . "  <div class=\"widget\"><textarea class=\"textedit\" name=\"vars[".$this->name."]\">".$this->value."</textarea></div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class DateTimeEdit {
	private $label, $name, $timestamp;
		
	function DateTimeEdit($label, $name, $timestamp = 0)
	{
		$this->label = $label;
		$this->name = $name;
		$this->timestamp = $timestamp;
	}

	function render($indent = "")
	{
		if($this->timestamp == 0) $t = time();
		else $t = $this->timestamp;

		$second = date('s',$t);
		$minute = date('i',$t);
		$hour = date('G',$t); 
		$day = date('d',$t);
		$month = date('m',$t);
		$year = date('Y',$t); 

		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "	<div class=\"label\">".$this->label."</div>\n";
		$str .= $indent . "  <div class=\"widget\">\n";
		$str .= $indent . "     <input style=\"width: 50px;\" name=\"vars[".$this->name."_year]\" value=\"".$year."\"/>";
		$str .= "/<input style=\"width: 30px;\" name=\"vars[".$this->name."_month]\" value=\"".$month."\"/>";
		$str .= "/<input style=\"width: 30px;\" name=\"vars[".$this->name."_day]\" value=\"".$day."\"/>";
		$str .= "	- ";
		$str .= "<input style=\"width: 30px;\" name=\"vars[".$this->name."_hour]\" value=\"".$hour."\"/>";
		$str .= ":<input style=\"width: 30px;\" name=\"vars[".$this->name."_minute]\" value=\"".$minute."\"/>";
		$str .= ":<input style=\"width: 30px;\" name=\"vars[".$this->name."_second]\" value=\"".$second."\"/>\n";
		$str .= $indent . "  </div>\n";
		$str .= $indent . "</div>\n";

		return $str;
	}

	public function toTimestamp($t, $name)
	{
		$timestring = sprintf("%d", $t[$name."_year"])  ."/".
			sprintf("%d", $t[$name."_month"]) ."/".
			sprintf("%d", $t[$name."_day"])   ." ".
			sprintf("%d", $t[$name."_hour"])  .":".
			sprintf("%02d", $t[$name."_minute"]).":".
			sprintf("%02d", $t[$name."_second"]);
		
		return strtotime($timestring);
	}
}

class ImageComboBox {
	private $label, $name, $value, $values;
		
	public function ImageComboBox($label, $name, $value, $values)
	{
		$this->label = $label;
		$this->name = $name;
		$this->value = $value;
		$this->values = $values;
	}

	public function render($indent = "")
	{
		$str  = $indent . "<div class=\"input\">\n";
		$str .= $indent . "  <div class=\"label\">".$this->label."</div>\n";
		$str .= $indent . "  <div class=\"widget\">\n";
		$str .= $indent . "    <select name=\"vars[".$this->name."]\">\n";

		foreach($this->values as $k => $v) {
			$str .= $indent . "      <optgroup style=\"background-image: url(".$v."); height: 100px; width: 100px;\"/>\n";
			$str .= $indent . "        <option value=\"".$k."\"";
			if($v == $value) $str .= " selected";
			$str .=">".$k."</option>\n";
			$str .= $indent . "      </optgroup>\n";
		}

		$str .= $indent . "    </select>\n";
		$str .= $indent . "  </div>\n";
		$str .= $indent . "</div>\n";
		return $str;
	}
}

class Form {
	private $widgets = array();
	private $action;
	private $hasFileUpload = false;

	public function addWidget($widget)
	{
		if(get_class($widget) == "FileUpload") $this->hasFileUpload = true;
		array_push($this->widgets, $widget);	
	}

	public function render($indent = "")
	{
		global $m, $s;
		$str  = $indent . "<form method=\"post\"\n";
		if($this->hasFileUpload) $str .= $indent . "      enctype=\"multipart/form-data\"\n";
		$str .= $indent . "      action=\"?page=admin&amp;m=".$m."&amp;s=".$s."&amp;a=".$this->action."\">\n";
		foreach($this->widgets as $widget) {
			$str .= $widget->render($indent . "  ");
		}
		$str .= $indent . "</form>\n";
		echo $str;
	}

	public function Form($action)
	{
		$this->action = $action;
	}
}

?>