function nodeSort(pnx,idx,dir){//dir=direction[1,-1]
	var path=event.srcElement;
	if(path==d.nodeSortPrevPath)dir=(d.nodeSortPrevDir*=-1);
	if(d.nodeSortPrevPath)d.nodeSortPrevPath.className=d.nodeSortPrevPath.className.replace(/(-asc|-desc).*$/gi,'');
	var curCls=path.className.split('-')[0];
	path.className=curCls+((dir==1)?'-asc':'-desc');
	d.nodeSortPrevPath=path;
	d.nodeSortPrevDir=dir;
	pnx=dObj(pnx).children;
	var dbx=new Array();
	idx=idx.split(',');
	for(i=0;i<idx.length;i++){
		idx[i]=idx[i].split(':');
		if(idx[i].length<2)idx[i][1]=1;
	}
	for(i=0;i<pnx.length;i++){
		dbx[i]=[pnx[i].outerHTML];
		for(j=0;j<idx.length;j++)dbx[i][dbx[i].length]=typeVal(nodePath(pnx[i],'\\'+idx[j]));
	}
	dbx.sort(function(a,b){return sortDbx(a,b,1)});
	for(i=0;i<dbx.length;i++)pnx[i].outerHTML=dbx[i][0];
	function typeVal(path){
		var val=path.innerText;
		if(path.tagName.toLowerCase()=='input'){
			var ptt=path.type.toLowerCase();
			if(ptt=='checkbox'||ptt=='radio')val=!path.checked;
		}
		return val;
	}
	function sortDbx(a,b,d){
		if(a[d]<b[d])this.r=-1*idx[d-1][1]*dir;
		if(a[d]==b[d]&&d<a.length-1)this.r=sortDbx(a,b,d+1);
		if(a[d]>b[d])this.r=1*idx[d-1][1]*dir;
		return this.r;
	}
}

function elementSort(pnx,idx,dir){//dir=direction[1,-1]
	var path=event.srcElement;
	if(path==d.nodeSortPrevPath)dir=(d.nodeSortPrevDir*=-1);
	if(d.nodeSortPrevPath)d.nodeSortPrevPath.className=d.nodeSortPrevPath.className.replace(/(-asc|-desc).*$/gi,'');
	var curCls=path.className.split('-')[0];
	path.className=curCls+((dir==1)?'-asc':'-desc');
	d.nodeSortPrevPath=path;
	d.nodeSortPrevDir=dir;
	pnx=dObj(pnx).children;
	var dbx=new Array();
	idx=idx.split(',');
	for(i=0;i<idx.length;i++){
		idx[i]=idx[i].split(':');
		if(idx[i].length<2)idx[i][1]=1;
	}
	for(i=0;i<pnx.length;i++){
		dbx[i]=[pnx[i].outerHTML];
		for(j=0;j<idx.length;j++)dbx[i][dbx[i].length]=pnx[i].getAttribute(idx[j][0],0);
	}
	dbx.sort(function(a,b){return sortDbx(a,b,1)});
	function sortDbx(a,b,d){
		if(a[d]<b[d])this.r=-1*idx[d-1][1]*dir;
		if(a[d]==b[d]&&d<a.length-1) this.r=sortDbx(a,b,d+1);
		if(a[d]==b[d]&&d>=a.length-1) this.r=0;
		if(a[d]>b[d])this.r=1*idx[d-1][1]*dir;
		return this.r;
	}
	for(i=0;i<dbx.length;i++) pnx[i].outerHTML=dbx[i][0];
}