/**
 * Plugin for include Google Analytics on your BRush site with ability to
 * track events (clicks,submits) and 404 error.
 * Version 1.3
 *
 * Copyright 2010, Aleksey Timkov 
 * http://www.seoblog.com.ua/brush/plugins/
 * http://www.AffiliateStoreMaster.com
 *
 * This plugin requires jQuery framework.
 * Copyright 2010, John Resig
 * http://docs.jquery.com/Downloading_jQuery
 *
 * Date: Mon July 5 2010 00:12 +0300
 */

( function ( $ ) {

    var pageTracker;

    $(document).ready ( function () {
        // call engine
        $.trackPage ({
            track_event: true,  // true or false
            site: getParams()   // site parameters
        });
    });

    $.trackPage = function ( options ) {
        // use default options, if necessary
        var settings = $.extend ( {}, options );

        // prepare GA host
        var host = ( ( document.location.protocol == "https:" ) ? "https://ssl." : "http://www." );
        var src = host + 'google-analytics.com/ga.js';

        // initialize GA tracking
        initTracking = function () {
            if ( typeof _gat == 'undefined' || typeof _gaq == 'undefined' )
                throw "Google Analytics failed";

            pageTracker = _gat._getTracker ( settings.site.account_id );

            if ( settings.site.error == undefined ) {
                pageTracker._trackPageview ();
            } else {
                pageTracker._trackPageview ( "/" + settings.site.error + ".html?page=" + document.location.pathname + document.location.search + "&from=" + document.referrer );
            }
            // call callback function (if it is passed)
            if ( $.isFunction ( settings.callback ) ){
                settings.callback ();
            }
        }

        // enable tracking on page load
        $( window ).load ( function () {
            $.ajax ({
                type: "GET",
                url: src,
                success: function () { initTracking (); },
                dataType: "script",
                cache: true
            });
        });

        if ( settings.track_event ) {
            $( "a[track], form[track]" ).each ( function ( i, e ) {
                var elem = $( this );
                var fired_elem = e.tagName;
                switch ( fired_elem ) {
                case "A":
                    var category = elem.attr ( "track" );
                    var action = "click";
                    var label = elem.attr ( "href" );
                    var value = null;
                    break;
                case "FORM":
                    var category = elem.attr ( "track" );
                    var action = "submit";
                    var label = null;
                    var value = null;
                    break;
                }
                elem.bind ( action, function ( e ) {
                    if ( e.type == "submit" ) label = $( "#" + settings.site.search_id ).val ();
                    pageTracker._trackEvent ( category, action, label, value );
                    return true;
                });
            });
        }
    }

    $.trackPage.defaults = {
        debug : true
    };
    
    // get error
    getParams = function () {
        var scripts = $( "script" );
        for ( i = 0; i < scripts.length; i++ ) {
            if ( scripts[i].src.indexOf( "jquery.afftrack.js" ) != -1 ) {    
                var queryString = scripts[i].src.split( "?" )[1];
                break;
            }
        }
        if ( queryString == undefined )
            throw "There are no parameters";
        // generate object
        params = queryString.split( "&" );
        var objStr = "";
        for ( var i in params ) {
            param = params[i].split( "=" );
            if ( objStr.length > 0 ) objStr += ",";
            objStr += '"' + param[0] + '":"' + param[1] + '"';
        }
        return eval( "({" + objStr + "})");
    }

    // debug log
    debug = function ( message ) {
        if ( typeof console != 'undefined' && typeof console.debug != 'undefined' && $.trackPage.defaults.debug )
            console.debug ( message );
    };
}) ( jQuery );
