Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Arrowtracker
- *
- * @copyright (c) 2010 ArrowMedia <arwm.ru>
- * @version 0.6 <06.10.2010>
- */
- var arrowtracker = {
- gc: null,
- ga_source: null,
- ga_campaign: null,
- ga_medium: null,
- ga_term: null,
- ga_content: null,
- ga_gclid: null,
- referrers: [], // Custom referers
- sources: [], // Custom sources
- token: null,
- error: false,
- useInterval: false,
- intervalTime: 100,
- intervalObj: null,
- language: 'ru',
- onload: null,
- translations: {
- ru: {
- YD: 'Вы пришли к нам из Яндекс.Директа.',
- YO: 'Вы пришли к нам с Яндекса.',
- GA: 'Вы пришли к нам по объявлению в Google AdWords.',
- GO: 'Вы пришли к нам с Гугла.',
- MO: 'Вы пришли к нам с Mail.ru.',
- RO: 'Вы пришли к нам с Рамблера.',
- BG: 'Вы пришли к нам из контекстной сети Бегуна.',
- BN: 'Вы пришли к нам из контекстной сети Бегуна.',
- OO: 'Вы пришли к нам с поисковика.',
- OT: 'Вы пришли к нам по ссылке с другого сайта.',
- TI: 'Вы набрали адрес нашего сайта прямо в адресной строке браузера или пришли с закладок.'
- }
- },
- /**
- * Initialization
- *
- * @return void
- */
- init: function(){
- if (true == this.useInterval) {
- /**
- * @todo Replace object name
- */
- this.intervalObj = setInterval("arrowtracker.process()", this.intervalTime);
- return;
- }
- this.process();
- },
- /**
- * Parse GA cookies
- *
- * @return void
- */
- process: function() {
- if (null != this.intervalObj) {
- clearInterval(this.intervalObj);
- }
- var z = this._uGC(document.cookie, '__utmz=', ';');
- this.ga_gclid = this._uGC(z, 'utmgclid=', '|');
- this.ga_source = this._uGC(z, 'utmcsr=', '|');
- this.ga_campaign = this._uGC(z, 'utmccn=', '|');
- this.ga_medium = this._uGC(z, 'utmcmd=', '|');
- this.ga_term = this._uGC(z, 'utmctr=', '|');
- this.ga_content = this._uGC(z, 'utmcct=', '|');
- if (this.ga_gclid != "-") {
- this.ga_source = 'google';
- this.ga_medium = 'cpc';
- }
- // Custom sources
- for(i=0;i<this.sources.length;++i) {
- if (this.sources[i][0] == this.ga_source) {
- this.setToken(this.sources[i][1]);
- this.addTranslate(this.sources[i][1],
- this.sources[i][2]);
- this.log(this.getTranslate());
- return;
- }
- }
- switch (this.ga_medium) {
- case 'organic':
- switch (this.ga_source) {
- case 'google':
- case 'google.ru':
- case 'google.com':
- this.setToken('GO');
- break;
- case 'yandex':
- case 'yandex.ru':
- this.setToken('YO');
- break;
- case 'rambler':
- case 'rambler.ru':
- this.setToken('RO');
- break;
- case 'mail':
- case 'mail.ru':
- this.setToken('MO');
- break;
- default:
- this.setToken('OO');
- break;
- }
- break;
- case 'cpc':
- switch (this.ga_source) {
- case 'YD':
- this.setToken('YD');
- break;
- case 'GA':
- case 'GD':
- case 'GС':
- case 'google':
- this.setToken('GA');
- break;
- case 'begun':
- case 'BG':
- this.setToken('BG');
- case 'BN':
- this.setToken('BN');
- break;
- }
- break;
- case 'referral':
- for(i=0;i<this.referrers.length;++i) {
- if (this.referrers[i][0] == this.ga_source) {
- this.setToken(this.referrers[i][1]);
- this.addTranslate(this.referrers[i][1],
- this.referrers[i][2]);
- }
- }
- if (!this.hasToken()) {
- this.setToken('OT');
- }
- break;
- case '(not set)':
- if ("-" != this.ga_gclid) {
- this.token = 'GA';
- }
- break;
- case '(none)':
- this.setToken('TI');
- break;
- default:
- this.logError("ga_medium");
- break;
- }
- this.log(this.getTranslate());
- if (this.onload)
- this.onload(this.getToken(), this.getTranslate());
- },
- /*
- * TOKEN
- */
- getToken: function() {
- return this.token;
- },
- setToken: function(token) {
- this.token = token;
- return this;
- },
- hasToken: function() {
- return (null == this.token) ? false : true;
- },
- /*
- * LANGUAGE
- */
- getLanguage: function() {
- return this.language;
- },
- setLanguage: function(lang) {
- this.language = lang;
- return this;
- },
- /*
- * TRANSLATE
- */
- addTranslate: function(code, translate) {
- this.translations.ru[code] = translate;
- return this;
- },
- getTranslate: function() {
- if (this.hasToken() && !this.hasError()) {
- return this.translations[this.language][this.getToken()];
- }
- return null;
- },
- /*
- * ERRORS & LOGS
- */
- log: function(string) {
- try{
- console.log(string);
- }catch(e){}
- return this;
- },
- logError: function(string) {
- this.error = true;
- return this.log(string);
- },
- hasError: function() {
- return this.error;
- },
- /*
- * PARSER
- */
- _uGC:function(l,n,s){
- if (!l || l=="" || !n || n=="" || !s || s=="") return "-";
- var i,i2,i3,c="-";
- i=l.indexOf(n);
- i3=n.indexOf("=")+1;
- if (i > -1) {
- i2=l.indexOf(s,i); if (i2 < 0) { i2=l.length; }
- c=l.substring((i+i3),i2);
- }
- return c;
- }
- };
Add Comment
Please, Sign In to add comment