
var lastShippingPriceRequest = {country:"",zip:"",is_residence:"",success:false};
var shippingPriceAjaxRequests = [];
var shippingAmounts = [];
var delivery_options = [];
var gettingAjaxShipping = false;

function showEstimated(country, zip, is_residence, no_items_msg)
{
	if(no_items_msg)
	{
		fillNoItems(no_items_msg);
		return;
	}
	
	for (i = 0; i < shippingPriceAjaxRequests.length; i++)
	{
		shippingPriceAjaxRequests[i].aborted = true; 
	}
  
	if (lastShippingPriceRequest.country == country && lastShippingPriceRequest.zip == zip && lastShippingPriceRequest.is_residence == is_residence && lastShippingPriceRequest.success == true) return;

	lastShippingPriceRequest = {
		country: country,
		zip: zip,
		is_residence: is_residence,
		success: false
	};
  
	$("shippingResultsNote").innerHTML = "Please wait while we retrieve shipping costs...";
	$("shippingEstimated").hide();
	$("shippingEstimatedWrapper").hide();
	$("shippingResultsNote").show();
	$("shippingResultsError").hide();
	
	cachedResults = false;
	
	for (var i = 0; i < shippingAmounts.length; i++)
	{
		if
		(
			shippingAmounts[i].country == country
			&& 
			shippingAmounts[i].zip == zip
			&& 
			shippingAmounts[i].is_residence == is_residence
		)
		{
			cachedResults = shippingAmounts[i];
			break; 
		} 
	}
  
	if (cachedResults)
	{
		fillShippingEstimatedFromResults(cachedResults);
	}
	else
	{
		gettingAjaxShipping = true;
		var url = '/ajax_estimated_shipping';
		var pars = 'country='+country+'&zip='+zip+'&is_residence='+is_residence;
		var newShippingPriceAjaxRequest = new Ajax.Request(
			url,
			{
				method: 'get', 
				parameters: pars,
				onComplete: function() {
				gettingAjaxShipping = false;
			},
			onSuccess: function(request)
			{
				if (!newShippingPriceAjaxRequest.aborted && request.responseText)
				{
					shippingAmountsObj =
					{
						country: country,
						zip: zip,
						is_residence: is_residence,
						note: "",
						error: "",
						methods: []
					};
            
					methodsDump = request.responseText;
            
					if (methodsDump.replace(/^\s*|\s*$/g,''))
					{
						var lines = methodsDump.split('~');
						for (var i = 0; i < lines.length; i++)
						{
							var nameValuePair = lines[i].split('|');
							if (nameValuePair.length==2)
							{
								if (nameValuePair[0] == 'methods')
								{
									var allMethods = nameValuePair[1].split('^&^');
									for (var j = 0; j < allMethods.length; j++)
									{
										if (allMethods[j] == "") continue;
										shippingAmountsObj.methods[shippingAmountsObj.methods.length] = allMethods[j].toQueryParams();
									}
								}
								else
								{
									shippingAmountsObj[nameValuePair[0]] = nameValuePair[1];
								}
							}
						}
					}
            
					shippingAmounts[shippingAmounts.length] = shippingAmountsObj;
          
					fillShippingEstimatedFromResults(shippingAmountsObj);
            
				}
			}
		}
		);
    	
		newShippingPriceAjaxRequest.aborted = false;
		newShippingPriceAjaxRequest.shippingPriceCallIndex = shippingPriceAjaxRequests.length;
		shippingPriceAjaxRequests[shippingPriceAjaxRequests.length] = newShippingPriceAjaxRequest;
	}
}

function fillShippingEstimatedFromResults(shippingAmountsObj)
{
	var sh_div = $("shippingEstimated");
	if(sh_div) sh_div.hide();
	$("shippingEstimatedWrapper").hide();
	if (shippingAmountsObj.note)
	{
		$("shippingResultsNote").innerHTML = shippingAmountsObj.note; 
		$("shippingResultsNote").show();
	}
	else
	{
		$("shippingResultsNote").hide();
	}
	
	if (shippingAmountsObj.error)
	{
		$("shippingResultsError").innerHTML = shippingAmountsObj.error.replace(" select your country and",""); 
		$("shippingResultsError").show();
		if($("dzip_wrapper")) $("dzip_wrapper").show();
	}
	else
	{ 
		$("shippingResultsError").hide();
	}
	
	if (sh_div)
	{
		sh_div.innerHTML = "";
		var estimates = "";
		if(shippingAmountsObj.methods.length > 0)
		{
			var oneMethod = null;
			delivery_options = new Array();
			var local_delivery_option = false;
			for(j = 0; j < shippingAmountsObj.methods.length; j++)
			{
				oneMethod = shippingAmountsObj.methods[j];
				estimates += '<tr><td>'+oneMethod.method+(is_cart?'':'<br>'+'<div align="right">')+' - '+(parseFloat(stringReplace(oneMethod.price,"$",""))>0?oneMethod.price:"Free")+(oneMethod.delivery_date!="0000-00-00"?" ("+oneMethod.delivery_date+")":"")+(is_cart?'':'</div>')+'</td></tr>';
			}
		}
		if(estimates != "")
		{
			sh_div.innerHTML = '<table border="0" cellpadding="0" cellspacing="0" width="100%">'+estimates+'</table>';
			sh_div.show();
			$("shippingEstimatedWrapper").show();
		}
	}
	//$("shippingResultsNote").hide();
	//$("shippingResultsError").hide();
}

function fillNoItems(no_items_msg)
{ 
	var sh_div = $("shippingEstimated");
	
	if (sh_div)
	{
		sh_div.hide();
		$("shippingEstimatedWrapper").hide();
		$("shippingResultsNote").hide();
		$("shippingResultsError").hide();
		sh_div.innerHTML = '<table border="0" cellpadding="0" cellspacing="0" width="100%">'+'<tr><td>'+no_items_msg+'</td></tr>'+'</table>';
		sh_div.show();
		$("shippingEstimatedWrapper").show();
	}
}

function stringReplace(s,p,r){var pos=s.indexOf(p);var len=p.length;while(pos != -1){s1=s.substring(0,pos);s2=s.substring(pos+len,s.length);s=s1+r+s2;pos=s.indexOf(p);}return s;}