function ta_updateRSIfNeeded() {
    _ta_checkForUpdate();
    if (ta_upd_rooms) {
        _ta_s_updateRooms(document.searchForm.ts_adults, document.searchForm.ts_ch_2, document.searchForm.ts_room_count, document.searchForm.ts_room_combinations, null);
        ta_upd_rooms = false;
    }
    if (ta_settlingEn && ta_upd_settling) {
        _ta_s_updateSettling();
        ta_saveRoomCombis(document.searchForm.ts_room_combinations);
        ta_handleSettlingMenu();
        ta_upd_settling = false;
    }
    _ta_saveCurrent();
}

function ta_initRooms() {
    _ta_s_updateRooms(document.searchForm.ts_adults, document.searchForm.ts_ch_2, document.searchForm.ts_room_count, document.searchForm.ts_room_combinations, null);
}

var roomsDiscarded = false;

function ta_initSetting() {
    if (document.searchForm.ts_room_count.selectedIndex == -1)
        document.searchForm.ts_room_count.selectedIndex = 0;
    if (ta_settlingEn)
        _ta_s_updateSettling();
}
function ta_rs_initDone() {
    if (ta_settlingEn && document.searchForm.ts_room_combinations.selectedIndex == -1)
        document.searchForm.ts_room_combinations.selectedIndex = 0;
    _ta_saveCurrent();
}

function ta_saveCurrentGroup() {
    _ta_saveCurrent();
}

var ta_cur_adults = -1;
var ta_cur_w_children = -1;
var ta_cur_c_2 = -1;
var ta_cur_cg1 = -1;
var ta_cur_cg2 = -1;
var ta_cur_cg3 = -1;
var ta_cur_cg4 = -1;
var ta_cur_rooms = -1;
var ta_cur_setting = -1;

var ta_upd_rooms = false;
var ta_upd_settling = false;

function _ta_saveCurrent() {
    ta_cur_adults = document.searchForm.ts_adults.selectedIndex;
    ta_cur_w_children = document.searchForm.ts_with_children;
    ta_cur_c_2 = document.searchForm.ts_ch_2.selectedIndex;
    if (document.searchForm.ts_ch_gr1)
        ta_cur_cg1 = document.searchForm.ts_ch_gr1.selectedIndex;
    if (document.searchForm.ts_ch_gr2)
        ta_cur_cg2 = document.searchForm.ts_ch_gr2.selectedIndex;
    if (document.searchForm.ts_ch_gr3)
        ta_cur_cg3 = document.searchForm.ts_ch_gr3.selectedIndex;
    if (document.searchForm.ts_ch_gr4)
        ta_cur_cg4 = document.searchForm.ts_ch_gr4.selectedIndex;
    if (ta_roomsEn)
        ta_cur_rooms = document.searchForm.ts_room_count.selectedIndex;
    if (ta_settlingEn)
        ta_cur_settling = document.searchForm.ts_room_combinations.selectedIndex;
}

function _ta_checkForUpdate() {
    if (ta_cur_adults != document.searchForm.ts_adults.selectedIndex) {
        ta_upd_rooms = true;
        ta_upd_settling = true;
    } else if  (ta_cur_c_2 != document.searchForm.ts_ch_2.selectedIndex ||
                (document.searchForm.ts_ch_gr1 && ta_cur_cg1 != document.searchForm.ts_ch_gr1.selectedIndex) ||
                (document.searchForm.ts_ch_gr2 && ta_cur_cg2 != document.searchForm.ts_ch_gr2.selectedIndex) ||
                (document.searchForm.ts_ch_gr3 && ta_cur_cg3 != document.searchForm.ts_ch_gr3.selectedIndex) ||
                (document.searchForm.ts_ch_gr4 && ta_cur_cg4 != document.searchForm.ts_ch_gr4.selectedIndex)
                ) {
        ta_upd_settling = true;
        ta_upd_rooms = true;
    } else if  (ta_cur_rooms != document.searchForm.ts_room_count.selectedIndex) {
        ta_upd_settling = true;
        ta_upd_rooms = false;
    } else {
        ta_upd_settling = false;
        ta_upd_rooms = false;
    }
}

