var _tgrTrackingID = 'UA-2216045-1';
$.fn.track.defaults = $.extend ({}, $.fn.track.defaults, { // extend jquery.google-analytics.js defaults
	debug: true,
	skip_internal : false
});

(function ($) {
	
	$.tgrTrackMediaItemView = function (mediaItemID) {
		var cookies = navigator.cookieEnabled ||
			("cookie" in document && (document.cookie.length > 0 ||
			(document.cookie = "test").indexOf.call(document.cookie, "test") > -1));
		var flTrack = false;
		if (cookies) {
			var cookieName = 'miv-' + mediaItemID;
			if (!$.cookie (cookieName, {path:'/'}))
				flTrack = true;
		}
		if (flTrack) {
			$.cookie (cookieName, '1', {expires:1, path:'/'});
			$.ajax ({
				url: 'http://www.tetongravity.com/webhandlers/countview.ashx?id=' + mediaItemID,
				type: 'get',
				dataType: 'jsonp',
				mimeType: 'application/json'
			});
		}
	};
	
	function debug (message) {
		if ($.fn.track.defaults.debug && typeof console !== 'undefined' && typeof console.debug !== 'undefined') {
			console.debug ('tgrAnalytics: ' + message);
		}
	}
	
	$.tgrTrackPage = function (arg1, arg2) {
		var id = _tgrTrackingID;
		var options = null;
		if (typeof (arg1) == 'string') {
			id = arg1;
			options = $.extend ({}, arg2);
		}
		else if (typeof (arg1) == 'object')
			options = $.extend (arg1);
		debug ('tracking page: [' + id + ']');
		$.trackPage (id, options);
	};
	
	$.tgrTrackEvent = function (category, event, label, value) {
		debug ('EVENT - category: [' + category + '], event: [' + event + '], label: [' + label + '], value: [' + value + ']');
		$.trackEvent (category, event, label, value);
	};
	
	$.tgrTrackItems = function (selector, category, action, value) {
		
		/*
		Tracks clicks on jquery selector elements
		
		selector : any jquery selector
		category : event category, default is 'internal' or 'external'
		action	 : defines the action to track, default is 'click'
		value	 : optional - defines the default value to pass
		*/
		
		if (!value)
			value = 0;

		$(selector).track ({
			category: function (element) {
				var cat = $(element).attr ('track-category');
				if (cat && cat != '')
					return (cat);
				if (category != null && category != '')
					return (category);
				return (element[0].hostname == location.hostname) ? 'internal':'external';
			},
			label: function (element) {
				var value = $(element).attr ('track-label');
				if (value && value != '')
					return (value);
				return ($(element).text ());
			},
			action: function (element) {
				if (action && action != '')
					return (action);
				return ('click');
			},
			value: function (element) {
				var elementValue = $(element).attr ('track-value');
				if (elementValue && elementValue != '')
					return (parseInt(elementValue));
				return (value);
			}
		});
	};

	$.tgrTrackThis = function (element) {
		
		/*
		Tracks a specific link
		
		Link markup:
		<a href="link.html" track-action="myaction" track-label="mylabel" track-category="mycategory" track-value="1" onclick="javascript:trackThisLink();return(false);">Click here</a>
		
		Defaults:
			track-action: 'click'
			track-label: the linked text
			track-value: 1
			track-category: 'internal' or 'external'
		*/
		
		var label = '';
		var action = 'click';
		var category = '';
		var value = 1;
		
		var attr = element.attributes.getNamedItem ("track-label");
		if (attr)
			label = attr.value;
		else {
			if (element.textContent)
				label = element.textContent;
			else
				label = element.innerText;
		}
		
		attr = element.attributes.getNamedItem ("track-action");
		if (attr)
			action = attr.value;
		
		attr = element.attributes.getNamedItem ("track-value");
		if (attr)
			value = attr.value;
		
		attr = element.attributes.getNamedItem ("track-category");
		if (attr)
			category = attr.value;
		else
			category = (element.hostname == location.hostname) ? 'internal':'external';
			
		debug ('EVENT: label: [' + label + '], action: [' + action + '], category: [' + category + '], value: [' + value + ']');
		$.trackEvent (category, action, label, value);
	};
	
	$.tgrMakeTagList = function (tagList, tagCat) {
		var finalTagList = '';
		var tagArray = tagList.split (',');
		for (var ix = 0; ix < tagArray.length; ix++) {
			theTag = tagArray [ix];
			if (theTag.length) {
				theTag = '[' + theTag + ']';
				if (tagCat)
					theTag = tagCat + ':' + theTag;
				if (finalTagList.length)
					finalTagList += ',' + theTag;
				else
					finalTagList = theTag;
			}
		}
		return (finalTagList);
	};
	
	$.tgrTrackTags = function (tagList, category, action, value) {
		
		/*
		Sends a track event for each tag in the comma delimited list "tagList"
		
		Defaults:
			category: 'admin-tags'
			action: 'tag-loaded'
			label: the tag itself
			value: 1
		*/
		
		if (!category || category == '')
			category = 'admin-tags';
			
		if (!action || action == '')
			action = 'tag-loaded';
			
		if (!value)
			value = 1;
		
		var finalTagList = $.tgrMakeTagList (tagList);
		
		debug ('Tracking tags: ' + finalTagList + ', category: [' + category + '], action: [' + action + '], value: [' + value + ']');
		
		$.trackEvent (category, action, finalTagList, value);
		
		return (finalTagList);
	};
	
	$.tgrTrackTagMap = function (map, category, action, actionValue) {

		/*
		Sends a track event for each tag in the map. The name of each element in the map is the category
		
		{
		'athletes':'Athlete 1,Athlete 2,Athlete3'
		'brands':'K2,Smith'
		}
		
		Defaults:
			category: name of the key
			action: 'tag-loaded'
			value: 1
		*/
		
		if (!map)
			return;
			
		if (!action || action == '')
			action = 'tag-loaded';
			
		if (!actionValue)
			actionValue = 1;
			
		var finalTagList = '';
		$.each (map, function (key, value) {
			var tagList = $.tgrMakeTagList (value, key);
			if (finalTagList.length)
				finalTagList += ',' + tagList;
			else
				finalTagList = tagList;
		});
		
		if (finalTagList.length) {
			debug ('Tracking tag map: ' + finalTagList + ', category: [' + category + '], action: [' + action + '] value: [' + actionValue + ']');
			$.trackEvent (category, action, finalTagList, actionValue);
		}
	};
	
}(jQuery));
