String.prototype.pad = function(l, s, t){
    return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length) + 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2)) + this + s.substr(0, l - t) : this;
};
function doInventory(){
	tree.deleteChildItems(0);  
	var ProcessInventory = txt2csv(document.getElementById('rawInv').value);
	if (ProcessInventory.length > 0) {
		tree.loadCSVString(ProcessInventory);
		alert('Loading complete');
	}
	return true;
}
function doTotal(id,state) {
	CheckedCSV = "";
	var Total = 0, value = 0;
	var list = tree.getAllChecked();
	var a = list.split(",");
	if (list.length != 0) {
		for (var b=0; b<a.length; b++) {
			var userText = tree.getItemText(a[b]);
			if (userText.lastIndexOf(")") > 0 ) {
				value = userText.substr(userText.lastIndexOf(")")+2);
				value = value.replace(/ PED/,"");
				value = value.replace(/ */,"");
				CheckedCSV += userText.substr(0,userText.indexOf("_")-1)+",";
				var eol = userText.substr(userText.search(/\([0-9]*\)/)+1);
				eol = eol.replace(/\) */,",");
				eol = eol.replace(/ PED/,"");
				CheckedCSV += eol+"\n";
			} else { 
				value = 0;
				CheckedCSV += userText+"\n";
			};
			Total += Number(value);
		}
	}
	document.getElementById("value").value=Total.toFixed(2);
	document.getElementById('csvInv').value=CheckedCSV;
	return true;
}
function txt2csv(txt) {
	var RegT = /([0-9]+)\s+(.+)\s+([0-9]+)\s+([0-9]+.[0-9]+) PED\s+.+\(([0-9]+)\)$/; // contained within something else
	//var RegCs = /([0-9]+)\s+(.+)\s+([0-9]+)\s+([0-9]+.[0-9]+) PED\s+(.+ \([A-Za-z]+\))$/; // contained within something else
	var RegC = /([0-9]+)\s+(.+)\s+([0-9]+)\s+([0-9]+.[0-9]+) PED\s+(.+)/;	// top level container match
	var CsvString = "";
	var PreString = "";
	var TopLevel = new Array();
	var TopNum = 99999900;
	var lines = txt.split("\n");
	for(var i=0; i<lines.length; i++) {
	   if (lines[i].match(/^\d/)) {
			var SC = 0;
			if (lines[i].match(/PED\s*$/)) {	// some items have no top-level container 
				lines[i] = lines[i] + "[***UNKNOWN***]";
			}
			lines[i] = lines[i].replace(/\s$/g,"");
			lines[i] = lines[i].replace(/ $/g,"");
			var fields = lines[i].replace(RegC,"$1,$2,$3,$4,$5");
			R1=RegExp.$1;	R2=RegExp.$2;	R3=RegExp.$3;	R4=RegExp.$4;	R5=RegExp.$5;
			if (RegExp.$5.match(/\([0-9]+\)$/) || RegExp.$5.match(/\([0-9]+\).$/) ) {	// good match has no ) at end
				SC = 1;
				fields = lines[i].replace(RegT,"$1,$2,$3,$4,$5");
				R1=RegExp.$1;	R2=RegExp.$2;	R3=RegExp.$3;	R4=RegExp.$4;	R5=RegExp.$5;
			}
			Par = R5;
			if (!(R5 in TopLevel) && SC != 1) {
				TopNum++;
				TopLevel[R5] = TopNum; 
				Par = TopNum;
			} else {
				if (R5 in TopLevel) 
					Par = TopLevel[R5];
			}
			id = R1.replace(/ /,""); // remove extra space in item id
			R2 = R2.replace(/,/g,";"); // change comma to semi-colon in item name
			qt = "("+R3.replace(/ /,"")+")"; // remove extra space and wrap in ()
			CsvString += id+","+Par+","+R2.pad(60,"_",1)+qt.pad(7,"_",0)+"  "+R4+"\n";
	   }
	}
	for (x in TopLevel) {
		PreString += TopLevel[x]+",0,"+x+"\n";
	}
	if(PreString == "") {
		var ErrString = "PROBLEM: No top-level containers (STORAGE,CARRIED,etc).";
		ErrString += "\nAre you sure you've pasted Entropia Inventory\n into the box on the left?";
		document.getElementById('csvInv').value=ErrString;
		alert("Inventory parsing failed.");
	}
	CsvString = PreString+CsvString;
	//document.getElementById('csvInv').value=CsvString;
	return CsvString;

}
var dhxLayout;
function doOnLoad() {
	dhxLayout = new dhtmlXLayoutObject(document.body,"3E","dhx_black");
	dhxLayout.cells("a").setHeight(100);
	dhxLayout.cells("b").setHeight(230);
    dhxLayout.cells("a").fixSize(true,true);
	dhxLayout.cells("a").setText("Entropia Inventory Treeview");
	dhxLayout.cells("b").setText("Inventory");
	dhxLayout.cells("c").setText("Treeview");
	dhxLayout.cells("a").attachObject("info");
	dhxLayout.cells("b").attachObject("inv");
	dhxLayout.cells("c").attachObject("treeboxbox_tree");
}
 
