/**
 * Google Analytics Tracking
 * 
 * Скрипт для привязки Google Analytics Tracking к множеству элементов страницы.
 *
 * @version 1.3
 * @copyright Quiqnue Team
 * @link http://quinque.ru/
 */
/*
Manual:
	id          - родительский элемент для отслеживания
	action      - действие для записи в отчет (категория события)
	child       - дочерние элементы, на которые вешается трекинг
	node_attr   - атрибут для комментария в трекинге
	node_action - действие для вызова события трекинга

Специальные классы (атрибут class):
	trackEvent-none         - отключение трекинга для конкретного элемента
	trackEventAction-XXX    - запишет в отчет событие (категорию) с именем XXX
*/

function InitEventTracker(){
	var page = location.hostname + location.pathname;
	var pageEvents = [
		{id: 'header', action: 'header'},
		{id: 'header-menu', action: 'header-menu'},
		{id: 'form-search', action: 'form-search', child: 'input'},
		{id: 'category-list', action: 'category-list'},
		{id: 'news-list', action: 'news-list'},
		{id: 'visits-list', action: 'visits-list'},
		{id: 'visits-category-list', action: 'visits-category-list'},
		{id: 'header-menu-admin', action: 'header-menu-admin', child: 'input'},
		{id: 'header-menu-admin', action: 'header-menu-admin', child: 'a'},
		{id: 'page-block-admin', action: 'page-block-admin', child: 'select'},
		{id: 'page-block-admin', action: 'page-block-admin', child: 'a'},
		{id: 'paginator', action: 'paginator'},
		{id: 'footer', action: 'footer'}
		];
	var o = pageEvents;
	for(i in o){
		if(o[i].child === undefined){
			o[i].child = 'a';
		}
		var tObj = document.getElementById(o[i].id);
		if(tObj !== null){
			var category = page;
			var action = o[i].action;
			var childs = tObj.getElementsByTagName(o[i].child);
			var node_action = 'click';
			var node_attr = 'text';
			switch(o[i].child){
				case 'input':
					node_attr = (o[i].node_attr !== undefined) ? node_attr : 'name';
					node_action = (o[i].node_action !== undefined) ? node_action : 'click';
					break;
				case 'select':
					node_attr = (o[i].node_attr !== undefined) ? node_attr : 'value';
					node_action = (o[i].node_action !== undefined) ? node_action : 'change';
					break;
				case 'a':
				default:
					node_attr = (o[i].node_attr !== undefined) ? node_attr : 'text';
					node_action = (o[i].node_action !== undefined) ? node_action : 'click';
					break;
			}
			for(y in childs){
				if(childs[y].nodeType != 1){
					continue;
				}
				if(childs[y].className !== undefined){
					if(childs[y].className.match('trackEvent-none')){
						continue;
					}
					var match = [];
					if((match = childs[y].className.match('trackEventAction-(.+)')) !== null){
						action = match[1];
					}
				}
				var node = childs[y].nodeName.toLowerCase();
				(function(y, c, a, ac, attr){
					addHandler(childs[y], ac,
						function(){
							pageTracker._trackEvent(c, a, this[attr]);
						}
					);
				})(y, category, action, node_action, node_attr);
			}
		}
	}
}

setGlobalOnLoad(InitEventTracker);

function addHandler(object, event, handler){
	if (typeof object.addEventListener != 'undefined')
		object.addEventListener(event, handler, false);
	else if (typeof object.attachEvent != 'undefined')
		object.attachEvent('on' + event, handler);
}
function removeHandler(object, event, handler){
	if (typeof object.removeEventListener != 'undefined')
		object.removeEventListener(event, handler, false);
	else if (typeof object.detachEvent != 'undefined')
		object.detachEvent('on' + event, handler);
}
function setGlobalOnLoad(f) {
	var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
	if (root){
		if(root.addEventListener) root.addEventListener("load", f, false);
		else if(root.attachEvent) root.attachEvent("onload", f);
	} else {
		if(typeof window.onload == 'function') {
			var existing = window.onload;
			window.onload = function() {
				existing();
				f();
			};
		} else {
			window.onload = f;
		}
	}
}

