/************************************************************************/
function SelectOption()
{
	var parametersString = self.location.search.replace(/^\?/,'');
	var parametersArray = new Array();
	if(parametersString != "") { parametersArray = parametersString.split("&"); }
	var parameter;
	var foundIndex;

	for(var i = 0; i < arguments.length; i += 2)
	{
		foundIndex = -1;
		parameter = arguments[i] + "=" + arguments[i + 1];
		for(j = 0; j < parametersArray.length; j++)
		{
			parameterSplit = parametersArray[j].split("=");
			if(arguments[i] == parameterSplit[0])
			{
				foundIndex = j;
				break;
			}
		}
		foundIndex == -1 ? parametersArray.push(parameter) : parametersArray[foundIndex] = parameter;
	}

	parametersString = parametersArray.join("&");
	self.location.search = "?" + parametersString;
}

/************************************************************************/
function GetUrlParam(param)
{
	param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]" + param + "=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if(results == null) { return ""; }
	else { return results[1]; }
}

/************************************************************************/
function RefreshElement(elementId, filename)
{
	var path = globalModuleName + "/ajax/" + filename;
	var parameters = "";
	var parametersArray = new Array();
	var index = 0;

	for(var i = 2; i < arguments.length; i += 2)
	{
		parametersArray[index++] = arguments[i] + "=" + arguments[i + 1];
	}

	parameters = parametersArray.join("&");
	AjaxRequest(elementId,path,parameters);
}

/************************************************************************/
function RoundNumber(number, decimals)
{
	var result = Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals);
	return (isNaN(result) || !isFinite(result) ? "" : result);
}

/************************************************************************/
function UpdateValue(elementId, instruction)
{
	document.getElementById(elementId).value = String(eval(instruction)).replace(/\./,',');
}

/************************************************************************/
function Calculate(elementId, decimals)
{
	var expression = "";
	
	for(var i = 2; i < arguments.length; i++)
	{
		if(i % 2 == 0) { expression = expression + arguments[i]; }
		else
		{
			var value = document.getElementById(arguments[i]).value.replace(/,/,'.');
			expression = expression + (value == "" || isNaN(value) ? '0' : value);
		}
	}

	document.getElementById(elementId).value = String(RoundNumber(eval(expression),decimals)).replace(/\./,',');
}

/************************************************************************/
function EnableElementOnValue(elementId, enableValue, currentValue)
{
	if(enableValue == currentValue) { document.getElementById(elementId).disabled = false; }
	else { document.getElementById(elementId).disabled = true; }
}

/************************************************************************/
function SplitCode(check, elementId, part1Id, part2Id)
{
	var code = document.getElementById(elementId).value;
	
	if(!check)
	{
		var part1 = code;
		var part2 = "";
	}
	if(check)
	{
		var splitChars = code.match(/[^0-9|^a-z|^A-Z]/g);
		if(splitChars)
		{
			var splitChar = splitChars[splitChars.length - 1];
			var splitPoint = code.lastIndexOf(splitChar);
			var part1 = code.substring(0, splitPoint);
			var part2 = code.substring(splitPoint + 1);
		}
		else
		{
			var part1 = code;
			var part2 = "";
		}
	}
	
	document.getElementById(part1Id).value = part1;
	document.getElementById(part2Id).value = part2;
}

/************************************************************************/
function SetQueryResult()
{
	var query = "";

	for(var i = 0; i < arguments.length; i++)
	{
		if(i % 2 == 0) { query = query + arguments[i]; }
		else
		{
			if(arguments[i].indexOf("{s}") == 0) { arguments[i] = arguments[i].replace("{s}",""); stringArg = true; }
			else { stringArg = false; }
			var value = document.getElementById(arguments[i]).value.replace(/,/,'.');
			query = query + (value == "" || isNaN(value) || stringArg ? "'" + value.replace(/^\s+|\s+$/g, "") + "'" : value);
		}
	}

	AjaxQuery(query.replace(/\+/g,'%2B'));
}

/************************************************************************/
function SetMultiQueryResult()
{
	var index = -1;
	
	while(true)
	{
		var queryParts = new Array();
		var query = "";
		for(var i = 0; i < arguments.length; i++)
		{
			indexId = "";
			
			if(i % 2 == 0) { queryParts[i] = arguments[i].replace("%index%",String(index)); }
			else
			{
				if(arguments[i].indexOf("{s}") == 0) { indexId = arguments[i].replace("{s}",""); stringArg = true; }
				else { stringArg = false; }
				
				if(indexId.indexOf("%index%") > 0)
				{
					indexId = indexId.replace("%index%",String(index));
				}

				if(document.getElementById(indexId) == null) { return(0); }
				var value = document.getElementById(indexId).value.replace(/,/,'.');
				queryParts[i] = (value == "" || isNaN(value) || stringArg ? "'" + value + "'" : value);
			}
		}
		index = index - 1;
		query = queryParts.join("");
		AjaxQuery(query.replace(/\+/g,'%2B'));
	}
}

