/* JAVASCRIPT FOR QUERY GENERATOR */
/* (c) 2005, Daniel Kellenberger */
/* $Id: qg.js 40 2012-01-03 20:38:52Z piano $ */

var Xcoor = 300;
var Ycoor = 300;
document.onmousedown = SetCoordinats;

/*******************************************************************************
 * Die Funtion «datumBisSelect» selektiert die entsprechenden Buttons bei
 * datum_bis und die inhalte der textfelder
 */
function datumBisSelect (feldnameCheckbox, feldnameZahl, wert) {
	document.getElementById(feldnameCheckbox).checked = true;
	document.getElementById(feldnameZahl).value = wert;
}

/*******************************************************************************
 * Die Funktion «qg_init()» initalisiert das ganze Formular
 * damit nur der 1. Schritt sichtbar wird. Alles andere wird
 * ausgeblendet
 */
function qg_init() {
	/* Verstecke alle Einstellungsfelder */
	for (var x = 1; x<=5; x++) {
		var id_name = "step"+x+"_config";
		document.getElementById(id_name).style.display = "none";
	}

	/* "Weiter" und "Zurück"-Button sichtbar machen */
	document.getElementById("nojs").style.display = "none";
	document.getElementById("buttons").style.display = "block";
	document.getElementById("ausgabeurl").style.display = "block";
	document.getElementById("back").style.display = "none";

	/* Zeigt nur dasjenige an, welches angezeigt werden soll */
	qg_show_state();
}


/*******************************************************************************
 * Die folgenden Funktionen verstecken bzw zeigen die benötigten Elemente
 * mit display = "block" bzw. display = "none";
 */
function qg_show_1() {
	document.getElementById("step1_data").style.display = "none";
	document.getElementById("step1_erklaerung").style.display = "block";
	document.getElementById("step1_config").style.display = "block";
}

function qg_show_2() {
	document.getElementById("step1_data").style.display = "block";
	document.getElementById("step2_data").style.display = "none";
	document.getElementById("step2_erklaerung").style.display = "block";
	document.getElementById("step2_config").style.display = "block";
}
function qg_show_3() {
	document.getElementById("step1_data").style.display = "block";
	document.getElementById("step2_data").style.display = "block";
	document.getElementById("step3_data").style.display = "none";
	document.getElementById("step3_erklaerung").style.display = "block";
	document.getElementById("step3_config").style.display = "block";
}
function qg_show_4() {
	document.getElementById("step1_data").style.display = "block";
	document.getElementById("step2_data").style.display = "block";
	document.getElementById("step3_data").style.display = "block";
	document.getElementById("step4_data").style.display = "none";
	document.getElementById("step4_erklaerung").style.display = "block";
	document.getElementById("step4_config").style.display = "block";
}
function qg_show_5() {
	document.getElementById("step1_data").style.display = "block";
	document.getElementById("step2_data").style.display = "block";
	document.getElementById("step3_data").style.display = "block";
	document.getElementById("step4_data").style.display = "block";
	document.getElementById("step5_data").style.display = "none";
	document.getElementById("step5_erklaerung").style.display = "block";
	document.getElementById("step5_config").style.display = "block";
}


/*******************************************************************************
 * Die folgenden Funktionen speichern die Einstellugen, bzw. eher sie blenden
 * die Einstellungsmöglichkeiten aus und blenden eine Übersicht mit den erstellten
 * Einstellungen ein
 */
function qg_save_1() {
	var select = document.getElementById("output_type");
	var index = select.selectedIndex;
 	document.getElementById("output_type_text").value = select.options[index].text;
	document.getElementById("step1_erklaerung").style.display = "none";
	document.getElementById("step1_config").style.display = "none";
	document.getElementById("step").value++;
}

