
var Cart = 
{
	s3cartitemtype : null,
	s3cartmethod : 'GET',
	s3cartaction : null,
	s3cartobjid : null, 
	s3cartobj : null,
	s3cartmessageobj : null,
	s3cartmsgout : false, 
	s3carttype : null,  
	s3cartnum : 0,
	s3cartoc : null,
	scartinproc : false, 
	s3cartstartoffset : null,
	s3cartendoffset : null,
	s3cartitemcount : 0, 
	s3cartendwidth : 150,
	s3cartstep : 16,
	s3cartinterval : 10, 
	s3carttimer : null, 
	s3carttotal : 0,
	s3cartshipping : null,
	fadeCount:0,
	colorFrom:'111111',
	colorTo:'DB8D23',
	cartwin: null,
	notifywin: false,
	s3mierrobj: null,
	s3agobj: null,
	
	Init : function(minicobjid, cartType, notifyWin)
	{
		Cart.s3cartobjid = minicobjid;
		Cart.notifywin = notifyWin;
		
		if (/^(1|2|3|4|5|mini|main|all|shipping|confirm){1}$/i.test(cartType)){
			Cart.s3carttype = cartType;		
		}
		else
		{
			Cart.s3carttype = 1;
			Cart.logEvent('Cart type not found. Mini assumed.');
		}
		
		if(Cart.s3carttype==1 || Cart.s3carttype=='1' || Cart.s3carttype=='mini')
		{
			if (document.getElementById(minicobjid)){
				Cart.s3cartobj = document.getElementById(minicobjid);
			}
			
			if (Cart.s3cartobj!=null)
			{
				Cart.s3mierrobj = document.getElementById('s3mierr');
				Cart.s3agobj = document.getElementById('s3ag');
				Cart.ShowMiniError('', 'hidden');
				Cart.ShowMiniWorking('visible');
			}
			else
			{
				Cart.logEvent('Mini cart not found.');
			}
		}
		
		Cart.Display();
	}, 
	
	digiHasItems : function()
	{
		var hasItems = false;
		var cbObjects = document.getElementsByTagName('INPUT');
		for (var i = 0; i < cbObjects.length; i++)
		{
			if (cbObjects[i].checked)
			{
				var hasItems = true;
				break;
			}	
		}	
		return hasItems;
	}, 
	
	addItem : function(cartType, num, jsonData)
	{
		Cart.s3cartitemtype = 'analog';
		Cart.s3cartaction = 'add';
		Cart.s3carttype = cartType;
		
		if (Cart.scartinproc === false)
		{
			Cart.scartinproc = true;
			
			var data = JSON.parse(decodeURIComponent(jsonData));
			
			if (data!=null)
			{
				if (Cart.s3cartmsgout)
				{
					Cart.messageIn(150, Cart.s3cartendoffset);
				}
				if(cartType!='mini' && cartType!=1 & cartType!='1'){
					Cart.ShowWorking(num);
				}
				Cart.Request('add', data.key, data.type, data.price, data.quantity, data.coupon_item, '');
			}
			else
			{
				Cart.logEvent('Form data could not be obtained.');
			}
		}
		else
		{
			Cart.s3carttimer = setTimeout("Cart.addItem("+cartType+", "+num+", '"+jsonData+"')", 500);	
		}
	}, 
	
	addDigiItems : function(cartType)
	{
		if (!Cart.digiHasItems())
		{
			alert('No items selected');
			return false;
		}
		
		Cart.s3cartaction = 'add';
		Cart.s3cartitemtype = 'digital';
		Cart.s3carttype = cartType;
		
		var cbitems = document.getElementsByTagName('INPUT');
		
		if (cbitems.length > 0)
		{
			for (var i = 0; i < cbitems.length; i ++)
			{
				if (cbitems[i].checked==true)
				{
					var data = JSON.parse(decodeURIComponent(cbitems[i].value));
					if (data!=null)
					{
						if (Cart.s3cartmsgout)
						{
							Cart.messageIn(150, Cart.s3cartendoffset);
						}
						Cart.ShowWorking(101);
						Cart.ShowWorking(102);
						Cart.Request('add', data.key, data.type, data.price, data.quantity, 'n', '');
						cbitems[i].checked = false;
						cbitems[i].disabled = false;
					}
					else
					{
						Cart.logEvent('Form data could not be obtained for item '+i);
					}
				}
			}
		}
		else
		{
			Cart.logEvent('Form elements not found.');
		}
	}, 
	
	updateItem : function(cartType, num)
	{
		Cart.s3cartaction = 'update';
		Cart.s3cartitemtype = 'analog';
		Cart.s3carttype = cartType;
		
		var erMsg = '<strong>Please correct the following:</strong><br /><br />';
		var erInput = false;
		var cbitems = document.getElementsByTagName('INPUT');
		var arrItems = '';
		
		if (cbitems.length > 0)
		{
			for (var i = 0; i < cbitems.length; i++)
			{
				if (/^[-]?\d+$/.test(cbitems[i].value))
				{
					var bits = cbitems[i].name.split('_');
					var data = bits[1].split(':');
					
					if (data!=null)
					{
						elHighlight('tb_'+i, '');
						arrItems += data[0]+':'+data[1]+':'+cbitems[i].value;
						if ((i+1)<cbitems.length){
							arrItems+=';';	
						}
					}
					else
					{
						elHighlight('tb_'+i, 'i-error');
						Cart.logEvent('Form data could not be obtained for item '+(i+1));
					}
				}
				else
				{
					elHighlight('tb_'+i, 'i-error');
					erMsg += 'Numeric input required for item '+(i+1)+'.<br />';
					erInput = true;
				}
			}
			
			if (erInput)
			{
				elAll('er_dis', erMsg, 'box-bgr-er-fluid', 'inline-block');
				return false;
			}
			else
			{
				elAll('er_dis', '', 'box-bgr-er-fluid', 'none');
				
				if (Cart.s3cartmsgout)
				{
					Cart.messageIn(150, Cart.s3cartendoffset);
				}
				
				Cart.ShowWorking(num);
				Cart.Request('update', 0, '', 0, 0, 'n', arrItems);
			}
		}
		else
		{
			Cart.logEvent('Form elements not found.');
		}
	},
	
	removeItem : function(cartType, key, num)
	{
		Cart.s3cartitemtype = 'analog';
		Cart.s3cartaction = 'remove';
		Cart.s3carttype = cartType;
		
		if (Cart.s3cartmsgout)
		{
			Cart.messageIn(150, Cart.s3cartendoffset);
		}
		Cart.ShowWorking(num);
		Cart.Request('remove', key);
	},
	
	clearCart : function(cartType, num)
	{
		Cart.s3cartitemtype = 'analog';
		Cart.s3cartaction = 'clear';
		Cart.s3carttype = cartType;
		
		if (Cart.s3cartmsgout)
		{
			Cart.messageIn(150, Cart.s3cartendoffset);
		}
		Cart.ShowWorking(num);
		Cart.Request('clear');
	},
	
	ShowWorkingStore : function(num)
	{
		var obj = document.getElementById('busy-'+num);
		if (obj!=null)
		{
			Cart.s3cartoc=obj.onclick;
			Cart.s3cartnum = num;
			Cart.s3cartclass = obj.className;
		}
	}, 
	
	ShowMiniError : function(inrHtml, vis)
	{
		if (Cart.s3mierrobj!=null)
		{
			Cart.s3mierrobj.innerHTML = inrHtml;
			Cart.s3mierrobj.style.visibility = vis;
		}	
	},
	
	ShowWorking : function(num)
	{
		var obj = document.getElementById('btn_add_'+num);
		if (obj!=null)
		{
			Cart.s3cartoc=obj.onclick;
			Cart.s3cartnum = num;
			Cart.s3cartclass = obj.className;
			obj.className = (Cart.s3cartaction=='update' || Cart.s3cartaction=='clear') ? 'btn-common-working' : 'btn-narrow-working';
			obj.onclick = '';
			obj.innerHTML = '<img class="img-working" src="/images/ajax-loader-mini-cart.gif" border="0" alt="Working" width="10" height="10" />';
		}
	},
	
	ShowMiniWorking : function(vis)
	{
		if (Cart.s3mierrobj!=null){
			Cart.s3agobj.style.visibility = vis;
		}			
	},
	
	ShowStatic : function(num, str, classn, setonclick, er)
	{
		var obj = document.getElementById('btn_add_'+num);
		if (obj!=null)
		{
			obj.className = classn;
			obj.innerHTML = str;
			if (!er)
			{
				if (setonclick)
				{
					if (Cart.s3cartitemtype == 'digital')
					{
						obj.onclick = function(){
							Cart.addDigiItems(Cart.s3carttype);
						}
					}
					else
					{
						if (Cart.s3cartaction=='add')
						{
							obj.onclick = eval(Cart.s3cartoc);
						}
						else if (Cart.s3cartaction=='update')
						{
							obj.onclick = function(){
								Cart.updateItem(Cart.s3carttype, num);
							}
						}
					}
					
					Cart.scartinproc = false;
					clearTimeout(Cart.s3carttimer);
					
					return;
				} 
				else
				{
					if (Cart.s3cartaction=='add')
					{
						setTimeout("Cart.ShowStatic("+num+", 'Add', 'btn-narrow', true, "+er+")", Globals.CartTimeout);
					}
					else if (Cart.s3cartaction=='update')
					{
						setTimeout("Cart.ShowStatic("+num+", 'Recalculate', 'btn-common', true, "+er+")", Globals.CartTimeout);
					}
					else if (Cart.s3cartaction=='remove')
					{
						setTimeout("Cart.ShowStatic("+num+", 'x', 'btn-narrow', true, "+er+")", Globals.CartTimeout);
					}
					else if (Cart.s3cartaction=='clear')
					{
						setTimeout("Cart.ShowStatic("+num+", 'Clear Cart', 'btn-common', true, "+er+")", Globals.CartTimeout);
					}
				}
			}
		}
	},
	
	ShowStaticStore : function()
	{
		Cart.fadeCount++;
		Cart.ColorFade('s3cti','background',Cart.colorFrom,Cart.colorTo,25,10);
	},    
	
	restoreDefaults : function(){
		Cart.fadeCount = 0;
		Cart.colorFrom=='111111';
		Cart.colorTo=='DB8D23';
		Cart.scartinproc = false;
		clearTimeout(Cart.s3carttimer);	
	},
	
	ColorFade : function (id,element,start,end,steps,speed) {
		var startrgb,endrgb,er,eg,eb,step,rint,gint,bint,step;
		var target = window.opener ? window.opener.document.getElementById(id) : document.getElementById(id);
		steps = steps || 20;
		speed = speed || 20;
		clearInterval(target.timer);
		endrgb = Cart.ColorConv(end);
		er = endrgb[0];
		eg = endrgb[1];
		eb = endrgb[2];
		if(!target.r) {
		startrgb = Cart.ColorConv(start);
		r = startrgb[0];
		g = startrgb[1];
		b = startrgb[2];
		target.r = r;
		target.g = g;
		target.b = b;
		}
		rint = Math.round(Math.abs(target.r-er)/steps);
		gint = Math.round(Math.abs(target.g-eg)/steps);
		bint = Math.round(Math.abs(target.b-eb)/steps);
		if(rint == 0) { rint = 1 }
		if(gint == 0) { gint = 1 }
		if(bint == 0) { bint = 1 }
		target.step = 1;
		target.timer = setInterval( function() { Cart.AnimateColor(id,element,steps,er,eg,eb,rint,gint,bint) }, speed);
	},

	AnimateColor : function (id,element,steps,er,eg,eb,rint,gint,bint) {
		var target = window.opener ? window.opener.document.getElementById(id) : document.getElementById(id);
		var color;
		if(target.step <= steps) {
		var r = target.r;
		var g = target.g;
		var b = target.b;
		if(r >= er) {
		r = r - rint;
		} else {
		r = parseInt(r) + parseInt(rint);
		}
		if(g >= eg) {
		g = g - gint;
		} else {
		g = parseInt(g) + parseInt(gint);
		}
		if(b >= eb) {
		b = b - bint;
		} else {
		b = parseInt(b) + parseInt(bint);
		}
		color = 'rgb(' + r + ',' + g + ',' + b + ')';
		if(element == 'background') {
		target.style.backgroundColor = color;
		} else if(element == 'border') {
		target.style.borderColor = color;
		} else {
		target.style.color = color;
		}
		target.r = r;
		target.g = g;
		target.b = b;
		target.step = target.step + 1;
		} else {
		clearInterval(target.timer);
		color = 'rgb(' + er + ',' + eg + ',' + eb + ')';
		if(element == 'background') {
		target.style.backgroundColor = color;
		} else if(element == 'border') {
		target.style.borderColor = color;
		} else {
		target.style.color = color;
		}
		if(Cart.fadeCount==4){
			if(Cart.colorTo=='111111'){
				Cart.restoreDefaults();
			}else{
				Cart.fadeCount=3;
				Cart.colorFrom = 'DB8D23'; 
				Cart.colorTo = '111111';
				Cart.ShowStaticStore();
			}
		}else{
		Cart.colorFrom = (Cart.colorFrom=='111111') ? 'DB8D23' : '111111'; 
		Cart.colorTo = (Cart.colorTo=='111111') ? 'DB8D23' : '111111';
		Cart.ShowStaticStore();
		}
		}
	},

	ColorConv : function (color) {
 		var rgb = [parseInt(color.substring(0,2),16),
 		parseInt(color.substring(2,4),16),
 		parseInt(color.substring(4,6),16)];
 		return rgb;
	},
	
	trackNum: '',
	playing: false,
	trackPlaying: 0,
	trackPlayingDisp: '',
	
	HighlightRow : function(rowobj, tdid, trnum, mover, trnumDisp)
	{
		if(mover)
		{
			var trlist = rowobj.getElementsByTagName('td');
			for(var i=0;i<trlist.length;i++){
				trlist[i].className = 'td-store-view-over';
			}
			rowobj.className='tr-store-view-over';
			var tdobj = document.getElementById(tdid);
			if(tdobj){
				if(Cart.trackPlaying!=trnum)
				{
					tdobj.innerHTML = '&nbsp;'; 
					tdobj.style.background = '#1B1B1B url(/images/btn-play.png) no-repeat center';
				}
			}
		}else{
			var trlist = rowobj.getElementsByTagName('td');
			for(var i=0;i<trlist.length;i++){
				trlist[i].className = 'td-store-view-out';
			}
			rowobj.className='tr-store-view-out';
			var tdobj = document.getElementById(tdid);
			if(tdobj){
				if(Cart.trackPlaying!=trnum)
				{
					tdobj.innerHTML = trnumDisp;
					tdobj.style.background = '';
				}
			}	
		}
		return false;
	},
	
	PlayInit : function(tdid, trnum, i, trnumDisp)
	{
		var tdobj = document.getElementById(tdid);
		if(tdobj){
			if(!Cart.playing){ 
				tdobj.style.background = 'url(/images/btn-stop.png) no-repeat center';
				Cart.playing = true;
				Cart.trackPlaying = trnum;
				Cart.trackPlayingDisp = trnumDisp;
				player.sendEvent('STOP');
				player.sendEvent('ITEM', i);
			}else{
				if(Cart.trackPlaying!=trnum)
				{
					var tdobjprev = document.getElementById('tracknum-'+Cart.trackPlaying);
					tdobjprev.innerHTML = Cart.trackPlayingDisp;
					tdobjprev.style.background = 'none';
					player.sendEvent('STOP');
					Cart.trackPlaying = trnum;
					Cart.trackPlayingDisp = trnumDisp;
					tdobjprev.style.background = 'none';
					tdobj.style.background = 'url(/images/btn-stop.png) no-repeat center';
					tdobj.innerHTML = '&nbsp;';
					player.sendEvent('STOP');
					player.sendEvent('ITEM', i);
				}
				else
				{
					tdobj.style.background = 'url(/images/btn-play.png) no-repeat center';
					Cart.playing = false;
					Cart.trackPlaying = 0;
					player.sendEvent('STOP');
				}
			}
		}	
	},
	
	PriceHighlight : function(id, ovr)
	{
		document.getElementById(id).style.color= (ovr?'#FFF':'#BBB');	
	},
	
	Display : function()
	{
		var reqString = 'ctype='+Cart.s3carttype;
		var index = AjaxHandler.AddRequest('/s3/ajax/request/cart_display.php', Cart.displayResponse);
		
		// If cart is mini, display ajax animated gif.
		
		if(Cart.s3carttype==1 || Cart.s3carttype=='1' || Cart.s3carttype=='mini')
		{
			Cart.ShowMiniWorking('visible');
		}
		
		AjaxHandler.CallUpdate(index, reqString, Cart.s3cartmethod);
	}, 
	
	displayResponse : function(responseText, responseStatus)
	{
		if (responseStatus==200)
		{ 
			//alert(responseText);
			var display = JSON.parse(responseText);
			
			switch (display.result)
			{
				case 'good':
				
				switch (Cart.s3carttype)
				{
					case 1:
					case '1':
					case 'mini':
					
					Cart.s3cartitemcount = parseInt(display.items[0].item_count);
					if (Cart.s3cartitemcount > 9)
					{
						Cart.s3cartstartoffset -= (navigator.userAgent.indexOf('Safari') != -1) ? 6 : 7;
						Cart.s3cartendoffset = Cart.s3cartstartoffset - ((navigator.userAgent.indexOf('Safari') != -1) ? 156 : 157);
					}
					Cart.Populate(display.items[0].item_count);
					
					break;
					
					case 2:
					case '2':
					case 'main':
					
					alert('Error!');
					
					break;
					
					case 3:
					case '3':
					case 'all':
					
					if (display.items.length==0){
						Cart.PopulateMain(null, 0, 0);
					}
					else{
						/* MODIFIED 28-04-2010 --------------
						Added Cart.RequestCmd invoke if no cd or vinyl items and payment is required
						*/
						//if(display.pagination.cdorvinyl=='n' && (display.pagination.requires_payment=='y' || display.pagination.requires_payment=='true' || display.pagination.requires_payment==true)){
						if(display.pagination.cdorvinyl=='n'){
							Cart.RequestCmd(display.pagination.total_price, display.pagination.total_price, 0, display.pagination.total_items, display.pagination.cdorvinyl, '', '', '', '', display.pagination.coupon_collect, display.pagination.requires_payment);
						}
						
						Cart.PopulateMain(display.items, display.pagination.total_price, display.pagination.total_weight, display.pagination.cdorvinyl, display.pagination.coupon_shipping, display.pagination.requires_payment);
					}
					
					break;
					
					case 4:
					case '4':
					case 'shipping':
					
					if (display.items.length==0){
						Cart.PopulateShipping(null, 0, 0, null, 0);
					}
					else
					{
						Cart.s3cartitemcount = parseInt(display.pagination.total_items);
						Cart.s3carttotal = display.pagination.total_price;
						
						var data = display.message.split(':');
						var shippingService = '';
						var shippingName = '';
						var shippingRate = 0;
						var total_ps = 0;
						var arrShipping = new Array();
				
						// We only need to calculate shipping if we have shippable items, i.e. not digital.
						
						if (display.pagination.cdorvinyl=='y')
						{
							for (var i = 0; i < display.ups.length; i++)
							{
								arrShipping[arrShipping.length] = [ display.ups[i].service_id, display.ups[i].service_name, 
								display.ups[i].service_commitments, display.ups[i].rate, display.ups[i].pounds, 
								display.ups[i].ounces, display.ups[i].size, display.ups[i].zone, 
								display.ups[i].first_class_mail_type, display.ups[i].type, display.pagination.total_price,
								total_ps, display.pagination.total_weight, display.pagination.total_items, data[0], 
								display.pagination.cdorvinyl ];
							}
							
							Cart.s3cartshipping = arrShipping;
							
							if (Cart.s3cartshipping!=null)
							{
								var selectobj = document.getElementById('sl-shipping');
								
								if (selectobj!=null)
								{
									for (var i = 0; i < Cart.s3cartshipping.length; i++)
									{
										var shippingName = Cart.RemoveHtml(html_entity_decode(Cart.s3cartshipping[i][1]));
										shippingName += (Cart.s3cartshipping[i][9]=='d') ? ' (zone '+Cart.s3cartshipping[i][7]+')' : 
										' ('+Cart.s3cartshipping[i][2]+')';
							
										if (i==0)
										{
											shippingService = parseInt(Cart.s3cartshipping[i][0]);
											shippingRate = Cart.s3cartshipping[i][3];
											total_ps = parseFloat(display.pagination.total_price) + parseFloat(shippingRate);
											Cart.s3cartshipping[i][11] = total_ps;
											Cart.AddOption(selectobj, shippingName, shippingService, true);
										}
										else
										{
											Cart.s3cartshipping[i][11] = parseFloat(display.pagination.total_price) + parseFloat(Cart.s3cartshipping[i][3]);
											Cart.AddOption(selectobj, shippingName, Cart.s3cartshipping[i][0], false);
										}
									}
								}
							}
						}
						else
						{
							total_ps = parseFloat(display.pagination.total_price);
						}
						
						Cart.PopulateShipping(display.items, display.pagination.total_price, total_ps, data[0], data[1], display.pagination.total_weight, display.pagination.cdorvinyl, shippingName, shippingRate);
						Cart.RequestCmd(display.pagination.total_price, total_ps, display.pagination.total_weight, display.pagination.total_items, display.pagination.cdorvinyl, data[0], shippingService, shippingName, shippingRate, display.pagination.coupon_collect, display.pagination.requires_payment);
					}
					
					break;
					
					case 5:
					case '5':
					case 'confirm':
					
					if (display.items.length==0){
						Cart.PopulateConfirm(null, 0, 0);
					}
					else
					{
						Cart.s3cartitemcount = parseInt(display.pagination.total_items);
						Cart.PopulateConfirm(display.items, display.pagination.cdorvinyl);
					}
					
					break;
				}
				
				break;
				
				case 'invalid':
				case 'error':
				
				switch (Cart.s3carttype)
				{
					case 1:
					case '1':
					case 'mini':
					
					Cart.reportError(display.message, false);
					Scroller.goToTop();
					
					break;
					
					case 2:
					case '2':
					case 'main':
					
					//VOID
					
					break;
					
					case 3:
					case '3':
					case 'all':
					
					cartHtml = '<div style="width:400px;margin: 20px auto;text-align:center;">';
					cartHtml += 'Your shopping cart is empty.';
					cartHtml += '</div>';
					Cart.reportError(display.message, false);
					document.getElementById('cartitems').innerHTML = cartHtml;
					Scroller.goToTop();
					
					break;
					
					case 4:
					case '4':
					case 'shipping':
					
					cartHtml = '<div style="width:400px;margin: 20px auto;text-align:center;">';
					cartHtml += 'Your shopping cart is empty.';
					cartHtml += '</div>';
					Cart.reportError(display.message, false);
					document.getElementById('cartitems').innerHTML = cartHtml;
					Scroller.goToTop();
					
					break;
					
					case 5:
					case '5':
					case 'confirm':
					
					cartHtml = '<div style="width:400px;margin: 20px auto;text-align:center;">';
					cartHtml += 'Your shopping cart is empty.';
					cartHtml += '</div>';
					Cart.reportError(display.message, false);
					document.getElementById('cartitems').innerHTML = cartHtml;
					Scroller.goToTop();
					
					break;
				}
				
				break;
			}
		}
		else
		{
			Cart.logEvent('Error Processing Request in Cart.displayResponse with a response status of ' +responseStatus);
			//Cart.reportError('Error Processing Request', false);
			if (Scroller!=null)
			{
				Scroller.goToTop();
			}	
		}
	},
	
	RemoveHtml : function(str){
		return html_entity_decode(str.replace(/<sup>(.*)<\/sup>/i, " $1"));
	},
	
	Request : function(action, item, type, price, quantity, couponItem, updateItems)
	{
		var cpi = (couponItem=='' || couponItem=='undefined' || couponItem == undefined) ? 'n' : couponItem;
		var reqString = 'action='+action+'&item='+item+'&type='+type;
		reqString += '&price='+price+'&quantity='+quantity;
		reqString += '&coupon_item='+cpi+'&updateitems='+updateItems;
		var index = AjaxHandler.AddRequest('/s3/ajax/request/cart.php', Cart.handleResponse);
		
		// If cart is mini, display ajax animated gif.
		
		if(Cart.s3carttype==1 || Cart.s3carttype=='1' || Cart.s3carttype=='mini'){
			Cart.ShowMiniWorking('visible');
		}
		
		AjaxHandler.CallUpdate(index, reqString, Cart.s3cartmethod);
	}, 
	
	handleResponse : function(responseText, responseStatus)
	{
		if (responseStatus==200)
		{ 
			//alert(responseText);
			var cart = JSON.parse(responseText);
			
			switch (cart.result)
			{
				case 'good':
				
				switch (Cart.s3carttype)
				{
					case 1:
					case '1':
					case 'mini':
					
					Cart.ShowStaticStore();
					
					if(Cart.notifywin){
						Cart.cartwin = dhtmlwindow.open('cartwin', 'inline', '', '&nbsp;', "width=250px,height=100px,resize=0,scrolling=0,center=1");
					}
					
					Cart.Init(Cart.s3cartobjid, 1);
					
					break;
					
					case 2:
					case '2':
					case 'main':
					
					if (Cart.s3cartaction=='update'){
						Cart.ShowStatic(Cart.s3cartnum, 'Updated', 'btn-common-working', false, false);
					}
					
					Cart.Init(Cart.s3cartobjid, 2);
					
					break;
					
					case 3:
					case '3':
					case 'all':
					
					if (Cart.s3cartaction=='update')
					{
						Cart.ShowStatic(Cart.s3cartnum, 'Updated', 'btn-common-working', false, false);
						Cart.Init(Cart.s3cartobjid, 3);
					}
					else if (Cart.s3cartaction=='remove')
					{
						Cart.ShowStatic(Cart.s3cartnum, 'x', 'btn-narrow-working', false, false);
						Cart.Init(Cart.s3cartobjid, 3);
					}
					else if (Cart.s3cartaction=='clear')
					{
						Cart.ShowStatic(Cart.s3cartnum, 'Cart Cleared', 'btn-common-working', false, false);
						Cart.Init(Cart.s3cartobjid, 3);
					}
					else
					{
						Cart.Init(Cart.s3cartobjid, 1);
						Cart.Init(Cart.s3cartobjid, 2);
					}
					
					break;
				}
				
				break;
				
				case 'invalid':
				case 'error':
				
				if(Cart.s3carttype==1 || Cart.s3carttype=='1' || Cart.s3carttype=='mini'){
					Cart.ShowMiniWorking('hidden');
				}
				
				if (Cart.s3cartitemtype=='analog') 
				{
					if (Cart.s3cartaction == 'add')
					{
						if (cart.message.indexOf('info')!=-1)
						{
							var message = '';
							var bits = cart.message.split(':');
							switch (parseInt(bits[1]))
							{
								case 1:
								
								message = 'Err: <a href="javascript:;" onclick="Cart.reportError(\'Cannot add items to shopping cart whilst in coupon collect mode.\', true)">Click for info.</a>';
								
								break;
							}
							Cart.reportError(message, false);
							
							if(Cart.s3carttype==1 || Cart.s3carttype=='1' || Cart.s3carttype=='mini'){
								Cart.ShowStaticStore();
							}else{
								Cart.ShowStatic(Cart.s3cartnum, 'Er', 'btn-narrow-working', false, false);
							}
						}
						else
						{
							Cart.reportError(cart.message, false);
							if(Cart.s3carttype==1 || Cart.s3carttype=='1' || Cart.s3carttype=='mini'){
								Cart.ShowStaticStore();
							}else{
								Cart.ShowStatic(Cart.s3cartnum, 'Er', 'btn-narrow-working', false, false);
							}
						}
					}
					else
					{
						elAll('er_dis', cart.message, 'box-bgr-er-fluid', 'inline-block');
						
						if (Cart.s3cartaction=='update' || Cart.s3cartaction=='clear')
						{
							Cart.ShowStatic(Cart.s3cartnum, 'Error', 'btn-common-working', false, false);
							Cart.Init(Cart.s3cartobjid, 3);
						}
						else
						{
							Cart.ShowStatic(Cart.s3cartnum, 'Er', 'btn-narrow-working', false, true);
						}
					}
				}
				else
				{
					if (cart.message.indexOf('info')!=-1)
					{
						var message = '';
						var bits = cart.message.split(':');
						switch (parseInt(bits[1]))
						{
							case 1:
							
							message = 'Err: <a href="javascript:;" onclick="Cart.reportError(\'Cannot add items to shopping cart whilst in coupon collect mode.\', true)">Click for info.</a>';
							
							break;
						}
						Cart.reportError(message, false);
						Cart.ShowStatic(101, 'Not Add', 'btn-narrow-working', true, false);
						Cart.ShowStatic(102, 'Not Add', 'btn-narrow-working', true, false);
					}
					else
					{
						Cart.reportError(cart.message, false);
						Cart.ShowStatic(101, 'Not Add', 'btn-narrow-working', true, false);
						Cart.ShowStatic(102, 'Not Add', 'btn-narrow-working', true, false);
					}
				}
				
				Scroller.goToTop();
								
				break;
			}
		}
		else
		{
			Cart.logEvent('Error Processing Request in Cart.handleResponse with a response status of ' +responseStatus);
			Scroller.goToTop();	
		}
	},  
	
	Populate : function(htmlOutput)
	{
		if(htmlOutput==0){
			Cart.s3cartobj.innerHTML = 'Your cart is empty';	
		}else if(htmlOutput==1){
			Cart.s3cartobj.innerHTML = 'Your cart contains 1 item';
		}else{
			Cart.s3cartobj.innerHTML = 'Your cart contains '+htmlOutput+' items';		
		}
		
		Cart.ShowMiniWorking('hidden');
	}, 
	
	PopulateMain : function(items, tp, weight, hascdorvinyl, couponShipping, requiresPayment)
	{
		var objoutput = document.getElementById('cartitems');
		
		if (objoutput!=null)
		{
			var cartHtml = '';
			if (items==null)
			{
				cartHtml = '<div style="width:400px;margin: 20px auto;text-align:center;">';
				cartHtml += 'Your shopping cart is empty.';
				cartHtml += '</div>';		
			}
			else
			{
				var cdCount = 0;
				var vinylCount = 0;
				var pdCount = 0;
				var shStr = '';
				var rwClr = '000';
				var cbCount = 0;
				
				cartHtml = '<form name="c_form_0" action="" method="get">';  
				cartHtml += '<table cellpadding="0" cellspacing="0" class="box-nobgr-cart">';
				for (var i = 0; i < items.length; i++)
				{
					cartHtml += '<tr style="background-color:#'+rwClr+';height:50px;">';
					cartHtml += '<td style="width:24px;height:30px;text-align:center;"><a id="btn_add_'+i+'" class="btn-narrow" href="javascript:;" onclick="Cart.removeItem(3, '+items[i].key+', '+i+')" title="Remove item from your cart" style="padding-top:0px;">x</a></td>';
					cartHtml += '<td style="width:30px;text-align:left;">';
					if (items[i].display == 'y')
					{
						cartHtml += '<a href="'+items[i].link+'" title="View complete profile for '+items[i].product+'"><img class="img-list" src="/images/thumb.php?img='+items[i].image+'&amp;mw=25&amp;mh=25" border="0" width="25" height="25" alt="'+items[i].product+'" /></a>';
					}
					else
					{
						cartHtml += '<img src="/images/thumb.php?img='+items[i].image+'&amp;mw=25&amp;mh=25" border="0" width="25" height="25" alt="'+items[i].product+'" />';
					}
					cartHtml += '</td>';
					cartHtml += '<td style="width:298px;text-align:left;">';
					if (items[i].display == 'y')
					{
						cartHtml += '<a href="'+items[i].link+'" title="View complete profile for '+items[i].product+'">'+items[i].product+'</a>';
					}
					else
					{
						cartHtml += items[i].product;
					}
					cartHtml += '</td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].catalog+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].format+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;">';
					if ((items[i].type == 'a' || items[i].type == 'v'  || items[i].type == 'p') && items[i].coupon_item=='n')
					{
						cartHtml += '<input style="font-size:9px;text-align:center;" id="tb_'+cbCount+'" name="ci_'+items[i].key+':'+items[i].type+'" type="text" size="2" value="'+items[i].quantity+'" /></td>';
						cbCount++;
					}
					else
					{
						cartHtml += '<span class="txt-white9">'+items[i].quantity+'</span></td>';
					}
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">&#36;'+items[i].price+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">&#36;'+items[i].unit_total+'</span></td>';
					cartHtml += '</tr>';
					rwClr = rwClr=='000'?'222':'000';
					
					if (items[i].type=='a')
					{
						if (items[i].coupon_item=='y' && couponShipping=='false' && items[i].price == '0.00')
						{
							// nothing
						}
						else
						{
							cdCount+=parseInt(items[i].quantity);
						}
					}
					
					if (items[i].type=='v')
					{
						if (items[i].coupon_item=='y' && couponShipping=='false' && items[i].price == '0.00')
						{
							// nothing
						}
						else
						{
							vinylCount+=parseInt(items[i].quantity);
						}
					}  
					
					if (items[i].type=='p')
					{
						pdCount+=parseInt(items[i].quantity);
					}
				}
				
				shStr = weight;
				
				if (pdCount!=0)
				{
					shStr += ';p:'+pdCount;	
				}
				
				if (cdCount!=0)
				{
					if (shStr.indexOf(';')!=-1)
					{
						shStr += ',a:'+cdCount;
					}
					else
					{
						shStr += ';a:'+cdCount;
					}
				}
					
				if (vinylCount!=0)
				{
					if (shStr.indexOf(';')!=-1)
					{
						shStr += ',v:'+vinylCount;
					}
					else
					{
						shStr += ';v:'+vinylCount;
					}
				}
				
				cartHtml += '</table>';
				cartHtml += '</form>';
				cartHtml += '<table cellpadding="0" cellspacing="0" class="box-nobgr-cart">';
				cartHtml += '<tr>';
				cartHtml += '<td style="width:472px;height:30px;text-align:left;">';
				cartHtml += '<a id="btn_add_'+(i+1)+'" class="btn-common" title="Clear cart" href="javascript:;" onclick="Cart.clearCart(3, '+(i+1)+')" style="margin-right:10px;">Clear Cart</a>';
				if (hascdorvinyl=='y' && ((cdCount!=0 || vinylCount!=0) && requiresPayment=='true'))
				{
					cartHtml += '<a id="btn_add_'+(i+2)+'" class="btn-common" title="Recalculate" href="javascript:;" onclick="Cart.updateItem(3, '+(i+2)+')" style="margin-right:10px;">Recalculate</a>';
					cartHtml += '<a class="btn-common" href="javascript:;" onclick="popWinC(\'/content/help/shipping_estimator.php?_p='+shStr+'\', 560, 460, \'shipping\', \'yes\', \'yes\')" title="Estimate shipping costs" style="margin-right:10px;">Estimate Shipping</a>';
					cartHtml += '<a class="btn-common" href="/checkout/shipping.html" title="Go to checkout" style="margin-right:10px;">Proceed To Checkout</a>';
				}
				else
				{
					cartHtml += '<a class="btn-common" href="/checkout/confirm.html" title="Confirm your order">Confirm Order</a></td>';
				}
				cartHtml += '</td>';
				cartHtml += '<td style="width:180px;text-align:left;">';
				cartHtml += '<table cellpadding="0" cellspacing="0" id="box-subtotal">';
				cartHtml += '<td>Subtotal</td>';
				cartHtml += '<td>&nbsp;</td>';
				cartHtml += '<td>&#36;'+tp+'</td>';
				cartHtml += '</tr>';
				cartHtml += '</table>';
				cartHtml += '</td>';
				cartHtml += '</tr>';
				cartHtml += '</table>';
			}
			
			objoutput.innerHTML = cartHtml;
		}
		else
		{
			Cart.logEvent('Output object not found');
		}
	},
	
	PopulateShipping : function(items, tp, total_ps, countryName, zipCode, totalWeight, shippableItems, shippingName, shippingRate)
	{
		if (items==null)
		{
			var objoutput = document.getElementById('c_wrapper');
			
			if (objoutput!=null)
			{
				cartHtml = 'Your shopping cart appears to be empty.';
							
				objoutput.innerHTML = cartHtml;
			}
			else
			{
				Cart.logEvent('Output object not found');
			}
		}
		else
		{
			var objoutput = document.getElementById('cartitems');
			
			if (objoutput!=null)
			{
				var rwClr = '000';
				var cartHtml = '<table cellpadding="0" cellspacing="0" class="box-nobgr-cart">';
				
				for (var i = 0; i < items.length; i++)
				{
					cartHtml += '<tr style="background-color:#'+rwClr+';height:50px;">';
					cartHtml += '<td style="width:30px;text-align:left;">';
					cartHtml += '<img src="/images/thumb.php?img='+items[i].image+'&amp;mw=25&amp;mh=25" border="0" width="25" height="25" alt="'+items[i].product+'" />';
					cartHtml += '</td>';
					cartHtml += '<td style="width:324px;text-align:left;">'+items[i].product+'</td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].catalog+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].format+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].quantity+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">&#36;'+items[i].price+'</span></td>';
					cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">&#36;'+items[i].unit_total+'&nbsp;</span></td>';
					cartHtml += '</tr>';
					rwClr = rwClr=='000'?'222':'000';
				}
				cartHtml += '</table>';
							
				// If there are no shippable items, hide the shipping options.
				
				if (shippableItems=='y')
				{
					elPopulate('td-st', '&#36;'+Format.currencyFormatted(tp));
					elPopulate('td-sh', '&#36;'+Format.currencyFormatted(shippingRate));
					elPopulate('p-dest', 'Destination: '+countryName);
					elPopulate('td-tp', '&#36;'+Format.currencyFormatted(total_ps));
				}
				else
				{
					elDisplay('c_wrapper', 'none');
					elDisplay('c_wrapper_ns', 'inline-block');
					elPopulate('td-tp2', '&#36;'+Format.currencyFormatted(tp));
				}
				
				objoutput.innerHTML = cartHtml;
				
				var btnObj = document.getElementById('c-btn');
				btnObj.className = 'btn-common';
				btnObj.href = '/checkout/confirm.html';
			}
			else
			{
				Cart.logEvent('Output object not found');
			}
		}
	},
	
	RequestCmd : function(subtotal, total_ps, totalWeight, quantity, shippableItems, country, shippingService, shippingName, shippingRate, couponCollect, requiresPayment)
	{
		var reqString = 'subtotal='+subtotal+'&total='+total_ps+'&tw='+totalWeight;
		reqString += '&quantity='+quantity+'&shippableitems='+shippableItems;
		reqString += '&country='+country+'&service='+shippingService;
		reqString += '&service_name='+shippingName+'&rate='+shippingRate;
		reqString += '&coupon_collect='+couponCollect+'&require_payment='+requiresPayment;
		
		if (document.getElementById('c-btn')!=null)
		{
			var btnObj = document.getElementById('c-btn');
			btnObj.className = 'btn-disabled';
			btnObj.href = '#';
		}
		
		var index = AjaxHandler.AddRequest('/s3/ajax/request/cmdupdate.php', Cart.ResponseCmd);
		AjaxHandler.CallUpdate(index, reqString, Cart.s3cartmethod);
	},
	
	ResponseCmd : function(responseText, responseStatus)
	{
		if (document.getElementById('c-btn')!=null)
		{
			var btnObj = document.getElementById('c-btn');
			btnObj.className = 'btn-common';
			btnObj.href = '/checkout/confirm.html';
		}		
	},
	
	ShippingChange : function(service)
	{
		var newTotal = 0;
		var shippingName = '';
		var formobj = document.forms['chck_form_0'];
		
		for (var i=0; i < Cart.s3cartshipping.length; i++)
		{
			if (Cart.s3cartshipping[i][0]==service)
			{
				newTotal = parseFloat(Cart.s3carttotal) + parseFloat(Cart.s3cartshipping[i][3]);
				shippingName = Cart.s3cartshipping[i][1];
				shippingName += (Cart.s3cartshipping[i][9]=='d') ? ' (zone '+Cart.s3cartshipping[i][7]+')' : 
				' ('+Cart.s3cartshipping[i][2]+')';
				break;
			}	
		}
		
		elPopulate('td-tp', '&#36;'+Format.currencyFormatted(newTotal));
		elPopulate('td-sh', '&#36;'+Format.currencyFormatted(Cart.s3cartshipping[i][3]));
		Cart.RequestCmd(Cart.s3cartshipping[i][10], newTotal, Cart.s3cartshipping[i][12], Cart.s3cartshipping[i][13], Cart.s3cartshipping[i][15], Cart.s3cartshipping[i][14], service, shippingName, Cart.s3cartshipping[i][3], '', '');
	},
	
	AddOption : function addOption(selectbox, text, value, isSelected)
	{
		var optn = document.createElement("OPTION");
		optn.text = text;
		optn.value = value;
		if (isSelected) optn.selected = true;
		selectbox.options.add(optn);
	}, 
	 
	PopulateConfirm : function(items, shippableItems)
	{
		if (items==null)
		{
			var objoutput = document.getElementById('c_wrapper');
			
			if (objoutput!=null)
			{
				var cartHtml = '<div style="width:400px;margin: 20px auto;text-align:center;">';
				cartHtml += 'Your shopping cart appears to be empty.';
				cartHtml += '</div>';
				
				objoutput.innerHTML = cartHtml;
			}
			else
			{
				Cart.logEvent('Output object not found');
			}
		}
		else
		{
			var objoutput = document.getElementById('cartitems');
			
			if (objoutput!=null)
			{
				var cartHtml = '<table cellpadding="0" cellspacing="0" class="box-nobgr-cart">';
				var freeHtml = '<form name="f_form_0" action="" method="get">';  
				freeHtml += '<table cellpadding="0" cellspacing="0" class="box-nobgr-cartfi">';
				var freeItems = false;
				var rwClr = '000';
				var rwClrFr = '222';
				for (var i = 0; i < items.length; i++)
				{
					if (items[i].free=='n')
					{
						cartHtml += '<tr style="background-color:#'+rwClr+';height:50px;">';
						cartHtml += '<td style="width:30px;text-align:left;">';
						cartHtml += '<img src="/images/thumb.php?img='+items[i].image+'&amp;mw=25&amp;mh=25" border="0" width="25" height="25" alt="'+items[i].product+'" />';
						cartHtml += '</td>';
						cartHtml += '<td style="width:324px;text-align:left;">'+items[i].product+'</td>';
						cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].catalog+'</span></td>';
						cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].format+'</span></td>';
						cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].quantity+'</span></td>';
						cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">&#36;'+items[i].price+'</span></td>';
						cartHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">&#36;'+items[i].unit_total+'&nbsp;</span></td>';
						cartHtml += '</tr>';
						rwClr = rwClr=='000'?'222':'000';
					}
					else
					{
						freeItems = true;
						freeHtml += '<tr style="background-color:#'+rwClrFr+';height:50px;">';
						freeHtml += '<td style="width:20px;text-align:left;">';
						freeHtml += '<input class="rb" style="background-color:#'+rwClrFr+';" type="radio" value="'+items[i].key+'" name="fi" />';
						freeHtml += '</td>';
						freeHtml += '<td style="width:30px;text-align:left;">';
						if (items[i].display == 'y')
						{
							freeHtml += '<a href="'+items[i].link+'" title="View complete profile for '+items[i].product+'"><img class="img-list" src="/images/thumb.php?img='+items[i].image+'&mw=25&mh=25" border="0" width="25" height="25" alt="'+items[i].product+'" /></a>';
						}
						else
						{
							freeHtml += '<img src="/images/thumb.php?img='+items[i].image+'&mw=25&mh=25" border="0" width="25" height="25" alt="'+items[i].product+'" />';
						}
						freeHtml += '</td>';
						freeHtml += '<td style="width:300px;text-align:left;">';
						if (items[i].display == 'y')
						{
							freeHtml += '<a href="'+items[i].link+'" title="View complete profile for '+items[i].product+'">'+items[i].product+'</a>';
						}
						else
						{
							freeHtml += items[i].product;
						}
						freeHtml += '</td>';
						freeHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">'+items[i].catalog+'</span></td>';
						freeHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">CD</span></td>';
						freeHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">1</span></td>';
						freeHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">FREE</span></td>';
						freeHtml += '<td style="width:60px;text-align:center;"><span class="txt-white9">FREE</span></td>';
						freeHtml += '</tr>';
						rwClr = rwClrFr=='000'?'222':'000';	
					}
				}
				cartHtml += '</table>';
				freeHtml += '</table>';
				freeHtml += '</form>';
				
				objoutput.innerHTML = cartHtml;
				
				if (freeItems)
				{
					elAll('box-bgr-freeitems', freeHtml, '', 'inline-block');
					elVisibility('box-bgr-free-blurb', 'visible');
				}
				
				var btnObj = null;
				btnObj = document.getElementById('c-btn');
				if (btnObj!=null)
				{
					btnObj.className = 'btn-common';
					btnObj.href = 'javascript:Cart.GoPayPal()';
				}
			}
			else
			{
				Cart.logEvent('Output object not found');
			}
		}
	},  
	
	GoPayPal : function()
	{
		var pp = '/checkout/paypal.html';
		var cbitems = document.getElementsByTagName('INPUT');
		
		if (cbitems!=null && cbitems.length > 0)
		{
			for (var i = 0; i < cbitems.length; i++)
			{
				if (cbitems[i].checked==true)
				{
					pp += '?_fi='+cbitems[i].value;
					break;		
				}
			}
		}
		
		window.location.href=pp;
	}, 
	
	reportError : function(erMsg, devRep)
	{
		if (devRep){
			alert(erMsg);
		}else{
			Cart.ShowMiniError(erMsg, 'visible');
		}
	},
	
	logEvent : function(erMsg)
	{
		var reqString = 'event='+erMsg;
		var index = AjaxHandler.AddRequest('/s3/ajax/request/logjsevent.php');
		AjaxHandler.CallUpdate(index, reqString, 'GET');
	}
};
