
//string方法:找?号后的部分
String.prototype.getQuery = function(name)
{
	var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
	var r = this.substr(this.indexOf("\?")+1).match(reg);
	if(r!=null)
	{
		return unescape(r[2]);
	}
	return null;
}

//求含中文的字串长度
String.prototype.cn_length = function()
{
	var i, sum;
	sum = 0;
	for(i=0; i < this.length; i++)
	{
		sum ++;
		if (this.charCodeAt(i) > 255)
		{
	  		sum ++;
	  	}
	}
	return sum;
}

//求含中文字串的子串
String.prototype.cn_substring = function(len)
{
	var a = 0;
	var tmp = "";
	for (var i = 0; i < len; i++)
	{
		if (this.charCodeAt(i) > 255)
		{
			a += 2;
		}
		else
		{
			a++;
		}

		if(a > len)
		{
			return tmp;
		}
		tmp += this.charAt(i); 
	}
	return tmp;
}


//返回某个ID的对象
function $(s)
{
	if(document.getElementById)
	{
		return document.getElementById(s);
	}
	else
	{
		return document.all[s];
	}
}

function $$(s)
{
	return document.frames?document.frames[s]:$(s).contentWindow;
}

//在某个DIV等ID中,显示HTML内容
function echo(ObjId,html)
{
	$(ObjId).innerHTML=html;
}


function isNull(_sVal)
{
	return (_sVal === "" || _sVal == null || _sVal == "undefined");
}

function dw(s)
{
	document.write(s);
}


function hidden(obj)
{
	obj.style.display = (obj.style.display == 'none') ? '' : 'none';
}


function getXY(obj)
{
	var o		= new Object();
	o.left		= 0;
	o.top		= 0;
	o.right		= 0;
	o.bottom		= 0;
	var oWidth	= obj.offsetWidth;
	var oHeight	= obj.offsetHeight;
	while(obj)
	{
		o.left += obj.offsetLeft;
		o.top += obj.offsetTop;
		obj = obj.offsetParent;
	}
	o.right = o.left + oWidth;
	o.bottom = o.top + oHeight;
	return o;
}

///////////////////////////////////
//   AJAX
//////////////////////////////////////

function NewRequest()
{
    var http_request = false;
    if (window.XMLHttpRequest)
    {
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType)
        {
            http_request.overrideMimeType('text/xml');
        }
    }
    else if (window.ActiveXObject)
    {
        try
        {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try 
            {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) 
    {
        return false;
    }
    else
    {
        return http_request;
    }
}

function LoadURL(strURL)
{
	if(!strURL)
	{
		return false;
	}
	var xmlHTTP=NewRequest();
    if (xmlHTTP)
    {
	   xmlHTTP.open("GET",strURL,false);
	   xmlHTTP.send(null);
	   return xmlHTTP;
    }
    return false;
}


function CallbackForGetTextA(xmlHttp,OutObj,IsRemind)
{
	return function()
	{
		if(xmlHttp.readyState==4)   //表示已经数据返回
		{
			if(xmlHttp.status==200)  //正常读取
			{
				var Ree=xmlHttp.responseText;   //responseBody;
				echo(OutObj,Ree);
			}
			else
			{
				if(IsRemind) echo(OutObj,"加载失败!");
			}
		}
	}
}


function CallbackForGetTextB(xmlHttp,uFunc,uFuncArg)
{
	return function()
	{
		var res = {responseXML:null,responseText:null,responseBody:null};
		if(xmlHttp.readyState==4)
		{
			if(xmlHttp.status==200)
			{
				res.responseText = xmlHttp.responseText;    //文本
				res.responseXML = xmlHttp.responseXML;      //XML文本
				res.responseBody = xmlHttp.responseBody;    //二进制数据
				eval(uFunc).apply(res, uFuncArg);
			}
			else
			{
				eval(uFunc).apply(res, uFuncArg);
			}
		}
	}
}


////////////////////////////////////////
//
//  下面是xmlHttp的“公用”函数
//
/////////////////////////////////////////////////////////////

//异步读取并将返回的数据填充到指定的位置
//参数:读取的网址,填充内容的对象,是否显示提示
//////////////////////////////////////////////////
function AsyncGetHtml(url,obj_Id,IsRemind)
{
    var myHttp=NewRequest();
    if(myHttp)
    {
   	    if(IsRemind)
			echo(obj_Id,"正在加载..");
        var RequestCallback=CallbackForGetTextA(myHttp,obj_Id,IsRemind);
        myHttp.onreadystatechange=RequestCallback;
   		myHttp.open("GET",url,true);   //true表示异步
		myHttp.send(null);
    }
    else
    	echo(obj_Id,"error!");
}

// 异步调用,返数数据后把数据传给用户指定的函数并执行该函数
// 注:func是被调函数名,不加引号,funcArg是参数数组,要用[]号
// 被调函数用this.responseXML和this.responseText取出数据
//////////////////////////////////////////////////////////////
function AsyncGetHtmlToFunc(url,func,funcArg)
{
    var myHttp=NewRequest();
    if(myHttp)
    {
        var RequestCallback=CallbackForGetTextB(myHttp,func,funcArg);
        myHttp.onreadystatechange=RequestCallback;
   		myHttp.open("GET",url,true);   //true表示异步
		myHttp.send(null);
    }
}


/// 同步读取服务器数据,返回字符
/////////////////////////////////////
function GetTextAsServer(url)
{
    var myHttp=LoadURL(url);
    if(myHttp)
    {
       	if(myHttp.readyState==4)   //表示已经数据返回
		{
			if(myHttp.status==200)  //正常读取
			{
				var Ree=myHttp.responseText;
				return Ree;
			}
			else
			{
				return "";
			}
		}
    }
    return "";
}



//////////////////////////////
// 其它备用函数
////////////////////////////////////////////////////////////

//-- 图片加载时自动缩略
function imgLoad(obj, maxwid)
{
    var img, wid, j;
    if(!maxwid)maxwid = 640;

    for(j = 0; j < 100; j++)
	{
        img         = new Image;
        img.src     = obj.src;
        wid         = img.width;
        if(wid > 0)break;
    }

    if(wid > maxwid)
	{
        wid         = maxwid;
    }
    if(wid)
	{
        obj.width   = wid;
    }
}

//调入某个脚本文件
function LoadScript(url,language,theType)
{ 
	var head = document.getElementsByTagName("HEAD").item(0); 
	var script = document.createElement("script"); 
	script.src = url; 
	script.language=language;
	script.type = theType; 
	head.appendChild(script); 
} 
//LoadScript("index.js","javascript","text/javascript");

