﻿//==============================================================================
// 1. 기   능   명 : SELECT 객체함수
// 2. 작   성   자 : 함께하는 e세상 소프트밸리(softvalley.co.kr)
// 3. 작 성  일 자 : 2007.02.07
// 4. 최 근 변경일 : 2007.07.28
// 8. 라 이 센 스  : All right reserved Softvalley, 소스를 수정하지 마세요.
//                   (alltry@softvalley.co.kr)
/*
    Object Name: BizOnSelectBox(SelectBox객체)
    Method:
        SetRecordFirstUp;       맨위로올리기
        SetRecordUp;            항목올리기
        SetRecordDown;          항목내리기
        SetRecordLastDown;      맨아래로내리기
        SetRecordDelByVal       값으로 찾아 삭제하기
        SetRecordDel;           삭제하기
        SetRecordDelMulti;      다중삭제하기
        SetAllDel;              모두지우기
        SetAddPlus;             레코드추가하기
        SetReDisplayFormat;     지정된 포맷으로 화면을 새로고침함 
        
        SetChangeRnd;           난수를 생성하여 레코드 바꾸기
        SetSwap;                지정레코드를 서로 바꾸기
        SetChangeText;          명칭변경
        SetChangeValByVal;           값으로 찾아 값을변경
        SetChangeTextByVal      값으로 찾아 명칭변경하기
        
        GetSelectedValue;       선택된 항목의 값 취득
        GetSelectedText;        선택된 항목의 text 취득
        GetIsData;              항목이 있는지여부
        GetIsSelected;          선택되어있는지 여부
        GetIsSelectedMulti;     다중선택되었는지 여부(갯수반환)
        GetLength;              현재갯수
        GetSelectedPos;         현재선택순번(1~n), 위치가 아닌점참고
        GetRecordTxtByVal       값으로 찾아 txt반환하기
        GetObjOptionByVal       값으로 찾아 option obj반환
        
        ADD 20080622
        GetDataList            현재 SELECT박스에 있는 모든데이타를 구분자로 받는다.
*/
//==============================================================================

