/**********************************
validate.js
**********************************/

var parse_date_error		= "data non corretta! \nformato accettato: [gg/mm/aaaa] oppure [ggmmaaaa]";
var parse_number_error		= "dato non corretto!\nsono accettati solo valori numerici";
var parse_currency_error	= "importo non corretto!";
var parse_integer_error		= parse_number_error;
var parse_time_error		= "ora non corretta\nformato accettato [oo:mm]";

/**
*/
function checkMandatory(f, label) {

	if( !f ) {
		//alert( "field: " + label + " is invalid!" ); // DEBUG ONLY
		return true;
	}

/*
	if( !f || f[0] ) { 
		var err = "il campo "  + ( f[0] ) ?   
			f[0].name + " e' duplicato" : 
			label + " non e' valido";
		alert( err );
		return false;
	}
*/
	switch(f.type){
    	case 'text':
		case 'textarea':
      		if(f.value.length==0) {
				alert("Inserire un valore per il campo "+label+"!");
				f.focus();
				return false;
			}
			break;
		case 'select-one':
			if(f.selectedIndex==0){
            	alert("Inserire un valore per il campo "+label+"!");
             	f.focus();
     			return false;
			}
}
     			
return true;
}

function mailCheck(obj) {
	if(obj.value.length==0) return true;
	if((obj.value.indexOf("@") == -1) |
	   (obj.value.indexOf(".") == -1) |
	   (obj.value.length < 7)) {
			alert("Indirizzo e-mail non valido!");
			obj.focus();
			return false;
	}
}

function dateCheck(source_obj) {
  if(source_obj.value.length==0) return false;
  obj=source_obj.value.replace(/[^\d]/g,"0");
  gg=obj.substr(0,2);
  mm=obj.substr(3,2);
  aa=obj.substr(6,4);
  strdata=gg+"/"+mm+"/"+aa;
  data = new Date(aa,mm-1,gg);
  daa=data.getFullYear().toString();
  dmm=(data.getMonth()+1).toString();
  dmm=dmm.length==1?"0"+dmm:dmm
  dgg=data.getDate().toString();
  dgg=dgg.length==1?"0"+dgg:dgg
  dddata=dgg+"/"+dmm+"/"+daa
  if (dddata!=strdata) {
    alert("Inserire una data in formato gg/mm/aaaa!");
    source_obj.focus();  //...viene ridato il focus per il reinserimento
  }
}

/**
Time Object
*/
Time.prototype.hours	= 0;
Time.prototype.minutes	= 0;
Time.prototype.seconds	= 0;

/**
Time Object costructor
*/
function Time( h, m, s ) {
	this.hours		= h
	this.minutes	= m
	this.seconds	= s
}

/**
*/
function parseTIME(value){
	var time = /(\d{2})[:]?(\d{1,2})?/g;
		
	var result = time.exec(value);
	if(!result || result.length==1) return null;
	if(result[2].length==0 ) return null;
	
	//for(i=0; i< result.length ; ++i ) alert(result[i]);
	
	// bug fix - non funziona con 08
	//var hh = parseInt(result[1]);
	
	var hh = parseFloat(result[1]);
	var mm = (result.length==3 && result[2].length>0 )?parseInt(result[2]):0;
	
	return new Time( hh, mm, 0 )

}

/**
*/
function formatTIME(n){
	return ((n.hours<10?"0":"") +n.hours)+
			":"+
			((n.minutes<10?"0":"") +n.minutes);
}	    

/**
*/
function parseNUMBER(value) {
	//PRE-CONDITION
	
	if(arguments.length==0 || value==null) return null;
	if(typeof(value)!="string") { alert("parseNumber:type mismatch");return null;}
	if(value.length==0) return null;
	
	var result = parseFloat(value);

	return (isNaN(result))?null:new Number(result);
}

/**
*/
function formatNUMBER(n){return n;}	    


/**
*/
function parseINTEGER(value) {
	//PRE-CONDITION
	if(arguments.length==0 || value==null) return null;
	if(typeof(value)!="string") { alert("parseNumber:type mismatch");return null;}
	if(value.length==0) return null;

	var result = parseInt(value);

	return (isNaN(result))?null:new Number(result);
}

/**
*/
function formatINTEGER(n){return n;}	    

/**
*/
function parseCURRENCY(value) {	return parseNUMBER(value); }

/**
*/
function formatCURRENCY(n){return n;}	    


/**
*/
function parseTEXT( v ) { return v; }

/**
*/
function formatTEXT(v){return v;}	    

/**
*/
function __parseDate( date_tokens ) {
	var day = parseFloat(date_tokens[1]);
	var month = parseFloat(date_tokens[2]);
	var year = parseFloat(date_tokens[3]);
	
	return (day<=0||day>31||month<=0||month>12)?
			null :
			new Date( year,(month-1), day );
}

/**
*/
function formatDATE( d ) {
	var day = d.getDate();
	var month = d.getMonth() + 1;
	var year = d.getYear();

	return (day<10?"0":"")+day+"/"+(month<10?"0":"")+month+"/"+year; 
}


/**
@param value	string value
@return Date object or null
*/
function parseDATE(value) {
	//PRE-CONDITION
	if(arguments.length==0 || value==null) return null;
	if(typeof(value)!="string") { alert("parseDate:type mismatch");return null;}
	if(value.length==0) return null;
	
	var valid = false;

	var dt = /(\d{1,2})[-\/.](\d{1,2})[-\/.](\d{4})/
	var result = dt.exec(value);

	if( result && result!=null ){
		valid = (result.length == 4 );
	}

	if( !valid ){
  	dt = /(\d{2})(\d{2})(\d{4})/
		result = dt.exec(value);
		if( result && result!=null ){
			valid = (result.length == 4 );
		}
	}

	return (valid) ? __parseDate(result) : null;
}


/**
@param type				data type
@param elem				form input element
@return true/false
*/
function parseInput(elem,type) {
	//PRE-CONDITION
	if(arguments.length!=2 || elem==null ) return false;
	if(typeof(elem)!="object") { alert("parseInput"+type+":type mismatch");return false;}
	if(elem.value.length==0) return false;
	
	var parseMethod = "parse"+type.toUpperCase();
	
	if(!eval(parseMethod)) 
		return false;
		
	var result = eval(parseMethod+"(elem.value)");
		
	if( result==null ) {
    	alert( eval("parse_"+type.toLowerCase()+"_error") );
    	elem.focus();
    	return false;
	}
	
	elem._value = result;
		 
	return true;
}


/**
@param elem
@param type
@param format
@param method
*/
function validateInput(elem,type,format,method) {
	if(type.length==0) type="text";
	
	var valid = parseInput(elem,type);

	if(valid&&method&&method.length>0){
		var validateMethod = method;
		valid = (eval(validateMethod))?eval(validateMethod+"(elem)"):true;
		
		if(!valid) 
			elem.focus();
	}
			
	if(valid&&format){
		var formatMethod = "format"+type.toUpperCase();
		if(eval(formatMethod))
			elem.value = eval(formatMethod+"( elem._value )");
	}

	return valid;	
}

/**
<form 
	name="myform" 
	method="post" 
	action="page.asp" 
	onsubmit="return validateForm(this)">
</form>
*/
function validateForm( form ) {
	
	if(!form) return true;
	
	for( var i=0; i<form.elements.length; ++i ) {
		
		var e = form.elements[i];
		
		if(e.mandatory) {
			if(e.value.length==0 ) {
				alert( "il campo è obbligatorio!" );
				e.focus();
				return false;
			}
		}
		
	}
	return true;
}


