function ÑreatorNodeByArray(doc){
	var F=function(a1,a2){
		if(typeof(a1)=='string'&&a2) return createNodeByArray.v1(doc,a1,a2);
		else return createNodeByArray(doc,a1);
	};
	F.document=doc;
	F.superclass=ÑreatorNodeByArray;
	return F;
}

function createNodesByArray(doc,config){
	var t=[];
	for(var j=0;j<config.length;j++){
		t[j]=createNodeByArray(doc,config[j]);
	}
	return t;
}
createNodesByArray.d=function(config){
	return createNodesByArray(document,config);
}

function createNodeByArray(doc,config){
	var t,j,k,c,stk;
	if(arguments[2]) stk=arguments[2]; else stk=[];
	
	if(config instanceof Array){
		
		if(config[0].nodeType) t=config[0];
		else t=doc.createElement(config[0]);
		stk.push(t);
		
		if(config.length>1)for(j=2;j<config.length;j++){
			c=createNodeByArray(doc,config[j],stk);
			t.appendChild(c);
		}

		if(config[1]) if(config[1] instanceof Object) for(j in config[1]){
			if(j == 'style') for(k in config[1][j]) t.style[k]=config[1][j][k];
			else t[j]=config[1][j];
		}
		stk.pop();
	}
	else if(config.nodeType) t=config;
	else t=doc.createTextNode(config.toString());
	
	if(t.oncreate){t.oncreate(stk);t.oncreate=undefined;}

	return t;
}

createNodeByArray.d=function(config){
	return createNodeByArray(document,config);
}
createNodeByArray.v1=function(doc,name,config){
	var r=createNodeByArray(doc,config);
	if(name)r.oncreate=new Function('stk','stk[0].'+name+'=this;this.container=stk[0];');
	return r;
}
createNodeByArray.v1.d=function(name,config){
	return createNodeByArray.v1(document,name,config);
}

