/**
* JList。以下是利用JList实现二维联动菜单：<br/>
<code>&lt;select&nbsp;name="<font color=green>s1</font>"&nbsp;id="<font color=green>s1</font>"&gt;&lt;/select&gt;<br />
&lt;select&nbsp;name="<font color=green>s2</font>"&nbsp;id="<font color=green>s2</font>"&gt;&lt;/select&gt;<br />
&lt;<font color='blue'>script</font>&nbsp;language="<font color=green>javascript</font>"&gt;<br />
<font color='blue'>function</font>&nbsp;init(v1,&nbsp;v2)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color='green'>//定义s1选项<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>var</font>&nbsp;map1&nbsp;=&nbsp;<font color='blue'>new</font>&nbsp;<b><font color='black'>JMap</font></b>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;map1.put("<font color=green>a</font>",&nbsp;1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;map1.put("<font color=green>b</font>",&nbsp;2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;map1.put("<font color=green>c</font>",&nbsp;3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;map1.put("<font color=green>d</font>",&nbsp;4);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color='green'>//定义s2的选项<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>var</font>&nbsp;map2&nbsp;=&nbsp;<font color='blue'>new</font>&nbsp;<b><font color='black'>JMap</font></b>();<br />
&nbsp;&nbsp;&nbsp;&nbsp;map2.put("<font color=green>a</font>",&nbsp;[["<font color=green>1</font>",&nbsp;"<font color=green>aa</font>"],&nbsp;["<font color=green>2</font>",&nbsp;"<font color=green>ab</font>"],&nbsp;["<font color=green>3</font>",&nbsp;"<font color=green>ac</font>"]]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;map2.put("<font color=green>b</font>",&nbsp;[["<font color=green>4</font>",&nbsp;"<font color=green>bb</font>"]]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;map2.put("<font color=green>c</font>",&nbsp;[["<font color=green>5</font>",&nbsp;"<font color=green>cc</font>"],&nbsp;["<font color=green>6</font>",&nbsp;"<font color=green>cd</font>"]]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color='green'>//将数据导入s1,s2<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>var</font>&nbsp;list1&nbsp;=&nbsp;<b><font color='black'>JList</font></b>.getById("<font color=green>s1</font>");<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>var</font>&nbsp;list2&nbsp;=&nbsp;<b><font color='black'>JList</font></b>.getById("<font color=green>s2</font>");<br />
&nbsp;&nbsp;&nbsp;&nbsp;list1.importMap(map1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;list1.setValue(v1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;list2.importArray(map2.get(list1.getValue()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;list2.setValue(v2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<font color='green'>//加入事件监听<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;list1.addActionListener("<font color=green>change</font>",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>function</font>()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list2.clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>var</font>&nbsp;options&nbsp;=&nbsp;map2.get(list1.getValue());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color='blue'>if</font>&nbsp;(options&nbsp;!=&nbsp;<font color='blue'>null</font>)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list2.importArray(options);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;);<br />
}<br />
init("<font color=green>c</font>",&nbsp;"<font color=green>6</font>");&nbsp;<br />
&lt;/<font color='blue'>script</font>&gt;</code>
*
* @class JList
* @extend JComponent
* @implement JElementFinder
*/
/**
* 构造器
*
* @constructor JList 
* @param Object object select原始对象
* @version 0.3.0
*/
function JList(object) {
	JClass.extend(this, JComponent);

	/**
	* 设置JList的值
	*
	* @method setValue
	* @param String value
	*/
	this.setValue = function (value) {
		object.value = value;
	};
	
	/**
	* 取得JList的值
	*
	* @method getValue
	* @return String
	*/
	this.getValue = function () {
		return object.value;
	};
	
	/**
	* 添加一个元素
	*
	* @method addItem
	* @param String value 值
	* @param String text 文本
	*/
	this.addItem = function (value, text) {
		var option = JElement.create("option");
		option.value = value;
		option.text = text;
		object.options.add(option);
	};
	
	/**
	* 取得所有选项
	*
	* @method getOptions
	* @return Array
	*/
	this.getOptions = function () {
		return object.options;
	};
	
	/**
	* 取得当前选中的索引
	*
	* @method getIndex
	* @return int
	*/
	this.getIndex = function () {
		return this.getOptions().selectedIndex;
	};
	
	/**
	* 取得某个索引对应的元素
	*
	* @method getItem
	* @param int index
	* @return JOption
	*/
	this.getItem = function (index) {
		if (!J.defined(index)) {
			index = this.getIndex();
		}
		var options = this.getOptions();
		if (J.defined(options[index])) {
			var value = options[index].value;
			var text = options[index].text;
			var option = JOption.create(value, text);
			return option;
		}
		return null;
	};
	
	/**
	* 取得所有的元素
	*
	* @method getItems
	* @return JArray
	*/
	this.getItems = function () {
		var options = this.getOptions();
		var _options = new JArray();
		if (options.length > 0) {
			for (var i=0; i<options.length; i++) {
				var value = options[i].value;
				var text = options[i].text;
				var option = JOption.create(value, text);
				_options.push(option);
			}
		}
		return _options;
	};
	
	/**
	* 设置可视的选项的数目
	*
	* @method setVisibleSize
	* @param int size 选项数目
	*/
	this.setVisibleSize = function (size) {
		object.size = JInteger.parseInt(size);
	};
	
	/**
	* 取得可视的选项的数目
	*
	* @method getVisibleSize
	* @return int
	*/
	this.getVisibleSize = function () {
		if (J.defined(object.size)) {
			return object.size;
		}
		return 0;
	};
	
	/**
	* 设置是否可多选
	*
	* @method setMultiple
	* @param boolean multiple 默认为true
	*/
	this.setMultiple = function (multiple) {
		if (!J.defined(multiple)) {
			multiple = true;
		}
		object.multiple = multiple;
	};
	
	/**
	* 删除某个索引对应的元素
	*
	* @method removeIndex
	* @param int index
	*/
	this.removeIndex = function (index) {
		object.remove(index);
	};
	
	/**
	* 删除某个值对应的所有元素
	*
	* @method removeValue
	* @param String value
	*/
	this.removeValue = function (value) {
		var options = this.getOptions();
		for (var i = 0; i < options.length; i ++) {
			if (options[i].value == value) {
				this.removeIndex(i);
			}
		}
	};
	
	/**
	* 将一JMap对象中的数据对导入列表
	*
	* @method importMap
	* @param JMap map 要导入的JMap对象
	* @return void
	*/
	this.importMap = function (map) {
		var list = this;
		map.each(function (k, v) {
			list.addItem(k, v);
		});
	};
	
	/**
	* 将一个二维数组中的数据对导入列表。该数组类似于：<br/>
	* var array = [["value1", "text1"], ["value2", "text2"] ... ["valuen", "textn"]];
	*
	* @method importArray
	* @param array map 要导入的JMap对象
	* @return void
	*/	
	this.importArray = function (array) {
		for (var i=0; i<array.length; i++) {
			this.addItem(array[i][0], array[i][1]);
		}
	}
	
	/**
	* 将所有元素导出到一个Map中
	* 
	* @method exportMap
	* @return JMap
	*/	
	this.exportMap = function () {
		var options = this.getOptions();
		var map = new JMap();
		for (var i=0; i<options.length; i++) {
			map.put(options[i].value, options[i].text);
		}
		return map;
	};
	

	/**
	* 取得JElement对象的原始对象
	*
	* @method getElement
	* @return Object
	* @version 0.3.0
	*/
	this.getElement = function () {
		return object;
	};
	
	/**
	* 设置/替换JElement对象的原始对象
	*
	* @method setElement
	* @param Object _object 新的对象
	* @version 0.3.0
	*/
	this.setElement = function (_object) {
		object = _object;
	};
}

/**
* 生成一个JList对象
* 
* @method create
* @static 静态方法
* @return JList
* @version 0.3.0
*/
JList.create = function () {
	var object = JElement.create("SELECT");
	return new JList(object);
};

JClass.extend(JList, JElementFinder);
