function $(o)
{
	var flag=true;
	if(typeof o !== 'object')
	{
		o=document.getElementById(o);
	}
	if(o == null){ o={}; flag=false;}
	
	o.trim=function()
	{
		if(typeof this.value != null) return this.value.replace(/^\s+/,'').replace(/\s+$/,'');
	}
	o.toInt=function()
	{
		if(typeof this.value != null) return(/^[0-9]+$/.test(this.value)?parseInt(this.value):0);
	}
	o.count=function()
	{
		if(typeof this.value!=null)
		{
			var ens=this.value.length;
			var cns=this.value.match(/[^\x00-\x80]/ig);
			return((cns!=null)?ens+cns:ens)
		}
	}
	o.bind=function(e,c)
	{
		if(!flag) return;
		if(this.attachEvent)
		{
			this.attachEvent('on'+e,c);
		}
		else
		{
			this.addEventListener(e,c,false);
		}
	}
	o.html=function(data)
	{
		if(typeof o.innerHTML!=null) o.innerHTML=data;
	}

	o.ready=function(fn)
	{
		if(this!=document) return(function(){});
		var isReady=false;
		if(document.addEventListener)
		{
			document.addEventListener(
				"DOMContentLoaded",
				function()
				{
					isReady=true;
					fn();
					document.removeEventListener( "DOMContentLoaded", arguments.callee, false);
				},
				false
			);
		}
		else if(document.attachEvent)
		{
			document.attachEvent(
				"onreadystatechange",
				function()
				{
					if(document.readyState === "complete")
					{
						if(isReady) return;
						isReady=true;
						fn();
						document.detachEvent( "onreadystatechange", arguments.callee );
					}
				}
			);
			if(document.documentElement.doScroll && window ==window.top)
			(
				function()
				{
					if(isReady)return;
					try
					{
						document.documentElement.doScroll("left");
					}
					catch(error)
					{
						setTimeout( arguments.callee, 0 );
						return;
					}
					isReady=true;
					fn();
				}
			)();
		}
		else
		{
			window.onload=fn;
		}
	}
	return o;
}

function qajax()
{
	var ajaxer=new Object();

	ajaxer.__ts=new Date().getTime();
	ajaxer.__timer=null;
	ajaxer.uri=null;
	ajaxer.id=ajaxer.__ts+parseInt(Math.round(Math.random()*1000000).toString().substring(0,4));
	ajaxer.debug=false;	
	ajaxer.sendType='GET';
	ajaxer.recvType='TEXT';
	ajaxer.data=null;
	ajaxer.timeout=5;
	ajaxer.autoAbort=true;
	ajaxer.__requester=false;
	if(window.XMLHttpRequest){
		ajaxer.__requester=new XMLHttpRequest();
		if(ajaxer.__requester.overrideMimeType)
		{
			ajaxer.__requester.overrideMimeType('text/xml');
		}
	}
	else if(window.ActiveXObject)
	{
		var AXOArr=new Array('Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP');
		for(var i=0;i<AXOArr.length;i++)
		{
			try{
				ajaxer.__requester=new ActiveXObject(AXOArr[i]);
				if(ajaxer.__requester){
					break;
				}
			}catch(e){
				window.alert(e);
			}
		}
	}
	if(!ajaxer.__requester) return;

	//abort request
	ajaxer.abort=function()
	{
		ajaxer.__requester.abort();
		window.clearTimeout(ajaxer.__timer);
	}
	
	//time out callback
	ajaxer.__processTimeout=function()
	{

		if(ajaxer.timeout && (typeof ajaxer.onTimeOut == 'function'))
		{			
			ajaxer.__timer=window.setTimeout(function(){ if(ajaxer.autoAbort) ajaxer.abort(); ajaxer.onTimeOut(ajaxer.id)},ajaxer.timeout*1000);
		}
	}

	//default handler
	ajaxer.onStatus=function(id,code)
	{
	}

	ajaxer.__callback=function()
	{
		if(typeof ajaxer.onReadyState == 'function') ajaxer.onReadyState(ajaxer.id,ajaxer.__requester.readyState);
		if(ajaxer.__requester.readyState == 4)
		{
			window.clearTimeout(ajaxer.__timer);
			if(typeof ajaxer.onStatus == 'function') ajaxer.onStatus(ajaxer.id,ajaxer.__requester.status);
			if(ajaxer.id,ajaxer.__requester.status == 200)
			{
				if(typeof ajaxer.onError == 'function')
				try{if(!(ajaxer.onError(ajaxer.id,ajaxer.__requester.responseText))) throw('AJAX_REQUEST_ERROR');}catch (E){ return(false);}

				if(ajaxer.recvType == 'XML') ajaxer.data=ajaxer.__requester.responseXML;
				else if(ajaxer.recvType == 'TEXT') ajaxer.data=ajaxer.__requester.responseText;
				else if(ajaxer.recvType == 'JSON')
				{					
					var json=new Object();
					eval('json='+ajaxer.__requester.responseText);
					ajaxer.data=json;
				}
				if(typeof ajaxer.onData == 'function') ajaxer.onData(ajaxer.id,ajaxer.data);				
			}
		}
	}

	ajaxer.request=function()
	{
		if(arguments.length)
		{
			ajaxer.uri=arguments[0];
			if(arguments.length >= 4)
			{
				ajaxer.__data=arguments[1];
				ajaxer.sendType=arguments[2];
				ajaxer.recvType=arguments[3];
			}
			else if(arguments.length == 3)
			{
				ajaxer.__data=arguments[1];
				ajaxer.sendType=arguments[2];
			}
			else if(arguments.length == 2)
			{
				ajaxer.__data=arguments[1];
			}
		}

		
		//检查属性是否正确
		var pos=ajaxer.uri.indexOf('?');
		if(pos == -1){
			ajaxer.uri+='?'+'__AjaxID='+ajaxer.id+'&__AjaxTS='+ajaxer.__ts;
		}else{
			ajaxer.uri=ajaxer.uri.substring(0,pos+1)+'__AjaxID='+ajaxer.id+'&__AjaxTS='+ajaxer.__ts+'&'+ajaxer.uri.substring(pos+1);
		}
		//start request
		if(ajaxer.sendType=='GET')
		{
			ajaxer.__requester.open('GET',ajaxer.uri,true);
			ajaxer.__requester.onreadystatechange=ajaxer.__callback;
			ajaxer.__requester.send(null);
		}
		else
		{
			ajaxer.__requester.open('POST',ajaxer.uri,true);
			ajaxer.__requester.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			ajaxer.__requester.onreadystatechange=ajaxer.__callback;
			ajaxer.__requester.send(ajaxer.__data);
		}
		ajaxer.__processTimeout();
	}

	return ajaxer;
}

