// Uncompressed version of: http://demo.genetify.com/genetify.js
// Copyright 2008 Genetify
var genetifyTime = {
	'begin': {},
	'end': {},
	'time': {}
};
genetifyTime.begin.load = new Date().getTime();
document._getElementsByXPath = function(expression) {
	var results = [];
	var query = document.evaluate(expression, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	for (var i = 0,
	length = query.snapshotLength; i < length; i++) results.push(query.snapshotItem(i));
	return results
};
document.getElementsByClassName = function(className) {
	if (document.evaluate) {
		var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
		return document._getElementsByXPath(q)
	} else {
		var classElements = new Array();
		var els = document.getElementsByTagName('*');
		var elsLen = els.length;
		var pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");
		for (i = 0, j = 0; i < elsLen; i++) {
			if (pattern.test(els[i].className)) {
				classElements[j] = els[i];
				j++
			}
		}
		return classElements
	}
};
function getAllChildren(e) {
	return e.all ? e.all: e.getElementsByTagName("*")
}
document.getElementsBySelector = function(_2) {
	if (!document.getElementsByTagName) {
		return new Array()
	}
	var _3 = _2.split(" ");
	var _4 = new Array(document);
	for (var i = 0; i < _3.length; i++) {
		token = _3[i].replace(/^\s+/, "").replace(/\s+$/, "");
		if (token.indexOf("#") > -1) {
			var _6 = token.split("#");
			var _7 = _6[0];
			var id = _6[1];
			var _9 = document.getElementById(id);
			if (_7 && _9.nodeName.toLowerCase() != _7) {
				return new Array()
			}
			_4 = new Array(_9);
			continue
		}
		if (token.indexOf(".") > -1) {
			var _6 = token.split(".");
			var _7 = _6[0];
			var _a = _6[1];
			if (!_7) {
				_7 = "*"
			}
			var _b = new Array;
			var _c = 0;
			for (var h = 0; h < _4.length; h++) {
				var _e;
				if (_7 == "*") {
					_e = getAllChildren(_4[h])
				} else {
					_e = _4[h].getElementsByTagName(_7)
				}
				for (var j = 0; j < _e.length; j++) {
					_b[_c++] = _e[j]
				}
			}
			_4 = new Array;
			var _10 = 0;
			for (var k = 0; k < _b.length; k++) {
				if (_b[k].className && _b[k].className.match(new RegExp("\\b" + _a + "\\b"))) {
					_4[_10++] = _b[k]
				}
			}
			continue
		}
		if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
			var _7 = RegExp.$1;
			var _12 = RegExp.$2;
			var _13 = RegExp.$3;
			var _14 = RegExp.$4;
			if (!_7) {
				_7 = "*"
			}
			var _b = new Array;
			var _c = 0;
			for (var h = 0; h < _4.length; h++) {
				var _e;
				if (_7 == "*") {
					_e = getAllChildren(_4[h])
				} else {
					_e = _4[h].getElementsByTagName(_7)
				}
				for (var j = 0; j < _e.length; j++) {
					_b[_c++] = _e[j]
				}
			}
			_4 = new Array;
			var _10 = 0;
			var _15;
			switch (_13) {
			case "=":
				_15 = function(e) {
					return (e.getAttribute(_12) == _14)
				};
				break;
			case "~":
				_15 = function(e) {
					return (e.getAttribute(_12).match(new RegExp("\\b" + _14 + "\\b")))
				};
				break;
			case "|":
				_15 = function(e) {
					return (e.getAttribute(_12).match(new RegExp("^" + _14 + "-?")))
				};
				break;
			case "^":
				_15 = function(e) {
					return (e.getAttribute(_12).indexOf(_14) == 0)
				};
				break;
			case "$":
				_15 = function(e) {
					return (e.getAttribute(_12).lastIndexOf(_14) == e.getAttribute(_12).length - _14.length)
				};
				break;
			case "*":
				_15 = function(e) {
					return (e.getAttribute(_12).indexOf(_14) > -1)
				};
				break;
			default:
				_15 = function(e) {
					return e.getAttribute(_12)
				}
			}
			_4 = new Array;
			var _10 = 0;
			for (var k = 0; k < _b.length; k++) {
				if (_15(_b[k])) {
					_4[_10++] = _b[k]
				}
			}
			continue
		}
		if (!_4[0]) {
			return
		}
		_7 = token;
		var _b = new Array;
		var _c = 0;
		for (var h = 0; h < _4.length; h++) {
			var _e = _4[h].getElementsByTagName(_7);
			for (var j = 0; j < _e.length; j++) {
				_b[_c++] = _e[j]
			}
		}
		_4 = _b
	}
	return _4
};
var genetify = {
	config: {
		REQUEST_RESULTS: true,
		USE_RESULTS_CACHE: true,
		REMOTE_BASE_URL: window.location.protocol + '//app.genetify.com',
		USE_URCHIN: false,
		USE_COOKIE: true,
		NO_VARYING: false,
		LOAD_CONTROLS: false,
		NAMESPACE: window.location.pathname
	},
	genome: {},
	genomeOverride: {},
	results: {},
	_cssRulesCache: [],
	_cssSheetCount: 0,
	_systemObjects: [],
	_systemNames: {},
	_scanCounter: 0,
	re: {},
	referrer: {},
	pageview_xid: 0,
	init: function() {
		window.onerror = genetify.record.error;
		window.onclick = function(e) {
			var _event = e || window.event;
			var target = _event.target || _event.srcElement;
			var onclickBody = target.getAttribute('onclick');
			if (target.href && onclickBody && onclickBody.indexOf('genetify.record.goal') != -1) {
				var message = 'Don\'t record clicking a link with the "onclick" event. Use "onmousedown" instead.';
				console.assert(false, message);
				genetify.record.error(message, '', '')
			}
		};
		if (window.location.protocol.indexOf('file:') != -1) {
			genetify.config.REMOTE_BASE_URL = genetify.config.REMOTE_BASE_URL.replace('file:', 'http:')
		}
		if (genetify.config.LOAD_CONTROLS) {
			window.onload = function() {
				genetify.test.loadControls()
			}
		}
		genetify._checkQueryString();
		genetify.cookie.init();
		var URLData = window.location.hash.slice(1);
		genetify.utils.update(genetify.genomeOverride, genetify.utils.fragmentToGenome(URLData));
		if (!genetify.config.NO_VARYING) {
			if (genetify.config.REQUEST_RESULTS) {
				genetify._requestResults('genetify.handleResults')
			}
			genetify._checkCSS(['.v', '.genetify_enabled', '.genetify_disabled']);
			genetify._registerSystemObjects();
			genetify._createRegexes();
			genetify._setReferrer()
		}
	},
	handleResults: function(JSON) {
		genetify.results = eval(JSON);
		genetifyTime.end.results = new Date().getTime()
	},
	_registerSystemObjects: function() {
		for (var p in window) {
			genetify._systemObjects.push(window[p]);
			genetify._systemNames[p] = true
		}
		genetify._systemObjects['genetify'] = genetify;
		genetify._systemNames['genetify'] = true
	},
	_setReferrer: function() {
		if (!document.referrer) return;
		var URLObj = genetify.utils.parseURL(document.referrer);
		genetify.referrer = {
			'domain': URLObj['host'],
			'path': URLObj['pathname'],
			'external': (document.domain == URLObj['host']) ? false: true
		};
		var searchEngineQueryParam = {
			'snipshot': 'p',
			'google': 'q',
			'yahoo': 'p',
			'msn': 'q',
			'aol': 'query',
			'lycos': 'query',
			'askjeeves': 'q',
			'ask': 'q',
			'altavista': 'q',
			'netscape': 'query',
			'cnn': 'query',
			'looksmart': 'qt',
			'about': 'terms',
			'mamma': 'query',
			'alltheweb': 'q',
			'gigablast': 'q',
			'voila': 'rdata',
			'virgilio': 'qs',
			'live': 'q',
			'baidu': 'wd',
			'alice': 'qs',
			'yandex': 'text',
			'najdi': 'q',
			'club-internet': 'q',
			'mama': 'query',
			'seznam': 'q',
			'search': 'q',
			'szukaj': 'szukaj',
			' (myArgs[i] == 'elements') {
				genetify.switchElements(genetify.getElements())
			} else if (myArgs[i] == 'additiveCSSRules') {
				genetify.switchAdditiveRules(genetify.getAdditiveRules())
			} else if (myArgs[i] == 'javascript') {
				genetify.getAndSwitchObjects()
			}
		}
		genetify.pageview_xid = genetify._generateID();
		genetify.cookie.save(genetify.genome, genetify.config.NAMESPACE);
		genetifyTime.end.vary = new Date().getTime();
		genetify.record.pageview(genetify.genome, genetify.referrer, geneTypes);
		return genetify.genome
	},
	_generateID: function() {
		var max = Math.pow(10, 15);
		var id = Math.round(Math.random() * max);
		return id
	},
	_lowerTagNames: function(selector) {
		var lowerTagInToken = function(token) {
			var splitter = '';
			if (token.indexOf('#') > -1) {
				splitter = '#'
			} else if (token.indexOf('.') > -1) {
				splitter = '.'
			} else {
				return token.toLowerCase()
			}
			var bits = token.split(splitter);
			var lowered = [bits[0].toLowerCase(), bits.slice(1).join(splitter)];
			return lowered.join(splitter)
		};
		var tokens = selector.split(' ');
		for (var i = 0; i < tokens.length; i++) {
			var token = tokens[i].replace(/^\s+/, '').replace(/\s+$/, '');
			tokens[i] = lowerTagInToken(token)
		}
		return tokens.join(' ')
	},
	getRules: function() {
		var CSSRuleDict = {};
		genetify._forAllCSSRules(function(cssRule) {
			CSSRuleDict[cssRule.selectorText] = cssRule.style.cssText
		});
		var geneDict = genetify._groupVariantsByGeneName(CSSRuleDict, genetify.re.CSSRules,
		function(matches) {
			var geneName = matches[1];
			if (geneName != geneName.toLowerCase()) {
				geneName = genetify._lowerTagNames(geneName)
			}
			return [geneName, matches[2]]
		});
		return geneDict
	},
	getAdditiveRules: function() {
		var CSSRuleDict = {};
		genetify._forAllCSSRules(function(cssRule) {
			CSSRuleDict[cssRule.selectorText] = cssRule.selectorText
		});
		var geneDict = genetify._groupVariantsByGeneName(CSSRuleDict, genetify.re.additiveCSSRules,
		function(matches) {
			var variantName = matches[2];
			var geneName = matches[0].replace('.v' + variantName, '');
			if (geneName !=var p in GENETIFY_CONFIG) {
		genetify.utils.assert(p in genetify.config, 'Invalid configuration variable ' + p)
	}
	genetify.config = genetify.utils.update(genetify.config, GENETIFY_CONFIG);
	delete(GENETIFY_CONFIG);
}
genetifyTime.end.load = new Date().getTime();
genetify.init();
genetifyTime.end.init = new Date().getTime();
