//paipai jax comm class;
//woodzheng 2006-05
var PP_QUERY_TYPE_GET  = 1;
var PP_QUERY_TYPE_POST = 2;

var PP_IS_IE            = (document.all?true:false);
var PP_DEBUG_DIV_ID     = "DebugInfoOutId";
var PP_DEBUG_CTRL	     = true;
var PP_ERR_ALERT_CTRL   = true;

//Class for compatible in different browsers;
function PPCCompatibleJs(){
	this.SetClassName = function (obj,sClassName){
		obj.setAttribute("class",sClassName);
		obj.setAttribute("className",sClassName);
	};
	
	this.SetStyleString = function(obj,sStyleString){
		obj.setAttribute("style",sStyleString);
		obj.style.cssText = sStyleString;
	};
};

//Class for showing the debug info out in developing...
function PPCDebugInfo(){
	var m_objPDivDebug = null;
	var m_bHasInit = false;
	var m_bDebugCtrl = PP_DEBUG_CTRL;

	this.ShowDebugInfo = function(sDebugInfo){
		if(m_bDebugCtrl){
			if(m_objPDivDebug){
				m_objPDivDebug.innerHTML = m_objPDivDebug.innerHTML + '<br>' + sDebugInfo;
				return 0;
			}
			else if(m_bHasInit == false){
				m_objPDivDebug = document.getElementById(PP_DEBUG_DIV_ID);
				m_bHasInit = true;
			}
			else{
				return -1;
			}
		}
		else{
			return -1;
		}
		return 0;
	};
};

//Class for dealing the error ocured situation...
function PPCErrInfo(_objDebugInfo){
	var m_objDebugInfo = _objDebugInfo;
	this.ShowErrInfo = function(aDataArray){
	
		if(!aDataArray){
			m_objDebugInfo.ShowDebugInfo("Init Err Info Error: ErrInfo Array is null!");
			alert("Init Err Info Error: ErrInfo Array is null!");
			return -1;
		}
		else if(aDataArray.length!=2){
			m_objDebugInfo.ShowDebugInfo("Init Err Info Error: ErrInfo Array is not valid!");
			alert("Init Err Info Error: ErrInfo Array is not valid!");
			return -1;
		}
		
		var sErrMsg = aDataArray[1];
		var iErrNo  = aDataArray[0];	
		var errInfo = sErrMsg + "ERR NO:"+ iErrNo;
		
		m_objDebugInfo.ShowDebugInfo(errInfo);
		if(PP_ERR_ALERT_CTRL){
			alert(errInfo);
		}
		return this.iErrNo;
	};
	
};

var g_objPPCCompatibleJs = new PPCCompatibleJs();
var g_objPPCDebugInfo    = new PPCDebugInfo();
var g_objPPCErrInfo      = new PPCErrInfo(g_objPPCDebugInfo);
// global comm class;

