(function($) {

    $.fn.adtraka = function(settings) {
        // Default settings
        cur_time = new Date();

        var config = {
url: 'http://api.adtraka.co.uk/v1/getnum.php',
time: cur_time.getTime(),
page: location.href,
cookiename: '__adtraka'
        };

        // Additional settings
        if (settings) $.extend(config, settings);

        // Grab previous information (if we can)
        q = $.cookie(config['cookiename']);
        if (q && q.length) {
            var p = q.split('.');

            if (p[0]) { config['lastvisit[trackingid]'] = p[0] };
            if (p[1]) { config['lastvisit[clientid]'] = p[1] };
            if (p[2]) { config['lastvisit[userid]'] = p[2] };
            if (p[3]) { config['lastvisit[campaignid]'] = p[3] };
            if (p[4]) { config['lastvisit[keyphraseid]'] = p[4] };
        }

        // Grab some cookies
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                var parts = cookie.split('=');
                if (-1 != parts[0].search(/__utm/)) {
                    config['cookie['+parts[0]+']'] = $.cookie(parts[0]);
                }
            }
        }

        // Record referrer
        if (document.referrer) {
            config['referrer'] = document.referrer;
        }
        
        // grab the elements to update
        var elements = this;
        
        // Check if we have all of the options
        if ( config['url'] &&
             config['time'] &&
             config['page'] )
        {
                // Call remote API
            url = config['url'];
            url = url + '?ver=1.0';
            url = url + '&jsoncallback=?';

            $.getJSON( url,
                       config,
                       function(data,textStatus) {

                if (config['debug']) {
                    var msg = "Debug " + textStatus + "<br/>";

                    msg = msg + data.error_code + "<br/>";
                    msg = msg + data.error_string + "<br/>";

                    msg = msg + data.debug + "<br/>";
                    
                    $('#debug').html(msg);
                }


                elements.each(function() {
                    var el = $(this);
                    if (data.error) {
                    }
                    else {
                        // Output the telephone number returned from the server.
                        if (data.telnum) {
                            var format = '';
                            
                            if (el.attr("adtraka_format")) {
                                format = el.attr("adtraka_format");
                            }
                            else if (config['format']) {
                                format = config['format'];
                            }

                            if (format) {
                                format = format.split("");
                                var chars = data.telnum.split("");
                                var s = "";

                                for (i in format) {
                                    if (!chars.length) break;
                                    if (format[i] == '#') {
                                        s = s + chars.shift();
                                    }
                                    else {
                                        s = s + format[i];
                                    }
                                }
                                        
                                el.html(s + chars.join(""));
                            }
                            else {
                                el.html(data.telnum);
                            }
                        }                                    
                    }
                });

                // Save the campaign number in a cookie for future use.
                if (data.trackingid) {
                    var date = new Date();
                    date.setTime(date.getTime() + (12 * 3600 * 1000));
                    $.cookie(config['cookiename'], data.trackingid+"."+(data.clientid?data.clientid:"")+"."+(data.userid?data.userid:"")+"."+(data.campaignid?data.campaignid:"")+"."+(data.keyphraseid?data.keyphraseid:""), { path: '/', expires: date });
                }

            });
        }
        else
        {
            if (config['debug']) {
                elements.each(function() {
                    var el = $(this);
                    el.html( el.html() + "Missing options");
                });
            }
        }

        return this;

    };

})(jQuery);
