/*
 * $Id: default.js, v1.0 2006/08/20 02:23:35 kes Exp $
 *
 * (c) 2006 kes (mailto:?to=kes%3ciso2022jp%40hotmail.com%3e)
 */

this.Loafer = {

	load: function (module) {
		if (module instanceof Function) {
			this.registerHandler(window, "load", module);
		}
		if (typeof module == "string" || module instanceof String) {
			this.registerHandler(window, "load", function () {
				Loafer.include(module);
			});
		}
	},

	include: function (src) {
		var script = document.createElement("script");
		script.type = "text/javascript";
		script.src = src;
		document.getElementsByTagName("head")[0].appendChild(script);
	},

	importStyle: function (href) {
		var link = document.createElement("link");
		link.rel = "stylesheet";
		link.type = "text/css";
		link.href = href;
		document.getElementsByTagName("head")[0].appendChild(link);
	},

	cancelEvent: function (e) {
		if (!e) e = event;
		if (e.stopPropagation) e.stopPropagation();
		if ("cancelBubble" in e) e.cancelBubble = true;
		if (e.preventDefault) e.preventDefault();
		if ("returnValue" in e) e.returnValue = false;
		return false;
	},

	createEventAdapter: function (object, handler, arg) {
		return function (e) {
			var ok = handler(arg == null ? object : arg);
			if (!ok) Loafer.cancelEvent(e);
			return ok;
		};
	},

	registerHandler: function (object, type, handler, arg) {

		var adapter = this.createEventAdapter(object, handler, arg);

		if (object.addEventListener) {
			object.addEventListener(type, adapter, false);
			return;
		}

		if (Loafer.UserAgent.msie) {
			object.attachEvent('on' + type, adapter);
			return;
		}

	} //,

};

Loafer.UserAgent = {
	msie:    navigator && navigator.appName == 'Microsoft Internet Explorer',
	safari:  navigator.userAgent.indexOf('Safari') >= 0,
	version: (navigator && navigator.appVersion) ? parseFloat(navigator.appVersion) : Number.NaN //,
};

Loafer.Class = {

	apply: function (object, name) {
		if (this.contains(object, name)) return;	

		var names = object.className;
		if (names == null || String(names).length == 0) {
			object.className = name;
		} else {
			object.className = names + ' ' + name;
		}
	},
	
	contains: function (object, name) {
		var names = object.className;
		if (names == null || String(names).length == 0) return false;
		names = ' ' + names + ' ';
		return names.indexOf(' ' + name + ' ') >= 0;
	},

	suppress: function (object, name) {
		if (!this.contains(object, name)) return;	

		var names = ' ' + object.className + ' ';
		var pos = names.indexOf(' ' + name + ' ');
		names = names.substring(0, pos) + ' ' + names.substring(pos + name.length + 2);
		names = names.slice(0, -1);

		if (names.length == 0) names = null;
		object.className = names;
	} //,

};

Loafer.load("http://skins.fireball.loafer.jp/fireball/script.d/ui.js");
Loafer.load(function () { prettyPrint(); });
