function $(id) {
	return document.getElementById(id);
}

function observe(element, name, handler) {
	if (element.addEventListener) {
		element.addEventListener(name, handler, false);
	} else {
		element.attachEvent("on" + name, handler);
	}
}

function random(min, max) {
	return min + (max-min) * Math.random();
}

function line(y1, y2, color) {
	this.y1 = y1;
	this.y2 = y2;
	this.color = color;
}

function pointer(event) {
  return {x: pointerx(event), y: pointery(event)};
}

function pointerx(event) {
  var docElement = document.documentElement,
   body = document.body || { scrollLeft: 0 };

  return event.pageX || (event.clientX +
    (docElement.scrollLeft || body.scrollLeft) -
    (docElement.clientLeft || 0));
}

function pointery(event) {
  var docElement = document.documentElement,
   body = document.body || { scrollTop: 0 };

  return  event.pageY || (event.clientY +
     (docElement.scrollTop || body.scrollTop) -
     (docElement.clientTop || 0));
}

function popupify(element, day_number, day_name) {
	var day = $(element);
	if (day != null) {
		day.className = 'day clickable';
		day.innerHTML += '<div class="bubble"></div><button class="popup"></button>';
		observe(day.getElementsByTagName('button')[0], 'click', function(e) {
			popup.show(day, day_number, day_name, e);
		});
	}
}

var popup = {
	init: function() {
		this.popup = $('popup');
		if (!this.popup) {
			return;
		}
		
		this.h2 = this.popup.getElementsByTagName('h2')[0];
		this.span = this.popup.getElementsByTagName('span')[0];
		this.text = $('popup_text');
		this.close = this.popup.getElementsByTagName('img')[0];
		observe(this.close, 'click', function() {
			popup.hide();
		});
	},
	show: function(element, day_number, day_name, e) {	
		this.h2.innerHTML = day_number;
		this.span.innerHTML = day_name;
		this.text.innerHTML = document.getElementById(element.id.replace('day', 'popup_text')).innerHTML.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
		
		tween.add(0, 1.2, 0.25, function(v) {
			popup.popup.style.display = 'block';
			popup.popup.style.opacity = v;
			popup.popup.filter = "alpha(opacity=" + v + ")";
		});
	},
	hide: function() {
		tween.add(1, 0, 0.25, function(v) {
			popup.popup.style.opacity = v;
			popup.popup.filter = "alpha(opacity=" + v + ")";
			if (v <= 0.05) {
				popup.popup.style.display = 'none';
			}
		});
	}
}

var lines = {
	init: function() {
		this.colors = ['#163b3a', '#47360a', '#470f33', '#1d420a', '#472f0a'];
		this.element = $('lines');
		if (typeof(G_vmlCanvasManager) != 'undefined') {
			this.element = G_vmlCanvasManager.initElement($('lines'));
		}
		this.lines = [];
		this.resize();
		this.num = Math.round(this.dimensions.height / 10);
		
		for (var i=0; i<6; i++) {
			var l = new line(
				random(0, this.dimensions.height),
				random(0, this.dimensions.height),
				this.colors[Math.floor(Math.random() * this.colors.length)]
			);
			this.lines.push(l);
		}
		
		this.context = this.element.getContext('2d');
		this.draw();
		
		observe(window, 'resize', function() {
			lines.resize();
		});
	},
	draw: function() {
		this.drawn = true;
		this.context.clearRect(0, 0, this.dimensions.width, this.dimensions.height);
		for (var i=0; i<this.lines.length; i++) {
			var l = this.lines[i];
			this.line(l);
		}
	},
	line: function(l) {
		this.context.strokeStyle = l.color;
		this.context.beginPath();
		this.context.moveTo(0, l.y1);
		this.context.lineTo(this.dimensions.width, l.y2);
		this.context.closePath();
		this.context.stroke();
	},
	resize: function() {
		this.dimensions = {
			width: document.body.clientWidth,
			height: $('container').clientHeight
		};
		
		this.element.width = this.dimensions.width;
		this.element.height = this.dimensions.height;
		
		if (this.drawn) {
			this.draw();
		}
	}
}

observe(window, 'load', function() {
	lines.init();
	popup.init();
	Cufon.replace('h1');
	Cufon.replace('h2');
	
	var poster = $('poster');
	if (poster) {
		var img = poster.getElementsByTagName('img')[0];
		img.style.display = 'block';
		img.style.marginLeft = -img.clientWidth/2 + 'px';
		img.style.marginTop = -img.clientHeight/2 + 'px';
		
		observe(poster, 'click', function() {
			tween.add(1, 0, 0.25, function(v) {
				poster.style.opacity = v;
				poster.filter = "alpha(opacity=" + v + ")";
				if (v <= 0.05) {
					poster.style.display = 'none';
				}
			});
		});
	}
});