function qg_save_2() {
	var elementlist = document.getElementById("elementlist");
	var elementlist_data = document.getElementById("elementlist_data");
	/* kopieren von style und text nach dem anzeigeselect */
	elementlist_data.length = 0;
	for (var x = 0; x<elementlist.length; x++) {
		elementlist_data[x] = new Option(elementlist.options[x].text);
		elementlist_data[x].style.backgroundColor = elementlist.options[x].style.backgroundColor;
	}
	document.getElementById("step2_erklaerung").style.display = "none";
	document.getElementById("step2_config").style.display = "none";
	document.getElementById("step").value++;
}
function qg_save_3() {
	var dateoutputfield = document.getElementById("date_output");
	if (document.getElementById("wahl11").checked || document.getElementById("wahl12").checked) {
		if (document.getElementById("wahl11").checked) {
			dateoutputfield.value = "ab "+document.getElementById("wahl111").value+"."+document.getElementById("wahl112").value+"."+document.getElementById("wahl113").value;
		} else {
			dateoutputfield.value = "ab heute";
		}
		dateoutputfield.value += " bis ";
		if (document.getElementById("wahl21").checked) {
			dateoutputfield.value += "am "+document.getElementById("wahl211").value+"."+document.getElementById("wahl212").value+"."+document.getElementById("wahl213").value;
		} else if (document.getElementById("wahl22").checked) {
			dateoutputfield.value += "in "+document.getElementById("wahl221").value+" Tagen";
		} else if (document.getElementById("wahl23").checked) {
			dateoutputfield.value += "in "+document.getElementById("wahl231").value+" Wochen";
		} else if (document.getElementById("wahl24").checked) {
			dateoutputfield.value += "in "+document.getElementById("wahl241").value+" Monaten";
		}
	} else if (document.getElementById("wahl13").checked) {
		dateoutputfield.value = "ab der aktuellen Woche";
	} else if (document.getElementById("wahl14").checked) {
		dateoutputfield.value = "ab des aktuellen Monats";
	} else if (document.getElementById("wahl15").checked) {
		dateoutputfield.value = "ab des aktuellen Quartals";
	} else if (document.getElementById("wahl16").checked) {
		dateoutputfield.value = "ab des aktuellen Semesters";
	} else if (document.getElementById("wahl17").checked) {
		dateoutputfield.value = "ab des aktuellen Jahrs";
	}

	document.getElementById("step3_erklaerung").style.display = "none";
	document.getElementById("step3_config").style.display = "none";
	document.getElementById("step").value++;
}
function qg_save_4() {
	var felderboxen = document.getElementsByName("felderliste[]");
	var sel_felder = new Array();
	for (var x = 0; x<felderboxen.length; x++) {
		if (felderboxen[x].checked) {
			sel_felder[sel_felder.length] = felderboxen[x].value;
		}
	}
	document.getElementById("output_felder").value = sel_felder.join(", ");
	document.getElementById("step4_erklaerung").style.display = "none";
	document.getElementById("step4_config").style.display = "none";
	document.getElementById("step").value++;
}
function qg_save_5() {
	document.getElementById("step5_erklaerung").style.display = "none";
	document.getElementById("step5_config").style.display = "none";
	document.getElementById("step").value++;
}

/*******************************************************************************
 * qg_add_element() bzw. qg_del_elements() fügen die Elemente in die rechte
 * Selectbox ein und speichern die Parameter als value, eine verständliche Auswahl
 * als text Wert
 */
function qg_add_element() {
	/* Daten sammeln */
	var elementconfig = Array();
	var select = document.getElementById("element");

	if (document.getElementById("step2_element_take_true").checked) elementconfig[0] = '*'; else elementconfig[0] = '-';
	elementconfig[1] = select.options[select.selectedIndex].value;
	if (document.getElementById("sub").checked) elementconfig[2] = 1; else elementconfig[2] = 0;

	/* Daten in der rechten Selectbox hinzufügen */
	var data = elementconfig.join(",");
	var text = "["+elementconfig[0]+"] "+select.options[select.selectedIndex].text;
	if (elementconfig[2]==1) text = text + " (inkl. Sub)";
	var rightselectbox = document.getElementById("elementlist");
	var NeuerEintrag = new Option(text, data);
	rightselectbox.options[rightselectbox.length] = NeuerEintrag;
	rightselectbox.options[rightselectbox.length-1].style.backgroundColor = document.getElementById("colorpicker").value;
	document.getElementById("element").focus();
	qg_GenerateUrl();
}

/*
 * Entfernt alle selektierten Elemente aus der Box
 */
function qg_del_elements() {
	var rightselectbox = document.getElementById("elementlist");
	for (var x = 0; x<rightselectbox.length; x++) {
		if (rightselectbox.options[x].selected) {
			// alle nachfolgenden eins rückverschieben
			for (var y = x; y<rightselectbox.length-1; y++) {
				rightselectbox.options[y].value = rightselectbox.options[y+1].value;
				rightselectbox.options[y].text = rightselectbox[y+1].text;
				rightselectbox.options[y].selected = rightselectbox.options[y+1].selected;
				rightselectbox.options[y].style.backgroundColor = rightselectbox.options[y+1].style.backgroundColor;
			}
			rightselectbox.length--;
			x--;	// damit auch das geprüft wird, welches
				// neu an dieser Stelle ist
		}
	}
	document.getElementById("element").focus();
	qg_GenerateUrl();
}

