/*
 *	Application.js
 *		This is the main application that drives the website. It also serves to 
 *		keep the global namespace un-cluttered.
 *
 */

if (com) {
	if (com.stevemeinel) {
		if (!com.stevemeinel.AccordionMenu) {
			throw new Error("com.stevemeinel.AccordionMenu does not exist!");
		}
	} else {
		throw new Error("com.stevemeinel does not exist!");
	}
} else {
	throw new Error("com does not exist!");
}
 
Application = function () {
	this.menu = null;

	this.delete_element = function (id) {
		var element = document.getElementById(id);
		if (element) {
			var parent = element.parentNode;
			parent.removeChild(element);
		}
	};
	
	this.get_browser_dimensions = function () {
		var width = YAHOO.util.Dom.getViewportWidth();
		var height = YAHOO.util.Dom.getViewportHeight();
	
		return { w: width, h: height };
	};
	
	this.center = function (inner, outer) {
		var inElement = document.getElementById(inner);
		var iw = inElement.offsetWidth;
		var ih = inElement.offsetHeight;
	
		var ow;
		var oh;
	
		if (outer) {
			var outElement = document.getElementById(outer);
			ow = outElement.offsetWidth;
			oh = outElement.offsetHeight;
		} else {
			var dimensions = this.get_browser_dimensions();
			ow = dimensions.w;
			oh = dimensions.h;
		}
		
		var woff = Math.max((ow - iw) / 2, 0);
		var hoff = Math.max((oh - ih) / 2, 0);
		
		inElement.style.left = woff + "px";
		inElement.style.top = hoff + "px";
	};
	
	this.scale_to_fit = function (inner, outer) {
		var inElement = document.getElementById(inner);
		var iw = inElement.offsetWidth;
		var ih = inElement.offsetHeight;
	
		var outElement = document.getElementById(outer);
		var ow = outElement.offsetWidth;
		var oh = outElement.offsetHeight;
	
		var scale = 1.0;
		var rescale = false;
		
		if (iw > ow) {
			rescale = true;
			scale = ow / iw;
		}
		if (ih > oh) {
			rescale = true;
			var s = oh / ih;
			if (s < scale) {
				scale = s;
			}
		}
		
		if (rescale) {
			iw *= scale;
			ih *= scale;
			inElement.style.width = iw + "px";
			inElement.style.height = ih + "px";
		}
	};
	
	this.hide_class = function (class_name, time) {
		var list = YAHOO.util.Dom.getElementsByClassName(class_name, 'div');
		var length = list.length;
		var i = 0;
		for (i = 0; i < length; i++) {
			if (!list[i].old_height) {
				list[i].old_height = list[i].offsetHeight;
			}
			var anim = new YAHOO.util.Anim(list[i], {height: {to: 0}}, time); 
			anim.animate();
		}
	};
	
	this.set_alpha = function (id, value) {
		var element = document.getElementById(id);
		if (element) {
			element.style.opacity = value / 100;
			element.style.filter = 'alpha(opacity=' + value + ')';
		}
	};
	
	this.fix_layout = function () {
		this.delete_element("js_warning");
		this.center("container");
		this.set_alpha("pic_dock", 25);
		this.hide_class("subcategory", 0);
	};
	
	this.on_dom_ready = function () {
		this.fix_layout();
		
		this.menu = new com.stevemeinel.AccordionMenu("menu_body", "category");
	};
};

var app = new Application();

(function () {
	YAHOO.util.Event.onDOMReady(function () {
		app.on_dom_ready();
	});
})();
