$(document).ready(function () {

	var htmlstring = "";
	var actCnt = 1;
	var toAdd = true;
	var lastRow = 0;

	$("body").off("click", "#btnNew");
	$("body").on("click", "#btnNew", function () {
		actCnt = 1;
		htmlstring = "";
		toAdd = false;
		$('#btnAdd').trigger("click");
		toAdd = true;
	});

	$("body").off("click", "#btnAdd");
	$("body").on("click", "#btnAdd", function () {
		var template =	'<tr id="%%TXLCODE%%">' +
										' <td class="trMesswerte">%%CNT%%:&nbsp;</td>' +
										' <td class="trMesswerte bauteilnr">%%BAUTEIL%%&nbsp;&nbsp;</td>' +
										' <td class="trMesswerte"><input class="tbMesswerte" type="text" id="LWteil%%CNT%%"></td>' +
										' <td class="trMesswerte"><input class="tbMesswerte" type="text" id="CWteil%%CNT%%"></td>' +
										' <td class="trMesswerte"><input class="tbMesswerte" type="hidden" id="TXLCode%%CNT%%" value="%%TXLCODE%%"></td>' +
										' <td class="trMesswerte"><input class="tbComment" type="text" id="raucomm%%CNT%%"></td>' +
										' <td id="infoFromDB%%CNT%%"></td>' +
										'</tr>';

		
		var startCode = $('#tbStartwert').val();
		var endCode = $('#tbEndwert').val();
		var startPart = startCode.substring(7);
		var endPart = endCode.substring(7);
		var TMPType = startCode.substring(0,3);
		var TMPTool = startCode.substring(3,5);
		var TMPRev = startCode.substring(5,7);
		var StartCodeOhneTyp = startCode.substring(3);
		var first = true;
		var actCode = "";

		switch (TMPType) {
			case "GW1":
				tableHead = "<thead><tr><th></th><th></th><th>längs</th><th>quer</th><th></th><th>Kommentar</th></tr>" +
										"<tr class=\"smallhead\"><th></th><th></th><th>(17,5mm)</th><th>(5,6mm)</th></tr></thead>";
				break;
			case "GX1":
				tableHead = "<thead><tr><th></th><th></th><th>längs</th><th>quer</th><th></th><th>Kommentar</th></tr>" +
										"<tr class=\"smallhead\"><th></th><th></th><th>(5,6mm)</th><th>(1,75mm)</th></tr></thead>"
				break;
			case "GA1":
				tableHead = "<thead><tr><th></th><th></th><th>längs</th><th>quer</th><th></th><th>Kommentar</th></tr>" +
										"<tr class=\"smallhead\"><th></th><th></th><th>(5,6mm)</th><th>(1,75mm)</th></tr></thead>"
				break;
			case "GC1":
				tableHead = "<thead><tr><th></th><th></th><th>längs</th><th>quer</th><th></th><th>Kommentar</th></tr>" +
										"<tr class=\"smallhead\"><th></th><th></th><th>(5,6mm)</th><th>(1,75mm)</th></tr></thead>"
				break;

		}

		if ( toAdd ) { actCnt = getLastRowNr() + 1; } 

		for (i = startPart; i <= endPart; i++) {
			var toolRevPart = "";
			var locTmpl = ""; 
			//var bauteilstatus;
			var teilOk = false;
			var teilNichtOk = 0;

			

			if ( first ) {
				actCode = startCode;
				first = false;
			} else {
				actCode = helper.getNextPart(actCode);
			}
			
			// check bauteilstatus
			//bauteilstatus = DB.getBauteilStatus(actCode);
			switch (DB.getBauteilStatus(actCode)){
				case 0:
				case 1:
					teilOk = true;
					break;
				default:
					teilNichtOk++;
			}

			toolRevPart = helper.getToolRevPart(actCode);
			if ( !teilOk ) { toolRevPart = "<b><i style=\"color: red\">" + toolRevPart + "</i></b>"; }
			
			locTmpl = template.replace(/%%CNT%%/g, helper.pad(actCnt,2));
			locTmpl = locTmpl.replace(/%%TXLCODE%%/g, actCode);
			locTmpl = locTmpl.replace(/%%BAUTEIL%%/, toolRevPart);

			htmlstring = htmlstring + "\n" + locTmpl;

			actCnt++;
		}
		if ( toAdd ) { 
			htmlstring = htmlstring; 
		} else {
			htmlstring = tableHead + htmlstring; 
		}

		$('#tblMesswerte').html(htmlstring);
		lastRow = getLastRowNr();
		$("#debug").text("Eingabefelder für " + lastRow + " Bauteile erstellt.");

		//var table = document.getElementById("tblMesswerte");
		if ( teilNichtOk > 0 ) {
			swal({
				title: '<b>Achtung</b>',
				type: 'warning',
				html: 'Es wurden Bauteile eingetragen, die nicht in der Datenbank vorhanden sind. Die Messwerte für diese Teile werden nicht in der Datenbank erfasst.<br />Die betroffenen bauteile sind <b style="color: red;">rot</b> markiert.',
				showCloseButton: true,
				showCancelButton: false,
				confirmButtonText: 'Ok'
			});
		}
		//debugger;
	});


	/**
	 * die ganze Mausrad-Geschichte. Ziemliches Monster geworden!
	 * 
	 * mit der Maus über dem Input-Feld hoovern und dann mittels
	 * Mausrad hoch/runter tickern.
	 * 
	 * Mit modifier-Keys Shift, Ctrl und beiden
	 *  Shift: nur das Tool wird geändert
	 *  Strg : nur die Revision wird geändert
	 *  beide: der Bauteiltyp wird geändert
	 * 
	 * Bei Tool, Rev und Part gibt es noch überprüfungen, ob der
	 * Wert über 99 (bzw. 9999 bei Part) oder auf 0 ticken würde.
	 * Wird jeweils abgefangen. Ein Wert kann niemals 0 sein.
	 * Tool und Rev darf maximal 99 erreichen, Part maximal 9999.
	 * 
	 * Bauteiltyp, Toolnummer und Revisionsnummer werden immer in
	 * beiden Input-Feldern geändert (#tbStartwert & #tbEndwert)
	 * 
	 * Sollte Part in #tbStartwert größer als der in #tbEndwert sein,
	 * wird #tbEndwert.Part an #tbStartwert angeglichen.
	 * ViceVersa im negativem bei #tbEndwert.Part < #tbStartwert.Part
	 * 
	 **/

	$('body').off("mousewheel", "#tbStartwert");
	$("body").on("mousewheel", "#tbStartwert", function(e) {
		var curVal = e.currentTarget.value;
		var dir = e.deltaY;
		var tmpType = curVal.substring(0,3);
		var tmpTool = curVal.substring(3,5);
		var tmpRev = curVal.substring(5,7);
		var tmpPart = curVal.substring(7);
		
		if ( dir > 0 ){
			if ( e.shiftKey &! e.ctrlKey ){
				var newTool = pad(Number(tmpTool) + 1, 2)
				if ( newTool >= 99 ) { newTool = "99"; }
				e.currentTarget.value = tmpType + newTool + tmpRev + tmpPart;
				$("#tbEndwert").val(tmpType + newTool + tmpRev + tmpPart);
			} else if ( e.ctrlKey &! e.shiftKey ){
				var newRev = pad(Number(tmpRev) + 1, 2)
				if ( newRev >= 99 ) { newRev = "99"; }
				e.currentTarget.value = tmpType + tmpTool + newRev + tmpPart;
				$("#tbEndwert").val(tmpType + tmpTool + newRev + tmpPart);
			} else if ( e.ctrlKey && e.shiftKey){
				switch (tmpType){
					case "GW1": newType = "GA1"; break;
					case "GA1": newType = "GC1"; break;
					case "GC1": newType = "GX1"; break;
					case "GX1": newType = "GW1"; break;
				}
				e.currentTarget.value = newType + tmpTool + tmpRev + tmpPart;
				$("#tbEndwert").val(newType + tmpTool + tmpRev + tmpPart);
			} else {
				var newPart = pad(Number(tmpPart) + 1, 4);
				if ( newPart >= 9999 ) { newPart = "9999"; }
				e.currentTarget.value = tmpType + tmpTool + tmpRev + newPart;
				var endWert = $("#tbEndwert");
				var endPart = Number(endWert[0].value.substring(7));
				
				if ( endPart < Number(newPart) ) {
					endWert[0].value = tmpType + tmpTool + tmpRev + newPart;
				}
			}
			
		} else {
			if ( e.shiftKey &! e.ctrlKey ){
				var newTool = pad(Number(tmpTool) - 1, 2)
				if ( newTool <= 0 ) { newTool = "01"; }
				e.currentTarget.value = tmpType + newTool + tmpRev + tmpPart;
				$("#tbEndwert").val(tmpType + newTool + tmpRev + tmpPart);
			} else if ( e.ctrlKey &! e.shiftKey ){
				var newRev = pad(Number(tmpRev) - 1, 2)
				if ( newRev <= 0 ) { newRev = "01"; }
				e.currentTarget.value = tmpType + tmpTool + newRev + tmpPart;
				$("#tbEndwert").val(tmpType + tmpTool + newRev + tmpPart);
			}  else if ( e.ctrlKey && e.shiftKey){
				switch (tmpType){
					case "GW1": newType = "GA1"; break;
					case "GA1": newType = "GC1"; break;
					case "GC1": newType = "GX1"; break;
					case "GX1": newType = "GW1"; break;
				}
				e.currentTarget.value = newType + tmpTool + tmpRev + tmpPart;
				$("#tbEndwert").val(newType + tmpTool + tmpRev + tmpPart);
			}	else {
				var newPart = pad(Number(tmpPart) - 1, 4);
				if ( newPart <= 0 ) { newPart = "0001"; }
				e.currentTarget.value = tmpType + tmpTool + tmpRev + newPart;
				var endWert = $("#tbEndwert");
				var endPart = Number(endWert[0].value.substring(7));
				
				if ( endPart < Number(newPart) ) {
					endWert[0].value = tmpType + tmpTool + tmpRev + newPart;
				}
				
			}
		}
		
		return false;
	
	});

	$('body').off("mousewheel", "#tbEndwert");
	$("body").on("mousewheel", "#tbEndwert", function(e) {
		var curVal = e.currentTarget.value;
		var dir = e.deltaY;
		var tmpType = curVal.substring(0,3);
		var tmpTool = curVal.substring(3,5);
		var tmpRev = curVal.substring(5,7);
		var tmpPart = curVal.substring(7);
		
		if ( dir > 0 ){
			if ( e.shiftKey &! e.ctrlKey ){
				var newTool = pad(Number(tmpTool) + 1, 2)
				if ( newTool >= 99 ) { newTool = "99"; }
				e.currentTarget.value = tmpType + newTool + tmpRev + tmpPart;
				$("#tbStartwert").val(tmpType + newTool + tmpRev + tmpPart);
			} else if ( e.ctrlKey &! e.shiftKey ){
				var newRev = pad(Number(tmpRev) + 1, 2)
				if ( newRev >= 99 ) { newRev = "99"; }
				e.currentTarget.value = tmpType + tmpTool + newRev + tmpPart;
				$("#tbStartwert").val(tmpType + tmpTool + newRev + tmpPart);
			} else if ( e.ctrlKey && e.shiftKey){
				switch (tmpType){
					case "GW1": newType = "GA1"; break;
					case "GA1": newType = "GC1"; break;
					case "GC1": newType = "GX1"; break;
					case "GX1": newType = "GW1"; break;
				}
				e.currentTarget.value = newType + tmpTool + tmpRev + tmpPart;
				$("#tbStartwert").val(newType + tmpTool + tmpRev + tmpPart);
			} else {
				var newPart = pad(Number(tmpPart) + 1, 4);
				if ( newPart >= 9999 ) { newPart = "9999"; }
				e.currentTarget.value = tmpType + tmpTool + tmpRev + newPart;
				var startWert = $("#tbStartwert");
				var startPart = Number(startWert[0].value.substring(7));
				
				if ( startPart > Number(newPart) ) {
					startWert[0].value = tmpType + tmpTool + tmpRev + newPart;
				}
			}
			
		} else {
			if ( e.shiftKey &! e.ctrlKey ){
				var newTool = pad(Number(tmpTool) - 1, 2)
				if ( newTool <= 0 ) { newTool = "01"; }
				e.currentTarget.value = tmpType + newTool + tmpRev + tmpPart;
				$("#tbStartwert").val(tmpType + newTool + tmpRev + tmpPart);
			} else if ( e.ctrlKey &! e.shiftKey ){
				var newRev = pad(Number(tmpRev) - 1, 2)
				if ( newRev <= 0 ) { newRev = "01"; }
				e.currentTarget.value = tmpType + tmpTool + newRev + tmpPart;
				$("#tbStartwert").val(tmpType + tmpTool + newRev + tmpPart);
			}  else if ( e.ctrlKey && e.shiftKey){
				switch (tmpType){
					case "GW1": newType = "GA1"; break;
					case "GA1": newType = "GC1"; break;
					case "GC1": newType = "GX1"; break;
					case "GX1": newType = "GW1"; break;
				}
				e.currentTarget.value = newType + tmpTool + tmpRev + tmpPart;
				$("#tbStartwert").val(newType + tmpTool + tmpRev + tmpPart);
			}	else {
				var newPart = pad(Number(tmpPart) - 1, 4);
				if ( newPart <= 0 ) { newPart = "0001"; }
				e.currentTarget.value = tmpType + tmpTool + tmpRev + newPart;
				var startWert = $("#tbStartwert");
				var startPart = Number(startWert[0].value.substring(7));
				
				if ( startPart > Number(newPart) ) {
					startWert[0].value = tmpType + tmpTool + tmpRev + newPart;
				}
				
			}
		}
		
		return false;
	
	});


	$("body").off("keypress", "#tblMesswerte input");
	$("body").on("keypress", "#tblMesswerte input", function(e) {	
			var keyCode = e.keyCode || e.which;
			if (keyCode === 13) { 
				var obj = e.target

				messwert = obj.value

				if ( !$.isNumeric(messwert) ) {
					swal("Fehler", "Das ist keine Zahl", "error");
					return;
				}

				dieseTB = obj.id;
				messpunkt = obj.id.substring(0,2);
				messreihe = obj.id.substring(6);
				nextrow = pad(Number(messreihe) + 1,2);
				lastRow = getLastRowNr();
				nextTB = "#" + messpunkt + "teil" + nextrow;
				
				//console.log(dieseTB + ": " + messpunkt +", " + messreihe + ", " + messwert);
				//console.log("nextrow: " + nextrow);
				if ( $(nextTB).length != 0 ) {
					$(nextTB).focus();
				} else {
					if ( nextrow >= lastRow && messpunkt !== "CW"){
					 $("#CWteil01").focus();
					} else {
						alert("fertif");
					}
				}
				
				if ( messpunkt === "CW" ) {
					var messwerte = {};
					messwerte.func = "updateBauteilRauheiten";
					messwerte.TXLCode = $("#TXLCode" + messreihe)[0].value;
					messwerte.LW = $("#LWteil" + messreihe)[0].value;
					messwerte.CW = $("#CWteil" + messreihe)[0].value;
					messwerte.raudate = heute() + " " + jetzt();
					messwerte.raucomm = $("#raucomm" + messreihe)[0].value;

					if ( !$.isNumeric(messwerte.LW) || !$.isNumeric(messwerte.CW)) {
						$("#infoFromDB" + messreihe).html("<b style=\"color: red; font-size: 0.85em;\">Keine Zahl!</b>");
						return;
					}

					updateResult = DB.sendJSONGeneric(messwerte);
					//$("#infoFromDB" + messreihe).text(messwerte.TXLCode + "/" + messwerte.LW + "/" + messwerte.CW + "/" + messwerte.raudate + "/" + messwerte.raucomm);
					if (updateResult.responseText === "1") {
						$("#infoFromDB" + messreihe).html("<i>ok</i>");
					} else {
						$("#infoFromDB" + messreihe).html("<b style=\"color: red\">FEHLER</b>");
					}
					
					//console.log(messwerte);
				}
				
			}
	});


	function getLastRowNr(){
		// die zwei oberen rows bedenken (header längs/quer und die messlängenangaben)
		var table = document.getElementById("tblMesswerte");
		var lastCnt = 0;

		for (var i = 0, row; row = table.rows[i]; i++) {
			lastCnt = i - 1;
		}
		return lastCnt;
	}


});



