var floatingBasket = null;
var startingPosition = null;
var x = 0, y = 1;
var basketScrollEndTime = 0;
var currentEvent = false;
var returnOnSuccess = false;

function makeBasketFloat(id) {
	floatingBasket = $(id);
	startingPosition = floatingBasket.positionedOffset();

	setInterval ( "slideBasket();", 50 );

}

/**
 * @desc aligns the basket to the top of the window pane
 */
function slideBasket() {
	if ( currentEvent == false || currentEvent.state == "finished" ) {

		if ( window.scrollY > ( startingPosition[y] - 20 ) ) {

			newPositionY = window.scrollY - startingPosition[y] + 20;
			currentEvent = new Effect.Move(floatingBasket, {x: 0, y: newPositionY, mode: 'absolute'});

		} else {

			currentEvent = new Effect.Move(floatingBasket, {x: 0, y: 0, mode: 'absolute'});

		}
	}

}


function addItemRedirect(itemId, returnPage) {
	addItem(itemId);
	returnOnSuccess = returnPage;
}

/**
 * @desc adds an item to the basket
 */
function addItem(itemID) {

	var target = 'ajax.php';
    var params = 'type=addBasketItem&id='+itemID;

    var myAjax = new Ajax.Request(target, {
        method: 'post',
        parameters: params,
        onSuccess: function (request) {
			parseItemResponse( request.responseText.evalJSON() )
        }
	});

}


/**
 * @desc clears all items in the basket
 */
function emptyBasket() {

	var target = 'ajax.php';
    var params = 'type=emptyBasket';

    var myAjax = new Ajax.Request(target, {
        method: 'post',
        parameters: params,
        onSuccess: function (request) {
			parseItemResponse( request.responseText.evalJSON() )
        }
	});

}


function removeItem(itemId, element) {

	var target = 'ajax.php';
    var params = 'type=removeItem&itemId='+itemId;

    var myAjax = new Ajax.Request(target, {
        method: 'post',
        parameters: params,
        onSuccess: function (request) {
			parseItemResponse( request.responseText.evalJSON(), element );
        }
	});

}

/**
 * @desc deals with the ajax response for the basket
 * The element param is optional
 */
function parseItemResponse(response, element) {

	if ( response != false ) {

		if ( returnOnSuccess != false ) {
			window.location = returnOnSuccess;
			return;
		}

		switch ( response.action ) {
			case 'itemAdded':

				addBasketItem(response.item.heading, response.item.price, response.item.id);
                //if (!$('subTotal')) { return; }
				$("subTotal").children[1].update('£'+response.total);

			break;

			case 'itemRemoved':

				if ( response.itemFound ) {
					new Effect.Fade(element.up());
				} else {
					alert( 'This item could not be found in your basket.' );
				}

                //if (!$('subTotal')) { return; }
				$("subTotal").children[1].update('£'+response.total);

			break;

			case 'basketEmptied':

				$$(".yourSelection").each(function(item) {
					new Effect.Fade(item);
				});
                //if (!$('subTotal')) { return; }
				$("subTotal").children[1].update('£'+response.total);

			break;

			case 'itemInBasket':

				alert('You have already added this item');

			break;

			case 'notFound':

				alert('This item could not be found');

			break;

			default:
				alert("Something broke!");
		}

	}

}

// adds an item to the basket
function addBasketItem(productName, price, itemId) {

    //if (!$('subTotal')) { return; }
	var item = createBasketItem( productName, price, itemId );
	$('subTotal').insert({'before': item});
	new Effect.Appear(item);


}

// Creates a new dom element that can be added to the basket
function createBasketItem( productName, price, itemId ) {

	return Builder.node("div",{'class':'yourSelection', style:'display:none'},[
		Builder.node("a",{href:'javascript:void(0);',onclick:'removeItem('+itemId+', this)', 'class':'float_right'},[
			Builder.node("img",{alt:'Remove', src: baseHref + "images/layup/iconCross.gif"})
		]),
		Builder.node("div",{'class':'product'},productName),
		Builder.node("div",{'class':'price'},'£'+price),
		Builder.node("div", {'class':'clear'})
	]);

}
