
/*
 * DOM node creation for jQuery.
 *
 * Author  :  Sean Gilbertson
 * Created :  2006-01-04
 *
 */

$.create = function() {
	if (arguments.length == 0) {
		return [];
	}
	
	var first_arg = arguments[0];

	/*
	 * In case someone passes in a null object,
	 * assume that they want an empty string.
	 */
	if (first_arg == null) {
		first_arg = "";
	}

	if (first_arg.constructor == String) {
		if (arguments.length > 1) {
			var second_arg = arguments[1];
			
			if (second_arg.constructor == String) {
				var elt = document.createTextNode(first_arg);
				
				var elts = [];
				
				elts.push(elt);

				var siblings = $.create.apply(null, Array.prototype.slice.call(arguments, 1));

				elts = elts.concat(siblings);
				
				return elts;
			} else {
				var elt = document.createElement(first_arg);
				
				/*
				 * Set element attributes.
				 */
				var attributes = arguments[1];

				for (var attr in attributes) {
					$(elt).attr(attr, attributes[attr]);
				}
		
				/*
				 * Add children of this element.
				 */
				var children = arguments[2];

				children = $.create.apply(null, children);

				$(elt).append(children);
		
				/*
				 * If there are more siblings, render those too.
				 */
				if (arguments.length > 3) {
					var siblings = $.create.apply(null, Array.prototype.slice.call(arguments, 3));
					
					return [elt].concat(siblings);
				}
		
				return elt;
			}
		} else {
			return document.createTextNode(first_arg);
		}
	}	else {
		var elts = [];
		
		elts.push(first_arg);

		var siblings = $.create.apply(null, (Array.prototype.slice.call(arguments, 1)));
				
		elts = elts.concat(siblings);
		
		return elts;
	}
}
