/*
 * Copyright © IntraSoft 2005 - 2007. All rights reserved.
 * http://www.intrasoft.com.au/
 */

var SEARCH_DELAY = 200;
var popupWindow;
var timerId = "";
var fieldHelp = "Enter a printer or cartridge name...";
var finderHasFocus = false;
var text_now = "";
var text_previous = "";
var text_searched = "";
var text_searched_internal = "";
var automaticSearchTerm = "";
var result_html = "";

var manufacturer = [];
var printer = [];
var cartridge = [];
var cartridges = [];
var cartridgeAlias = [];
var cartridgeAliases = [];
//var product = [];

var alternateNames = [];
// Allow for some common misspellings and alternate spellings
alternateNames['colour'] = 'color';
alternateNames['color'] = 'colour';
alternateNames['cannon'] = 'canon';
alternateNames['epsom'] = 'epson';
alternateNames['hewlett'] = 'hp';
alternateNames['packard'] = 'hp';

function pause(numberMillis)
{
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true)
	{
		now = new Date();
		if (now.getTime() > exitTime)
		{
			return;
		}
	}
}

var startTime = null;
var lastTime = null;
var endTime = null;
function log(text)
{
	// Write to Firefox Firebug console
	if (navigator.userAgent.indexOf("Firefox") != -1 && typeof console != "undefined")
	{
		if (! startTime)
		{
			startTime = new Date();
			lastTime = startTime;
			endTime = startTime;
		}
		else
		{
			endTime = new Date();
		}
		console.log((endTime - startTime) + ':' + (endTime - lastTime) + ': ' + text);
		lastTime = endTime;
	}
}

/*
// For IE5
function pause(milliseconds)
{
 var dialogScript = 'window.setTimeout(' + ' function () { window.close(); }, ' + milliseconds + ');';
 var result = window.showModalDialog('javascript:document.writeln(' + '"<script>' + dialogScript + '<' + '/script>")');
}
*/
function setWindowSize(x, y)
{
	window.resizeTo(x, y);
}

function startTimer(f, interval)
{
	if (interval > 0)
	{
		timerId = setTimeout(f, interval);
	}
}

function stopTimer()
{
	clearTimeout(timerId);
}

function windowResize()
{
	var e = null;

	e = document.getElementById('help');
	if (e)
	{
		if (e.style.visibility == 'visible')
		{
			setPosition("search_criteria", "help", 3, 1, 0, 2, 0, 0);
		}
	}

	e = document.getElementById('results');
	if (e)
	{
		if (e.style.visibility == 'visible')
		{
			setPosition("search_criteria", "results", 3, 1, 0, 2, 0, 0);
		}
	}
}

function popup(url)
{
	popupWindow = window.open(url,'finder','height=400,width=200');
	if (window.focus)
	{
		popupWindow.focus();
	}
}

function loadPage(url)
{
	if (opener)
	{
		opener.parent.location = url;
		window.close();
	}
	else
	{
		window.location = url;
	}
}

function trim(text)
{
	return text.replace(/^\s+/, "").replace(/\s+$/, "");
//	return text.replace(/^\s*(.*?)\s*$/, "$1");
}

/*
	OVRAW:  Search keywords (entered by visitor)
	OVKEY:  Campaign keywords (entered by site owner)
	OVMTC:  Match type (Content, Standard, and Advanced)
	OVADID: 10 digits
	OVKWID: 12 digits
*/
function automaticSearch()
{
	var data = window.location.search;
	var dc = document.cookie;
	var searchTerm = "";
	var att	= [];
	var kv1;
	var kv2;

	if (typeof data !== "undefined" && data.length > 0)
	{
		// Split query string
		data = data.split(/[?&]/);
		for (var a in data)
		{
			if (data[a].length > 0)
			{
				// Split keyword and value pairs
				kv1 = data[a].split('=');
				if (kv1.length === 2 && kv1[0].length > 0 && kv1[1].length > 0)
				{
					switch (kv1[0].toLowerCase())
					{
						// Yahoo Search Marketing
						case 'ovraw':
							searchTerm = kv1[1];
							break;
						case 'ovraw':
							break;
						case 'ovmtc':
							break;
						case 'ovadid':
							break;
						case 'ovkwid':
							break;
						default:
							break;
					}
				}
			}
		}
	}
	else if (typeof dc !== "undefined" && dc.length > 0)
	{
		data = dc.split(';');
		for (var a in data)
		{
			if (data[a].length > 0)
			{
				// Split keyword and value pairs
				kv1 = data[a].split('=');
				if (kv1.length === 2 && kv1[0].length > 0 && kv1[1].length > 0)
				{
					switch (kv1[0].toLowerCase())
					{
						// Google adWords
						case '__utma':
							break;
						case '__utmb':
							break;
						case '__utmc':
							break;
						case '__utmz':
							kv2 = kv1[1].split('|');
							if (kv2.length === 2 && kv2[0].length > 0 && kv2[1].length > 0)
							{
								// This code is incomplete. Need to at least get official documentation for all options and decide what to do
								switch (kv2[0].toLowerCase())
								{
									case 'utmccn':
										break;
									case 'utmcsr':
										break;
									case 'utmcct':
										break;
									case 'utmcmd':
										break;

									case 'utmctr':
										searchTerm = kv2[1];
										break;
									default:
										break;
								}
							}
							break;
						default:
							break;
					}
				}
			}
		}
	}

	automaticSearchTerm = unescape(searchTerm);
}

