(function($) {	
	$.fn.dba = function(options) {
		var standardParams = {
			dbaTableId: 1,
			fieldId: $(this).attr('id'),
			returnValues: '{"1": "name"}',
			idField: "default"
		};
		
		var params = $.extend(standardParams, options);
		
		$('#dbaSearchLink_' + params['fieldId']).remove();
		$(this).after("<img src='presentation/pics/icons/search_16.png' id='dbaSearchLink_" + params['fieldId'] + "' accesskey='" + params['idField'] + "' name='" + params['fieldId'] + "' class='dbaSearchLink' style='float: left; margin-left: 5px; margin-top: 4px;' />");
		
		
		$('#txtDBASearch').keypress(function() {
			var key;
			   
			if (window.event) {
	  			key = window.event.keyCode; //IE
	  		}
			else {
			  	key = e.which; //firefox
			}   
			
			if (key == 13) {
				$('#btnDBASearch').click();
			}
		});
		
		
		$('#dbaEditDialog').jqm({modal: true});
		
		
		$('#closeDBAWindow').click(function() {
			$('#dbaEditDialog').jqmHide();
			$('#btnDBASearch').unbind('click');
		});
		
		
		$('.dbaSearchLink').hover(
			function() {
				$(this).css('cursor', 'pointer');
			},
			function() {
				$(this).css('cursor', 'default');
			}
		);
	
	
		$('#dbaSearchLink_' + params['fieldId']).click(function() {
			$('#fsDBASearchResults').css("display", "block");
			$('#dbaSearchResults').html("<i>Ingen søk er utført</i>");
			$('#dbaEditContainer').css("display", "none");
			$('#lblDBAActionResult').html("");
			$('#dbaEditDialog').jqmShow();
			$('#txtDBASearch').val("");
			
			params['idField'] = $(this).attr('accesskey');
			params['fieldId'] = $(this).attr('name');
			
			if ($('#hdnAllowInsert').val() == "" || $('#hdnAllowUpdate').val() == "" || $('#hdnAllowDelete').val() == "") {
				$.postJSON("presentation/AjaxRouter.php", {action: "57", dbaTableId: params['dbaTableId']}, function(data) {
					$('#hdnAllowInsert').val(data.allowInsert);
					$('#hdnAllowUpdate').val(data.allowUpdate);
					$('#hdnAllowDelete').val(data.allowDelete);
				});
			}
			
			
			if ($('#hdnAllowInsert').val() == "Y") {
				$('#addNewPlaceholder').html("<a id='addNew'>Legg til ny</a>");
				
				$('#addNew').click(function() {
					$.postJSON("presentation/AjaxRouter.php", {action: "54", dbaTableId: params['dbaTableId'], id: ""}, function(data) {
						$(this).generateDBAFields(data, params);
					});
					
					$('#fsDBASearchResults').css("display", "none");
					$('#dbaEditContainer').css("display", "block");
					$('#lblDBAActionResult').html("");
					$('#legDBAEdit').html("Oppretter ny");
					$('.dbaInputField').val("");
				});
			}
			else {
				$('#addNewPlaceholder').html("");
			}
			
			
			$('#btnDBASearch').click(function() {
				$('#fsDBASearchResults').css("display", "block");
				$('#dbaEditContainer').css("display", "none");
				$('#lblDBAActionResult').html("");
				
				$.postJSON("business/AjaxController.php", {action: "1", searchString: $('#txtDBASearch').val(), searchType: $('#cmbDBASearchType').val(), dbaTableId: params['dbaTableId'], dbaFieldList: "", filter: "", cache: 0}, function(data) {
					$(this).showDBASearchResult(data, params);
				});
			});
		});
	};
	
	
	$.fn.showDBASearchResult = function(data, params) {
		var html = "<table class='list'>";
	
		if (data != null && data.length > 1) {		
			$.each(data, function(entryIndex, entry) {
				var style = "";
				
				if (params["dbaTableId"] == 1) {
					if (entry[5] == "Y") {
						style = "style='color: #A4A4A4';";
					}
					else if (entry[6] == "H") {
						style = "style='color: #997F00';";
					}
					else if (entry[6] == "D") {
						style = "style='color: #990000';";
					}
				}
				
				html += "<tr " + style + ">";
				
				$.each(entry, function(valueIndex, value) {
					if (params["dbaTableId"] != 1 || valueIndex != 5) {
						if (entryIndex == 0) {
							if (valueIndex > 0) {
								html += "<th>" + entry[valueIndex] + "</th>";
							}
						}
						else {
							if (valueIndex > 0) {
								if (valueIndex == 6) {
									if (entry[5] == "Y") {
										html += "<td>Deaktivert</td>";
									}
									else if (entry[valueIndex] == "H") {
										html += "<td>Hurtig</td>";
									}
									else if (entry[valueIndex] == "D") {
										html += "<td>Dublett</td>";
									}
									else {
										html += "<td>Normal</td>";
									}
								}
								else {
									html += "<td>" + entry[valueIndex] + "</td>";
								}
							}
						}
					}
					
					/*
					if (entryIndex == 0) {
						if (valueIndex > 0) {
							html += "<th>" + value + "</th>";
						}
					}
					else {
						if (valueIndex > 0) {
							html += "<td id='" + valueIndex + "'>" + value + "</td>";
						}
					}*/
				});
				
				if (entryIndex == 0) {
					html += "<th>&nbsp;</th>";
				}
				else {
					html += "<td style='width: 55px;'>";
					
					if ($('#hdnAllowUpdate').val() == "Y") {
						html += "<a class='editDBALink' id='" + entry[0] + "' style='float: left;'><img src='presentation/pics/icons/edit_16.png' title='Endre' /></a>";
					}
					
					if ($('#hdnAllowDelete').val() == "Y") {
						html += "<a class='deleteDBALink' id='" + entry[0] + "' style='float: left; margin-left: 3px;'><img src='presentation/pics/icons/cancel.png' title='Slett' /></a>";
					}
					
					html += "<a class='chooseDBALink' id='" + entryIndex + "' style='float: left; margin-left: 3px;'><img src='presentation/pics/icons/go_16.png' title='Velg' /></a></td>";
				}
				
				html += "</tr>";
			});
		}
		else {
			html += "<tr><th>Ingen treff</th></tr>";
			html += "<tr><td><i>Søket ditt hadde ingen treff</i></td></tr>";
		}
		
		html += "</table>";
		
		$('#dbaSearchResults').html(html);
		
		$('table.list tr:not([th], .noStriping):even').addClass('even');
		$('table.list tr:not([th], .noStriping):odd').addClass('odd');
		
		
		$('.editDBALink').click(function() {
			if ($('#hdnAllowUpdate').val() == "Y") {
				$.postJSON("presentation/AjaxRouter.php", {action: "54", dbaTableId: params['dbaTableId'], id: $(this).attr('id')}, function(data) {
					$(this).generateDBAFields(data, params);
				});
				
				$('#fsDBASearchResults').css("display", "none");
				$('#dbaEditContainer').css("display", "block");
				$('#legDBAEdit').html("Endrer");
			}
		});
		
		
		$('.deleteDBALink').click(function() {
			if (confirm("Vil du virkelig slette dette elementet fra registeret?")) {
				if ($('#hdnAllowDelete').val() == "Y") {
					$.postJSON("business/AjaxController.php", {action: "52", id: $(this).attr('id'), dbaTableId: params['dbaTableId']}, function(data) {
						if (data.result == "success") {
							$('#lblDBAActionResult').html("<span style='color: green;'>" + data.message + "</span>");
							$.postJSON("business/AjaxController.php", {action: "1", searchString: $('#txtDBASearch').val(), searchType: $('#cmbDBASearchType').val(), dbaTableId: params['dbaTableId'], dbaFieldList: "", filter: "", cache: 0}, function(data2) {
								$(this).showDBASearchResult(data2, params);
							});
						}
						else {
							$('#lblDBAActionResult').html("<span style='color: red;'>" + data.message + "</span>");
						}
					});
				}
			}
		});
		
		
		$('.chooseDBALink').click(function() {
			var id = data[this.id][0];
			
			$.postJSON("presentation/AjaxRouter.php", {action: "55", dbaTableId: params['dbaTableId'], id: id, fields: params['returnValues']}, function(data) {
				$('#' + params['fieldId']).val("");
				$('#' + params['fieldId']).val(data.fieldValue);
				$('#' + params['idField']).val(id);
				$('#' + params['idField']).change();
			});
			
			$('#dbaEditDialog').jqmHide();
			$('#btnDBASearch').unbind('click');
		});
	};
	
	
	
	$.fn.generateDBAFields = function(data, params) {
		var html = "<table>";
	
		if (data.length > 0) {
			var i = 0;
			
			$.each(data, function(entryIndex, entry) {
				if (entry.nameDB == "id") {
					html += "<input type='hidden' name='" + entry.nameDB + "' id='" + entry.nameDB + "' class='dbaInputField' value='" + entry.fieldValue + "' />";
				}
				else {
					if (i == 0) {
						html += "<tr><td style='padding-right: 10px'>" + entry.name + ":</td>";
						html += "<td><input type='text' name='" + entry.nameDB + "' id='" + entry.nameDB + "' class='dbaInputField' value='" + entry.fieldValue + "' style='width: 200px;' /></td>";
					
						if ((entryIndex + 1) == data.length) {
							html += "<td colspan='3'>&nbsp;</td></tr>";
						}
						
						i = 1;
					}
					else {
						html += "<td style='width: 50px;'>&nbsp;</td>";
						html += "<td style='padding-right: 10px'>" + entry.name + ":</td>";
						html += "<td><input type='text' name='" + entry.nameDB + "' id='" + entry.nameDB + "' class='dbaInputField' value='" + entry.fieldValue + "' style='width: 200px;' /></td></tr>";
					
						i = 0;
					}
				}
			});
			
			html += "<tr><td colspan='5'>&nbsp;</td></tr>";
			html += "<tr><td colspan='5' style='text-align: right;'><input type='button' id='btnDBACancel' value='Avbryt' style='margin-right: 5px;' />";
			html += "<input type='button' id='btnDBASave' value='Lagre' /></td></tr>";
		}
		else {
			html += "<tr><td>Feltene kan ikke redigeres</td></tr>";
		}
		
		html += "</table>";
		
		$('#dbaEditFields').html(html);
		
		if (data.length > 0) {
			$('.dbaInputField').focus();
		}
		
		
		$('#btnDBASave').click(function() {
			var val = "{";
			var useComma = false;
			
			$('.dbaInputField').each(function(entryIndex, entry) {
				if ($(this).val() != "") {
					var separator = (useComma ? "," : "");
					
					val += separator + "\"" + $(this).attr('name') + "\": ";
					val += "\"" + $(this).val() + "\"";
					useComma = true;
				}
			});
			
			val += "}";
			
			
			$.postJSON("presentation/AjaxRouter.php", {action: "51", dbaTableId: params['dbaTableId'], values: val}, function(data) {
				if (data.length > 0) {
					$.each(data, function(entryIndex, entry) {
						if (entry.field_error_message) {
							$('#' + entry.field_name).addClass("error");
						}
						else {
							$('#' + entry.field_name).removeClass("error");
						}
					});
				}
				else {
					try {
						var json = jQuery.parseJSON(params['returnValues']);
						var returnString = "";
						
						$.each(json, function(entryIndex, entry) {
							returnString += data[entry] + " ";
						});
						
						$('#' + params['fieldId']).val(jQuery.trim(returnString));
						$('#' + params['idField']).val(data.id);
						$('#' + params['idField']).change();
					}
					catch(ex) {
						alert("En feil oppstod: " + ex);
					}
					
					$('#dbaEditDialog').jqmHide();
					$('#btnDBASearch').unbind('click');
				}
			});
		});
		
		
		
		$('#btnDBACancel').click(function() {
			$('#fsDBASearchResults').css("display", "block");
			$('#dbaEditContainer').css("display", "none");
		});
	};
	
	
	$.fn.initDBAEdit = function(params) {
		$('.dbaSearchLink').remove();
		$('.hdnDBAEdit').val('');
		
		
		$('.dbaEdit').each(function(entry) {
			$(this).after("<img src='presentation/pics/icons/search_16.png' id='" + params['dbaTableId'] + "' class='dbaSearchLink' style='float: left; margin-left: 5px; margin-top: 4px;'");
			
			$('.dbaSearchLink').hover(
				function() {
					$(this).css('cursor', 'pointer');
				},
				function() {
					$(this).css('cursor', 'default');
				}
			);
			
			
			$('.dbaSearchLink').click(function() {
				$('#fsDBASearchResults').css("display", "block");
				$('#dbaEditContainer').css("display", "none");
				$('#lblDBAActionResult').html("");
				$('#dbaEditDialog').jqmShow();
				$('#hdnDBATableId').val($(this).attr('id'));
				$('#txtDBASearch').val("");
				
				if ($('#hdnAllowInsert').val() == "" || $('#hdnAllowUpdate').val() == "" || $('#hdnAllowDelete').val() == "") {
					$.postJSON("presentation/AjaxRouter.php", {action: "57", dbaTableId: $('#hdnDBATableId').val()}, function(data) {
						$('#hdnAllowInsert').val(data.allowInsert);
						$('#hdnAllowUpdate').val(data.allowUpdate);
						$('#hdnAllowDelete').val(data.allowDelete);
						
						if (data.allowInsert == "Y") {
							$('#addNewPlaceholder').html("<a id='addNew'>Legg til ny</a>");
							
							$('#addNew').click(function() {
								$.postJSON("presentation/AjaxRouter.php", {action: "54", dbaTableId: $('#hdnDBATableId').val(), id: ""}, function(data) {
									$(this).generateDBAFields(data, params);
								});
								
								$('#fsDBASearchResults').css("display", "none");
								$('#dbaEditContainer').css("display", "block");
								$('#lblDBAActionResult').html("");
								$('#legDBAEdit').html("Oppretter ny");
								$('.dbaInputField').val("");
							});
						}
						else {
							$('#addNewPlaceholder').html("");
						}
					});
				}
			});
		});
	};
	
})(jQuery);

