/**
 * Alternate val for jQuery
 * Franck Marcia - 2006/06/10
 */

$.fn.val = function() {
	var len = this.size(), ret = [], elt, val;
	for (var i = 0; i < len; ++i) {
		if ((elt = this.get(i))) {
			if ((val = $.val[elt.tagName.toLowerCase()](elt)) !== null) {
				if (val.constructor == Array) {
					ret = ret.concat(val);
				} else {
					ret.push(val);
				}
			}
		}
	}
	return ret.length > 0 ? ret.length > 1 ? ret : ret[0] : null;
};

$.val = {
	input: function(elt) {
		switch (elt.type.toLowerCase()) {
			case 'submit': case 'reset': case 'file': case 'button':
			case 'image': case 'hidden': case 'password': case 'text':
				return elt.value;
			case 'checkbox': case 'radio':
				return elt.checked ? elt.value : null;
		}
		return null;
	},
	textarea: function(elt) {
		return elt.value;
	},
	select: function(elt) {
		if (elt.type == 'select-one') {
			var opt, idx = elt.selectedIndex;
			if (idx > -1) {
				opt = elt.options[idx];
				return opt.value || opt.text;
			}
			return null;
		}
		var value = [], opt;
		for (var k = 0; opt = elt.options[k]; ++k) {
			if (opt.selected) {
				value.push(opt.value || opt.text);
			}
		}
		return value.length > 0 ? value : null;
	}
};