// item is ProductGroupId ???
function go(item, printerId)
{
	if (item)
	{
		// Log search string
		httpRequest("asp/log_finder.asp?" + escape(text_searched_internal+ "\t" + printer[printerId][1]));

		// Go to location
/* No longer required
		if (printerId === 313)
		{
			// Special case - HP printer page
			window.location = "hp.htm";
		}
		else if (printerId === 314)
		{
			// Special case - Lexmark printer page
			window.location = "lexmark.htm";
		}
		else
		{
			window.location = "cartridges.asp?g=" + item + "&p=" + printerId;
		}
*/
		window.location = "cartridges.asp?g=" + item + "&p=" + printerId;
	}
}

function goSelect(o)
{
	var x = o.options[o.selectedIndex].value.split(',');
	go(x[0], x[1]);
}

/*
function getElementPosition(elemID)
{
	var offsetTrail = document.getElementById(elemID);
	var offsetLeft = 0;
	var offsetTop = 0;
	while (offsetTrail)
	{
		offsetLeft += offsetTrail.offsetLeft;
		offsetTop += offsetTrail.offsetTop;
		offsetTrail = offsetTrail.offsetParent;
	}
	if (navigator.userAgent.indexOf("Mac") !== -1 && typeof document.body.leftMargin !== "undefined")
	{
		offsetLeft += document.body.leftMargin;
		offsetTop += document.body.topMargin;
	}
	return {left:offsetLeft, top:offsetTop};
}
*/

function showResults()
{
	if (result_html)
	{
		elementHide("help");
		setPosition("search_criteria", "results", 3, 1, 0, 2, 0, 0);
		elementShow("results");
	}
	else
	{
		elementHide("results");
		setPosition("search_criteria", "help", 3, 1, 0, 2, 0, 0);
		elementShow("help");
	}
}

function hideResults()
{
	elementHide("help");
	elementHide("results");
}

function search_start()
{
	stopTimer();
// Pass functions not strings: http://dev.opera.com/articles/view/efficient-javascript/?page=2#timeouts
	startTimer(search_evaluate, SEARCH_DELAY);
}

function search_evaluate()
{
	var search_field = null;

	stopTimer();

	// Find the search criteria field
	search_field = document.getElementById('search_criteria');

	// Get content of search criteria field
	text_now = search_field.value;

//	text_now = search_field.value;
//	if (typeof search_field === "undefined")
//	{
//		text_now = "";
//		return;
//	}

	if (typeof text_now === "undefined")
	{
		text_now = "";
	}
/*
	if (text_now === fieldHelp)
	{
		text_now = "";
		search_field.value = "";
	}
*/
	if (text_now !== text_previous)
	{
		text_previous = text_now;
		search_start(search_field);
		return;
	}

	if (text_now === text_searched)
	{
		// Display previous results
		// (No action required because they are already being displayed)
		return;
	}
	
	text_searched = text_now;

	// Remove leading and trailing whitespace
	text_searched_internal = trim(text_searched);

	if (text_searched_internal.length === 0)
	{
		result_html = "";
		elementUpdate("results", result_html);
		elementHide('indicator1');
	}
	else
	{
		elementShow('indicator1');
		startTimer(search_execute, 10);
	}
	showResults();
}



