AjaxUtil={
	cache:{
	    put:function(key,value){
		    AjaxUtil.cache[key]=value;
		},
		get:function(key){
		    return AjaxUtil.cache[key];
		},
		isEmpty:function(key){
			return AjaxUtil.cache[key]==null;
		}
	},
	transport:null,
	Try:{
		    these: function() {
			    var returnValue;
			    for (var i = 0,len=arguments.length; i < len; i++) {
			        var lambda = arguments[i];
			        try {
			          returnValue = lambda();
			          break;
			        } catch (e) {}
			    }
			    return returnValue;
			}
	    },
    create: function() {
        return AjaxUtil.Try.these(
          function() {return new XMLHttpRequest()},
          function() {return new ActiveXObject('Microsoft.XMLHTTP')},
          function() {return new ActiveXObject('Msxml2.XMLHTTP')}
        ) || false;
      },

	_processView : function(req,dom,viewName,text) {
		if(text){
			return req.responseText;
		}
		this._showView(dom,null,req.responseText,viewName);
		return req.responseText;
	},
    loadHTML:function loadHTMLCLient(viewName,dom,fn,arg){
    	var res="";
    	try{
			mv.scrollBarShow=true;
    		mv.modalShow();
    	}catch(e){}
	    if(!AjaxUtil.cache.isEmpty(viewName)){
			var temp=AjaxUtil.cache.get(viewName);
			this._showView(dom,null,temp,viewName);
			try{mv.modalClose.call(mv);}catch(e){}
			if(fn)fn(arg,res);
	    	return temp;
	    }
		var transport = AjaxUtil.create();
		try {
			    transport.open("GET", viewName,true);/*use get for static page*/
			    transport.onreadystatechange=function(){
	    			if (transport.readyState == 4) {
						if (transport.status == 200) {
			    			res=AjaxUtil._processView(transport,dom,viewName);
		    				try{mv.modalClose.call(mv);}catch(e){}
			    			transport=null;
			    			if(fn)fn(arg,res);
						}
	    			}
			    };
		}catch (e) {
			var msg = "View Error: \n\n Cannot find view with name: " + "[" + viewName + "]";
			alert(msg);
			setTimeout(function(){
				try{mv.modalClose.call(mv);}catch(e){}
			},500);
		}
		transport.send(null);
		return res;
    },
	getHtmlText:function(viewName,fn,arg,nobody){
		var argobj={};
		for(x in arg) argobj[x]=arg[x];
		var temp="";
		if(viewName==-1){
			return false;
		}
	    if(!AjaxUtil.cache.isEmpty(viewName)){
	    	fn(AjaxUtil.cache.get(viewName),argobj);
			return false;
	    }
		var transport = AjaxUtil.create();
		try {
			transport.open("GET", viewName,true);/*use get for static page*/
			transport.onreadystatechange=function(){
    			if (transport.readyState == 4) {
    				if (transport.status == 200) {
						temp=AjaxUtil._processView(transport,null,viewName,true);
						if(temp){
							if(nobody){
								temp=AjaxUtil.nobody(temp);
							}
							fn(temp,argobj);
							if(AjaxUtil.cache.isEmpty(viewName)){
								AjaxUtil.cache.put(viewName,temp);
							}
						}
		    			transport=null;
    				}
    			}
			};
		} catch (e) {
			var msg = "View Error: \n\n Cannot find view with name: " + "[" + viewName + "]";
			alert(msg);
		}
		transport.send(null);
		return false;
	},
	getHtmlText2:function(viewName2,fn,arg,nobody2){
		var argobj={};
		for(x in arg) argobj[x]=arg[x];
		var temp="";
		if(viewName2==-1){
			return false;
		}
	    if(!AjaxUtil.cache.isEmpty(viewName2)){
	    	fn(AjaxUtil.cache.get(viewName2),argobj);
			return false;
	    }
		var transport = AjaxUtil.create();
		try {
			transport.open("GET", viewName2,true);/*use get for static page*/
			transport.onreadystatechange=function(){
    			if (transport.readyState == 4) {
    				if (transport.status == 200) {
						temp=AjaxUtil._processView(transport,null,viewName2,true);
						if(temp){
							if(nobody2){
								temp=AjaxUtil.nobody2(temp);
							}
							fn(temp,argobj);
							if(AjaxUtil.cache.isEmpty(viewName2)){
								AjaxUtil.cache.put(viewName2,temp);
							}
						}
		    			transport=null;
    				}
    			}
			};
		} catch (e) {
			var msg = "View Error: \n\n Cannot find view with name: " + "[" + viewName + "]";
			alert(msg);
		}
		transport.send(null);
		return false;
	},
	nobody:function(viewData){
		var regexp1 = /<body(.|\n)*?>(.|\n|\r\n)*?<\/body>/ig;
		var regexp2 = /<body(.|\n)*?>((.|\n|\r\n)*)?<\/body>/im;
		var result = viewData.match(regexp1);
		if (result) {
			return result[0].match(regexp2)[2];
		}
		return viewData;
	},
	nobody2:function(viewData){
		var regexp1 = /<DIV(.|\n)*?>(.|\n|\r\n)*?<\/DIV>/g;
		var regexp2 = /<DIV(.|\n)*?>((.|\n|\r\n)*)?<\/DIV>/im;
		var result = viewData.match(regexp1);
		if (result) {
			return result;
		}
		return viewData;
	},
	_showView: function(partId, viewPath, viewData,viewName) {
		var regexp1 = /<script(.|\n)*?>(.|\n|\r\n)*?<\/script>/ig;
		var regexp2 = /<script(.|\n)*?>((.|\n|\r\n)*)?<\/script>/im;
		//var regexp3 = /<script(.|\n)*?excute=true{1}(.|\n)*?src=(.|\n)*?>/ig;
		/* draw the html first */
		var noBody=AjaxUtil.nobody(viewData);
		partId.innerHTML = noBody.replace(regexp1, "");
		if(AjaxUtil.cache.isEmpty(viewName)){
			AjaxUtil.cache.put(viewName,viewData);
		}
		var result = viewData.match(regexp1);
		//var resultExcuteSrc = viewData.match(regexp3);
		if (result) {
			for (var i = 0; i < result.length; i++) {
				var realScript = result[i].match(regexp2);
				if(realScript[2]==""||typeof realScript[2]=='undefined')continue;
				this._executeScript(realScript[2], partId,i);
			}
		}
	},
	_executeScript : function(scriptFrag, partId,index) {
		var scriptContainerId = partId.getAttribute("id") + "_SCRIPT_CONTAINER";
		var obj = document.getElementById(scriptContainerId);
		var ss = document.getElementsByTagName("SCRIPT");
		if (obj != null) {
			document.body.removeChild(obj);
		}
		var scriptContainer = document.createElement('SCRIPT');
		scriptContainer.setAttribute("id", scriptContainerId);
		scriptContainer.text = scriptFrag;
		document.body.appendChild(scriptContainer);
		return false;
	} 
};
