function browserWindowManager(){
	
	this.svgDocumentFragment="";
	var _self = this;
	
	///////////////////////////////////////////////
	//
	// Private Functions:
	//
	///////////////////////////////////////////////
	function _createWindow(title,htmlString){
		
		var win = window.open('',title,'menubar=1,locationbar=0,statusbar=0,resizable=1' + ',scrollbars=1,width=800,height=500');
		win.document.open('text/html');
		win.document.write(htmlString);
		win.document.close();
		
		
	}
	
	function _pad(input,templateLength){
		
		while(input.length < templateLength)
			input += ' ';
		return input;
	}
	
	///////////////////////////////////////////////
	//
	// Public Functions:
	//
	///////////////////////////////////////////////
	this.printSVG = function(){
		
		_self.saveSVG(true);
		
	}
	
	this.saveSVG = function(printFlag){
		
		var range = document.createRange();
		range.selectNode(document.getElementsByTagName("svg").item(0));
		_self.svgDocumentFragment = range.cloneContents();
		var svgId = "pedigreeSVG";
		var html = '<html><head><script src="javascript/main--pedigree.js" type="text/javascript"></script></head>\n';
		html += '<body onload="copyNodeAndPrint(\'' + svgId + '\'';
		if(printFlag) html += ',true';
		html += ');">';
		html += '<div id="pedigreeSVG"></div>\n';
		html += '<\/body></\html>';
		_createWindow('SVG Drawing',html);
		
	}
	
	this.saveAs = function(id){
		
		var node = document.getElementById(id);
		var html = '<html>\n';
		html += '<body>\n';
		html += '<div>\n' + node.innerHTML + '</div>\n';
		html += '<\/body>\n</\html>\n';
		_createWindow('Save As',html);
		
	}
	
	this.getTableInTabDelimitedFormat = function(id){
		
		var node;
		if(id) node = document.getElementById(id);
		else   node = document.getElementsByTagName("table").item(0);
		var thElements = node.getElementsByTagName("th");
		var numberOfColumns = thElements.length;
		var numberOfRows    = node.getElementsByTagName("tr").length - 1;
		var tdElements = node.getElementsByTagName("td");
		//var html = '<html>\n<body>\n';
		var html='';
		var i,j;
		html += '<pre>\n';
		for(i=0;i<numberOfColumns-1;i++)
			html +=  thElements[i].firstChild.nodeValue + '\t';
		html += thElements[i].firstChild.nodeValue + '\n';
		for(i=0;i<numberOfRows;i++){
			for(j=0;j<numberOfColumns-1;j++){
				html += tdElements[i*numberOfColumns+j].firstChild.nodeValue + '\t';
			}
			html += tdElements[i*numberOfColumns+j].firstChild.nodeValue;
			html += '\n';
		}
		html += '</pre>';
		_createWindow('Data Table',html);
	}
	
	this.getTableInMadelineFlatFormat = function(id){
		
		var node;
		if(id) node = document.getElementById(id);
		else   node = document.getElementsByTagName("table").item(0);
		var thElements = node.getElementsByTagName("th");
		var numberOfColumns = thElements.length;
		var numberOfRows    = node.getElementsByTagName("tr").length - 1;
		var tdElements   = node.getElementsByTagName("td");
		var html="";
		var i,j=0;
		html += '<pre>\n';
		for(i=0;i<numberOfColumns;i++)
			html +=  thElements[i].firstChild.nodeValue + '\n';
		html += '\n';
		for(i=0;i<numberOfRows;i++){
			html += _pad(tdElements[j++].firstChild.nodeValue,12);
			html += _pad(tdElements[j++].firstChild.nodeValue,12);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,12);
			html += _pad(tdElements[j++].firstChild.nodeValue,12);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,11);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,2);
			html += _pad(tdElements[j++].firstChild.nodeValue,32);
			html += _pad(tdElements[j++].firstChild.nodeValue,32);
			html += '\n';
		}
		html += '</pre>';
		
		_createWindow('Madeline Flat Format',html);
	}
	
	this.getTableInMadelineXMLFormat = function(id){
		
		var node;
		if(id) node = document.getElementById(id);
		else   node = document.getElementsByTagName("table").item(0);
		var thElements = node.getElementsByTagName("th");
		var numberOfColumns = thElements.length;
		var numberOfRows    = node.getElementsByTagName("tr").length - 1;
		var tdElements   = node.getElementsByTagName("td");
		var html="<pre>";
		var i,j=0;
		html += '&lt;?xml version="1.0" standalone="yes"?&gt;\n';
		html += '&lt;madeline-xml&gt;\n';
		html += ' &lt;table&gt;\n';
		html += '  &lt;row&gt;\n';
		for(i=0;i<numberOfColumns;i++)
			html +=  '   &lt;d&gt;' + thElements[i].firstChild.nodeValue + '&lt;/d&gt;\n';
		html += '  &lt;/row&gt;\n';
		for(i=0;i<numberOfRows;i++){
			html += '  &lt;row&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n'; 
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '   &lt;d&gt;' + tdElements[j++].firstChild.nodeValue + '&lt;/d&gt;\n';
			html += '  &lt;/row&gt;\r\n';
		}
		
		html += ' &lt;/table&gt;\n';
		html += '&lt;/madeline-xml&gt;\n';
		html += '</pre>\n';
		_createWindow('Madeline XML Format',html);
	}

}
