/**
 * CobGATracker - Google Analytics Link tracking 
 *   http://www.cityofboise.org
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 */

(function($) {

     /**
     * Adds a click event to links to log a Google Analytics page hit of the form
     * /descr/{type}/title/[location]
     *  {type}->
		 *	 	link | externalLink | download/extension| mailto
		 *
		 * Assumptions:
		 * 			Google Analytics scripts is already added to the page.
		 * Warning:
		 * 			This will skew page count numbers.  It will 2 hits for any link that isn't
		 * 			an externalLink,mailto,or download.  If this is a concern then don't set trackLinks = false.
		 *
		 *
     * @example $("#leftNav a").CobGATracker();
		 *
     * @example $("#leftNav a").CobGATracker({descr:"wwwHomePage/leftNav"});
		 * @output
           /wwwHomepage/leftnav/link/Trash and Recycling/[/Departments/PDS/index.aspx]
           /wwwHomepage/leftnav/externalLink/Library/[http://www.library.org]
           /wwwHomepage/leftnav/mailto/contact me/[jlytle@cityofboise.org]
           /wwwHomepage/leftnav/file/pdf/Library Plans/[/Departments/PDS/PDF/file.pdf]
           /wwwHomepage/leftnav/file/wmv/Library Movie/[http://www.google.com/mymovie.wmv]
		 *
     *
     * @name CobGATracker 
     * @type jQuery
     * @param Hash o A set of key/value pairs to set as configuration properties.
     * @cat Plugins/CobGATracker
     */

    $.fn.CobGATracker = function(o) {
        return this.each(function() {
            new $ga(this, o);
        });
    };

    // Default configuration properties.
    var defaults = {
				link: 'link',
				externalLink: 'externalLink',
				download: 'download',
				mailto: 'mailto',
        descr : 'site/location',
				extensions: ['pdf','doc','docx','xls','csv','jpg','gif', 'mp3','swf','txt','ppt','zip','gz','dmg','xml','wmv']
    };


    $.CobGATracker = function(e, o) {
        this.options    = $.extend({}, defaults, o || {});
		    var o = this;
				//$("#messages").append(this.pageLink(e)+"<br />");
				$(e).click(function(){
												var GALinkInfo = o.pageLink(e);

												  //pageTracker._trackEvent(this.options.descr, GALinkInfo[2],GALinkInfo[3]);
													//                       ('site/location','Link Text', 'Link url')
									try {
									
										if(GALinkInfo[3] != '#')
										{
												if(GALinkInfo[0] == 'link')
												{
												  pageTracker._trackEvent(o.options.descr, GALinkInfo[2],GALinkInfo[3]);
												}
												else
												{
												  pageTracker._trackPageview(GALinkInfo[1]);
												  pageTracker._trackEvent(o.options.descr, GALinkInfo[2],GALinkInfo[3]);

												}
										}
									} catch(err){
											
									
											
											}

					});

    };

    // Create shortcut for internal use
    var $ga = $.CobGATracker;

    $ga.fn = $ga.prototype = {
        CobGATracker: '0.0.1'
    };

    $ga.fn.extend = $ga.extend = $.extend;

    $ga.fn.extend({


  		pageLink: function(e){				
	     var pageLink = ['','','',''];  // type, pageViewLink, linkText, link
  	   var link = $(e).attr("href").toLowerCase();				 
  	   var linkText = $(e).text();
       var ext = link.split('.')[link.split('.').length - 1].toLowerCase();			
			 pageLink[2] = linkText;
			 pageLink[3] = link;
	     if(typeof(link) != 'undefined')
	     {
		  	if(link.indexOf('mailto:') == 0) //Mailto
		  	{
				  pageLink[0]='mailto';
		  		pageLink[1] = "/"+this.options.descr+"/"+this.options.mailto+"/"+linkText+"/["+link+"]";
		  	}
		  	else if ($ga.IsExternalLink(link)  ) //External Link
		  	{
				  pageLink[0]='externalLink';
		  		pageLink[1] = "/"+this.options.descr+ "/"+this.options.externalLink+"/"+linkText+"/["+link+"]";
		  	}
			  else if($ga.IsDownload(link)) //File
			  {
				  pageLink[0]='download';
				 pageLink[1] = "/"+this.options.descr+ "/"+this.options.download+"/"+ext+"/"+linkText+"/["+link+"]";
			  }
			  else   // link
			  {
				  pageLink[0]='link';
				  pageLink[1] = "/"+this.options.descr+"/"+this.options.link+"/"+linkText+"/["+link+"]";
			  }
	     }
		  return pageLink;
		 }


		});

    $ga.extend({
        /**
         * Gets/Sets the global default configuration properties.
         *
         * @name defaults
         * @descr Gets/Sets the global default configuration properties.
         * @type Hash
         * @param Hash d A set of key/value pairs to set as configuration properties.
         * @cat Plugins/CobGATracker
         */
        defaults: function(d) {
            return $.extend(defaults, d || {});
        },


        intval: function(v) {
            v = parseInt(v);
            return isNaN(v) ? 0 : v;
        },

       IsExternalLink: function(link) {
					var regex = /([^:\/]+)*(?::\/\/)*([^:\/]+)(:[0-9]+)*\/?/i;
					var linkparts = regex.exec(link);
					var urlparts = regex.exec(location.href);
				//	var urlparts = regex.exec("http://www.cityofboise.org/ArtsAndHistory/Opportunities/Volunteers/index.aspx");
				  
					//make sure link contains http://... 
					if(link.indexOf('://') != -1 && linkparts[2] != urlparts[2]) 
					{
							return true;
					}

					return false;
			 },
			IsDownload: function(link){
        var extensions= ['pdf','doc','xls','csv','jpg','gif', 'mp3','swf','txt','ppt','zip','gz','dmg','xml'];
        //is there an associative array, or something faster. 
	    	var linkLowercase = link.toLowerCase();
	    	for (i=0; i < extensions.length; i++)
		    {
					if(linkLowercase.indexOf(extensions[i]) != -1 ) 
					{
							return true;
					}
		    }
		    return false;
      } 


    });





})(jQuery);
