var table;
var rows = new Array();

var DROPDOWN_MAX_LENGTH = 50;

var dd = null;
var dd_el = null;
var timer = null;
var timer2 = null;

function el_top(el) {
	var top = new Number(0);
	var elp = el;
	while (elp) {
		top += new Number(elp.offsetTop);
		elp = elp.offsetParent;
	}
//	top -= document.body.scrollTop;
	return new Number(top);
}

function el_left(el) {
	var left = new Number(0);
	var elp = el;
	while (elp) {
		left += new Number(elp.offsetLeft);
		elp = elp.offsetParent;
	}
	return new Number(left);
}

function el_width(el) {
	return new Number(el.offsetWidth);
}

function el_height(el) {
	return new Number(el.offsetHeight);
}

// function dd_show(HTMLElement, OptionsArray, Column, FullSearch, IgnoreCase);
function dd_show(el, options, col, fs, ic) {
  var i, st, inc, inp;

	if (!el || !options) return;
	if (!el.value.length) {
		dd_hide();
		return;
	}
	if (!col) col = 0;
	if (!fs) fs = 0;
	if (!ic) ic = 0;

	dd_el = el;

	inp = ic ? el.value.toUpperCase() : el.value;
	// Clear list
	while (dd.options.length) dd.options[0] = null;
	for (i = 0; (i < options.length) && (dd.length < DROPDOWN_MAX_LENGTH); i++) {
		inc = false;
		st = ic ? options[i][col].toUpperCase() : options[i][col];
//		alert(st + ' - ' + inp);
		if (fs) {
			if (st.indexOf(inp) != -1) inc = true;
		}else{
			if (!st.indexOf(inp)) inc = true;
		}
		if (inc) dd.options[dd.options.length] = new Option(options[i][0] + ' - ' + options[i][1], i);
	}
	dd.selectedIndex = -1;

	dd.style.left = el_left(el);
	dd.style.top = (el_top(el) + el_height(el)) + 'px';
	dd.style.width = el_width(el);
	dd.style.display = 'block';
}

function dd_hide() {
	clearTimeout(timer);
	timer = null;
	dd.style.display = 'none';
	dd_el = null;
}

function dd_click() {
	if ((dd.selectedIndex > -1) && (dd.selectedIndex < dd.length)) {
		dd_callback(dd_el, dd[dd.selectedIndex].value);
		dd_hide();
	}
}

function doblur(el) {
	if ((el == dd) || (el == dd_el)) {
		timer = setTimeout('dd_hide();', 100);
	}
}

function dofocus(el, options, col, fs, ic) {
	if ((el == dd) || (el == dd_el)) {
		clearTimeout(timer);
		timer = null;
	}else{
		dd_hide();
		if (el.value) dd_show(el, options, col, fs, ic);
	}
}

function dd_callback(el, id) {
	document.getElementById('pid').value = options[id][2];
	document.getElementById('value').value = options[id][0];
	document.getElementById('text').value = options[id][1];
	document.getElementById('qty').value = '';
	document.getElementById('qty').focus();
}


function init() {
	var i;
	table = document.getElementById('table');
	dd = document.getElementById('dropdown');
	cart_init();
}

function table_addrow(pid, code, desc, qty) {
	var i;
	var j;
	var row;
	var cell;
	var el;

	for (i = 0; i < rows.length; i++) {
		if (rows[i][4] == pid) {
			if (cell = rows[i][3].childNodes[2]) {
				if (el = cell.childNodes[0]) {
					j = new Number(el.value) + new Number(qty);
					el.value = j;
					rows[i][2] = j;
					return;
				}
			}
		}
	}

	row = document.createElement('TR');
	// Code
	cell = document.createElement('TD');
	cell.innerHTML = code;
	row.appendChild(cell);
	// Desc
	cell = document.createElement('TD');
	cell.innerHTML = desc;
	row.appendChild(cell);
	// Qty
	cell = document.createElement('TD');
	cell.innerHTML = '<INPUT type="text" value="'+qty+'" style="width:100%" />';
	row.appendChild(cell);
	// Delete
	cell = document.createElement('TD');
	cell.innerHTML = '<INPUT type="button" value="delete" style="width:50%" onclick="javascript:table_delete('+pid+');"/>';
	cell.setAttribute('align', 'center');
	row.appendChild(cell);
	// Adding row
	table.appendChild(row);
	rows[rows.length] = new Array(code, desc, qty, row, pid);
}

function table_add() {
	var el = null;
	var pid = '';
	var code = '';
	var desc = '';
	var qty = 0;
	if (el = document.getElementById('pid')) {
		pid = el.value;
	}
	if (el = document.getElementById('value')) {
		code = el.value;
	}
	if (el = document.getElementById('text')) {
		desc = el.value;
	}
	if (el = document.getElementById('qty')) {
		qty = new Number(el.value);
	}
	if (pid) {
		if (qty > 0) {
			table_addrow(pid, code, desc, qty);
			document.getElementById('pid').value = '';
			document.getElementById('value').value = '';
			document.getElementById('text').value = '';
			document.getElementById('qty').value = '';
			document.getElementById('value').focus();
		}else{
			alert('Please select product and quantity.');
			document.getElementById('qty').focus();
		}
	}else{
		alert('Please select product and quantity.');
		document.getElementById('value').focus();
	}
}

function table_delete(pid) {
	var i;
	for (i = 0; i < rows.length; i++) {
		if (rows[i][4] == pid) {
			if (confirm('Delete '+rows[i][1]+' from cart?')) {
				table.removeChild(rows[i][3]);
				rows.splice(i, 1);
				return;
			}else{
				return;
			}
		}
	}
	alert('Internal error: product not found.');
}

function dosubmit() {
	if (!rows.length) {
//		alert('Cannot proceed with an empty cart.');
		return false;
	}
	var i;
	var cell;
	var el;
	var code = new Array();
	var qty = new Array();
	for (i = 0; i < rows.length; i++) {
		if (cell = rows[i][3].childNodes[2]) {
			if (el = cell.childNodes[0]) {
				code[code.length] = rows[i][4];
				qty[qty.length] = el.value;
			}
		}
	}
	document.f.Prod.value = code.join();
	document.f.Qty.value = qty.join();
}