/************************************************************************/
function GetMousePosition(e)
{
	var cursor = { posX:0, posY:0 };
	var IE = document.all ? true : false;
	
	if(IE) // Per Internet Explorer
	{
		cursor.posX = event.screenX;
		cursor.posY = event.screenY;
	}
	else
	{
		cursor.posX = e.screenX;
		cursor.posY = e.screenY;
	}
	
	return cursor;
} 

/************************************************************************/
function OpenWindow(wName, wWidth, wHeight, wTop, wLeft, wParameters, path, urlParameters)
{
	var startingPath = "popup.php";
	var url = startingPath + "?path=" + path + "&title=" + wName + "&uid=" + new Date().getTime();
	if(urlParameters != "") { url = url + "&" + urlParameters; }
	var parameters = "width=" + wWidth + ",height=" + wHeight;
	if(wTop != "") { parameters = parameters + ",top=" + wTop; }
	if(wLeft != "") { parameters = parameters + ",left=" + wLeft; }
	if(wParameters != "") { parameters = parameters + "," + wParameters; }

	window.open(url,wName.replace(/[^a-z]/g,'_'),parameters);
}

/************************************************************************/
function ShowHelp(argumentId, title)
{
	var screenWidth = screen.width;
	var screenHeight = screen.height;
	var calWidth = 500;
	var calHeight = 400;
	var calX = (screenWidth - calWidth) / 2;
	var calY = (screenHeight - calHeight) / 2;
	var parameters = "toolbar=no,location=no,status=no,menubar=no,resizable=yes";
	var path = "popup/help_" + argumentId + ".php";
	var urlParameters = "";
	
	OpenWindow("Help - " + title, calWidth, calHeight, calY, calX, parameters, path, urlParameters);
}

/************************************************************************/
function ShowCalendar(e, elementId, type)
{
	var calPos = GetMousePosition(e);
	var parameters = "toolbar=no,location=no,status=no,menubar=no,resizable=no";
	var calWidth = 250;
	var calHeight = 250;
	var calX = calPos.posX;
	var calY = calPos.posY - (calHeight / 2);
	type = type || "mese";
	var path = "popup/calendario_" + type + ".php";
	var urlParameters = "id=" + elementId;
	var currentDate = document.getElementById(elementId).value;
	if(/^..\/..\/....$/.test(currentDate))
	{
		urlParameters = urlParameters + "&mese=" + currentDate.substring(3,5) + "&anno=" + currentDate.substring(6,10);
	}
	
	OpenWindow("Calendario", calWidth, calHeight, calY, calX, parameters, path, urlParameters);
}

/************************************************************************/
function CaptchaRefresh(elementId)
{
	var url = "captcha.php";
	
	GetHtml(elementId, url, "GET");
}

/************************************************************************/
function CloneElement(parentId, posIndex)
{
	var parentElement = document.getElementById(parentId);
	var numChilds = parentElement.childNodes.length;
	if(posIndex < 0) { posIndex = numChilds + posIndex; }
	var nodeElement = parentElement.childNodes[posIndex];
	var clone = nodeElement.cloneNode(true);
	
	ResetInputAttributes(clone);
	
	parentElement.insertBefore(clone,nodeElement);
}

