// JavaScript Document

function doOverlay(tab,id) {
	var sibs = $(tab.parentNode).siblings();
	for (var i = 0; i < sibs.length; i++) {
		if (sibs[i].className == 'active') {			
			sibs[i].className = '';
		}
	}
	tab.parentNode.addClassName('active');
	
	var overlays = document.getElementsByClassName('overlay');
		for (var i = 0; i < overlays.length; i++) {
			overlays[i].style.visibility = 'hidden';
		}
	$(id).style.visibility = 'visible';
	tab.blur();
	return false;
}

function hideOverlay(tab,id) {
	Element.removeClassName(tab,'active');
	$(id).style.visibility = 'hidden';
}

function doTabBox(obj,cls,id) {
	var sibs = $(obj.parentNode).siblings();
	for (var i = 0; i < sibs.length; i++) {
		Element.removeClassName(sibs[i],'active');
	}
	Element.addClassName($(obj.parentNode),'active');
	var boxes = document.getElementsByClassName(cls);
	for (var i = 0; i < boxes.length; i++) {
		Element.addClassName(boxes[i],'none');
	}
	Element.removeClassName(id,'none');
	obj.blur();
}

var cartTimeoutId = -1;
var cartFadeEffect = null;

function addToCart(partnum, field)
{
	try
	{
		if (Ajax.activeRequestCount > 2)
		{
			return false;
		}

		var errormsg = 'Unable to add item.';

		var popDiv = $('addDiv');
		
		var timestamp = (new Date()).valueOf();
		if (popDiv.lastpartnum && (popDiv.lastpartnum == partnum) &&
			popDiv.lastaddtime && ((timestamp - popDiv.lastaddtime) < 2000))
		{
			return false;
		}

		if (partnum == '')
		{
			alert('Invalid part number.');
			return false;
		}
		
		var quantity = 0;

		if (field)
		{
			var minquantity = $(field).readAttribute('minqty');

			if (field.value.length)
			{
				quantity = field.value;

				if (! checkQuantityValue(quantity))
				{
					alert('You have entered an invalid quantity value.');
					return false;
				}
				
				if (! checkMinQuantityValue(quantity, minquantity))
				{
					alert('The quantity for this item must be a multiple of ' + minquantity + '.');
					return false;
				}
			}
			else
			{
				field.value = minquantity;
				quantity = minquantity;
			}
		}
		else
		{
			quantity = 1;
		}

		if (quantity == 0)
		{
			alert('You have entered an invalid quantity value.');
			return false;
		}

		var popInfoId = 'popInfo';
		var popList = $('addList');

		popDiv.lastpartnum = partnum;
		popDiv.lastaddtime = timestamp;

		if ($(popInfoId) == null)
		{
			popList.insert('<div class="cart-add clearfix" id="'+popInfoId+'"><img class="loadingImg" align="absmiddle" src="/_media/loading_sm.gif" alt="" />Loading...</div>');
		}
		else
		{
			$(popInfoId).update('<img class="loadingImg" align="absmiddle" src="/_media/loading_sm.gif" alt="" />Loading...');
		}
		
		if (cartTimeoutId != -1)
		{
			clearTimeout(cartTimeoutId);
			cartTimeoutId = -1;
		}
		
		if (cartFadeEffect)
		{
			cartFadeEffect.cancel();
		}

		showPopDiv(popDiv);

		var req = new Ajax.Request('/_ajax/addtocart.cfm',
		{
			method: 'post',
			parameters: {partnum:partnum, quantity:quantity},
			onSuccess: function(data)
			{
				if (data.responseJSON)
				{
					if (data.responseJSON.success)
					{
						if (field)
						{
							field.addClassName('added');
							Event.observe(field, 'change', function(event){field.removeClassName('added')});
						}

						$(popInfoId).update('<img id="addImg" src="'+data.responseJSON.img+'" alt="" /> <div id="itemName"><strong>'+data.responseJSON.name+'</strong></div><br/><div id="itemDetails">Added <strong>'+data.responseJSON.qty+'</strong> item' + (data.responseJSON.qty != 1 ? 's' : '') + '</div>');

						updateCartTotals(data.responseJSON.total, data.responseJSON.count);
						
						cartTimeoutId = setTimeout(function()
						{
							cartFadeEffect = Effect.Fade('addDiv', {duration:0.5});
							cartTimeoutId = -1;
						}, 1000);
					}
					else if (data.responseJSON.message)
					{
						showAddCartError(data.responseJSON.message);
					}
					else
					{
						showAddCartError(errormsg);
					}
				}
				else
				{
					showAddCartError(errormsg);
				}
			},
			onFailure: function(data)
			{
				if (data.responseJSON && data.responseJSON.message)
				{
					showAddCartError(data.responseJSON.message);
				}
				else
				{
					showAddCartError(errormsg);
				}
			}
		});
	}
	catch (err)
	{
		showAddCartError(errormsg);
	}

	return true;
}

