/** 
* Author    : MC ½É»õ (ganer9r@naver.com) 
* Make Date : 2006-09-22 
* comment    : ajaxÀÇ xmlÀ» javascript °´Ã¼Çü½ÄÀ¸·Î ÀÚµ¿ º¯È¯ 
**/ 

/* Ajax »ç¿ëÀ» À§ÇÑ ±âº» ÄÞÆ÷³ÍÆ® Start */ 

function AjaxDataControl(){ 
    this.xmlHttp            = null; 

    this.getHttpRequest        = function(URL, object, fundata, mode, tf){

        var xmlHttp        = this.xmlHttp; 
        var xmlData        = null; 
        // FFÀÏ °æ¿ì window.XMLHttpRequest °´Ã¼°¡ Á¸ÀçÇÑ´Ù. 
        if(!xmlHttp){ 
            if(window.XMLHttpRequest) { 
                xmlHttp    = new XMLHttpRequest(); 
            } else { 
                xmlHttp    = new ActiveXObject("Microsoft.XMLHTTP"); 
            } 
            this.xmlHttp    = xmlHttp; 
        } 

        //ºñµ¿±â(Asynchronous) : ¼­¹öÀÇ Ã³¸®¸¦ ±â´Ù¸®Áö ¾Ê°í 'ºñµ¿±â' ¿äÃ»ÀÌ °¡´ÉÇÏ´Ù'
        if (tf=='false')  xmlHttp.open('GET', URL, false); 
        else xmlHttp.open('GET', URL, true);  // ¸Å°³º¯¼ö: 1.Àü¼Û¹æ½Ä, 2.¿äÃ»ÇÒ ÆÄÀÏ(URL), 3.µ¿±â(false) /ºñµ¿±â(true-µðÆúÆ®)¿©ºÎ

        //xmlHttp.setRequestHeader( "Content-type:", "text/html");  //´Ù¸¥ µµ¸ÞÀÎ Á¢¼Ó°¡´ÉÇÏ°Ô
        xmlHttp.onreadystatechange = function() { 
            
            // readyState °¡ 4 °í status °¡ 200 ÀÏ °æ¿ì ¿Ã¹Ù¸£°Ô °¡Á®¿È 
            if(xmlHttp.readyState==4 && xmlHttp.status == 200 && xmlHttp.statusText=='OK') { 
                try { 
	                if (mode=='XML'){
			                var xmlData        = xmlHttp.responseXML; 
			                object.setXmlData(xmlData); 
	                }else{
			                var txtData        = xmlHttp.responseText; 
			                object.setTxtData(txtData); 
			                //return false;
	                }
			      } finally { 
			        object = null; 
			        xmlData= null;
			        txtData= null;
			      } 
                
            } 
           //else alert("Error : "+xmlHttp.readyState+' : '+xmlHttp.status+' : '+xmlHttp.statusText);
        } 
        xmlHttp.send(''); 

    } 

    this.getXmlRootNode        = function(nodes, rootName){ 
        var rootNode    = nodes.getElementsByTagName(rootName); 
	      try { 
	        return rootNode; 
	      } finally { 
	        rootNode = null; 
	      } 

    } 
} 
// Ajax »ç¿ëÀ» À§ÇÑ ±âº» ÄÞÆ÷³ÍÆ® End  