/*
ISSUES:
2. Result window displayed when already displayed?
3. elementUpdate call is 230ms for "s" search
4. search_execute call is 210ms for "s" search
5. Results window should hide option fields
*/

function search_execute()
{
	var re = null;
	var m = [];
	var matches = [];
	var results = "";
	var originalTerms = "";

	stopTimer();

	// Search for printers and cartridges
	// Split search criteria into separate terms
	// Everything except letters and numbers is treated as whitespace
	originalTerms = text_searched_internal.toLowerCase().split(/[^a-z0-9]+/i);

	// Store terms in associative array, hence removing duplicates
	var oterms = [];
	for (var t in originalTerms)
	{
		if (originalTerms[t].length > 0)
		{
			oterms[originalTerms[t]] = originalTerms[t];
		}
	}

	// Replace some search terms with alternatives
	var terms = [];
	var term = "";
	for (var t in oterms)
	{
		term = t;
		if (t.length > 1)
		{
			for (var n in alternateNames)
			{
				if (n.indexOf(t) !== -1)
				{
					term = alternateNames[n];
					break;
				}
			}
		}
		terms[term] = term;
	}

	// Construct regular expression from terms: (term1|term2|term3)
	var term_count = 0;
	re = "";
	for (var t in terms)
	{
		if (re.length > 0)
		{
			re += "|";
		}
		re += terms[t];
		term_count++;
	}

	result_html = '';

	if (re.length === 0)
	{
		// If the regular expression length is zero, there were no valid search terms
//		result_html = '<span class="message">Please enter only </span><span class="message-highlight">letters, numbers and spaces.</span>';
		elementUpdate("result_message", '<span class="message">Please enter only </span><span class="message-highlight">letters, numbers and spaces.</span><br><br>');
	}
	else
	{
		 re = new RegExp("(" + re + ")", "gi");

		//
		var uniques;
		var result;
		var text;

		for (var i in printer)
		{
			// Search for RE matches in printer, cartridge and cartridge alias names
			text = printer[i][1] + ' ' + cartridges[i]  + ' ' + cartridgeAliases[i];

			// Store matched terms in associative array to remove any duplicates
//			while ((result = re.exec(searchText[i])) !== null)
			uniques = [];
			while ((result = re.exec(text)) !== null)
			{
				uniques[result[0].toLowerCase()] = "";
			}

			// Count matches found
			var c = 0;
			for (var t in uniques)
			{
				c++;
			}

			// If the number of unique matches found equals the number of search terms, an overall match has been found
			if (c === term_count)
			{
				// Save the printer ID
				m.push(i);
			}
		}

		// Display RE for debugging
		//result_html += re + '<br>';

		switch (m.length)
		{
			case 0:
//				result_html += '<img src="images/ie/2/24x24/plain/printer_delete.gif">&nbsp;&nbsp;No printer or cartridge names match <span class="message-information-highlight">' + text_searched_internal + '</span>';
				elementUpdate("result_message", '<img src="images/ie/2/24x24/plain/printer_delete.gif">&nbsp;&nbsp;No printer or cartridge names match <span class="message-information-highlight">' + text_searched_internal + '</span><br><br>');
				break;
			case 1:
				result_html += '<img src="images/ie/2/24x24/plain/printer_ok.gif">&nbsp;&nbsp;' + m.length + ' match';
				elementUpdate("result_message", '');
				break;
			default:
				result_html += '<img src="images/ie/2/24x24/plain/printer_ok.gif">&nbsp;&nbsp;' + m.length + ' matches';
				elementUpdate("result_message", '');
				break;
		}

		if (result_html)
		{
			result_html = '<span class="message-information">' + result_html + '</span><br><br>';
		}

		// If any matches were found
		if (m)
		{
			var printer_text = "";
			var cartridge_text = "";
			var cartridge_alias_text = "";
			result = "";

			// Build the result HTML
			// &raquo;  right-pointing double angle quotation mark
			// &deg;    degree sign
			// &middot; middle dot
			for (var i in m)
			{
				printer_text = '<span class="printer">' + printer[m[i]][1].replace(re, '<b>$&</b>') + '</span>';
				cartridge_text = '<span class="cartridge">&nbsp;' + cartridges[m[i]].replace(re, '<b>$&</b>') + '</span>';
				cartridge_text = cartridge_text.replace(/\|/g, '<br>&nbsp;');
				//cartridge_text = '<span class="cartridge">&middot; ' + cartridges[m[i]].replace(re, '<b>$&</b>') + '</span>';
				//cartridge_text = cartridge_text.replace(/\|/g, '<br>&middot; ');

				if (cartridgeAliases[m[i]].length === 0)
				{
					cartridge_alias_text = '';
				}
				else
				{
					//cartridge_alias_text = '<span class="cartridge-alias">&middot; ' + cartridgeAliases[m[i]].replace(re, '<b>$&</b>') + '</span>';
					//cartridge_alias_text = cartridge_alias_text.replace(/\|/g, '<br>&middot; ');
					cartridge_alias_text = '<span class="cartridge-alias">&nbsp;' + cartridgeAliases[m[i]].replace(re, '<b>$&</b>') + '</span>';
					cartridge_alias_text = cartridge_alias_text.replace(/\|/g, '<br>&nbsp;');
				}

				if (typeof printer[m[i]][0] !== "undefined")
				{
					result_html += '<a href="javascript:go(' + printer[m[i]][0] + ',' + m[i] + ');">' + printer_text + '</a><br>' + cartridge_text + '<br>';
					if (cartridge_alias_text.length > 0)
					{
						result_html += cartridge_alias_text + '<br>';
					}
				}
			}
		}
	}

	elementUpdate("results", result_html);
	showResults();


	if (m.length === 0)
	{
		// No matches found
		elementHide('indicator1');
	}
	else
	{
		// One or more matches found
		elementHide('indicator1');
	}
}

