/**
 * Script isoform.js
 * 
 * Hier stehen die Isoform-eigenen Funktionen.
 * 
 * @uses jQuery-1.3.2
 * @uses jQuery-ui-custom-1.8
 * 
 * Vordefinierte Variablen: (siehe header.php)
 * 	var base_url
 * 	var vorperiode 
 */

// Wo sind wir überhaupt? Domain herausfinden
var domain = 'http://' + window.location.hostname + '/';



/**
 * Datepicker configuration
 */
$.datepicker.setDefaults( {
    duration : 'fast',
    hideIfNoPrevNext : true,
    dateFormat : 'dd.mm.yy',
    changeMonth : true,
    changeYear : true
});

/**
 * Sortierfunktion nach deutschem Datum zum Tablesorter hinzufuegen
 */
$.tablesorter.addParser({
	  id: 'germandate',
	  is: function(s) {
	          return false;
	  },
	  format: function(s) {
	    var a = s.split('.');
	    a[1] = a[1].replace(/^[0]+/g,"");
	    return new Date(a.reverse().join("/")).getTime();
	  },
	  type: 'numeric'
});


var standard_dialog = null;
/**
 * var standard_dialog_opener: jQuery, opening element.
 */
var standard_dialog_opener = null;

$(document).ready(function() {

	focusFirstInputField();
	

	// Standard Dialog
	standard_dialog = $('<div id="standard-dialog"></div>')
		.html('Hier wird noch etwas nachgeladen...')
		.dialog({
			autoOpen: false,
			title: vorperiode
		});

	// Übersetzungshilfen
	$(".lang_mgmt").each(function() {
		// Nicht für Links
		if ($(this).parent('a').length > 0) {
			var my_content = $(this).html();
			$(this).replaceWith(my_content);
		}
	});
	$(".lang_mgmt").click(open_langform);
	$("#langmgmt-submit").live('click', submit_langform);
	
	
	// Administrator: Benutzer > Übersicht
		$(".ueberschriftKunde")
				.click(function() {
					// Pfeil wechseln
						var myImg = $(this).children().eq(0);
						var collapseImg = base_url + 'img/content_icon_collapse.gif';
						var expandImg = base_url + 'img/content_icon_expand.gif';
						if (myImg.attr('src') == expandImg) {
							myImg.attr('src', collapseImg);
						} else {
							myImg.attr('src', expandImg);
						}

						// zeige / verstecke Benutzerliste
						$(this).next().toggle();

					});

		// Administrator: Kunden filtern
		$(".filterFirstChar").click(admin_filterFirstChar);
		
		$(".filterFirstMany").click(function() {
			var tmp = $(this).val().toLowerCase()
			if(tmp == 'suche' || tmp == 'chercher' || tmp == 'ricerca') {
				$(this).val('');
			}
		});
		$(".filterFirstMany").keyup(admin_filterFirstMany);
		$(".filterAlle").click(function() {
			var test = $("td[class^='toBeFiltered_']");
			$("td[class^='toBeFiltered_']").parent().show();
			return false;
		});

		// Administrator: Benutzer Tabelle sortieren
		$("#benutzerliste_admin").tablesorter( {
			// pass the headers argument and assing a object
				headers : {
					// assign the first column (we start counting zero)
					0 : {
						// disable it by setting the property sorter to
						// false
						sorter : false
					},
					// assign the fourth column (we start counting zero)
					3 : {
						// disable it by setting the property sorter to
						// false
						sorter : false
					}
				}
			});

		// Administrator: Gruppenleitertabelle sortieren
		$("#glListe_admin").tablesorter( {
			headers : {
				0 : {
					sorter : false
				},
				3 : {
					sorter : false
				}
			}
		});

		// Administrator: Kundentabelle sortieren
		$("#kundenliste").tablesorter();

		// Kontrollstelle: Benutzertabelle sortieren
		$("#benutzerliste_kontrollstelle").tablesorter( {
			// pass the headers argument and assing a object
				headers : {
					0 : {
						sorter : false
					},
					3 : {
						sorter : false
					}
				}
			});

		// Kontrollstelle: Gruppenleitertabelle sortieren
		$("#glListe_kontrollstelle").tablesorter();
		
		// Perioden: Benutzertabelle sortieren
		$("#perioden_benutzerliste").tablesorter( {
			headers : {
				2 : {
					sorter : 'germandate'
				},
				3 : {
					sorter : false
				}
			},
			sortList: [[2,0]]
		});
		

		// Auswertung: GL setzt Befund Status
		auswertung_checkAllStatus();
		$(".status_change_ok").click(befund_set_ok);
		$(".status_change_nok").click(befund_set_nok);
		$(".auswertung_gl_abbrechen").live(
				'click',
				function() {
					standard_dialog_opener.parent()
							.children(".status_change_nok")
							.css('border', 'none');
					standard_dialog.dialog('close');
				});
		$(".auswertung_gl_submit").live('click', befund_submit);

		// Befunde: Befund der letzten Periode anzeigen
		$("#link_fuer_alten_befund").click(function() {
			$(".alter_befund").toggle();
			return false;
		});

		// Perioden erstellen
		$("#periode_neu_form").dialog( {
			autoOpen : false,
			show : 'slide'
		});
		$("#periode_neu_form input[name='periode_neu_submit']").live('click', periode_speichern);
		$(".periode_neu_link").click(periode_neu);
		$(".periode_edit_link").click(periode_edit);
		
		// Befund der Vorperiode anzeigen
		$(".vorperiode").click(function() {
			var url = $(this).attr('href');
			standard_dialog.dialog('open');
			$("#standard-dialog").load(url);
			return false;
		});
		
		// Periodenliste anzeigen
		$(".periodenliste_link").click(function() {
			var url = $(this).attr('href');
			standard_dialog.dialog('open');
			standard_dialog.dialog('option', 'title', $(this).attr('title'));
			$("#standard-dialog").load(url);
			return false;
		});
		
		// Administrator ändert Frage -> wenn Benutzer benachrichtigen angewählt Textfeld einblenden
		$("#themenformBenachrichtigung_radio_jaFeld").click(function() {
			$("#benachrichtigungTextDiv").show();
		});
		$("#themenformBenachrichtigung_radio_neinFeld").click(function() {
			$("#benachrichtigungTextDiv").hide();
		});
		
}); // END of $(document).ready


