function makeRequest(ajaxRequestURL, receiptionFunctionName, postParameters)
{
	ajaxRequestURL = ajaxRequestURL + '?XMLHttpRequest=1' + '&timestamp='+ (new Date()).getTime();

	if(!(ajaxRequestResource = initAjaxObject()))
	{
		alert("XmlHttpRequest failure");
	}
	else
	{
		ajaxRequestResource.open("POST", ajaxRequestURL, true);
		//~ ajaxRequestResource.setRequestHeader("X-Requested-With", "XMLHttpRequest")
		ajaxRequestResource.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajaxRequestResource.setRequestHeader("Content-length", postParameters.length);
		//~ ajaxRequestResource.setRequestHeader("Connection", "close");
		
		ajaxRequestResource.onreadystatechange = function() 
		{
			receiveResponse(ajaxRequestResource, receiptionFunctionName);
		}
		ajaxRequestResource.send(postParameters); 
	}
}
function initAjaxObject() 
{
	if (window.XMLHttpRequest) 
	{
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject) 
	{
		try 
		{
			return new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) 
		{
			try 
			{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E) 
			{
				return null;
			}
		}
	}
	else 
	{
		return null;
	}
}
function receiveResponse(ajaxRequestResource, receiptionFunctionName)
{
	if(ajaxRequestResource.readyState == 4 && ajaxRequestResource.status == 200)
	{
		if (typeof(eval(receiptionFunctionName)) != "undefined")
		{
			eval(receiptionFunctionName)(ajaxRequestResource.responseText);
		}
	}
}
//**************************************************************************
//SHOPPING BASKET FUNCTIONS
//**************************************************************************

function basket_removeProduct(elementID)
{
	var postParameters = "action=removeProducts&productID="+elementID;
	postParameters = basket_gatherFormValues(postParameters);
	var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshContent', postParameters);
}

function basket_removeSelectionProduct(elementID, parameter)
{
	var postParameters = "action=removeProducts&productID="+elementID+"&parameter="+parameter;
	postParameters = basket_gatherFormValues(postParameters);
	var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshContent', postParameters);
}

function basket_refreshContent(responseText)
{
	if (basketContentElement = document.getElementById("shopping_basket_container"))
	{
		basketContentElement.innerHTML = responseText;
	}
	postParameters = "action=receiveStatus";
	var ajaxRequestResource = makeRequest(webSiteURL, 'basket_getStatus', postParameters);
}

function basket_addProducts(elementID)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID))
	{
		moveToBasketAnimation("picture"+elementID);
		basketControlsValue = basketControlsElement.value;
		if (parseInt(basketControlsValue)>0)
		{
			postParameters = "action=addProducts&productID="+elementID+"&amount="+basketControlsValue;
			var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshStatus', postParameters);
		}
		else
		{
			basketControlsElement.value = '1';
			postParameters = "action=addProducts&productID="+elementID+"&amount=1";
			var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshStatus', postParameters);
		}
	}
}

function basket_addProductsWithSelection(elementID)
{
	var selection = getNode('productSelections'+elementID);
	if (selection)
	{
		if (selection.options[0].selected)
		{
			getNode('productSelectionsError'+elementID).style.visibility = 'visible';
			selection.style.background = '#FFA1A1';
		}
		else
		{
			getNode('productSelectionsError'+elementID).style.visibility = 'hidden';
			selection.style.background = '#FFFFFF';
			var selectionValue = selection.options[selection.selectedIndex].value;
			if (basketControlsElement = document.getElementById("basketControl"+elementID))
			{
				moveToBasketAnimation("picture"+elementID);
				basketControlsValue = basketControlsElement.value;
				if (parseInt(basketControlsValue)>0)
				{
					postParameters = "action=addProducts&productID="+elementID+"&amount="+basketControlsValue+"&parameter="+selectionValue;
					var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshStatus', postParameters);
				}
				else
				{
					basketControlsElement.value = '1';
					postParameters = "action=addProducts&productID="+elementID+"&amount=1"+"&parameter="+selectionValue;
					var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshStatus', postParameters);
				}
			}
		}
	}
}

function basket_getStatus(elementID)
{
	postParameters = "action=receiveStatus";
	var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshStatus', postParameters);
}

function basket_refreshStatus(responseText)
{
	if (basketControlsElement = document.getElementById("shopping_basket"))
	{
		basketControlsElement.className = 'visible';
		basketControlsElement.innerHTML = responseText;
	}
}

function basketControls_increment(elementID)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID))
	{
		if (basketControlsElement.value=="") basketControlsElement.value = 1;
		else
		{
			if (parseInt(basketControlsElement.value)>0)
			{
				basketControlsElement.value = parseInt(basketControlsElement.value)+1;
			}
			else
			{
				basketControlsElement.value = 1;
			}
		}
	}
}