function bodyFocus()
{
	var e = null;

	if (finderHasFocus)
	{
		finderHasFocus = false;
	}
	else
	{
		e = document.getElementById('search_criteria');
		if (e)
		{
			if (e.value.length === 0)
			{
				e.value = fieldHelp;
			}
		}

		hideResults();
		elementShow('select-table');
	}
}

function finderFocus()
{
	var e = null;

	if (! finderHasFocus)
	{
		finderHasFocus = true;
		e = document.getElementById('search_criteria');
		if (e)
		{
			e.focus();
	
			if (e.value === fieldHelp)
			{
				e.value = "";
			}
		}
		elementHide('select-table');
		showResults();
	}
}

// Reference 1, 2, 3, 4 = top-left, top-right, bottom-left, bottom-right
function setPosition(baseElemID, posElemID, baseReference, posReference, xOffset, yOffset, xSize, ySize)
{
		var baseElem = document.getElementById(baseElemID);
		var posElem = document.getElementById(posElemID);

		var offsetTrail = baseElem;
		var offsetLeft = 0;
		var offsetTop = 0;

		// account for IE 6 CSS compatibility mode
		while (offsetTrail)
		{
				offsetLeft += offsetTrail.offsetLeft;
				offsetTop += offsetTrail.offsetTop;
				offsetTrail = offsetTrail.offsetParent;
		}
		if (navigator.userAgent.indexOf("Mac") !== -1 &&
				typeof document.body.leftMargin !== "undefined")
		{
				offsetLeft += document.body.leftMargin;
				offsetTop += document.body.topMargin;
		}

		switch (baseReference)
		{
		case 1:
			offsetLeft += xOffset;
			offsetTop += yOffset;
			break;
		case 2:
			offsetLeft += baseElem.offsetWidth + xOffset;
			offsetTop += yOffset;
			break;
		case 3:
			offsetLeft += xOffset;
			offsetTop += baseElem.offsetHeight + yOffset;
			break;
		case 4:
			offsetLeft += baseElem.offsetWidth + xOffset;
			offsetTop += baseElem.offsetHeight + yOffset;
			break;
		default:
			break;
		}

		switch (posReference)
		{
		case 1:
			posElem.style.left = offsetLeft + "px";
			posElem.style.top = offsetTop + "px";
			break;
		case 2:
			posElem.style.left = offsetLeft - posElem.offsetWidth + "px";
			posElem.style.top = offsetTop + "px";
			break;
		case 3:
			posElem.style.left = offsetLeft + "px";
			posElem.style.top = offsetTop - posElem.offsetHeight + "px";
			break;
		case 4:
			posElem.style.left = offsetLeft - posElem.offsetWidth + "px";
			posElem.style.top = offsetTop - posElem.offsetHeight + "px";
			break;
		default:
			posElem.style.left = offsetLeft + "px";
			posElem.style.top = offsetTop + "px";
			break;
		}

		if (xSize > 0)
		{
			posElem.offsetWidth = xSize;
		}

		if (xSize > 0)
		{
			posElem.offsetHeight = ySize;
		}

//window.status = posElem.style.left + ',' + posElem.style.top;
/*
Center
		posElem.style.left = offsetLeft + parseInt(baseElem.offsetWidth/2) -
				parseInt(posElem.offsetWidth/2) + "px"
		posElem.style.top = offsetTop + parseInt(baseElem.offsetHeight/2) -
				parseInt(posElem.offsetHeight/2)+ "px"
*/
}


