/** ******************************************************************
* JavaScript per le funzionalità legate ai form
*
* Elenco delle funzioni:
* - ct_roll_over		rollover sulle righe delle tabelle
* - ct_focus			focus sui campi
* - ct_global			seleziona / deseleziona le righe del grid
* - ct_clear_filter		cancella il filtro specifico
* - ct_between			visualizza/nasconde il campo per filtro between
* - ct_disable_link		disabilita il link sulle icone premute
* - ct_disable_buttons	disabilita i bottoni del form
* - ct_show_hide		visualizza o nasconde elementi
*
* Elenco delle funzioni non proprietarie:
* - setPointer	sets/unsets the pointer and marker in browse mode
*
* @package	ct.base
* @author	ConsulTes info@consultes.it
* ***************************************************************** */

	/** ******************************************************************
	* Rollover sulle righe delle tabelle
	* @param	string	$p_id		id della riga
	* @param	string	$p_color	colore
	* @return	NULL
	* ***************************************************************** */
	function ct_roll_over($p_id, $p_color)
	{
		if (document.layers) {
			document.layers[$p_id].bgColor = $p_color;
		} else {
			if (document.all) {
				document.all[$p_id].style.background = $p_color;
			}
		}
	}

	/** ******************************************************************
	* Focus sui campi
	* @param	string	$p_element	elemento
	* @param	string	$p_state	stato
	* @return	NULL
	* ***************************************************************** */
	function ct_focus($p_element, $p_state)
	{
		// FIXME: Riattivare il focus
		// $color = ($p_state == 1) ? '#FFFFBB' : '#FFFFFF';
		// $p_element.style.backgroundColor = $color;

		// Seleziona l'intero contenuto del campo
		// FIXME: Revisionare la funzione
		/*
			Non dovrebbe servire più, di solito il browser lo fa da solo.
			Invece se si fa clic con il mouse il browser non lo fa.

			Potrebbe accadere che Firefox premendo 1 lo selezioni automaticamente
			e quindi premendo un altro numero cancelli l'1 e scriva quello premuto.
			Anche con lo 01 fa così. Ad esempio 1012 scrive 2 e basta.
		*/
		if ($p_state) $p_element.select();
	}

	/** ******************************************************************
	* Seleziona / deseleziona le righe del grid
	* @param	string	$p_form		modulo
	* @param	string	$p_check	check
	* @return	NULL
	* ***************************************************************** */
	function ct_global($p_form, $p_check)
	{
		var $elts     = document.forms[$p_form].elements['globals[]'];
		var $elts_cnt = (typeof($elts.length) != 'undefined')
					? $elts.length
					: 0;

		if ($elts_cnt) {
			for (var $i = 0; $i < $elts_cnt; $i++) {
				$elts[$i].checked = $p_check;
			}
		} else {
			$elts.checked = $p_check;
		}

		return true;
	}

	/** ******************************************************************
	* Cancella il filtro specifico
	* @param	string	$p_field	campo
	* @param	string	$p_type		tipo campo
	* @return	NULL
	* ***************************************************************** */
	function ct_clear_filter($p_field, $p_type)
	{
		alert('Funzione non abilitata');
		return false;
 
 		// FIXME: Completare
 		$element = this.document.getElementsByName($p_field+'_operator');
 		$element.selectedIndex = 0;
	}

	/** ******************************************************************
	* Visualizza/nasconde il campo per filtro between
	* @param	string	$p_element	elemento
	* @return	NULL
	* ***************************************************************** */
	function ct_between($p_element)
	{
		$operator = $p_element.value;
		if ($operator == 'between') {
			alert('Funzione non abilitata');
			$p_element.selectedIndex = 0;
			return false;

	 		// FIXME: Completare
			$filter = $p_element.name.replace(/\_operator/g, '');
			$elements = document.filter_form.elements;
			for ($i = 0; $i < $elements.length; $i++) {
				$element = $elements[$i];
				if ($element.name == $filter) {
					$to = $element.parentNode.innerHTML;
					$element.parentNode.innerHTML = $to + '-' + $to;
				}
			}

		}
	}

	/** ******************************************************************
	* Disabilita il link sulle icone premute
	* @param	string	$p_link		link
	* @return	NULL
	* ***************************************************************** */
	function ct_disable_link($p_link)
	{
		$p_link.onclick = ct_cancel_link;
		if ($p_link.style)
			$p_link.style.cursor = 'default';
	}
	function ct_cancel_link()
	{
		return false;
	}

	/** ******************************************************************
	* Disabilita i bottoni del form
	* @param	object	$p_form		form
	* @return	NULL
	* ***************************************************************** */
	function ct_disable_buttons($p_form)
	{
		if (document.all || document.getElementById) {
			for (i = 0; i < $p_form.length; i++) {
				var $element = $p_form.elements[i];
				if (   $element.type.toLowerCase() == "submit"
					|| $element.type.toLowerCase() == "reset"
					|| $element.type.toLowerCase() == "button")
				$element.disabled = true;
			}
		}
	}

	/** ******************************************************************
	* Visualizza o nasconde elementi
	* @param	$p_n	string	nome dell'elemento
	* @param	$p_s	string	identificativo elemento
	* @return	NULL
	* ***************************************************************** */
	function ct_show_hide($p_n, $p_s) {
		if (document.getElementById($p_n+'_'+$p_s).style.display == 'none') {
			document.getElementById($p_n+'_'+$p_s).style.display = 'block';
			document.getElementById('operation_'+$p_s).innerHTML = '-';
		} else {
			document.getElementById($p_n+'_'+$p_s).style.display = 'none';
			document.getElementById('operation_'+$p_s).innerHTML = '+';
		}
	}

	/** ******************************************************************
	* Sets/unsets the pointer and marker in browse mode
	*
	*  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
	* | Funzione JavaScript non proprietaria
	* | Estratta dall'ambiente phpMyAdmin
	* | $Id: functions.js,v 1.30 2003/01/14 15:24:27 nijel Exp $
	*  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
	*
	* @param   object    the table row
	* @param   interger  the row number
	* @param   string    the action calling this script (over, out or click)
	* @param   string    the default background color
	* @param   string    the color to use for mouseover
	* @param   string    the color to use for marking a row
	*
	* @return  boolean  whether pointer is set or not
	* ***************************************************************** */
	// This array is used to remember mark status of rows in browse mode
	var marked_row = new Array;
	function setPointer(theRow, theRowNum, theAction, theDefaultColor, thePointerColor, theMarkColor)
	{
		var theCells = null;
	
		// 1. Pointer and mark feature are disabled or the browser can't get the
		//    row -> exits
		if ((thePointerColor == '' && theMarkColor == '')
			|| typeof(theRow.style) == 'undefined') {
			return false;
		}
	
		// 1.1 Sets the mouse pointer to pointer on mouseover and back to normal otherwise.
		if (theAction == "over" || theAction == "click") {
			theRow.style.cursor='pointer';
		} else {
			theRow.style.cursor='default';
		}
	
		// 2. Gets the current row and exits if the browser can't get it
		if (typeof(document.getElementsByTagName) != 'undefined') {
			theCells = theRow.getElementsByTagName('td');
		}
		else if (typeof(theRow.cells) != 'undefined') {
			theCells = theRow.cells;
		}
		else {
			return false;
		}
	
		// 3. Gets the current color...
		var rowCellsCnt  = theCells.length;
		var domDetect    = null;
		var currentColor = null;
		var newColor     = null;
		// 3.1 ... with DOM compatible browsers except Opera that does not return
		//         valid values with "getAttribute"
		if (typeof(window.opera) == 'undefined'
			&& typeof(theCells[0].getAttribute) != 'undefined') {
			currentColor = theCells[0].getAttribute('bgcolor');
			domDetect    = true;
		}
		// 3.2 ... with other browsers
		else {
			currentColor = theCells[0].style.backgroundColor;
			domDetect    = false;
		} // end 3
	
		// 3.3 ... Opera changes colors set via HTML to rgb(r,g,b) format so fix it
		// CONSULTES: aggiunto test per currentColor null
		if (currentColor != null && currentColor.indexOf("rgb") >= 0)
		{
			var rgbStr = currentColor.slice(currentColor.indexOf('(') + 1,
										currentColor.indexOf(')'));
			var rgbValues = rgbStr.split(",");
			currentColor = "#";
			var hexChars = "0123456789ABCDEF";
			for (var i = 0; i < 3; i++)
			{
				var v = rgbValues[i].valueOf();
				currentColor += hexChars.charAt(v/16) + hexChars.charAt(v%16);
			}
		}
	
		// 4. Defines the new color
		// 4.1 Current color is the default one
		// CONSULTES: aggiunto test per currentColor null
		if (currentColor == null || currentColor == ''
			|| currentColor.toLowerCase() == theDefaultColor.toLowerCase()) {
			if (theAction == 'over' && thePointerColor != '') {
				newColor              = thePointerColor;
			}
			else if (theAction == 'click' && theMarkColor != '') {
				newColor              = theMarkColor;
				marked_row[theRowNum] = true;
				// Garvin: deactivated onclick marking of the checkbox because it's also executed
				// when an action (like edit/delete) on a single item is performed. Then the checkbox
				// would get deactived, even though we need it activated. Maybe there is a way
				// to detect if the row was clicked, and not an item therein...
				// document.getElementById('id_rows_to_delete' + theRowNum).checked = true;
			}
		}
		// 4.1.2 Current color is the pointer one
		else if (currentColor.toLowerCase() == thePointerColor.toLowerCase()
				&& (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])) {
			if (theAction == 'out') {
				newColor              = theDefaultColor;
			}
			else if (theAction == 'click' && theMarkColor != '') {
				newColor              = theMarkColor;
				marked_row[theRowNum] = true;
				// document.getElementById('id_rows_to_delete' + theRowNum).checked = true;
			}
		}
		// 4.1.3 Current color is the marker one
		else if (currentColor.toLowerCase() == theMarkColor.toLowerCase()) {
			if (theAction == 'click') {
				newColor              = (thePointerColor != '')
									? thePointerColor
									: theDefaultColor;
				marked_row[theRowNum] = (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])
									? true
									: null;
				// document.getElementById('id_rows_to_delete' + theRowNum).checked = false;
			}
		} // end 4
	
		// 5. Sets the new color...
		if (newColor) {
			var c = null;
			// 5.1 ... with DOM compatible browsers except Opera
			if (domDetect) {
				for (c = 0; c < rowCellsCnt; c++) {
					theCells[c].setAttribute('bgcolor', newColor, 0);
				} // end for
			}
			// 5.2 ... with other browsers
			else {
				for (c = 0; c < rowCellsCnt; c++) {
					theCells[c].style.backgroundColor = newColor;
				}
			}
		} // end 5
	
		return true;
	} // end of the 'setPointer()' function

