/** ******************************************************************
* JavaScript per il controllo dei dati
*
* Elenco delle funzioni:
* - ct_check_mandatory		controlla che il campo di testo sia riempito
* - ct_check_number			controlla il campo numerico
* - ct_check_range			controlla il campo numerico
* - ct_check_email			controlla l'indirizzo e-mail
* - ct_check_web			controlla l'indirizzo web
* - ct_check_ftp			controlla l'indirizzo ftp
* - ct_check_password		controlla la corrispondenza della password
* - ct_check_select			controlla che sia selezionato un elemento dalla lista a discesa
* - ct_check_mselect		controlla che sia selezionato almeno un elemento dalla lista multipla
* - ct_check_date			controlla la data
* - ct_check_time			controlla l'ora
* - ct_check_logic			controlla che il campo logico sia spuntato
*
* @package	ct.base
* @author	ConsulTes info@consultes.it
* ***************************************************************** */

	/** ******************************************************************
	* Controlla che il campo di testo sia riempito
	* @param	string	$p_text		testo
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_mandatory($p_text, $p_message)
	{
		$text = (typeof($p_text) == 'object') ? $p_text.value : $p_text;
		if($text == "") {
			return $p_message + "\n";
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla il campo numerico
	* @param	string	$p_text		testo con il numero
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_number($p_text, $p_message)
	{
		return ct_check_range($p_text, 0, 0, $p_message);
	}

	/** ******************************************************************
	* Controlla il campo numerico
	* @param	string	$p_text		testo con il numero
	* @param	string	$p_min		valore minimo
	* @param	string	$p_max		valore massimo
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_range($p_text, $p_min, $p_max, $p_message)
	{
		$text = (typeof($p_text) == 'object') ? $p_text.value : $p_text;
		if($text != "") {
			var $number = parseFloat($text);
			var $ok     = true;
			if (isNaN($number)) $ok = false;
			if($ok && (($p_min != 0 || $p_max != 0) && ($number < $p_min || $number > $p_max))) $ok = false;
			if(!$ok) {
				return $p_message + "\n";
			} else {
				return "";
			}
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla l'indirizzo e-mail
	* @param	string	$p_email		e-mail
	* @param	string	$p_message		messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_email($p_email, $p_message)
	{
		$email = (typeof($p_email) == 'object') ? $p_email.value : $p_email;
		if($email != "") {
			var $rule = /^[A-Za-z0-9\._-]+@([A-Za-z0-9][A-Za-z0-9_-]+\.)+[a-z]+$/;
			var $ok = $rule.test($email);
			if(!$ok) {
				return $p_message + "\n";
			} else {
				return "";
			}
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla l'indirizzo web
	* @param	string	$p_url		url
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_web($p_url, $p_message)
	{
		$url = (typeof($p_url) == 'object') ? $p_url.value : $p_url;
		// FIXME: Completare
		return "";
	}

	/** ******************************************************************
	* Controlla l'indirizzo ftp
	* @param	string	$p_url		url
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_ftp($p_url, $p_message)
	{
		$url = (typeof($p_url) == 'object') ? $p_url.value : $p_url;
		// FIXME: Completare
		return "";
	}

	/** ******************************************************************
	* Controlla la corrispondenza della password
	* @param	string	$p_pwd1		password 1
	* @param	string	$p_pwd2		password 2
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_password($p_pwd1, $p_pwd2, $p_message)
	{
		$pwd1 = (typeof($p_pwd1) == 'object') ? $p_pwd1.value : $p_pwd1;
		$pwd2 = (typeof($p_pwd2) == 'object') ? $p_pwd2.value : $p_pwd2;
		if($pwd1 != "" && $pwd1 != $pwd2) {
			return $p_message + "\n";
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla che sia selezionato un elemento dalla lista a discesa
	* @param	string	$p_select	selezione
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_select($p_select, $p_message)
	{
		$select = (typeof($p_select) == 'object') ? $p_select.selectedIndex : $p_select;
		if($select == 0) {
			return $p_message + "\n";
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla che sia selezionato almeno un elemento dalla lista multipla
	* @param	string	$p_select	selezione
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_mselect($p_select, $p_message)
	{
		$select = (typeof($p_select) == 'object') ? $p_select.selectedIndex : $p_select;
		if($select < 0) {
			return $p_message + "\n";
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla la data
	* @param	string	$p_date		data
	* @param	string	$p_min		data minima
	* @param	string	$p_message	messaggio di errore
	* @param	string	$p_scheme	schema di controllo
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_date($p_date, $p_min, $p_message, $p_scheme)
	{
		$date = (typeof($p_date) == 'object') ? $p_date.value : $p_date;
		if($date != "") {
			// Normalizza con le barre e separa g m a
			var $date = $date.replace(/\D/g,"/");
			var $ymd  = $date.split("/");
			// Determina la posizione di a m g
			if ($p_scheme) {
				var $s  = $p_scheme.split(",");
				var $sy = $s[0]-1;
				var $sm = $s[1]-1;
				var $sd = $s[2]-1;
			} else {
				var $sy = 2;
				var $sm = 1;
				var $sd = 0;
			}
			// Impone che gli elementi di $ymd siano numerici
			for ($i=0;$i<=2;$i++) {$ymd[$i] = parseFloat($ymd[$i]);}
			// Crea il calendario rettificando l'anno bisestile
			// FIXME: Valuta l'anno bisestile in modo incompleto
			var $m = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31)
			$m[2] += ($ymd[$sy]%4==0);
			// Esegue il controllo del mese e del giorno
			$ok = false;
			if ($ymd[$sm] >= 0 && $ymd[$sm] <= 12) {
				if ($ymd[$sd] >= 1 && $ymd[$sd] <= $m[$ymd[$sm]]) {
					$ok = true;
				}
			}
			// Esito del controllo
			if(!$ok) {
				return $p_message + "\n";
			} else {
				return "";
			}
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla l'ora
	* @param	string	$p_time		ora
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_time($p_time, $p_message)
	{
		$time = (typeof($p_time) == 'object') ? $p_time.value : $p_time;
		if($time != "") {
			// Normalizza con i doppi punti e separa h m s
			var $time = $time.replace(/\D/g,":");
			var $hms  = $time.split(":");
			// Impone che gli elementi di $hms siano numerici
			for ($i=0;$i<=2;$i++) {$hms[$i] = parseFloat($hms[$i]);}
			// Esegue il controllo di ora, minuti e secondi
			$ok = false;
			if ($hms[0] >= 0 && $hms[0] <= 23) {
			if ($hms[1] >= 0 && $hms[1] <= 59) {
			if ($hms[2] >= 0 && $hms[2] <= 59) {
				$ok = true;
			}
			}
			}
			// Esito del controllo
			if(!$ok) {
				return $p_message + "\n";
			} else {
				return "";
			}
		} else {
			return "";
		}
	}

	/** ******************************************************************
	* Controlla che il campo logico sia stato spuntato
	* @param	string	$p_logic	campo logico
	* @param	string	$p_message	messaggio di errore
	* @return	string	messaggio di errore
	* ***************************************************************** */
	function ct_check_logic($p_logic, $p_message)
	{
		$logic = (typeof($p_logic) == 'object') ? $p_logic[1].checked : $p_logic;
		if(!$logic) {
			return $p_message + "\n";
		} else {
			return "";
		}
	}
