/** some javascript functions about form */

/** Returns if a radio/checkbox group has been checked */
function isChecked(formElement) {
    if(formElement) {
        for(i=0;i<formElement.length;i++) {
            if(formElement[i].checked)
                return true;
        }
    }
    return false;
}

/** Returns element type of a form element */
function getElementType(formElement) {
    var type;
    if(formElement) {
        if(formElement.length)
            type = formElement[0].type;
        if((typeof(type) == 'undefined') || (type == 0))
            type = formElement.type;
    }
    return type;
}

/** Sets focus to a form element */
function setFocus(formElement) {
    if(formElement) {
        var type = getElementType(formElement);
        switch(type) {

            case 'undefined': break;

            case 'radio':
            case 'checkbox': 
                formElement[0].focus();
                break;

            default: formElement.focus();
    }
    }
}

/** Returns the value of a form element */
function getElementValue(formElement) {
    var value = "";
    if(formElement) {
        var type = getElementType(formElement);
        switch(type) {

            case 'undefined': break;

            case 'radio':
                for(var x=0; x < formElement.length; x++) {
                    if(formElement[x].checked == true) {
                        value = formElement[x].value;
                        break;
                    }
                }
                break;

            case 'select-multiple':
                var myArray = new Array();
                for(var x=0; x < formElement.length; x++) { 
                    if(formElement[x].selected == true) {
                        myArray[myArray.length] = formElement[x].value;
                    }
                }
                value = myArray;
                break;

            case 'checkbox': 
                var myArray = new Array();
                for(var x=0; x < formElement.length; x++) {
                    if(formElement[x].checked == true) {
                        myArray[myArray.length] = formElement[x].value;
                    }
                }
                value = myArray;
                break;
    
            default: value = formElement.value;
        }
    }
    return value;
}

/** Sets the value of a form element */
function setElementValue(formElement, value) {
    if(formElement) {
        var type = getElementType(formElement);
        switch(type) {

            case 'undefined': return;

            case 'radio':
                for(var x=0; x < formElement.length; x++) {
                    if(formElement[x].value == value) {
                        formElement[x].checked = true;
                        break;
                    }
                }
                break;

            case 'checkbox':
                for(var x=0; x < formElement.length; x++) {
                    if(formElement[x].value == value) {
                        formElement[x].checked = true;
                    }
                }
                break;

            case 'select-one':
            case 'select-multiple':
                for(var x=0; x < formElement.length; x++) { 
                    if(formElement[x].value == value) {
                        formElement[x].selected = true;
                    }
                }
                break;

            default: formElement.value = value;
        }
    }
}

/** Clears the value of a form element */
function clearElementValue(formElement) {
    if(formElement) {
        var type = getElementType(formElement);
        switch(type) {

            case 'undefined': return;

            case 'radio':
            case 'checkbox':
                for(var x=0; x < formElement.length; x++) {
                    formElement[x].checked = false;
                }
                break;

            case 'select-one':
            case 'select-multiple':
                for(var x=0; x < formElement.length; x++) { 
                    formElement[x].selected = false;
                }
                break;

            default: formElement.value = '';
        }
    }
}

/** Disables a form element */
function disableElement(formElement) {
    if(formElement) {
        var type = getElementType(formElement);
        switch(type) {

            case 'undefined': return;

            case 'radio':
            case 'checkbox':
                for(var x=0; x < formElement.length; x++) {
                    formElement[x].disabled = true;
                }
                break;

            default: formElement.disabled =  true;
        }
    }
}

/** returns form object of a form element */
function getForm(formElement) {
    if(formElement) {
        if(formElement.form) {
            return formElement.form;
        } else if(formElement.length) {
            if(formElement[0].form) {
                return formElement[0].form;
            }
        }
    }
}

/** Returns the value of a radio group. Using getElementValue instead. */
function getValue(formItem) {
    for(i=0;i<formItem.length;i++) {
        if(formItem[i].checked) {
            return formItem[i].value;
        }
    }
    return "";
}

/** Sets value of a radio group. Using setElementValue instead. */
function setValue(formItem, strValue) {
    for(i=0;i<formItem.length;i++) {
        if(formItem[i].value == strValue) {
            formItem[i].checked = true;
            break;
        }
    }
}

/** Clears all checked elements in a check box group. Using clearElementValue instead. */
function clearCheckBox(formItem) {
    for(i=0;i<formItem.length;i++) {
        formItem[i].checked = false;
    }
}

/** Select from a drop down list. Using setElementValue instead. */
function selectOption(formItem, strValue) {
    for(i=0;i<formItem.options.length;i++) {
        if(formItem.options[i].value == strValue) {
            formItem[i].selected = true;
            break;
        }
    }
}

/** Delays for some time. It seems it does not work in IE. */
function delay(gap) { /* gap is in millisecs */
    var then,now;
    then=new Date().getTime();
    now=then;
    while((now-then)<gap) {
        now=new Date().getTime();
    }
}
