String.prototype.replaceAll = function(search, replace){
  return this.split(search).join(replace);
}

function parseJSON(str){
 if ($.trim(str) == '') return false;
 return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(str.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + str + ')');
}

function Set_Cookie( name, value, expires, path, domain, secure )
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct
expires time, the current script below will set
it for x number of days, to make it for hours,
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}

// this fixes an issue with the old method, ambiguous values
// with this test document.cookie.indexOf( name + "=" );
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}

// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function getSraArray() {
	var el = null, els = [];
	var myRe = /\[([0-9]+)\]/ig;
	var str = Get_Cookie('sra');
	while(el = myRe.exec(str)){
	  els.push(el[1]);
	}
	return els;
}

function AddToSravnenie(ID)
{
	if(parseInt(ID)>0)
	{
		Set_Cookie( 'sra', (Get_Cookie('sra') ? Get_Cookie('sra') : '')+'['+ID+']', '', '/', '', '' );
	}
}

function getCompparisonItemsList()
{
	// Assign handlers immediately after making the request,
	// and remember the jqxhr object for this request
	var jqxhr = $.ajax({ url: "/bitrix/tools/ajax_get_catalog_compparison.php" })
		.success(function() { /* success */ })
		.error(function() { eCompparisonList.text('error') })
		.complete(function() {
			var data = parseJSON(arguments[0].responseText);
			eCompparisonList.empty();
			$.each(data, function(index, item){
				// item['ID'] , item['CODE'] , item['NAME']
				var eItem = $('<div class="compItem" />')
					.appendTo(eCompparisonList);
				var eRemove = $('<img />')
					.attr({
						src: '/site-click/media/icon-remove-comparison.png',
						width: '9',
						height: '9',
						title: 'Удалить элемент из сравнений'
					})
					.click(function(){
						RemoveFromSravnenie(item['ID']);
						CheckAllComps();
						eItem.fadeOut(200, function(){
							$(this).remove();
						});
					})
					.appendTo(eItem);
				var eLink = $('<a target="_blank" />')
					.attr({
						href: '/catalog/'+item.CODE+'.html',
						id: 'comp_item_'+item.ID
					})
					.text(item.NAME)
					.appendTo(eItem);
			});
			var eCompare = $('<a href="/catalog/sravnenie/" />')
				.text('Порiвняти')
				.addClass('nextLink')
				.appendTo(eCompparisonList);
		});

	// perform other work here ...

	// Set another completion function for the request above
	//jqxhr.complete(function(){ alert("second complete"); });
}

function RemoveFromSravnenie(ID)
{
	var sra = Get_Cookie('sra');
	sra = sra.replaceAll('['+ID+']','');
	Set_Cookie( 'sra', sra, '', '/', '', '' );
}

function CheckSravnenieByID(ID)
{
	ID = parseInt(ID);
	sra = Get_Cookie('sra');
	if(!sra)
		sra = '';
	if(sra.indexOf('['+ID+']') !== -1)
		return true;
	else
		return false;
}

function CheckAllComps()
{
	$('INPUT.sravnenie-checkbox')
		.each(function(){
			if(CheckSravnenieByID($(this).val()))
				$(this).attr('checked', 'checked');
			else
				$(this).attr('checked', '');
		})
		.unbind('click')
		.click(function(){
			var ID = $(this).val();
			if($(this).is(':checked')) {
				if(getSraArray().length >= 4) {
					$(this).removeAttr('checked');
					alert('Порівнювати можна максимум 4 товара');
				}
				else
					AddToSravnenie(ID);
			} else
				RemoveFromSravnenie(ID);
			getCompparisonItemsList();
		});
}

$(function(){
	/* Блок (контейнер) с элементами продукции для сравнения */
	window.eCompparisonList = $('#compparisonList');

	/* Показать (загрузить) элементы продукции для сравнения */
	getCompparisonItemsList();

	CheckAllComps();
});