function basket_sendNewAmount(elementID)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID))
	{
		basketControlsValue = parseInt(basketControlsElement.value);
		if (basketControlsValue>0)
		{
			postParameters = "action=newAmount&productID="+elementID+"&amount="+basketControlsValue;
			var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshContent', postParameters);
		}
		else basketControlsElement.value = 1;
		
	}
}

function basketControls_sendIncrement(elementID)
{
	basketControls_increment(elementID);
	basket_sendNewAmount(elementID);
}
function basketControls_sendDecrement(elementID)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID))
	{
		if (basketControlsElement.value!="") 
		{
			if (parseInt(basketControlsElement.value)>1)
			{
				basketControlsElement.value = parseInt(basketControlsElement.value)-1;
			}
			else
			{
				basketControlsElement.value = "1";
			}
		}
	}
	basket_sendNewAmount(elementID);
}



function basket_sendNewAmountSelection(elementID, parameter)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID+'_'+parameter))
	{
		basketControlsValue = parseInt(basketControlsElement.value);
		if (basketControlsValue>0)
		{
			postParameters = "action=newAmount&productID="+elementID+"&amount="+basketControlsValue+"&parameter="+parameter;
			var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshContent', postParameters);
		}
		else basketControlsElement.value = 1;
		
	}
}

function basketControls_sendIncrementSelection(elementID, parameter)
{
	basketControls_increment(elementID+'_'+parameter);
	basket_sendNewAmountSelection(elementID, parameter);
}

function basketControls_sendDecrementSelection(elementID, parameter)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID+'_'+parameter))
	{
		if (basketControlsElement.value!="") 
		{
			if (parseInt(basketControlsElement.value)>1)
			{
				basketControlsElement.value = parseInt(basketControlsElement.value)-1;
			}
			else
			{
				basketControlsElement.value = "1";
			}
		}
	}
	
	basket_sendNewAmountSelection(elementID, parameter);
}

function basketControls_decrement(elementID)
{
	if (basketControlsElement = document.getElementById("basketControl"+elementID))
	{
		if (basketControlsElement.value!="") 
		{
			if (parseInt(basketControlsElement.value)>0)
			{
				basketControlsElement.value = parseInt(basketControlsElement.value)-1;
			}
			else
			{
				basketControlsElement.value = "";
			}
		}

		if (basketControlsElement.value=="0") basketControlsElement.value = "";
	}
}

function basket_sendValues()
{
	var postParameters = "action=receiveValues";
	postParameters = basket_gatherFormValues(postParameters);
	var ajaxRequestResource = makeRequest(webSiteURL, 'basket_refreshContent', postParameters);
}
function basket_gatherFormValues(postParameters)
{
	if (document.getElementById("shoppingBasket_TransportMethod"))
	{
		var shoppingBasket_TransportMethod = document.getElementById("shoppingBasket_TransportMethod").options[document.getElementById("shoppingBasket_TransportMethod").selectedIndex].value;
		postParameters = postParameters + '&shoppingBasket_TransportMethod='+shoppingBasket_TransportMethod;
	}
	if (document.getElementById("contact_form"))
	{
		var shoppingBasket_Company = document.getElementById("shoppingBasket_Company").value;
		if (shoppingBasket_Company != "")
		{
			postParameters = postParameters + '&shoppingBasket_Company='+shoppingBasket_Company;
		}
		
		var shoppingBasket_Email = document.getElementById("shoppingBasket_Email").value;
		if (shoppingBasket_Email != "")
		{
			postParameters = postParameters + '&shoppingBasket_Email='+shoppingBasket_Email;
		}
		
		var shoppingBasket_Phone = document.getElementById("shoppingBasket_Phone").value;
		if (shoppingBasket_Phone != "")
		{
			postParameters = postParameters + '&shoppingBasket_Phone='+shoppingBasket_Phone;
		}
		
		var shoppingBasket_OrdererAddress = document.getElementById("shoppingBasket_OrdererAddress").value;
		if (shoppingBasket_OrdererAddress != "")
		{
			postParameters = postParameters + '&shoppingBasket_OrdererAddress='+shoppingBasket_OrdererAddress;
		}

		var shoppingBasket_OrdererState = document.getElementById("shoppingBasket_OrdererState").options[document.getElementById("shoppingBasket_OrdererState").selectedIndex].value;
		if (shoppingBasket_OrdererState != "")
		{
			postParameters = postParameters + '&shoppingBasket_OrdererState='+shoppingBasket_OrdererState;
		}
		
		var shoppingBasket_RecipientAddress = document.getElementById("shoppingBasket_RecipientAddress");
		if (shoppingBasket_RecipientAddress)
		{
			if (shoppingBasket_RecipientAddress.value != "")
				postParameters = postParameters + '&shoppingBasket_RecipientAddress='+shoppingBasket_RecipientAddress.value;
		}
		
		var shoppingBasket_RecipientState = document.getElementById("shoppingBasket_RecipientState");
		if (shoppingBasket_RecipientState)
		{
			var shoppingBasket_RecipientStateValue = shoppingBasket_RecipientState.options[document.getElementById("shoppingBasket_RecipientState").selectedIndex].value;
			if (shoppingBasket_RecipientStateValue != "")
				postParameters = postParameters + '&shoppingBasket_RecipientState='+shoppingBasket_RecipientStateValue;
		}
	}
	return postParameters;
}
function basket_sendFormValues(paymentMethod)
{
	if (paymentMethodObject = document.getElementById("paymentMethod"))
	{
		
		paymentMethodObject.value = paymentMethod;
		document.shoppingBasketContact.submit();
	}
}
function basket_showBankSelector()
{
	if (bankSelector = document.getElementById("bank_selector"))
	{
		bankSelector.className = "";
	}
}

