function WriteTableList(list,trg){
	//*******THE CALLING PAGE MUST INCLUDE A DEFINED mOvr(SORCE,ROW) FUNCTION*********
	var HeadProp=new propTableHead();
	var ColGroups="";
	
	var arg;          //HANDLE ADITIONAL ARGUMENT FORMATTING
	for (arg=2; arg<arguments.length; ++arg){
		var prp=arguments[arg].properties;
		if (arguments[arg].lbl=="ColGroup") 
			ColGroups=WriteCollumbGroups(prp);
		if (arguments[arg].lbl=="Table"){HeadProp=new propTableHead(prp)}
		}
		
	var TableHead="<TABLE "  +  WriteProperties(HeadProp)  +  ">\n";
	
	trg.write(TableHead);
	trg.write(ColGroups);
	for (i=0;i<list.length; ++i){
		if ((i%2)==1) BGColor="bgcolor=#eeeeee"; else BGColor=" ";
		line= "\t<TR " +BGColor +" onmouseover=\"mOvr(this,"  +  i  +  ")\">";
		line+="\n\t<A Name=\"I"  +  i  +  "\">";
		for (var prop in list[i]){
			var str=list[i][prop].toString();
                        if (str!="undefined") str=str.toString(); else str=" ";
			if (prop!="itemNum" && prop!="price") line+=("<TD>"+str +"</TD>");
                         else if (prop=="price") 
                                if (str<0) line+=("<TD>SOLD</TD>");
                                 else line+=("<TD>$"+str +"</TD>");
			};
		line=line+"</A></TR>\n";
		trg.write(line);
		};
	trg.write("\n</Table>");
	};

function WriteProperties(ObjWProp){
	propertiesString=""
	for (var prop in ObjWProp) 
		propertiesString=propertiesString+" "+prop+"="+ObjWProp[prop];
	return propertiesString;			
	}

function WriteCollumbGroups(cg){
	var HTMLcolGroups="";
	for (i=0;i<cg.length;++i){
		var colGroupsLine="\t<COLGROUP";
		colGroupsLine=colGroupsLine+WriteProperties(cg[i]);
		colGroupsLine=colGroupsLine+">\n";
		HTMLcolGroups=HTMLcolGroups+colGroupsLine;				
		}
	return HTMLcolGroups;
	}	


function propTableHead(){
	this.width="100%";
	this.border=0; 
	this.cellspacing=0;
	this.cellpadding=0;
	if (arguments.length==1) for (var prop in arguments[0]) this[prop]=arguments[0][prop];
	}


function BuildProp(ary){
	var i=0;
	if (ary.length>1){
		for (i=0;i<(ary.length-1); i=i+2)
			{this[(ary[i])]=ary[i+1];}
		}
	}

function HTMLtag(lbl){
	this.lbl=lbl;
	var arg=[];
	var i=0;
	var j=0;
	for (i=1;i<arguments.length; ++i) arg[(i-1)]=arguments[i];

	if(typeof arg[1]=="string")	{this.properties=new BuildProp(arg);}
	 else {this.properties=[];
		for (i=0;i<arg[1].length;++i){
			var ary=[];
			for (j=0;j<arg.length;++j){
				if ((j%2)==1) ary[j]=arg[j][i];	else ary[j]=arg[j];
				}
			this.properties[i]=new BuildProp(ary);
	    		};
		}
};


//**************************************************************************
// INDEX FUNCTIONS *********************************************************
//**************************************************************************

function indexList(str,list,I){
	var j=0;
	var g=[];
	for (var prop in list[0]){g[j]=prop;j++;}
	var prp=g[I];
	var startpt=0;
	var endpt=list.length-1;
	var val0=list[0][prp];
	str=str
	if(isNaN(val0)){str=CapFirst(str);
		while ((startpt+1) != endpt){
			var i=Math.floor((startpt+endpt)/2);
        		var h=list[i][prp];
			h=CapFirst(h);
			var hcut="";
			for (j=0; j<(str.length); ++j) hcut=hcut+h.charAt(j);
			if (str>hcut) startpt=i; else endpt=i;
			};
		h=list[startpt][prp];
		var hcut="";
		for (j=0; j<(str.length); ++j) hcut=hcut+h.charAt(j);
		if (hcut>=str) i=startpt;
	  	else i=endpt;
		}
	  else{	str=parseInt(str);
		while ((startpt+1) != endpt){
			var i=Math.floor((startpt+endpt)/2);
        		var h=list[i][prp];
			if (str>h) startpt=i; else endpt=i;
			};
		h=list[startpt][prp];
		if (h>=str) i=startpt;
	  	else i=endpt;
		};
	
	return i;
	}


//**************************************************************************
// SORT FUNCTIONS **********************************************************
//**************************************************************************

function SortList(iSort,list){
        
	var j=0;var g=[];
	for (var prop in list[0]){g[j]=prop;j++;}
	var prp=g[iSort];
	var ind="";
	var list2=new Array();
	for (j=0; j<list.length; ++j){
		ind=(list[j][prp])+(list[j][g[0]])+(list[j][g[1]]);
		list2[j]=new LisTwIndecies(ind,j);
		}
	list2.sort(objectSort);
	var list3=new Array();
	for (j=0; j<list.length; ++j) list3[j]=list[j];
	for (j=0; j<list.length; ++j) {list[j]=list3[(list2[j].indx)];}
	top.RecordPage.location.reload();
	return list;
}

function objectSort(X,Y){
	var x=X.p;
	var y=Y.p;
	if (x<y) return -1;
	if (x>y) return 1;
	return 0;
	}

function LisTwIndecies(prpt,I){
	var porpt=prpt;
	porpt=CapFirst(porpt);
	this.p=porpt; 
	this.indx=I; }

//************************************************************************************
// CapFirst ***** This function eliminates non-Word characters from a string's front *
//*************** and Capitolizes the first letter ***********************************
//************************************************************************************

function CapFirst(str){
	var regexpr=/^\W+/;
	if( str.match(regexpr)!=null ) {str=str.replace(regexpr,"");}
	regexpr=/(^[Tt]he\s+|^[aA]\s+)/;
	if( str.match(regexpr)!=null ) {str=str.replace(regexpr,"");}
	var p=str.charAt(0);
	var q=p.toLocaleUpperCase( );
	str=str.replace(p,q);
	return str;
	}