////////////////////////////////////////////////////////////////////////////////
function loadFinderData()
{
	fieldUpdate('search_criteria', 'Loading data - please wait...');
	elementDisable('search_criteria');
	elementCursor('search_criteria', 'wait');

	xmlFile = httpRequest("asp/client_data.asp?type=2", prepareFinderData);
}

function prepareFinderData(xmlFile)
{
	var data;
	var pid;

	if (xmlFile=== null)
	{
		fieldUpdate('search_criteria', 'Failed to load data. Please reload page.');
		return;
	}

	fieldUpdate('search_criteria', 'Preparing data - please wait...');
	elementDisable('search_criteria');
	elementCursor('search_criteria', 'wait');

	/*
	if (xmlFile)
	{
		data = xmlFile.split(/[\t\n]/);

		var j = 0;
		var html = "";
		for (var i = 0; i < data.length; i += 3)
		{
			if (data[i+2])
			{
				html = '"' + data[i+2] + '"';
				if (data[i+0])
				{
					html += "<br><i>" + data[i+0];

					if (data[i+1])
					{
						html += ", " + data[i+1] + ".";
					}
					html += "</i>";
				}
				// SHOULD ENCODE DATA TO STOP HTML PROBLEMS???
				tickercontents[j] = html;
				j++;
			}
		}
	}
	*/

	// Parse and store manufacturer data
	// ManufacturerId, ManufacturerName
	data = xmlFile.documentElement.childNodes.item(0 * nodeIndex + nodeStart).childNodes.item(nodeItem).nodeValue.split(",");
	data.pop();
	for (var i = 0; i < data.length; i += 2)
	{
		// Manufacturer ID, manufacturer name
		if (typeof data[i] !== "undefined")
		{
			manufacturer[data[i]] = data[i + 1];
		}
	}

	// Parse and store printer data
	// PrinterId, ProductGroupId, ManufacturerId, PrinterName
	data = xmlFile.documentElement.childNodes.item(1 * nodeIndex + nodeStart).childNodes.item(nodeItem).nodeValue.split(",");
	data.pop();
	for (var i = 0; i < data.length; i += 4)
	{
		// PrinterId
		pid = data[i];
		printer[pid] = [];
		// ProductGroupId
		printer[pid][0] = data[i + 1];
		// Manufacturer and model
//		printer[pid][1] = data[i + 2] + " " + data[i + 3];
		printer[pid][1] = manufacturer[data[i + 2]] + " " + data[i + 3];
		cartridge[pid] = [];
		cartridges[pid] = "";
		cartridgeAlias[pid] = [];
		cartridgeAliases[pid] = "";


	}

	// Parse and store cartridge data
	// PrinterId, CartridgeName
	data = xmlFile.documentElement.childNodes.item(2 * nodeIndex + nodeStart).childNodes.item(nodeItem).nodeValue.split(",");
	data.pop();
	for (var i = 0; i < data.length; i += 2)
	{
		// Cartridge ID, cartridge name
		// This test is required only when the Visible flag is used in ProductGroup
		if (typeof cartridge[data[i]] !== "undefined")
		{
			cartridge[data[i]].push(data[i + 1]);
		}
	}

	// Parse and store cartridge alias data
	// PrinterId, CartridgeAliasName
	data = xmlFile.documentElement.childNodes.item(3 * nodeIndex + nodeStart).childNodes.item(nodeItem).nodeValue.split(",");
	data.pop();
	for (var i = 0; i < data.length; i += 2)
	{
		// This test is required only when the Visible flag is used in ProductGroup
		if (typeof cartridge[data[i]] !== "undefined")
		{
			cartridgeAlias[data[i]].push(data[i + 1]);
		}
	}

	// Construct cartridge group strings
	var c;
	for (var i in cartridge)
	{
		c = 0;
		for (var j in cartridge[i])
		{
			if (c > 0 && (c % 4) === 0)
			{
				cartridges[i] += "|";
			}
			else
			{
				if (c > 0)
				{
					cartridges[i] += " ";
				}
			}
			cartridges[i] += cartridge[i][j];
			c++;
		}
	}

	// Construct cartridge group alias strings
	var c;
	for (var i in cartridgeAlias)
	{
		c = 0;
		for (var j in cartridgeAlias[i])
		{
			if (c > 0 && (c % 4) === 0)
			{
				cartridgeAliases[i] += "|";
			}
			else
			{
				if (c > 0)
				{
					cartridgeAliases[i] += " ";
				}
			}
			cartridgeAliases[i] += cartridgeAlias[i][j];
			c++;
		}
	}

/*
	// Construct search data strings
	var searchText = [];
	for (var i in printer)
	{
		searchText[i] = printer[i][1] + ' ' + cartridges[i]  + ' ' + cartridgeAliases[i];
	}
*/

	elementEnable('search_criteria');
	if (automaticSearchTerm.length === 0)
	{
		fieldUpdate('search_criteria', fieldHelp);
	}
	else
	{
		fieldUpdate('search_criteria', automaticSearchTerm);
		search_start();
		finderFocus();
	}
	elementCursor('search_criteria', 'auto');

	prepareSelectorData();
}

