/* analytics.js
* v 0.1
*	
* Implentation of Coremetrics & Google wrapper.
--------------------------------------------------------------------------------------- */

var _gaq = _gaq || [];

GUCCI.GoogleAnalytics = {
	enabled: true,
	phase2enabled: false,

	trackerNames: [],
	trackerIds: [],
	panelPosition: "",
	widgetPosition: "",
	gender: "",
	category: "",
	pageName: "",

	//	googRegionName: "grNA"
	//	googCountryName: "gUS"
	//	countryName: "", // "us"
	// 	googAcctID: "UA-25752986"
	//	googWebPropID: "15"
	//	googRegionalWebPropID: "3"
	//	rollupRegion: "true"
	//	rollupGlobal: "true"

  initialize: function(googRegionName, googCountryName, countryName, isProduction, httpStatusCode, googAcctID, googWebPropID, googRegionalWebPropID, rollupRegion, rollupGlobal) {
		if (!GUCCI.GoogleAnalytics.enabled) return;

		GUCCI.GoogleAnalytics.googCountryName = googCountryName;
		GUCCI.GoogleAnalytics.googRegionName = googRegionName;
		var rollupRegion = rollupRegion;
		var rollupGlobal = rollupGlobal;

		// set country/region/global webproperty id
		GUCCI.GoogleAnalytics.trackerNames = [googCountryName];
		GUCCI.GoogleAnalytics.trackerIds = [googWebPropID];
		
		if (rollupRegion == "true") {
			GUCCI.GoogleAnalytics.trackerNames.push(googRegionName);
			GUCCI.GoogleAnalytics.trackerIds.push(googRegionalWebPropID);
		}
		if (rollupGlobal == "true") {
			GUCCI.GoogleAnalytics.trackerNames.push('gGlobal');
			GUCCI.GoogleAnalytics.trackerIds.push('1');
		}
		
		for (var i=0; i<GUCCI.GoogleAnalytics.trackerIds.length; i++) {
			tracker_id = GUCCI.GoogleAnalytics.trackerIds[i];
		
			_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._setAccount', googAcctID + '-' + GUCCI.GoogleAnalytics.trackerIds[i]]);
			
			if (isProduction == "true") {
				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._setDomainName', 'gucci.com']);
			}
			else {
				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._setDomainName', 'qa1.regiongold.com']);
			}

			_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._setCampaignCookieTimeout',2592000000]);
			
		}
		
		// set country path i.e. /it/ . This is only done for country tracker
		_gaq.push([GUCCI.GoogleAnalytics.googCountryName + '._setCookiePath', '/' + countryName + '/']);

		// turn on trackers for country/region/global
		for (var i=0; i<GUCCI.GoogleAnalytics.trackerNames.length; i++) {
			if (httpStatusCode == '404') {
				var url404 = '/' + countryName + '/404?loc=' + document.referrer;
				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview', url404]);
			}
			else if (httpStatusCode == '500') {
				var url500 = '/' + countryName + '/500?loc=' + document.referrer;
				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview', url500]);
			}
			else if (GUCCI.pageClass.indexOf("styles") >= 0) {
				// we are on a style page.  reformat the style.id for the pageview...
				var urlProduct = '/' + countryName + '/styles/';
				var tmp_url = document.location.href.split('/');
				var styleid = tmp_url.pop();
				styleid = styleid.split('#');
				styleid = styleid[0];
				styleid = GUCCI.GoogleAnalytics.makeProductID(styleid, '', GUCCI.GoogleAnalytics.pageName);
				urlProduct += styleid;
				
				// in case we are not always coming from a /styles/ page
				// var tmp_url = document.location.href.split('/');
				// var styleid = tmp_url.pop();
				// var urlProduct = tmp_url.join('/');
				// styleid = GUCCI.GoogleAnalytics.makeProductID(styleid, '', GUCCI.GoogleAnalytics.pageName);
				// urlProduct = urlProduct.replace(document.location.protocol + "//" + document.location.hostname, '')
				// urlProduct += urlProduct + '/' + styleid

				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview', urlProduct]);
				
			}
			else {
				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview']);
			}
			
			_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageLoadTime']);
			
		}
		
		(function() {
			var ga = document.createElement('script');
			ga.type ='text/javascript';
			ga.async = true;
			if (isProduction == "true") {
				ga.src = ('https:' == document.location.protocol ? 'https://ssl' :'http://www') + '.google-analytics.com/ga.js';
			}
			else {
				ga.src = ('https:' == document.location.protocol ? 'https://ssl' :'http://www') + '.google-analytics.com/u/ga_debug.js';
			}
			var s = document.getElementsByTagName('script')[0];
			s.parentNode.insertBefore(ga, s);
		})();
		
	},
	
	// sorts
	trackSortsClick: function(self) {
		var link_href = self.attr("href");
		var category_name = 'subcategories';
		var action_name = "click";
		var anchor_name = GUCCI.GoogleAnalytics.category;
		var label_name = self.html();

		link_href = link_href.replace(document.location.protocol + "//" + document.location.hostname, '')
		link_href = link_href.replace("#", "/");

		for(var i=0; i<GUCCI.GoogleAnalytics.trackerNames.length; i++) {
			_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview', link_href]);
		}

		//GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);

	},

	// looks
	trackLooksClick: function(self) {
		var category_name = "category";
		var action_name = "click"
		var anchor_name = GUCCI.GoogleAnalytics.category;
		var label_name = self.attr('id');

		// the commented bit is a backend ajax call that returns some partial.
		// the one we're actually using is just a nicely formatted URL that takes the user nowhere.
		//	it is this way because having the hash in the URL does not track properly.
		//		var link_href = self.find('.look_url').attr('href');
		var link_href = GUCCI.Category.createLookURL([label_name]);
		link_href = link_href.replace(document.location.protocol + "//" + document.location.hostname, '')
		link_href = link_href.replace("#", "/");

		for(var i=0; i<GUCCI.GoogleAnalytics.trackerNames.length; i++) {
			_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview', link_href]);
		}

		//GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);

	},
	
	// variations
	trackVariationsClick: function(styleid) {
		var category_name = "product page";
		var action_name = "click"
		var anchor_name = "";
		var label_name = "";
		
		var tmp_url = document.location.href.split('/');
		tmp_url.pop();
		var link_href = tmp_url.join('/');
		link_href = link_href.replace(document.location.protocol + "//" + document.location.hostname, '')
		styleid = GUCCI.GoogleAnalytics.makeProductID(styleid, '', GUCCI.GoogleAnalytics.pageName);
		link_href = link_href + '/' + styleid;
		
		for(var i=0; i<GUCCI.GoogleAnalytics.trackerNames.length; i++) {
			_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackPageview', link_href]);
		}

		//GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);

	},

	// product page: add to shopping bag
	trackAddToShoppingBag: function() {
		var link_href = "";
		var category_name = "style";
		var action_name = "click: add to shopping bag";

		var style_id = GUCCI.Product.dynamic_content.style_id;
		var style_size = "";
		var label_value = "";
		if (GUCCI.Product.dynamic_content.has_sizes) {
			style_size = $('#style_wrapper_dropdown option:selected').text();
		}

		label_value = GUCCI.GoogleAnalytics.makeProductID(style_id, style_size, GUCCI.GoogleAnalytics.pageName);

		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name, label_value);

	},
	
	// GUCCI main logo
	trackHeaderLogoClick: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link_href = self.attr("href");
		var category_name = 'top navigation';
		var action_name = "click gucci";
		var label_value = "gucci";
		
		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name, label_value);
		
	},

	// home page: mainfeature
	trackHomePageMainFeature: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link = self.parent('a');
		var link_href = link.attr("href");
		var category_name = 'homepage';
		var action_name = "click HP main space"
		var position = link.closest('#mainfeature').find('.active').index();
		var label_name = link.parent('.feature').find('h2').text() + ": " + link.text();

		if (self.has('img')) {
			label_name = "icon";
		}
		if (position == "") {
			position = self.attr('alt');
		}

		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + position, label_name);

	},
	
	// home page: mainfeature
	trackHomePageMainFeatureImage: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link = self.find('a');
		var link_href = link.attr("href");
		var category_name = 'homepage';
		var action_name = "click HP feature";
		var position = link.closest('#mainfeature').find('.active').index();
		var label_name = link.parent('.feature').find('h2').text() + ": " + link.text();

		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + position, label_name);

	},
	
	// home page: sidebar
	trackHomePageSidebar: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link_href = "";
		var category_name = 'homepage';
		var action_name = "icon-click";

		var anchor_name = self.index();
		var label_name = "icon";

		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);
		
	},

	// NOTWORKING: need to bind to the mouseenter event for the panel so we can set the panelPosition and widgetPosition
	// category page (quickview)
	trackCategoryQuickview: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link_href = "";

		var category_name = "category";
		var action_name = "quickview " + GUCCI.GoogleAnalytics.gender + " " + GUCCI.GoogleAnalytics.category;

		var anchor_name = GUCCI.GoogleAnalytics.panelPosition + GUCCI.GoogleAnalytics.widgetPosition;

		var self_img = self.find('img');
		var label_value = self_img.attr('id') + "_" + $(self_img.attr("rel")).find('a:first').text().replace(/["']/g, '');

		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_value);

	},

	// mega menu
	trackMegaMenuClick: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link_href = "";
		var category_name = 'top navigation';
		var action_name = "click";
		var anchor_name = "";
		var label_name = self.text();

		if (self.closest('.mega_menu').length > 0) {
			// "normal" mega menu (not quicklink)
			anchor_name = self.closest('.mega_menu').find('.mega_link').text();
			
			// for the promo image
			if (self.closest(".mega_promo").length > 0) {
				if (self.find('img').length > 0) {
					label_name = "promo feature: " + self.find('img').attr('alt');
				} else {
					label_name = "promo link: " + label_name;
				}
			}
		} else {
			anchor_name = "quicklink"
		}

		if (self.hasClass('mega_promo_caption')) {
			// for the promo image caption
			link_href = self.siblings('a:first').attr("href");
		}
		else {
			link_href = self.attr("href");
		}

		
		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);
		
	},

	// sign in / create account / shopping bag / etc...
	trackUserbuyflowClick: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link_href = self.attr("href");
		var category_name = 'top navigation';
		var action_name = "click";
		var anchor_name = self.text();
		var label_name = "";
		
		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);
		
	},
	
	// footer
	trackFooterClick: function(self) {
		if (!GUCCI.GoogleAnalytics.phase2enabled) return;
		
		var link_href = self.attr("href");
		var category_name = 'footer';
		var action_name = "click";
		var anchor_name = self.text();
		var label_name = "";

		if (self.attr('id') == 'countries_link') {
			anchor_name = "Change Country";
			link_href = "";
		}

		GUCCI.GoogleAnalytics.recordLinkEvent(link_href, category_name, action_name + ': ' + anchor_name, label_name);
		
	},

	recordLinkEvent: function(link, category, action, label) {
		if (!GUCCI.GoogleAnalytics.enabled) return;
		
		// 65 chars max
		label = label.substring(0, 65);
		
		try {
			if (link != "" && link != "#" && link.indexOf(document.domain) < 0) {
				action = "(outbound) " + action;
			}
			
			for(var i=0; i<GUCCI.GoogleAnalytics.trackerNames.length; i++) {
				_gaq.push([GUCCI.GoogleAnalytics.trackerNames[i] + '._trackEvent', category, action, label]);
			}
			
			// if (link != "") {
			// 	setTimeout('document.location = "' + link + '"', 100);
			// }
			
		} catch(err) { }
		
	},

	makeProductID: function(styleId, styleSize, descrip) {
		var productId = styleId;
		if (styleSize.length > 0) {
			productId = productId + "_" + styleSize;
		}
		productId = productId + "_" + descrip.replace(/["']/g, '');
		productId = productId.substring(0, 65);
		return productId;
	}
	
};



GUCCI.Analytics = {
    PRODUCT_SEGMENT: 'PRO',
    connection: false,
    production: false,
    region: '',
    country: '',
    language: '',
    promo: '',
    sendToCoremetrics: function() { return GUCCI.Analytics.connection && GUCCI.Analytics.region && GUCCI.Analytics.country && GUCCI.Analytics.language; },
    prefix: '',
    attributeString: '',
    formatValue: function(value) { return value.replace(/-/g,'').replace(/_/g,'').replace(/'/g,''); },
    initialize: function(region,country,language,production) 
    {
        if (typeof cmCreatePageviewTag != 'function' || region == null || country == null || language == null) return;
        GUCCI.Analytics.region = region;
        GUCCI.Analytics.country = country;
        GUCCI.Analytics.language = language;

        if (production != null)
            GUCCI.Analytics.production = production;
            
        if ((document.location.href.indexOf('www.gucci.com') > -1) || (document.location.href.indexOf('presale.gucci.com') > -1))
            GUCCI.Analytics.production = true;
            
        if (GUCCI.Analytics.production)
            cmSetClientID("90253055",true,"data.coremetrics.com","gucci.com");
        else
            cmSetClientID("60253055",false,"testdata.coremetrics.com","gucci.com");
            
        GUCCI.Analytics.prefix = (region + ':' + country + ':' + language).toUpperCase();
                
        //TODO: Add reference to pull final defined promotional cookie as available.
        GUCCI.Analytics.attributeString = GUCCI.Analytics.promo+"-_-"+GUCCI.viewport.width()+"x"+GUCCI.viewport.height();
    },
    pageView: function(name,segment)
    {
			if (!GUCCI.Analytics.sendToCoremetrics || name == null) return;
			name = GUCCI.Analytics.formatValue(name);
			if (typeof segment == 'string' && segment.length > 0) 
			{
			    segment = GUCCI.Analytics.formatValue(segment);
				cmCreatePageviewTag(GUCCI.Analytics.prefix + ':' + segment.toUpperCase() + ':' + name.toUpperCase(),null,null,null,GUCCI.Analytics.attributeString);
	             // console.log("create pageview tag: " + GUCCI.Analytics.prefix + ':' + segment.toUpperCase() + ':' + name.toUpperCase() + " attr:" + GUCCI.Analytics.attributeString);
			}
			else 
			{
				cmCreatePageviewTag(GUCCI.Analytics.prefix + ':' + name.toUpperCase(),null,null,null,GUCCI.Analytics.attributeString);
	            // console.log("create pageview tag: " + GUCCI.Analytics.prefix + ':' + name.toUpperCase() + " attr:" + GUCCI.Analytics.attributeString);
			}
    },
    
    rtwView: function(look)
   	{
   		if (!GUCCI.Analytics.sendToCoremetrics|| look == null) return;
   		    cmCreatePageviewTag(GUCCI.Analytics.prefix + ':' + GUCCI.Analytics.PRODUCT_SEGMENT + ":RTW LOOK" + look,null,null,null,GUCCI.Analytics.attributeString);
            //console.log("create rtwview tag: " + GUCCI.Analytics.prefix + ':' + GUCCI.Analytics.PRODUCT_SEGMENT + ":RTW LOOK" + look,null,null,null,GUCCI.Analytics.attributeString);
   	},
    
    productView: function(style)
	{
		if (!GUCCI.Analytics.sendToCoremetrics|| style == null) return;
		if (style.indexOf(' ') == -1 && style.length == 15)
			style = style.substring(0,6) + ' ' + style.substring(6,11) + ' ' + style.substring(11,15);
		cmCreatePageviewTag(GUCCI.Analytics.prefix + ':' + GUCCI.Analytics.PRODUCT_SEGMENT + ":" + style,null,null,null,GUCCI.Analytics.attributeString);
         //console.log("create productview tag: " + GUCCI.Analytics.prefix + ':' + GUCCI.Analytics.PRODUCT_SEGMENT + ':' + style + " attr:" + GUCCI.Analytics.attributeString);
	},
	
	order: function(orderid,ordertotal,ordershipping,customerid,customercity,customerstate,customerpostalcode,ccnumber,currency) 
	{

		if (!GUCCI.Analytics.sendToCoremetrics || typeof orderid != 'string' || typeof ordertotal != 'string' || typeof ordershipping != 'string' || typeof customerid != 'string') return;
         // if (typeof ccnumber == 'string' && ccnumber == '5262444444444444') return;
		
		if (!customercity)				
			cmCreateOrderTag(orderid,ordertotal,ordershipping,customerid,null,null,null,currency,GUCCI.Analytics.country + ":" + GUCCI.Analytics.language);
		else		
			cmCreateOrderTag(orderid,ordertotal,ordershipping,customerid,customercity,customerstate,customerpostalcode,currency,GUCCI.Analytics.country + ":" + GUCCI.Analytics.language);
            // console.log("create thank you tag: " + orderid,ordertotal,ordershipping,customerid,customercity,customerstate,customerpostalcode,currency+"-_-"+GUCCI.Analytics.country);
	},

	searchResult: function(progression, criteria, resultnum)
	{
		// user has to set the progression, terms in above method first at least
		if (progression.length > 0 && criteria.length > 0) 
		{
			progression = GUCCI.Analytics.formatValue(progression);
			criteria = GUCCI.Analytics.formatValue(criteria);
			resultnum = GUCCI.Analytics.formatValue(resultnum);
		    // if (resultnum == 0)
		  //          progression += ' UNSUCC';
			cmCreatePageviewTag(GUCCI.Analytics.prefix +  ":SEA:" + progression,null,criteria,resultnum,null,null,null,GUCCI.Analytics.attributeString);
            // console.log("create search tag:" + GUCCI.Analytics.prefix +  ":SEA:" + progression,null,criteria,resultnum,null,null,null,GUCCI.Analytics.attributeString)
		}
	}
};




$(document).ready(function() {

});

