var rowlandsCartId, addToBasketClick, basketItems;

var serviceProxyURL = '/static/enigmaServices.htm';

function checkBasketStatus(callbackMode){

	rowlandsCartId = readCookie('csRowlandsCartId');
	
	if( rowlandsCartId != null ){ // we have a cart id in the cookie
		createCookie('csRowlandsCartId', rowlandsCartId, 1); // reset cookie expiry to 1 day
		if( readCookie('csRowlandsCartStatus') == null ){
			createCookie('csRowlandsCartStatus', 'init');
		}
		// is basket active?
		if( readCookie('csRowlandsCartStatus') == 'active' ){ // we assume basket is active
			basketStatusHandler(callbackMode);
		} else { 
			// status = 'init' first visit this browser session
			// status = 'checkout' user has jumped off to Rowlands checkout this browser session
			// check if basket is active
			// do basket status lookup with cart id
			$.get(serviceProxyURL, { svc: 'basketStatus', val: rowlandsCartId }, 
				function(data){
					// alert(data);
					var xmlData = $.parseXML( data );
					var basketActive = '';
					$xml = $( xmlData );
					var error = $xml.find( 'RESULT' ).attr('error');
					if(error == '0'){
						$xml.find( 'var' ).each(function(){
							if( $(this).attr('name') == 'ACTIVE' ){
								basketActive = $(this).find('string').text();
							}
						});
						// alert('basketActive: ' + basketActive);
						if( basketActive == 'true' ){ // if basket is active, we have an active cart id
							if( readCookie('csRowlandsCartStatus') == 'checkout' ){
								// status = 'checkout' so we need to keep checking - do nothing
							} else { 
								createCookie('csRowlandsCartStatus', 'active');
							}
						} else { // if basket is not active
							rowlandsCartId = null;
							eraseCookie('csRowlandsCartId');
							eraseCookie('csRowlandsCartStatus');
							// we no longer have a cart id
						}
						// call the handler
						basketStatusHandler(callbackMode);
					} else {
						ajaxErrorHandler();
					}
			})
			.error( function(){
				ajaxErrorHandler();
			});
		}
	} else { // we don't have a cart id
		// call the handler
		basketStatusHandler(callbackMode);
	}
}

function createBasket(callbackMode){
	// do lookup with cart id = 0
	$.get(serviceProxyURL, { svc: 'basketStatus', val: '0' }, 
		function(data){
			// alert(data);
			var message = '';
			var xmlData = $.parseXML( data );
			$xml = $( xmlData );
			var error = $xml.find( 'RESULT' ).attr('error');
			if(error == '0'){
				$xml.find( 'var' ).each(function(){
					if( $(this).attr('name') == 'ID' ){
						rowlandsCartId = parseInt( $(this).find('number').text() ).toString();
					}
				});
				// alert('rowlandsCartId: ' + rowlandsCartId);
				createCookie('csRowlandsCartId', rowlandsCartId, 1);
				createCookie('csRowlandsCartStatus', 'active');
				basketStatusHandler(callbackMode);
				showViewBasketButton();
			} else {
				ajaxErrorHandler();
			}
	}).error( function(){
		ajaxErrorHandler();
	});
}

function basketStatusHandler(callbackMode){
	// alert(callbackMode);
	switch(callbackMode){
		
	case 'pageLoad' :
		if(rowlandsCartId != null){
			showViewBasketButton();
		}
		break;
		
	case 'addToBasket' :
		if(rowlandsCartId == null){
			createBasket(callbackMode);
			// showViewBasketButton();
		} else {
			viewBasket(true);
		}
		break;
		
	case 'viewBasket' :
		if(rowlandsCartId == null){
			createBasket(callbackMode);
			// showViewBasketButton();
		} else {
			viewBasket(false);
		}
		break;
		
	default :
		break;
	}
}

