/*																												*/
/**
	PLN Pelain Javascript Library
	v.9.87, 8:00 PM September 15, 2009

	Copyright (c) 2008-2009 Simon Francoeur
	Licensed under the MIT license.
	http://www.pelain.com/javascript/pln/

*/
/*																												*/
if(typeof pln=='undefined')var pln=new function(){
function isNull(o){return o==null;}
function isDefined(o){return typeof o!='undefined';}
function isset(){
	var a=arguments;
	for(var i=0;i<a.length;i++)if(!isDefined(a[i])||isNull(a[i]))return false;
	return true;
}
function isString(s){return isset(s)&&typeof s=='string';}
function isArray(a){return isset(a)&&a instanceof Array&&!a.propertyIsEnumerable('length');}
function isNumber(n){return isset(n)&&(typeof n=='number'||!isNaN(n));}
function isObject(o){return isset(o)&&typeof o=='object'&&!isArray(o);}
function isBoolean(b){return isset(b)&&typeof b=='boolean';}
function isFunction(f){return isset(f)&&typeof f=='function'&&f instanceof Function;}
function isHtmlElement(o){return isset(o)&&isset(o.nodeName);}
function isEmpty(o){
	if(isObject(o)){
		for(var i in o)if(o.hasOwnProperty(i))return false;
		return true;
	}
	return isString(o)?!isset(o.match(/\S+/)):isArray(o)?o.length==0:null;
}
function isHexadecimal(s){
	if(!isset(s)||s.length!=7||!isset(s.match(/#[a-z|\d]{6}/gi)))return false;
	return true;
}
function isRgb(s){return isString(s)&&isset(s.match(/rgb\(((\s)?(\d){1,3}(\s)?(,)?){3}\)/));}
function getUniqueId(){return Math.round(Math.random()*(new Date()-new Date(0,00,01,00,00,00)));}
function analyse(o,d){
	var s='',d=d||'\n';
	if(!isset(o))return null;
	if(isArray(o)){for( var i=0;i<o.length;i++ )s+=i+'='+o[i]+d;
	}else if(isObject(o)){
		for(var i in o)s+=i+'='+o[i]+d;
		if(isEmpty(s)){
			o=argsToArray(o);
			if(!isEmpty(o))s=analyse(o);
		}
	}else{s=String(o);}
	if(s.substr(s.length-1,1)==d)s=s.substr(0,s.length-1);
	return s;
}
function argsToArray(a,n){return Array.prototype.slice.call(a,isNumber(n)?n:0);}
function dispatch(o,f){if(isFunction(f))f.apply(isObject(o)?o:null,argsToArray(arguments,2));}
function delegate(o,f){
	var o=isObject(o)?o:null,a=argsToArray(arguments,2),f=f||null;
	return !isFunction(f)?null:function(e){
		var c=null,n=0;
		if(isset(e)&&isFunction(e.stopPropagation)){
			c=e;
			n=1;
		}else{
			if(isObject(window.event)&&getBrowserInfo().name=='msie')c=window.event;
		}
		var b=argsToArray(arguments,n),p=[];
		if(isObject(c)){
			try{c.cancelBubble=true;}catch(r){}
			try{c.stopPropagation();}catch(r){}
			if(isObject(b[0])&&(isBoolean(b[0].cancelBubble)||isFunction(b[0].stopPropagation))){}else{p.push(c);}
		}
		return f.apply(o,p.concat(b).concat(a));
	}
}
function encode(o,j,e,d){
	if(!isset(o))return null;
	var j=isBoolean(j)?j:true,e=isBoolean(e)?e:true,d=d||'&',s=j?json.stringify(o):analyse(o,d);
	return e?(encodeURIComponent||escape)(s):s;
}
function decode(o,j,e,d){
	if(!isset(o))return null;
	var j=isBoolean(j)?j:true,e=isBoolean(e)?e:true,d=d||'&',v;
	if(e)o=(decodeURIComponent||unescape)(o);
	if(j)v=json.parse(o);
	if(!j){
		v={};
		var a=o.split(d);
		for(var i=0;i<a.length;i++){var p=a[i].split('=');v[p[0]]=p[1];}					
	}
	return v;
}
function getBrowserInfo(){
	if(isset(getBrowserInfo.q))return getBrowserInfo.q;
	var n=navigator;c=n.userAgent.toLowerCase().match(/(\w+\/|\w{3,}\s?)(\d|\.)+/gi),a=[];
	var r=new RegExp('('+n.appCodeName.toLowerCase()+'|applewebkit|\\/\\d{3,}|_)','gi');
	for(var i=0;i<c.length;i++){
		var o=c[i];
		if(isNull(o.match(r))){
			try{o=o.replace('version','safari');}catch(e){}
			a.push(o);if(o.indexOf('firefox')==-1||i==c.length-1)break;
		}
	}
	var l=a.length,a=a[l>1?l-1:0];
	return getBrowserInfo.q={name:a.match(/[a-z]+/gi)[0],version:a.match(/(\d|\.)+/gi)[0],platform:n.platform.toLowerCase()};
}
function ucFirst(s){return s.charAt(0).toUpperCase()+s.substr(1);}
function convertHexadecimalToRgb(s){
	if(!isHexadecimal(s))return null;
	var a=[],s=s.substring(1,7);
	for(var i=0;i<3;i++)a.push(parseInt(s.substring(i*2,i*2+2),16));
	return a;
}
function convertRgbToHexadecimal(r,g,b){
	function e(n){
		if(isNull(n))return "00";
		n=parseInt(n);
		if(n==0||isNaN(n))return "00";
		n=Math.max(0,n);n=Math.min(n,255);n=Math.round(n);var s='0123456789ABCDEF';
		return s.charAt((n-n%16)/16)+s.charAt(n%16);
	}
	return '#'+e(r)+e(g)+e(b);
}
function addJs(s,b){return addFile(s,true,isBoolean(b)?b:true);}
function addCss(s,b,m){return addFile(s,false,isBoolean(b)?b:true,m||'all');}
function addFile(s,b,e,m){
	var x=node.create(b?'script':e?'link':'style');
	x.type='text/'+(b?'javascript':'css');
	if(b){e?x.src=s:x.text=s;x.charset='utf-8';}
	else{
		x.media=m;
		if(!e){if(x.styleSheet){x.styleSheet.cssText=s;}else{node.add(document.createTextNode(s),x);}}else{x.rel='stylesheet';x.href=s;}
	}
	return node.add(x,node.getByName('head')[0]);
}
function extractScriptFromSource(s,r){
	var r=isBoolean(r)?r:true,a=['<script(.*?)>','(<\\/script>)','((.|\\s)*?)'],b=[],c=s.match(new RegExp(a[0]+a[2]+a[1],'gi'));
	if(isset(c)){
		for(var i=0;i<c.length;i++){
			b.push(c[i].replace(new RegExp(a[0]),'').replace(new RegExp(a[1]),''));
			if(r)s=s.replace(c[i],'');
		}
	}
	return {source:s,scripts:b};
}
function evalScriptCollection(a){
	var a=isArray(a)?a:[];
	for(var i=0;i<a.length;i++){if(!isEmpty(a[i]))eval(a[i]);}
}
function getFunctionName(f){
	var c=isFunction(f)?f:isObject(f)?f.constructor:null;
	if(isFunction(c)){
		String(c).match(/function\s*([\w\$]*)\s*\(/);
		return RegExp.$1;
	}
	return null;
}
/*																												*/
/**
 @name pln.compiler
*/
var compiler=new function(){
	function BCC(c,a){
		if(!isArray(a))a=[c];
		if(isFunction(c.extend)){a.push(c.extend);BCC(c.extend,a);}
		return a;		
	}
	function GP(a){
		var r=[];
		for(var i=0;i<a.length;i++){
			r[i]=[];
			var c=String(a[i]).match(/this\.(\$*|_*)?[a-z]+\w+(\s*)?=/gi);
			for(var j=0;j<c.length;j++)r[i].push(c[j].replace('this.','').replace(/(\s*)?=/gi,''));
		}
		return r;
	}
	function VOM(a){
		var r=[],v={};
		for(var i=0;i<a.length;i++){
			r[i]={};
			for(var j=0;j<a[i].length;j++){
				var s=a[i][j];
				isset(v['$_'+s])?r[i][s]=s+'__super_'+i:v['$_'+s]=true;
			}
		}
		return r;
	}
	function PF(c,n){eval(c);return eval(n);}
	function CS(a){
		var o=a[0],c=o;
		for(var i=1;i<a.length;i++)c=c.__super=a[i];
		return o;
	}
	function renameMethod(a,l){
		var r=[],c=[];
		for(var i=0;i<a.length;i++){
			var s=String(a[i]),b=l[i],o={},n=getFunctionName(a[i]),w='pln__'+n;
			s=s.replace(new RegExp("^(\\s*)?function\\s+"+n+"\\s*\\((\\w|,|\\s*)+\\)\\s*\\{","gi"),function($match){return $match.replace(n,w);});
			for(var j in b){
				s=s.replace(new RegExp('this\\.'+j+'(\\s*)?=','gi'),'this.'+b[j]+'=');
				o[j=='toString'?'____toString':j]='pln.delegate( this,this.'+b[j]+')';// It is ok to delegate if this is a function, but if this was a variable?
			}
			c.push(o);
			r[i]={s:s,n:w};
		}
		for(var i=0;i<a.length;i++){
			var o=r[i] ;
			var t=CS(c.slice(i+1));
			t=isset(t)?'\nvar __super='+json.stringify(t).replace(/____toString/gi,'toString').replace(/"/gi,'')+";":'';
			o.s=o.s.replace(/^(\s*)?function\s+\$*_*\w+\s*\((\w|,|\s*)+\)\s*\{/i,function($match){return $match+'\n// >> This was compiled using the PLN Class Compiler;\n';});
			o.s=o.s.replace(/(\s*)?}(\s*)$/i,function($match){return t+$match;});
			r[i]=PF(o.s,o.n);
		}		
		return r;
	}
	this.createClass=function(c){
		if(!isFunction(c))return null;
		var a=BCC(c);a=renameMethod(a,VOM(GP(a))).reverse();
		var q=function(){
			var r='__c_'+getUniqueId() ;
			for(var i=0;i<a.length;i++){
				// May add class validation ??? (is there a constructor, already a __super, that is reserved to this compiler...)
				this[r]=a[i];
				this[r]();
				delete this[r];
			}
		}
		var p=new q();
		p.__constructor.apply(p,argsToArray(arguments,1));
		return p;
	}
}
/*																												*/
/**
 @name pln.cookie
*/
var cookie=new function(){
	this.set=function(n,o,c,p,g){
		if(!isset(n))return null;
		var t=new Date(),o=o||{},c=c||1,p=p||'/',g=isset(g)?';domain='+g:'';
		t.setTime(t.getTime()+(c*24*60*60*1000));
		document.cookie=n.toLowerCase()+'='+encode(o)+';expires='+t.toGMTString()+';path='+p+g;
	}
	this.get=function(n){
		if(!isString(n)) return null;
		var n=n.toLowerCase(),a=document.cookie.split(';');
		for(var i=0;i<a.length;i++) if(a[i].indexOf(n+'=')!=-1)return decode(a[i].replace(n+'=',''));
		return null;
	}
	this.remove=function(n){this.set(n,{},-1);};
}
/*																												*/
/**
 @name pln.server
*/
var server=new function(){
	this.connection=function(u,m){
		var u=isString(u)?u:null,m=isString(m)?m.toUpperCase():'POST',h=this,r,p,y=20000,q='ajx_connection_id',w=getUniqueId(),t=false,v='ajaxData';
		if(!isset(u))return ext(false,null,'Gateway url is undefined!');
		u+=(u.indexOf('?')!=-1?'&':'?')+q+'='+w;
		function clr(){clearTimeout(p);}
		function abrt(){try{r.abort();}catch(e){}delete r;t=true;}
		function exe(d){
			var d=d||encode({}),d=isString(d)?d:encode(d);
			t=false;
			try{r=new XMLHttpRequest();}catch(e){try{r=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{r=new ActiveXObject('Microsoft.XMLHTTP');}catch(e){}}}
			if(!isset(r))return ext(false,null,'Browser does not support HttpRequest!');
			p=setTimeout(function(){
				clr();
				if(r.readyState!=4||r.status!=200){abrt();dispatch(h,h.onLoad,false,null,'Connection timed out!');}
			},y);
			r.onreadystatechange=function(){
				if(r.readyState==4){
					if(r.status==200){
						clr();
						var b=isset(String(r.getResponseHeader('Content-Type')).match(/\/xml/gi))?false:true,c;
						if(b)c=r.responseText;
						if(!b){
							if(isset(r.responseXML.xml)){
								c=r.responseXML.xml;
								try{var x=new ActiveXObject('Microsoft.XMLDOM');x.async='false';x.loadXML(c);c=x.documentElement;}catch(e){}
							}else{try{c=r.responseXML.documentElement;}catch(e){try{c=r.responseXML.firstChild;}catch(e){}}}
						}
						return ext(true,c,null);
					}else{
						var k='';try{k+=r.status;}catch(e){}try{k+=' | '+r.statusText;}catch(e){}
						return ext(false,null,k);
					}
				}
			}
			try{r.open(m,u,true);}catch(e){return ext(false,null,'Unable to initialize the connection with the server!');}
			try{r.setRequestHeader('Content-Type',m=='POST'?'application/x-www-form-urlencoded':'text/xml');}catch(e){}
			try{r.send(m=='POST'?v+'='+d:null);}catch(e){return ext(false,null,'Cannot send data to the server!');}
		}
		function ext(b,d,s,f){
			if(!t)dispatch(h,h.onLoad,b,d,s);
			clr();
			return null; 
		}
		this.changeVariableNameTo=function(s){if(isString(s))v=s;}
		this.onLoad=null;
		this.sendAndLoad=exe;
		this.getConnectionId=function(){return q+'_'+w;}
		this.abort=function(){abrt();clr();dispatch(h,h.onLoad,false,null,'connection aborted...');}
	}
}
/*																												*/
/**
 @name pln.node
*/
var node=new function(){
	var h=this;
	function exe(x,f,m,r,w){
		var x=x||document.documentElement,f=f||function(){},m=m||false,r=r||false,w=!isset(w)?true:w,c=0,q;
		if(!isset(x.childNodes))return null;
		for(var i=0;i<x.childNodes.length;i++){
			if(q&&r) return null;
			var e=x.childNodes[i],t=e.nodeType==3;
			if(!w||(w&&(!t||(t&&/\w/.test(e.nodeValue)===true)))){
				if(f(e,c)&&!r) return q=e;
				if(e.childNodes.length>0&&m)exe(e,f,m,r,i);
				c++ ;						
			}
		}					
	}
	this.getById=function(s){return !isset(s)?null:isObject(s)?s:isString(s)?document.getElementById(s):null;}
	this.getByName=function(s,d,b){
		var r=null,b=!isset(b)?true:b;
		exe(d,function(x){
			if(x.nodeName.toLowerCase()==s){
				if(isNull(r))r=[];
				r.push(x);
				return true;
			}
			return false;
		},b,b);
		return r;
	}
	this.getPosition=function(x){
		var n=null;
		exe(x.parentNode,function(e,i){
			if(e==x){
				n=i;
				return true;
			}
			return false;
		});
		return n;
	}
	this.getByPosition=function(n,d){
		var x=null;
		exe(d,function(e,i){
			if(n==i){
				x=e;
				return true;
			}
			return false;
		});
		return x;
	}
	this.getByProximity=function(n,d){return this.getByPosition(this.getPosition(d)+n,d.parentNode);}
	this.getByPath=function(s,d){
		var x=null,a=s.split('.');
		for(var i=0;i<a.length;i++){
			x=isNaN(a[i])?h.getByName(a[i],d,false):h.getByPosition(Number(a[i]),d);
			if(isArray(x))x=x[0];
			if(isset(x)){d=x;}else{return null;}
		}
		return x;
	}
	this.getAttribute=function(s,d){
		if(d.nodeType==1){
			for(var i=0;i<d.attributes.length;i++){
				var x=d.attributes.item(i);
				if(isset(x.specified)&&x.nodeName.toLowerCase()==s){
					var v=!isNull(x.nodeValue)?x.nodeValue:s=='style'?d[s].cssText:null;
					if(s=='style'&&isEmpty(v))v=null;
					return {attribute:x,value:v};
				}
			}
		}
		return null;
	};
	this.getByAttribute=function(s,d){
		var r=null;
		exe(d,function(e,i){
			var o=h.getAttribute(s,e);
			if(!isNull(o)){
				if(isNull(r))r=[];
				r.push(e);
				return true;
			}
			return false;
		},true,true);
		return r;
	}	
	this.getByAttributeValue=function(s,v,d,b){
		var b=b||false,r=null,a=this.getByAttribute(s,d);
		if(!isset(a))return r;
		for(var i=0;i<a.length;i++){
			var o=this.getAttribute(s,a[i]);
			if(isset(o,o.value)){
				if((!b&&o.value==v)||(b&&isset(o.value.match(v)))){
					if(isNull(r))r=[];
					r.push(a[i]);
				}
			}
		}
		return r;
	}
	this.getAttributeValue=function(x,n){
		var o=this.getAttribute(n,x);
		if(isset(o)&&isset(o.value))return o.value;
		return null;
	}
	this.addAttribute=function(o,n,v){try{return o.setAttribute(n,v);}catch(e){return false;}}
	this.removeAttribute=function(o,s){try{return o.removeAttribute(s);}catch(e){return false;}}	
	this.create=function(t){return document.createElement(t);}
	this.add=function(e,d,s,b){
		var d=d||document.body,b=b||false;
		if(!isset(d))return null;
		if(e){
			if(s){
				if(b){d.insertBefore(e,s);}
				else{
					s=this.getByProximity( 1 , s );
					isNull(s)?d.appendChild(e):d.insertBefore(e,s);
				}
			}
			else{d.appendChild(e);}
		}
		return e;
	}
	this.clone=function(o,b){try{return o.cloneNode(isset(b)?b:true);}catch(e){return null;}}
	this.duplicate=function(o){try{return h.add(h.clone(o),h.getParent(1,o));}catch(e){return null;}}
	this.getParent=function(n,o){
		var c=0,n=n<=0?1:n||1;
		while(isset(o)&&c<n){
			o=o.parentNode;
			c++;
		}
		return isset(o)?o:null;
	}
	this.getValue=function(o,b){
		var b=b||false;
		try{ 
			var r=o.nodeType==3?o.nodeValue:h.getByPosition(0,o).nodeValue;
			if(isNull(r))throw('value is null');
			return r ;
		}catch(e){try{return b?o.innerHTML:null;}catch(e){return null;}}
	}
	this.getLength=function(o){
		var r=0;
		if(!isset(o)) return null;
		exe(o,function(){r++;},false,true);
		return r;
	}
	this.getBounds=function(o){
		return {
			x:this.getProperty(o,'*offsetLeft'),
			y:this.getProperty(o,'*offsetTop'),
			width:this.getProperty(o,'offsetWidth'),
			height:this.getProperty(o,'offsetHeight')
		}
	}				
	this.replaceBy=function(x,o){
		try{
			h.add(o,x.parentNode,x,true);
			h.remove(x);
			return o;
		}catch(e){return null;}
	}
	this.remove=function(o){try{o.removeNode(true);}catch(e){try{o.parentNode.removeChild(o);}catch(e){}}}
	this.clear=function(o){try{if(o.hasChildNodes())while(o.childNodes.length>0)h.remove(o.firstChild);}catch(e){}}
	this.isChildOf=function(o,x){
		while(isset(o)){o=this.getParent(0,o);if(o==x)return true;}
		return false;
	}
	this.setProperty=function(t,p,v){
		var t=h.getById(t),s,r=null,a=['top','right','bottom','left'];
		try{s=t.style}catch(e){}
		if(!isset(t,p,v,s)) return null;
		if(isset(p.match(new RegExp('border-('+a.join('|')+')-width','gi'))))p='border'+ucFirst(RegExp.$1)+'Width';
		if(p=='alpha'){
			try{s['opacity']=(v/100);}catch(e){}
			try{s['filter']='alpha(opacity='+v+')';}catch(e){}
		}
		if(p=='float'){
			try{s.styleFloat=v;}catch(e){}
			try{s.cssFloat=v;}catch(e){}
		}		
		return isset(t[p])?t[p]=v:isset(s[p])?s[p]=v:null;
	}
	this.getProperty=function(t,p){
		var t=h.getById(t),_t=t,v,r=null,a=['top','right','bottom','left'];
		function w(v){return !isset(v)||isEmpty(v)?null:v;}
		if(!isset(t)||!isset(p)) return null;
		if(p=='*offsetLeft'||p=='*offsetTop'){
			p=p.replace('*','');
			while(isset(t)){
				var n=this.getProperty(t,p);
				r+=isset(n)?n:1;
				t=t.offsetParent;
			}
			t=_t;
		}else if(p=='alpha'){
			r=this.getProperty(t,'opacity');
			r=isset(r)?r*100:100;
		}else if(p=='float'){
			try{r=this.getProperty(t,'styleFloat');}catch(e){try{r=this.getProperty(t,'cssFloat');}catch(e){}}
		}else if(isset(p.match(new RegExp('border-('+a.join('|')+')-width','gi')),t.currentStyle)){
			try{
				var q=p,r=t.currentStyle['borderWidth'].split(" ");
				if(r.length==1){r=r[0];}
				else{
					for(var i=0;i<a.length;i++){
						if(isset(q.match(a[i]))){
							r[i]=String(r[i]).match(/-?\d+/);
							r=isNaN(r[i])?0:r[i];
						}
					}
				}
			}catch(e){r=0;}
		}else{}
		if(!isset(r)){
			var r1=w(t.style[p]),r2=w(t[p]);
			var r3=w(isset(t.currentStyle)?t.currentStyle[p]:isset(window.getComputedStyle)?document.defaultView.getComputedStyle(t,null).getPropertyValue(p):null);
			r=isset(r1)?r1:isset(r2)?r2:isset(r3)?r3:null;
		}
		if(isHexadecimal(r)||isRgb(r)){
			if(isRgb(r)){
				r=r.match(/[\d]+/g);
				for(var i=0;i<r.length;i++)r[i]=Number(r[i]);
			}
			if(isHexadecimal(r))r=convertHexadecimalToRgb(r);
		}else if(p.toLowerCase()!='innerhtml'){
			if(!isNull(String(k=r).match(/-?\d+(em|px|pc|pt|%)/gi))){if(isString(RegExp.$1))r=String(r).replace(RegExp.$1,'');}
		}
		return !isset(r)?null:!isNaN(r)?Number(r):r;
	}
	this.addClassName=function(o,c){manageClassName(this,o,c,true);}
	this.removeClassName=function(o,c){manageClassName(this,o,c,false);}
	function manageClassName(h,o,c,b){
		var v="className",s=h.getProperty(o,v),s=isString(s)?s:'',a=s.indexOf(c);
		if(a==-1&&b)h.setProperty(o,v,s+" "+c);
		if(a!=-1&&!b)h.setProperty(o,v,s.replace(new RegExp("(\\b"+c+"\\b)+","gi"),"").replace(/\s{2}/,' '));
	}
}
/*																												*/
/**
 @name pln.events
*/
var events=new function(){
	var mbr={},cec={},h=this;
	function captureSelection(e){
		try{
			var o=h.getElement(e),s;
			if(window.getSelection){s=window.getSelection();}
			else if(document.getSelection){s=document.getSelection();}
			else if(document.selection){s=document.selection.createRange().text;}
			if(isset(o.selectionStart,o.value))s=o.value.substring(o.selectionStart,o.selectionEnd);
			if(isset(s))h.selection=s;
		}catch(e){}
	}	
	this.addListener=function(t,n,s,c){
		if(!isset(t,n,c)) return;
		if(!isset(mbr[n]))mbr[n]=[];
		var s=s||null,f=delegate.apply(null,[s,c].concat(argsToArray(arguments,4)));
		mbr[n].push({t:t,n:n,c:c,f:f,s:s});
		try{isset(cec[n])?cec[n].activate():t.attachEvent?t.attachEvent('on'+n,f):t.addEventListener(n,f,false);}catch(e){}
	}
	this.removeListener=function(t,n,s,c){
		if(!isset(t,n,c,mbr[n]))return;
		var a=mbr[n],f,j;
		for(var i=0;i<a.length;i++){
			var o=a[i];
			if(o.t==t&&o.n==n&&o.c==c){f=o.f;j=i;break;}
		}
		if(!isset(f,j))return;
		mbr[n].splice(j,1);
		isEmpty(cec[n])?cec[n].deactivate():t.detachEvent?t.detachEvent('on'+n,f):t.removeEventListener(n,f,false);
	}
	this.dispatchEvent=function(t,n){
		var a=isArray(mbr[n])?mbr[n]:[],e={customEventObject:true,cancelBubble:true,stopPropagation:function(){}};
		for(var i=0;i<a.length;i++){if(a[i].t==t){try{t['on'+n](e);}catch(r){}dispatch(a[i].s,a[i].f,e);}}
	}
	this.getEventObject=function(e){
		return isset(e)&&isFunction(e.stopPropagation)?e:isObject(window.event)&&getBrowserInfo().name=='msie'?window.event:null;
	}
	this.getElement=function(e){
		try{
			r=e.target||e.srcElement;
			if(r.nodeType==3)r=r.parentNode;
			return r;
		}catch(e){return null;}
	}
	this.getMousePosition=function(e){
		var o=this.getScrollOffset();
		return {x:e.pageX||(e.clientX+o.x),y:e.pageY||(e.clientY+o.y)};
	}
	this.getScrollOffset=function(){
		var b=document.all||false,d=!b?window:document.compatMode!='BackCompat'?document.documentElement:document.body;
		return {x:d[b?'scrollLeft':'pageXOffset'],y:d[b?'scrollTop':'pageYOffset']};
	}
	this.getBodySize=function(){
		var d=document.all&&document.compatMode=='BackCompat'?document.body:document.documentElement;
		return {width:d.scrollWidth,height:d.scrollHeight};
	}
	this.getWindowSize=function(){
		var o=null;
		if(isset(window.innerWidth)){o={width:window.innerWidth,height:window.innerHeight};}
		else{
			var d=document.all&&document.compatMode=='BackCompat'?document.body:document.documentElement;
			o={width:d.clientWidth,height:d.clientHeight};
		}
		return o;
	}
	this.hitTest=function(e,a,b){
		var m=this.getMousePosition(e),b=b||false;
		for(var i=0;i<a.length;i++){
			var p=node.getBounds(a[i]);
			if(b&&(m.x<p.x||m.y<p.y||m.x>p.x+p.width||m.y>p.y+p.height)) return false;
			if(!b&&(m.x>=p.x&&m.y>=p.y&&m.x<=p.x+p.width&&m.y<=p.y+p.height)) return true;
		}
		return b;
	}
	this.selection=null;
	this.enableSelection=function(o,b){
		var b=b||false,r=null;
		if(!b)try{o.style.cursor='default';}catch(e){}
		try{r=o.onselectstart=function(){return b;}}catch(e){}
		try{r=o.style.MozUserSelect=b?'':'none';}catch(e){}
		try{r=o.style.KhtmlUserSelect=b?'':'none';}catch(e){}
		if(!isset(r))try{o.onmousedown=function(){return b;};}catch(e){}
		try{document.selection.empty();}catch(e){try{window.getSelection().removeAllRanges();}catch( e ){}}
	} ;					
	this.getKeyCode=function(e){return isset(e.keyCode)?e.keyCode:null;}
	this.key={ENTER:13,CTRL:17,SHIFT:16,ALT:18,INSERT:45,DELETE:46,BACKSPACE:8,SPACE:32,ESC:27};
	this.isKeyDown=function(){
		for(var i=1;i<arguments.length;i++)if(!isset(this.keyDown['__'+arguments[i]])) return false;
		return true;
	}
	this.keyDown={};
	this.addListener(document,'keydown',null,function(e){
		var n=h.getKeyCode(e);
		if(!isset(h.keyDown['__'+n]))h.keyDown['__'+n]=n;
	});
	this.addListener(document,'keyup',null,function(e){
		var n=h.getKeyCode(e);
		if(isset(h.keyDown['__'+n]))delete h.keyDown['__'+n];
	});
	this.addListener(document,'mouseup',null,captureSelection);
	this.addListener(document,'keyup',null,captureSelection);
			
	this.registerCustomEventClass=function(n,f){if(!isset(cec[n]))cec[n]=new f();}
	this.getEventMember=function(s){return isArray(mbr[s])?mbr[s].slice(0):null;}
	
	// Custom Event: __textResize
	this.registerCustomEventClass('__textResize',function(){
		var l,b=false;
		function clr(){clearInterval(l);}
		function validate(){
			var a=mbr['__textResize'];
			if(!isset(a))clr();
			for(var i=0;i<a.length;i++){
				var o=a[i],n=node.getProperty(o.t,'fontSize');
				if(!isset(n))n=node.getProperty(o.t,'font-size');
				if(isset(n)){
					if(!isset(o.textResizeValue))o.textResizeValue=n;
					if(o.textResizeValue!=n){
						o.textResizeValue=n;
						o.f({});
					}
				}
			}
		}
		this.activate=function(){
			if(b) return;
			b=true;
			clr();
			l=setInterval(validate,80);
		}
		this.deactivate=function(){
			b=false;
			clr();
		}
	});
	
	// Custom Event: __documentReady 
	this.registerCustomEventClass('__documentReady',function(){
		var l,b=false; 
		function clr(){clearInterval(l);}
		function q(){var a=mbr['__documentReady'];for(var i=0;i<a.length;i++)a[i].f();}
		function validate(){
			try{
				var d=node.add(node.create('div'),document.body);
				if(!isset(d))throw('error');
				pln.node.remove(d);clr();q();
			}catch(e){}
		}
		this.activate = function(){
			if(b)return;
			b=true;
			var i=getBrowserInfo();
			if(i.name!='msie'){events.addListener(document,'DOMContentLoaded',null,q);}
			else{clr();l=setInterval(validate,80);}
		}
		this.deactivate = function(){ 
			b=false;
			clr();
		}
	} );
	
	// Custom Event: __urlChange // Not working properly yet...
	this.registerCustomEventClass('__urlChange',function(){
		var l,b=false,u=gcu();
		function gcu(){return unescape(window.location.href);}
		function clr(){clearInterval(l);}
		function validate(){
			if(u!=gcu()){
				u=gcu();
				var a=mbr['__urlChange'];
				if(!isset(a))clr();				
				for(var i=0;i<a.length;i++)a[i].f({});
			}
		}
		this.activate=function(){
			if(b) return;
			b=true;
			clr();
			l=setInterval(validate,80);
		}
		this.deactivate=function(){
			b=false;
			clr();
		}
	});
}
/*																												*/
/**
 @name pln.json
 Modified version of JSON[2009-09-29]
 Copyright (c) 2002 JSON.org
 License: http://www.json.org/license.html
*/
var json=new function(){
	function f(n){return n<10?'0'+n:n;}
	if(!isFunction(Date.prototype.toJSON)){
        Date.prototype.toJSON=function(key){
            return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null;
        };
        String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};
    }
    var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
        gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"' :'\\"','\\':'\\\\'},rep;
	function quote(string){
        escapable.lastIndex=0;
        return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return isString(c)?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';
	}
	function str(q,z){
		var i,k,v,l,mind=gap,p,w=z[q];
		if(w&&(isObject(w)||isArray(w))&&isFunction(w.toJSON))w=w.toJSON(q);
		if(isFunction(rep))w=rep.call(z,q,w);
		switch(typeof w){
		case 'string':return quote(w);
		case 'number':return isFinite(w)?String(w):'null';
		case 'boolean':
		case 'null':return String(w);
		case 'object':
			if(!w)return 'null';
			gap+=indent;
			p=[];
			if(Object.prototype.toString.apply(w)==='[object Array]'){
				l=w.length;
				for(i=0;i<l;i+=1)p[i]=str(i,w)||'null';
				v=p.length===0?'[]':gap?'[\n'+gap+p.join(',\n'+gap)+'\n'+mind+']':'['+p.join(',')+']';
				gap=mind;
				return v;
			}
			if(rep&&(isObject(rep)||isArray(rep))) {
				l=rep.length;
				for(i=0;i<l;i+=1){
					k=rep[i];
					if(isString(k)){
						v=str(k,w);
						if(v)p.push(quote(k)+(gap?':':':')+v);
					}
				}
			}else{
				for(k in w){
					if(Object.hasOwnProperty.call(w,k)){
						v=str(k,w);
						if(v)p.push(quote(k)+(gap?': ':':')+v);
					}
				}
			}
			v=p.length===0?'{}':gap?'{\n'+gap+p.join(',\n'+gap)+'\n'+mind+'}':'{'+p.join(',')+'}';
			gap=mind;
			return v;
		}
	}
	this.stringify=function(v,r,s){
		var i;
		gap='';
		indent='';
		if(isNumber(s)){
			for(i=0;i<s;i+=1)indent+=' ';
		}else if(isString(s)){indent=s;}
		rep=r;
		if(r&&!isFunction(r)&&(!isObject(r)||!isArray(r)||!isNumber(r.length)))throw new Error('JSON.stringify');
		return str('',{'': v});
	};
	this.parse=function(t,r){
		var j;
		function walk(o,s) {
			var k,v,value=o[s];
			if (value&&(isObject(value)||isArray(value))){
				for(k in value){
					if(Object.hasOwnProperty.call(value,k)){
						v=walk(value,k);
						isset(v)?value[k]=v:delete value[k];
					}
				}
			}
			return r.call(o,s,value);
		}
		cx.lastIndex = 0;
		if(cx.test(t))t=t.replace(cx,function(a){return '\\u'+('0000' + a.charCodeAt(0).toString(16)).slice(-4);});
		if(/^[\],:{}\s]*$/.test(t.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){
			j=eval('('+t+')');
			return isFunction(r)?walk({'':j},''):j;
		}
		throw new SyntaxError('JSON.parse');
	};
}
/*																												*/
/**
 @name pln.flash
*/
var flash=new function(){
	var h=this;
	this.pageId=getUniqueId();
	this.getVersion=function(){
		var r=null,v=null,s='ShockwaveFlash.ShockwaveFlash';
		try{r=new ActiveXObject(s+'.7');}
		catch(e){
			try{
				r=new ActiveXObject(s+'.6');
				v=6;
			}catch(e){try{r=new ActiveXObject(s+'.3');}catch(e){}}
		}
		v=!isset(v)&&isset(r)?r.GetVariable('$version').match(/\d+/):v;
		if(!isset(v)){
			var a=navigator.plugins,s='Shockwave Flash';
			try{r=a[s];}
			catch(e){try{r=a[s+' 2.0'];}catch(e){}}
			v=isset(r)?r.description.match(/\d+/):null;
		}
		return !isNaN(v)?Number(v):v;
	}
	this.create=function(p,d,b){
		var p=p||null,d=d||{},b=b||false,ie=getBrowserInfo().name.match(/msie/gi)!=null,c='';
		if(!isset(p)) return null;
		if(!isset(d.flashVars))d.flashVars={};
		if(!isset(p.noCache))p.noCache=true;
		if(isset(p.noCache)){
			p.noCacheId=getUniqueId();
			p.src+='?noCacheId='+p.noCacheId;
		}
		if(!isset(p.flashObjectId)&&isset(p.id))p.flashObjectId=p.id;
		if(!isset(p.allowScriptAccess))p.allowScriptAccess='always';
		if(!isset(p.swLiveConnect))p.swLiveConnect='true';
		if(!isset(p.quality))p.quality='high';
		if(!isset(p.bgColor))p.bgColor='#ffffff';
		if(!isset(p.allowFullScreen))p.allowFullScreen=false;
		if(!isset(p.wMode))p.wMode=p.allowFullScreen?'opaque':'transparent';
		if(!isset(d.JsonEconded))d.JsonEconded=true;
		if(!isset(d.uriEconded))d.uriEconded=true;
		d.flashVars.pageId=h.pageId;
		d.flashVars.flashObjectId=p.id;
		var f=((d.JsonEconded||d.uriEconded)?'initialData=':'')+encode(d.flashVars,d.JsonEconded,d.uriEconded);
		if(ie){
			c+='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+p.version+'" ';
			c+='width="'+p.width+'" height="'+p.height+'" id="'+p.id+'" align="middle" >';
			c+='<param name="allowScriptAccess" value="'+p.allowScriptAccess+'" />';
			c+='<param name="swLiveConnect" value="'+p.swLiveConnect+'" />';
			c+='<param name="movie" value="'+p.src+'" />';
			c+='<param name="quality" value="'+p.quality+'" />';
			c+='<param name="menu" value="false" />';
			c+='<param name="bgcolor" value="'+p.bgColor+'" />';
			c+='<param name="allowFullScreen" value="'+p.allowFullScreen+'" />';
			c+='<param name="wmode" value="'+p.wMode+'" />';
			c+='<param name="FlashVars" value="'+f+'" />';
			c+='</object>';
		}else{
			c+='<embed src="'+p.src+'" quality="'+p.quality+'" FlashVars="'+f+'" bgcolor="'+p.bgColor+'" ';
			c+='width="'+p.width+'" height="'+p.height+'" id="'+p.id+'" align="middle" allowScriptAccess="'+p.allowScriptAccess+'" ';
			c+='swLiveConnect="'+p.swLiveConnect+'" menu="false" type="application/x-shockwave-flash" allowFullScreen="'+p.allowFullScreen+'" ';
			c+='wmode="'+p.wMode+'" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
		}
		if(isset(p.container)){
			var i=node.getProperty(p.container,'innerHTML');
			node.setProperty(p.container,'innerHTML',c);
			var o=node.getById(p.id);
			if(!b&&ie&&isset(o,o.readyState)&&o.readyState==0)node.setProperty(p.container,'innerHTML',i);
			return o;
		}else{return c;}
	}				
}
/*																												*/
/**
 @name pln.motion
*/
var motion=new function(){
	this.composition=function(){
		var mbr=[],l,h=this,d=1,q=true,w=0,m=0,k;
		function initialize(a){
			for(var i=0;i<a.length;i++){
				var o=a[i];
				if(isString(o.element))o.element=node.getById(o.element);
				if(isset(o.duration,o.equation,o.element,o.property,o.end)){
					if(!isset(o.start))o.start=node.getProperty(o.element,o.property);
					if(!isset(o.v))o.v=o.start;
					if(!isset(o.unit))o.unit='';
					if(!isset(o.c))o.c=0;
					if(!isset(o.f))o.f=false;
					if(!isset(o.a))o.a=[];
					if(!isset(o.b))o.b=false;
					if(isHexadecimal(o.start))o.start=convertHexadecimalToRgb(o.start);
					if(isHexadecimal(o.end))o.end=convertHexadecimalToRgb(o.end);
					if(!isset(o.i))o.i=function(n){
						with(this){
							b=false;c=isset(n)?n:c;
							if(f&&isset(a[c])){v=a[c];}
							else{
								if(isArray(start)&&isArray(end)&&start.length==end.length){
									var g=[];
									if(c<=0){g=start;}
									else if(c>=duration){g=end;}
									else{for(var j=0;j<end.length;j++)g[j]=Math.ceil(equation(c,start[j],end[j]-start[j],duration));}
									v=convertRgbToHexadecimal(g[0],g[1],g[2]);
								}else{v=c<=0?start:c>=duration?end:Math.ceil(equation(c,start,end-start,duration));	}
							}
							if(!f)a[c]=v;
							if(!isset(v)||(isNaN(v)&&!isHexadecimal(v))){updateStatus('error',element,property,v,c)}
							else{
								updateStatus('iteration',element,property,v,c);
								node.setProperty(element,property,v+unit);
							}
							if((d==1&c>=duration)||(d==-1&&c<=0))b=true;
							c+=d;
							if(!f&&b)f=true;
							return b;
						}
					} ;
					mbr.push(o);
				}
			}
		}
		function iterate(n){
			var b=true;
			for(var i=0;i<mbr.length;i++)if(mbr[i].i(n)==false)b=false;
			if(!isset(n))return b;
		}
		function updateStatus(s,t,p,v,c){
			if(s=='completed'){
				clr();
				k=setTimeout(function(){
					if(q)return;
					if(m==2){d=d==1?-1:1;run();}
					if(m==1)h.start();
				},w);
			}
			dispatch(h,h.onStatus,s,t,p,v,c);
		}
		function execute(){
			var b=iterate();
			if(b){clr();updateStatus('completed');}
		}
		function clr(){clearInterval(l);clearTimeout(k);}					
		function run(){clr();l=setInterval(execute,10);}
		this.pause=function(){clr();q=!q;if(!q)run();}
		this.start=function(){this.stop();q=false;run();}
		this.stop=function(){clr();q=true;iterate(0);}
		this.setLoopDelay=function(n){if(isNumber(n))w=Math.abs(n)*1000;}
		this.setLoopMode=function(n){if(isNumber(n))m=n<0||n>2?0:n;}
		this.onStatus=null;
		initialize(arguments);					
	}
	
	/*																												*/
	/**
	 @name pln.motion.equations
	 Modified version of EASING EQUATIONS
	 Copyright � 2001 Robert Penner
	 License: http://www.robertpenner.com/easing_terms_of_use.html
	*/	
	var equations=new function(){
		var h=this;
		this.elastic=function(t,b,c,d,a,p){
			if(t==0)return b;
			if((t/=d/2)==2)return b+c;
			if(!p)p=d*(0.3*1.5);
			if(!a||a<Math.abs(c)){
				a=c;
				var s=p/4;
			}else{var s=p/(2*Math.PI)*Math.asin(c/a);}
			if(t<1) return -0.5*(a* Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;
			return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*0.5+c+b;
		}
		this.elastic_in=function(t,b,c,d,a,p){
			if(t==0)return b;
			if((t/=d)==1)return b+c;
			if(!p)p=d*0.3;
			if(!a||a<Math.abs(c)){
				a=c;
				var s=p/4;
			}else{var s=p/(2*Math.PI)*Math.asin(c/a);}
			return -(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;
		}
		this.elastic_out=function(t,b,c,d,a,p){
			if(t==0)return b;
			if((t/=d)==1)return b+c;
			if(!p)p=d*0.3;
			if(!a||a<Math.abs(c)){
				a=c;
				var s=p/4;
			}else{var s=p/(2*Math.PI)*Math.asin(c/a);}
			return (a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b);
		}
		this.bounce=function(t,b,c,d){
			if(t<d/2){return h.bounce_in(t*2,0,c,d)*0.5+b;
			}else{return h.bounce_out(t*2-d,0,c,d)*0.5+c*0.5+b;}
		} ;
		this.bounce_in=function(t,b,c,d){return c-h.bounce_out(d-t,0,c,d)+b;};
		this.bounce_out=function(t,b,c,d){
			var n1=7.5625,n2=2.75;
			if((t/=d)<(1/n2)){return c*(n1*t*t)+b;}
			else if(t<(2/n2)){return c*(n1*(t-=(1.5/n2))*t+0.75)+b;}
			else if(t<(2.5/n2)){return c*(n1*(t-=(2.25/n2))*t+0.9375)+b;}
			else{return c*(n1*(t-=(2.625/n2))*t+0.984375)+b;}
		}
		this.linear=function(t,b,c,d){return c*t/d+b;}
		this.back=function(t,b,c,d,s){
			var s=s||1.70158;
			if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;
			return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;
		}
		this.back_in=function(t,b,c,d,s){
			var s=s||1.70158;
			return c*(t/=d)*t*((s+1)*t-s)+b;
		}
		this.back_out=function(t,b,c,d,s){
			var s=s||1.70158;
			return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;
		}
		this.cubic=function(t,b,c,d){
			if((t/=d/2)<1)return c/2*t*t*t+b;
			return c/2*((t-=2)*t*t+2)+b;
		}
		this.cubic_in=function(t,b,c,d){return c*(t/=d)*t*t+b;}
		this.cubic_out=function(t,b,c,d){return c*((t=t/d-1)*t*t+1)+b;}
		this.quint=function(t,b,c,d){
			if((t/=d/2)<1)return c/2*t*t*t*t*t+b;
			return c/2*((t-=2)*t*t*t*t+2)+b;
		}
		this.quint_in=function(t,b,c,d){return c*(t/=d)*t*t*t*t+b;}
		this.quint_out=function(t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b;}
	}
	this.equations=equations;
}
/*																												*/
var $a=['isNull','isDefined','isset','isString','isArray','isNumber','isObject','isBoolean','isFunction','isHtmlElement','isEmpty','isHexadecimal','isRgb','getUniqueId','analyse','argsToArray','dispatch','delegate','encode','decode','getBrowserInfo','ucFirst','convertHexadecimalToRgb','convertRgbToHexadecimal','addJs','addCss','extractScriptFromSource','evalScriptCollection','getFunctionName','compiler','cookie','server','node','events','json','flash','motion'];
var $b={toString:function(){return 'PLN Pelain Javascript Library';}}
for(var i=0;i<$a.length;i++)$b[$a[i]]=eval($a[i]);
return $b;
}