var DATATYPE_STRING = 0;
var DATATYPE_INTEGER = 1;
var DATATYPE_DOUBLE = 2;
var DATATYPE_DATE = 3;
var DATATYPE_TIME_HHMM = 5;
var DATATYPE_TIME_HHMMSS = 6;



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 = '';
	var t3 = ''; b = false;

	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';
			}
		}  
	}
	if ( Decimals == -1 ) {
		//123400
		//012345
		t3 = "";
		b = false;
		for ( i = tdec.length - 1; i >= 0; i-- ) {
			if ( b == false ) {
				if ( tdec.substr(i, 1) != "0" ) {
					t3 = tdec.substr(i, 1) + t3;
					b = true;
				}
			}
			else {
				t3 = tdec.substr(i, 1) + t3;
			}
		}
		if ( t3 != "" ) t2 = t2 + "," + t3;
	}
	return t2;
}
//-------------------------------------------------------------------------------------------------------------------//
function GetNullDate() {
	//alert('GetNullDate()');
	var date = new Date(0, 0, 0);
	return date;
}
//-------------------------------------------------------------------------------------------------------------------//
function GetNullTime() {
	//alert('GetNullDate()');
	var date = new Date(0, 0, 0, 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 IsNullTime(date) {
	//alert('IsNullDate()');
	var NullTime = GetNullTime();
	if ( date.getHours() != NullTime.getHours() ) return false;
	if ( date.getMinutes() != NullTime.getMinutes() ) return false;
	if ( date.getSeconds() != NullTime.getSeconds() ) 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;
}
//-------------------------------------------------------------------------------------------------------------------//
function IsTime(string) {
	//alert('IsDate(' + string + ')');
	var h = 0; var m = 0; var s = 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 ) {
		h = parseInt(string.substring(0, i1), 10);
		m = parseInt(string.substring(i1 + 1, i2), 10);
		s = parseInt('0' + string.substring(i2 + 1, string.length), 10);
	}
	else {
		h = parseInt(string.substring(0, i1), 10);
		m = parseInt('0' + string.substring(i1 + 1, string.length), 10);
		s = 0;
	}

	if ( h < 0 || h > 24 ) return false;
	if ( m < 0 || m > 60 ) return false;
	if ( s < 0 || s > 60 ) 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;
}
//-------------------------------------------------------------------------------------------------------------------//
// Converte string in Date
function GetTime(string) {
	//alert('GetDate(' + string + ')');
	var h = 0; var m = 0; var s = 0;
	var i1 = 0; var i2 = 0;

	if ( !IsTime(string) ) return GetNullTime();
	if ( IsEmpty(string) ) return GetNullTime();

	i1 = InStr(0, string, '.');
	i2 = InStr(i1 + 1, string, '.');
	
	//alert('GetDate(C)');
	if ( i2 >= 0 ) {
		h = parseInt(string.substring(0, i1), 10);
		m = parseInt(string.substring(i1 + 1, i2), 10);
		s = parseInt('0' + string.substring(i2 + 1, string.length), 10);
	}
	else {
		h = parseInt(string.substring(0, i1), 10);
		m = parseInt('0' + string.substring(i1 + 1, string.length), 10);
		s = 0;
	}
	//alert('GetDate(D)');

	date = new Date(0, 0, 0, h, m, s);
	//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 FormatTimeHHMM(date) {
	//alert ('FormatDate(' + date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ')');
	if ( IsNullTime(date) ) return '';

	var h = '' + date.getHours();
	var m = '' + date.getMinutes();

	while ( h.length < 2 ) { h = '0' + h; } 
	while ( m.length < 2 ) { m = '0' + m; } 

	return h + '.' + m; 
}
//-------------------------------------------------------------------------------------------------------------------//
function FormatTimeHHMMSS(date) {
	//alert ('FormatDate(' + date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ')');
	if ( IsNullTime(date) ) return '';

	var h = '' + date.getHours();
	var m = '' + date.getMinutes();
	var s = '' + date.getSeconds();

	while ( h.length < 2 ) { h = '0' + h; } 
	while ( m.length < 2 ) { m = '0' + m; } 
	while ( s.length < 2 ) { s = '0' + s; } 

	return h + '.' + m + '.' + s; 
}


function TextBoxUpperCase(Object) {
	Object.value = Object.value.toUpperCase();
}
//-------------------------------------------------------------------------------------------------------------------//
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; 

	case DATATYPE_TIME_HHMM:
		if ( !IsTime(Object.value) ) {
			alert('Valore non valido');
			Object.value = "";
		}
		else {
			Object.value = FormatTimeHHMM(GetTime(Object.value)); break;		
		}
		break; 

	case DATATYPE_TIME_HHMMSS:
		if ( !IsTime(Object.value) ) {
			alert('Valore non valido');
			Object.value = "";
		}
		else {
			Object.value = FormatTimeHHMMSS(GetTime(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;
	}
}
function OnKeyUp(Object) {
	switch ( parseInt(Object.pDataType) ) {
	case DATATYPE_STRING:
		if ( Object.tagName == "TEXTAREA" ) {
			if ( Object.maxlength ) {
				if ( Object.value.length > parseInt(Object.maxlength) ) {
					Object.value = Object.value.substring(0, parseInt(Object.maxlength));
				}
			}
		}
		break;
	}
}


// CommandButton ----------------------------------------------------------------------------------
function CommandButtonOnMouseOver(id) {
	document.getElementById(id + 'imgLeft').style.top=-151;
	document.getElementById(id + 'imgRight').style.top=-101;
}
function CommandButtonOnMouseOut(id) {
	document.getElementById(id + 'imgLeft').style.top=-51;
	document.getElementById(id + 'imgRight').style.top=-1;
}


// TabControl -------------------------------------------------------------------------------------
function TabPageOnMouseOver(TabControl, TabPageIndex) {
	TabPage = TabControl.TabPages[TabPageIndex];

	if ( TabPage.Index != TabControl.TabIndex ) {
		document.getElementById(TabPage.Name + 'imgLeft').style.top=-150;
		document.getElementById(TabPage.Name + 'imgRight').style.top=-100;
	}
}
function TabPageOnMouseOut(TabControl, TabPageIndex) {
	TabPage = TabControl.TabPages[TabPageIndex];

	if ( TabPage.Index != TabControl.TabIndex ) {
		document.getElementById(TabPage.Name + 'imgLeft').style.top=-50;
		document.getElementById(TabPage.Name + 'imgRight').style.top=0;
	}
}
function TabPageOnClick(TabControl, TabPageIndex) {
	//alert('C = ' + TabControl.TabPages.length + ' ' + TabPageIndex);
	
	TabControl.TabIndex = TabPageIndex; 

	for (var i = 0; i < TabControl.TabPages.length; i++) {
		TabPage = TabControl.TabPages[i];
		if ( TabPage.Index == TabControl.TabIndex ) {
			document.getElementById(TabPage.Name + 'imgLeft').style.top=-250;
			document.getElementById(TabPage.Name + 'imgRight').style.top=-200;
			document.getElementById(TabPage.Name + 'Content').style.visibility='visible';
		}
		else {
			document.getElementById(TabPage.Name + 'imgLeft').style.top=-50;
			document.getElementById(TabPage.Name + 'imgRight').style.top=0;
			document.getElementById(TabPage.Name + 'Content').style.visibility='hidden';
		}
	}
}

function TabPage(Name) {
	this.Name = Name;
	this.Index = 0;
} 

function TabControl_AddTabPage(TabPage) {
	TabPage.Index = this.TabPages.length;
	this.TabPages[ this.TabPages.length ] = TabPage;
}
function TabControl() {
	this.TabIndex = 0;
	this.TabPages = new Array();
	this.AddTabPage = TabControl_AddTabPage;
}


// MenuBar ----------------------------------------------------------------------------------------
function MenuBarSwitchMenu( obj ) {
    if ( document.getElementById ) {
    	var el = document.getElementById(obj);
    	var ar = document.getElementById("masterdiv").getElementsByTagName("span");
    	if(el.style.display != "block"){
    		for (var i=0; i<ar.length; i++){
    			if (ar[i].className=="MenuBarTab")
    				ar[i].style.display = "none";
    		}
    		el.style.display = "block";
    	} else {
    		el.style.display = "none";
    	}
    }
}
function MenuBarItemExpandeCollapse(MenuBarItemName) {
	//alert("A");
	if ( document.getElementById("span" + MenuBarItemName + "Childs").style.display == "none" ) {
		document.getElementById("span" + MenuBarItemName + "Childs").style.display = "block";
		document.getElementById("a" + MenuBarItemName + "Expande").style.visibility = "hidden";
		document.getElementById("a" + MenuBarItemName + "Collapse").style.visibility = "inherit";
	}
	else {
	document.getElementById("span" + MenuBarItemName + "Childs").style.display = "none";
	document.getElementById("a" + MenuBarItemName + "Expande").style.visibility = "inherit";
	document.getElementById("a" + MenuBarItemName + "Collapse").style.visibility = "hidden";
	}
	return false;
}

// ListView ---------------------------------------------------------------------------------------


function ListViewHelper() {
	this.Name = "";
	this.SelectedItemIndex = 0;
	this.ColumnsCount = 0;

	this.GetItemsTable = function() {
		return document.getElementById("table" + this.Name + "Items");
	} 

	this.TROnMouseOver = function (TR) {
		if (TR.style.backgroundColor == "") TR.style.backgroundColor="#ccdaf1";
	}
	this.TROnMouseOut = function (TR) {
		if (TR.style.backgroundColor == "#ccdaf1") TR.style.backgroundColor="";
	}

	this.TROnClick = function (TR) {
		if ( this.SelectedItemIndex > 0 ) {
			//var TRPrec = this.GetItemsTable().rows(this.SelectedItemIndex - 1);
			var TRPrec = this.GetItemsTable().rows(this.SelectedItemIndex);
			if ( TRPrec ) {
				TRPrec.style.backgroundColor = "";
				TRPrec.style.color = "";
			}
		}

		//this.SelectedItemIndex = TR.rowIndex + 1;
		this.SelectedItemIndex = TR.rowIndex;
		//TR.style.backgroundColor = "highlight";
		TR.style.backgroundColor = "#7a9fde";
		TR.style.color = "#ffffff";
	} 

	this.GetItemTag = function (Index) {
		try {
			if ( Index == 0 ) return "";
			var tbl = this.GetItemsTable();
			//if ( tbl ) { return tbl.rows(Index - 1).pTag; } else { return ""; }
			if ( tbl ) { return tbl.rows(parseInt(Index)).pTag; } else { return ""; }
		}
		catch (ex) {
			alert("(ListViewHelper.GetItemTag) Error " + ex.description);
			return "";
		}
	}
	this.GetItemsCount = function () {
		var tbl = this.GetItemsTable();
		var C = 0;
		if ( tbl ) { C = tbl.rows.length - 1; }
		if ( C < 0 ) { C = 0; }
		return C;
	}

	this.Clear = function () {
		this.SelectedItemIndex = 0;
		document.getElementById("div" + this.Name + "Items").innerHTML = "";
		
	}

	this.HeaderResizerOnMouseDown = function (Index) {
		try {
		ListViewHelperHeaderResizer = this;
		document.onmousemove = ListViewHeaderResizerOnMouseMove;
		document.onmouseup = ListViewHeaderResizerOnMouseUp;

		}
		catch (ex) {
			alert("(ListViewHelper.HeaderResizerOnMouseDown)");
		}
	}

	this.HeaderResizerOnMouseUp = function (ColumnIndex, DeltaWidth) {
		try {
			var Width;
			var Left;
			var Div1;
			var Div2;
			var Div3;
			var Div4;
			var Div5;
			var Col;
			var i;

			Div1 = document.getElementById("div" + this.Name + "Col" + ColumnIndex);
			Div2 = document.getElementById("div" + this.Name + "ColTwo" + ColumnIndex);
			Div3 = document.getElementById("div" + this.Name + "ColTree" + ColumnIndex);
			Div4 = document.getElementById("div" + this.Name + "ColFour" + ColumnIndex);
			Div5 = document.getElementById("div" + this.Name + "ColFive" + ColumnIndex);
			Left = parseInt(Div1.style.left);
			Width = parseInt(Div1.style.width) + DeltaWidth;

			if ( Width < 20 ) return;

			Div1.style.width = Width;
			Div2.style.width = (Width - 7);
			Div3.style.left = (Width - 7);
			Div4.style.width = Width;
			Div5.style.left = (Width - 7);
			Left += parseInt(Div1.style.width);

			for ( i = (ColumnIndex + 1); i <= this.ColumnsCount; i++ ) {
				Div1 = document.getElementById("div" + this.Name + "Col" + i);

				Div1.style.left = Left;
				Left += parseInt(Div1.style.width);
			}

			this.ResizeColumns();
		}
		catch (ex) {
			alert("(ListViewHelper.HeaderResizerOnMouseUp) Errore: " + ex.description);
		}
	}
	this.ResizeColumns = function () {
		try {
			var i;
			var Div1;
			var Col;

			for ( i = 1; i <= this.ColumnsCount; i++ ) {
				Div1 = document.getElementById("div" + this.Name + "Col" + i);
				Col = document.getElementById("col" + this.Name + "Col" + i);
				if ( Col ) {
					Col.width = parseInt(Div1.style.width);
				}
			}
		}
		catch (ex) {
			alert("(ResizeColumns.HeaderResizerOnMouseUp) Errore: " + ex.description);
		}
	}

}
var ListViewHeaderResizer_ListViewHelper = null;
var ListViewHeaderResizer_ColumnIndex = 0;
var ListViewHeaderResizer_ClientX0 = 0;
var ListViewHeaderResizer_Resizer = null;

function ListViewHeaderResizerOnMouseDown(ListViewHelper, ColumnIndex) {
	try {
		ListViewHeaderResizer_ListViewHelper = ListViewHelper;
		ListViewHeaderResizer_ColumnIndex = ColumnIndex;
		ListViewHeaderResizer_ClientX0 = window.event.clientX;
		ListViewHeaderResizer_Resizer = document.getElementById("div" + ListViewHelper.Name + "Resizer");

		ListViewHeaderResizer_Resizer.style.visibility = "visible";
		ListViewHeaderResizer_Resizer.style.left = window.event.clientX - 3;

		document.onmousemove = ListViewHeaderResizerOnMouseMove;
		document.onmouseup = ListViewHeaderResizerOnMouseUp;
		document.onselectstart = function() {return false};
	}
	catch (ex) {
		alert("(ListViewHeaderResizerOnMouseDown) Errore: " + ex.description);
	}
}

function ListViewHeaderResizerOnMouseMove(e) {
	try {
		var Resizer = document.getElementById("div" + ListViewHelper.Name + "Resizer");
		if ( !e ) var e = window.event;
		ListViewHeaderResizer_Resizer.style.left = e.clientX - 3;
	}
	catch (ex) {
		alert("(ListViewHeaderResizerOnMouseMove) Errore: " + ex.description);
	}
}
function ListViewHeaderResizerOnMouseUp() {
	try {
		document.onmousemove = null;
		document.onmouseup = null;
		document.onselectstart = null;
		ListViewHeaderResizer_ListViewHelper.HeaderResizerOnMouseUp(ListViewHeaderResizer_ColumnIndex, window.event.clientX - ListViewHeaderResizer_ClientX0);

		ListViewHeaderResizer_Resizer.style.visibility = "hidden";
		ListViewHeaderResizer_Resizer.style.left = 0;
		ListViewHeaderResizer_Resizer = null;
	}
	catch (ex) {
		alert("(ListViewHeaderResizerOnMouseUp) Errore: " + ex.description);
	}
}

//var x0 = 0;
//function XOnDragStart(e) {
//	if ( !e ) var e = window.event;
//	x0 = e.ClientX;
//}
//function XOnDragEnd(e) {
//	if ( !e ) var e = window.event;
//	alert("XOnDragEnd " + x0);
//}


function ListViewHeaderOnMouseOver(Div) {
	document.getElementById(Div.id + 'imgLeft').style.top=-23;
	document.getElementById(Div.id + 'imgRight').style.top=-23;
}
function ListViewHeaderOnMouseOut(Div) {
	document.getElementById(Div.id + 'imgLeft').style.top=-1;
	document.getElementById(Div.id + 'imgRight').style.top=-1;
}

// Ajax -------------------------------------------------------------------------------------------
var AjaxArray = new Object;
AjaxArray.Count = 0;

function GetAjax() {
	var Ajax = false;
	if (window.XMLHttpRequest) { // if Mozilla, Safari etc
		Ajax = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) { // if IE
			try {
				Ajax = new ActiveXObject("Msxml2.XMLHTTP");
			} 
			catch (e){
				try {
					Ajax = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e){}
			}
		}
		else {
			Ajax = false;
		}
	}
	if ( Ajax ) {
		AjaxArray.Count++;
		AjaxArray["O" + AjaxArray.Count] = Ajax; 
	}

	return Ajax;
}
function AjaxCleanUp() {
	//alert("AjaxCleanUp ZZ");
	var i;
	for ( i = 1; i <= AjaxArray.Count; i++ ) {
		try {
			if ( AjaxArray["O" + i] ) AjaxArray["O" + i].abort();
		}
		catch (e) {}
	}
}
// MouseBox
var divWaitMouse = null;
var TimerMoveWaitCursor = null;
function ShowWaitMouse(Text) {
	if ( divWaitMouse ) HideWaitMouse();

	divWaitMouse = document.createElement("div");
	divWaitMouse.id = "divdivWaitMouse";
	divWaitMouse.style.position = "absolute";
	divWaitMouse.style.zIndex = 1000;
	divWaitMouse.style.visibility = "hidden";

	var t = '';
	//var bar3= createBar(100,15,'white',1,'#7f9db9','#0055e5',85,7,2,"");
	//function createBar(w,h,bgc,brdW,brdC,blkC,speed,blocks,count,action){
	var w = 100; h = 15; bgc = 'white'; brdW = '1'; brdC = '#7f9db9', blkC = '#0055e5', speed = 85; blocks = 7 ; count = 2; action = "";
	var i;
	t += '<div id="_xpbar" style="visibility:inherit; position:relative; overflow:hidden; width:'+w+'px; height:'+h+'px; background-color:'+bgc+'; border-color:'+brdC+'; border-width:'+brdW+'px; border-style:solid; font-size:1px;">';
	t += '<span id="blocks" style="left:-' + (h*2+1) + 'px; position:absolute; font-size:1px">';
	for ( i = 0; i < blocks; i++ ) {
		t += '<span style="background-color:' + blkC + '; left:-' + ((h*i)+i)+'px; font-size:1px; position:absolute; width:'+h+'px; height:'+h+'px; '
		t += (true)?'filter:alpha(opacity='+(100-i*(100/blocks))+')':'-Moz-opacity:'+((100-i*(100/blocks))/100);
		t += '"></span>';
	}
	t += '</span></div>';

	divWaitMouse.innerHTML = t;

	document.body.appendChild(divWaitMouse);
	document.getElementById("divdivWaitMouse").style.visibility = "hidden";

	StartGetMousePosition();
	MoveWaitCursor();
	TimerMoveWaitCursor = window.setInterval(MoveWaitCursor, 85);
}
function MoveWaitCursor() {
	if ( divWaitMouse == null ) return;
	if ( mouseX == 0 && mouseY == 0 ) {
		divWaitMouse.style.visibility = "hidden";
		return;
	}
	divWaitMouse.style.left = (mouseX + 20) + 'px';	
	divWaitMouse.style.top = (mouseY + 0) + 'px';	
	divWaitMouse.style.visibility = "visible";

	//window.status = mouseX + ", " + mouseY;
	
	var b = document.getElementById('blocks');
	
	var w = 100; h = 15; bgc = 'white'; brdW = '1'; brdC = '#7f9db9', blkC = '#0055e5', speed = 85; blocks = 7 ; count = 2; action = "";

	if ( parseInt(b.style.left) + h + 1 - (blocks * h + blocks) > w) {
		b.style.left = -(h * 2 + 1) + 'px';
	}
	else {
		b.style.left = ( parseInt(b.style.left) + h + 1) + 'px';
	}
}
function HideWaitMouse() {
	if ( TimerMoveWaitCursor ) {
		window.clearInterval(TimerMoveWaitCursor);
		TimerMoveWaitCursor = null;
	}
	StopGetMousePosition();
	
	if ( divWaitMouse ) {
		var div = document.getElementById("divdivWaitMouse");
		document.body.removeChild( div );
		divWaitMouse = null;
	}
}




var mouseX = 0
var mouseY = 0
function StartGetMousePosition() {
	document.onmousemove = getMouseXY;
}
function StopGetMousePosition() {
	document.onmousemove = null;
}
function getMouseXY(e) {
    mouseX = event.clientX + document.body.scrollLeft
    mouseY = event.clientY + document.body.scrollTop
	if (mouseX < 0){mouseX = 0}
	if (mouseY < 0){mouseY = 0}  
	return true;
}

// PageMover -------------------------------------------------------------------------------------------
function Premus_PageMover_SetFromDataDiv() {
	this.FirstPage = parseInt(document.getElementById("div" + this.Name + "Data").FirstPage);
	this.CurrentPage = parseInt(document.getElementById("div" + this.Name + "Data").CurrentPage);
	this.LastPage = parseInt(document.getElementById("div" + this.Name + "Data").LastPage);
	this.ObjectsPerPage = parseInt(document.getElementById("div" + this.Name + "Data").ObjectsPerPage);
	this.ObjectsCount = parseInt(document.getElementById("div" + this.Name + "Data").ObjectsCount);
	this.TotalObjects = parseInt(document.getElementById("div" + this.Name + "Data").TotalObjects);
	//alert("SetFromDataDiv");
}
function Premus_PageMover_Refresh() {
	//alert("Refresh");

	var Html = "";
	var i = 0;
	var FirstVisiblePage = 0;
	var LastVisiblePage = 0;

	if ( this.FirstPage > 0 && this.CurrentPage > 0 && this.LastPage > 0 ) {

		//Calcolo prima pagina visibile
		FirstVisiblePage = Math.ceil(this.CurrentPage / this.VisiblePages) * this.VisiblePages - (this.VisiblePages - 1);
		if ( FirstVisiblePage == 0 ) FirstVisiblePage = 1;
		LastVisiblePage = FirstVisiblePage + this.VisiblePages - 1;
		if ( LastVisiblePage > this.LastPage ) LastVisiblePage = this.LastPage;

		Html += (this.CurrentPage - 1) * this.ObjectsPerPage + 1 + "-";
		Html += (this.ObjectsCount + (this.CurrentPage - 1) * this.ObjectsPerPage);
		Html += " di " + this.TotalObjects + " oggetti trovati&nbsp;&nbsp;&nbsp;";


		//Prima pagina
		if ( FirstVisiblePage > this.VisiblePages ) {
			Html += '&nbsp;&nbsp;<a class="PageMoverPage" href="#" onclick="' + this.Name + 'Object.CurrentPage=' + (this.FirstPage) + ';' + this.OnPage + ';return false;">|&lt;</a>';
		}

		//Pagine precedenti
		if ( FirstVisiblePage > this.VisiblePages ) {
			Html += '&nbsp;&nbsp;<a class="PageMoverPage" href="#" onclick="' + this.Name + 'Object.CurrentPage=' + (FirstVisiblePage - this.VisiblePages) + ';' + this.OnPage + ';return false;">&lt;</a>';
		}
		
		//Ciclo sulle pagine da visualizzare
		for ( i = FirstVisiblePage; i <= LastVisiblePage; i++ ) {
			if ( i == this.CurrentPage ) {
				Html += "&nbsp;&nbsp;" + i;
			}
			else {
				Html += '&nbsp;&nbsp;<a class="PageMoverPage" href="#" onclick="' + this.Name + 'Object.CurrentPage=' + i + ';' + this.OnPage + ';return false;">' + i + '</a>';
			}
		}

		//Pagine successive
		if ( LastVisiblePage < this.LastPage ) {
			Html += '&nbsp;&nbsp;<a class="PageMoverPage" href="#" onclick="' + this.Name + 'Object.CurrentPage=' + (LastVisiblePage + 1) + ';' + this.OnPage + ';return false;">&gt;</a>';
		}

		//Ultima pagina
		if ( LastVisiblePage < this.LastPage ) {
			Html += '&nbsp;&nbsp;<a class="PageMoverPage" href="#" onclick="' + this.Name + 'Object.CurrentPage=' + (this.LastPage) + ';' + this.OnPage + ';return false;">&gt;|</a>';
		}

	}
	else {
		Html += this.ObjectsCount + " oggetti trovati";
	}
	

	document.getElementById("div" + this.Name).innerHTML = Html;
	//alert("Refresh3");
}
function Premus_PageMover(Name) {
	this.Name = Name;
	this.FirstPage = 0;
	this.CurrentPage = 0;
	this.LastPage = 0;
	this.VisiblePages = 10;
	this.ObjectsPerPage = 0;
	this.ObjectsCount = 0;
	this.TotalObjects = 0;
	this.OnPage = "";
	this.Refresh = Premus_PageMover_Refresh;
	this.SetFromDataDiv = Premus_PageMover_SetFromDataDiv;
}

function Premus_Collection() {
	this.Count = 0;
	this.Keys = new Array();
	this.Items = new Array(); 

	this.Add = function(Item, Key) {
		this.Items[this.Count] = Item;

		this.Keys[this.Count] = new Object();
		this.Keys[this.Count]["Key"] = "" + Key;
		this.Keys[this.Count]["Index"] = this.Count;

		this.Count++;
	}

	this.Item = function(Key) {
		switch ( typeof(Key) ) {
		case "number":
			return this.Items[Key];
			break;
		case "string":
			for ( var i = 0; i < this.Count; i++ ) {
				if ( this.Keys[i]["Key"] == Key ) {
					return this.Items[ this.Keys[i]["Index"] ];
				}
			}
			break;
		}
		return null;
	}

	this.Clear = function() {
		while ( this.Count > 0 ) {
			this.Items[this.Count] = null;
			this.Count--;
		}
	}
}

function ComboBoxHelper() {
	this.Name = "";

	this.Clear = function() {
		var cbo = document.getElementById(this.Name);
		cbo.value = "";
		while ( cbo.options.length > 0 ) { cbo.remove(0); }
	}
	
	this.AddItem = function(Text, Value) {
		var cbo = document.getElementById(this.Name);
		var newElem = document.createElement("option");
		newElem.value = Value;
		newElem.text = Text;
		cbo.add(newElem, -1);
	} 
}
function Premus_ComboBox_DropDownListEx_OnKeyDown(Sender) {
	try {
		if ( window.event.keyCode == 46 ) {
			Premus_ComboBox_DropDownListEx_Clear(Sender);
			if ( Sender.options.length > 0 ) {
				var Value0 = Sender.options[0].value;
				if ( Value0 == "" || Value0 == "0" ) {
					Sender.options[0].selected = true;
				}
			}
		}
	}catch (ex) { alert("(Premus_ComboBox_DropDownListEx_OnKeyDown) Errore " + ex.description); }
}
function Premus_ComboBox_DropDownListEx_OnKeyPress(Sender) {
	try {
		var pKeys = Sender.pKeys;
		var char = String.fromCharCode(window.event.keyCode);

		var re = new RegExp("^" + pKeys + char, "i"); // "i" -> ignoreCase
		for( var i = 0; i < Sender.options.length; i++ ) {
			if( re.test(Sender.options[i].text) ) {
				Sender.options[i].selected = true;
				Sender.pKeys += char;
				window.event.returnValue = false;
				break;
			}
		}

	}catch (ex) { alert("(Premus_ComboBox_DropDownListEx_OnKeyPress) Errore " + ex.description); }
}

function Premus_ComboBox_DropDownListEx_Clear(Sender) {
	try {
		Sender.pKeys = "";
	}catch (ex) { alert("(Premus_ComboBox_DropDownListEx_Clear) Errore " + ex.description); }
}


/*
	function MenuShowChild(MenuButton, MenuChild) {
		MenuHideChild();
		MenuChild.style.left = AbsoluteLeft(MenuButton) + 1;
		MenuChild.style.top  = AbsoluteTop(MenuButton) + MenuButton.offsetHeight;
		MenuChild.style.visibility = "visible";
		ActiveMenuButton = MenuButton;
		ActiveMenuChild = MenuChild;
	}
*/

var Premus_Toolbar_ActiveButton = null;
var Premus_Toolbar_ActiveMenu = null;

function Premus_Toolbar_HideMenu() {
	if ( Premus_Toolbar_ActiveMenu ) {
		Premus_Toolbar_ActiveMenu.style.visibility = "hidden";
		Premus_Toolbar_ActiveMenu = null;
	}
}
function Premus_Toolbar_HideMenuDelay() {
	if ( Premus_Toolbar_ActiveMenu ) {
		setTimeout("Premus_Toolbar_HideMenu()",500);
	}
}
function Premus_Toolbar_HideMenuTest(e){
	if ( Premus_Toolbar_ActiveMenu ) {
		if ( !Premus_Toolbar_ActiveButton.contains(e.toElement) && !Premus_Toolbar_ActiveMenu.contains(e.toElement) ) {
			Premus_Toolbar_HideMenu();
		}
	}
}

function ToolbarHelper() {
	this.Name = "";

	this.ShowMenu = function (Index) {

		Premus_Toolbar_HideMenu();

		var divMenu = document.getElementById("divMenu" + this.Name + Index);	
		var tdButton = document.getElementById("tdButton" + this.Name + Index);
		divMenu.style.left = this.AbsoluteLeft(tdButton);
		//divMenu.style.top  = this.AbsoluteTop(tdButton) + tdButton.offsetHeight;
		divMenu.style.top  = tdButton.offsetHeight;
		//divMenu.style.top  = this.AbsoluteTop(tdButton);
		divMenu.style.visibility = "visible";
		divMenu.style.zIndex = 1000;

		Premus_Toolbar_ActiveButton = tdButton;
		Premus_Toolbar_ActiveMenu = divMenu;
	}	

	this.AbsoluteLeft = function (obj) {
		var curleft = 0;
		if (obj.offsetParent) {
			while (obj.offsetParent) {
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}
	this.AbsoluteTop = function (obj) {
		var curTop = 0;
		if (obj.offsetParent) {
			while (obj.offsetParent) {
				curTop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curTop += obj.y;
		return curTop;
	}

}

function Premus_DropDownCheckBox_DownBox_OnClick(Name) {
	var Div = document.getElementById("div" + Name + "_Items");
	if ( Div.style.visibility == "hidden" ) {
		Div.style.visibility = "inherit";
		//Div.zorder = 0;
	}
	else {
		Div.style.visibility = "hidden";
	}
}
function Premus_DropDownCheckBox_Refresh(Name) {
	var Chk;
	var i;
	var Text = "";
	var Value = "";
	for ( i = 1; Chk = document.getElementById("chk" + Name + "_" + i); i++ ) {
		if ( Chk.checked ) {
			if ( Text != "" ) Text += "; "; Text += Chk.pText;
			if ( Value != "" ) Value += "|"; Value += Chk.pValue;
		}
	}
	document.getElementById(Name + "_Text").value = Text;
	document.getElementById(Name).value = Value;
}


function Premus_TextBox_DownBox_OnClick(Name) {
	var Div = document.getElementById("div" + Name + "_Items");
	if ( Div.style.visibility == "hidden" ) {
		Div.style.visibility = "inherit";
		//Div.zorder = 0;
	}
	else {
		Div.style.visibility = "hidden";
	}
}

