//if not IE, do nothing
if (document.all)
{
	//Copy the default setInterval behavior
	var nativeSetInterval = window.setInterval;
	window.setInterval = function(fn,ms)
	{
		var params = [];
		if(arguments.length <= 2)
			return nativeSetInterval(fn,ms);
		else
		{
			for(var i=2; i < arguments.length; i++)
				params.push( arguments[i] );
		}
		
		if (typeof(fn) == 'function')
		{
			return (function(fn,ms,params)
			{
				var fo = function()
				{
					fn.apply(window, params);
				}
				
				return nativeSetInterval(fo,ms);
			})(fn,ms,params);
		}
		else if (typeof(fn) == 'string')
			return nativeSetInterval(fn,ms);
		else
			alert("setInterval Error\nInvalid function type");
	}
}

function GetLastElementId(tagname, element)
{
	var elements = element.getElementsByTagName(tagname);
	
	var last_id = 0;
	for (var i = 0; i < elements.length; i++)
	{
		var id = parseInt(elements[i].id);
		if (id > last_id)
			last_id = id;
	}
	
	var count = last_id+1;
	return count.toString();
}

function ltrim( value )
{
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
}
function rtrim( value )
{
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
}
function trim( value )
{
	return ltrim(rtrim(value));
}

function is_numeric(value)
{
	if (value.indexOf("//") != -1)
		 return false;
	
	var re = new RegExp("^[0-9-/.,]*$", "g");
	return re.test(value);
}
function is_cod_fiscale(value)
{
	var re = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/;
	return re.test( trim( value.toUpperCase() ) );
}
function is_email(value)
{
	var re = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
	return re.test( trim(value) );
}
function is_date(value)
{
	var numbers = value.split("/");
	if (numbers.length == 3)
	{
		return (
			   numbers[0] > 0 && numbers[0] <= 31
			&& numbers[1] > 0 && numbers[1] <= 12
			&& numbers[2] > 1900 && numbers[2] <= 3000
		);
	}
	
	numbers = value.split("-");
	if (numbers.length == 3)
	{
		return (
				 numbers[0] > 0 && numbers[0] <= 31
			&& numbers[1] > 0 && numbers[1] <= 12
			&& numbers[2] > 1900 && numbers[2] <= 3000 
		);
	}
	
	return false;
}

function GetXmlHttpRequest()
{
	var xmlhttp = null;
	try {
		xmlhttp = new XMLHttpRequest();
	}
	catch(E)
	{
		try {
			xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
		}
		catch(E) {
			alert("Errore javascript: "+E.message);
		}
	}
	
	return xmlhttp;
}

function OnDeleteSelected(link)
{
	try
	{
		var parent = link.parentNode;
		while(true)
		{
			if (parent.tagName && parent.tagName.toLowerCase() == "table")
				break;
			else
				parent = parent.parentNode;
		}
		
		var table = parent.previousSibling.tagName ? 
			parent.previousSibling : parent.previousSibling.previousSibling;
		
		var checked = false;
		for (var i = 1; i<table.rows.length; i++)
		{
			var checkbox_cell = table.rows[i].cells[0];
			var checkbox_id = checkbox_cell.firstChild;
			
			if (checkbox_id.checked)
			{
				checked = true;
				break;
			}
		}
		
		if (checked)
			return confirm("Sei sicuro di voler eliminare i record selezionati?");
		else
		{
			alert("Errore, nessun record selezionato. Seleziona uno o pił elementi da eliminare.");
			return false;
		}
	}
	catch(E)
	{
		alert(E.message);
		return false;
	}
}
function CheckUncheckAll(checkbox_all)
{
	var table = checkbox_all.parentNode.parentNode.parentNode;
	var is_checked = checkbox_all.checked;
	
	for (var i = 1; i<table.rows.length; i++)
	{
		var checkbox_cell = table.rows[i].cells[0];
		var checkbox_id = checkbox_cell.firstChild;
		
		checkbox_id.checked = is_checked;
	}
}
function CheckUncheckCheckboxAll(checkbox)
{
	var table = checkbox.parentNode.parentNode.parentNode;
	
	var all_checked = true;
	for (var i = 1; i<table.rows.length; i++)
	{
		var checkbox_id = table.rows[i].cells[0].firstChild;
		if (checkbox_id.checked != true)
			all_checked = false;
	}
	
	var checkbox_all = table.rows[0].cells[0].firstChild;
	if (all_checked)
		checkbox_all.checked = true;
	else
		checkbox_all.checked = false;
}