function floatads() {
	this.items=[];
	this.delta=0.08;
	this.isns=navigator.appName == 'Netscape';
	this.add=function(id,x,y,content)
	{
		var div=document.createElement('DIV');
		div.id=id;
		div.style.zIndex=10;
		div.style.width='110px';
		div.style.overflow='hidden';
		div.style.position='absolute';
		div.style.top=(typeof(y)=='string'?eval(y):y)+'px';
		div.style.left=(typeof(x)=='string'?eval(x):x)+'px';
		div.innerHTML=content;		
		div.childNodes[0].style.overflow='hidden';
		div.childNodes[0].style.width=parseInt(div.style.width)-2+'px';
		document.body.appendChild(div);
		var newItem={};
		newItem.object=document.getElementById(id);
		newItem.x=x;
		newItem.y=y;
		this.items[this.items.length]=newItem;
	}
	this.show=function()
	{
		var rthis=this;
		window.setInterval(
			function()
			{
				for(var i=0;i<rthis.items.length;i++)
				{
					var followObj=rthis.items[i].object;
					var prefixy=(rthis.isns?pageYOffset:document.documentElement.scrollTop)+(typeof(rthis.items[i].y)=='string'?eval(rthis.items[i].y):rthis.items[i].y);
					var prefixx=(rthis.isns?pageXOffset:document.documentElement.scrollLeft)+(typeof(rthis.items[i].x)=='string'?eval(rthis.items[i].x):rthis.items[i].x);
					
					if(followObj.offsetLeft!=prefixx)
					{
						var dx=(prefixx-followObj.offsetLeft)*rthis.delta;
						dx=(dx>0?1:-1)*Math.ceil(Math.abs(dx));
						followObj.style.left=followObj.offsetLeft+dx+'px';
					}
					
					if(followObj.offsetTop!=prefixy)
					{
						var dy=(prefixy-followObj.offsetTop)*rthis.delta;
						dy=(dy>0?1:-1)*Math.ceil(Math.abs(dy));
						followObj.style.top=followObj.offsetTop+dy+'px';
					}	
					followObj.style.display	= '';
				}
			},
		10);
	}
}	