function addSelectedToCart(formName)
{
	try
	{
		var errormsg = 'Unable to add items.';

		var popDiv = $('addDiv');

		var timestamp = (new Date()).valueOf();
		if (popDiv.lastpartnum && (popDiv.lastpartnum == partnum) &&
			popDiv.lastaddtime && ((timestamp - popDiv.lastaddtime) < 2000))
		{
			return false;
		}

		var items = $(formName).select('input');
		var alerts = 0;

		items.each(
			function(item)
			{
				if (! checkQuantityValue(item.value))
				{
					alert('You have entered an invalid quantity value for item ' + item.id.substr(4) + '.');
					alerts++;
					return;
				}

				var minquantity = item.readAttribute('minqty');

				if (! checkMinQuantityValue(item.value, minquantity))
				{
					alert('The quantity for item ' + item.id.substr(4) + ' must be a multiple of ' + minquantity + '.');
					alerts++;
					return;
				}
			}
		);
		
		if (alerts)
		{
			return false;
		}

		var itemList = '';

		items.each(
			function(item)
			{
				if (! isNaN(item.value) && item.value > 0)
				{
					if (! item.hasClassName('added'))
					{
						if (itemList.length)
						{
							itemList += ',';
						}
						itemList += '{"p":"' + item.id.substr(4) + '","q":"' + item.value + '"}';
					}
				}
			}
		);

		if (! itemList.length)
		{
			alert('You haven\'t entered any quantities.');
			return false;
		}

		itemList = '[' + itemList + ']'

		var popInfoId = 'popInfo';
		var popList = $('addList');

		if ($(popInfoId) == null)
		{
			popList.insert('<div class="cart-add clearfix" id="'+popInfoId+'"><img class="loadingImg" align="absmiddle" src="/_media/loading_sm.gif" alt="" />Loading...</div>');
		}
		else
		{
			$(popInfoId).update('<img class="loadingImg" align="absmiddle" src="/_media/loading_sm.gif" alt="" />Loading...');
		}

		if (cartTimeoutId != -1)
		{
			clearTimeout(cartTimeoutId);
			cartTimeoutId = -1;
		}

		if (cartFadeEffect)
		{
			cartFadeEffect.cancel();
		}

		showPopDiv(popDiv);

		var req = new Ajax.Request('/_ajax/addmultipletocart.cfm',
		{
			method: 'post',
			parameters: {items:itemList},
			onSuccess: function(data)
			{
				if (data.responseJSON)
				{
					if (data.responseJSON.success)
					{
						items.each(
							function(item)
							{
								if (! isNaN(item.value) && item.value > 0)
								{
									item.addClassName('added');
									Event.observe(item, 'change', function(event){item.removeClassName('added')});
								}
							}
						);

						$(popInfoId).update('<div id="itemDetails">Added <strong>'+data.responseJSON.qty+'</strong> item' + (data.responseJSON.qty != 1 ? 's' : '') + '</div>');

						updateCartTotals(data.responseJSON.total, data.responseJSON.count);

						cartTimeoutId = setTimeout(function()
						{
							cartFadeEffect = Effect.Fade('addDiv', {duration:0.25});
							cartTimeoutId = -1;
						}, 1000);
					}
					else if (data.responseJSON.message)
					{
						showAddCartError(data.responseJSON.message);
					}
					else
					{
						showAddCartError(errormsg);
					}
				}
				else
				{
					showAddCartError(errormsg);
				}
			},
			onFailure: function(data)
			{
				if (data.responseJSON && data.responseJSON.message)
				{
					showAddCartError(data.responseJSON.message);
				}
				else
				{
					showAddCartError(errormsg);
				}
			}
		});
	}
	catch (err)
	{
		showAddCartError(errormsg);
	}

	return true;
}

function showPopDiv(popDiv)
{
	var obj = doMeasure();

	popDiv.style.display = 'block';
	divWidth = popDiv.offsetWidth;
	divHeight = popDiv.offsetHeight;

	var xPos = (obj.winWidth - divWidth)/2;
	var yPos = (obj.winHeight - divHeight)/2 + obj.scrollTop;
	
	popDiv.style.left = xPos+'px';
	popDiv.style.top = yPos+'px';
}

function showAddCartError(errormsg)
{
	alert(errormsg);
	$('addList').update();
	$('addDiv').hide();
}

function hideAddCartPopop()
{
	var list = $('addList');
	if (list.hasChildNodes())
	{
		while (list.childNodes.length >= 1)
		{
			list.removeChild(list.firstChild);
		}
	}
	$('addDiv').hide();
}

function updateCartTotals(total, count)
{
	$('cart-count').update(count);
}

function checkQuantityValue(value)
{
	if (value.length && (isNaN(value) || (value < 0) || (value != Math.round(value))))
	{
		return false;
	}
	
	return true;
}

function checkMinQuantityValue(value, minquantity)
{
	if ((value != 0) && (value % minquantity))
	{
		return false;
	}
	
	return true;
}

function popUpVideo(id) {
	window.open('/_divs/_videos.cfm?videoID='+id,id,'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=330,height=335,left=325,top=120');
}

var uomTip = 'This item has a minimum and multiple quantity associated with it. You must order the minimum amount and in multiples of this amount when ordering. Our system will automatically adjust quantities to these rules as your order is processed.';

