function getProductsInCart()
{
	var product = $j(".foxee_products").clone()[0];
	$j("div#foxee_products_container").empty();
	
	var removeLink = false;
	if($j(product).find(".foxee_remove_link a:first").length > 0) {
		var href = $j(product).find(".foxee_remove_link a:first").attr('href');
		href = ( href.indexOf('?') != -1 ) ? href.substring(0, href.indexOf('?')) : href;
		removeLink = true;
	}
	
	if(fc_json.products.length > 0) {
		$j.each(fc_json.products, function(i,n ) {
			$j.each(fc_field_map, function(x,y) {
				if( typeof(n[y.fc_field]) != 'undefined' )
					$j(product).find("." + x).text(n[y.fc_field]);
				if( $j.isFunction(y.fc_callback) )
					$j(product).find("." + x).text(y.fc_callback.call(this, n[y.fc_field]));
			});
			if(removeLink == true)
				$j(product).find(".foxee_remove_link a").attr('href', href+'?id='+n.id);
			$j("div#foxee_products_container").append(product);
			product	= $j(product).clone()[0];
		});
		$j("div#foxee_products_container").attr('style', 'display:block;');
	} else {
		$j.each(fc_field_map, function(x,y) {
			if( y.fc_field != '' )
				$j(product).find("." + x).text('');
			if( $j.isFunction(y.fc_callback) )
				$j(product).find("." + x).text(y.fc_callback.call(this, ''));
		});
		
		if(removeLink == true)
			$j(product).find(".foxee_remove_link a").attr('href', href);
		$j("div#foxee_products_container").append(product);
		$j("div#foxee_products_container").attr('style', 'display:none;');
	}
}

function formatFloat(amount, type) {
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = "";
	if(i < 0) { minus = "-"; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf(".") < 0) { s += ".00"; }
	if(s.indexOf(".") == (s.length - 2)) { s += "0"; }
	s = minus + s;
	if( type == 'price' )
		s = foxee_currency_symbol_before+s+foxee_currency_symbol_after;
	else if( type == 'percent' )
		s = s+'%';
	return s;
}

function formatPercent(val)
{
	return formatFloat(val, 'percent');
}

function formatPrice(val)
{
	return formatFloat(val, 'price');
}

function fe_UpdateCart()
{
	if( $j("div#foxee_products_container").length == 0 || typeof(fc_json) == 'undefined' || typeof(fc_field_map) == 'undefined' ) return;
	
	getProductsInCart();
	$j.each(fc_field_map, function(i,n) {
		if( typeof(fc_json[n.fc_field]) != 'undefined' && typeof(fc_json[n.fc_field]) != 'object' ) {
			$j("div#foxee_cart_container #"+i).text(fc_json[n.fc_field]);
			if( $j.isFunction(n.fc_callback) )
				$j("div#foxee_cart_container #"+i).text(n.fc_callback.call(this, fc_json[n.fc_field]));
		}
	});
	
	$j('a.foxycart').unbind('click');
	fc_tb_init('a.foxycart');
}

function fe_AddProduct(product) {
	var opts = {
		url: $j(product).attr('href')+fc_AddSession()||$j(product).attr('action')+fc_AddSession(),
		complete: function(xhr, status) {
			fc_UpdateCart(FoxyDomain);
		}
	};
	
	if( product.tagName == 'FORM' ) {
		$j.extend(opts, {data: $j(product).serialize()});
	}
	
	$j.ajax(opts);
}

function fe_RemoveProduct(product) {
	var params = parseParams($j(product).attr('href'));
	if(typeof params.id != "undefined") {
		$j.each(fc_json.products, function(i,productObj) {
			if(productObj.id == params.id)
				delete fc_json.products[i];
		});
	}
}

function fc_BuildFoxyCart()
{
	fe_UpdateCart();
}

function parseParams(url) {
   var params=url;
   if (url.match(/\?(.+)$/))
       params = RegExp.$1;
	// split the params
	var pArray = params.split("&");
	// hash to store result
	var pHash = {};
	// parse each param in the array and put it in the hash
	for(var i=0;i<pArray.length;i++) {
		var temp = pArray[i].split("=");
		pHash[temp[0].replace(/^h\:/, '')] = unescape(temp[1]);
	}
	return pHash;
}

function serializeObj(obj) {
	var str = "";
	$j.each(obj, function(i,n) {
		str += i+'='+n+'&';
	});
	return str.replace(/\&$/, '');
}
function varDump(variable, maxDeep)
{
	var deep = 0;
	var maxDeep = maxDeep || 5;
	
	function fetch(object, parent)
	{
		var buffer = '';
		deep++;
		
		for (var i in object) {
			if (parent) {
				objectPath = parent + '.' + i;
			} else {
				objectPath = i;
			}
			
			buffer += objectPath + ' (' + typeof object[i] + ')';
			
			if (typeof object[i] == 'object') {
				buffer += "\n";
				if (deep < maxDeep) {
					buffer += fetch(object[i], objectPath);
				}
			} else if (typeof object[i] == 'function') {
				buffer += "\n";
			} else if (typeof object[i] == 'string') {
				buffer += ': "' + object[i] + "\n";
			} else {
				buffer += ': ' + object[i] + "\n";
			}
		}
		
		deep--;
		return buffer;
	}
	
	if (typeof variable == 'object') {
		return fetch(variable);
	}
	
	return '(' + typeof variable + '): ' + variable + "\n";
}
