function setFormDisabled(form, disabled) {
	if(disabled == null) disabled = true;


	for(var i = 0; i < form.elements.length; i++) {
		form.elements[i].disabled = disabled ? true : false;
	}
}

var loading;

function setLoading(el) {
	if(!loading) {
		loading = el.innerHTML;
	} else {
		el.innerHTML = loading;
	}
}

function createRequestObject(processResult) {
	var xmlhttp;

	try {
		xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	} catch(e) {
		try {
			xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
		} catch(e) {
			xmlhttp=new XMLHttpRequest();
		}
	}

	xmlhttp.onreadystatechange = function() {
		try {
			if(xmlhttp.readyState == 4) {
				if(xmlhttp.status == 200) {
					processResult(xmlhttp.responseText);
				} else {
					alert("There was a problem retrieving the XML data:\n" + xmlhttp.statusText);
				}
			}			
		} catch (err) {
			alert("It does not appear that the server is available for this application. Please try again very soon.\n\nError: " + err.message);
		}
	};

	return  xmlhttp;
}

function formTo(form, target) {
	setFormDisabled(form, true);

	var href = form.action;

	if(href.indexOf('?') == -1) href += '?';

	for(var i = 0; i < form.length; i++) {
		var el = form.elements[i];
		switch (el.type) {
			case 'submit':
				break;
			case 'checkbox':
			case 'radio':
				if(!el.checked) break;
			default:
				href += '&' + el.name + '=' + encodeURIComponent(el.value);
		}
		
	}

	if(linkTo({href:href}, target)) {
		form.submit();
		return true;
	} 

	return false;
}

function linkTo(link, target) {
	var targetDiv = document.getElementById(target);

	var href = link.href;

	var req = createRequestObject(function(responseText) {
		if(targetDiv) {
			targetDiv.innerHTML = responseText;
			targetDiv.style.cursor = 'default';
		}
	});
	if(req) {
		if(href.indexOf('?') == -1) href += '?';
		href += '&ajax=' + new Date().getTime();

		if(targetDiv) {
			targetDiv.style.cursor = 'wait';
		}

		req.open("GET", href, true);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		req.send(null);

		return false;
	}

	return true;
}

function setVisible(element, isVisible) {
	element.style.display =  (isVisible ? 'block' : 'none');
	element.style.visibility = (isVisible ? 'visible' : 'hidden');
}

function toggleCart(link) {
	var cartDiv = document.getElementById('cart');
	if(cartDiv) {
		if(cartDiv.style.visibility == 'visible') {
			hideCart();

			return false;
		} else {
			return linkToCart(link);
		}
	}

	return true;
}

function showCart() {
	updateCartPosition(true);

	var cartDiv = document.getElementById('cart');
	if(cartDiv) setVisible(cartDiv, true);

	var form = document.forms['orderForm'];
	if(form) {
		form.deliveryoptionid.style.visibility = 'hidden';
		form.paymentoptionid.style.visibility = 'hidden';
	}
}

function hideCart() {
	var cartDiv = document.getElementById('cart');
	if(cartDiv) setVisible(cartDiv, false);

	var form = document.forms['orderForm'];
	if(form) {
		form.deliveryoptionid.style.visibility = 'visible';
		form.paymentoptionid.style.visibility = 'visible';
	}
}

function linkToCart(link) {
	var cartContentDiv = document.getElementById('cartContent');
	if(cartContentDiv) {
		setLoading(cartContentDiv);
		showCart();
		return linkTo(link, 'cartContent');
	}

	return true;
}

function formToCart(link) {
	var cartContentDiv = document.getElementById('cartContent');
	if(cartContentDiv) {
		setLoading(cartContentDiv);
		showCart();
		return formTo(link, 'cartContent');
	}

	return true;
}




var offset = -5;

function updateCartPosition(force) {
	var newOffset = Number(window.pageYOffset ? window.pageYOffset : document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop);

	if(force) {
		offset = newOffset;
	} else {
		if(offset == newOffset) return;

		offset = Math.ceil(offset + (newOffset - offset) / 8);
	}

	var cartDiv = document.getElementById('cart');

	if(cartDiv) {
		cartDiv.style.top = 10 + offset + 'px';
	}
}

window.onscroll = function() {
	updateCartPosition();
}

window.onresize = function() {
	updateCartPosition();
}

window.onload = function() {
	updateCartPosition(true);
}

setInterval("updateCartPosition()", 20);