(function() {

	/**
	 * Adds virtual page views for Google Analytics
	 *
	 * Add new virtual page views at the bottom of this file in the onDOMReady
	 * event handler.
	 *
	 * @copyright 2010 silverorange
	 */

	var Event = YAHOO.util.Event;
	var Dom   = YAHOO.util.Dom;

	function addTracking(el, uri)
	{
		if (!el) {
			return;
		}

		Event.on(
			el,
			'click',
			function(e) {
				_gaq.push(['_trackPageview', uri]);
			}
		);
	};

	// cart promotion link virtual page views
	function addPromotionTracking()
	{
		var promotion_links = [];

		// promotion virtual page views
		var promotion = document.getElementById('promotion');
		if (promotion) {
			var links = Dom.getElementsBy(
				function (n) {
					return (/^\/?cart\?promotion=/.test(n.getAttribute('href')));
				},
				'a',
				promotion
			);

			promotion_links = promotion_links.concat(links);
		}

		// set up virtual page views for promotions
		for (var i = 0; i < promotion_links.length; i++) {
			var link = promotion_links[i].getAttribute('href');

			// add '/' prefix for virtual page view
			if (link.charAt(0) != '/') {
				link = '/' + link;
			}

			addTracking(
				promotion_links[i],
				link
			);
		}
	};

	function addTwitterTracking()
	{
		addTracking(
			document.getElementById('front_twitter_link'),
			'/outgoing/homepage/twitter'
		);

		addTracking(
			document.getElementById('blorg_twitter_gadget_footer_link'),
			'/outgoing/homepage/twitter/gadget/footer'
		);
	};

	function addProductImageTracking()
	{
		if (typeof product_image_display == 'undefined') {
			return;
		}

		var base_href = document.getElementsByTagName('base')[0].href;
		var uri = location.href.substring(base_href.length - 1);
		uri = uri.split(/#/, 2)[0];

		if (/[^\/]$/.test(uri)) {
			uri += '/';
		}

		product_image_display.onSelectImage.subscribe(function (type, args) {

			var image_uri = uri + 'image' + args[0] + '/' + args[1];
			_gaq.push(['_trackPageview', image_uri]);
		});
	};

	Event.onDOMReady(function() {

		// if analytics is not present, do nothing
		if (typeof _gaq == 'undefined') {
			return;
		}

		addTracking(
			document.getElementById('facebook_header_link'),
			'/outgoing/layout/header/facebook'
		);

		addTracking(
			document.getElementById('geotrust').getElementsByTagName('a')[0],
			'/outgoing/layout/footer/geotrust'
		);

		addTwitterTracking();
		addPromotionTracking();
		addProductImageTracking();

	});

})();

