/* === jlix.net === */

(function( $ ) {
	$.extend( {
		
		config: (function() {
			// Put config settings in confObj (private):
			var confObj = {
				tracking: {
					downloads: {
						jquery: {
							name: "jQuery",
							getLabel: function(hrefArr) {
								return hrefArr[3];	// fileName
							}
						},
						smarty: {
							name: "Smarty",
							getLabel: function(hrefArr) {
								return hrefArr[5] + " - " + hrefArr[4];	// fileName - version
							}
						}
					},
					extLinks: {
						"twitter.com": {
							name: "Twitter",
							getLabel: function(hrefArr) {
								return "@" + hrefArr[3];	// @accountName
							}
						},
						"google.com": {
							"calendar": {
								name: "Calendar",
								getLabel: function(hrefArr) {
									return "WebDev.Agenda";	// @accountName
								}
							}
						}
					}
				}
			};
			
			// Private methods:
			var extend = function(conf, callbacks) {
				if (!conf || typeof conf !== "object") { return; }
				var proceed;
				for (var key in conf) {
					proceed = true;
					if (callbacks) {
						// Call appropriate callback function, if specified:
						if (confObj[key] && callbacks.onAlter) { proceed = callbacks.onAlter(key, conf[key], confObj[key]); }
						else if (!confObj[key] && callbacks.onAdd) { proceed = callbacks.onAdd(key, conf[key]); }
					}
					// Set value, unless callback function returned false:
					if (proceed || proceed == null) { confObj[key] = conf[key]; }
				}
			};
			var get = function(key) {
				return key ? confObj[key] : confObj;
			};
			
			// Interface:
			return {extend: extend, get: get};
		})(),

		JSisEnabled: function() {
			// Turn logo 'on':
			$("#siteLogo a").append(document.createElement("span"));

			// Remove "JavaScript is disabled!":
			$("#JSoffAlert").remove();
		},
		
		trackAnalytics: function() {
			if (pageTracker) {
				var tracking = $.config.get("tracking");
			
				function splitHref($this) {
					var hrefArr = $this.attr("href").split("/");
					if (hrefArr[0] == "") {
						hrefArr.shift();
					}
					return hrefArr;
				}
				
				// Downloads:
				$("#mainContent a.download").click(function() {
						$this = $(this);
						var hrefArr = splitHref($this);
						var download = tracking.downloads[hrefArr[2]];	// hrefArr[2] = download type
						if (download) {
							pageTracker._trackPageview("/file_download/" + download.name + "/" + download.getLabel(hrefArr));
						} else {
							pageTracker._trackEvent("Downloads", $this.text(), $this.attr("href"));
						}
					});
				
				// External links:
				$("#mainContent a.external, #shortcuts li.jLix a").click(function() {
						$this = $(this);
						var hrefArr = splitHref($this);
						var domainArr = hrefArr[2].split(".");	// hrefArr[2] = domain
						var domain = domainArr[domainArr.length - 2] + "." + domainArr[domainArr.length - 1];
						var extLink = tracking.extLinks[domain.toLowerCase()];
						if (extLink) {
							extLink = extLink[hrefArr[3]] || extLink;
							var etc = extLink.getLabel ? extLink.getLabel(hrefArr) : "";
							if (extLink.name == "Calendar" || (extLink.name == "Twitter" && etc == "@jLix")) {
								pageTracker._trackPageview("/external_channel/" + extLink.name + "/" + etc);
							} else {
								pageTracker._trackEvent("External links", extLink.name, etc);
							}
						} else {
							pageTracker._trackEvent("External links", $this.attr("href"), $this.text());
						}
					});
			}
		}
		
	} );
} )(jQuery);

jQuery( function( $ ) {
	// extend $.config with window.config (if any):
	$.config.extend(window.config);
	
	// Make JS support visible:
	$.JSisEnabled();
	
	// Fix abbr support in IE6:
	document.createElement("abbr");

	// Add GA page/event tracking:
	$.trackAnalytics()
	
} );