/**
 * Filtere Liste nach Text im Suchfeld
 */
function admin_filterFirstMany() {
	var query = $(".filterFirstMany").val();
	$(".toBeFiltered_1").parent().hide();
	var selected = $(".toBeFiltered_1").filter(function() {
		return ($(this).text().search(new RegExp(query,'i')) >= 0);
	});
	selected.parent().show();
	if (query.length == 0) {
		$(".toBeFiltered_1").parent().show();
	}
	
}

/**
 * Filtere Liste nach erstem Buchstaben
 */
function admin_filterFirstChar() {
	var char = $(this).text().toUpperCase().substr(0, 1);

	$(".toBeFiltered_1").each(function() {
		var text = $.trim($(this).text());
		if (text.toUpperCase().substr(0, 1) == char) {
			$(this).parent().show();
		} else {
			$(this).parent().hide();
		}
	});
	return false;
}

/**
 * Ajax aufruf für Statusänderung
 */
function befund_set_ok() {
	var greenImage = $(this);
	// Status setzen
	$(this).parent().children(".auswertung_gl").children("form").children(
			":input[name='status']").val('5');
	// Formular abschicken
	var form = $(this).parent().children(".auswertung_gl").children("form");
	var url = form.attr("action");
	var data = form.children(":input").serializeArray();
	$.ajax( {
		type : "POST",
		url : url,
		data : data,
		success : function(msg) {
			greenImage.css("border", "solid green 1px");
			greenImage.next().css("border", "none");
			greenImage.parent().children(".status_info").text(msg);
			standard_dialog.dialog('close');
			return false;
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) {
			return false;
		}
	});
	auswertung_checkAllStatus();
	return false;
}

function befund_set_nok() {
	standard_dialog_opener = $(this);
	$(this).css("border", "solid red 1px");
	$(this).prev().css("border", "none");
	// Formularfeld "status" setzen
	var par = $(this).parent();
	var my_input = par.children(".auswertung_gl").children("form").children(":input[name='status']");
	par.children(".auswertung_gl").children("form").children(":input[name='status']").val('3');
	// Layer mit Formular einblenden
	standard_dialog.dialog('open');
	standard_dialog.dialog('option', 'title', '');
	standard_dialog.dialog('option', 'width', '545px');
	$("#standard-dialog").html($(this).parent().children(".auswertung_gl").html());
	return false;
}

function befund_submit() {
	// Bemerkung muss Inhalt haben
	if ($("#standard-dialog textarea").val() == '') {
		return false;
	}

	var url = $(this).parent().attr("action");
	var data = $(this).parent().children(":input").serializeArray();
	$.ajax( {
		type : "POST",
		url : url,
		data : data,
		success : function(msg) {
			standard_dialog_opener.parent().children(".status_info").text(msg);
			standard_dialog.dialog('close');
			
			return false;
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) {
			$("#standard-dialog").html('<div class="error">Formular konnte nicht verarbeitet werden!</div>');
			standard_dialog_opener.parent().children(
					".status_change_nok").css('border', 'none');
			return false;
		}
	});

	auswertung_checkAllStatus();

	return false;
}


function auswertung_checkAllStatus() {
	var myStatus = $("input:[name='status']");
	var countStatus = myStatus.length;
	var countAbgelehnt = 0;
	var countAkzeptiert = 0;
	for (i = 0; i < countStatus; i++) {
		if (myStatus.eq(i).val() == '3') {
			countAbgelehnt++;
		}
		if (myStatus.eq(i).val() == '5') {
			countAkzeptiert++;
		}
	}

	if (countStatus == countAbgelehnt + countAkzeptiert) {
		// Zeige Benachrichtigen-Button
		$(".auswertung_benachrichtigung").show();
	} else {
		// Es gibt noch Fragen, die weder abgelehnt noch akzeptiert sind. Der
		// Benutzer kann noch nicht benachrichtigt werden.
		$(".auswertung_benachrichtigung").hide();
	}

	return false;
}