function CheckTextareaInputLength(textarea, len)
{
	var maxCharsInput = document.getElementById('max_chars');
	
	if(textarea.value.length > len)
	{
		alert("E' possibile inserire solo un max di " + len + " caratteri nella nota");
		textarea.value = textarea.value.substr(0,len);
		maxCharsInput.value = textarea.value.length;
		return false;
	}
	
	maxCharsInput.value = textarea.value.length;
	return true;
}

function unhighlight(element)
{
	if ( (document.all && element.tagName && element.tagName.toLowerCase() == "select")
	|| (element.type && element.type == "checkbox") )
	{
		var cell = element.parentNode;
		cell.style.border = "";
	}
	else
	{
		element.style.borderWidth = "";
		element.style.borderStyle = "";
		element.style.borderColor = "";
	}
}
function unhighlight_all(form)
{
	for (var i = 0; i<form.length; i++)
	  unhighlight(form[i]);
}
function highlight(element)
{
	if ( (document.all && element.tagName && element.tagName.toLowerCase() == "select")
	|| (element.type && element.type == "checkbox") )
	{
		var cell = element.parentNode;
		cell.style.border = "2px solid red";
	}
	else
	{
		element.style.borderWidth = "2px";
		element.style.borderStyle = "solid";
		element.style.borderColor = "red";
	}
}
function in_array(needle, haystack)
{
	for (key in haystack)
	{
		if (haystack[key] == needle)
			return true;
	}
	
	return false;
}

function CheckRequiredFields(form, required_fields, integer_fields, date_fields)
{
	try
	{
		var error = false;
		for (var i = 0; i<form.length; i++)
		{
			if (form[i].id == "")
				continue;
			
			//Check numeric fields
			if (integer_fields)
			{
				if (form[i].value != "")
				{
					if (in_array(form[i].id, integer_fields))
					{
						if (!is_numeric(form[i].value) )
						{
							error = true;
							highlight(form[i]);
						}
					}
				}
			}
			//Check date fields
			if (date_fields)
			{
				if (form[i].value != "")
				{
					if (in_array(form[i].id, date_fields))
					{
						if (!is_date(form[i].value) )
						{
							error = true;
							highlight(form[i]);
						}
					}
				}
			}
			
			if (!in_array(form[i].id, required_fields))
				continue;
			
			switch(form[i].tagName.toLowerCase())
			{
				case "textarea":
				{
					if (trim(form[i].value) == "")
					{
						error = true;
						highlight(form[i]);
					}
				}
				break;
				
				case "input":
				{
					switch(form[i].type.toLowerCase())
					{
						case "file":
						case "text":
						case "password":
						{
							if (trim(form[i].value) == "")
							{
								error = true;
								highlight(form[i]);
							}
						}
						break;
						
						case "checkbox":
						{
							if (form[i].checked == false)
							{
								error = true;
								highlight(form[i]);
							}
						}
						break;
					}
				}
				break;
				
				case "select":
				{
					if (form[i].selectedIndex == 0)
					{
						error = true;
						highlight(form[i]);
					}
				}
				break;
			}
		}
	}
	catch(E)
	{
		alert(E.message)
		return true;
	}
  
  return error;
}

function CheckSearchFields(form_id)
{
	try
	{
		var form = document.getElementById(form_id);
		
		var filled_fields = 0;
		for (var i = 0; i<form.length; i++)
		{
			if (document.all)
			{
				//Explorer
				if (form[i].getAttribute("readonly") == true || form[i].disabled == true || form[i].style.display == "none")
					continue;
			}
			else
			{
				//I browser decenti
				if (form[i].getAttribute("readonly") != null || form[i].getAttribute("disabled") != null || form[i].style.display == "none")
					continue;
			}
			
			switch(form[i].tagName.toLowerCase())
			{
				case "input":
				{
					switch(form[i].type.toLowerCase())
					{
						case "file":
						case "password":
						case "text":
						{
							if (trim(form[i].value) != "")
								filled_fields++;
						}
						break;
						
						case "radio":
						case "checkbox":
						{
							if (form[i].checked)
								filled_fields++;
						}
						break;
					}
				}
				break;
				
				case "textarea":
				{
					if (trim(form[i].value) != "")
						filled_fields++;
				}
				break;
				
				case "select":
				{
					var select = form[i];
					if (select.multiple)
					{
						for (var o = 0; o<select.options.length; o++)
						{
							if (select.options[o].selected)
							{
								is_filled = true;
								filled_fields++;
								break;
							}
						}
					}
					else
					{
						if (select.selectedIndex != 0)
						{
							is_filled = true;
							filled_fields++;
						}
					}
				}
				break;
			}
		}
		
		if(filled_fields)
			return true;
		
		scroll(0,0);
		document.getElementById("error").innerHTML = "Almeno un campo deve contenere i dati per la ricerca";
		return false;
	}
	catch(E)
	{
		alert(E.message);
		return false;
	}
}