var AjaxTimeout = 10000;
var AjaxBasketOpen = false;

function EvalResponse(request)
{
	try { return eval('('+request.responseText+')'); }
	catch (e)
	{
		window.console.log(e);
	}
}

function CallInProgress (xmlhttp) {
	switch (xmlhttp.readyState) {
		case 1: case 2: case 3:
			return true;
			break;
		default: // Case 4 and 0
			return false;
			break;
	}
}

Ajax.Responders.register({
	onCreate: function(request) {
		request['timeoutId'] = window.setTimeout(
		function() {
			if (CallInProgress(request.transport)) {
				request.transport.abort();
				if (request.options['onFailure']) {
					request.options['onFailure'](request.transport, request.json);
				}
			}
		},
		AjaxTimeout
		);
	},
	onComplete: function(request) {
		window.clearTimeout(request['timeoutId']);
	}
});


/*****************************************************************************
 * AJAX BASKET                                                               *
 *****************************************************************************/
function LoadAjaxBasket(BasketId)
{
	StopTimeout();
	
	if (false == AjaxBasketOpen)
	{
		AjaxBasketOpen = true;
		
		$('ajax_error').hide();
		$('ajax_basket').hide();
		
		Effect.Appear($('ajax_loadingmsg'), { from: 0, to: 1 })
		
		new Ajax.Request('/ajax/eshop/basket/viewbasketdetails/', {
			method: 'get',
			onSuccess: function(transport) {
				var Response = EvalResponse(transport);
				
				if (true == Response.error) {
					ShowBasketError();
				} else {
					ShowBasket(Response.html_string);
				}
			},
			onFailure: function(transport, json) {
				ShowBasketError();
			},
			onException: function(transport) {
				ShowBasketError();
			}
		});
	}
	return false;
}

function ShowBasket(Html)
{
	AjaxBasketOpen = true;
	$('ajax_basket').update(Html);
	$('ajax_loadingmsg').hide();
	$('ajax_basket').show();

	new Effect.BlindDown($('basket_small'), { duration: 0.6 });
}

function StopTimeout()
{
	clearTimeout(window.Timer);
}

function SetHideBasketTimeout()
{
	window.Timer = setTimeout('HideBasket();', 1000);
}

function HideBasket()
{
	new Effect.Parallel([
		new Effect.BlindUp($('basket_small'), { sync: true }),
		new Effect.Fade($('ajax_basket'), { sync: true })
		], { duration: 0.6, afterFinish: function() {
			AjaxBasketOpen = false;
		}});
	setTimeout("$('ajax_basket').update('')", 500);
}

function ShowBasketError()
{
	$('ajax_loadingmsg').hide();
	Effect.Appear('ajax_error');
}

function UpdateTopNavBasketCount()
{
	new Ajax.Request('/ajax/eshop/basket/updatetopnav/', {
		method: 'get',
		onSuccess: function(transport)
		{
	  	$('basket-count').update(transport.responseText);
		},
		onFailure: function(transport, json)
		{
			// do nothing
		},
		onException: function(transport)
		{
			// do nothing
		}
	});
}

function AddToBag()
{/*
	$('ajax_error').hide();
	$('ajax_basket').hide();
	
	Effect.BlindDown('basket_small');
	Effect.Appear('ajax_loadingmsg');
	*/
	
	new Ajax.Request('/ajax/eshop/basket/addproduct/', {
		method: 'post',
		parameters: $('buynow').serialize(true),
		onSuccess: function(transport)
		{	      
         //$('btn_added').show();
         // $('btn_buy').hide();        
         	                  		
			var Response = EvalResponse(transport);
			if (true == Response.error) {
				$('ajax_error_message').update(Response.html_string);
				ShowBasketError();
			} else {
				//ShowBasket(Response.html_string);
			}
			//LoadAjaxBasket('basket_small');
			//window.Timer = setTimeout('HideBasket();', 4000);
			window.location.href='/checkout/basket';
		},
		onFailure: function(transport, jsonreponse) {
			window.location.href = '/checkout/basket';
		},
		onException: function() {
			ShowBasketError();
			//alert('An error has occured while processing your request, please try again. \n\nIf the problem persists please contact the administrator.');
		}
	});
	return false;
}