var framesCount = 30;
var AnimationSpeed = 25;
function moveToBasketAnimation(elementID)
{
	if ((pictureObject = document.getElementById(elementID)) && (basketStatusObject = document.getElementById('shopping_basket')))
	{
		resetFrameState(elementID)
		
		picturePosition = findPos(pictureObject);
		basketPosition = findPos(basketStatusObject);
				
		pictureObject.style.left = pictureObject.offsetLeft+'px';
		pictureObject.style.top = pictureObject.offsetTop+'px';
		
		
		var xStartCoordinate = pictureObject.offsetLeft;
		var yStartCoordinate = pictureObject.offsetTop;
		
		var xEndCoordinate = basketPosition[0] - picturePosition[0];
		var yEndCoordinate = basketPosition[1] - picturePosition[1];

		xAcceleration = calcAcceleration (xStartCoordinate, xEndCoordinate, framesCount);
		yAcceleration = calcAcceleration (yStartCoordinate, yEndCoordinate, framesCount);
		
		drawFrameState(xStartCoordinate, yStartCoordinate, xEndCoordinate, yEndCoordinate, elementID, 0);
		opacity(elementID, 100, 0, framesCount*AnimationSpeed*1.5);
	}
}

function drawFrameState(xStartCoordinate, yStartCoordinate, xEndCoordinate, yEndCoordinate, elementID, frameNumber)
{
	if (pictureObject = document.getElementById(elementID))
	{
		frameNumber = parseInt(frameNumber);
		xStartCoordinate = parseInt(xStartCoordinate);
		yStartCoordinate = parseInt(yStartCoordinate);
		xEndCoordinate = parseInt(xEndCoordinate);
		yEndCoordinate = parseInt(yEndCoordinate);
		
		xCoordinate = calcFrameCoordinate(xStartCoordinate, frameNumber, xAcceleration);
		yCoordinate = calcFrameCoordinate(yStartCoordinate, frameNumber, yAcceleration);

		pictureObject.style.left = xCoordinate + 'px';
		pictureObject.style.top = yCoordinate + 'px';
		
		if (frameNumber < framesCount)
		{
			pictureObject.timeoutID = setTimeout("drawFrameState('" + xStartCoordinate + "','" + yStartCoordinate + "','" + xEndCoordinate + "','" + yEndCoordinate + "','" + elementID + "','" + (frameNumber+1) + "')", AnimationSpeed);
		}
		else
		{
			resetFrameState(elementID);
		}
	}
}
function resetFrameState(elementID)
{
	if (pictureObject = document.getElementById(elementID))
	{
		clearTimeout(pictureObject.timeoutID);
		pictureObject.style.left = '0px';
		pictureObject.style.top = '0px';
		changeOpac(100, elementID);
	}
}

function calcFrameCoordinate(startPosition, frameNumber, acceleration)
{
	var coordinate = startPosition + (acceleration*frameNumber*frameNumber)/2
	return coordinate;
}
function calcAcceleration(startPosition, endPosition, framesCount)
{
	var acceleration = 2*(endPosition - startPosition)/(framesCount*framesCount);
	return acceleration;
}

function findPos(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		//~ alert(obj.tagName+'#'+obj.id+' left:'+obj.offsetLeft+' sum:'+curleft);
		while (obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			//~ alert(obj.tagName+'#'+obj.id+' left:'+obj.offsetLeft+' sum:'+curleft);
		}
	}
	return [curleft,curtop];
}

function opacity(id, opacStart, opacEnd, millisec) 
{
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) 
{
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}

