$(document).ready(function()
{
	Interface = new function()
	{
		var self = this;
		
		self.initialize_interface = function()
		{
			Debug.info("Initializing interface actions...");
			$(".expandable").each(function()
			{
				var $exp = $(this);
				var $b = $(".button a", $exp);
				var $c = $(".content", $exp);
				$c.hide();
				var perform_footer_updates = true;
				function update_footer()
				{
					if (perform_footer_updates) {
						var $f = $("#footer");
						var $m = $("#main");
						var h = $f.height();
						$m.css({paddingBottom: h+"px"});
						$f.css({marginTop: -h+"px"});
					}
				}
				update_footer();
				perform_footer_updates = false;
				var update_footer_interval = setInterval(update_footer, 5);
				
				$b.click(function()
				{
					perform_footer_updates = true;
					$b.toggleClass("open");
					$c.slideToggle(500, function()
					{
						update_footer();
						perform_footer_updates = false;
					});
					//var pos = $b.position();
					//scrollIntoView(true);
					
					return false;
				});
			});
			if (window.location.hash.indexOf("#footer") != -1) {
				$("#footer .expandable .button a").click();
			}
			Debug.info("Done initializing interface actions.");
		}
		
		self.increment_header = function()
		{
			if (self.header_next_ready != true) {
				self.header_skipped = true;
				return;
			}
			self.header_next_offset += 1;
			if (self.header_next_offset >= self.header_images.length) {
				self.header_next_offset = 0;
			}
			self.header_next_ready = false;
			self.update_header();
		}
		
		self.update_header = function()
		{
			/* Update the header and fade in a new image. */
			if (self.header_next_offset == self.header_curr_offset) {
				return false;
			}
			var curr_img_n = self.header_curr_offset;
			var next_img_n = self.header_next_offset;
			Debug.log("Updating the header (offset: %d).", [curr_img_n]);
			var curr_img_url = self.header_images[curr_img_n];
			var next_img_url = self.header_images[next_img_n];
			var $curr_img_node = $(".top_bar_bg img[src="+curr_img_url+"]");
			var $next_img_node = $(".top_bar_bg img[src="+next_img_url+"]");
			if ($next_img_node[0] && ($next_img_node[0].complete || (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6))) {
				self.header_next_loaded = true;
			} else {
				/* Create the new image node if it doesn't exist already. */
				$next_img_node = $("<img src=\""+next_img_url+"\" alt=\"\" />");
				$next_img_node.appendTo($(".top_bar_bg"));
				$next_img_node.css({display: "none"});
				$next_img_node.one("load", function()
				{
					self.header_next_loaded = true;
				}).each(function()
				{
					if (this.complete || (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6)) {
						$(this).trigger("load");
					}
				});
			}
			if (self.header_next_loaded) {
				$curr_img_node.animate({marginTop: "0"}, window.daar_slider.fade_time).fadeOut(window.daar_slider.fade_time);
				$next_img_node.css({zIndex: ++self.header_image_z});
				$next_img_node.fadeIn(window.daar_slider.fade_time);
				self.header_curr_offset = self.header_next_offset;
				self.header_next_loaded = false;
				self.header_next_ready = true;
				if (self.header_skipped) {
					self.increment_header();
				}
				self.header_skipped = false;
			}
		}
		
		self.initialize_header = function()
		{
			Debug.info("Initializing header...");
			
			var a, z;
			
			if (window.daar_slider) {
				self.header_curr_offset = -1;
				self.header_next_offset = 0;
				self.header_next_loaded = false;
				self.header_next_ready = true;
				self.header_skipped = false;
				self.header_image_z = 0;
				self.header_images = window.daar_slider.images;
				setInterval(self.increment_header, window.daar_slider.slide_time);
				setInterval(self.update_header, 100);
				self.update_header();
			} else {
				Debug.error("Can't initialize header: no window.daar_slider variable found.");
			}
			
			Debug.info("Done initializing header.");
		}
		
		self.__init__ = (function()
		{
			self.initialize_interface();
			self.initialize_header();
			
			Debug.info("Interface class initialized.");
		}).apply(self);
	}
});
