*  @version    1.0
 *
 */
class Dictionary {
	public $cacheType;
	
	private $ckey_length = 4;
	private $mmCache = 'table_dictionary_option_all';
	
	private $dict;
	
	public function __construct() {
		
	}
	/**
	 * 取得数据字典对应数据
	 *
	 * @author wangzhoudong
	 * @param string $table_code 数据字典的类型
	 * @param string $code 数据字典代码
	 * @param string $val 数据字典数据对应下标
	 * @return array  返回数据字典数组
	 * @throws CException  $table_code,$code 不能为空
	 *
	 */
	
	public function get($table_code,$code,$val=null) {
		$mKey = Cache::get($this->mmCache);
		if(isset($mKey[$table_code][$code])) {
			$arr =  $mKey[$table_code][$code];
		}else{
			$this->update($table_code,$code);
			if(isset($this->dict[$table_code][$code])) {
				$arr =  $this->dict[$table_code][$code];
			}else{
				$arr = [];
			}
		}
	    if(!$arr) {
	        return null;
	    }
		if($val !== null) {
			if(array_key_exists($val, $arr)) {
				return $arr[$val];
			}else{
				return '';
			}
		}else{
			return $arr;
		}
	}
	
	/**
	 * 获取地区数据名称
	 * @param int $areaId
	 * $start 排除前面的层级
	 */
	public function areaName($areaId,$spec=" ",$start=1) {
	    if(!$areaId) {
	        return '';
	    }
	    $objArea = new BaseAreaModel();
	    $sMerger = "";
	    $arr = $objArea->select("merger_name")->find($areaId);
	    if(isset($arr->merger_name)) {
	        $aMerger = explode(',',$arr->merger_name);
	         
	        for($i=1,$j=count($aMerger);$i<$j;$i++) {
	            $sMerger .= $spec . $aMerger[$i];
	        }
	        if($sMerger) {
	            $sMerger =  substr($sMerger,strlen($spec));
	        }
	    }
	    return $sMerger;
	}
	
	public function area($areaId) {
	    if(!$areaId) {
	        return '';
	    }
	    $objArea = new BaseAreaModel();
	    $arr = $objArea->find($areaId);
	    if($arr) {
	        $arr = $arr->toArray();
	    }
	    return $arr;
	}
	/**
	 * 
 	 * @param string $table_code 数据字典的类型
	 * @param string $code 数据字典代码
	 * @param string $selection 被选中的值。
	 * @param array $htmlOptions  额外的HTML属性。如name='cate' ,id='cate'下面两个特定的属性是被认可: 
	 * 						      empty: 字符串,指定空选项的文本,它的值为空。
	 * 							       'empty'选项也可以是一个值-标签对形式的数组。
	 * 							                  在一开始每个对都会用于渲染一个列表的选项。注意,
	 *  							       文本标签不会被HTML编码。 
     *
	 * 
	 */
	public function select($table_code, $code, $selection=null, $htmlOptions=array()) {
		$selectOption = $htmlOptions;
		unset($selectOption['empty']);
		$html = "";
		return $html;
	}
	
	public function option($table_code,$code,$selection=null) {
	    $data = $this->get($table_code,$code);
	    $html = "";
	    foreach ($data as $k=>$v) {
	        $html .= "