$(function()
{
	$.fn.itemActions = function(options)
	{
		var settings = $.extend({}, $.fn.itemActions.defaults, options);
        $.fn.itemActions.instid = Math.round(Math.random() * 1000000000);
        $this = $(this);
        $.fn.itemActions.options = $.meta ? $.extend({}, settings, $this.data()) : settings;

        $.fn.itemActions.options.loadingImage.src = $.fn.itemActions.options.loading_image;

        if( $('a[rel=facebook]').length )
			$('a[rel=facebook]').attr('href', 'javascript:void(0);').attr('target', '');

		$($.fn.itemActions.options.share_box).removeClass('visible').addClass('hidden');
		$.fn.itemActions.action.enable();

		$('#pricing_btn, #order_btn')
		.bind('click', function()
		{
			if( incart )
				window.location.href = remove_from_cart_url;
			else
			{
				if( !$('div.pricing-tool').length )
					$('body').append('<div id="dialog" class="pricing-tool" style="display: none;"/>');
				$.fn.itemActions.dialog.show('Pricing Tool', 'Please wait...', incart);
			}
		});

		$.fn.itemActions.handleArticleImage();

		// Hack to prevent error when saaui_path does not exists
		/*if( window['saaui_path'] != undefined )
		{
			var saaui = $('<div id="saaui"></div>').load(saaui_path);
			var saaui_memory;

			// Initialize the SAA Tool
			PLUSPACKSCALC.init();


			// Pricing button for SAA Tool
			$('#pricing_btn')
			.bind('click', function()
			{
				if( !$('#dialog').find('#ppksCalculator').length )
					saaui_memory = saaui.html(); // initialize the saaui_memory
				//var dialog = new $.fn.itemDialog();
				$.fn.itemActions.dialog.show('Pricing Tool', saaui_memory, incart);

				$('div.menuItem')
				.each(function()
				{
					$(this).unbind();
					$(this).bind('mouseover', function(){ PLUSPACKSCALC.hover.on($(this)) });
					$(this).bind('mouseout', function(){ PLUSPACKSCALC.hover.off($(this)) });
				});

			});
		}*/

		if( $('.item').length )
		{
			if( $('a[rel=price]').length )
				$('a[rel=price]').attr('href', 'javascript: void(0);');
			if( $('a[rel=magnify]').length )
				$('a[rel=magnify]').parent().removeAttr('style');

			$.fn.itemActions.showItem();

			//	IMPORTANT - set the right image here
			//	either labeled or not
			var labelSwitch = $.fn.viewItem.setLabelState('labels');
			if( labelSwitch == false )
				labelSwitch = 'on';
			var labelElement = $('.item-actions').find('a[rel=labels]');

			if( labelSwitch == 'off' )
				$.fn.itemActionFunctions.swap_item(labelElement, 'off');

			$.fn.itemActions.preloadImages(icons, $.fn.itemActions.defaults.path_to_icons);

			var labeledItemUrl = $('.item').find('img:last').attr('src');
		}

		$($.fn.itemActions.options.share_link).find('a')
		.each(function()
		{
			$.fn.itemActions.action.over(this, $.fn.itemActions.options);
			$.fn.itemActions.action.out(this, $.fn.itemActions.options);
		});
	};

	$.fn.itemActions.ajaxMessage =
	{
		show	:	function()
			{
				var message_loader = $('#global-load-message-wrapper');
				message_loader
				.css({
					left: ($(window).width() - message_loader.width())/2 + 'px',
					top: (($(window).height() - message_loader.height())/2 + $(window).scrollTop()) +'px'
				})
				.fadeIn('fast');
			},
		hide	:	function()
			{
				var message_loader = $('#global-load-message-wrapper');
				message_loader.fadeOut('fast');
			}
	};

	$.fn.itemActions.defaults =
	{
		previous_state      :       'click',
		loading_image      	:       'skins/images/ajax-loader.gif',
		getpriceDataSrc     :       'ajax/get_price.php',
		pricingToolDataSrc	:		'ajax/pricing_tool.php',
		zoomDataSrc      	:       'ajax/zoom.php',
		path_to_icons		:		'/skins/images/',
		share_link			:		'.item-actions',
		share_box			:       '.social-networks',
		passthroughLinks    :       ['call','linkedin','digg','email','stumbleupon','events','download','lightbox','labels','cite'],
		priceObject			:		new Object(),
		loadingImage		:		new Image()
	};

	$.fn.itemActions.share	=
	{
		toggle: function()
		{
			if ('none' == $($.fn.itemActions.options.share_box).css('display'))
				$.fn.selectElements.hide();
			else
				$.fn.selectElements.show();

			$($.fn.itemActions.options.share_box)
			.slideToggle('slow');

		},
		mouseleave: function()
		{
			$($.fn.itemActions.options.share_box)
			.bind('mouseleave', function()
			{
				$.fn.selectElements.show();
				$(this).slideUp('slow');
			});
		}
	};

	$.fn.itemActions.action =
	{
		init:		function(obj)
		{
			// Must unbind click events to ensure that
			// each element will only ever have a
			// click event once at any given time

			var rel = $(obj).attr('rel');
			// Store the original text of the icons
			if( $.fn.itemActions.currentClickedItem != rel )
				$.fn.itemActions.iconNormalText[rel] = $(obj).find('span.action-text').html();

			$(obj).unbind('click')
			.bind('click', function(event)
			{
				var action_text = $(obj).find('span.action-text').html();
				$.fn.itemActions.currentClickedItem = rel;

				switch( rel)
				{
					case 'labels' 	:
						$.fn.itemActions.swap_image(this, event);
										break;

					case 'magnify'	:
						if( action_text == 'Stop Magnifying' )
						{
							$(this).find('span.action-text').html($.fn.itemActions.iconNormalText[rel]);
							$.fn.itemActions.removeInlineZoom($(this));
							$.fn.itemActions.action.enable();
						}
						else
						{
							$(this).find('span.action-text').html('Stop Magnifying');
							$.fn.itemActions.inlineZoom();
							$.fn.itemActions.action.disable($(this));
						}
										break;
					case 'price'	:
						$.fn.itemActions.dialog.show('Get Price', '');
						//$.fn.itemActions.action.disable($(this));
										break;

					case 'cart'	:
						if( /Add to cart/.test($(this).find('span.action-text').html()) )
						{
							//if( passthroughLinks.indexOf('cart') )
								//$.fn.itemActions.options.passthroughLinks.pop();

							if( $('#pricing_btn').length )
							{
								$('#pricing_btn').trigger('click');
								event.preventDefault();
							}
						}
						else if( /Remove from cart/.test($(this).find('span.action-text').html()) )
						{
							$.fn.itemActions.options.passthroughLinks.push('cart');
						}
										break;

					case 'call'	:
										break;

					case 'labels'	:
										break;

					case 'lightbox'	:
										break;

					case 'share'	:
						$.fn.itemActions.share.toggle();
						$.fn.itemActions.share.mouseleave();
										break;
					case 'facebook'	:
						$.fn.itemActions.fbs_click();
										break;
					case 'twitter'	:
						$.fn.itemActions.twit_click();
										break;
					case 'print'	:
						$.fn.itemActions.printThis($('.item'));
										break;
					case 'download'	:	break;
				}

				$.fn.itemActions.excludedLinks = $.fn.itemActions.options.passthroughLinks.join('');
				if( !$.fn.itemActions.excludedLinks.match(rel) )
					event.preventDefault();
			});
		},
		enable:	function()
		{
			$($.fn.itemActions.options.share_link).each(function()
			{
				$(this).find('a').each(function()
				{


					if( $.fn.itemActions.clones[$(this).attr('rel')] != undefined )
					{
						var clone = $.fn.itemActions.clones[$(this).attr('rel')];
						var prnt = $(this).parent();
						$(this).remove();

						if( !$.fn.itemActions.excludedLinks.match(clone.attr('rel')) )
						{
							clone.click(function(e)
							{
								e.preventDefault();
							});
						}

						prnt.append($.fn.itemActions.clones[$(this).attr('rel')]);
					}
					else
						$.fn.itemActions.action.init(this);
				});
			});


		},
		disable:	function(obj)
		{
			$($.fn.itemActions.options.share_link).find('a').each(function()
			{
				if( (obj.attr('rel') != $(this).attr('rel')) && ($.fn.itemActions.excludedLinks.indexOf($(this).attr('rel')) == -1 ) )
				{
					//$.fn.itemActions.clones[$(this).attr('rel')] = $(this).clone(true, true);

					$(this).unbind('click')
					.bind('click', function(e)
					{
						e.preventDefault();
						//alert('"'+ $(this).find('span.action-text').html() + '" is disabled while the "'+ obj.find('span.action-text').html() +'" feature is activated.\n\nClose the "'+ obj.find('span.action-text').html() +'" feature to enable!');
						$.fn.itemActions.dialog.show('Feature Temporarily Disabled', '<p style="font-weight: bold; text-align: center;">"'+ $(this).find('span.action-text').html() + '" is deactivated while the "'+ obj.find('span.action-text').html().split(' ').pop() +'" feature is activated.<br><span style="font-weight: normal;">Please click "<i><strong>'+ obj.find('span.action-text').html() +'</strong></i>" to activate.</span></p>');

						$('#dialog').dialog('option', 'buttons',
						{
							'OK' :
							function()
							{
								$('.ui-dialog').remove();
								$('#dialog').remove();
							},
							"Stop Magnifying" :
							function()
							{
								$('a[rel=magnify]')
								.trigger('click');
								//$.fn.itemActions.removeInlineZoom('a[rel=magnify]');
								//$.fn.itemActions.action.enable($('a[rel=magnify]'));
								$('.ui-dialog').remove();
								$('#dialog').remove();
							}
						});
					});
				}
			});
		},
		temp_disable: function()
		{
					$($.fn.itemActions.options.share_link).find('a')
					.each(function()
					{
						if( $(this).attr('rel') != 'magnify' && $(this).attr('rel') != 'stop' && ( $(this).attr('href').indexOf('void') > -1 ||  $(this).attr('href').indexOf('javascript') > -1) )
						{
							$(this).unbind('click')
							.bind('click', function()
							{
								$.fn.itemActions.dialog.show('Feature Temporarily Disabled', '<p style="font-weight: bold; text-align: center;">This feature is disabled while magnifying.<br><span style="font-weight: normal;">Please click "<i>Stop Magnifying</i>" to re-enable.</span></p>');

								$('#dialog').dialog('option', 'buttons',
								{
									'OK' :
									function()
									{
										$('.ui-dialog').remove();
									},
									"Stop Magnifying" :
									function()
									{
										$.fn.itemActions.removeInlineZoom('a[rel=magnify]', o);
										$.fn.itemActions.action.enable($('a[rel=magnify]'));
										$('.ui-dialog').remove();
									}
								});
							});
						}
					});
		},
		over:		function(obj)
		{
					$(obj)
					.bind('mouseover', function(event)
					{
						switch( $(this).attr('rel') )
						{
							case 'magnify'	:	break;
							case 'cart'		:	break;
							case 'lightbox'	:	break;
							case 'share'	:	break;
							case 'print'	:	break;
							case 'download'	:	break;
							case 'facebook'	:	break;
							case 'twitter'	:	break;
							case 'facebook'	:	break;
							case 'events'	:	break;
						}
						$.fn.itemActions.swap_image(this, event);
					});
		},
		out:		function(obj)
		{
					$(obj)
					.bind('mouseout', function(event)
					{
						switch( $(this).attr('rel') )
						{
							case 'magnify'	:	break;
							case 'cart'		:	break;
							case 'lightbox'	:	break;
							case 'share'	:	break;
							case 'print'	:	break;
							case 'download'	:	break;
							case 'facebook'	:	break;
							case 'twitter'	:	break;
							case 'facebook'	:	break;
							case 'events'	:	break;
						}
						$.fn.itemActions.swap_image(this, event);
					});
		}
	};

	$.fn.itemActions.clones = new Array();
	$.fn.itemActions.excludedLinks = '';
	$.fn.itemActions.options = '';
	$.fn.itemActions.iconNormalText = new Array();
	$.fn.itemActions.currentClickedItem = null;
	$.fn.selectElements =
	{
		targets : new Array(
			$('#max_to_show'),
			$('.collection-type-counts'),
			$('.collection-transport-available-colls'),
			$('.toolbar-add-to')
		),
		hide : function()
		{
			$($.fn.selectElements.targets).each(function(){ $(this).css({visibility: 'hidden'}); });
		},
		show : function()
		{
			$($.fn.selectElements.targets).each(function(){ $(this).css({visibility: 'visible'}); });
		}
	};

	//	Check if the a link has been clicked
	$.fn.itemActions.isClicked = function()
	{
		if( $.fn.itemActions.options.previous_state == 'click' )
		{
			return true;
		}
		return false;
	}

	$.fn.itemActions.swap_image = function(obj, event)
	{
		switch(event.type)
		{
			case 'mouseover'	:	var state = 'over';		break;
			case 'mouseout'		:	var state = 'over';		break;
			case 'click'		:	var state = 'clicked';	break;
		}
		var img = $(obj).find('img');
		var src = img.attr('src');
		var src_array = src.split(".");
		var index = src_array[0].indexOf('_' + state);

		if( index == -1 )
		{
			var a = src_array[0].split('_');
			if( a[2] == null )
				a[2] = '';
			else
				a[2] = '_' + a[2];

			if(state == 'over' && !$.fn.itemActions.isClicked())
				var nsrc = a[0] + '_' + a[1]+ a[2] + '_' + state + '.' + src_array[1];
			else
				var nsrc = a[0] + '_' + a[1] + '_' + state + a[2] + '.' + src_array[1];

			$(img).attr('src', nsrc);
		}
		else
		{
			if( $.fn.itemActions.isClicked() && state != 'clicked' )
				var osrc = src_array[0].replace(/_over/, '') + "." + src_array[1];
			else
				var osrc = src_array[0].replace('_' + state, '') + "." + src_array[1];

			$(img).attr('src', osrc);
		}

		$.fn.itemActions.options.previous_state = event.type;
	};

	//facebook
	$.fn.itemActions.fbs_click = function(){
		u = location.href;
		t = document.title;
		window.open( 'http://www.facebook.com/sharer.php?u=' + encodeURIComponent(u) + '&t=' + encodeURIComponent(t),  'sharer', 'toolbar=0,status=0,width=626,height=436');

		return false;
	};

	//Twitter
	$.fn.itemActions.twit_click = function(){
		u=location.href;
		t = document.title;
		window.open('http://twitter.com/share?url=' + escape(u) + '&via='+ twitter_account +'&text='+ share_text,'sharer','toolbar=0,status=0,width=626,height=436');

		return false;
	};

	//Printing Overridden by subclass
	$.fn.itemActions.printThis = function(obj){};

	//ShowItem Overridden in subclass
	$.fn.itemActions.showItem = function(){};

	//Inline Zoom Overiddedn in subclass
	$.fn.itemActions.inlineZoom = function(obj){};
	$.fn.itemActions.removeInlineZoom = function(obj){};

	// Preload Images Overridden in subclass
	$.fn.itemActions.preloadImages = function(images, path){};

	// Handle Article Image Overridden in subclass
	$.fn.itemActions.handleArticleImage = function(){};

	// Composite in the Dialogs
	if( $.fn.itemDialog != undefined )
		$.fn.itemActions.dialog = $.fn.itemDialog;
});