function BizOnSelectBox(formname,objname,subject) {
    this.formname           =formname;
    this.objname            =objname;
    this.subject            =subject;
    
    this.SetRecordFirstUp   =SetRecordFirstUp;      /* Add 2005.2.9 */
    this.SetRecordLastDown  =SetRecordLastDown;     /* Add 2005.2.9 */
    
    this.SetRecordUp        =SetRecordUp;
    this.SetRecordDown      =SetRecordDown;
    this.SetRecordDel       =SetRecordDel;
    this.SetRecordDelByVal  =SetRecordDelByVal;     /* Add 2005.11.01 */
    this.SetRecordDelMulti  =SetRecordDelMulti;     /* Add 2005.2.9 */
    this.SetAllDel          =SetAllDel;    
    this.SetAddPlus         =SetAddPlus;
    this.SetReDisplayFormat =SetReDisplayFormat;    
    
    this.SetChangeRnd       =SetChangeRnd;
    this.SetSwap            =SetSwap;
    
    this.SetChangeText      =SetChangeText;         /* add 2005.11.01 */
    this.SetChangeTextByVal =SetChangeTextByVal;    /* add 2005.11.01 */
    this.SetChangeValByVal  =SetChangeValByVal;          /* add 2006.01.09 */
    
    this.GetSelectedValue   =GetSelectedValue;
    this.GetSelectedText    =GetSelectedText;    
    this.GetIsData          =GetIsData;
    this.GetIsSelected      =GetIsSelected;
    this.GetIsSelectedMulti =GetIsSelectedMulti;    /* ADD 2005.2.9 */
    this.GetRecordTxtByVal  =GetRecordTxtByVal;     /* add 2005.11.01*/
    this.GetObjOptionByVal  =GetObjOptionByVal;     /* add 2005.11.01*/
    
    this.GetLength          =GetLength;             /* ADD 2005.2.9 */
    this.GetSelectedPos     =GetSelectedPos;        /* ADD 2005.2.9 */
    this.GetDateListValue        =GetDateListValue;           /* ADD 2009.6.22 */
    this.GetDateListText        =GetDateListText;           /* ADD 2009.6.22 */    
            
    
    /* 맨위로올리기: Add 2005.2.9 */
    function SetRecordFirstUp() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        if (!this.GetIsSelected()) {
            alert("항목을 선택해 주세요.");
            return;
        }
        
        /* 다중선택불가 */
        if (GetIsSelectedMulti()>1) {
            alert("하나의 자료만 가능합니다.");
            return;        
        }
        
        var fvalue  = this.GetSelectedValue();
        var ftext   = this.GetSelectedText(); 
        var nSetPos = obj1.selectedIndex;    
        var nTotal  = obj1.length;    
        
        /* 1보다 커야 한다 */
        if (nSetPos>0) {
            /* 현재위치의 것이후 모두 올리기 */
            for (var i=(nSetPos+1);i<=(nTotal-1);i++) {
                obj1.options[i-1].value   =obj1.options[i].value;
                obj1.options[i-1].text    =obj1.options[i].text;                
            }

            /* 모두 한개씩 내리기 */    
            for (var i=(nTotal-1);i>0;i--) {
                obj1.options[i].value   =obj1.options[i-1].value;
                obj1.options[i].text    =obj1.options[i-1].text;                
            }            

            /* 새로운거 넣기*/
            obj1.options[0].value   = fvalue;
            obj1.options[0].text    = ftext;

            obj1.selectedIndex=0;  
            this.SetReDisplayFormat(this.subject);
        }
    }
        
    /* 항목올리기 */
    function SetRecordUp() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        if (!this.GetIsSelected()) {
            alert("항목을 선택해 주세요.");
            return;
        }
        
        /* 다중선택불가 */
        if (GetIsSelectedMulti()>1) {
            alert("하나의 자료만 가능합니다.");
            return;        
        }
                
        var fvalue  = this.GetSelectedValue();
        var ftext   = this.GetSelectedText();    
        var nSetPos = obj1.selectedIndex;    
        
        /* 1보다 커야 한다 */
        if (nSetPos>0) {
            pvalue  = obj1.options[nSetPos-1].value;
            ptext   = obj1.options[nSetPos-1].text;
            /* 교환 */
            obj1.options[nSetPos-1].value   = fvalue;
            obj1.options[nSetPos-1].text    = ftext;
            obj1.options[nSetPos].value     = pvalue;
            obj1.options[nSetPos].text      = ptext;      
            obj1.selectedIndex=nSetPos-1;  
            this.SetReDisplayFormat(this.subject);
        }
    }
    
    /* 항목내리기 */
    function SetRecordDown() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        if (!this.GetIsSelected()) {
            alert("항목을 선택해 주세요.");
            return;
        }
        
        /* 다중선택불가 */
        if (GetIsSelectedMulti()>1) {
            alert("하나의 자료만 가능합니다.");
            return;        
        }        
        
        var fvalue  = this.GetSelectedValue();
        var ftext   = this.GetSelectedText();    
        var nSetPos = obj1.selectedIndex;  
        var nTotal  = obj1.length;    
        
        /* 최대치보다 작아야 */
        if (nSetPos<(nTotal-1)) {
            pvalue  = obj1.options[nSetPos+1].value;
            ptext   = obj1.options[nSetPos+1].text;
            obj1.options[nSetPos+1].value = fvalue;
            obj1.options[nSetPos+1].text = ftext;
            obj1.options[nSetPos].value = pvalue;
            obj1.options[nSetPos].text = ptext;        
            obj1.selectedIndex=nSetPos+1;  
            this.SetReDisplayFormat(this.subject);
        }
    }    
    
    /* 맨아래도 내리기 */
    function SetRecordLastDown() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        if (!this.GetIsSelected()) {
            alert("항목을 선택해 주세요.");
            return;
        }
        
        /* 다중선택불가 */
        if (GetIsSelectedMulti()>1) {
            alert("하나의 자료만 가능합니다.");
            return;        
        }
                
        var fvalue  = this.GetSelectedValue();
        var ftext   = this.GetSelectedText(); 
        var nSetPos = obj1.selectedIndex;    
        var nTotal  = obj1.length;    
        
       /* 최대치보다 작아야 */
       if (nSetPos<=(nTotal-1)) {
            /* 현재위치의 것이후 모두 올리기 */
            for (var i=(nSetPos+1);i<=(nTotal-1);i++) {
                obj1.options[i-1].value   =obj1.options[i].value;
                obj1.options[i-1].text    =obj1.options[i].text;                
            }

            /* 맨마지막에 넣기 */    
            obj1.options[nTotal-1].value   = fvalue;
            obj1.options[nTotal-1].text    = ftext;

            obj1.selectedIndex=nTotal-1;  
            this.SetReDisplayFormat(this.subject);
        }    
    }
    
    /* 값으로 찾아 삭제하기 */
    function SetRecordDelByVal(val) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        
        if (!this.GetIsData()) return;
        var nTotal  = obj1.length;    
        
        for (var i=(nTotal-1);i>=0;i--) {
            if (obj1.options[i].value==val) {
                obj1.options[i]=null;  
            }            
        }
    }        
    
    /* 삭제하기 */
    function SetRecordDel() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        if (!this.GetIsSelected()) {
            alert("항목을 선택해 주세요.");
            return;
        }
        
        /* 다중선택불가 */
        if (GetIsSelectedMulti()>1) {
            alert("하나의 자료만 가능합니다.");
            return;        
        }        
        
        var nSetPos = obj1.selectedIndex;  
        var nTotal  = obj1.length;    
        
        if ((nTotal-1)==nSetPos) {
            obj1.options[nSetPos]=null;  
        } else {
            /* 맨끝이 아니면 하나씩 앞으로 이동 */
            obj1.options[nSetPos]=null;  
        }
        this.SetReDisplayFormat(this.subject);
    }    
    
    
    /* 다중삭제하기 */
    function SetRecordDelMulti() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        var nTotal  = obj1.length;    
        
        for (var i=(nTotal-1);i>=0;i--) {
            if (obj1.options[i].selected) {
                obj1.options[i]=null;  
            }            
        }
        this.SetReDisplayFormat(this.subject);
    }     
    
    
    /*모두지우기*/
    function SetAllDel() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        
        var nSetPos = obj1.selectedIndex;  
        var nTotal  = obj1.length;    
        
        if (nTotal<1) return;
        
        for (i=(nTotal-1);i>=0;i--) {
            obj1.options[i]=null; 
        }        
    }    
        
    
    /* 레코드추가하기 */
    function SetAddPlus(txt,val) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
            
        try {
            /* 기등록되어있는지 여부조사 */
            var nLen = obj1.length;
            var i;
            var tmp;
            var isAdd=1;
            for (i=0;i<nLen;i++) {
                tmp = obj1.options[i].value;
                if (tmp==val) {
                    isAdd=0;
                    break;
                }
            }
            if (isAdd==1) {
                var opt1=new Option(txt,val);        
                obj1.options[nLen]=opt1;
                this.SetReDisplayFormat(this.subject);
            }
        } catch(e) {
        }
    }
    
    /* 레코드섞기 */
    function SetChangeRnd() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        var i,k;
        if (!this.GetIsData()) return;
            
        var nLen = obj1.length;
        if (nLen<2) {
           return;
        } else {    
            for(k=0;k<10;k++)
                for(i=0;i<nLen;i++) this.SetSwap(i,Math.floor(Math.random()*(nLen)));
            this.SetReDisplayFormat(this.subject);
        }
    }
    /* 서로바꾸기 */
    function SetSwap(a,b) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        var fvalue  =  obj1.options[a].value;
        var ftext   = obj1.options[a].text;   
        var pvalue  = obj1.options[b].value;
        var ptext   = obj1.options[b].text;
        obj1.options[b].value = fvalue;
        obj1.options[b].text = ftext;
        obj1.options[a].value = pvalue;
        obj1.options[a].text = ptext;      
    }
    
    
    /* 값으로 찾아 명칭변경하기 */
    function SetChangeTextByVal(val,txt) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        
        if (!this.GetIsData()) return;
        var nTotal  = obj1.length;    
        
        for (var i=(nTotal-1);i>=0;i--) {
            if (obj1.options[i].value==val) {
                obj1.options[i].text = txt;
                return true;
            }            
        }
        return false;
    }    
    
    /* 값으로 찾아 값을 바꾸기 */
    function SetChangeValByVal(val,chval) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        
        if (!this.GetIsData()) return;
        var nTotal  = obj1.length;    
        
        for (var i=(nTotal-1);i>=0;i--) {
            if (obj1.options[i].value==val) {
                obj1.options[i].value = chval;
                return true;
            }            
        }
        return false;  
    }
    
    
    /* 값으로 찾아 해당 option 객체반환 */
    function GetObjOptionByVal(val) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        
        if (!this.GetIsData()) return;
        var nTotal  = obj1.length;    
        
        for (var i=(nTotal-1);i>=0;i--) {
            if (obj1.options[i].value==val) {
                return obj1.options[i];
            }            
        }
        return "";
    }    
        
    
        
    /* 선택된 항목의 TEXT 변경 */    
    function SetChangeText(txt) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        if (!GetIsSelected()) return;
        obj1.options[obj1.selectedIndex].text = txt;
    }    
    
    /* 선택된 항목의 값 취득 */
    function GetSelectedValue() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        if (!GetIsSelected()) return;
        return obj1.options[obj1.selectedIndex].value;
    }    

    /* 선택된 항목의 TEXT 취득 */    
    function GetSelectedText() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        if (!GetIsSelected()) return;
        return obj1.options[obj1.selectedIndex].text;
    }
    
    /* 자료가 있는지 없는지 여부 */
    function GetIsData() {
        var f=document.forms[formname];
        if (f.elements[objname].length==0) {
            return false;
        }
        return true;
    }    
    
    /* 항목이 선택되어 있는지 없는지 여부 */
    function GetIsSelected() {
        var f=document.forms[formname];
        if (f.elements[objname].selectedIndex<0) {
            return false;
        }
        return true;
    }
    
    /* 
        다중선택이 되었는지 여부를 확인 
        0:미선택 
    */
    function GetIsSelectedMulti() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        var nLen = obj1.length;
        var nCount=0;
        
        for (var i=0;i<nLen;i++) {
            if (obj1.options[i].selected) {
                nCount = nCount+1
            }
        }
        return nCount;
    }
        
    
    /* 현재 객체내의 갯수를 반환 */
    function GetLength() {
        return document.forms[formname].elements[objname].length;
    }
    
    /* 현재 선택된 객체의 순번반환:위치가 아니다 */
    function GetSelectedPos() {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        if (!this.GetIsData()) return;
        if (!this.GetIsSelected()) {
            return -1;
        }
        
        return (obj1.selectedIndex+1);  
    }
         
    /* 값으로 찾아 txt반환하기 */
    function GetRecordTxtByVal(val) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];
        
        
        if (!this.GetIsData()) return;
        var nTotal  = obj1.length;    
        
        for (var i=(nTotal-1);i>=0;i--) {
            if (obj1.options[i].value==val) {
                return obj1.options[i].text;  
            }            
        }
        return false;
    }                 
             
    
    /* 
        지정된 포맷으로 화면을 새로고침함 
        SetReDisplayFormat("문제")
    */
    function SetReDisplayFormat(sFormat) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];    
        var nLen = obj1.length;
        var i,tmp,tmp2,npos,nl;
        
        if (sFormat=="") {
        } else {
            for (i=0;i<nLen;i++) {
                tmp = obj1.options[i].text;
                /* 문장을 만든다. */
                npos = tmp.indexOf("] ");
                if (npos<0) {
                    //tmp2 = "["+sFormat+" "+(i+1)+"] "+ tmp;        
                    tmp2 =  tmp;        
                } else {
                    tmp2 = tmp.substring(npos+2,tmp.length);
                    //tmp2 = "["+sFormat+" "+(i+1)+"] "+ tmp2;
                    tmp2 =  tmp2;
                }
                obj1.options[i].text=tmp2;
            }    
        }
    }    
    
    /* 
        지정한 포맷으로 option의 모든데이타를 반환
    */
    function GetDateListValue(sFormat) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];    
        var nLen = obj1.length;
        var i,tmp,tmp2,npos,nl;
        
        tmp2="";
        if (sFormat=="") {
        } else {
            for (i=0;i<nLen;i++) {
                tmp = obj1.options[i].value;
                if (tmp2=="") {
                    tmp2 = tmp;
                } else {
                    tmp2 = tmp2 + sFormat + tmp;                
                }
            }    
        }
        
        return tmp2;
    }        
    
    /* 
        지정한 포맷으로 option의 모든데이타를 반환
    */
    function GetDateListText(sFormat) {
        var f=document.forms[formname];
        var obj1=f.elements[objname];    
        var nLen = obj1.length;
        var i,tmp,tmp2,npos,nl;
        
        tmp2="";
        if (sFormat=="") {
        } else {
            for (i=0;i<nLen;i++) {
                tmp = obj1.options[i].text;
                if (tmp2=="") {
                    tmp2 = tmp;
                } else {
                    tmp2 = tmp2 + sFormat + tmp;                
                }
            }    
        }
        
        return tmp2;
    }            
}
