var optionRelations = new Array();
var requiredOptions = new Array();
var checkBoxesPresent = new Array();
var allowedRelations = new Array();
var singleRelations = new Array();
var optionLabels = new Array();
var optionInfo = new Array();
var checkBoxes = new Array();
var hiddenTextFieldRelations = new Array();

function renderOptionInfo(option_id) {
    option_type = $("#"+option_id).attr('type');
    wasCheck = false;

    if(option_type == "checkbox") {
        indexVal = option_id.indexOf("_",7)+1;
        choice_id = $("#"+option_id).attr('id').substring(indexVal);
        wasCheck = true;
    }
    
    if(option_type == "select-one" || option_type == "radio" || wasCheck) {
        choice_id = $("#"+option_id).val();
    }
    else {
        return false;
    }

    try {
        var dashIndex = option_id.indexOf("-");
        if(dashIndex > 6) {
            var raw_option_id = option_id.substring(0,dashIndex);
        }
        else {
            var raw_option_id = option_id;
        }
        if(optionInfo[raw_option_id]['choice_'+choice_id].length > 0) {
            displayBubble("info","flash_message_"+option_id,optionInfo[raw_option_id]['choice_'+choice_id]);
        }
    }
    catch(err) {
        return false;
    }
}

function checkOptionRelations(option_id) {
    $("#flash_message_"+option_id).hide();
    $("#flash_message_"+option_id).html("");
    
    renderOptionInfo(option_id);

    var dashIndex = option_id.indexOf("-");
    // 5 for tracks_ or 6 for option_
    if(dashIndex > 5) {
        element1 = document.getElementById(option_id);
        idFix = option_id.substring(dashIndex);
        option_id = option_id.substring(0,dashIndex);
        
        if(idFix == "-0" && $("#participates").attr("checked") == false) {
            return true;
        }
    }
    else {
        idFix = "";
        element1 = document.getElementById(option_id);
    }

    // If option doesn't exist, eg. in ajax mode
    try {
        elmtype = element1.type;
    }
    catch(err) {
        return true;
    }
    
	if(element1.type == "select-one") {
		
        if(hiddenTextFieldRelations[option_id]) {
            if(hiddenTextFieldRelations[option_id]["choice_"+element1.options[element1.selectedIndex].value]) {
                for(i=0;i<hiddenTextFieldRelations[option_id]["choice_"+element1.options[element1.selectedIndex].value].length;i++) {
                    document.getElementById("option_row_"+hiddenTextFieldRelations[option_id]["choice_"+element1.options[element1.selectedIndex].value][i]).style.display = 'table-row';
                }
            }
        }
   		
    	if(requiredOptions[option_id] == "required") {
            if(element1.selectedIndex == 0) {
            	if(option_id == 'tracks' && element1.options[element1.selectedIndex].value != '') return true;
            	displayRequiredMessage(option_id,idFix);
                //alert('Feltet "'+optionLabels[option_id]+'" bedes udfyldt');
            	return false;
            }
        }
		
		value1 = element1.options[element1.selectedIndex].value;
		if(0) { //}singleRelations[option_id]) {
			if(singleRelations[option_id][value1]) {
				//alert(singleRelations[option_id][value1]["option_id"]+"   "+singleRelations[option_id][value1]["value_id"]);
				element2 = document.getElementById(singleRelations[option_id][value1]["option_id"]);
				for(i=0;i<=element2.options.length;i++) {
					//alert(element2.options[i].value+"   "+singleRelations[option_id][value1]["value_id"]);
					if(element2.options[i].value == singleRelations[option_id][value1]["value_id"]) {
						element2.options[i].selected = true;
						return;
					}
				}
			}
		}
	}
	
    if(element1.type == "text" || element1.type == "textarea") {
        if(requiredOptions[option_id] == "required") {
            if(element1.value == "") {
				displayRequiredMessage2(option_id,idFix);
                //alert('Feltet "'+optionLabels[option_id]+'" bedes udfyldt');
				return false;
			}
			else {
				return true;
			}
		}
		else {
			return true;
		}
	}
	
	if(element1.type == "checkbox") {
		if(element1.checked == false) {
			return;
		}
		value1 = element1.name.substr(element1.name.lastIndexOf("_")+1);
		value1 = value1.substr(0,value1.length-1);
	}
	else {
		value1 = element1.value;
	}
	
	if(option_id.substr(0,8) == "session_" || option_id == "allsessions") {
        checkList = optionRelations["sessions"];
		id1 = "sessions";
	}
	else if(element1.type == "checkbox") {
		id1 = element1.id.substr(0,element1.id.lastIndexOf("_"));
		checkList = optionRelations[id1];
	}
	else {
		id1 = option_id;
		checkList = optionRelations[id1];
	}

    if(checkList) {
        for(i=0;i<checkList.length;i++) {
			if(checkBoxes[checkList[i]]) {
				for(j=0;j<checkBoxes[checkList[i]].length;j++) {
					//value2 = checkList[i]+"_"+checkBoxes[checkList[i]][j];
					value2 = checkBoxes[checkList[i]][j];
					try {
                        if(document.getElementById(checkList[i]+"_"+value2+idFix).checked) {
                            if(allowedRelations[id1][value1][checkList[i]][value2]!=true) {
                                displayErrorMessage(id1,checkList[i],idFix);
    							return false;
    						}
    					}
					}
                    catch(err) {
                        displayErrorMessage(id1,checkList[i],idFix);
    					return false;
                    }
				}
			}
			else {
				try {
				    value2 = document.getElementById(checkList[i]+idFix).value;
				}
                catch(err) {
				    continue;
				}
				try {
				    if(allowedRelations[id1][value1][checkList[i]][value2]!=true && value2 != "###DIVIDER###") {
    					displayErrorMessage(id1,checkList[i],idFix);
    					return false;
 				    }
				}
                catch(err) {
                    displayErrorMessage(id1,checkList[i],idFix);
   					return false;
                }
			}
		}
		return true;
	}
	else {
		return true;
	}
}