/************************************************************************/
function ResetInputAttributes(node)
{
	if(node.hasChildNodes())
	{
		var limit = node.childNodes.length;

		for(var i = 0; i < limit; i++)
		{
			var child = node.childNodes[i];
			if(!child.tagName) { continue; }
			var tag = child.tagName.toUpperCase();

			if(tag == "INPUT" || tag == "SELECT" || tag == "TEXTAREA")
			{
				var elementName = child.getAttribute("name");
				var elementId = child.getAttribute("id");
				var originalElement = null;
				if(elementId) { originalElement = document.getElementById(elementId); }
				var oldIndex = elementName.split("[").pop().replace(/\]$/,'');
				var newIndex = parseInt(oldIndex) < 0 ? parseInt(oldIndex) - 1 : -1;
				var namePattern = "[" + oldIndex + "]";
				var idPattern = new RegExp("_" + oldIndex + "_","g");
				
				if(child.className == "keep-value")
				{
					switch(tag)
					{
						case "SELECT" :
							child.selectedIndex = originalElement.selectedIndex;
							break;
						default :
							break;
					}
				} // END if(child.className == "keep-value")
				else // if(child.className != "keep-value")
				{
					switch(tag)
					{
						case "TEXTAREA" :
							if(child.hasChildNodes()) { child.removeChild(child.childNodes[0]); }
							break;
						/*
						case "SELECT" :
							if(child.hasChildNodes())
							{
								var numOptions = child.childNodes.length;
								for(var j = 0; j < numOptions; j++) { child.childNodes[j].removeAttribute("selected"); }
							}
							break;
						*/
						case "INPUT" :
							var inputType = child.getAttribute("type").toUpperCase();
							if(inputType == "TEXT" || inputType == "PASSWORD") { child.value = ""; }
							else if(inputType == "CHECKBOX" || inputType == "RADIO") { child.checked = false; }
							break;
						default :
							break;
					}
				} // END else if(child.className != "keep-value")
						
				child.setAttribute("name", elementName.replace(namePattern, "[" + newIndex + "]"));

				if(elementId) { child.setAttribute("id", elementId.replace(idPattern, "_" + newIndex + "_")); }

				if(originalElement)
				{
					var onAttributes = ["onchange","onfocus","onblur","onclick","onkeyup","onkeydown"];
					for(var j = 0; j < 6; j++)
					{
						if(originalElement.getAttribute(onAttributes[j]))
						{
							var elementOnAttribute = originalElement.getAttribute(onAttributes[j]);
							if(typeof(elementOnAttribute) == "function")
							{
								elementOnAttribute = elementOnAttribute.toString().replace(idPattern, "_" + newIndex + "_");
								eval("child.setAttribute('" + onAttributes[j] + "'," + elementOnAttribute + ")");
							}
							else
							{
								elementOnAttribute = elementOnAttribute.replace(idPattern, "_" + newIndex + "_");
								child.setAttribute(onAttributes[j],elementOnAttribute);
							}
						} // END if(originalElement.getAttribute(onAttributes[i]))
					} // END for(var i = 0; i < 6; i++)
				} // END if(originalElement)
			} // END if(tag == "INPUT" || tag == "SELECT" || tag == "TEXTAREA")
			else if(tag == "LABEL")
			{
				if(child.getAttribute("htmlFor")) { var forAttr = "htmlFor"; }
				else { var forAttr = "for"; }
				var elementId = child.getAttribute(forAttr);
				if(elementId)
				{
					elementId = elementId.replace(/_$/,'');
					var idParts = elementId.split("_");
					var idIndex = idParts.pop();
					idIndex = parseInt(idIndex) < 0 ? parseInt(idIndex) - 1 : -1;
					child.setAttribute(forAttr, idParts.join("_") + "_" + idIndex + "_");
				}
			} // END else if(tag == "LABEL")
			else if(tag == "SPAN" && child.className == "clone-number")
			{
				child.childNodes[0].nodeValue = parseInt(child.childNodes[0].nodeValue) + 1;
			}
			else
			{
				if(tag == "SPAN" && child.className == "MITFormField_AjaxSpan")
				{
					var elementId = child.getAttribute("id");
					if(elementId)
					{
						elementId = elementId.replace(/_$/,'');
						var idParts = elementId.split("_");
						var idIndex = idParts.pop();
						idIndex = parseInt(idIndex) < 0 ? parseInt(idIndex) - 1 : -1;
						child.setAttribute("id", idParts.join("_") + "_" + idIndex + "_");
					}
				}
				
				ResetInputAttributes(child);
			}
		}
	}
}

/************************************************************************/
function FocusFirstFormField()
{
	forms = new Array();
	
	forms = document.getElementsByTagName("form");
	if(forms.length == 0) { return false; }
	var num_elements = forms[0].elements.length;
	var elem;
	var tag;
	var inputType;
	
	for(i = 0; i < num_elements; i++)
	{
		elem = forms[0].elements[i];
		if(elem.className.indexOf("readonly") >= 0) { continue; }
		tag = elem.tagName.toUpperCase();
		switch(tag)
		{
			case "INPUT" :
				inputType = elem.getAttribute("type").toUpperCase();
				if(inputType != "TEXT" && inputType != "SUBMIT") { break; }
			case "SELECT" :
			case "TEXTAREA" :
				forms[0].elements[i].focus();
				return true;
			default : break;
		}
	}
}

/************************************************************************/
function ShowElement(elementId)
{
	document.getElementById(elementId).style.display = "block";
}

/************************************************************************/
function HideElement(elementId)
{
	document.getElementById(elementId).style.display = "none";
}

