function moverTodosSelect(contenedor, select_mover, select_from, select_to, from, to, clase) {
    $("#"+select_mover+" option:selected").each(function () {
        for (i=0; i<contenedor.length; i++) {
            if (contenedor[i].value == $(this).val()) {
                if (contenedor[i].id_padre) {
                // Solo lleva la hija y su padre
                    for (j=0; j<contenedor.length; j++) {
                        if (contenedor[j].value == contenedor[i].id_padre) {
                            contenedor[j].from = from;
                            contenedor[j].to = to;
                        }
                    }
                } else {
                /// LLeva al padre e hijas
                    if (contenedor[i].hijas > 0) {
                        for (j=0; j<contenedor.length; j++) {
                            if (contenedor[j].id_padre == $(this).val()) {
                                contenedor[j].from = from;
                                contenedor[j].to = to;
                            }
                        }
                    }
                }
                contenedor[i].from = from;
                contenedor[i].to = to;
            }
        }
    });
    organizarSelects(contenedor, select_from, select_to, clase);
}

function moverSelect(contenedor, value, select_from, select_to, from, to, clase) {
    for (i=0; i<contenedor.length; i++) {
        if (contenedor[i].value == value) {
            if (contenedor[i].id_padre) {
            // Solo lleva la hija y su padre
                for (j=0; j<contenedor.length; j++) {
                    if (contenedor[j].value == contenedor[i].id_padre) {
                        contenedor[j].from = from;
                        contenedor[j].to = to;
                    }
                }
            } else {
            /// LLeva al padre e hijas
                if (contenedor[i].hijas > 0) {
                    for (j=0; j<contenedor.length; j++) {
                        if (contenedor[j].id_padre == value) {
                            contenedor[j].from = from;
                            contenedor[j].to = to;
                        }
                    }
                }
            }
            contenedor[i].from = from;
            contenedor[i].to = to;
        }
    }
    organizarSelects(contenedor, select_from, select_to, clase);
}

function organizarSelects(contenedor, select_from, select_to, clase) {
    var aFrom = new Array;
    var aTo = new Array;
    var k = 0;
    var x = 0;
    for (i=0; i<contenedor.length; i++) {
        if (contenedor[i].id_padre) {
            // Es hija
            if (contenedor[i].from == true) {
                for (j=0; j<contenedor.length; j++) {
                    if (contenedor[j].id_padre == contenedor[i].id_padre && contenedor[j].from == true) {
                        bFrom = true;
                    }
                }
                if (bFrom) {
                    aFrom[k] = new Object();
                    aFrom[k].text = contenedor[i].padre;
                    aFrom[k].value = contenedor[i].id_padre;
                    k++;
                }
                aFrom[k] = new Object();
                aFrom[k].text = contenedor[i].text;
                aFrom[k].value = contenedor[i].value;
                aFrom[k].id_padre = contenedor[i].id_padre;
                k++;
            } else if (contenedor[i].to == true) {
                for (j=0; j<contenedor.length; j++) {
                    if (contenedor[j].id_padre == contenedor[i].id_padre && contenedor[j].to == true) {
                        bTo = true;
                    }
                }
                if (bTo) {
                    aTo[x] = new Object();
                    aTo[x].text = contenedor[i].padre;
                    aTo[x].value = contenedor[i].id_padre;
                    x++;
                }
                aTo[x] = new Object();
                aTo[x].text = contenedor[i].text;
                aTo[x].value = contenedor[i].value;
                aTo[x].id_padre = contenedor[i].id_padre;
                x++;
            }
        } else {
            // Es padre
            if (contenedor[i].from == true) {
                // Comprobamos que exista alguna hija
                if (contenedor[i].hijas > 0) {
                    for (j=0; j<contenedor.length; j++) {
                        if (contenedor[j].id_padre == contenedor[i].value && contenedor[j].from == true) {
                            bFrom = true;
                        }
                    }
                } else {
                    bFrom = true;
                }
                if (bFrom) {
                    aFrom[k] = new Object();
                    aFrom[k].text = contenedor[i].text;
                    aFrom[k].value = contenedor[i].value;
                    k++;
                }
            } else if (contenedor[i].to == true) {
                if (contenedor[i].hijas > 0) {
                    for (j=0; j<contenedor.length; j++) {
                        if (contenedor[j].id_padre == contenedor[i].value && contenedor[j].to == true) {
                            bTo = true;
                        }
                    }
                } else {
                    bTo = true;
                }
                if (bTo) {
                    aTo[x] = new Object();
                    aTo[x].text = contenedor[i].text;
                    aTo[x].value = contenedor[i].value;
                    x++;
                }
            }
        }
    }
    rellenarSelects(aFrom, aTo, select_from, select_to, clase);
}
function rellenarSelects(aFrom, aTo, select_from, select_to, clase) {
    $("#"+select_from).removeOption(/./);
    $("#"+select_to).removeOption(/./);
    for (i=0; i<aFrom.length; i++) {
        if (aFrom[i].id_padre) {
            $("#"+select_from).addOption(aFrom[i].value, String.fromCharCode(160,160,160)+"- "+aFrom[i].text, false);
        } else {
            $("#"+select_from).addOption(aFrom[i].value, "{PADRE}"+aFrom[i].text, false);
        }
    }
    for (i=0; i<aTo.length; i++) {
        if (aTo[i].id_padre) {
            $("#"+select_to).addOption(aTo[i].value, String.fromCharCode(160,160,160)+"- "+aTo[i].text, false);
        } else {
            $("#"+select_to).addOption(aTo[i].value, "{PADRE}"+aTo[i].text, false);
        }
    }
    $("#"+select_from).each(function(i, selected){
        $("option", this).each(function() {
            var texto = $(this).text();
            if (texto.search("{PADRE}") != -1) {
                $(this).addClass(clase);
                $(this).text(texto.replace("{PADRE}", ""));
            }
        })
    });
    $("#"+select_to).each(function(i, selected){
        $("option", this).each(function() {
            var texto = $(this).text();
            if (texto.search("{PADRE}") != -1) {
                $(this).addClass(clase);
                $(this).text(texto.replace("{PADRE}", ""));
            }
        })
    });
}