function PPCElfWorker(){
	var m_objWorkerThis = this;
	var m_bHasInit = false;
	var m_xmlHttp = null;
	var m_sQueryString = "";
	var m_iQueryParamNum = 0;
	var m_aParamasValues = new Array();
	var m_funReady = null;
	
	
	//init the xmlHttp object;
	var Init = function(){		
		if(!m_bHasInit && m_xmlHttp == null){
			if(window.ActiveXObject){
				m_xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				m_bHasInit = true;
			}
			else if(window.XMLHttpRequest){
				m_xmlHttp = new XMLHttpRequest();
				m_bHasInit = true;
			}
		}
	}
	
	var ReInit = function(){		
		if(window.ActiveXObject){
			m_xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			m_bHasInit = true;
		}
		else if(window.XMLHttpRequest){
			m_xmlHttp = new XMLHttpRequest();
			m_bHasInit = true;
		}
	}	
		
	//make the query string by ids
	var MakeQueryString = function (arguments){
		if(!arguments){
			return;
		}
		
		var iIndex =0;
		m_iQueryParamNum = 0; // reset the param num to zero;
		m_sQueryString = "";  // reset the param string to empty;
		while(arguments[iIndex]){	
			if(m_iQueryParamNum ==0){
				m_sQueryString+="";
			}
			else{
				m_sQueryString+="&";
			}
			m_sQueryString+=arguments[iIndex]+"="+document.getElementById(arguments[iIndex]).value;
			
			m_aParamasValues[m_iQueryParamNum*2] = arguments[iIndex];
			m_aParamasValues[m_iQueryParamNum*2+1] = document.getElementById(arguments[iIndex]).value;
			iIndex ++ ;
			m_iQueryParamNum ++;
		}
	}
	
	var SetReadyHandelFun = function(funReady){
		m_funReady = funReady;
	}
	
	var RunReadyFun = function(){
		if(m_xmlHttp.readyState == 4){ //4 is for ready state complete
			m_funReady.call();
		}
	}	
	
	//do post action
	this.DoPostQuery = function(handelStateChange,url,pArguments){
		DoQuery(PP_QUERY_TYPE_POST,handelStateChange,url,pArguments);
	}
	

	//do get action
	this.DoGetQuery = function(handelStateChange,url,pArguments){
		DoQuery(PP_QUERY_TYPE_GET,handelStateChange,url,pArguments);
	}
	
	var DoQuery = function(iQueryType,handelStateChange,url,pArguments){
		
		ReInit();
		SetReadyHandelFun(handelStateChange);
		MakeQueryString(pArguments);
		
		m_xmlHttp.onreadystatechange = RunReadyFun;
		//alert(iQueryType);
		if(iQueryType == PP_QUERY_TYPE_GET){			
			m_xmlHttp.open("GET",url+m_sQueryString,true);
			m_xmlHttp.send(null);
		} else{				
			m_xmlHttp.open("POST",url,true);
			m_xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
			m_xmlHttp.send(m_sQueryString);
		}		
	}
	
	//do get action result text
	this.GetQuestResultText = function(){
		return m_xmlHttp.responseText;
	}
	
	//do get action result XML
	this.GetQuestResultXML = function(){
		return m_xmlHttp.responseXML;
	}
	
	//check the response stat
	this.CheckQuestState = function(){
		if(m_xmlHttp.readyState == 4){
			if(m_xmlHttp.status == 200){
				return true;
			}
		}
		return false;
	}
		
}

function CLoadXX(objOut,sXmlUrl,sXsltUrl,myBackFunc){
		var m_objOut  = objOut;
		var m_sXsltUrl= sXsltUrl;
		var m_sXmlUrl = sXmlUrl;
        var m_wdElfXml  = new PPCElfWorker();
        var m_wdElfXslt = new PPCElfWorker();        
        var m_xmlDoc  = null;
        var m_xsltDoc = null;
        
        var getXmlXsltHtml = function (){
            if(m_xmlDoc == null || m_xsltDoc == null){
                return;
            }
            if(window.ActiveXObject){
                //alert(m_xmlDoc.transformNode(m_xsltDoc));                
                m_objOut.innerHTML = m_xmlDoc.transformNode(m_xsltDoc);    //;
            }
            else{ //fire fox;
                var xsltProcessor = new XSLTProcessor();
                xsltProcessor.importStylesheet(m_xsltDoc);
                var fragment = xsltProcessor.transformToFragment(m_xmlDoc,document);
                m_objOut.innerHTML = "";
                m_objOut.appendChild(fragment);
            }
            // add by kennyshan
            if(myBackFunc != null)
                myBackFunc(m_xmlDoc);
        }
                                                                                    
        var doXml = function (){
            m_xmlDoc = m_wdElfXml.GetQuestResultXML();
            getXmlXsltHtml();
        }
        
        var doXslt = function (){
            m_xsltDoc = m_wdElfXslt.GetQuestResultXML();
            getXmlXsltHtml();
        }
		
		this.LoadNow = function(){
			m_wdElfXslt.DoGetQuery(doXslt,m_sXsltUrl);
			m_wdElfXml.DoGetQuery(doXml,m_sXmlUrl);
		}
		
		this.LoadNowEx = function(type){
			if (type == true)
			{
				m_wdElfXslt.DoGetQuery(doXslt,m_sXsltUrl);
			}
			else
			{
				m_wdElfXslt.DoGetQuery(doXslt,m_sXsltUrl);
				m_wdElfXml.DoGetQuery(doXml,m_sXmlUrl);
			}
		}
		
		this.SetXslUrl = function(url){
			m_sXsltUrl = url;
		}
}

