Epson.ProductComparison =
{
	counter:0,
	data: {},
	widtth:0,
	url:'',
	page_url:'',

	setup: function()
	{
		// set up custom dropdown
		var dropdown = jQuery( '<div id="pbi_compare" class="jsDropdown"><span>' + jQuery("#CompareItems #pbi_compare").text() + '</span></div>' ).bind( 'click', Epson.ProductComparison.openDropdown );
		jQuery("#pbi_compare").replaceWith( dropdown );

		// get the url for saved data
		var url = jQuery( '#CompareItems' ).attr( 'class' ).match( /pc-url-([^\s]+)/ );
		Epson.ProductComparison.url = url ? url[1] : '';

		// get the url for comparison page
		var page_url = jQuery( '#CompareItems' ).attr( 'class' ).match( /pc-page_url-([^\s]+)/ );
		Epson.ProductComparison.page_url = page_url ? page_url[1] : '';

		// set up any add to compare buttons
		jQuery(".itemComparison a").bind("click", Epson.ProductComparison.add );

		// set up compare button
		jQuery( '#CompareItems .button' ).addClass( 'disabled' ).bind( 'click', Epson.ProductComparison.compare );

		// load in saved data if there is any
		var items = Epson.Cookies.read( 'comparison' );
		if ( items ) jQuery.getJSON( Epson.ProductComparison.url, { ids:items.join(',') }, Epson.ProductComparison.populateData );
	},

	populateData: function( json )
	{
		if ( json ) Epson.ProductComparison.data = json;

		// set counter
		jQuery.each( Epson.ProductComparison.data, function() { Epson.ProductComparison.counter++ } );

		// set dropdown text
		jQuery("#pbi_compare span").text(Epson.ProductComparison.counter+' '+Epson.Localisation.ProductComparison.TXT004);

		// enable button if necessary
		if ( Epson.ProductComparison.counter > 0 ) jQuery( '#CompareItems .button' ).removeClass( 'disabled' );
	},

  	add: function(e)
  	{
		var item = jQuery(this).parents(".productItem, .productComparisonContainer");
		var id = item.attr( 'id' ).match( /pbi_([^\s]+)/ );

		if ( Epson.ProductComparison.counter >= 3 )
		{
			// position
			var offset = jQuery( this ).offset( { border:true, padding:true } );
			var top = offset.top;
			var left = offset.left - 5;

			Epson.ToolTip.open( top, left, Epson.Localisation.ProductComparison.TXT001 );
			jQuery( this ).bind( 'mouseout', Epson.ToolTip.close );
		}
		else if ( item )
		{
			// save the item
			Epson.ProductComparison.data[ id[1] ] = Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id[1] ] ];

			// increase counter
			Epson.ProductComparison.counter++;

			// animate the image to the comparison bar
			var image = item.find( 'img.itemProductImage' );
			var comparison_bar_position = jQuery( '#CompareItems #pbi_compare' ).offset();
			image.clone().css( { position:'absolute', top:image.offset().top+'px', left:image.offset().left+'px', width:image.width()+'px', height:image.height()+'px', zIndex:100 } ).appendTo( jQuery( 'body' ) ).animate( { left:comparison_bar_position.left+'px', top:comparison_bar_position.top+'px', width:(image.width()/10)+'px', height:(image.height()/10)+'px', opacity:0 }, 750 ).queue( function() { jQuery( this ).remove() } );

			jQuery(this).removeClass('remove').addClass('add').find( 'span' ).text(Epson.Localisation.ProductComparison.TXT003);
			jQuery(this).find( 'a' ).addClass( 'disabled' );

			// set dropdown text
			jQuery("#pbi_compare span").text(Epson.ProductComparison.counter+' '+Epson.Localisation.ProductComparison.TXT004);

			// save data to cookie
			var items = [];
			jQuery.each( Epson.ProductComparison.data, function() { items.push( this.id ) } );
			Epson.Cookies.write( 'comparison', items );

			// deal with events
			if ( item.length ) jQuery( this ).unbind( 'click' ).bind( 'click', Epson.ProductComparison.remove );

			// enable compare button
			jQuery( '#CompareItems .button' ).removeClass( 'disabled' );
		}

		e.preventDefault();
	},
	
	remove: function(e)
	{
		var item = jQuery(this).parents(".productItem, .productComparisonContainer");
		if ( item.length ) var id = item.attr( 'id' ).match( /pbi_([^\s]+)/ );
		else var id = jQuery( this ).parents( 'li' ).attr( 'id' ).match( /pbc_([^\s]+)/ );

		if ( id )
		{
			delete Epson.ProductComparison.data[ id[1] ];

			// decrease counter
			Epson.ProductComparison.counter--;

			jQuery( '#pbi_'+id[1] ).find( '.itemComparison a' ).removeClass('remove').addClass('add').find( 'span' ).text(Epson.Localisation.ProductComparison.TXT002);
			jQuery( '#pbi_'+id[1] ).find( '.itemComparison a' ).removeClass( 'disabled' );

			// set dropdown text
			var text = Epson.ProductComparison.counter ? Epson.ProductComparison.counter+' '+Epson.Localisation.ProductComparison.TXT004 : Epson.Localisation.ProductComparison.TXT005;
			jQuery("#pbi_compare span").text( text );

			// save data to cookie
			var items = [];
			jQuery.each( Epson.ProductComparison.data, function() { items.push( this.id ) } );
			if ( !items.length ) Epson.Cookies.remove( 'comparison' );
			else Epson.Cookies.write( 'comparison', items );

			// deal with events
			jQuery( '#pbi_'+id[1] ).find( '.itemComparison a' ).unbind( 'click' ).bind( 'click', Epson.ProductComparison.add );

			if ( Epson.ProductComparison.counter == 0 ) jQuery( '#CompareItems .button' ).addClass( 'disabled' );

			// close dropdown if it is open
			Epson.ProductComparison.closeDropdown(e);
		}

		e.preventDefault();
	},

	compare: function(e)
	{
		if ( !jQuery( '#CompareItems .button' ).hasClass( 'disabled' ) ) window.location = Epson.ProductComparison.page_url;

		e.preventDefault();
	},

	openDropdown: function (e)
	{
		var dropdown = jQuery( '<div id="CompareItemsDropdown" class="genericRoundedCorners"><ul class="content"></ul><div class="bottom"><div class="bl"></div><div class="br"></div><div class="b"></div></div></div>' ).bind( 'click', Epson.ProductComparison.cancelClose ) ;
		var position = jQuery( this ).offset( { border:true, padding:true } );
		dropdown.css( { position:'absolute', top:position.top+jQuery(this).height()+'px', left:position.left+'px', width:'220px' } );

		var i = 0;
		jQuery.each( Epson.ProductComparison.data, function( x, product )
		{
			var item = jQuery( '<li id="pbc_'+product.id+'"><a href="'+product.url+'"><img src="'+product.thumbnail+'" /></a><a href="'+product.url+'">'+product.name+'</a><div></div></li>');
			item.find( 'div' ).append( jQuery( '<a href="#" class="buttonSmall"><span>'+Epson.Localisation.ProductComparison.TXT007+'</span></a>' ).bind( 'click', Epson.ProductComparison.remove ) );
			dropdown.find( 'ul' ).append( item );
			i++;
		} );
		if ( i < 2 ) dropdown.find( 'ul' ).append( jQuery( '<li class="lastItem">'+Epson.Localisation.ProductComparison.TXT006+'</li>' ) );

		jQuery( '#Container' ).append( dropdown );

		jQuery( '#CompareItems #pbi_compare' ).addClass( 'open' );

		// event handling
		jQuery( '#CompareItems #pbi_compare' ).unbind( 'click', Epson.ProductComparison.openDropdown );
		setTimeout( function() { jQuery( 'body' ).bind( 'click', Epson.ProductComparison.closeDropdown ) }, 1 );

		e.preventDefault();
	},
	
	closeDropdown: function(e)
	{
		jQuery( '#CompareItemsDropdown' ).remove();

		jQuery( '#CompareItems #pbi_compare' ).removeClass( 'open' );

		jQuery( '#CompareItems #pbi_compare' ).bind( 'click', Epson.ProductComparison.openDropdown );
		setTimeout( function() { jQuery( 'body' ).unbind( 'click', Epson.ProductComparison.closeDropdown ) }, 1 );

		e.preventDefault();
	},

	cancelClose: function(e)
	{
		e.stopPropagation();
	}
}
