
function af_var_dump(obj){var str=typeof(obj)+'\n';for(var x in obj){str+=x+' = '+obj[x]+'\n';}
return str;}
var af_CSS={addClass:function(element,className){element.className+=' '+className;},removeClass:function(element,className){if(!element||!element.className){return;}
var classes=element.className.split(' ');var newclasses=[];for(var i=0;i<classes.length;++i){if(classes[i]!=className){newclasses.push(classes[i]);}}
element.className=newclasses.join(' ');},getElementsByClass:function(pattern,node,tag){node=node||document;tag=tag||'*';var nodes=[];var elements=node.getElementsByTagName(tag);for(var i=0;i<elements.length;++i){if(pattern.test(elements[i].className)){nodes.push(elements[i]);}}
return nodes;},getPosition:function(element){var coords={x:0,y:0};var e=element;do{coords.x+=e.offsetLeft;coords.y+=e.offsetTop;e=e.offsetParent;}while(e);return coords;},getDimensions:function(element,includeBorder){if(includeBorder){return{width:element.offsetWidth,height:element.offsetHeight};}else{return{width:element.clientWidth,height:element.clientHeight};}}};var af_Events={addEventListener:function(element,event,handler,capture){if(element.addEventListener){element.addEventListener(event,handler,false);return;}
if(element.attachEvent){var mname='_____on'+event;element[mname]=handler;element.attachEvent('on'+event,function(event){return element[mname](event);});}},removeEventListener:function(element,event,handler){if(element.removeEventListener){element.removeEventListener(event,handler,false);return;}
if(element.detachEvent){element.detachEvent('on'+event,handler);}},addOnEvent:function(element,event,handler){event='on'+event;var tmp=element[event];if(typeof tmp!='function'){element[event]=handler;}else{element[event]=function(e){if(tmp){tmp(e);}
handler(e);};}},stopEvent:function(event){if(typeof window.event!='undefined'){window.event.cancelBubble=true;window.event.returnValue=false;}else{event.preventDefault();event.stopPropagation();}},getMousePosition:function(event){if(event.pageX||event.pageY){return{x:event.pageX,y:event.pageY};}
return{x:event.clientX+(document.body.scrollLeft||document.documentElement.scrollLeft),y:event.clientY+(document.body.scrollTop||document.documentElement.scrollTop)};}};function af_AJAX(){var that=this;that.enabled=true;if(typeof XMLHttpRequest=='undefined'){try{XMLHttpRequest=function(){return new ActiveXObject('Microsoft.XMLHTTP');};}catch(msex){}}
if(typeof XMLHttpRequest=='undefined'){that.enabled=false;}
that.getSync=function(url){var req=new XMLHttpRequest();req.open('GET',url,false);req.send(null);return req;};that.getAsync=function(url,callback){var req=new XMLHttpRequest();req.open('GET',url);req.onreadystatechange=function(){if(req.readyState==4){callback(req);}};req.send(null);};that.postSync=function(url,data){var req=new XMLHttpRequest();req.open('POST',url,false);var encodedData=that.urlencode(data);req.setRequestHeader("Content-type","application/x-www-form-urlencoded");req.setRequestHeader("Content-length",encodedData.length);req.setRequestHeader("Connection","close");req.send(encodedData);return req;};that.postAsync=function(url,data,callback){var req=new XMLHttpRequest();req.open('POST',url);req.onreadystatechange=function(){if(req.readyState==4){callback(req);}};req.send(that.urlencode(data));};that.urlencode=function(data){var encodedData=[];for(var i in data){encodedData.push(i+'='+encodeURIComponent(data[i]));}
return encodedData.join('&');};}
