/*
 * Copyright 1997-2007 TENBYEN Inc. 
 * 
 * Licensed under the TENBYTEN License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.tenbyen.kr/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */ 
/**
 * <p>Grid Script</p>
 * @author IB.LEE
 * @since 2007-05-10
 * @version $Revision: 2.0 $ $Date: 2007-05-10 $
 */
var Grid2 = {
  Version: '3.0',
  prototypeVersion: parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1])
}
if((typeof Prototype=='undefined') || Grid2.prototypeVersion < 1.3)
      throw("Grid2 requires the Prototype JavaScript framework >= 1.3");

var Grid2Util = {
    writeActiveX: function (src) {
        document.write(src);
    },
    getEmailDiv: function(cellContent){
        var re = /([\w\W]*)(\s*(&lt;)[\.@\w\W]*(&gt;))/i ;
        if(cellContent.replace(re,"$1").replace(/\s*/i,"")==""){
            cellContent = "<span class=\"Load\" style=\"cursor:pointer;\" onclick=\"SendMail('"+cellContent+"');return false;\">"+cellContent+"</span>";
        }else{
            if(re.test(cellContent)){
                cellContent = cellContent.replace(re ,"<span class=\"Load\" style=\"cursor:pointer;\" onclick=\"SendMail('"+cellContent+"');return false;\">$1</span>");
            }else{
                cellContent = "<span class=\"Load\" style=\"cursor:pointer;\" onclick=\"SendMail('"+cellContent+"');return false;\">"+cellContent+"</span>";
            }
        }
        return cellContent;
    },
    getTagNotUse: function(cellContent){

        var retStr    = cellContent;

        var objRegExp = /\"|\&|\+|\'|\<|\>|\n|\r|\t/g;

        if(objRegExp.test(retStr))
        { 
            retStr = retStr.replace(/\"/g,'%22');
            retStr = retStr.replace(/\&/g,'%26');
            retStr = retStr.replace(/\+/g,'%2B');
            retStr = retStr.replace(/\'/g,'%27');
            retStr = retStr.replace(/\</g,'%26lt');
            retStr = retStr.replace(/\>/g,'%26gt');
            retStr = retStr.replace(/\n/g,' ');
            retStr = retStr.replace(/\r/g,' ');
            retStr = retStr.replace(/\t/g,' ');
        }
        return retStr;

    },
    getTagNotUseTEST: function(cellContent){

        var retStr    = cellContent;
        retStr = cellContent.replace(/\r|\n/g," ");
        return retStr;

    }

}

var Grid = Class.create();
Grid.prototype = {
   initialize: function(gridid,url,queryfile,queryname,debug,formname,async,rp,bDisplayPageno,bDisplayRecord,onSuccessFunc) {
      this.gridid = gridid ;
      this.url = url ;
      this.queryfile = queryfile ;
      this.queryname = queryname ;
      this.debug = debug ;
      this.arrColumns = new Array();
      this.isParseColumns = false ;
      this.arrGroup = new Array();
      this.groupSeq = 0 ;
      this.cp = 1;
      this.rp = rp;
      this.tcnt = 0 ;
      this.formname = formname ;
      this.frm = document.forms[formname] ;
      this.arrCheckVal = new Array();
      this.save_TotalRow = 0 ;
      this.save_RowPerPage = 0 ;
      this.dataListNo = 0 ;
      this.tableHeader ;
      this.tableHeaderHeight ;
      this.async = async;
      this.bDisplayPageno = bDisplayPageno;
      this.bDisplayRecord = bDisplayRecord;
      this.onSuccessFunc = onSuccessFunc;
   },
   getRow: function (reqCp,reqRp) {
        __debug("getRow() START ********************************************************** ");

        if(this.frm==undefined){
            this.frm = document.forms[this.formname] ;
        }
        
        var _starttime = __RunTimer();
        this.initTableHeader();
        this.cp = (reqCp==undefined)?1:reqCp;
        this.frm.method = "post" ;
        this.parseColumn();
        var thisgrid = this;

		/**		여기부터	**/
		
        var rsetFrms;
		if (navigator.appVersion.indexOf("MSIE")!=-1){   
			temp=navigator.appVersion.split("MSIE");
			version=parseFloat(temp[1]);
			if (version>=5.5) {
				rsetFrms = $(this.frm.name).getInputs();
			}
		}else{
			rsetFrms = this.frm.getInputs();
		}

		/**		여기까지	**/

		
        //var rsetFrms = $(this.frm.name).getInputs();
		//FireFox 미인식으로 인해 상위 주석블럭으로 구분 : 2008.09.03 신용철

        rsetFrms.each(function(f){
            if(f.type=="text"){
                f.value = f.value.replace(/\'/g,'’').replace(/\"/g,'”');//'->’ "->”
            }
        });

        var status = AjaxRequest.submit(
            this.frm ,
        {
            'async':this.async
            ,'url':this.url 
            ,'parameters':{ 'queryfile':this.queryfile,'queryname':this.queryname,'__cp':this.cp,'__rp':this.rp }
            ,'anotherParameter':'true'
            ,'onLoading':function(obj) {}
            ,'onError':function(req){ alert('Error!\nStatusText='+req.statusText+'\nContents='+req.responseText);}
            ,'onSuccess':function(obj){

                __debug("XML Data Load Complate:"+( __RunTimer() - _starttime)+" msec");
                _LodingIndicatorShow(false);
				
                if(thisgrid.debug){ 
                    __debug("queryfile:"+thisgrid.queryfile);
                    __debug("queryname:"+thisgrid.queryname);
                    __debug("__cp:"+thisgrid.cp);
                    __debug("__rp:"+thisgrid.rp);
                }
                if(Try.these(
                    function(){
                        eval("res = " + obj.responseText);
                        alert((res.Errorstring).replace(/\\n/g,''));
                        status = null;
                        return false;
                    },
                    function( ){return true;}
                    )){
                    thisgrid.clearCheckValue();
                    if(thisgrid.bDisplayRecord){
                        $("Total__"+thisgrid.gridid).innerHTML = "0";
                    }
                    if(thisgrid.bDisplayPageno){
                        $("Page__"+thisgrid.gridid).innerHTML = "1 / 1" ;
                    }

					// xml parsing
                    var xml = new JKL.ParseXML( obj.responseXML );
                    xml.setOutputArrayElements("record");

                    var data = xml.parse();
					var BROWSER = "";					
					var appName = navigator.appName;
					if(appName.indexOf("Microsoft") != -1)
						BROWSER = 'IE';
					else if(appName.indexOf("Opera") != -1)
						BROWSER = 'OP';
					else if(appName.indexOf("Netscape") != -1)
						BROWSER = 'MOZ';
					JSON.stringify(data);
					if(BROWSER == 'IE' && JSON.stringify(data)!="{}" ){
                        var dataList = data.rows.record;
                        var arrColumns = $A(thisgrid.arrColumns);
                        if(dataList[0]["_totalcnt"]==null){
                            alert(MsgUtils.getMsg(9003));//TOTALCNT 가 제공되지 않았습니다.
                            status = null;
                            return false;
                        }
                        $("TableRowHeader__"+thisgrid.gridid).show();
                        $("TableRowHeader__"+thisgrid.gridid).style.height = thisgrid.tableHeaderHeight;
                        __debug("초기화완료:"+( __RunTimer() - _starttime)+" msec");
                        var oldVars = {} ;
                        var oldElems = {} ;
                        for(var i=0; i<dataList.length; i++){
                            var no = thisgrid.addTableRow();
                            arrColumns.each(function(col){
							    var elem = document.getElementsByName(col)[no-1];
                                var onVal;
								if(elem.getAttribute('on_click')){
									onVal = elem.getAttribute('on_click');
								}
                                var onType = "onclick";
                                if(onVal==undefined){
                                    onVal = elem.getAttribute('on_mouseover');
                                    onType = "onmouseover";
                                }
                                if(onVal==undefined){
                                    onVal = elem.getAttribute('on_keyup');
                                    onType = "onkeyup";
                                }
                                var re ;
                                var func ;
                                var param ;
                                if(onVal!=undefined){
                                    onVal = onVal.trimAll();//strproto.js
                                    re = /([\w\W]*)\s*\(\s*([\w\W]*)\s*\)/i ;
                                    func = onVal.replace(re,"$1");
                                    param = onVal.replace(re,"$2").toLowerCase();
                                }
                                var dynaclassname = elem.getAttribute('dynaclassname');
                                var dynatext = elem.getAttribute('dynatext');
                                var comma = elem.getAttribute('comma');
                                var merge = elem.getAttribute('merge');
                                if(col.include('_chkbox')){
                                    var colVal = elem.getAttribute('column');
                                    var bGetseq = elem.getAttribute('getseq');
                                    if(colVal.indexOf(",") >= -1) {
                                        var arrTmp = new Array();
                                        $A(colVal.split(",")).each(function(_c){
                                            arrTmp.push(""+dataList[i]["_"+_c]);
                                        });
                                        if(bGetseq=="true"){
                                            elem.value = i+"!#!"+arrTmp.join("!#!");
                                        }else{
                                            elem.value = arrTmp.join("!#!");
                                        }
                                    }else{
                                        if(bGetseq=="true"){
                                            elem.value = i+"!#!"+dataList[i]["_"+colVal];
                                        }else{
                                            elem.value = dataList[i]["_"+colVal];
                                        }
                                    }
                                    if(func!=undefined){
                                        Event.observe(elem, 'click', eval(func));
                                    }
                                }else if(col.include('_radio')){    
                                    var colVal = elem.getAttribute('column');
                                    if(colVal.indexOf(",") >= -1) {
                                        var arrTmp = new Array();
                                        $A(colVal.split(",")).each(function(_c){
                                            arrTmp.push(""+dataList[i]["_"+_c]);
                                        });
                                        elem.value = arrTmp.join("!#!");
                                    }else{
                                        elem.value = dataList[i]["_"+colVal];
                                    }
                                    if(func!=undefined){
                                        Event.observe(elem, 'click', eval(func));
                                    }
                                }else if(col.include('_input')){
                                    var colVal = elem.getAttribute('column');
                                    //__debug(colVal+" ### "+dataList[i]["_"+colVal]);
                                    elem.value = (dataList[i]["_"+colVal]==undefined)?"":dataList[i]["_"+colVal];
                                    if(onVal!=undefined){
                                        $(elem).observe('keyup',eval(func));
                                    }
                                }else{
                                    if(onVal!=undefined){
                                        if(param=="") {
                                            elem.innerHTML = "<span "+onType+"=\""+func+"()\">"+GridUtils.NUL(dataList[i][col])+"</span>";
                                        }else if(param.indexOf(",") > -1) {
                                            var arrTmp = new Array();
                                            $A(param.split(",")).each(function(_c){
                                                if(/\'+[\w\W]*\'$/.test( _c )||_c=="this"||_c=="event"){
                                                    arrTmp.push(_c);
                                                }else{
                                                    arrTmp.push("'"+GridUtils.NUL(dataList[i]["_"+_c])+"'");
                                                }
                                            });
                                            if(col.include('_grid_button')){
                                                if(!dynaclassname.blank()){
                                                    $(elem).toggleClassName(GridUtils.NUL(dataList[i]["_"+dynaclassname]));
                                                }
                                                if(!dynatext.blank()){
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"("+arrTmp.join(",")+"); \">"+(GridUtils.NUL(dataList[i]["_"+dynatext]))+"</span>";
                                                }else{
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"("+arrTmp.join(",")+"); \">"+elem.innerHTML+"</span>";
                                                }
                                            }else{

                                                var _fval = "<span "+onType+"=\""+func+"("+arrTmp.join(",")+"); \">"+GridUtils.NUL(dataList[i][col])+"</span>";
                                                GridUtils.MERGE(_fval,merge,elem,oldVars,oldElems,col);
                                            }
                                        }else{
                                            if(col.include('_grid_button')){
                                                if(!dynaclassname.blank()){
                                                    $(elem).toggleClassName(GridUtils.NUL(dataList[i]["_"+dynaclassname]));
                                                }
                                                if(!dynatext.blank()){
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"('"+GridUtils.NUL(dataList[i]["_"+param])+"')\">"+(GridUtils.NUL(dataList[i]["_"+dynatext]))+"</span>";
                                                }else{
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"('"+GridUtils.NUL(dataList[i]["_"+param])+"')\">"+elem.innerHTML+"</span>";
                                                }
                                            }else{

                                                var _fval = "<span "+onType+"=\""+func+"('"+dataList[i]["_"+param]+"')\">"+GridUtils.NUL(dataList[i][col])+"</span>";
                                                GridUtils.MERGE(_fval,merge,elem,oldVars,oldElems,col);

                                            }
                                        }
                                    }else{
                                        if(col.include('_grid_button')){
                                            if(!dynaclassname.blank()){
                                                $(elem).toggleClassName(GridUtils.NUL(dataList[i]["_"+dynaclassname]));
                                            }
                                        }else{
                                            if(comma=="true"){
                                                elem.innerHTML = getAddComma(GridUtils.NUL(dataList[i][col]));//autoform.js에의존함
                                            }else{

                                                var _fval = ""+GridUtils.NUL(dataList[i][col]);
                                                GridUtils.MERGE(_fval,merge,elem,oldVars,oldElems,col);

                                            }
                                        }
                                    }
                                }
                            });
                        }
                        __debug("Display Complate:"+( __RunTimer() - _starttime)+" msec");
                        thisgrid.setPageNo(dataList[0]["_totalcnt"],thisgrid.rp);
                        if(thisgrid.bDisplayPageno){
                            if(reqCp==undefined){
                                GridUtils.setPage(thisgrid,0);
                            }else{
                                GridUtils.setPage(thisgrid);
                            }
                        }
                    }else if(BROWSER == 'MOZ' && JSON.stringify(data)!="{\"rows\":\"\\n\"}" ){
                        var dataList = data.rows.record;
                        var arrColumns = $A(thisgrid.arrColumns);
                        if(dataList[0]["_totalcnt"]==null){
                            alert(MsgUtils.getMsg(9003));//TOTALCNT 가 제공되지 않았습니다.
                            status = null;
                            return false;
                        }
                        $("TableRowHeader__"+thisgrid.gridid).show();
                        $("TableRowHeader__"+thisgrid.gridid).style.height = thisgrid.tableHeaderHeight;
                        __debug("초기화완료:"+( __RunTimer() - _starttime)+" msec");
                        var oldVars = {} ;
                        var oldElems = {} ;
                        for(var i=0; i<dataList.length; i++){
                            var no = thisgrid.addTableRow();
                            arrColumns.each(function(col){
							    var elem = document.getElementsByName(col)[no-1];
                                var onVal;
								if(elem.getAttribute('on_click')){
									onVal = elem.getAttribute('on_click');
								}
                                var onType = "onclick";
                                if(onVal==undefined){
                                    onVal = elem.getAttribute('on_mouseover');
                                    onType = "onmouseover";
                                }
                                if(onVal==undefined){
                                    onVal = elem.getAttribute('on_keyup');
                                    onType = "onkeyup";
                                }
                                var re ;
                                var func ;
                                var param ;
                                if(onVal!=undefined){
                                    onVal = onVal.trimAll();//strproto.js
                                    re = /([\w\W]*)\s*\(\s*([\w\W]*)\s*\)/i ;
                                    func = onVal.replace(re,"$1");
                                    param = onVal.replace(re,"$2").toLowerCase();
                                }
                                var dynaclassname = elem.getAttribute('dynaclassname');
                                var dynatext = elem.getAttribute('dynatext');
                                var comma = elem.getAttribute('comma');
                                var merge = elem.getAttribute('merge');
                                if(col.include('_chkbox')){
                                    var colVal = elem.getAttribute('column');
                                    var bGetseq = elem.getAttribute('getseq');
                                    if(colVal.indexOf(",") >= -1) {
                                        var arrTmp = new Array();
                                        $A(colVal.split(",")).each(function(_c){
                                            arrTmp.push(""+dataList[i]["_"+_c]);
                                        });
                                        if(bGetseq=="true"){
                                            elem.value = i+"!#!"+arrTmp.join("!#!");
                                        }else{
                                            elem.value = arrTmp.join("!#!");
                                        }
                                    }else{
                                        if(bGetseq=="true"){
                                            elem.value = i+"!#!"+dataList[i]["_"+colVal];
                                        }else{
                                            elem.value = dataList[i]["_"+colVal];
                                        }
                                    }
                                    if(func!=undefined){
                                        Event.observe(elem, 'click', eval(func));
                                    }
                                }else if(col.include('_radio')){    
                                    var colVal = elem.getAttribute('column');
                                    if(colVal.indexOf(",") >= -1) {
                                        var arrTmp = new Array();
                                        $A(colVal.split(",")).each(function(_c){
                                            arrTmp.push(""+dataList[i]["_"+_c]);
                                        });
                                        elem.value = arrTmp.join("!#!");
                                    }else{
                                        elem.value = dataList[i]["_"+colVal];
                                    }
                                    if(func!=undefined){
                                        Event.observe(elem, 'click', eval(func));
                                    }
                                }else if(col.include('_input')){
                                    var colVal = elem.getAttribute('column');
                                    //__debug(colVal+" ### "+dataList[i]["_"+colVal]);
                                    elem.value = (dataList[i]["_"+colVal]==undefined)?"":dataList[i]["_"+colVal];
                                    if(onVal!=undefined){
                                        $(elem).observe('keyup',eval(func));
                                    }
                                }else{
                                    if(onVal!=undefined){
                                        if(param=="") {
                                            elem.innerHTML = "<span "+onType+"=\""+func+"()\">"+GridUtils.NUL(dataList[i][col])+"</span>";
                                        }else if(param.indexOf(",") > -1) {
                                            var arrTmp = new Array();
                                            $A(param.split(",")).each(function(_c){
                                                if(/\'+[\w\W]*\'$/.test( _c )||_c=="this"||_c=="event"){
                                                    arrTmp.push(_c);
                                                }else{
                                                    arrTmp.push("'"+GridUtils.NUL(dataList[i]["_"+_c])+"'");
                                                }
                                            });
                                            if(col.include('_grid_button')){
                                                if(!dynaclassname.blank()){
                                                    $(elem).toggleClassName(GridUtils.NUL(dataList[i]["_"+dynaclassname]));
                                                }
                                                if(!dynatext.blank()){
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"("+arrTmp.join(",")+"); \">"+(GridUtils.NUL(dataList[i]["_"+dynatext]))+"</span>";
                                                }else{
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"("+arrTmp.join(",")+"); \">"+elem.innerHTML+"</span>";
                                                }
                                            }else{

                                                var _fval = "<span "+onType+"=\""+func+"("+arrTmp.join(",")+"); \">"+GridUtils.NUL(dataList[i][col])+"</span>";
                                                GridUtils.MERGE(_fval,merge,elem,oldVars,oldElems,col);
                                            }
                                        }else{
                                            if(col.include('_grid_button')){
                                                if(!dynaclassname.blank()){
                                                    $(elem).toggleClassName(GridUtils.NUL(dataList[i]["_"+dynaclassname]));
                                                }
                                                if(!dynatext.blank()){
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"('"+GridUtils.NUL(dataList[i]["_"+param])+"')\">"+(GridUtils.NUL(dataList[i]["_"+dynatext]))+"</span>";
                                                }else{
                                                    elem.innerHTML = "<span "+onType+"=\""+func+"('"+GridUtils.NUL(dataList[i]["_"+param])+"')\">"+elem.innerHTML+"</span>";
                                                }
                                            }else{

                                                var _fval = "<span "+onType+"=\""+func+"('"+dataList[i]["_"+param]+"')\">"+GridUtils.NUL(dataList[i][col])+"</span>";
                                                GridUtils.MERGE(_fval,merge,elem,oldVars,oldElems,col);

                                            }
                                        }
                                    }else{
                                        if(col.include('_grid_button')){
                                            if(!dynaclassname.blank()){
                                                $(elem).toggleClassName(GridUtils.NUL(dataList[i]["_"+dynaclassname]));
                                            }
                                        }else{
                                            if(comma=="true"){
                                                elem.innerHTML = getAddComma(GridUtils.NUL(dataList[i][col]));//autoform.js에의존함
                                            }else{

                                                var _fval = ""+GridUtils.NUL(dataList[i][col]);
                                                GridUtils.MERGE(_fval,merge,elem,oldVars,oldElems,col);

                                            }
                                        }
                                    }
                                }
                            });
                        }
                        __debug("Display Complate:"+( __RunTimer() - _starttime)+" msec");
                        thisgrid.setPageNo(dataList[0]["_totalcnt"],thisgrid.rp);
                        if(thisgrid.bDisplayPageno){
                            if(reqCp==undefined){
                                GridUtils.setPage(thisgrid,0);
                            }else{
                                GridUtils.setPage(thisgrid);
                            }
                        }
						Try.these(function(){
							setTimeout("parent._IframeResize('_FrameList')",100);
							//resizeFrame();
						});
                    }else{
                        if(thisgrid.bDisplayPageno){
                            thisgrid.setPageNo(0,thisgrid.rp);
                            GridUtils.setPage(thisgrid,0);
                        }
                        //$("TableRowArea__"+thisgrid.gridid).innerHTML = "<table width='100%'><tr><td height='80' align='center'>조회 결과가 없습니다."+MsgUtils.getMsg(5001)+"</td></tr></table>" ;
                        $("TableRowArea__"+thisgrid.gridid).innerHTML = "<table width='100%'><tr><td height='80' align='center'>조회 결과가 없습니다.</td></tr></table>" ;
                        $("TableRowArea__"+thisgrid.gridid).show();
                        $("TableRowHeader__"+thisgrid.gridid).show();
                    }
                    $("LodingIndicator__"+thisgrid.gridid).hide();
                }
                thisgrid.onSuccessFunc();
                var _endtime = __RunTimer();
                __debug("Process End:"+(_endtime - _starttime)+" msec");
            }
        });
        status = null;
    },
   setPageNo : function (TotalRow,RowPerPage){
       var noMax = Math.ceil(TotalRow / RowPerPage);
       if(this.bDisplayRecord){
           $("Total__"+this.gridid).innerHTML = getAddComma(TotalRow);
       }

       if(this.bDisplayPageno){
		   if(TotalRow != 0){
			   $("Page__"+this.gridid).innerHTML = getAddComma(""+this.cp) +" / "+ getAddComma(""+noMax) ;

			   var str = new StringBuffer();
			   this.arrGroup = new Array();
			   
			   for(var i=1;i<=noMax;i++){
				   var k = i%10 ;
				   var iBar = (i-1)%10 ;
				   var styClass = (i==this.cp)?"GridPageNoDisp_pageno_on":"GridPageNoDisp_pageno";
				   if(iBar>0){
					   str.append("<img src='/lib/grid/images/bar01.gif' width='1' height='8'>");
				   }
				   str.append("&nbsp;&nbsp;<span onclick='GridUtils.getRow("+this.gridid+","+i+","+this.rp+")' class='"+styClass+"'>"+i+"</span>&nbsp;&nbsp;");
				   if(k==0){
					   this.arrGroup.push(str);
					   str = new StringBuffer();
				   }
				   if(i==noMax && k!=0){
					   this.arrGroup.push(str);
				   }
			   }
				this.save_TotalRow = TotalRow ;
				this.save_RowPerPage = RowPerPage ;
		   }else{
			   $("Page__"+this.gridid).innerHTML = "0 / 0";
		   }
       }
   },
   parseColumn : function (){
       if(!this.isParseColumns){
            var thisgrid = this;
            var parse = $A($("TableRowSource__"+this.gridid).descendants());
            parse.each(function(elem){
                if(elem.className.include("__gridcolumn")){
                    thisgrid.arrColumns.push(elem.id);
                }
            });
            this.isParseColumns = true ;
       }
   },
   addTableRow : function (){
        var thisgrid = this; 
        var arrRows = $("TableRow__"+this.gridid).getElementsBySelector( 'tr' );
        arrRows.each(function(rowElem){
            var arrHeaders = $("TableRowHeader__"+thisgrid.gridid).getElementsBySelector( 'tr' ); 
            if(arrHeaders.length>0){
                var RowColorClassname = (thisgrid.dataListNo%2==0)?"GridRow2":"GridRow1";
                new Insertion.After(arrHeaders[arrHeaders.length-1], "<tr id='"+thisgrid.gridid+"_DataRow_"+thisgrid.dataListNo+"' class='"+RowColorClassname+"' orgClass='"+RowColorClassname+"'>"+rowElem.innerHTML+"</tr>");
            }
        });
        this.dataListNo ++ ;
        return this.dataListNo ;
   },
   clearTableRow : function (){
        $("TableRowHeader__"+this.gridid).innerHTML = this.tableHeader;
        this.dataListNo = 0 ;
   },
   initTableHeader : function (){
       $("TableRowArea__"+this.gridid).hide();
       $("TableRowArea__"+this.gridid).innerHTML = "" ; 
       //this.tableHeaderHeight = $("TableRowHeader__"+this.gridid).getHeight();	   
       this.tableHeaderHeight = 0;
       $("TableRowHeader__"+this.gridid).hide();
       //$("TableRowHeader__"+this.gridid).style.height = 0;
       if(this.tableHeader==undefined){
           this.tableHeader = $("TableRowHeader__"+this.gridid).innerHTML;
       }
       if(this.tableHeaderHeight>50){
            $("LodingIndicator__"+this.gridid).style.height = this.tableHeaderHeight;
       }
       $("LodingIndicator__"+this.gridid).show();
       this.clearTableRow();
   },
   changeTableRow : function (obj){
        $("TableRowArea__"+this.gridid).innerHTML = "" ; 
        var rowcnt = +(obj.value) ; 
        this.rp = rowcnt ;
        this.getRow(1,rowcnt);
   },
   setCheckValue: function (obj){
        if(obj.checked==true){
            if(obj.type=='radio'){
                this.clearCheckValue();
                this.arrCheckVal[this.arrCheckVal.length] = obj.value;
                obj.checked = true ;
            }else{
                this.arrCheckVal[this.arrCheckVal.length] = obj.value;
            }
            var selTrElem = obj.parentNode.parentNode;
            $A(document.getElementsByName(""+selTrElem.id)).each(function(elem){
                elem.className = "GridSelectRow";
            });
        }else{
            this.arrCheckVal = this.arrCheckVal.without(obj.value);
            var selTrElem = obj.parentNode.parentNode;
            var orgClass = selTrElem.getAttribute("orgClass");
            $A(document.getElementsByName(""+selTrElem.id)).each(function(elem){
                elem.className = orgClass;
            });
        }
        //this.arrCheckVal.sort();
    },
    getCheckValue: function(){
        var reStr = "";
        for(var i=0;i<this.arrCheckVal.length;i++){
            if(i>0)
                reStr += "^@@^";
            reStr += this.arrCheckVal[i];
        }
        return reStr;
    },
    clearCheckValue: function(){
        this.arrCheckVal.clear();
        var chkboxs = $("frm__"+this.gridid).getInputs("checkbox");
        chkboxs.each(function(cb){
            cb.checked = false ;
        });
        var chkboxs = $("frm__"+this.gridid).getInputs("radio");
        chkboxs.each(function(cb){
            cb.checked = false ;
        });
    },
    hideCheck: function(){
        this.arrCheckVal.clear();
        var chkboxs = $("frm__"+this.gridid).getInputs("checkbox");
        chkboxs.each(function(cb){
            cb.checked = false ;
        });
    }
}


var GridUtils = {
   setPage: function (GridObj,reqGroupSeq){
       if(reqGroupSeq==undefined) reqGroupSeq = GridObj.groupSeq ;
       GridObj.groupSeq = reqGroupSeq ;

       var prevGroup ;
       var nextGroup ;

       prevGroup = (reqGroupSeq>0) ? reqGroupSeq-1 : prevGroup = -1 ;
       nextGroup = (reqGroupSeq<GridObj.arrGroup.length-1) ? reqGroupSeq+1 : nextGroup = -1 ;

       var str = new StringBuffer();
	   if(GridObj.arrGroup[reqGroupSeq] != undefined){
		   str.append("<table width=\"100%\"><tr><td align=\"center\"><table><tr><td style='text-align:center'>");
		   if(prevGroup==-1){
			   str.append(" <div class='GridPageNoDisp_prev_off'></div> ");
		   }else{
			   str.append(" <div onclick='GridUtils.setPage("+GridObj.gridid+","+prevGroup+")' class='GridPageNoDisp_prev_on'></div> ");
		   }
		   str.append("</td><td class='GridPageNoDisp_pageno'>"+GridObj.arrGroup[reqGroupSeq]+"</td><td>");
		   if(nextGroup==-1){
			   str.append(" <div class='GridPageNoDisp_next_off'></div> ");
		   }else{
			   str.append(" <div onclick='GridUtils.setPage("+GridObj.gridid+","+nextGroup+")'  class='GridPageNoDisp_next_on'></div> ");
		   }
		   str.append("</td></tr></table></td></tr></table>");
	   }
       $("page_area_"+GridObj.gridid).innerHTML = str ;
   },
   getRow: function (GridObj,reqCp,reqRp){
       GridObj.getRow(reqCp,reqRp);
   },
   NUL: function(str){
        if(str==null||str==undefined||str=="undefined"){
            return "&nbsp;";
        }else{
            str = str.replace(/&/g,"&amp;");
            return str;
        }
   },
   MERGE : function(_fval,merge,elem,oldVars,oldElems,col){
        if(_fval==''||_fval==undefined||merge!="true"){
            elem.innerHTML = _fval;
        }else{
            if(oldVars[col]!=_fval){
                elem.innerHTML = _fval;
                oldVars[col] = _fval;
                oldElems[col] = elem.parentNode;
            }else{
                elem.parentNode.style.display = "none" ;
                oldElems[col].rowSpan = oldElems[col].rowSpan + 1 ;
                oldElems[col].style.backgroundColor = "#FFFFFF" ;
                elem.innerHTML = "&nbsp;";
            }
        }
   }
}


var dataLoader = Class.create();
dataLoader.prototype = {
   initialize: function(frm,obj,onSuccessFunction,bAutoMapping) {
      this.onSuccessFunction = onSuccessFunction ;
      this.frm = frm ;
      this.obj = obj ;
      this.root_parts = null ;
      this.bAutoMapping = bAutoMapping ;
      this.onSuccess();
   },
   onSuccess: function (){
        var thisLoader = this;
        var frm = this.frm;
        var obj = this.obj;
        //_LodingIndicatorShow(false);
        if(Try.these(
            function(){
                eval("res = " + obj.responseText);
                alert((res.Errorstring).replace(/\\n/g,''));
                return false;
            },
            function(){return true;}
            )){
            var xml = new JKL.ParseXML( obj.responseXML );
            xml.setOutputArrayElements(["root_part","record"]);
            var data = xml.parse();
            //alert(JSON.stringify(data));
            if(JSON.stringify(data)!="{}"){
                thisLoader.root_parts = data.root.root_part;
                var _partno = 0 ;
                if(thisLoader.bAutoMapping){
                    thisLoader.root_parts.each(function(root_part){
                        if(JSON.stringify(root_part)!="{}"){
                            var dataList = root_part.rows.record;
                            var _keys = Object.keys(dataList[0]);
                            _keys.each(function(key){
                                var __k = thisLoader.left_del(key);
                                for(var i=0;i<dataList.length;i++){
                                    thisLoader.FindFormType(i,__k,key,dataList[i]);
                                }
                            });
                        }
                        _partno++;
                    });
                }
                thisLoader.onSuccessFunction(thisLoader.frm,thisLoader.root_parts);
            }
			Try.these(
				function(){
					resizeFrame();
					parent.DYNIFS.resize('_content2');
			});
        }
   },
   left_del:function (str){
        var objRegExp = /^(_)/;
        if(objRegExp.test(str))
        {
            return str.replace(objRegExp,'');
        }
        return str;
   },
   FindFormType:function (seq,objname,key,dataList){
       var frm = this.frm;
       Try.these(
           function(){
               var obj = frm[""+objname];
               if(obj.value==undefined){
                   ERR.value = "";//강제적으로에러발생
               }
               obj.value = dataList[key];
           },
           function(){
               var obj = $(objname);
               if(obj.type=="select-one"){
                   ERR.value = "";//강제적으로에러발생
               }
               obj.innerHTML = dataList[key];
           }
       );
   }
}

