var strLoading = '<img src="' + FILE_SERVER + '/images/indicator.gif" />&nbsp;&nbsp;<img src="' + FILE_SERVER + '/images/loading01.gif" />';
var strNotfound = '<img src="' + FILE_SERVER + '/images/notfound.gif" border=\"0\"/>';
function DivRefresh(divId, url, options, method,divs) {
	this.callbacks = [];
	this.divId = divId;
	this.panel = document.getElementById(divId);
	this.options = options;
	if(method.toLowerCase() != "post") method = "get";
	this.ajaxHelper = new net.ContentLoader(this, url, method, options.requestParameters || []);
	if(divs && divs.length>0){
		this.alldivsHide = [];
		var objDiv;
		for(var i=0; i<divs.length; i++){
			objDiv = document.getElementById(divs[i]);
			if(objDiv)
			this.alldivsHide.push(objDiv);
		}
	}else{
		this.alldivsHide = [];
	}
}

DivRefresh.prototype = {
	initializeBehavior: function() {
		this.ajaxHelper.sendRequest();
		/*if(loadCallBack!="undefined"&&loadCallBack!=null){
		this.loadCallBack = loadCallBack;
		}*/
	},

	reset: function(url, options, method) {
		if(method.toLowerCase() != "post") method = "get";
		if(this.ajaxhelper) this.ajaxHelper.stop();
		this.ajaxHelper = new net.ContentLoader(this, url, method, options.requestParameters || []);
	},

	debugDom: function(e){
		var div = document.getElementById('DebugInfo');
		div.innerHTML += '<br>' + this.prfix + e.nodeName;
		if(e.hasChildNodes() || typeof(e.childNodes) != 'undefined'){
			var nodes = e.childNodes;
			this.prfix += '&nbsp;&nbsp;&nbsp;&nbsp;';
			for(var i=0,len=nodes.length; i<len; i++){
				this.debugDom(nodes[i]);
			}
		}else{
			div.innerHTML += ':blank';
		}
	},
	
	ajaxUpdate:  function(request) {
		var content;
		if(request.responseXML && request.responseXML.documentElement){
			var content = this.getResponse(request.responseXML.documentElement);
			if(this.err(content)){
				this.notFound();
			}else{
				content = this.result(content);
				this.panel.innerHTML = content;
				decoGreyboxLinks(this.panel);
				if(this.alldivsHide && this.alldivsHide.length>0){
					this.panel.style.display = '';
					for(var i=0; i<this.alldivsHide.length; i++){
						this.alldivsHide[i].style.display = '';
					}
				}else{
				}
			}
			for(var i=0; i<this.callbacks.length; i++){
				this.callbacks[i](content);
			}
		}
	},

	notFound: function() {
		this.panel.innerHTML = strNotfound;
		if(this.alldivsHide && this.alldivsHide.length>0){
			this.panel.style.display = 'none';
			for(var i=0; i<this.alldivsHide.length; i++){
				this.alldivsHide[i].style.display = 'none';
			}
		}
	},

	handleError: function(request) {
		if ( this.options.errorHandler ){
			this.options.errorHandler(request);
		}else{
			this.panel.innerHtml = this.createErrorMsg(request);
		}
	},

	createErrorMsg: function(request){
		return "通讯失败！";
	},

	getResponse: function(ajaxResponse){
		var arrE = ajaxResponse.getElementsByTagName("search");
		if(arrE){
			return arrE[0];
		}else{
			return null;
		}
	},

	err: function(e){
		if(e){
			var error = e.getAttribute('error');
			var re = /^yes$/i
			return error && re.test(error);
		}
		return true;
	},

	result: function(e){
		if(e){
			return this.getElementContent(e,"content");
		}
	},

	getElementContent: function(element,tagName) {
		var childElement;// = element;
		childElement = element.getElementsByTagName(tagName)[0];
		return childElement.text != undefined ? childElement.text : childElement.textContent;
	},

	printdiv: function(html){
		this.panel.innerHTML = html;
	},

	appendCallback: function(callback){
		this.callbacks.push(callback);
	}
}

DivRefresh.push=function(divId, url, requestParameters, method, divs, callback){
	var options = {};
	options.requestParameters=requestParameters;
	var div = new DivRefresh(divId,'http://' + url,options,method,divs);
	if(callback){
		div.appendCallback(callback);
	}
	if(typeof(DivRefresh.divs) == 'undefined'){
		DivRefresh.divs = [];
	}
	DivRefresh.divs.push(div);
}

DivRefresh.load=function(){
	if(typeof(DivRefresh.divs) != 'undefined'){
		for(var i=0; i<DivRefresh.divs.length; i++){
			DivRefresh.divs[i].initializeBehavior();
		}
	}
}

DivRefresh.freshdiv=function(divId,url,requestParameters,method,callback){
	var div = null;
	var options = {};
	options.requestParameters=requestParameters;

	if(DivRefresh.divs){
		for ( var i = 1 ; i < DivRefresh.divs.length ; i++ ){
			if(DivRefresh.divs[i].divId == divId){
				div = DivRefresh.divs[i];
				break;
			}
		}
	}

	if(!div){
		div = new DivRefresh(divId,'http://' + url,options,method);
	}else{
		div.reset('http://' + url,options,method);
	}

	if(callback){
		div.appendCallback(callback);
	}
	div.printdiv(strLoading);
	div.initializeBehavior();
	return false;
}

DivRefresh.startAll=function(){
	var blnStarted = false;
	if (document.addEventListener) {
		if (/WebKit/i.test(navigator.userAgent) || /KHTML/i.test(navigator.userAgent)) { // sniff
			var _timer = setInterval(function() {
				if(_timer) return;
				if (/loaded|complete/.test(document.readyState)) {
					clearInterval(_timer);
					DivRefresh.load();
					blnStarted = true;
				}
			}, 10);
		}else{ // mozilla
			document.addEventListener("DOMContentLoaded", DivRefresh.load, false);
			blnStarted = true;
		}
	}

	/*@cc_on @*/
	/*@if (@_win32)
	if(!blnStarted){
		document.write("<script id=__pikey_ie_onload defer src=javascript:void(0)><\/script>");
		var script = document.getElementById("__pikey_ie_onload");
		script.onreadystatechange = function() {
			if (this.readyState == "complete") {
				DivRefresh.load();
			}
		};
		blnStarted = true;
	}
	/*@end @*/
	
	return blnStarted;
}