/*******************************************************************************
 * qg_datum_ab() führt entsprechende Aktionen auf den Elementen aus, z.B. falls
 * das Datum der datum_bis_box kleiner ist, wird dies erhöht. Oder wenn die
 * Selectbox nicht selektiert ist, dann wird dies nachgeholt
 */
function qg_datum_ab (feldart) {
	/* selektiere das datum als ausgangspunkt */
	document.getElementById("wahl11").checked = true;

	/* prüfe ob neues datum grösser als bis, falls ja, ändern */
	var Jahr = document.getElementById("wahl213").value;
	var Monat = document.getElementById("wahl212").value;
	var Tag = document.getElementById("wahl211").value;
	var datum_bis = new Date(Jahr, Monat, Tag);
	Jahr = document.getElementById("wahl113").value;
	Monat = document.getElementById("wahl112").value;
	Tag = document.getElementById("wahl111").value;
	var datum_von = new Date(Jahr, Monat, Tag);

	if (datum_von > datum_bis) {
		document.getElementById("wahl211").value = Tag;
		document.getElementById("wahl212").value = Monat;
		document.getElementById("wahl213").value = Jahr;
	}
	qg_GenerateUrl();
}
function qg_datum_bis (feldart) {
	/* selektiere das datum als ausgangspunkt */
	document.getElementById("wahl21").checked = true;

	/* prüfe ob neues datum grösser als bis, falls ja, ändern */
	var Jahr = document.getElementById("wahl113").value;
	var Monat = document.getElementById("wahl112").value;
	var Tag = document.getElementById("wahl111").value;
	var datum_von = new Date(Jahr, Monat, Tag);
	Jahr = document.getElementById("wahl213").value;
	Monat = document.getElementById("wahl212").value;
	Tag = document.getElementById("wahl211").value;
	var datum_bis = new Date(Jahr, Monat, Tag);

	if (datum_von > datum_bis) {
		document.getElementById("wahl111").value = Tag;
		document.getElementById("wahl112").value = Monat;
		document.getElementById("wahl113").value = Jahr;
	}
	qg_GenerateUrl();
}
function qg_set_date_week() {
	document.getElementById("wahl23").checked = true;
	document.getElementById("wahl231").value = 1;
	qg_GenerateUrl();
}
function qg_set_date_month() {
	document.getElementById("wahl24").checked = true;
	document.getElementById("wahl241").value = 1;
	qg_GenerateUrl();
}
function qg_set_date_quartal() {
	document.getElementById("wahl24").checked = true;
	document.getElementById("wahl241").value = 3;
	qg_GenerateUrl();
}
function qg_set_date_semester() {
	document.getElementById("wahl24").checked = true;
	document.getElementById("wahl241").value = 6;
	qg_GenerateUrl();
}
function qg_set_date_year() {
	document.getElementById("wahl24").checked = true;
	document.getElementById("wahl241").value = 12;
	qg_GenerateUrl();
}


/*******************************************************************************
 * qg_show_state() ruft die entsprechende Display-Funktion zum entsprechenden
 * State auf.
 */
function qg_show_state() {
	switch (document.getElementById("step").value) {
		case "1":
			qg_show_1();
			break;
		case "2":
			qg_show_2();
			document.getElementById("back").style.display = "inline";
			break;
		case "3":
			qg_show_3();
			document.getElementById("back").style.display = "inline";
			break;
		case "4":
			qg_show_4();
			document.getElementById("back").style.display = "inline";
			break;
		case "5":
			qg_show_5();
			document.getElementById("back").style.display = "inline";
			break;
	}
}


/*******************************************************************************
 * qg_next() lässt den State die Einstellungen speichern und danach ruft sie den
 * qg_show_state() auf, der, falls bei der Speicherung alles OK lief den neuen
 * State anzeigt
 */
function qg_next() {
	qg_GenerateUrl();
	switch (document.getElementById("step").value) {
		case "1":
			qg_save_1();
			break;
		case "2":
			qg_save_2();
			break;
		case "3":
			qg_save_3();
			break;
		case "4":
			qg_save_4();
			break;
		case "5":
			qg_save_5();
			break;
	}
	qg_show_state();
}


/*******************************************************************************
 * qg_back() speichert die Einstellungen und springt 2 States zurück
 */
function qg_back() {
	switch (document.getElementById("step").value) {
		case "1":
			qg_save_1();
			break;
		case "2":
			qg_save_2();
			break;
		case "3":
			qg_save_3();
			break;
		case "4":
			qg_save_4();
			break;
		case "5":
			qg_save_5();
			break;
	}
	document.getElementById("step").value -= 2;
	qg_show_state();
}

