/**
 * SELECT 박스(Drop-Down)에 있는 모든 옵션을 삭제하는 함수
 * @param select HTML Form의 SELECT 객체(Drop-Down)
 */
function clearOptions(select) {
    if (!select) {
        return;
    }
    for (var i = select.options.length; i > 0; i--) {
        select.remove(i - 1);
    }
}

/**
 * SELECT 박스에 있는 모든 옵션을 선택하는 함수
 * @param select HTML Form의 SELECT 객체
 */
function selectAllOptions(select) {
    var size = select.options.length;
    for (var i = 0; i < size; i++) {
        select.options[i].selected = true;
    }
    return false;
}


/**
 * SELECT 박스에 있는 모든 옵션을 해제하는 함수
 * @param select HTML Form의 SELECT 객체
 */
function deselectAllOptions(select) {
    var size = select.options.length;
    for (var i = 0; i < size; i++) {
        select.options[i].selected = false;
    }
    return false;
}


/**
 * SELECT 박스에 있는 모든 옵션을 선택 여부를 반대로 변경하는 함수
 * @param select HTML Form의 SELECT 객체
 */
function changeAllOptions(select) {
    var size = select.options.length;
    for (var i = 0; i < size; i++) {
        if (select.options[i].selected) {
           select.options[i].selected = false;
        } else {
           select.options[i].selected = true;
        }
    }
    return false;
}


/**
 * SELECT 박스에 있는 선택된 데이터(Option)를 삭제하는 함수
 * @param select HTML Form의 SELECT 객체
 */
function dropOptions(select) {
    var size = select.options.length;
    for (var i = 0; i < size; i++)
    {
        if (select.options[i].selected)
        {
            select.options[i] = null;
            i--;
            size--;
        }
    }
    return false;
}


/**
 * SELECT 박스에 있는 모든 데이터(Option)를 삭제하는 함수
 * @param select HTML Form의 SELECT 객체
 */
function dropAllOptions(select) {
    selectAllOptions(select);
    dropOptions(select);
    return false;
}


/**
 * 하나의 HTML Form SELECT의 선택된 데이터(option)를 다른 HTML Form SELECT로 옮기는 함수
 * @param from 옮겨야 하는 데이터를 가지고 있는 HTML Form Select
 * @param to   데이터가 옮겨지는 HTML Form Select
 */
function moveOptions(from, to) {
    var size = from.options.length;
    for (var i = 0; i < size; i++) {
        if (from.options[i].selected) {
            to.options[to.options.length] 
                = new Option(from.options[i].text, from.options[i].value);
            from.options[i] = null;
            i--;
            size--;
        }
    }
    return false;
}


/**
 * 하나의 HTML Form SELECT의 모든 데이터(option)를 다른 HTML Form SELECT로 옮기는 함수
 * @param from 옮겨야 하는 데이터를 가지고 있는 HTML Form Select
 * @param to   데이터가 옮겨지는 HTML Form Select
 * @see        moveData()
 */
function moveAllOptions(from, to) {
    selectAllOptions(from);
    moveOptions(from, to);
    return false;
}


/**
 * HTML Form TextField의 값을 HTML Form Select로 추가하는 함수
 * @param data  데이터 객체
 * @param select HTML Form Select 객체
 */
function addTextToOptions(data, select) {
    select.options[select.options.length] = new Option(data, data);  
    return false;
}

/**
 * HTML 선택된 옵션을 위로 올린다.
 * @param select HTML Form Select 객체
 */
function upSelectedOptions(select) {

    /* select에 포함된 전체 option의 수 */
    var size = select.options.length;

    for (var i = 0; i < size; i++) {
        if (select.options[i].selected) {
        
            /* 맨 위의 option을 선택했는지를 확인한다. */
            if (i == 0) return false;
            
            var tempText = select.options[i - 1].text;
            var tempValue = select.options[i - 1].value;
            select.options[i - 1].text = select.options[i].text;
            select.options[i - 1].value = select.options[i].value;
            select.options[i - 1].selected = true;
            select.options[i].text = tempText;
            select.options[i].value = tempValue;
            select.options[i].selected = false;
        }
    }
    return false;
}


/**
 * HTML 선택된 옵션을 아래로 내린다.
 * @param select HTML Form Select 객체
 */
function downSelectedOptions(select) {
    /* select에 포함된 전체 option의 수 */
    var size = select.options.length;

    for (var i = size - 1; i >= 0; i--) {
        if (select.options[i].selected) {
        
            /* 맨 아래의 option을 선택했는지를 확인한다. */
            if (i == (size - 1)) return false;
            
            var tempText = select.options[i + 1].text;
            var tempValue = select.options[i + 1].value;
            select.options[i + 1].text = select.options[i].text;
            select.options[i + 1].value = select.options[i].value;
            select.options[i + 1].selected = true;
            select.options[i].text = tempText;
            select.options[i].value = tempValue;
            select.options[i].selected = false;
        }
    }
    return false;
}

/**
 * HTML 체크 박스를 모두 선택한다.
 * @param select HTML Form Checkbox 객체
 */
function selectAllCheckboxs(checkbox) {
    if (checkbox == null) return;
    
    /* 체크 박스가 하나인 경우에 대한 처리 */
    checkbox.checked = true;

    for (var i = 0; i < checkbox.length; i++) {
        checkbox[i].checked = true;
    }
    return true;
}

/**
 * HTML 채크 박스의 선택을 해제한다.
 * @param select HTML Form Checkbox 객체
 */
function deselectAllCheckboxs(checkbox) {
    if (checkbox == null) return;
    
    /* 체크 박스가 하나인 경우에 대한 처리 */
    checkbox.checked = false;
    
    for (var i = 0; i < checkbox.length; i++) {
        checkbox[i].checked = false;
    }
    return true;
}

/**
 * HTML 체크 박스의 선택 여부를 변경한다.
 * @param select HTML Form Checkbox 객체
 */
function changeAllCheckboxs(checkbox) {
    if (checkbox == null) return;
    
    /* 체크 박스가 하나인 경우에 대한 처리 */
    if (checkbox.checked) {
        checkbox.checked = false;
    } else {
        checkbox.checked = true; 
    }
    
    for (var i = 0; i < checkbox.length; i++) {
        if (checkbox[i].checked) {
            checkbox[i].checked = false;
        } else {
            checkbox[i].checked = true;
        }
    }
    return true;
}

/**
 * 특정 부분을 숨기거나 보여준다.
 * @param field : 숨기거나 보일 객체
 * @return false
 */
function showOrHide(obj) {
    var element = $(obj);
    if (element.style.display == "none") {
        element.style.display = "block";
    } else {
        element.style.display = "none";
    }
    return false;
}

/**
 * 선택한 라디오 버튼의 값을 반환한다.
 * @param radioButton 라디오 버튼
 * @return 선택한 라디오 버튼의 값
 */
function getRadioButtonValue(radioButton) {
    if (radioButton.length) {
        for (var i = 0; i < radioButton.length; i++) {
            if (radioButton[i].checked) {
                return radioButton[i].value;
            }
        }
    }
    return radioButton.value;
}
