/**
 * 对jQuery的扩展,使用此文件的js，必须载入jQuery框架
 */
jQuery.extend({
	/**
	 * 测试对象是否是标签节点
	 * @param mixed object 要测试的变量
	 * @return boolean	如果是则返回True,否则返回False
	 */
	isElement : function (object) {
		return !!(object && object.nodeType == 1);
	},
	
	/**
	 * 测试对象是否为字符串
	 * @param mixed object 要测试的变量
	 * @return boolean	如果是则返回True,否则返回False
	 */
	isString : function (object) {
		return this.getClass(object) === "String";
	},
	
	/**
	 * 测试对象是否为数字
	 * @param mixed object 要测试的变量
	 * @return boolean	如果是则返回True,否则返回False
	 */
	isNumber : function (object) {
		return this.getClass(object) === "Number";
	},
	
	/**
	 * 测试对象是否为undefined
	 * @param mixed object 要测试的变量
	 * @return boolean	如果是则返回True,否则返回False
	 */
	isUndefined : function (object) {
		return typeof object === "undefined";
	},
	
	/**
	 * 取得变量类型的字符串
	 * @param mixed object
	 */
	getClass : function(object) {
		return Object.prototype.toString.call(object)
		 .match(/^\[object\s(.*)\]$/)[1];
	}
});

jQuery.fn.extend({
	/**
	 * 设置单选按钮的值
	 *
	 * @param mixed value
	 */
	setRadioValue : function(value) {
		return this.each(function(){
			if (this.value == value) {
				this.checked = true;
			}
		});
	},
	/**
	 * 设置单选按钮的值
	 *
	 * @param mixed value
	 */
	setSelectValue : function(value) {
		return this.each(function(){
			if (this.value == value) {
				this.selected = true;
			}
		});
	},
	
	
	/**
	 * 将所有选中的checkbox的值,放入一个文本输入框中,默认每个值间以逗号隔开
	 *
	 * @param HTMLElement elementTarget	目标输入框
	 * @param string separator	分隔符
	 */
	setCheckboxValuesToInput : function(elementTarget, separator) {
		if (!separator) separator = ',';	//设置默认分隔符为英文逗号
		var elements = [];	//保存所有选中的值
		this.each(function(){
			if (this.checked) elements.push(this.value);
		});
		elementTarget.value = elements.join(separator);
		return this;
	},
	
	/**
	 * 根据值设置checkbox的选中状态
	 *
	 * @param array values  对应的值
	 */
	setCheckbox : function(values) {
		return this.each(function() {
			if (jQuery.inArray(this.value, values) !== -1) {
				this.checked = true;
			}
		});
	},
	
	/**
	 * 全选
	 */
	check : function() {
		return this.each(function(){
			this.checked = true;
		});
	},
	
	/**
	 * 全不选
	 */
	uncheck : function() {
		return this.each(function(){
			this.checked = false;
		});
	},
	
	/**
	 * 设置全选
	 *
	 * @param jQuery or string selector 子checkbox
	 */
	checkCall : function(selector) {
		selector = jQuery(selector);
		var _this = this;
		selector.checkItems(this);	//如果所有的子checkbox都为选中,那么总checkbox也为选中
		return this.each(function() {
			jQuery(this).click(function() {
				if (this.checked) {
					selector.check();
					_this.check();	//将所有的全选复选框设置为选中状态
				} else {
					selector.uncheck();
					_this.uncheck(); //将所有的全选复选框设置为非选中状态
				}
			});
		});
	},
	
	/**
	 * 如果所有的子checkbox都为选中,那么总checkbox也为选中
	 * @param jQuery or string 总checkbox
	 */
	checkItems : function(selector) {
		selector = jQuery(selector);
		var _this = this;
		return this.each(function() {
			$(this).click(function() {
				var flag = true;
				_this.each(function() {
					if (this.checked === false) {
						flag = false;
						return false;
					}
				});
				selector.get(0).checked = flag;
			});
		});
	},
	
	/**
	 * 验证复选框是否一个都未选中
	 *
	 * @return boolean 如果都未选中则返回true，否则返回false
	 */
	isAllNotChecked : function() {
		var boolean = true;
		this.each(function() {
			if (this.checked) {	//如果有一个复选框被选中
				boolean = false;
				return false;
			}
		});
		return boolean;
	},
	
	/**
	 * 轮换默认值,输入获取焦点时,如果输入框的值为默认值,那么设置输入框的值为空
	 * 失去焦点时,如果输入框的值为空,那么设置输入框的值为默认值
	 */
	toggleDefaultValue: function(defaultValue, funcFocus, funcBlur) {
		if (this[0]) {
			jQuery(this[0]).focus(function() {
				if (this.value == defaultValue) {
					this.value = '';
					if (jQuery.isFunction(funcFocus)) funcFocus(this[0]);
				}
			}).blur(function() {
				if (this.value == '') {
					this.value = defaultValue;
					if (jQuery.isFunction(funcBlur)) funcBlur(this[0]);
				}
			});
		}
	}
});