/*
******************************************************************
** 名: load 
** 描述: parser之异步传输数据
******************************************************************
*/

if(typeof parser != "object") var parser={};
if(typeof parser.load != "object") parser.load={};


parser.load.getHtml = function(url, handler) {
	parser.load.getType  = "html";
	parser.load.doXmlHttp(url, handler);
};
parser.load.getXml = function() {
	parser.load.getType  = "xml";
	parser.load.doXmlHttp(url, handler);
};

parser.load.get = function( url, oBind, tagFrom, tagTo ) {
	this.url      = (typeof url == "object") ? url.href : url ;
	this.oBind    = (typeof oBind == "object") ? oBind : $(oBind);
	if ( tagFrom ) {
		if ( tagFrom == "default" ) {
			this.tagFrom  = "<!--" + oBind.toString() +"Start-->";
			this.tagTo    = "<!--" + oBind.toString() +"End-->";
		} else {
			this.tagFrom = tagFrom;
			this.tagTo   = tagTo;
		}
	} else {
		this.url += this.url.indexOf("?") == -1 ? "?&iLoad=1" : "&iLoad=1";
		this.tagFrom = null;
		this.tagTo   = null;
	}
	this.getType  = "html";
	
	this.oBind.innerHTML  =  "Loading……";
	this.doXmlHttp(this.url, parser.load.getted );
	
	return false;
};
parser.load.getted = function( sHtml ) {
	var posFrom, posTo, oScripts, oScript, oHead;
	
	if ( this.tagFrom && this.tagTo ) {
		posFrom = sHtml.indexOf( this.tagFrom );		
		if ( posFrom >= 0 ) {
			 posFrom += this.tagFrom.length;
			 posTo    = sHtml.indexOf( this.tagTo );
			 sHtml = sHtml.substring( posFrom, posTo - 1 );
		}
	}
	
	this.oBind.innerHTML = sHtml;
	
	oScripts = this.oBind.getElementsByTagName("script");
	for ( var i = 0; i < oScripts.length; i++ ) {
		oHead = document.getElementsByTagName('HEAD').item(0);
		oScript = document.createElement("script");
		oScript.language = "javascript"; 
		oScript.type = "text/javascript";    
		oScript.defer = true;
		oScript.text = oScripts[i].innerHTML;
		oHead.appendChild(oScript);
	}
};

parser.load.getXmlHttpPrefix = function() {
	if (parser.load.XmlHttpPrefix)
		return parser.load.XmlHttpPrefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			o = new ActiveXObject(prefixes[i] + ".XmlHttp");
			return parser.load.XmlHttpPrefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XMLHttp object");
};

parser.load.createXmlHttp = function () {
	try {
		if (window.XMLHttpRequest) {
			var req = new XMLHttpRequest();
			if (req.readyState == null) {
				req.readyState = 1;
				req.addEventListener("load", function () {
					req.readyState = 4;
					if (typeof req.onreadystatechange == "function")
						req.onreadystatechange();
				}, false);
			}
			
			return req;
		}
		if (window.ActiveXObject) {
			return new ActiveXObject(parser.load.getXmlHttpPrefix() + ".XmlHttp");
		}
	}
	catch (ex) {}
	throw new Error("Your browser does not support XmlHttp objects");
};

parser.load.XmlHttp = null;
parser.load.handler = null;
parser.load.getType = null;
parser.load.doXmlHttp = function(url, handler) {
	if ( parser.load.XmlHttp ) parser.load.XmlHttp.abort();
	else parser.load.XmlHttp = parser.load.createXmlHttp();
		
	parser.load.handler = handler;
	
	parser.load.XmlHttp.onreadystatechange = parser.load.handleXmlHttp;
	parser.load.XmlHttp.open("GET", url, true);
	parser.load.XmlHttp.setRequestHeader("If-Modified-Since",Date());
	parser.load.XmlHttp.send(null);
};
parser.load.handleXmlHttp = function() {
	var response;
	if( parser.load.XmlHttp.readyState == 4 )
	{
		if ( parser.load.XmlHttp.status == 200 ) {
			switch( parser.load.getType ) {
				case "html": {
					response = parser.load.XmlHttp.responseText;
					break;
				}
				case "xml": {
					response = parser.load.XmlHttp.responseXML;
					break;
				}
			}
			parser.load.XmlHttp.abort();
			parser.load.handler(response);
			
		} else {
			throw new Error("数据加载出错，请重试！");
		}
	}
};