function focusFirstInputField() {
	// Erstes Formularfeld in Fokus nehmen (Window scrollt beim Fokussieren zu diesem Feld)
	$("input[type='text']").focus();

	// Seite zum Anfang scrollen
	window.scrollTo(0, 0);
	
	return;
}


function open_langform() {
	var old = '';
	
	var my_html = '<form action="'+domain+'index.php/lang_mgmt/speichere_langtext" method="post">'
		+'<input type="hidden" name="line_id" value="'+$(this).attr('rel')+'" />'
		+'<textarea name="lang_text" id="lang_text_area" rows="10" cols="55"></textarea>'
		+'<input type="submit" name="langmgmt-submit" id="langmgmt-submit" value="speichern" />'
		+'</form>';
	standard_dialog.dialog('option', 'width', '500px');
	standard_dialog.dialog('option', 'title', 'Übersetzung');
	standard_dialog.dialog('open');
	$("#standard-dialog").empty().html(my_html);
	$("#lang_text_area").load(domain+'index.php/lang_mgmt/get_langtext/'+$(this).attr('rel'));
}


/**
 * Öffnet einen Dialog zum Erstellen einer neuen Periode. 
 * Schreibt das Attribut des Hidden-Feldes "benutzer_id" entsprechend der ID des aufrufenden Links.
 * @return	false	Damit der Link nicht ausgeführt wird.
 */
function periode_neu() {
	var my_id = $(this).attr('id');
	var my_title = $(this).attr('title');
	var benutzer_id = my_id.substring(21);
	$("#periode_neu_form_benutzer_id").val(benutzer_id);
	$("#periode_neu_form_neu").val(1);
	$("#periode_neu_form").dialog({'title': my_title});
	$("#periode_neu_form").dialog('open');
	$("#periode_neu_form_start").datepicker(); 
	return false;
}


/**
 * Öffnet einen Dialog zum Editieren einer bestehenden Periode. 
 * Schreibt das Attribut des Hidden-Feldes "perioden_id" entsprechend der ID des aufrufenden Links.
 * @return	false	Damit der Link nicht ausgeführt wird.
 */
function periode_edit() {
	var my_id = $(this).attr('id');
	var my_title = $(this).attr('title');
	var benutzer_id = my_id.substring(13);
	var my_name = $.trim($("#perioden_td_name_"+benutzer_id).text());
	var my_start = $.trim($("#perioden_td_start_"+benutzer_id).text());
	$("#periode_neu_form_benutzer_id").val(benutzer_id);
	$("#periode_neu_form_neu").val(0);
	$("#periode_neu_form_name").val(my_name);
	$("#periode_neu_form_start").val(my_start);
	$("#periode_neu_form").dialog({'title': my_title});
	$("#periode_neu_form").dialog('open');
	$("#periode_neu_form_start").datepicker(); 
	return false;
}


/**
 * Schickt das Formular für die Periode ab, schliesst den Dialog und fügt Text in die Tabelle.
 * @return false
 */
function periode_speichern(){
	var my_url = $("#periode_neu_form").attr('action');
	var my_data = $("#periode_neu_form").serialize();
	$.ajax({
		type: 'POST',
		url: my_url,
		data: my_data,
		dataType: 'json',
		success: function(newData) {
			// Zeile mit neuen Werten füllen
			$("#perioden_td_name_"+$("#periode_neu_form_benutzer_id").val()).html(newData['name']);
			$("#perioden_td_start_"+$("#periode_neu_form_benutzer_id").val()).html(newData['start']);
			// Dialog schliessen
			$("#periode_neu_form").dialog('close');
		},
		error: function() {
			alert('fehlgeschlagen');
		}
	});
	return false;
}


function submit_langform() {
	var success_msg = '<div class="success">Text erfolgreich geändert.</div>';
	var failure_msg = '<div class="error">Text konnte nicht geändert werden.</div>';
	var form = $(this).parent('form');
	var url = form.attr("action");
	var data = form.children(":input").serializeArray();
	$.ajax( {
		type : "POST",
		url : url,
		data : data,
		success : function(msg) {
			$("#langmgmt-submit").parent().append(msg);
			return false;
		},
		error : function(XMLHttpRequest, textStatus, errorThrown) {
			$("#langmgmt-submit").parent().append(msg);
			return false;
		}
	});
	return false;
}


function toggleVisibility(elem_id) {
	if (document.getElementById(elem_id + '_liste').style.display == 'none') {
		document.getElementById(elem_id + '_liste').style.display = 'block';
		document.getElementById(elem_id + '_img').src = '/img/content_icon_expand.gif';
	} else {
		document.getElementById(elem_id + '_liste').style.display = 'none';
		document.getElementById(elem_id + '_img').src = '/img/content_icon_collapse.gif';
	}
}


