// (C) Andrea Giammarchi - JSL 1.4b
var undefined;
function $JSL(){
	this.inArray=function(){
		var tmp=false,i=arguments[1].length;
		while(i&&!tmp)tmp=arguments[1][--i]===arguments[0];
		return tmp;
	};
	this.has=function(str){return $JSL.inArray(str,$has)};
	this.random=function(elm){
		var tmp=$JSL.$random();
		while(typeof(elm[tmp])!=="undefined")tmp=$JSL.$random();
		return tmp;
	};
	this.$random=function(){return (Math.random()*1234567890).toString()};
	this.reverse=function(str){return str.split("").reverse().join("")};
	this.replace=function(str){
		var tmp=str.split(""),i=tmp.length;
		while(i>0)tmp[--i]=$JSL.$replace(tmp[i]);
		return tmp.join("");
	};
	this.$replace=function(tmp){
		var i=tmp.length===1?tmp.charCodeAt(0):0;
		switch(i) {
			case 8	:tmp="\\b";break;
			case 10	:tmp="\\n";break;
			case 11	:tmp="\\v";break;
			case 12	:tmp="\\f";break;
			case 13	:tmp="\\r";break;
			case 34	:tmp="\\\"";break;
			case 92	:tmp="\\\\";break;
			default:
				tmp=tmp.replace(/([\x00-\x07]|[\x0E-\x1F]|[\x7F-\xFF])/g,function(a,b){return "\\x"+$JSL.charCodeAt(b)}).
					replace(/([\u0100-\uFFFF])/g,function(a,b){b=$JSL.charCodeAt(b);return b.length<4?"\\u0"+b:"\\u"+b});
				break;
		};
		return tmp;
	};
	this.charCodeAt=function(str){return $JSL.$charCodeAt(str.charCodeAt(0))};
	this.$charCodeAt=function(i){
		var str=i.toString(16).toUpperCase();
		return str.length<2?"0"+str:str;
	};
	this.$toSource=function(elm){return elm.toSource().replace(/^(\(new \w+\()([^\000]+)(\)\))$/,"$2")};
	this.$toInternalSource=function(elm){
		var tmp=null;
		switch(elm.constructor) {
			case Boolean:
			case Number:
				tmp=elm;
				break;
			case String:
				tmp=$JSL.$toSource(elm);
				break;
			default:
				tmp=elm.toSource();
				break;
		};
		return tmp;
	};
	this.getElementsByTagName=function(scope,i,elm,str){
		var tmp=$JSL.$getElementsByTagName(scope),j=tmp.length,$tmp=[];
		while(i>6),0x80+(i&0x3F));
		else if(i<65536)	str.push(0xE0+(i>>12),0x80+(i>>6&0x3F),0x80+(i&0x3F));
		else			str.push(0xF0+(i>>18),0x80+(i>>12&0x3F),0x80+(i>>6&0x3F),0x80+(i&0x3F));
		return "%"+str.map($JSL.$encodeURI).join("%");
	};
	this.$decodeURIComponent=function(a,b,c,d,e){
		var i=0;
		if(e)	  i=parseInt(e.substr(1,2),16);
		else if(d)i=((parseInt(d.substr(1,2),16)-0xC0)<<6)+(parseInt(d.substr(4,2),16)-0x80);
		else if(c)i=((parseInt(c.substr(1,2),16)-0xE0)<<12)+((parseInt(c.substr(4,2),16)-0x80)<<6)+(parseInt(c.substr(7,2),16)-0x80);
		else	  i=((parseInt(b.substr(1,2),16)-0xF0)<<18)+((parseInt(b.substr(4,2),16)-0x80)<<12)+((parseInt(b.substr(7,2),16)-0x80)<<6)+(parseInt(b.substr(10,2),16)-0x80);
		return String.fromCharCode(i);
	};
	var $has=[];
	if(!Function.prototype.apply){$has[$has.length]="apply";Function.prototype.apply=function(){
		var i=arguments.length===2?arguments[1].length:0,str,tmp=[],elm=(""+this).replace(/[^\(]+/,"function");
		if(!arguments[0])arguments[0]={};
		while(i)tmp.unshift("arguments[1]["+(--i)+"]");
		do{str="__".concat($JSL.random(arguments[0]).replace(/\./,"_"),"__")}while(new RegExp(str).test(elm));
		eval("var ".concat(str,"=arguments[0];tmp=(",elm.replace(/([^$])\bthis\b([^$])/g,"$1".concat(str,"$2")),")(",tmp.join(","),")"));
		return tmp;
	if(!Function.prototype.call){$has[$has.length]="call";Function.prototype.call=function(){
		var i=arguments.length,tmp=[];
		while(i>1)tmp.unshift(arguments[--i]);
		return this.apply((i?arguments[0]:{}),tmp);
	if(!Array.prototype.pop){$has[$has.length]="pop";Array.prototype.pop=function(){
		var a=this.length,r=this[--a];
		if(a>=0)this.length=a;
		return r;
	if(!Array.prototype.push){$has[$has.length]="push";Array.prototype.push=function(){
		var a=0,b=arguments.length,r=this.length;
		while(a1){
			arguments[0]=parseInt(arguments[0]);
			arguments[1]=parseInt(arguments[1]);
			c=arguments[0]+arguments[1];
			for(a=0,b=this.length;a=c){
					if(a===c&&d>2){
						for(a=2;a0)this.push(arguments[--i]);
		this.reverse();
		return this.length;
	if(!Array.prototype.indexOf){$has[$has.length]="indexOf";Array.prototype.indexOf=function(elm,i){
		var j=this.length;
		if(!i)i=0;
		if(i>=0){while(i=0){do{if(this[i--]===elm){
			j=i+1;i=0;
while(i>0)}
		else if(i>-this.length)
			j=this.lastIndexOf(elm,this.length+i);
		return j;
	if(!Array.prototype.every){$has[$has.length]="every";Array.prototype.every=function(callback,elm){
		var b=false,i=0,j=this.length;
		if(!elm){	while(i0&&reg.charAt(--a)==="\\"){};
					pos=b!==-1?b+1:b;
					return (b-a)%2===1?1:0;
				};
				do{a+=io()}while(pos!==-1);
				return a;
			};
			function $replace(str){
				var j=str.length-1;
				while(j>0)str[--j]='"'+str[j].substr(1,str[j--].length-2)[tmp](/(\\|")/g,'\\$1')+'"';
				return str.join("");
			};
			var p=-1,i=getMatches(""+reg,0,0),args=[],$match=this.match(reg),elm=$JSL.$random()[tmp](/\./,'_AG_');
			while(this.indexOf(elm)!==-1)elm=$JSL.$random()[tmp](/\./,'_AG_');
			while(i)args[--i]=[elm,'"$',(i+1),'"',elm].join("");
			if(!args.length)r="$match[i],(p=this.indexOf($match[i++],p+1)),this";
			else		r="$match[i],"+args.join(",")+",(p=this.indexOf($match[i++],p+1)),this";
			r=eval('['+$replace((elm+('"'+this[tmp](reg,'"'+elm+',func('+r+'),'+elm+'"')+'"')+elm).split(elm))[tmp](/\n/g,'\\n')[tmp](/\r/g,'\\r')+'].join("")');
		};
		delete String.prototype[tmp];
		return r;
(String.prototype.replace)};
	if((new Date().getYear()).toString().length===4){$has[$has.length]="getYear";Date.prototype.getYear=function(){
		return this.getFullYear()-1900;
};$JSL=new $JSL();
if(typeof(encodeURI)==="undefined"){function encodeURI(str){
	var elm=/([\x00-\x20]|[\x25|\x3C|\x3E|\x5B|\x5D|\x5E|\x60|\x7F]|[\x7B-\x7D]|[\x80-\uFFFF])/g;
	return $JSL.encodeURI(str.toString().replace(elm,$JSL.$encodeURIComponent));
if(typeof(encodeURIComponent)==="undefined"){function encodeURIComponent(str){
	var elm=/([\x23|\x24|\x26|\x2B|\x2C|\x2F|\x3A|\x3B|\x3D|\x3F|\x40])/g;
	return $JSL.encodeURI(encodeURI(str).replace(elm,function(a,b){return "%"+$JSL.charCodeAt(b)}));
if(typeof(decodeURIComponent)==="undefined"){function decodeURIComponent(str){
	var elm=/(%F[0-9A-F]%E[0-9A-F]%[A-B][0-9A-F]%[8-9A-B][0-9A-F])|(%E[0-9A-F]%[A-B][0-9A-F]%[8-9A-B][0-9A-F])|(%[C-D][0-9A-F]%[8-9A-B][0-9A-F])|(%[0-9A-F]{2})/g;
	return str.toString().replace(elm,$JSL.$decodeURIComponent);
if(typeof(decodeURI)==="undefined"){function decodeURI(str){
	return decodeURIComponent(str);
if(!document.getElementById){document.getElementById=function(elm){
	return $JSL.$getElementsByName($JSL.$getElementsByTagName(this)[elm]);
if(!document.getElementsByTagName){document.getElementsByTagName=function(elm){
	return $JSL.getElementsByTagName(this,0,elm.toUpperCase(),"tagName");
if(!document.getElementsByName){document.getElementsByName=function(elm){
	return $JSL.getElementsByTagName(this,0,elm,"name");
if(typeof(XMLHttpRequest)==="undefined"){XMLHttpRequest=function(){
	var tmp=null,elm=navigator.userAgent;
	if(elm.toUpperCase().indexOf("MSIE 4")<0&&window.ActiveXObject)
		tmp=elm.indexOf("MSIE 5")<0?new ActiveXObject("Msxml2.XMLHTTP"):new ActiveXObject("Microsoft.XMLHTTP");
	return tmp;
if(typeof(Error)==="undefined")Error=function(){};
Error = function(base){return function(message){
	var tmp=new base();
	tmp.message=message||"";
	if(!tmp.fileName)
		tmp.fileName=document.location.href;
	if(!tmp.lineNumber)
		tmp.lineNumber=0;
	if(!tmp.stack)
		tmp.stack="Error()@:0\n(\""+this.message+"\")@"+tmp.fileName+":"+this.lineNumber+"\n@"+tmp.fileName+":"+this.lineNumber;
	if(!tmp.name)
		tmp.name="Error";
	return tmp;
(Error);