
var columnList = null;

function ExportListsheetData(sListsheetName)
{
	var sReturn = "";
	var rowCount = 0;
	
	// check for listsheet
	if (document.all[sListsheetName] == null)
	{
		alert("Listsheet '" + sListsheetName + "' not found");
		return null;
	}
	
	// get data island id
	var sDataIslandID = document.all[sListsheetName].DataXML;
	
	var oDataIsland = document.all[sDataIslandID];
	if (oDataIsland == null)
	{
		alert("Listsheet data island '" + sDataIslandID + "' not found");
		return null;
	}
	
	// get meta island id
	var sMetaIslandID = document.all[sListsheetName].MetaXML;
	
	var oMetaIsland = document.all[sMetaIslandID];
	if (oMetaIsland == null)
	{
		alert("Listsheet meta island '" + sMetaIslandID + "' not found");
		return null;
	}
	
	// load column names into global variable for isVisible function
	columnList = oMetaIsland.selectSingleNode("/listsheet/columns");

	// iterate over all records
	var nodeList = oDataIsland.selectNodes("/document/record");

	if (nodeList.length > 0)
	{
		if (confirm("Include header row?"))
		{
			sReturn = GetColumnNames() + "\r\n";
		}
	}
	
	for (var i = 0; i < nodeList.length; i++)
	{
		if (nodeList[i].childNodes.length > 0)
		{
			sReturn += GetSubNodeValues(nodeList[i]) + "\r\n";
			rowCount++;
		}
	}
	
	if (CopyToClipboard(sReturn))
	{
		alert(rowCount + " rows copied to the clipboard");
	}
}

function GetSubNodeValues(node)
{
	var sReturn = "";
	var subnodes = node.selectNodes("*");
	for (var i = 0; i < subnodes.length; i++)
	{
		if (!isVisible(subnodes[i].nodeName)) continue;
		sReturn += SafeData(subnodes[i].text) + "\t";
	}
	return sReturn.substr(0, sReturn.length - 1);
}

function GetColumnNames()
{
	var sReturn = "";
	var subnodes = columnList.selectNodes("//column[not(@hide)]");
	for (var i = 0; i < subnodes.length; i++)
	{
		sReturn += SafeData(subnodes[i].text) + "\t";
	}
	return sReturn.substr(0, sReturn.length - 1);
}

function isVisible(sColumnID, oMetaIsland)
{
	return (columnList.selectNodes("//column[@id='" + sColumnID + "' and not(@hide)]").length > 0);
}

function SafeData(sData)
{
//	sData = sData.replace(/"/g, " ");
	
//	if (isFinite(sData))
//	{
//		sData = " " + sData;
//	}
	
	return sData;
}

function CopyToClipboard(sData)
{
	try
	{
		window.clipboardData.setData("Text", sData);
		return true;
	}
	catch(e)
	{
		alert("Could not copy data to clipboard");
		alert(e.message);
		return false;
	}
}