/**
 * GoogleAnalitics code.
 * @see http://google.com.ua/support/googleanalytics/bin/answer.py?hl=ru&answer=161379
 * @see http://code.google.com/intl/ru/apis/analytics/docs/tracking/asyncTracking.html
 */
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-5214758-1']);
_gaq.push(['_setDomainName', 'dalion.ua']);
_gaq.push(
    ['_addOrganic', 'go.mail.ru', 'q'],
    ['_addOrganic', 'nova.rambler.ru', 'query'],
    ['_addOrganic', 'nigma.ru', 's'],
    ['_addOrganic', 'blogs.yandex.ru', 'text', true],
    ['_addOrganic', 'webalta.ru', 'q'],
    ['_addOrganic', 'aport.ru', 'r'],
    ['_addOrganic', 'akavita.by', 'z'],
    ['_addOrganic', 'meta.ua', 'q'],
    ['_addOrganic', 'bigmir.net', 'q'],
    ['_addOrganic', 'tut.by', 'query'],
    ['_addOrganic', 'all.by', 'query'],
    ['_addOrganic', 'i.ua', 'q'],
    ['_addOrganic', 'online.ua', 'q'],
    ['_addOrganic', 'a.ua', 's'],
    ['_addOrganic', 'ukr.net', 'search_query'],
    ['_addOrganic', 'search.com.ua', 'q'],
    ['_addOrganic', 'search.ua', 'query'],
    ['_addOrganic', 'poisk.ru', 'text'],
    ['_addOrganic', 'km.ru', 'sq'],
    ['_addOrganic', 'liveinternet.ru', 'ask'],
    ['_addOrganic', 'quintura.ru', 'request'],
    ['_addOrganic', 'search.qip.ru', 'query'],
    ['_addOrganic', 'gde.ru', 'keywords'],
    ['_addOrganic', 'gogo.ru', 'q']
);
/* - Вызывается ниже в A.view().
_gaq.push(['_trackPageview']);
*/

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
})();







/**
 * Пространство имён для функций аналитики.
 * 
 * @requires JQuery, JSON.js
 */
var A = A || {};

A.cache = {};
A.cache.tracking = {};
A.cache.liveLink = {};



/**
 * Отслеживаем просмотры страниц.
 * Метод полезно вызывать после каждой загрузки информативных Ajax-блоков.
 */
A.view = function() {
	// Сразу вернём управление вызвавшему методу
	setTimeout( function() {
		// GA
		_gaq.push( [ '_trackPageview' ] );
	
		// LI
		// @see http://www.liveinternet.ru/help/group.html
		new Image().src = "//counter.yadro.ru/hit;dalion?r"+
		escape(document.referrer)+((typeof(screen)=="undefined")?"":
		";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?
		screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+
		";h"+escape(document.title.substring(0,80))+
		";"+Math.random();
	}, 5 );

};




/**
 * Оживляет ссылки.
 * Вызывается один раз. Самостоятельно отслеживает появляющиеся на странице
 * ссылки и наполняет их слушателями событий для сбора статистики.
 */
A.liveLink = function() {

	var link = $( 'a[href^="http://"]', 'body' );
	$.each( link, function( i, aLink ) {
	    var a = $( aLink );
	    var href = A.shortLink( a.attr( 'href' ) );
    	if ( !A.tracking( href ) ) {
    		return;
        }

	    if ( A.cache.liveLink[href] ) {
	    	// Уже живая ссылка
	    	return;
	    }

	    // Отслеживаемые (в нашем случае они же - внешние) ссылки
	    // открываем в новом окне
        a.attr( 'target', '_blank' );

        // Параметры в формате JSON
		var data = {
	       to: encodeURIComponent( href )
		};

        // Отслеживаем показ ссылки
		A.trackEvent( 'link', 'show', data );

		// Отслеживаем путь посетителя по ссылкам
		/* - Есть ограничение на кол-во событий: не более 500 запросов / сеанс.
		 *   @source http://code.google.com/intl/ru-RU/apis/analytics/docs/tracking/eventTrackerGuide.html#implementationConsiderations
		a.bind( 'mouseover', function() {
			A.trackEvent( 'link', 'hover', data );
		    return true;
		} );
		*/

		// Фиксируем переходы по ссылкам за пределы сайта
		a.bind( 'click', function() {
			A.trackEvent( 'link', 'go', data );
		    return true;
		} );

		// Отмечаем, что эта ссылка прослушивается
		A.cache.liveLink[href] = true;

    } ); // $.each( link, function( a )


	// Постоянно следим за новыми ссылками
	setTimeout( function() {
		A.liveLink();
	}, 2300 );

};






/**
 * Собирает информацию о показах магазина.
 * Вызывается один раз. Самостоятельно отслеживает появляющиеся на странице
 * магазины и наполняет их слушателями событий для сбора статистики.
 * Признак магазина: class="shop", содержащий внутри 
 *//* - Оставить только w-shop.js?
Подгружать виджет w-shop для каждого подарка. Оставить только w-shop!
A.liveShop = function() {

	var link = $( '.shop a', 'body' );
	.....

};
*/






/**
 * @return Удаляет из ссылки лишнюю информацию.
 */
A.shortLink = function( href ) {
	var sh = href.replace( 'http://', '' ).replace( 'www.', '' );
	var last = sh.length - 1;
	return (sh[last] === '/') ? sh.substr( 0, last ) : sh;
};




/**
 * Список декларирует ссылки, которые отслеживать не надо.
 * Нас интересуют ссылки, не относящиеся к сайтам Далиона.
 */ 
A.notTrackingLink = [
   	'dalion.ua',
   	'dalion-holiday.',
   	'gift-country.',
   	'reday.info',
	':void(0)',
    'j.mp',
    'feedburner.com',
    'wikipedia.org',
	'mailto:',
   	'dalion-news.',
   	'blogger.com',
   	'subscribe.ru',
	'dalion-gift'
];


/**
 * @return bool Ссылка требует отслеживания.
 */
A.tracking = function( href ) {
	if ('undefined' === typeof A.cache.tracking[href]) {
		var f = true;
		for (var i = 0; i < A.notTrackingLink.length; ++i) {
			if (href.toLowerCase().indexOf( A.notTrackingLink[i] ) !== -1) {
				f = false;
				break;
			}
		}
		A.cache.tracking[href] = f;
	}

	return A.cache.tracking[href];
};




/**
 * Регистрирует указанное событие.
 * Добавляет информацию, по какому URL это событие произошло.
 */
A.trackEvent = function( category, action, data ) {
	var d = data || {};
	d.source = encodeURIComponent( A.shortLink( window.location.href ) );
	setTimeout( function() {
		A.trackEventDalion( category, action, d );
		A.trackEventGoogle( category, action, d );
	}, 5 );
};


A.trackEventDalion = function( category, action, dataWithSource ) {
	// @todo Отслеживать.
};


// (!) Есть ограничение на кол-во событий: не более 500 запросов / сеанс.
// @source http://code.google.com/intl/ru-RU/apis/analytics/docs/tracking/eventTrackerGuide.html#implementationConsiderations
A.trackEventGoogle = function( category, action, dataWithSource ) {
	var d = dataWithSource || {};
	var s = (JSON && JSON.stringify) ? JSON.stringify( d ) : ( d.source || '' );
	_gaq.push( [ '_trackEvent', category, action, s ] );
};




// Отмечаем просмотр страницы
A.view();




$( function() {

// Мониторинг ссылок
A.liveLink();

} );

