var Global = Class.create();

Global.prototype = {
	applicationPath: '/',
	
	sifrElements: [
		{
			element: "#archive span.author, div.archive span.author",
			swf: "swf/sifr_balance.swf",
			colour: "#F15A24",
			transparent: false,
			align: "left",
			upperCase: true
		},
		{
			element: "#home span.author",
			swf: "swf/sifr_balance.swf",
			colour: "#F15A24",
			transparent: false,
			align: "center",
			upperCase: false,
			lowerCase: true
		},
		{
			element: "#home h3, #content h3",
			swf: "swf/sifr_franklin.swf",
			colour: "#000",
			transparent: false,
			align: "left",
			upperCase: false
		},
		{
			element: "#home h2, #archive h2",
			swf: "swf/sifr_bodoni.swf",
			colour: "#000",
			transparent: false,
			align: "center",
			upperCase: true
		},
		{
			element: "#content span.author",
			swf: "swf/sifr_balance.swf",
			colour: "#F15A24",
			transparent: false,
			align: "center",
			upperCase: true
		}
	],
	
	initialize: function() {
		this.endParagraphs();
		this.externaliseLinks();
		this.sifr();
		this.replaceAsterisks();
		this.spaceHeaders();
	},
	
	spaceHeaders: function() {
		var titles  = $$('div.story h3');
		var lineHeight = 22; // TODO
		var maxLines = 1;
		for ( var x = 0 ; x < titles.length ; x++ ) {
			var lines = Math.ceil(titles[x].offsetHeight/lineHeight);
			if (lines > maxLines) {
				maxLines = lines;
			}
		}
		
		for ( var x = 0 ; x < titles.length ; x++ ) {
			var lines = Math.ceil(titles[x].offsetHeight/lineHeight);
			if (lines > maxLines) {
				maxLines = lines;
			}
			
			var margin = (lineHeight*(maxLines-(Math.ceil(titles[x].offsetHeight/lineHeight))))-((maxLines-lines)*3);
			
			if (lines < maxLines) {
				titles[x].setStyle({
					marginBottom: margin + "px"
				});
			}
		}
	},
	
	replaceAsterisks: function() {
		// This method replaces any paragraphs with *** in them to the star-divider class
		var paragraphs = $$('#content p');
		for ( var x = 0 ; x < paragraphs.length ; x++ ) {
			if (paragraphs[x].innerHTML.indexOf('***')!=-1) {
				paragraphs[x].addClassName('star-divider');
			}
		}
	},
	
	endParagraphs: function() {
		var elements = $$('div.story','#content');
		for ( var x = 0 ; x < elements.length ; x++ ) {
			var paragraphs = elements[x].select('p');
			
			if (elements[x].select('p a.continued').length == 0) {
				var image = new Image();
				image.src = this.applicationPath + "images/stop.png";
				
				var last = paragraphs.length-1;
				if (last < 0) {
					last = paragraphs.length;
				}
				
				paragraphs[last].appendChild(image);
			}
		}
	},
	/* 
	This method replaces all necessary headings with a sIFR SWF 
	*/
	sifr: function() {
		if (typeof sIFR == "function") {
			for ( var x = 0 ; x < this.sifrElements.length ; x++ ) {
				var element = this.sifrElements[x];
				var align = (typeof(element.align)=="string") ? element.align : "left";
				
				sIFR.replaceElement(element.element,
					named(
						{
							sFlashSrc: this.applicationPath + element.swf, 
							sColor: element.colour,
							sWmode: element.transparent ? "transparent" : "",
							sFlashVars: "textalign=" + align,
							sCase: element.upperCase ? "upper" : ((element.lowerCase) ? "lower" : "normal"),
							sHoverColor: "#000"
						}
					)
				);
			}
		}
	},
	
	externaliseLinks: function() {
		var links = $$("a"); 
		for ( var x=0; x<links.length; x++ ) { 
			var link = links[x];
			if (link.getAttribute("href")) {
				var rels = link.getAttribute("rel");
				if (rels != null) {
					rels = rels.split(" ");
					for (var i=0; i<rels.length; i++) {
						if (rels[i] == "external") {
							link.target = "_blank"; 
							break;
						}
					}
				}
			}
		} 
	}
};

var global = new Global();


// GOOGLE ANALYTICS
var Analytics = Class.create();
Analytics.prototype = {
	initialize: function() {
		if (_gat) {
			this.pageTracker = _gat._getTracker(AnalyticsOptions.code);
			this.pageTracker._initData();
			this.pageTracker._trackPageview();
			
			var rss = $('rss');
			if (rss) {
				Event.observe(rss, 'click', this.trackRSS.bind(this));
			}
		}
	},
	
	trackRSS: function() {
		if (this.pageTracker != null) {
			try {
				this.pageTracker._trackPageview('/rss');
			} catch(err) {}
		} 
	}
}

var AnalyticsOptions = {
	code: "UA-8466733-1"
}

var analytics;
Event.observe(window, 'load', function() { analytics = new Analytics(); });

