<?php

// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 Artica Soluciones Tecnologicas
// Please see http://pandorafms.org for full contribution list

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; version 2

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.

$refr = get_parameter('refresh', 0); // By default 30 seconds
function mainAgentsModules() {
	global $config;
	
	// Load global vars
	require_once ("include/config.php");
	require_once ("include/functions_reporting.php");
	include_once($config['homedir'] . "/include/functions_agents.php");
	include_once($config['homedir'] . "/include/functions_modules.php");
	include_once($config['homedir'] . '/include/functions_users.php');
	
	check_login ();
	// ACL Check
	if (! check_acl ($config['id_user'], 0, "AR")) {
		db_pandora_audit("ACL Violation", 
		"Trying to access Agent view (Grouped)");
		require ("general/noaccess.php");
		exit;
	}
	
	// Update network modules for this group
	// Check for Network FLAG change request
	// Made it a subquery, much faster on both the database and server side
	if (isset ($_GET["update_netgroup"])) {
		$group = get_parameter_get ("update_netgroup", 0);
		if (check_acl ($config['id_user'], $group, "AW")) {
			$where = array("id_agente" => "ANY(SELECT id_agente FROM tagente WHERE id_grupo = " . $group);
			
			db_process_sql_update('tagente_modulo', array("flag" => 1), $where);
		}
		else {
			db_pandora_audit("ACL Violation", "Trying to set flag for groups");
			require ("general/noaccess.php");
			exit;
		}
	}
	
	if ($config["realtimestats"] == 0) {
		$updated_info = __('Last update'). " : ". ui_print_timestamp (db_get_sql ("SELECT min(utimestamp) FROM tgroup_stat"), true);
	}
	else {
	//	$updated_info = __("Updated at realtime");
		$updated_info = "";
	}
	
	$updated_time = $updated_info;
	
	$modulegroup = get_parameter('modulegroup', 0);
	$refr = get_parameter('refresh', 0); // By default 30 seconds
	
	$recursion = get_parameter('recursion', 0);
	$group_id = (int)get_parameter('group_id', 0);
	$offset = (int)get_parameter('offset', 0);
	$hor_offset = (int)get_parameter('hor_offset', 0);
	$block = $config['block_size'];
	if(get_parameter('modulegroup') != null){
		$agents_id = (array)get_parameter('id_agents2', -1);	
	}
	$selection_a_m = (int)get_parameter('selection_agent_module');
	$modules_selected = (array)get_parameter('module', 0);
	$update_item = (string)get_parameter('edit_item','');
	$save_serialize = (int)get_parameter('save_serialize', 0);
	$full_modules_selected = explode(";",get_parameter('full_modules_selected', 0));
	$full_agents_id = explode(";",get_parameter('full_agents_id', 0));
	
	if($save_serialize && $update_item == ''){
		$unserialize_modules_selected  = unserialize_in_temp($config['id_user']."_agent_module", true, 1);
		$unserialize_agents_id         = unserialize_in_temp($config['id_user']."_agents", true, 1); 	
		if($unserialize_modules_selected){
			$modules_selected = $unserialize_modules_selected;
		}
		if($unserialize_agents_id){
			$agents_id = $unserialize_agents_id; 
		}
	}
	else{
		unserialize_in_temp($config['id_user']."_agent_module", true, 1);
		unserialize_in_temp($config['id_user']."_agents", true, 1);
	}
	
	if($modules_selected[0]){
		serialize_in_temp($modules_selected, $config['id_user']."_agent_module", 1);
	}
	if($agents_id[0] != -1 ){
		serialize_in_temp($agents_id, $config['id_user']."_agents", 1);
	}
	
	if ($config["pure"] == 0) {
		if($modules_selected[0] && $agents_id[0]){
			
			$full_modules = urlencode(implode(";",$modules_selected));
			$full_agents = urlencode(implode(";",$agents_id));
			
			$fullscreen['text'] = '<a href="index.php?extension_in_menu=estado&amp;sec=extensions&amp;sec2=extensions/agents_modules&amp;pure=1&amp;
			offset='.$offset.'&group_id='.$group_id.'&modulegroup='.$modulegroup.'&refresh='.$refr.'&full_modules_selected='.$full_modules.'
			&full_agents_id='.$full_agents.'&selection_agent_module='.$selection_a_m.'">'
				. html_print_image ("images/full_screen.png", true, array ("title" => __('Full screen mode')))
				. "</a>";
				
		} else if($full_modules_selected[0] && $full_agents_id[0]){
			
			$full_modules = urlencode(implode(";",$full_modules_selected));
			$full_agents = urlencode(implode(";",$full_agents_id));
			
			$fullscreen['text'] = '<a href="index.php?extension_in_menu=estado&amp;sec=extensions&amp;sec2=extensions/agents_modules&amp;pure=1&amp;
			offset='.$offset.'&group_id='.$group_id.'&modulegroup='.$modulegroup.'&refresh='.$refr.'&full_modules_selected='.$full_modules.'
			&full_agents_id='.$full_agents.'&selection_agent_module='.$selection_a_m.'">'
				. html_print_image ("images/full_screen.png", true, array ("title" => __('Full screen mode')))
				. "</a>";
				
		} else {
			$fullscreen['text'] = '<a href="index.php?extension_in_menu=estado&amp;sec=extensions&amp;sec2=extensions/agents_modules&amp;pure=1&amp;
			offset='.$offset.'&group_id='.$group_id.'&modulegroup='.$modulegroup.'&refresh='.$refr.'">'
				. html_print_image ("images/full_screen.png", true, array ("title" => __('Full screen mode')))
				. "</a>";
		}
	}
	
	$groups = users_get_groups ();
	
	//groups
	$filter_groups_label = '<b>'.__('Group').'</b>';
	$filter_groups = html_print_select_groups(false, "AR", true, 'group_id', $group_id, '', '', '', true, false, true, '', false , 'width: auto;');
	
	$filter_recursion_label = '<b>'.__('Recursion').'</b>';
	$filter_recursion = html_print_checkbox('recursion', 1, 0, true);
	//groups module
	$filter_module_groups_label = '<b>'.__('Module group').'</b>';
	$filter_module_groups = html_print_select_from_sql ("SELECT * FROM tmodule_group ORDER BY name",
		'modulegroup', $modulegroup, '',__('All'), 0, true, false, true, false, 'width: auto;');
			
	$agents_select = array();
	if (is_array($id_agents) || is_object($id_agents)){
		foreach ($id_agents as $id) {
			foreach ($agents as $key => $a) {
				if ($key == (int)$id) {
					$agents_select[$key] = $key;
				}
			}
		}
	}
	
	//agent
	$agents = agents_get_group_agents($group_id);
	if ((empty($agents)) || $agents == -1) $agents = array();
	$filter_agents_label = '<b>'.__('Agents').'</b>';
	$filter_agents = html_print_select($agents, 'id_agents2[]', $agents_id, '', '', 0, true, true, true, '', false, "min-width: 180px; max-width: 200px;");

	//type show
	$selection = array(0 => __('Show common modules'),
						1=> __('Show all modules'));
	$filter_type_show_label = '<b>'.__('Show common modules').'</b>';
	$filter_type_show = html_print_select($selection, 'selection_agent_module', $selection_a_m, '', "", 0, true, false, true, '', false, "min-width: 180px;");

	//modules
	$all_modules = select_modules_for_agent_group($group_id, $agents_id, $selection_a_m, false);
	$filter_modules_label = '<b>'.__('Module').'</b>';
	$filter_modules = html_print_select($all_modules, 'module[]', $modules_selected, '', '', 0, true, true, false, '', false, "min-width: 180px; max-width: 200px;");

	//update
	$filter_update = html_print_submit_button(__('Update item'), 'edit_item', false, 'class="sub upd"', true);

	$onheader = array('updated_time' => $updated_time, 'fullscreen' => $fullscreen, 
		'combo_module_groups' => $filter_module_groups,
		'combo_groups' => $filter_groups);
	
	// Old style table, we need a lot of special formatting,don't use table function
	// Prepare old-style table
	if ($config['pure'] == 0){ 
		// Header
		ui_print_page_header (__("Agents/Modules"), "images/module_mc.png", false, "", false, $updated_time);
		echo '<table style="width:100%;">';
		echo "<tr>";
		echo "<td> <span style='float: right;'>" . $fullscreen['text'] . "</span> </td>";
		echo "</tr>";
		echo "</table>";
	} else {
		if ($full_agents_id[0]){
			
			$full_modules = urlencode(implode(";",$full_modules_selected)) ;
			$full_agents = urlencode(implode(";",$full_agents_id));
			
			$url =" index.php?sec=view&sec2=extensions/agents_modules&amp;pure=0&amp;offset=$offset
			&group_id=$group_id&modulegroup=$modulegroup&refresh=$refr&full_modules_selected=$full_modules
			&full_agents_id=$full_agents&selection_agent_module=$selection_a_m";
			
		} else {
			$url =" index.php?sec=view&sec2=extensions/agents_modules&amp;pure=0&amp;offset=$offset&group_id=$group_id&modulegroup=$modulegroup&refresh=$refr";
		}
		
		// Floating menu - Start
		echo '<div id="vc-controls" style="z-index: 999">';

		echo '<div id="menu_tab">';
		echo '<ul class="mn">';

		// Quit fullscreen
		echo '<li class="nomn">';
		echo '<a target="_top" href="' . $url . '">';
		echo html_print_image('images/normal_screen.png', true, array('title' => __('Back to normal mode')));
		echo '</a>';
		echo '</li>';

		// Countdown
		echo '<li class="nomn">';
		echo '<div class="vc-refr">';
		echo '<div class="vc-countdown"></div>';
		echo '<div id="vc-refr-form">';
		echo __('Refresh') . ':';
		echo html_print_select(get_refresh_time_array(), 'refresh', $refr, '', '', 0, true, false, false);
		echo '</div>';
		echo '</div>';
		echo '</li>';

		// Console name
		echo '<li class="nomn">';
		echo '<div class="vc-title">' . __('Agent/module view') . '</div>';
		echo '</li>';

		echo '</ul>';
		echo '</div>';

		echo '</div>';
		// Floating menu - End
		
		ui_require_jquery_file('countdown');
		ui_require_css_file('countdown');
	}
	
	if($config['pure'] != 1){
		echo '<form method="post" action="' 
		. ui_get_url_refresh (array ('offset' => $offset, 'hor_offset' => $offset, 'group_id' => $group_id, 'modulegroup' => $modulegroup)).'">';
		
		echo '<table class="databox filters" cellpadding="0" cellspacing="0" border="0" style="width:100%;">';
			echo "<tr>";
				echo "<td>" . $filter_groups_label . "</td>";
				echo "<td>" . $filter_groups       ."&nbsp;&nbsp;&nbsp;". $filter_recursion_label . $filter_recursion. "</td>";
				echo "<td></td>";
				echo "<td></td>";
				echo "<td>" . $filter_module_groups_label . "</td>";
				echo "<td>" . $filter_module_groups       . "</td>";
			echo "</tr>";
			echo "<tr>";
				echo "<td>" . $filter_agents_label        . "</td>";
				echo "<td>" . $filter_agents              . "</td>";
				echo "<td>" . $filter_type_show_label     . "</td>";
				echo "<td>" . $filter_type_show           . "</td>";
				echo "<td>" . $filter_modules_label       . "</td>";
				echo "<td>" . $filter_modules             . "</td>";
			echo "</tr>";
			echo "<tr>";
				echo "<td colspan=6 ><span style='float: right; padding-right: 20px;'>" . $filter_update . "</sapn></td>";
			echo "</tr>";
		echo "</table>";
		echo '</form>';
	}
	
	if($agents_id[0] != -1){
		$agents = $agents_id;
	}
	else {
		if($full_agents_id[0]){
			$agents = $full_agents_id;
		} else {
			$agents = '';
			$agents = agents_get_group_agents($group_id,array('disabled' => 0));
			$agents = array_keys($agents);	
		}
		
	}
	
	$filter_module_group = array('disabled' => 0);
	
	if ($modulegroup > 0) {
		$filter_module_group['id_module_group'] = $modulegroup;
	}

	$count = 0;
	foreach ($agents as $agent) {
		$module = agents_get_modules($agent, false,
			$filter_module_group, true, true);
		if ($module == false) {
			unset($agents[$count]);
		}
		$count++;
	}
	$total_pagination = count($agents);

	if($agents_id[0] != -1){
		$all_modules = array();
		foreach ($modules_selected as $key => $value) {
			$name = modules_get_agentmodule_name($value);
			$sql = "SELECT id_agente_modulo 
					FROM tagente_modulo 
					WHERE nombre = '". $name ."';";

			$result_sql = db_get_all_rows_sql($sql);
			
			if(is_array($result_sql)){
				foreach ($result_sql as $key => $value) {
					$all_modules[$value['id_agente_modulo']] = io_safe_output($name); 
				}
			}
		}
	}
	else{
		if ($full_modules_selected[0]){
			foreach ($full_modules_selected as $key => $value) {
				$name = modules_get_agentmodule_name($value);
				$sql = "SELECT id_agente_modulo 
						FROM tagente_modulo 
						WHERE nombre = '". $name ."';";

				$result_sql = db_get_all_rows_sql($sql);
				if(is_array($result_sql)){
					foreach ($result_sql as $key => $value) {
						$all_modules[$value['id_agente_modulo']] = io_safe_output($name); 
					}
				} 
				// $all_modules[$value] = modules_get_agentmodule_name($value);
			}

		} else {
			$all_modules = agents_get_modules($agents, false,
			$filter_module_group, true, true);
		}
		
	}

	$modules_by_name = array();
	$name = '';
	$cont = 0;
	
	foreach ($all_modules as $key => $module) {
		if ($module == $name) {
			$modules_by_name[$cont-1]['id'][] = $key;
		}
		else {
			$name = $module;
			$modules_by_name[$cont]['name'] = $name;
			$modules_by_name[$cont]['id'][] = $key;
			$cont ++;
		}
	}
	
	if ($config["pure"] == 1) {
		$block = count($modules_by_name);
	}
	
	if($update_item == ''){
		$filter_groups = array ('offset' => (int) $offset,
			'limit' => (int) $config['block_size'], 'disabled' => 0,'id_agente'=>$agents);
	}
	else{
		$filter_groups = array ('offset' => 0,
			'limit' => (int) $config['block_size'], 'disabled' => 0,'id_agente'=>$agents);	
	}

	if ($group_id > 0) {
		if($recursion){
			$filter_groups['id_grupo'] = array_merge($group_id,
				groups_get_id_recursive($group_id, true));
		}
		else{
			$filter_groups['id_grupo'] = $group_id;	
		}
	}
	$agents = agents_get_agents ($filter_groups);
	$nagents = count($agents);

	if ($all_modules == false || $agents == false) {
		ui_print_info_message ( array('no_close'=>true, 'message'=> __('There are no agents with modules') ) );
		return;
	}
	
	echo '<table cellpadding="4" cellspacing="4" border="0" style="width:100%;" class="agents_modules_table">';
	
	echo "<tr>";
	
	echo "<th width='140px' style='text-align: right !important; padding-right:13px;'>" . __("Agents") . " / " . __("Modules") . "</th>";
	
	if ($hor_offset > 0) {
		$new_hor_offset = $hor_offset-$block;
		echo "<th width='20px' " .
			"style='vertical-align:top; padding-top: 35px;' " .
			"rowspan='" . ($nagents + 1) . "'>" .
			"<a href='index.php?" .
				"extension_in_menu=estado&" .
				"sec=extensions&" .
				"sec2=extensions/agents_modules&" .
				"refr=0&" .
				"save_serialize=1&" .
				"selection_a_m=" . $selection_a_m . "&" .
				"hor_offset=" . $new_hor_offset . "&" .
				"offset=" . $offset .
			    "'>" .
				html_print_image("images/arrow_left.png", true,
					array('title' => __('Previous modules'))) . 
			"</a>" .
			"</th>";
	}
	$nmodules = 0;
	foreach ($modules_by_name as $module) {
		$nmodules++;
		
		if ($nmodules <= $hor_offset || $nmodules > ($hor_offset+$block)) {
			continue;
		}
		
		$text = ui_print_truncate_text(io_safe_output($module['name']), 'module_small');
		
		echo '<th align="center" width="20px" id="th_module_r_' . $nmodules . '" class="th_class_module_r">
				<div style="width: 30px;">
					<div id="div_module_r_' . $nmodules . '" style="display: none;padding-left:10px" class="rotate_text_module">' .
						$text .
					'</div>
				</div>
			</th>';
	}
	
	if (($hor_offset + $block) < $nmodules) {
		$new_hor_offset = $hor_offset+$block;
		echo "<th width='20px' " .
			"style='vertical-align:top; padding-top: 35px;' " .
			"rowspan='".($nagents+1)."'>" .
			"<a href='index.php?" .
				"extension_in_menu=estado&" .
				"sec=extensions&".
				"sec2=extensions/agents_modules&".
				"save_serialize=1&" .
				"selection_a_m=" . $selection_a_m . "&" .
				"hor_offset=" . $new_hor_offset . "&".
				"offset=" . $offset .
				"'>" .
				html_print_image(
					"images/arrow.png", true,
					array('title' => __('More modules'))) .
			"</a>" .
			"</th>";
	}
	
	echo "</tr>";
	
	$filter_agents = array('offset' => (int) $offset, 'disabled' => 0);
	if ($group_id > 0) {
		$filter_agents['id_grupo'] = $group_id;
	}
	// Prepare pagination
	$url = 'index.php?extension_in_menu=estado&sec=extensions&sec2=extensions/agents_modules&save_serialize=1&' . "hor_offset=" . $hor_offset ."&selection_a_m=" . $selection_a_m;
	ui_pagination ($total_pagination, $url);
	
	foreach ($agents as $agent) {
		// Get stats for this group
		$agent_status = agents_get_status($agent['id_agente']);
		$alias = db_get_row ("tagente", "id_agente", $agent['id_agente']);
		if (empty($alias['alias'])){
			$alias['alias'] = $agent['nombre'];
		}
		
		switch($agent_status) {
			case 4: // Alert fired status
				$rowcolor = 'group_view_alrm';
				break;
			case 1: // Critical status
				$rowcolor = 'group_view_crit';
				break;
			case 2: // Warning status
				$rowcolor = 'group_view_warn';
				break;
			case 0: // Normal status
				$rowcolor = "group_view_ok";
				break;
			case 3: 
			case -1: 
			default: // Unknown status
				$rowcolor = 'group_view_unk';
				break;
		}
		
		echo "<tr style='height: 25px;'>";
		
		echo "<td class='$rowcolor'>
			<a class='$rowcolor' href='index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=".$agent['id_agente']."'>" .
			$alias['alias'] .
			"</a></td>";
		$agent_modules = agents_get_modules($agent['id_agente'], false, $filter_module_group, true, true);
		
		$nmodules = 0;
		
		foreach ($modules_by_name as $module) {
			$nmodules++;
			
			if ($nmodules <= $hor_offset || $nmodules > ($hor_offset+$block)) {
				continue;
			}
			
			$match = false;
			
			foreach ($module['id'] as $module_id) {
				if (!$match && array_key_exists($module_id,$agent_modules)) {
					$status = modules_get_agentmodule_status($module_id);
					echo "<td style='text-align: center;'>";
					$win_handle = dechex(crc32($module_id.$module["name"]));
					$graph_type = return_graphtype (modules_get_agentmodule_type($module_id));
					$link ="winopeng('" .
						"operation/agentes/stat_win.php?" .
						"type=$graph_type&" .
						"period=" . SECONDS_1DAY . "&" .
						"id=" . $module_id . "&" .
						"label=" . rawurlencode(
							urlencode(
								base64_encode($module["name"]))) . "&" .
						"refresh=" . SECONDS_10MINUTES . "', 'day_".$win_handle."')";
					
					echo '<a href="javascript:'.$link.'">';
					switch ($status) {
						case AGENT_MODULE_STATUS_NORMAL:
							ui_print_status_image ('module_ok.png', modules_get_last_value($module_id), false);
							break;
						case AGENT_MODULE_STATUS_CRITICAL_BAD:
							ui_print_status_image ('module_critical.png', modules_get_last_value($module_id), false);
							break;
						case AGENT_MODULE_STATUS_WARNING:
							ui_print_status_image ('module_warning.png', modules_get_last_value($module_id), false);
							break;
						case AGENT_MODULE_STATUS_UNKNOWN:
							ui_print_status_image ('module_unknown.png', modules_get_last_value($module_id), false);
							break;
						case AGENT_MODULE_STATUS_NORMAL_ALERT:
						case AGENT_MODULE_STATUS_WARNING_ALERT:
						case AGENT_MODULE_STATUS_CRITICAL_ALERT:
							ui_print_status_image ('module_alertsfired.png', modules_get_last_value($module_id), false);
							break;
						case 4:
							ui_print_status_image ('module_no_data.png', modules_get_last_value($module_id), false);
							break;
					}
					echo '</a>';
					echo "</td>";
					$match = true;
				}
			}
			
			if (!$match) {
				echo "<td></td>";
			}
		}
		echo "</tr>";
	}

	echo "</table>";
	
	echo "<div class='legend_basic' style='width: 96%'>";
	
	echo "<table>";
	echo "<tr><td colspan='2' style='padding-bottom: 10px;'><b>" . __('Legend') . "</b></td></tr>";
	echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_ALERTFIRED . ";'></div></td><td>" . __("Orange cell when the module has fired alerts") . "</td></tr>";
	echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_CRITICAL . ";'></div></td><td>" . __("Red cell when the module has a critical status") . "</td></tr>";
	echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_WARNING . ";'></div></td><td>" . __("Yellow cell when the module has a warning status") . "</td></tr>";
	echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_NORMAL . ";'></div></td><td>" . __("Green cell when the module has a normal status") . "</td></tr>";
	echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_UNKNOWN . ";'></div></td><td>" . __("Grey cell when the module has an unknown status") . "</td></tr>";
	echo "<tr><td class='legend_square_simple'><div style='background-color: " . COL_NOTINIT . ";'></div></td><td>" . __("Cell turns blue when the module is in 'not initialize' status") . "</td></tr>";
	echo "</table>";
	echo "</div>";
	$pure_var = $config['pure'];
	if($pure_var){
		$pure_var = 1;
	}
	else{
		$pure_var = 0;
	}
}

