
var DATATYPE_STRING = 0;
var DATATYPE_INTEGER = 1;
var DATATYPE_DOUBLE = 2;
var DATATYPE_DATE = 3;

var DATAFORMAT_GENERAL = 0;
var DATAFORMAT_STANDARD_0_DEC = 1;
var DATAFORMAT_STANDARD_1_DEC = 2;
var DATAFORMAT_STANDARD_2_DEC = 3;
var DATAFORMAT_STANDARD_3_DEC = 4;
var DATAFORMAT_DDMMYYYY = 5;


//-------------------------------------------------------------------------------------------------------------------//
function IIf($Condition, $TruePart, $FalsePart) {
	if ( $Condition ) {
		return $TruePart;
	}
	else {
		return $FalsePart;
	}
}
//-------------------------------------------------------------------------------------------------------------------//
function InStr(Start, string, Find) {
	for ( var i = Start; i < string.length; i++ ) {
		if ( string.substr(i, Find.length) == Find ) {
			return i;
		}
	} 
	return -1;
}
//-------------------------------------------------------------------------------------------------------------------//
function Replace(string, find, replace) {
	var i = InStr(0, string, find);
	while ( i >= 0 ) {
		string = string.substring(0, i) + replace + string.substring(i + find.length, string.length);
		i = InStr(i + find.length, string, find);
	} 
	return string;
}
//-------------------------------------------------------------------------------------------------------------------//
// Ritorna true se value è vuoto
function IsEmpty(string) {
    if (string.length == 0) return true;
    return false;
}
//-------------------------------------------------------------------------------------------------------------------//
// Ritorna true se value è un intero valido
function IsInteger(string) {
	var i = 0;
	var dec = false;

	if ( IsEmpty(string) ) return true;

	for ( i = 0; i < string.length; i++ ) {
		switch ( string.substr(i, 1) ) {
		case '-':
		case ' ':
		case '.':
		case '0': 
			break;
		case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
			if ( dec ) return false;
			break;
		case ',':
			if ( dec ) return false; 
			dec = true;
			break;
		default:
			return false;	
		}	
	} 
    return true;
}
//-------------------------------------------------------------------------------------------------------------------//
// Converte value in Integer
function GetInteger(string) {
	if ( !IsInteger(string) ) return 0;
	string = string.replace(' ','');
	string = string.replace('.','');
	if ( string == '' ) return 0;
	return parseInt(string, 10);
}
//-------------------------------------------------------------------------------------------------------------------//
function IsDouble(string) {
	var i = 0;
	var dec = false;
	
	if ( IsEmpty(string) ) return true;

	for ( i = 0; i < string.length; i++ ) {
		switch ( string.substr(i, 1) ) {
		case '-':
		case ' ':
		case '.':
		case '0': 
		case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
			break;
		case ',':
			if ( dec ) return false; 
			dec = true;
			break;
		default:
			return false;	
		}	
	} 
    return true;
}
//-------------------------------------------------------------------------------------------------------------------//
// Converte string in Double
function GetDouble(string) {
	if ( !IsDouble(string) ) return 0.0;
	string = Replace(string, ' ', '');
	string = Replace(string, '.', '');
	if ( string == '' ) return 0.0;

	string = Replace(string, ',', '.');
	return parseFloat(string);
}
//-------------------------------------------------------------------------------------------------------------------//
function FormatGeneral(number) {
	string = Replace(number + '', '.', ',');
	return string;
}
//-------------------------------------------------------------------------------------------------------------------//
function FormatStandard(number, Decimals) {
	//alert('FormatStandard');
	var t = '';
	var c = -1;
	var tseg = '';
	var tint = '';
	var tdec = '';
	var i = 0;
	var j = 0;
	var t2 = '';

	if ( number == 0 || number == 0.0 ) return ''; 

	t = number + '';	

	if ( t.substr(0, 1) == '-' ) {
		tseg = '-';
		t = t.substring(1, t.length);
	}
	//alert('t=' + t + ' tseg=' + tseg);

	c = InStr(0, t, '.'); 
	if ( c != -1 ) {
		tint = t.substring(0, c);
		tdec = t.substring(c + 1, t.length); 
	}
	else {
		tint = t;
		tdec = '';
	}

	t2 = '';
	j = 0;
	for ( i = tint.length - 1; i >= 0; i--) {
		if ( j == 3 ) {
			t2 = '.' + t2;
			j = 0;
		}
		t2 = tint.substr(i, 1) + t2;			
		j = j + 1;
	} 
	t2 = tseg + t2;
	if ( Decimals > 0 ) {
		t2 = t2 + ',';	
		for ( i = 1; i <= Decimals; i++ ) {
			if ( i <= tdec.length ) {
				t2 = t2 + tdec.substr(i - 1, 1);
			}
			else {
				t2 = t2 + '0';
			}
		}  
	}
	return t2;
}
//-------------------------------------------------------------------------------------------------------------------//
function GetNullDate() {
	//alert('GetNullDate()');
	var date = new Date(0, 0, 0);
	return date;
}
//-------------------------------------------------------------------------------------------------------------------//
function IsNullDate(date) {
	//alert('IsNullDate()');
	var NullDate = GetNullDate();
	if ( date.getDate() != NullDate.getDate() ) return false;
	if ( date.getMonth() != NullDate.getMonth() ) return false;
	if ( date.getFullYear() != NullDate.getFullYear() ) return false;
	return true;
}
//-------------------------------------------------------------------------------------------------------------------//
function IsDate(string) {
	//alert('IsDate(' + string + ')');
	var y = 0; var m = 0; var d = 0;
	var i1 = 0; var i2 = 0;

	if ( IsEmpty(string) ) return true;

	i1 = InStr(0, string, '/');
	if ( i1 == -1 ) return false;
	i2 = InStr(i1 + 1, string, '/');
	
	if ( i2 >= 0 ) {
		d = parseInt(string.substring(0, i1), 10);
		m = parseInt(string.substring(i1 + 1, i2), 10);
		y = parseInt('0' + string.substring(i2 + 1, string.length), 10);
		if ( y < 100 ) {
			y = IIf( y > 50, y + 1900, y + 2000);
		}
	}
	else {
		d = parseInt(string.substring(0, i1), 10);
		m = parseInt('0' + string.substring(i1 + 1, string.length), 10);
		Today = new Date();
		y = Today.getFullYear();
	}

	date = new Date(y, m - 1, d);
	if ( d != date.getDate() )        return false;
	if ( m != (date.getMonth() + 1) ) return false;
	if ( y != date.getFullYear() )    return false;
	return true;
}
//-------------------------------------------------------------------------------------------------------------------//
// Converte string in Date
function GetDate(string) {
	//alert('GetDate(' + string + ')');
	var y = 0; var m = 0; var d = 0;
	var i1 = 0; var i2 = 0;

	if ( !IsDate(string) ) return GetNullDate();
	if ( IsEmpty(string) ) return GetNullDate();

	i1 = InStr(0, string, '/');
	i2 = InStr(i1 + 1, string, '/');
	
	//alert('GetDate(C)');
	if ( i2 >= 0 ) {
		d = parseInt(string.substring(0, i1), 10);
		m = parseInt(string.substring(i1 + 1, i2), 10);
		y = parseInt('0' + string.substring(i2 + 1, string.length), 10);
		if ( y < 100 ) {
			y = IIf( y > 50, y + 1900, y + 2000);
		}
	}
	else {
		d = parseInt(string.substring(0, i1), 10);
		m = parseInt('0' + string.substring(i1 + 1, string.length), 10);
		Today = new Date();
		y = Today.getFullYear();
	}
	//alert('GetDate(D)');

	date = new Date(y, m - 1, d);
	//alert('GetDate(E)');
	return date;
}
//-------------------------------------------------------------------------------------------------------------------//
function FormatDate(date) {
	//alert ('FormatDate(' + date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ')');
	if ( IsNullDate(date) ) return '';

	var y = '' + date.getFullYear();
	var m = '' + (date.getMonth() + 1);
	var d = '' + date.getDate(); 

	while ( y.length < 4 ) { y = '0' + y; } 
	while ( m.length < 2 ) { m = '0' + m; } 
	while ( d.length < 2 ) { d = '0' + d; } 

	return d + '/' + m + '/' + y; 
}