function addElementOR(name1,name2) {
	if(!optionRelations[name1]) {
		optionRelations[name1] = new Array(name2);
	}
	else {
		optionRelations[name1][optionRelations[name1].length] = name2;
	}
	
	if(!optionRelations[name2]) {
		optionRelations[name2] = new Array(name1);
	}
	else {
		optionRelations[name2][optionRelations[name2].length] = name1;
	}
}

function addAllowedRelation(option1,choice1,option2,choice2) {
	if(!allowedRelations[option1]) {
		allowedRelations[option1] = new Array();
	}
	if(!allowedRelations[option1][choice1]) {
		allowedRelations[option1][choice1] = new Array();
	}
	if(!allowedRelations[option1][choice1][option2]) {
		allowedRelations[option1][choice1][option2] = new Array();
	}
	allowedRelations[option1][choice1][option2][choice2] = true;

	if(!allowedRelations[option2]) {
		allowedRelations[option2] = new Array();
	}
	if(!allowedRelations[option2][choice2]) {
		allowedRelations[option2][choice2] = new Array();
	}
	if(!allowedRelations[option2][choice2][option1]) {
		allowedRelations[option2][choice2][option1] = new Array();
	}
	allowedRelations[option2][choice2][option1][choice1] = true;
}

function addSingleRelation(option1,choice1,option2,choice2) {
	if(!singleRelations[option1]) {
		singleRelations[option1] = new Array();
	}
	if(!singleRelations[option1][choice1]) {
		singleRelations[option1][choice1] = new Array();
	}
	singleRelations[option1][choice1]["option_id"] = option2;
	singleRelations[option1][choice1]["value_id"] = choice2;
}

function cafeteriaCol(day_id,option_id,checkbox_id) {
	if(checkbox_id == option_id + "_basecamp_" + day_id) {
		if(0) { //document.getElementById(checkbox_id).checked == true) {
			document.getElementById(option_id + "_morning_" + day_id).checked = false;
			document.getElementById(option_id + "_noon_" + day_id).checked = false;
			document.getElementById(option_id + "_evening_" + day_id).checked = false;
		}
	}
	else {
		if(document.getElementById(checkbox_id).checked == true) {
			//document.getElementById(option_id + "_basecamp_" + day_id).checked = false;
		}
	}
}

function cafeteriaRelations(day_id,checkbox_id,basecamp,errormsg) {
	if(basecamp) {
		track_el = document.getElementById("tracks");
		track_id = track_el.options[track_el.selectedIndex].value;
		
		if(document.getElementById(checkbox_id).checked == true && track_id != "BC") {
			if(errormsg) {
				displayNotOnBasecampError();
			}
			document.getElementById(checkbox_id).checked = false;
		}
	}
	
	if(document.getElementById("allsessions").checked == true) {
		return true;
	}
	
	switch(day_id) {
		case "sat1":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_1").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "sun":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_2").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "mon":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_3").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "tue":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_4").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "wed":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_5").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "thu":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_6").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "fri":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_7").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
		case "sat2":
			if(document.getElementById(checkbox_id).checked == true && document.getElementById("session_8").checked == false) {
				if(errormsg) {
					displayWrongDayError();
				}
				document.getElementById(checkbox_id).checked = false;
			}
			break;
	}
}
