var MerchantCompare = 
{

		'_compares': [],
		
	'Add': function(merchantName) 
	{
		// we only want to allow 5 compares at any given time:
		if(MerchantCompare._compares.length >= 5)
		{
			//MerchantCompare._compares.shift();
			alert('You have reached the maximum selection of 5 websites; please remove one first before adding another.');
			return;
		}	
		MerchantCompare._compares.push(merchantName);
		MerchantCompare._saveCookie();
		//MerchantCompare._addListItem(merchantName);
		MerchantCompare._reloadComparison();
		
		MerchantCompare.UpdateComparesText();
	},
	
	'UpdateComparesText': function()
	{
		var el = dojo.byId('compareBar');
		
		if(!el)
			return;
		
		//el = el.getElementsByTagName('span')[0];
		
		if(MerchantCompare._compares.length == 0)
			el.innerHTML = 'Select up to 5 websites to compare';
		else if(MerchantCompare._compares.length == 1)
			el.innerHTML = 'Select at least 1 more website to compare';
		else if(MerchantCompare._compares.length == 4)
			el.innerHTML = 'Select up to 1 more website to compare <a href="/compare" title="Compare the selected websites">Compare Selection</a>';			
		else if(MerchantCompare._compares.length == 5)
			el.innerHTML = 'Maximum selection of 5 websites reached <a href="/compare" title="Compare the selected websites">Compare Selection</a>';
		else
			el.innerHTML = 'Select up to ' + (5 - MerchantCompare._compares.length) + ' more websites to compare <a href="/compare" title="Compare the selected websites">Compare Selection</a>';
	},
	
	'Remove': function(merchantName)
	{
		var idx = -1;
		var i   = MerchantCompare._compares.length;
		
		while(i--)
		{
			 if(MerchantCompare._compares[i] == merchantName)
			 {
				 idx = i;
				 break;
			 }
		}
		
		if(idx != -1)
		{
			MerchantCompare._compares.splice(idx, 1);
			MerchantCompare._saveCookie();
			//MerchantCompare._addListItem(merchantName);
			MerchantCompare._reloadComparison();
		}
		
		MerchantCompare.UpdateComparesText();
	},
	
	'Event_ToggleCompare': function(e)
	{
		var mid = e.target.id.replace('compare-', '');
		
		if(location.pathname.indexOf('/compare') == -1 && MerchantCompare._compares.length == 5 && e.target.checked == true)
		{	
			alert('You have reached the maximum selection of 5 websites; please remove one first before adding another.');
			e.target.checked = false;
		}
		
		if(!e.target.checked || location.pathname.indexOf('/compare') > -1)
		{
			MerchantCompare.Remove(mid);
		}
		else
		{
			MerchantCompare.Add(mid);
		}
				
		if(dojo.hasClass(e.target, 'refresh'))
		{
			window.setTimeout(function(){
				window.location.reload();
			},500);
		}
	},

	'AjaxEvent_PopulateCompare': function(retObj,retXhr)
	{
		if(retXhr.xhr && retXhr.xhr.status)
			retObj = retXhr.xhr;

		if(dojo.byId('gs-comparison'))
			dojo.byId('gs-comparison').innerHTML = retObj.responseText;
	},
	
	'AjaxEvent_MerchantItem': function(retObj,retXhr)
	{
		if(retXhr.xhr && retXhr.xhr.status)
			retObj = retXhr.xhr;

		if(dojo.byId('gs-comparison-list'))
			dojo.byId('gs-comparison-list').innerHTML = dojo.byId('gs-comparison-list').innerHTML + retObj.responseText;
	},
	
	'_isInCompare': function(merchantName)
	{		
		var i = MerchantCompare._compares.length;
		
		while(i--)
		{
			 if(MerchantCompare._compares[i] == merchantName)
			 {
				 return true;
			 }
		}
		
		return false;
	},
		
	'_addListItem': function(mid)
	{

		var xhrArgs = {
				'postData': {},
				'url': '/merchants/' + mid + '/compareitem',
				'handleAs': 'text',
				'load': MerchantCompare.AjaxEvent_MerchantItem,
				'error': function(){}
			};

		sendRequest('get', xhrArgs);
	},
	
	'_removeListItem': function(mid)
	{
		var compareItem = dojo.byId('comparemerchant-' + mid);

		if(compareItem)
		{
			compareItem.parentNode.removeChild(compareItem);
		}
	},
	
	'_reloadComparison': function()
	{
		MerchantCompare._loadCookie();
		
		var i = MerchantCompare._compares.length;
		while(i--)
		{
			MerchantCompare._addListItem(MerchantCompare._compares[i]);
			var elem = dojo.byId('compare-' + MerchantCompare._compares[i]);

			if(elem){
				elem.checked = true;						
			}
		}
		
		MerchantCompare._toggleCompareButtons();
		
		MerchantCompare.UpdateComparesText();
	},
	
	'_loadCookie': function()
	{
		MerchantCompare._compares = null;
		var mcookie = dojo.cookie('merchantcompare');
		
		if(mcookie)
		{
			MerchantCompare._compares = mcookie.split(',');
		}

		if(!MerchantCompare._compares)
		{
			MerchantCompare._compares = [];
		}
	},
	
	'_saveCookie': function()
	{
		var cookieStr = MerchantCompare._compares.join(',');
		dojo.cookie('merchantcompare', cookieStr, 1);
	},
	
	'_toggleCompareButtons': function()
	{
		var list = dojo.query('.compare-button');
		var i    = list.length;
		
		var i = MerchantCompare._compares.length;
		while(i--)
		{
			var elem = dojo.byId('compare-' + MerchantCompare._compares[i]);

			if(elem)
			{
				elem.checked = true;						
			}
		}
	},
	
	'_attachCompareButtonEvents': function()
	{
		var list = dojo.query('.compare-button');
		var i    = list.length;
		
		while(i--)
		{
			dojo.connect(list[i], 'onclick', MerchantCompare.Event_ToggleCompare);
		}
	},
	
	'ClearComparison': function()
	{
		MerchantCompare._compares = [];
		MerchantCompare._saveCookie();
		MerchantCompare._reloadComparison();
	}
};


dojo.addOnLoad(function()
{
	dojo.require('dojo.cookie');
	
	MerchantCompare._attachCompareButtonEvents();	
	MerchantCompare._reloadComparison();
});