diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog
index cd95f588a2..537e392b70 100644
--- a/pandora_console/ChangeLog
+++ b/pandora_console/ChangeLog
@@ -1,3 +1,10 @@
+2012-07-19  Sergio Martin <sergio.martin@artica.es>
+
+	* godmode/modules/manage_network_components_form.php
+	godmode/modules/manage_network_components_form_plugin.php: Add 
+	first version of dynamic macros in network components of type
+	plug-in
+
 2012-07-19  Sergio Martin <sergio.martin@artica.es>
 
 	* pandoradb.sql
diff --git a/pandora_console/godmode/modules/manage_network_components_form.php b/pandora_console/godmode/modules/manage_network_components_form.php
index b3414ce6a3..72b08c6a84 100644
--- a/pandora_console/godmode/modules/manage_network_components_form.php
+++ b/pandora_console/godmode/modules/manage_network_components_form.php
@@ -478,4 +478,97 @@ $(document).ready (function () {
 type_change ();
 <?php endif; ?>
 //-->
+
+// Functions to add and remove dynamic fields for macros 
+function delete_macro() {
+	var next_row = parseInt($('#next_row').html());
+	$('#next_row').html(next_row-2);
+	var next_number = parseInt($('#next_macro').html());
+	$('#next_macro').html(next_number-1);
+
+	var nrow1 = next_row - 2;
+	var nrow2 = next_row - 1;
+	
+	var $row1 = $('#network_component-plugin_'+nrow1).remove();
+	var $row2 = $('#network_component-plugin_'+nrow2).remove();
+}
+
+function new_macro() {
+	var next_row = parseInt($('#next_row').html());
+
+	$('#next_row').html(next_row+2);
+	var nrow1 = next_row - 2;
+	var nrow2 = next_row - 1;
+	var nrow3 = next_row;
+	var nrow4 = next_row + 1;
+	
+	var next_number = parseInt($('#next_macro').html());
+	$('#next_macro').html(next_number+1);
+	var current_number = next_number - 1;
+	
+	// Clone two last rows
+	var $row1 = $('#network_component-plugin_'+nrow1).clone(true);
+	var $row2 = $('#network_component-plugin_'+nrow2).clone(true);
+
+	// Change the tr ID
+	$row1.attr('id','network_component-plugin_'+(nrow3));
+	$row2.attr('id','network_component-plugin_'+(nrow4));
+	// Change the td ID
+	$row1.find('td').attr('id', changeTdId);
+	$row2.find('td').attr('id', changeTdId);
+	
+	// Insert after last field
+	$row2.insertAfter('#network_component-plugin_'+nrow2);
+	$row1.insertAfter('#network_component-plugin_'+nrow2);
+	
+	// Change labels
+	for(i=0;i<=3;i++) {
+		var label1 = $("#network_component-plugin_"+nrow3+"-"+i).html();
+		var exp_reg = new RegExp('field'+current_number, 'g'); 
+		label1 = label1.replace(exp_reg,'field'+next_number);
+		$("#network_component-plugin_"+nrow3+"-"+i).html(label1);
+	}
+	
+	for(i=0;i<=1;i++) {
+		var label2 = $("#network_component-plugin_"+nrow4+"-"+i).html();
+		var exp_reg = new RegExp('field'+current_number, 'g'); 
+		label2 = label2.replace(exp_reg,'field'+next_number);
+		$("#network_component-plugin_"+nrow4+"-"+i).html(label2);
+	}
+	
+	// Empty the text inputs
+	$('#text-field'+next_number+'_desc').val('');
+	$('#text-field'+next_number+'_help').val('');
+	$('#text-field'+next_number+'_value').val('');
+	
+	function changeTdId() {
+		switch(this.id) {
+			case 'network_component-plugin_'+(nrow1)+'-0':
+				return 'network_component-plugin_'+(nrow3)+'-0';
+				break;
+			case 'network_component-plugin_'+(nrow1)+'-1':
+				return 'network_component-plugin_'+(nrow3)+'-1';
+				break;
+			case 'network_component-plugin_'+(nrow1)+'-2':
+				return 'network_component-plugin_'+(nrow3)+'-2';
+				break;
+			case 'network_component-plugin_'+(nrow1)+'-3':
+				return 'network_component-plugin_'+(nrow3)+'-3';
+				break;
+			case 'network_component-plugin_'+(nrow2)+'-0':
+				return 'network_component-plugin_'+(nrow4)+'-0';
+				break;
+			case 'network_component-plugin_'+(nrow2)+'-1':
+				return 'network_component-plugin_'+(nrow4)+'-1';
+				break;
+			case 'network_component-plugin_'+(nrow2)+'-2':
+				return 'network_component-plugin_'+(nrow4)+'-2';
+				break;
+			case 'network_component-plugin_'+(nrow2)+'-3':
+				return 'network_component-plugin_'+(nrow4)+'-3';
+				break;
+		}
+	}
+	
+}
 </script>
diff --git a/pandora_console/godmode/modules/manage_network_components_form_plugin.php b/pandora_console/godmode/modules/manage_network_components_form_plugin.php
index 9885e48521..8c46c0f4a0 100644
--- a/pandora_console/godmode/modules/manage_network_components_form_plugin.php
+++ b/pandora_console/godmode/modules/manage_network_components_form_plugin.php
@@ -63,7 +63,11 @@ push_table_row ($data, 'plugin_4');
 $macros = json_decode($macros,true);
 // The next row number is plugin_5
 $next_name_number = 5;
-for($i=1;$i<=6;$i++) {
+$i = 1;
+while(1) {
+	if(!isset($macros[$i]) || $macros[$i]['desc'] == '') {
+		break;
+	}
 	$macro_desc_name = 'field'.$i.'_desc';
 	$macro_desc_value = '';
 	$macro_help_name = 'field'.$i.'_help';
@@ -97,7 +101,7 @@ for($i=1;$i<=6;$i++) {
 	push_table_row ($data, 'plugin_'.$next_name_number);
 	$next_name_number++;
 	
-	$table->colspan['plugin_'.$next_name_number][1] = 3;
+	$table->colspan['plugin_'.$next_name_number][1] = 2;
 
 	$data = array ();
 	$data[0] = sprintf(__('Macro %s help'),$macro_name);
@@ -106,7 +110,18 @@ for($i=1;$i<=6;$i++) {
 
 	push_table_row ($data, 'plugin_'.$next_name_number);
 	$next_name_number++;
+	$i++;
 }
 
+	$table->colspan['plugin_n'][2] = 2;
+
+	$data = array ();
+	$data[0] = '';
+	$data[1] = __('Add macro').' <a href="javascript:new_macro()">'.html_print_image('images/add.png',true).'</a>';
+	$data[1] .= '<div id="next_macro" style="display:none">'.$i.'</div>';
+	$data[1] .= '<div id="next_row" style="display:none">'.$next_name_number.'</div>';
+	$data[2] = __('Delete macro').' <a href="javascript:delete_macro()">'.html_print_image('images/cancel.png',true).'</a>';
+
+	push_table_row ($data, 'plugin_n');
 ?>