function ta_getChildCount() {
    var count = 0;
    if (document.searchForm.ts_ch_gr1)
        count += document.searchForm.ts_ch_gr1.selectedIndex;
    if (document.searchForm.ts_ch_gr2)
        count += document.searchForm.ts_ch_gr2.selectedIndex;
    if (document.searchForm.ts_ch_gr3)
        count += document.searchForm.ts_ch_gr3.selectedIndex;
    if (document.searchForm.ts_ch_gr4)
        count += document.searchForm.ts_ch_gr4.selectedIndex;
    return count;
}

function ta_revertChildCounts() {
    if (document.searchForm.ts_ch_gr1)
        document.searchForm.ts_ch_gr1.selectedIndex = ta_cur_cg1;
    if (document.searchForm.ts_ch_gr2)
        document.searchForm.ts_ch_gr2.selectedIndex = ta_cur_cg2;
    if (document.searchForm.ts_ch_gr3)
        document.searchForm.ts_ch_gr3.selectedIndex = ta_cur_cg3;
    if (document.searchForm.ts_ch_gr4)
        document.searchForm.ts_ch_gr4.selectedIndex = ta_cur_cg4;
}

function ta_checkGroupValidity() {

	var adults = parseInt(ta_getValue(document.searchForm.ts_adults));
	var ch2 = parseInt(ta_getValue(document.searchForm.ts_ch_2));
	var childCount = ta_getChildCount();

	var personTotal = adults + ch2 + childCount;
    if(adults == 1) {
        document.searchForm.ts_ch_2.options[2] = null;
    }else {
        if(null == document.searchForm.ts_ch_2.options[2]) {
            document.searchForm.ts_ch_2.options[2] = new Option("2", "2",false,false);
        }
    }
    if(personTotal > 6) {
        alert("Henkilöiden lukumäärä enintään 6!");

        document.searchForm.ts_adults.selectedIndex = ta_cur_adults;
        document.searchForm.ts_ch_2.selectedIndex = ta_cur_c_2;
        ta_revertChildCounts();

        // no need to save
    }
    if(ta_flightsEn)            // save if flights
        ta_saveCurrentGroup();
}

function _ta_isShareable(aCtrl, cCtrlU2) {
    if (ta_male_female_roomshares_denied) {
        return false;
    }

    var adults = ta_getIntValue(aCtrl);
    var children = ta_getIntValue(cCtrlU2) + ta_getChildCount();

    if (adults == 1 && children == 0) {
        return true;
    }
    return false;
}

var ta_cur_rooms_max = -1;
var ta_cur_shared = -1;

function _ta_s_updateRooms(aCtrl, cCtrlU2, rmCtrl, cbCtrl, lastChCtrl) {
    if (!ta_roomsEn)
        return;

    var new_rooms_max = ta_getValue(aCtrl);

    var cur_selectedIndex = rmCtrl.selectedIndex;

    if (new_rooms_max > 3) {
        new_rooms_max = 3;
    }

    var new_shared = _ta_isShareable(aCtrl, cCtrlU2);

    if (new_rooms_max != ta_cur_rooms_max ||
        new_shared != ta_cur_shared) {

        ta_empty(rmCtrl);

        while (rmCtrl.options.length < new_rooms_max) {
            var ind = rmCtrl.options.length;
            var rooms = ind+1;

            rmCtrl.options[ind] = new Option(rooms, rooms, false, false);
        }

        if (new_shared) {
            rmCtrl.options[1] = new Option("Miespaikka", 99, false, false);
            rmCtrl.options[2] = new Option("Naispaikka", 98, false, false);
        }

        var new_selectedIndex = -1;

        var save = false;

        if (ta_discard_rooms && !new_shared) {
            new_selectedIndex = 0; // limited init with more than 1 room
            save = true;
        } else if (new_shared != ta_cur_shared) {
            new_selectedIndex = 0;
            ta_upd_settling = true;
        } else {
            new_selectedIndex = cur_selectedIndex;
        }

        if (new_selectedIndex >= rmCtrl.options.length) {
            new_selectedIndex = rmCtrl.options.length - 1;
            ta_upd_settling = true;
            save = true;
        } else if (new_selectedIndex == -1) {
            new_selectedIndex = 0;
            ta_upd_settling = true;
        }

        rmCtrl.selectedIndex = new_selectedIndex;

        if (save && ta_cur_shared != -1) // dont save initial
        {
            ta_saveRoomCount(rmCtrl);
        }

        if (ta_settlingEn)
            ta_handleSettlingMenu();

        ta_cur_rooms_max = new_rooms_max;
        ta_cur_shared = new_shared;
    }

}

