var		g_Offset;
var		g_pos = 0;
var		ajax;

function noDrag ()
{
	event.cancelBubble = true;
	return false;
}
function MoveScroll (ev)
{
	if  (! ev)
		ev = event;

	SetScrollPos (ev.clientY-g_Offset);
}
function SetScrollPos (pos)
{
	var		ptr = document.getElementById ('ScrollPtr');
	var		rail = document.getElementById ('ScrollRail');
	
	rail = rail.clientHeight - ptr.clientHeight;

	pos = Math.max (pos, 0);
	pos = Math.min(pos, rail);
	
	//	0 >= pos <= rail
	g_pos = pos;
	ptr.style.top = pos+"px";
	
	var e = document.getElementById ('ScrollData');
	pos = pos * (e.scrollHeight - e.clientHeight) / rail;
	e.scrollTop = pos;
}

function EndScroll (ev)
{
	if  (! ev)
		ev = event;
	
	if  (window.detachEvent)
	{
		document.detachEvent ("onmousemove", MoveScroll);
		document.detachEvent ("onmouseup", EndScroll);
	}
	else if  (window.removeEventListener)
	{
		window.removeEventListener ("mousemove", MoveScroll, false);
		window.removeEventListener ("mouseup", EndScroll, false);
	}
}
function StartScroll (ev)
{
	if  (! ev)
		ev = event;

	var e = document.getElementById ('ScrollRail');

	g_Offset = ev.layerY ? ev.layerY : ev.offsetY;
	g_Offset += e.offsetParent.offsetTop;

	if  (window.attachEvent)
	{
		document.attachEvent ("onmousemove", MoveScroll);
		document.attachEvent ("onmouseup", EndScroll);
		return true;
	}
	else if  (window.addEventListener)
	{
		window.addEventListener ("mousemove", MoveScroll, false);
		window.addEventListener ("mouseup", EndScroll, false);
	}
	
	return false;
}
function MouseScroll (ev)
{
	var	delta = ev.detail ? ev.detail : -ev.wheelDelta;
	g_Offset = 0;
	delta = delta / Math.abs(delta);
	SetScrollPos (g_pos + delta * 20);
}
function TurnOnScroll ()
{
	var		e = document.getElementById ('ScrollData');
	
	if  (e && e.scrollHeight > e.clientHeight)
	{
		if  (! e.attachEvent)
			e.addEventListener ("DOMMouseScroll", MouseScroll, false);

		e = document.getElementById ('ScrollRail');
		while (e && e.tagName.toUpperCase () != 'TABLE')
			e = e.parentNode;
		if  (e)
		{
			e = e.getElementsByTagName ('IMG');
			for (var i = 0; i < e.length; i++)
				e [i].style.display = 'block';
		}
	}
}
function Purchase (product)
{
	var		qty = document.getElementById ('Qty_'+product);
	var		url = "AddCart.php?Product="+product+"&Qty="+qty.value;
	
	ajax = Ajax ();
	ShowAjax (qty);
	ajax.onreadystatechange = AjaxDone;
	ajax.open ('GET', url, true);
	ajax.send (null);
}
function ShowAjax (e)
{
	var		img = document.getElementById ('AjaxLoader');
	var		x = 0, y = 0;

	if  (e)
	{
		for (; e; e = e.offsetParent)
		{
			x += e.offsetLeft;
			y += e.offsetTop;
		}
	
		img.style.left = x;
		img.style.top = y;
		img.style.display = 'block';
	}
	else
	{
		img.style.display = 'none';	
	}
}
function ChangeQty ()
{
	//	Find the div
	var		e = document.getElementById ('Cart');	//	This contains all the quantities
	var		e = e.getElementsByTagName ('INPUT');
	
	for (var i = 0; i < e.length; i++)
		if  (e [i].id.substring (0, 4) == 'Qty_')
			Purchase (e [i].id.substring (4));
}
function ChangeState ()
{
	var		e = document.getElementById ('State');
	var		url = "AddCart.php?State="+e.value;
	
	ajax = Ajax ();
	ShowAjax (e);
	
	ajax.onreadystatechange = AjaxDone;
	ajax.open ('GET', url, true);
	ajax.send (null);
}

function ChangeZip ()
{
	var		e = document.getElementById ('Zip');
	var		url = "AddCart.php?Zip="+e.value;
	
	ajax = Ajax ();
	ShowAjax (e);
	
	ajax.onreadystatechange = AjaxDone;
	ajax.open ('GET', url, true);
	ajax.send (null);
}

