Epson.ProductComparison =
{
	counter:0,
	data: {},
	temp_data: {},
	widtth:0,
	url:'',

	setup: function()
	{
		// set up custom dropdown
		var dropdown = jQuery( '<a id="pbi_compare" class="jsDropdown"><span>' + jQuery("#CompareItems #pbi_compare").text() + '</span></a>' ).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] : '';

		// set up any add to compare buttons
		jQuery(".itemComparison a").bind("click", Epson.ProductComparison.add );

		for (var i=0;i<Epson.ProductBrowser.data.length;i++)
		{

			var id = Epson.ProductBrowser.data[i].id;
			if (jQuery( '#pbi_'+id ).find( '.itemComparison a' ).text() == Epson.Localisation.ProductComparison.TXT003){
				jQuery( '#pbi_'+id ).find( '.itemComparison a' ).unbind( 'click' ).bind( 'click', Epson.ProductComparison.remove );
				Epson.ProductComparison.data[ id ] = Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id ] ];
				// increase counter
				Epson.ProductComparison.counter++;				
				jQuery("#pbi_compare span").text(Epson.ProductComparison.counter + " " + Epson.Localisation.ProductComparison.TXT004);
			}
		}
		for(var j=0;j<productToAddToComparison.length;j++){
			var id = productToAddToComparison[j];
			if(Epson.ProductComparison.data && !Epson.ProductComparison.data[ id ] && Epson.ProductBrowser.lookup[ id ] != undefined && Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id ] ] && Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id ] ].id == id){
				Epson.ProductComparison.data[ id ] = Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id ] ];
				// increase counter
				Epson.ProductComparison.counter++;
			} else {
				jQuery.each( Epson.ProductBrowser.temp_data, function( x, product )
				{
					if(Epson.ProductComparison.data && !Epson.ProductComparison.data[ id ] ){
						if(product && product.id == id){
							Epson.ProductComparison.data[ id ] = product;
							// increase counter
				            Epson.ProductComparison.counter++;
						}
					}
					
				} );
			}
			
			var text = Epson.ProductComparison.counter ? Epson.ProductComparison.counter +' '+ Epson.Localisation.ProductComparison.TXT004 : Epson.Localisation.ProductComparison.TXT005;
			//jQuery("#pbi_compare span").text(Epson.ProductComparison.counter + " " + Epson.Localisation.ProductComparison.TXT004);
			jQuery("#pbi_compare span").text(text);
		}
		
		// set up compare button
		jQuery( '#CompareItems .button' ).bind( 'click', Epson.ProductComparison.compare );
		if ( Epson.ProductComparison.counter < 2 ) jQuery( '#CompareItems .button' ).addClass( 'disabled' );

		if ( productToAddToComparison.length )
		{
			jQuery.getJSON( Epson.ProductComparison.url, { ids:productToAddToComparison.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);
	},

  	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();
			var interval = Math.log( image.offset().top - comparison_bar_position.top ) * 300;
			image.clone().css( { position:'absolute', top:image.offset().top+1+'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 }, interval ).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
			if ( Epson.ProductComparison.counter > 1 )
			jQuery( '#CompareItems .button' ).removeClass( 'disabled' );
			addProductToSession(id[1]);
		}

		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--;
			
			var tempData = Epson.ProductBrowser.temp_data;
			if(tempData){	
				jQuery.each(tempData, function(x)
				{
					if(this.id == id[1]){
						delete Epson.ProductBrowser.temp_data[x];
					}
					
				} );
			}
			if(productToAddToComparison){
				jQuery.each(productToAddToComparison, function(x)
				{
					if(this == id[1]){
						delete productToAddToComparison[x];
					}
					
				} );	
			}			

			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 );
			//jQuery( this ).unbind( 'click' ).bind( 'click', Epson.ProductComparison.add );

			if ( Epson.ProductComparison.counter < 2 ) jQuery( '#CompareItems .button' ).addClass( 'disabled' );
			
			// close dropdown if it is open
			Epson.ProductComparison.closeDropdown(e);

			removeProductFromSession(id[1]);
		}

		e.preventDefault();
	},

	compare: function(e)
	{
		var bodyClass = document.body.className;
		bodyClass = (bodyClass).replace(/^\s*|\s*$/g,'');
		var productToCompare = "";
	jQuery.each( Epson.ProductComparison.data, function() { 
		if(productToCompare == ""){
			productToCompare = this.id;
		}else{
			productToCompare = productToCompare + "," + this.id;
		}
	} );

		var newComparisonPageUrl = comparisonPageUrl;
		if(productToCompare != ""){
			newComparisonPageUrl = newComparisonPageUrl + "?productIds="+productToCompare;
			//If this page has body class pro, make comparision page a pro too
			if(bodyClass == "pro"){
				newComparisonPageUrl = newComparisonPageUrl + "&type=pro"
			}
		}
		if ( Epson.ProductComparison.counter > 1 ){
			document.cookie =  'previousPage=' + window.location.href + '; path=/'			
			window.location = newComparisonPageUrl;
		}
		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>' );
		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 );
		if(e.target.tagName != 'A' && e.target.tagName != 'IMG') {
		e.preventDefault();
		}
	},
	
	cancelClose: function(e)
	{
		e.stopPropagation();
	}
}
	var productAlreadyAdd = new Array();
	var productToAddToComparison = new Array();
	var comparisonPageUrl = '';
	function addProductToSession(id){
		var product = Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id ] ];
		if(id != null){
			var urlParam = "&productId="+id+"&isAdd=true";
			startProductAdditionRequest(urlParam);
		}
		
	}
	
	function removeProductFromSession(id){
		var product = Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ id ] ];
		if(id != null){
			var urlParam = "&productId="+id+"&isAdd=false";
			startProductAdditionRequest(urlParam);	
		}
	}
	
	function rollBackLastStep(lastStepIsAdd, productId){
		
		//if last step is add, delete entry from array, otherwise add it again
		if(lastStepIsAdd == 'true'){
			delete Epson.ProductComparison.data[ productId ];
			// decrease counter
			Epson.ProductComparison.counter--;
			//Change button text
			jQuery( '#pbi_'+productId ).find( '.itemComparison a' ).removeClass('remove').addClass('add').find( 'span' ).text(Epson.Localisation.ProductComparison.TXT002);
			jQuery( '#pbi_'+productId ).find( '.itemComparison a' ).removeClass( 'disabled' );
			// deal with events
			jQuery( '#pbi_'+productId ).find( '.itemComparison a' ).unbind( 'click' ).bind( 'click', Epson.ProductComparison.add );
		}else{
			Epson.ProductComparison.data[ productId ] = Epson.ProductBrowser.data[ Epson.ProductBrowser.lookup[ productId ] ];
			// increase counter
			Epson.ProductComparison.counter++;
			jQuery( '#pbi_'+productId ).find( '.itemComparison a' ).removeClass('remove').addClass('add').find( 'span' ).text(Epson.Localisation.ProductComparison.TXT003);
			jQuery( '#pbi_'+productId ).find( '.itemComparison a' ).find( 'a' ).addClass( 'disabled' );
			
			// deal with events
			jQuery( '#pbi_'+productId ).find( '.itemComparison a' ).unbind( 'click' ).bind( 'click', Epson.ProductComparison.remove );
		}
		
		var text = Epson.ProductComparison.counter ? Epson.ProductComparison.counter + " "+ Epson.Localisation.ProductComparison.TXT004 : Epson.Localisation.ProductComparison.TXT005;
			jQuery("#pbi_compare span").text( text );
		if ( Epson.ProductComparison.counter <= 1 ) {jQuery( '#CompareItems .button' ).addClass( 'disabled' );
			}else{jQuery( '#CompareItems .button' ).removeClass( 'disabled' );}
	}