function _ta_isVisible(shared,selectedOption) {
    if (shared || selectedOption == 0) {
        return false;
    } else {
        return true;
    }
}

function _ta_s_updateSettling() {
    if (!ta_roomsEn)
        return;
    var adults = parseInt(ta_getValue(document.searchForm.ts_adults));
    var rooms = parseInt(ta_getValue(document.searchForm.ts_room_count));
    var child_count_temp = ta_getChildCount();
    ta_updRoomsList(adults, child_count_temp, rooms, document.searchForm.ts_room_combinations);

    return; //opera problem
}


function ta_updRoomsList(adCnt1, cdCnt1, rmCnt1, cbCtrl) {
    if (!ta_settlingEn)
        return;
	if(cbCtrl != null) {
        ta_empty(cbCtrl);
        cbCtrl.options[0] = new Option("", "",false,false);
        switch(adCnt1) {
            case 1: {
                if(cdCnt1 == 1) {
                    cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 1 lapsi", "1A1L", false, false);
                }
                else if(cdCnt1 == 0) {
                    if(rmCnt1 == 99) {
                        cbCtrl.options[0] = new Option("Miespaikalle", "1AM",false,false);
                    }
                    else if(rmCnt1 == 98) {
                        cbCtrl.options[0] = new Option("Naispaikalle", "1AN",false,false);
                    }
                    else {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen", "1A",false,false);
                    }
                }
                else {
                    cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen " + cdCnt1 + " lasta", "1A" + cdCnt1 + "L",false,false);
                }
                break;
            }
            case 2: {
                if(cdCnt1 == 0) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen , Huone 2: 1 aikuinen", "1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 1) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 1 lapsi , Huone 2: 1 aikuinen", "1A1L_1A",false,false);
                    }
                }
                else if(cdCnt1 == 2) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 1 lapsi , Huone 2: 1 aikuinen 1 lapsi", "1A1L_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 1 aikuinen", "1A2L_1A",false,false);
                    }
                }
                else if(cdCnt1 == 3) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 1 aikuinen 1 lapsi", "1A2L_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 1 aikuinen 3 lasta , Huone 2: 1 aikuinen", "1A3L_1A",false,false);
                    }
                }
                else if(cdCnt1 == 4) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 1 aikuinen 2 lasta", "1A2L_1A2L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 1 aikuinen 4 lasta , Huone 2: 1 aikuinen", "1A4L_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 1 aikuinen 3 lasta , Huone 2: 1 aikuinen 1 lapsi", "1A3L_1A1L",false,false);
                    }
                }
                break;
            }
            case 3: {
                if(cdCnt1 == 0) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista, Huone 2: 1 aikuinen", "2A_1A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "1A_1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 1) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone 2: 1 aikuinen 1 lapsi", "2A_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 1 aikuinen", "2A1L_1A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone1: 1 aikuinen 1 lapsi , Huone 2: 1 aikuinen, Huone 3: 1 aikuinen", "1A1L_1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 2) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 1 aikuinen 1 lapsi", "2A1L_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 2 aikuista 2 lasta , Huone 2: 1 aikuinen", "2A2L_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 2 aikuista", "1A2L_2A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 1 lapsi , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen", "1A1L_1A1L_1A",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "1A2L_1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 3) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 1 aikuinen 2 lasta", "2A1L_1A2L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 2 aikuista 2 lasta , Huone 2: 1 aikuinen 1 lapsi", "2A2L_1A1L",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 2 aikuista 3 lasta , Huone 2: 1 aikuinen", "2A3L_1A",false,false);
                        cbCtrl.options[3] = new Option("Huone 1: 1 aikuinen 3 lasta , Huone 2: 2 aikuista", "1A3L_2A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 1 aikuinen 1 lapsi , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen 1 lapsi", "1A1L_1A1L_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 1 aikuinen 3 lasta , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "1A3L_1A_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen", "1A2L_1A1L_1A",false,false);
                    }
                }
                break;
            }
            case 4: {
                if(cdCnt1 == 0) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone 2: 2 aikuista", "2A_2A",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 3 aikuista , Huone 2: 1 aikuinen", "3A_1A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone2: 1 aikuinen , Huone3: 1 aikuinen","2A_1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 1){
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 2 aikuista", "2A1L_2A",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 3 aikuista , Huone 2: 1 aikuinen 1 lapsi", "3A_1A1L",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen", "2A_1A1L_1A",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 2 aikuista 1 lapsi, Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "2A1L_1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 2) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 2 aikuista 1 lapsi", "2A1L_2A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 3 aikuista 2 lasta , Huone 2: 1 aikuinen", "3A2L_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 2 aikuista 2 lasta , Huone 2: 2 aikuista", "2A2L_2A",false,false);
                        cbCtrl.options[3] = new Option("Huone 1: 1 aikuinen 2 lasta , Huone 2: 3 aikuista", "1A2L_3A",false,false);
                        cbCtrl.options[4] = new Option("Huone 1: 3 aikuista 1 lapsi , Huone 2: 1 aikuinen 1 lapsi", "3A1L_1A1L",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen 1 lapsi", "2A_1A1L_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 2 aikuista 2 lasta , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "2A2L_1A_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen", "2A1L_1A1L_1A",false,false);
                        cbCtrl.options[3] = new Option("Huone 1: 2 aikuista , Huone 2: 1 aikuinen 2 lasta , Huone 3: 1 aikuinen", "2A_1A2L_1A",false,false);
                    }
                }
                break;
            }
            case 5: {
                if(cdCnt1 == 0) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 3 aikuista , Huone 2: 2 aikuista", "3A_2A",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 4 aikuista , Huone 2: 1 aikuinen", "4A_1A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone 2: 2 aikuista , Huone 3: 1 aikuinen", "2A_2A_1A",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 3 aikuista , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "3A_1A_1A",false,false);
                    }
                }
                else if(cdCnt1 == 1) {
                    if(rmCnt1 == 2) {
                        cbCtrl.options[0] = new Option("Huone 1: 3 aikuista , Huone 2: 2 aikuista 1 lapsi", "3A_2A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 4 aikuista 1 lapsi , Huone 2: 1 aikuinen", "4A1L_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 4 aikuista , Huone 2: 1 aikuinen 1 lapsi", "4A_1A1L",false,false);
                        cbCtrl.options[3] = new Option("Huone 1: 3 aikuista 1 lapsi , Huone 2: 2 aikuista", "3A1L_2A",false,false);
                    }
                    else if(rmCnt1 == 3) {
                        cbCtrl.options[0] = new Option("Huone 1: 2 aikuista , Huone 2: 2 aikuista , Huone 3: 1 aikuinen 1 lapsi", "2A_2A_1A1L",false,false);
                        cbCtrl.options[1] = new Option("Huone 1: 3 aikuista 1 lapsi , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "3A1L_1A_1A",false,false);
                        cbCtrl.options[2] = new Option("Huone 1: 3 aikuista , Huone 2: 1 aikuinen 1 lapsi , Huone 3: 1 aikuinen", "3A_1A1L_1A",false,false);
                        cbCtrl.options[3] = new Option("Huone 1: 2 aikuista 1 lapsi , Huone 2: 2 aikuista , Huone 3: 1 aikuinen", "2A1L_2A_1A",false,false);
                    }
                }
                break;
            }
            case 6: {
                if(rmCnt1 == 2) {
                    cbCtrl.options[0] = new Option("Huone 1: 3 aikuista , Huone 2: 3 aikuista", "3A_3A",false,false);
                    cbCtrl.options[1] = new Option("Huone 1: 5 aikuista , Huone 2: 1 aikuinen", "5A_1A",false,false);
                    cbCtrl.options[2] = new Option("Huone 1: 4 aikuista , Huone 2: 2 aikuista", "4A_2A",false,false);
                }
                else if(rmCnt1 == 3) {
                    cbCtrl.options[0] = new Option("Huone 1: 2 aikuista, Huone 2: 2 aikuista, Huone 3: 2 aikuista", "2A_2A_2A",false,false);
                    cbCtrl.options[1] = new Option("Huone 1: 4 aikuista , Huone 2: 1 aikuinen , Huone 3: 1 aikuinen", "4A_1A_1A",false,false);
                    cbCtrl.options[2] = new Option("Huone 1: 3 aikuista, Huone 2: 2 aikuista, Huone 3: 1 aikuinen", "3A_2A_1A",false,false);
                }
                break;
            }
        }  // switch
        cbCtrl.selectedIndex = 0;
    } // if
}