// Ajax¿¡¼­ ¸®ÅÏ¹ÞÀº XML NODE¸¦ JAVASCRIPT OBJECT Çü½ÄÀ¸·Î º¯È¯ Start 
function AjaxObject(){ 
    this.ac                = null; 
    this.xmlData        = null; 
    this.rootName        = null; 
    this.functionName    = null; 
    this.arguments        = new Array(); 

    this.inArray            = function(array, value){ 
        var result    = false; 

        for(var i=0; i < array.length; i++){ 
            if(array[i] == value){ 
                result    = true; 
                break; 
            } 
        } 
	      try { 
	        return result; 
	      } finally { 
	        result = null; 
	      } 

    } 


    this.getHttpRequest        = function(Url, functionName, fundata, mode, tf){ 
		        if(this.ac == null){ 
		            this.ac            = new AjaxDataControl(); 
		        } 
		        this.functionName    = functionName; 
		
		        for(var i=2; i <arguments.length; i++){ 
		            this.arguments.push(arguments[i]); 
		        } 
		        this.ac.getHttpRequest(Url, this, fundata, mode,tf); 
    } 




    this.setMakeObject        = function(nodeData){ 
        var resultObject    = new Object; 
        resultObject.length    = 0; 

        if(nodeData.hasChildNodes() ){ 
            var nodeChilds        = nodeData.childNodes; 
            var nodeNameList    = new Array(); 
            var isNodeChilds    = false; 

            for(var i = 0; i<nodeChilds.length;i++){ 

                if(nodeChilds[i].nodeType == '1'){ 

                    var returnObj    = this.setMakeObject(nodeChilds[i] ); 

                    if( typeof(returnObj) == "string"){ 
                        resultObject[ nodeChilds[i].nodeName ]    = this.setMakeObject(nodeChilds[i] ); 
                        resultObject.length    += 1; 
                    }else{ 

                        if(resultObject[ nodeChilds[i].nodeName ]){ 
                            resultObject[ nodeChilds[i].nodeName ].push( returnObj ); 
                        }else{ 
                            resultObject[ nodeChilds[i].nodeName ]    = new Array(); 
                            resultObject[ nodeChilds[i].nodeName ].push( returnObj ); 

                            resultObject.length    += 1; 
                        } 
                    } 
                    isNodeChilds    = true; 

                } 
            } 

            if(!isNodeChilds){ 
                resultObject    = nodeChilds[0].nodeValue; 
            }else{ 

            } 
        } 
	      try { 
	          return resultObject; 
	      } finally { 
	      	 nodeChilds   = null;
	      	 nodeNameList = null;
	      	 isNodeChilds = null;
	          resultObject = null; 
	      } 

    } 


    this.setMakeControl        = function(){ 
        if(this.xmlData != null){ 
            var rootNode    = this.ac.getXmlRootNode(this.xmlData, this.rootName); 
            var list        = this.setMakeObject(rootNode[0]); 
            var    args        = ""; 
           // for(var i=0; i<this.arguments.length; i++){ 
           //     if ( i > 0  ) args    += ",";
           //     args    += "this.arguments["+i+"]"; 
           // } 

            for(var i=0; i<this.arguments.length; i++){ 
                args    += ", this.arguments["+i+"]"; 
            } 
           var fn = eval( this.functionName+"(list "+args+")" ); 
        } else if(this.txtData != null){
        	  fn = eval( this.functionName+"("+this.txtData+")" ); 
        } 

        //fix start
        try {
          return fn;
        } finally {
          rootNode = null;
          fn = null;
          list = null;
          args = null;
        }
        //fix end
       
    } 

    this.setTxtData            = function(data){ 
    	  this.txtData        = data;
    	  this.setMakeControl(); 
    } 

    this.setXmlData            = function(data){ 
         this.xmlData        = data; 
         try{  
            this.rootName        = data.documentElement.nodeName; 
         }catch(e){
            try{
               this.rootName        = data.documentElement.nodeName;  
            }catch(e){
               return false;
	         }
         }  
         this.setMakeControl(); 
    } 

} 
/* Ajax¿¡¼­ ¸®ÅÏ¹ÞÀº XML NODE¸¦ JAVASCRIPT OBJECT Çü½ÄÀ¸·Î º¯È¯ End */ 


/* »ç¿ë¹ý Start*/ 
//    var aObj    = new AjaxObject;        // AjaxList ¼±¾ð 
//    aObj.getHttpRequest("test.xml", "displayBoardList", [ÀÎÀÚ°ª]);        //ÂüÁ¶Url, ¸®ÅÏ ÇÔ¼ö¸í 
//    ¸®ÅÏ ÇÔ¼ö¿¡´Â obj¸¦ ¹ÞÀ» ÀÎÀÚ ÇÊ¼ö!!! 
// 
//    ¸®ÅÏ ÇÔ¼ö¿¡, º¯È¯µÈ µ¥ÀÌÅÍ ÀÌ¿ÜÀÇ ÀÎÀÚ¸¦ ¹Þ°í ½ÍÀ¸¸é °è¼Ó ÀÌ¾î¼­ ¾²¼¼¿ä 
//    ¿¹] aObj.getHttpRequest("test.xml", "displayBoardList", "test", 1, "all", ... ); 
//    aObj.getHttpRequest(url_str, "dsptable","data",'XML','true');        //ÂüÁ¶Url, ¸®ÅÏ ÇÔ¼ö¸í, ¸®ÅÏdata, XML/TEXT, true/false 
//    aObj.getHttpRequest(url_str, "","",'TEXT','true');        //text ÀÚ·á·Î ¸®ÅÏ¹ÞÀ» °æ¿ì
//     function retnfunc(val){
//	      alert(val)
//    }

/* »ç¿ë¹ý End */ 