extensions_add_operation_menu_option(__("Agents/Modules view"), 'estado', 'agents_modules/icon_menu.png', "v1r1","view");
extensions_add_main_function('mainAgentsModules');

$ignored_params['refresh']='';

?>
<style type='text/css'>
	.rotate_text_module {
		-ms-transform: rotate(270deg);
		-webkit-transform: rotate(270deg);
		-moz-transform: rotate(270deg);
		-o-transform: rotate(270deg);
		writing-mode: lr-tb;
		white-space: nowrap;
	}
</style>

<script type='text/javascript'>
	$(document).ready(function () {
		//Get max width of name of modules
		max_width = 0;
		$.each($('.th_class_module_r'), function (i, elem) {
			id = $(elem).attr('id').replace('th_module_r_', '');
			
			width = $("#div_module_r_" + id).width();
			
			if (max_width < width) {
				max_width = width;
			} 
		});
		
		$.each($('.th_class_module_r'), function (i, elem) {
			id = $(elem).attr('id').replace('th_module_r_', '');
			$("#th_module_r_" + id).height(($("#div_module_r_" + id).width() + 10) + 'px');
			
			//$("#div_module_r_" + id).css('margin-top', (max_width - $("#div_module_r_" + id).width()) + 'px');
			$("#div_module_r_" + id).css('margin-top', (max_width - 20) + 'px');
			$("#div_module_r_" + id).show();
		});

		var refr =" . $refr . ";
		var pure =" . $pure_var . ";
		var href ='" . ui_get_url_refresh ($ignored_params) . "';
			
		if (pure) {
			var startCountDown = function (duration, cb) {
				$('div.vc-countdown').countdown('destroy');
				if (!duration) return;
				var t = new Date();
				t.setTime(t.getTime() + duration * 1000);
				$('div.vc-countdown').countdown({
					until: t,
					format: 'MS',
					layout: '(%M%nn%M:%S%nn%S Until refresh)',
					alwaysExpire: true,
					onExpiry: function () {
						$('div.vc-countdown').countdown('destroy');
						url = js_html_entity_decode( href ) + duration;
						$(document).attr ("location", url);
					}
				});
			}
			
			startCountDown(refr, false);
			var controls = document.getElementById('vc-controls');
			autoHideElement(controls, 1000);
			
			$('select#refresh').change(function (event) {
				refr = Number.parseInt(event.target.value, 10);
				startCountDown(refr, false);
			});
		}
		else {
			
			var agentes_id = $("#id_agents2").val();
			var id_agentes = $.get("full_agents_id");
			if (agentes_id === null && id_agentes !== null) {
				id_agentes = id_agentes.split(";")
				id_agentes.forEach(function(element) {
					$("#id_agents2 option[value="+ element +"]").attr("selected",true);
				});
				
				selection_agent_module();
			}
			
			$('#refresh').change(function () {
				$('#hidden-vc_refr').val($('#refresh option:selected').val());
			});
		}
		
		$("#group_id").change (function () {
			jQuery.post ("ajax.php",
				{"page" : "operation/agentes/ver_agente",
					"get_agents_group_json" : 1,
					"id_group" : this.value,
					"privilege" : "AW",
					"keys_prefix" : "_",
					"recursion" : $('#checkbox-recursion').is(':checked')
				},
				function (data, status) {
					$("#id_agents2").html('');
					$("#module").html('');
					jQuery.each (data, function (id, value) {
						// Remove keys_prefix from the index
						id = id.substring(1);
						
						option = $("<option></option>")
							.attr ("value", value["id_agente"])
							.html (value["alias"]);
						$("#id_agents").append (option);
						$("#id_agents2").append (option);
					});
				},
				"json"
			);
		});
		
		$("#checkbox-recursion").change (function () {
			jQuery.post ("ajax.php",
				{"page" : "operation/agentes/ver_agente",
					"get_agents_group_json" : 1,
					"id_group" : 	$("#group_id").val(),
					"privilege" : "AW",
					"keys_prefix" : "_",
					"recursion" : $('#checkbox-recursion').is(':checked')
				},
				function (data, status) {
					$("#id_agents2").html('');
					$("#module").html('');
					jQuery.each (data, function (id, value) {
						// Remove keys_prefix from the index
						id = id.substring(1);
						
						option = $("<option></option>")
							.attr ("value", value["id_agente"])
							.html (value["alias"]);
						$("#id_agents").append (option);
						$("#id_agents2").append (option);
					});
				},
				"json"
			);
		});
		
		$("#modulegroup").change (function () {
			jQuery.post ("ajax.php",
				{"page" : "operation/agentes/ver_agente",
					"get_modules_group_json" : 1,
					"id_module_group" : this.value,
					"id_agents" : $("#id_agents2").val(),
					"selection" : $("#selection_agent_module").val()
				},
				function (data, status) {
					$("#module").html('');
					if(data){
						jQuery.each (data, function (id, value) {
							option = $("<option></option>")
								.attr ("value", value["id_agente_modulo"])
								.html (value["nombre"]);
							$("#module").append (option);
						});
					}
				},
				"json"
			);
		});

		$("#id_agents2").click (function(){
			selection_agent_module();
		});

		$("#selection_agent_module").change(function() {
			jQuery.post ("ajax.php",
				{"page" : "operation/agentes/ver_agente",
					"get_modules_group_json" : 1,
					"id_module_group" : $("#modulegroup").val(),
					"id_agents" : $("#id_agents2").val(),
					"selection" : $("#selection_agent_module").val()
				},
				function (data, status) {
					$("#module").html('');
					if(data){
						jQuery.each (data, function (id, value) {
							option = $("<option></option>")
								.attr ("value", value["id_agente_modulo"])
								.html (value["nombre"]);
							$("#module").append (option);
						});
					}
				},
				"json"
			);
		});
	});

	function selection_agent_module() {
		jQuery.post ("ajax.php",
			{"page" : "operation/agentes/ver_agente",
				"get_modules_group_json" : 1,
				"id_module_group" : $("#modulegroup").val(),
				"id_agents" : $("#id_agents2").val(),
				"selection" : $("#selection_agent_module").val()
			},
			function (data, status) {
				$("#module").html('');
				if(data){
					jQuery.each (data, function (id, value) {
						option = $("<option></option>")
							.attr ("value", value["id_agente_modulo"])
							.html (value["nombre"]);
						$("#module").append (option);
					});
					
					var id_modules = $.get("full_modules_selected");
					if(id_modules !== null) {
						id_modules = id_modules.split(";");
						id_modules.forEach(function(element) {
							$("#module option[value="+ element +"]").attr("selected",true);
						});
					}
				}
			},
			"json"
		);
	}

	(function($) {  
		$.get = function(key)   {  
			key = key.replace(/[[]/, '[');  
			key = key.replace(/[]]/, ']');  
			var pattern = "[?&]" + key + "=([^&#]*)";  
			var regex = new RegExp(pattern);  
			var url = unescape(window.location.href);  
			var results = regex.exec(url);  
			if (results === null) {  
				return null;  
			} else {  
				return results[1];  
			}  
		}  
	})(jQuery);
	
</script>