function DBAdmin(sTableId)
{
	this.sTableId = sTableId;
	
	this.save_form = function (sFormType, sRecordId, sActionAfter)
	{
		// get field values
		var aFields = new Array();
		
		iFieldCounter = 0;
		$('#dbadmin_form_' + this.sTableId + ' :input').each(function() 
		{
			sFieldType = this.type;
			sFieldName = this.name;
			
			if ( this.length > 0 )
			{
				sFieldType = this[0].type;
				sFieldName = this[0].name;
			}
			
			if ( this.tagName.toLowerCase() == 'select' )
				sFieldType = 'select';
			if ( this.tagName.toLowerCase() == 'textarea' )
				sFieldType = 'textarea';
					
			switch ( sFieldType )
			{
				case 'select':
					aFields[iFieldCounter] = new Object();
					aFields[iFieldCounter].name = this.name;
					aFields[iFieldCounter].value = this.options[this.selectedIndex].value;
					iFieldCounter++;
					break;
				case 'text':
				case 'hidden':
				case 'password':
				case 'textarea':
					aFields[iFieldCounter] = new Object();
					aFields[iFieldCounter].name = this.name;
					aFields[iFieldCounter].value = this.value;
					iFieldCounter++;
					break;
				case 'checkbox':
					aFields[iFieldCounter] = new Object();
					aFields[iFieldCounter].name = this.name;
					
					if ( this.checked == true )
						aFields[iFieldCounter].value = true;
					else
						aFields[iFieldCounter].value = false;
					
					iFieldCounter++;
					break;
				case 'radio':
					if(this.checked)
					{
						aFields[iFieldCounter] = new Object();
						aFields[iFieldCounter].name = this.name;
						aFields[iFieldCounter].value = this.value;
						iFieldCounter++;
					}
					break;
			}							
		});
		
		// prepare JSON request
		JSONRequest = {
			module: "DBAdmin",
			table_id: this.sTableId,
			action: sFormType,
			fields: aFields,
			action_after: sActionAfter
		}
		
		if ( sFormType == 'edit' )
			JSONRequest.id = sRecordId;

		$.post('/json-gateway/', {json_request: JSON.stringify(JSONRequest)}, function(JSONResponse){
			if ( JSONResponse.response_code == -1 )
				alert(JSONResponse.response_text);
			else
			{
				if (JSONResponse.action_after == 'list')
				{
					document.location.href=JSONResponse.list_link;
				}
				else
				{
					oDBAdmin = new DBAdmin(JSONResponse.table_id);
					
					if ( sFormType == 'add' )
						oDBAdmin.clear_form();
						
					oDBAdmin.show_message(JSONResponse.response_code, JSONResponse.response_text, 'form');
				}
			}
		}, "json")
	}

	this.remove_record = function (sRecordId)
	{
		if ( confirm('These items will be permanently deleted and cannot be recovered. Are you sure?') )
		{
			JSONRequest = {
				module: "DBAdmin",
				table_id: this.sTableId,
				action: "remove",
				id: sRecordId
			}
	
			$.post('/json-gateway/', {json_request: JSON.stringify(JSONRequest)}, function(JSONResponse){
				if ( JSONResponse.response_code == -1 )
					alert(JSONResponse.response_text);
				else
				{
					$('#dbadmin_list_row_' + JSONResponse.table_id + '_' + JSONResponse.id).animate({ backgroundColor: "#ff0000" }, "slow", function() { $(this).animate({ opacity: "hide" }, "slow", function()																																			
		{
			oDBAdmin = new DBAdmin(JSONResponse.table_id);
			oDBAdmin.show_message(JSONResponse.response_code, JSONResponse.response_text, 'list');
	   } ) } );
					
				}
			}, "json");
		}
	}
	
	this.show_message = function (iResponseCode, sResponseText, sPrependTo)
	{
		if ( sPrependTo == 'form' )
		{
			sPrependToId = 'dbadmin_form_' + this.sTableId;
			sMessageClass = 'dbadmin_message_form';
		}
		else
		{
			sPrependToId = 'dbadmin_list_' + this.sTableId;
			sMessageClass = 'dbadmin_message_list';
		}
			
		if ( $('#dbadmin_message_' + this.sTableId).length > 0 )
		{
			$('#dbadmin_message_' + this.sTableId).text(sResponseText);
		}
		else
		{
			var dbadmin_message_div = $("<div></div>").attr('id','dbadmin_message_' + this.sTableId).css({display:"none"}).text(sResponseText);
			$('#' + sPrependToId).prepend(dbadmin_message_div);
			
			$('html, body').animate({ scrollTop: $('#dbadmin_message_' + this.sTableId).offset().top}, 1000);
			
			$('#dbadmin_message_' + this.sTableId).slideDown("fast");
		}
		
		switch ( iResponseCode )
		{
			case 0:
				$('#dbadmin_message_' + this.sTableId).removeClass().addClass(sMessageClass + ' ui-corner-all ui-state-error');
				break;
			case 1:
				$('#dbadmin_message_' + this.sTableId).removeClass().addClass(sMessageClass + ' ui-corner-all ui-state-success');
				break;
		}
		
		$('#dbadmin_message_' + this.sTableId).animate({opacity: 1}, 5000, function () { $(this).hide("slow", function() { $(this).remove(); } ); });
	}

	this.populate = function (sRecordId)
	{
		//$.blockUI({ message: "Please wait, loading data...", css: { padding:'15px', fontSize:'14px' }}); 
			
		// prepare JSON request
		JSONRequest = {
			module: "DBAdmin",
			table_id: this.sTableId,
			action: "populate",
			id: sRecordId
		}
		
		$.post('/json-gateway/', {json_request: JSON.stringify(JSONRequest)}, function(JSONResponse){
			if ( JSONResponse.response_code == -1 )
				alert(JSONResponse.response_text);
			else
			{
				oForm = document.forms['dbadmin_form_' + JSONResponse.table_id];
				for(i=0; i<JSONResponse.fields.length; i++)
				{
					oField = oForm[JSONResponse.fields[i].name];
					if ( oField != undefined )
					{
						sFieldType = oField.type;
						sFieldName = oField.name;
						
						if ( oField.length > 0 )
						{
							sFieldType = oField[0].type;
							sFieldName = oField[0].name;
						}
						
						if ( oField.tagName != undefined )
						{
							if ( oField.tagName.toLowerCase() == 'select' )
								sFieldType = 'select';
							if ( oField.tagName.toLowerCase() == 'textarea' )
								sFieldType = 'textarea';
						}
							
						switch ( sFieldType )
						{
							case 'select':
								for(j = 0; j < oField.length; j++)
								{
									if(oField[j].value == JSONResponse.fields[i].value)
										oField.selectedIndex = j;
								}
								break;
							case 'text':
							case 'password':
							case 'textarea':
								oField.value = JSONResponse.fields[i].value;
								break;
							case 'checkbox':
								if ( JSONResponse.fields[i].value )
									oField.checked = true;
								else
									oField.checked = false;
								break;
							case 'radio':
								var radioLength = oField.length;
								if(radioLength == undefined) 
								{
									oField.checked = (oField.value == JSONResponse.fields[i].value.toString());
								}
								else
								{
									for(var j = 0; j < radioLength; j++) 
									{
										oField[j].checked = false;
										if(oField[j].value == JSONResponse.fields[i].value.toString()) 
										{
											oField[j].checked = true;
										}
									}
								}
								break;
						}
					}				
				}
			}
		}, "json")
		
		//$.unblockUI; 
	}

	this.clear_form = function ()
	{
		$('#dbadmin_form_' + this.sTableId + ' :input').each(function() {
			var type = this.type;
			var tag = this.tagName.toLowerCase();

			if (type == 'text' || type == 'password' || tag == 'textarea')
				this.value = '';
				
			else if (type == 'checkbox' || type == 'radio')
				this.checked = false;

			else if (tag == 'select')
				this.selectedIndex = -1;
		});
	}
}