function ChangeDiscount ()
{
	var		e = document.getElementById ('discountCode');
	var		url = "AddCart.php?Discount="+e.value;
	
	ajax = Ajax ();
	ShowAjax (e);
	
	ajax.onreadystatechange = AjaxDone;
	ajax.open ('GET', url, true);
	ajax.send (null);
}

function SameAddress (ev)
{
	var		sel = document.getElementsByName ('ShipToBilling')[0].checked;
	var		fields = new Array ('Month', 'Day', 'Year', 'AddrFirst', 'AddrLast', 'AddrCo',
								'AddrAddress', 'AddrAddress2', 'AddrCity', 'AddrState',
								'AddrZip', 'AddrPhone', 'AddrEmail');
	
	for (i = 0; i < fields.length; i++)
	{
		var inp = document.getElementsByName (fields [i]+'[]');
		var src = inp [0], e;
		for  (var d = 1; d < inp.length; d++)
		{
			e = inp [d];
			if  (sel)
			{
				e.value = src.value;
				e.readOnly = e.disabled = true;
			}
			else
			{
				e.readOnly = e.disabled = false;
			}
		}
	}
}

function SyncFields (src)
{
	if  (document.getElementsByName ('ShipToBilling')[0].checked)
	{
		var inp = document.getElementsByName (src.name);
		for  (var i = 0; i < inp.length; i++)
			if  (inp [i].readOnly)
				inp [i].value = src.value;
	}
}
function AjaxDone ()
{
	var fields = new Array ('Discount', 'Shipping', 'Handling', 'Tax', 'Total');
	var field_copy = new Array  ('State', 'Zip', 'Message');

	if  (ajax.readyState == 4)
	{
		if  (ajax.responseXML)
		{
			var items = ajax.responseXML.getElementsByTagName ('Items')[0];
			if  (! items)
			{
				alert (ajax.responseText);
				return;
			}
			for (var cItem = items.firstChild; cItem; cItem = cItem.nextSibling)
			{
				if  (cItem.nodeName == '#text')
					continue;
				var product = cItem.getElementsByTagName ('ProdId')[0];
				product = product.textContent ? product.textContent : product.nodeTypedValue;
				if  (! document.getElementById ('Qty_'+product))
					continue;
				var qty = cItem.getElementsByTagName ('Qty')[0];
				qty = qty.textContent ? qty.textContent : qty.nodeTypedValue;
				var price = cItem.getElementsByTagName ('Price')[0];
				price = price.textContent ? price.textContent : price.nodeTypedValue;
				var		e = document.getElementById ('Qty_'+product);
				e.value = qty;
				e = document.getElementById ('Total_'+product);
				if  (e)
					e.innerHTML = price;
			}
			var total = 0;
			for (i = 0; i < fields.length; i++)
			{
				e = document.getElementById (fields [i]);
				if  (e)
				{
					price = ajax.responseXML.getElementsByTagName (fields [i])[0];
					price = price.textContent ? price.textContent : price.nodeTypedValue;
					e.innerHTML = price;
					if  (i == 0)
					{
						total -= Number (price);
						while (e && e.nodeName != 'TR')
							e = e.parentNode;
						if  (e)
							e.style.display = price > 0 ? '' : 'none';
					}
					else
					{
						total += Number (price);
					}
				}
			}
			for (i = 0; i < field_copy.length; i++)
			{
				e = document.getElementById (field_copy [i]);
				if  (e)
				{
					d = ajax.responseXML.getElementsByTagName (field_copy [i])[0];
					d = d.textContent ? d.textContent : d.nodeTypedValue ? d.nodeTypedValue : '';
					if  (e.tagName == 'INPUT')
						d.value = d;
					else
						e.innerHTML = d;
				}
			}
			e = document.getElementById ('Order Total');
			if  (e)
			{
				total = String (total).split ('.');
				if  (total.length > 1)
				{
					total [1] += '00';
					total [1] = total [1].substr (0, 2);
					total = total.join ('.');
				}
				else
				{
					total = total [0]+'.00';
				}
				e.innerHTML = total;
			}
		}
		ShowAjax (null);
	}
}
function Ajax ()
{
	try {return new XMLHttpRequest();} catch (e) {};		// Firefox, Opera 8.0+, Safari
	try {return new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {};	// Internet Explorer
	try {return new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {};
	return null;
}
