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

jQuery.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 = jQuery.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) jQuery(elt).attr(attr, attributes[attr]);
		
				/*
				 * Add children of this element.
				 */
				var children = arguments[2];
				children = jQuery.create.apply(null, children);
				jQuery(elt).append(children);
		
				/*
				 * If there are more siblings, render those too.
				 */
				if (arguments.length > 3)
				{
					var siblings = jQuery.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 = jQuery.create.apply(null, (Array.prototype.slice.call(arguments, 1)));		
		elts = elts.concat(siblings);
		return elts;
	}
};