/*******************************************************************************
 * qg_ShowColorpicker() soll in der Endversion ein Colorpickerdialog anzeigen
 * bei dem der Benutzer aus einer Reihe von Farben auswählen kann und diese
 * als Hintergrundfarbe definieren kann
 */
function qg_ShowColorpicker() {
	/*
	var colorpicker = document.getElementById("colorpicker");
	colorpicker.value = prompt("Bitte gültigen Farbwert eingeben:",colorpicker.value);
	document.getElementById("color").style.backgroundColor = colorpicker.value;
	*/
	var pannel = document.getElementById("colorpannel");
	pannel.style.position = "absolute";
	pannel.style.top = "300px";
	pannel.style.left = "340px";
	pannel.style.display = "block";
}
function qg_SetColor(set_color) {
	var colorpicker = document.getElementById("colorpicker");
	var pannel = document.getElementById("colorpannel");
	var color = document.getElementById("color");
	colorpicker.value = set_color;
	color.style.backgroundColor = set_color;
	pannel.style.display = "none";
}

/*******************************************************************************
 * qg_GenerateUrl() erstellt die TerminDB URL mit den bereits eingegebenen Daten
 * und schreibt diese ins unterste Feld
 */
function qg_GenerateUrl() {

	// Init
	var url = "http://www.stanet.ch/termine/termine.new/tm:";

	// Elemente (*,<elid>,<sub>,<options>)
	var elements = document.getElementById("elementlist");
	for (var x = 0; x<elements.length; x++) {
		if (x!=0)
			url += ";";
		url += elements.options[x].value;
	}
	url += ":";

	// Datum
	if (document.getElementById("wahl11").checked || document.getElementById("wahl12").checked) {
		if (document.getElementById("wahl11").checked) {
			url += document.getElementById("wahl111").value+"."+document.getElementById("wahl112").value+"."+document.getElementById("wahl113").value;
		} else {
			url += "0";
		}
		url += ";";
		if (document.getElementById("wahl21").checked) {
			url += document.getElementById("wahl211").value+"."+document.getElementById("wahl212").value+"."+document.getElementById("wahl213").value;
		} else if (document.getElementById("wahl22").checked) {
			url += "0,"+document.getElementById("wahl221").value;
		} else if (document.getElementById("wahl23").checked) {
			url += "1,"+document.getElementById("wahl231").value;
		} else if (document.getElementById("wahl24").checked) {
			url += "2,"+document.getElementById("wahl241").value;
		}
	} else if (document.getElementById("wahl13").checked) {
		url += "1";
	} else if (document.getElementById("wahl14").checked) {
		url += "2";
	} else if (document.getElementById("wahl15").checked) {
		url += "3";
	} else if (document.getElementById("wahl16").checked) {
		url += "4";
	} else if (document.getElementById("wahl17").checked) {
		url += "5";
	}
	url += ":";
	
	// Felder
	var felderboxen = document.getElementsByName("felderliste[]");
	var sel_felder = new Array();
	for (var x = 0; x<felderboxen.length; x++) {
		if (felderboxen[x].checked) {
			sel_felder[sel_felder.length] = felderboxen[x].value;
		}
	}
	if (sel_felder.join(";")!="datum;zeit;anlass;ort;verantwortlicher;anmeldung") {
		url += sel_felder.join(";");
	}
	url += ":";
	
	// Dateiendung
	url += "."+document.getElementById("output_type").value;

	// setzen
	document.getElementById("outputurl").value = url;
}

/*******************************************************************************
 * SetCoordinats setzt die Koordinaten bei einem Klick in die Variaben Xcoor
 * und YCoor
 */
function SetCoordinats (Event) {
	if (!Event)
		Event = window.event;
	Xcoor = Event.screenX;
	Ycoor = Event.screenY;
}


/******************************************************************************
 * setValues
 * setzt die Werte bereits selektierter Elemente wieder in die Elementauswahl
 */
function setValues (operator, element_nr, subselect, code, color) {
	if (operator=='*') {
		document.getElementById("step2_element_take_true").checked = true;
	} else {
		document.getElementById("step2_element_take_false").checked = false;
	}
	document.getElementById("element").value = element_nr;
	document.getElementById("sub").checked = subselect;
	document.getElementById("colorpicker").value = color;
	document.getElementById("color").style.backgroundColor = color;
	return false;
}

function sel_radio_box(radioboxid) {
	document.getElementById(radioboxid).checked = true;
}