function viewBasket(addToBasket){
	var message = '';
	var basketURL = '/basket.aspx';
	// var basketItems = new Array();
	var numberOfRows = basketItems.length;
	
	if( addToBasket && numberOfRows ){
		/*
		$('#' + addToBasketClick + ' .skuListItem input').each(function(){
			if( $(this).val() != '0' ){
				var rowlandsSKUId = $(this).attr('name').split('-')[1];
				var quantity = $(this).val();
				basketItems.push( { rowlandsSKUId: rowlandsSKUId, quantity: quantity } );
				message += '\nrowlandsSKUId: ' + rowlandsSKUId + ', quantity: ' + quantity;
			}
		});
		*/
		basketURL += '?numberOfRows=' + numberOfRows.toString();
		for( var i = 0; i < basketItems.length; i++ ){
			basketURL += '&rowlandsSKUId' + (i + 1).toString() + '=' + basketItems[i].rowlandsSKUId;
			basketURL += '&quantity' + (i + 1).toString() + '=' + basketItems[i].quantity;
		}
		message += '\nnumberOfRows: ' + numberOfRows;
	}
	
	message += '\nbasketURL: ' + basketURL;
	message += '\nrowlandsCartId: ' + rowlandsCartId;
	
	$('#viewBasket a').attr('href', basketURL);
	// alert('viewBasket: ' + message);
	
	addBasketButtons();
	$('#checkoutButton').show();
	
	Shadowbox.open({
		content: basketURL,
		height: 500,
		width: 800,
		player: "iframe"
	});
}

function showViewBasketButton(){
	$('#viewBasket').show();
}

function ajaxErrorHandler(){
	var $errorMessage = $('<div id="ajaxErrorMessage" />');
	$errorMessage.append('<h2>Sorry</h2>');
	$errorMessage.append('<p>There was an error retrieving your basket. Please try again later.</p>');
	
	addBasketButtons();
	$('#checkoutButton').hide();
	
	Shadowbox.open({
		content: $errorMessage.html(),
		height: 500,
		width: 800,
		player: "html"
	});
}

function addBasketButtons(){
	if( $('#basketButtons').length == 0 ){
		$('#sb-wrapper-inner').append('<div id="basketButtons"></div>');
		$('#basketButtons').append('<div class="buttonLink" id="continueButton"><a href="#">Continue shopping</a></div>');
		$('#basketButtons').append('<div class="buttonLink" id="checkoutButton"><a href="/checkout.aspx">Checkout</a></div>');
		$('#continueButton a').click(function(e){
			Shadowbox.close();
			e.preventDefault();
		});
		$('#checkoutButton a').click(function(e){
			createCookie('csRowlandsCartStatus', 'checkout');
			window.location.href = $(this).attr('href');
			e.preventDefault();
		});
	}
}

$(document).ready(function(){
	checkBasketStatus('pageLoad');
	
	$('.addToBasket a').click(function(e){
		basketItems = new Array();
		addToBasketClick = $(e.target).attr('rel');
		
		$('#' + addToBasketClick + ' .skuListItem input').each(function(){
			if( $(this).val() != '0' ){
				var rowlandsSKUId = $(this).attr('name').split('-')[1];
				var quantity = $(this).val();
				basketItems.push( { rowlandsSKUId: rowlandsSKUId, quantity: quantity } );
			}
		});
		
		if(basketItems.length > 0) {
			$('#' + addToBasketClick).removeClass('basketError');
			checkBasketStatus('addToBasket');
		} else {
			$('#' + addToBasketClick).addClass('basketError');
		}
		e.preventDefault();
	});

	$('#viewBasket a').click(function(e){
		basketItems = new Array();
		checkBasketStatus('viewBasket');
		e.preventDefault();
	});
	
	$('.addToBasketForm input')
		.autocomplete({
			minLength: 0,
			source: [ '0','1','2','3','4','5','6','7','8','9','10' ]
		})
		.one('focus', function(){
			$(this).autocomplete('search','');
		})
		.blur(function(){
			$(this).one('focus', function(){
				$(this).autocomplete('search','');
			});
		});

	$('.ui-autocomplete').wrapAll('<div class="ui-smoothness" />');
	
});