//-------------------------------------------------------------------------------------------------------------------//
function OnChange(Object) {
	//alert('OnChange(' + Object.name + ')');

	switch ( parseInt(Object.pDataType) ) {
	case DATATYPE_STRING:
		break;

	case DATATYPE_INTEGER:
		if ( !IsInteger(Object.value) ) {
			alert('Valore non valido');
			Object.value = "";
		}
		else {
			switch ( parseInt(Object.pDataFormat) ) {
			case DATAFORMAT_GENERAL			: Object.value = FormatGeneral(GetInteger(Object.value))    ;	break;
			case DATAFORMAT_STANDARD_0_DEC	: Object.value = FormatStandard(GetInteger(Object.value), 0);	break;
			case DATAFORMAT_STANDARD_1_DEC	: Object.value = FormatStandard(GetInteger(Object.value), 1);	break;
			case DATAFORMAT_STANDARD_2_DEC	: Object.value = FormatStandard(GetInteger(Object.value), 2);	break;
			case DATAFORMAT_STANDARD_3_DEC	: Object.value = FormatStandard(GetInteger(Object.value), 3);	break;
			default 						: Object.value = GetInteger(Object.value) + ''				;	break;
			}
		}
		break;

	case DATATYPE_DOUBLE:
		if ( !IsDouble(Object.value) ) {
			alert('Valore non valido');
			Object.value = "";
		}
		else {
			switch ( parseInt(Object.pDataFormat) ) {
			case DATAFORMAT_GENERAL			: Object.value = FormatGeneral(GetDouble(Object.value))		;	break;
			case DATAFORMAT_STANDARD_0_DEC	: Object.value = FormatStandard(GetDouble(Object.value), 0) ;	break;
			case DATAFORMAT_STANDARD_1_DEC	: Object.value = FormatStandard(GetDouble(Object.value), 1) ;	break;
			case DATAFORMAT_STANDARD_2_DEC	: Object.value = FormatStandard(GetDouble(Object.value), 2) ;	break;
			case DATAFORMAT_STANDARD_3_DEC	: Object.value = FormatStandard(GetDouble(Object.value), 3) ;	break;
			default 						: Object.value = FormatGeneral(GetDouble(Object.value))     ;	break;
			}

		}
		break;

	case DATATYPE_DATE:
		if ( !IsDate(Object.value) ) {
			alert('Valore non valido');
			Object.value = "";
		}
		else {
			Object.value = FormatDate(GetDate(Object.value)); break;		
		}
		break; 
	}

}
//-------------------------------------------------------------------------------------------------------------------//
function OnKeyDown(Object) {
	switch ( parseInt(Object.pDataType) ) {
	case DATATYPE_DOUBLE:
		//Sostituzione del . con la ,
		//alert(event.keyCode);
		if ( event.keyCode == 110 ) {
			Object.value = Object.value + ',';
			event.returnValue = false;			
			//event.keyCode = 0; //188;
			//alert(event.keyCode);
			//return event.keyCode;
		}
		break;
	}
}
