// Copyright 2011 Google Inc. All Rights Reserved.

/**
 * @fileoverview A simple script to automatically track Facebook and Twitter
 * buttons using Google Analytics social tracking feature.
 * @author api.nickm@google.com (Nick Mihailovski)
 */


/**
 * Namespace.
 * @type {Object}.
 */
var _ga = _ga || {};


/**
 * Ensure global _gaq Google Anlaytics queue has be initialized.
 * @type {Array}
 */
var _gaq = _gaq || [];


/**
 * Helper method to track social features. This assumes all the social
 * scripts / apis are loaded synchronously. If they are loaded async,
 * you might need to add the nextwork specific tracking call to the
 * a callback once the network's script has loaded.
 * @param {string} opt_pageUrl An optional URL to associate the social
 *     tracking with a particular page.
 * @param {string} opt_trackerName An optional name for the tracker object.
 */
_ga.trackSocial = function(opt_pageUrl, opt_trackerName) {
  _ga.trackFacebook(opt_pageUrl, opt_trackerName);
  _ga.trackTwitter(opt_pageUrl, opt_trackerName);
};


/**
 * Tracks Facebook likes, unlikes and sends by suscribing to the Facebook
 * JSAPI event model. Note: This will not track facebook buttons using the
 * iFrame method.
 * @param {string} opt_pageUrl An optional URL to associate the social
 *     tracking with a particular page.
 * @param {string} opt_trackerName An optional name for the tracker object.
 */
_ga.trackFacebook = function(opt_pageUrl, opt_trackerName) {
  var trackerName = _ga.buildTrackerName_(opt_trackerName);
  try {
    if (FB && FB.Event && FB.Event.subscribe) {
      FB.Event.subscribe('edge.create', function(targetUrl) {
		if (targetUrl.indexOf("facebook.com") > 0) {
		// if the returned link contains 'facebook,com'. It's a 'Like' for your Facebook Page		  
			_gaq.push([trackerName + '_trackSocial', 'Facebook', 'like_box',		
				'facebook.com', opt_pageUrl]);
			//window.alert('like_box');
		} else {
		// else, somebody is liking the current page
			_gaq.push([trackerName + '_trackSocial', 'Facebook', 'like',		
				document.title, opt_pageUrl]);
			//window.alert('like');
		}				
			
      });
      FB.Event.subscribe('edge.remove', function(targetUrl) {
		if (targetUrl.indexOf("facebook.com") > 0) {
		// if the returned link contains 'facebook,com'. It's a 'UnLike' for your Facebook page		  
			_gaq.push([trackerName + '_trackSocial', 'Facebook', 'unlike_box',
				'facebook.com', opt_pageUrl]);
		} else {
		// else, somebody is Unlinking the current page			
			_gaq.push([trackerName + '_trackSocial', 'Facebook', 'unlike',
				document.title, opt_pageUrl]);			
		}					
      });
      FB.Event.subscribe('message.send', function(targetUrl) {
        _gaq.push([trackerName + '_trackSocial', 'Facebook', 'send',
            document.title, opt_pageUrl]);
		//window.alert('send');
      });
      
/* Comment tracking from the tucknott.net blog */

	FB.Event.subscribe('comment.create', function(targetUrl) {
	  _gaq.push(['_trackSocial', 'Facebook', 'comment', document.title, opt_pageUrl]);
	});
		
	FB.Event.subscribe('comment.remove', function(targetUrl) {
	  _gaq.push(['_trackSocial', 'Facebook', 'uncomment', document.title, opt_pageUrl]);
	});

    }
  } catch (e) {}
};


	
	
/**
 * Returns the normalized tracker name configuration parameter.
 * @param {string} opt_trackerName An optional name for the tracker object.
 * @return {string} If opt_trackerName is set, then the value appended with
 *     a . Otherwise an empty string.
 * @private
 */
_ga.buildTrackerName_ = function(opt_trackerName) {
  return opt_trackerName ? opt_trackerName + '.' : '';
};


/**
 * Tracks everytime a user clicks on a tweet button from Twitter.
 * This subscribes to the Twitter JS API event mechanism to listen for
 * clicks coming from this page. Details here:
 * http://dev.twitter.com/pages/intents-events#click
 * This method should be called once the twitter API has loaded.
 * @param {string} opt_pageUrl An optional URL to associate the social
 *     tracking with a particular page.
 * @param {string} opt_trackerName An optional name for the tracker object.
 */
_ga.trackTwitter = function(opt_pageUrl, opt_trackerName) {
  var trackerName = _ga.buildTrackerName_(opt_trackerName);
  try {
    if (twttr && twttr.events && twttr.events.bind) {

	  twttr.events.bind('tweet', function(event) {
		if (event) {
		  var targetUrl; // Default value is undefined.
		  if (event.target && event.target.nodeName == 'IFRAME') {
			targetUrl = _ga.extractParamFromUri_(event.target.src, 'url');
		  }
		  _gaq.push([trackerName + '_trackSocial', 'twitter', 'tweet',
			document.title, opt_pageUrl]);
		  //window.alert('twitter');	
		}
	  });

		twttr.events.bind('follow', function(){
			var targetUrl;
				if (event.target && event.target.nodeName == 'IFRAME') {
				  targetUrl = extractParamFromUri(event.target.src, 'url');
				}
			_gaq.push([trackerName + '_trackSocial', 'twitter', 'follow', 
			'twitter.com', opt_pageUrl]);			
		});

	  
    }
  } catch (e) {}
};


/**
 * Extracts a query parameter value from a URI.
 * @param {string} uri The URI from which to extract the parameter.
 * @param {string} paramName The name of the query paramater to extract.
 * @return {string} The un-encoded value of the query paramater. underfined
 *     if there is no URI parameter.
 * @private
 */
_ga.extractParamFromUri_ = function(uri, paramName) {
  if (!uri) {
    return;
  }
  var uri = uri.split('#')[0];  // Remove anchor.
  var parts = uri.split('?');  // Check for query params.
  if (parts.length == 1) {
    return;
  }
  var query = decodeURI(parts[1]);

  // Find url param.
  paramName += '=';
  var params = query.split('&');
  for (var i = 0, param; param = params[i]; ++i) {
    if (param.indexOf(paramName) === 0) {
      return unescape(param.split('=')[1]);
    }
  }
  return;
};

/* aqui viene el codigo personalido de google+ */

  window['_ga.trackGoogle'] = function(data) {
    if (data['state'] == 'on') {
      // +1 event should only be passed on state == "on"
      window['_gaq'].push(['_trackSocial', 'Google', '+1', document.title]);
	  //window.alert(document.title);
    } else if(data['state'] == 'off'){
      // +1 event should only be passed on state == "off"
      window['_gaq'].push(['_trackSocial', 'Google', '-1', document.title]);
	  //window.alert(data.href);		
	}
  };

/* aqui viene el codigo personalido de Enviar mail de Recomienda a un amigo */
_ga.trackMail = function() {
	_gaq.push(['_trackSocial','Mail','Enviar', document.title]);	
	//window.alert('mail');
}