function prepareSelectorData()
{
	var s;
	var html = '';
	var make = '';
	var productGroupIds = null;
	var printerIds = null;
	var printerNames = null;
	var printerName = '';
	var selectorData = [];
	var k = [];

	var t = document.getElementById('select-table');

	if (t === null)
	{
//		window.status = text;
//		alert("Cannot find id=\""+ id + "\" in web page HTML");
	}
	else
	{
/* NOT FINISHED
   LIST OF CARTRIDGES
   BUT CARTRIDGE CAN APPEAR ON MULTIPLE PAGES
   NOT SURE OF SOLUTION
		for (var i in cartridge)
		{
					s = printer[i][1].indexOf(' ');
					make = printer[i][1].substring(0, s);
					printerName = cartridge[i];

			if (typeof selectorData[make] === "undefined")
			{
				k.push(make);
				selectorData[make] = [];
				selectorData[make][0] = [];
				selectorData[make][1] = [];
				selectorData[make][2] = [];
			}
			selectorData[make][0].push(printer[i][0]);
			selectorData[make][1].push(i);
			selectorData[make][2].push(printerName);
		}
		selectorData = [];
*/
		for (var i in printer)
		{
			s = printer[i][1].indexOf(' ');
			make = printer[i][1].substring(0, s);
			printerName = printer[i][1].substring(s + 1);

			if (make !== '')
			{
				if (typeof selectorData[make] === "undefined")
				{
					k.push(make);
					selectorData[make] = [];
					selectorData[make][0] = [];
					selectorData[make][1] = [];
					selectorData[make][2] = [];
				}
				selectorData[make][0].push(printer[i][0]);
				selectorData[make][1].push(i);
				selectorData[make][2].push(printerName);
			}
		}

		var tb;
		var tr;
		var td1;
		var td2;
		var s;
		var text;
		var b;

		k.sort();
		for (var i in k)
		{
			tb = document.createElement('tbody');
			tr = document.createElement('tr');
			td1 = document.createElement('td');
			td2 = document.createElement('td');
			s = createOption(k[i], selectorData[k[i]][0], selectorData[k[i]][1], selectorData[k[i]][2]);
			s.onchange = function() { goSelect(this); };
			b = document.createElement('b');
			text = document.createTextNode(k[i]);
			td1.appendChild(b).appendChild(text);
			td2.appendChild(s);
			tr.appendChild(td1);
			tr.appendChild(td2);
			tb.appendChild(tr);
			t.appendChild(tb);
		}
	}
}

function createOption(manufacturer, productGroupIds, printerIds, printerNames)
{
	var s = document.createElement('select');
	var o = new Option('-', '0');

	s.options[0] = o;
	for (var i = 0; i < printerIds.length; i++)
	{
		o = new Option(printerNames[i], productGroupIds[i]+ ',' + printerIds[i]);
		s.options[i + 1] = o;
	}

	return s;
}
