// IMPORTANTE: FILE CODIFICATO E SALVATO IN UTF-8
/////////////////////////////////////////////////////////////////////////////
// BROWSER CHECKING FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
function bN_isIE()
{
	return navigator.appName.indexOf("Microsoft") != -1;
}
function bN_isOpera()
{
	return window.opera || navigator.userAgent.toLowerCase().indexOf('opera') + 1;
}
function bN_isSafari()
{
	return navigator.userAgent.toLowerCase().indexOf('safari') + 1;
}

/////////////////////////////////////////////////////////////////////////////
// GENERAL FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
//
// String functions...
function Trim() {
	return this.replace(/\s+$|^\s+/g,"");
}

function LTrim() {
	return this.replace(/^\s+/,"");
}

function RTrim() {
	return this.replace(/\s+$/,"");
}

String.prototype.Trim=Trim;
String.prototype.RTrim=RTrim;
String.prototype.LTrim=LTrim;

function bN_LineBreak2Text(cTxt)
{
	cTxt = cTxt.split("<br>").join("\n");
	cTxt = cTxt.split("<BR>").join("\n");
	cTxt = cTxt.split("<BR />").join("\n");
	cTxt = cTxt.split("<br />").join("\n");
	
	return cTxt;
}

function bN_DecodeHTML(cTxt, flagOutput)
{
//	cTxt = cTxt.replace(eval('/&/g'), '&amp;');

	var fromTo = new Array('&AElig;','Æ','&Aacute;','Á','&Acirc;','Â','&Agrave;','À','&Aring;','Å','&Atilde;','Ã','&Auml;','Ä','&Ccedil;','Ç','&ETH;','Ð','&Eacute;','É','&Ecirc;','Ê','&Egrave;','È','&Euml;','Ë','&Iacute;','Í','&Icirc;','Î','&Igrave;','Ì','&Iuml;','Ï','&Ntilde;','Ñ','&Oacute;','Ó','&Ocirc;','Ô','&Ograve;','Ò','&Otilde;','Õ','&Ouml;','Ö','&Oslash;','Ø','&THORN;','Þ','&Uacute;','Ú','&Ucirc;','Û','&Ugrave;','Ù','&Uuml;','Ü','&Yacute;','Ý','&aacute;','á','&acirc;','â','&agrave;','à','&aring;','å','&atilde;','ã','&auml;','ä','&aelig;','æ','&brvbar;','¦','&ccedil;','ç','&cent;','¢','&copy;','©','&deg;','°','&eacute;','é','&ecirc;','ê','&egrave;','è','&eth;','ð','&euml;','ë','&frac12;','½','&frac14;','¼','&frac34;','¾','&gt;','>','&gt;','>','&iacute;','í','&icirc;','î','&iexcl;','¡','&igrave;','ì','&iquest;','¿','&iuml;','ï','&laquo;','«','&lt;','<','&lt;','<','&mdash;','—','&micro;','µ','&middot;','·','&ndash;','–','&not;','¬','&ntilde;','ñ','&oacute;','ó','&ocirc;','ô','&ograve;','ò','&oslash;','ø','&otilde;','õ','&ouml;','ö','&para;','¶','&plusmn;','±','&pound;','£','&quot;','\"','&raquo;','»','&reg;','®','&sect;','§','&shy;','*','&sup1;','¹','&sup2;','²','&sup3;','³','&szlig;','ß','&thorn;','þ','&tilde;','˜','&trade;','™','&uacute;','ú','&ucirc;','û','&ugrave;','ù','&uuml;','ü','&yacute;','ý','&yen;','¥','&yuml;','ÿ');

	if(flagOutput)
	{
		fromTo[fromTo.length] = '&amp;';
		fromTo[fromTo.length] = '&';
	}

	for(i=0; i < fromTo.length; i=i+2)
	{
		cTxt = cTxt.split(fromTo[i]).join(fromTo[i+1]);
	}

	return cTxt;
}

//
// v4.01
function bN_findObj(n, d)
{
	var p,i,x;
	
	if(!d) d=document;
	if((p=n.indexOf("?")) > 0 && parent.frames.length)
	{
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if(!(x=d[n])&&d.all) x=d.all[n];
	for(i=0; !x && i<d.forms.length; i++) x=d.forms[i][n];
	for(i=0; !x && d.layers && i<d.layers.length; i++) x=bN_findObj(n, d.layers[i].document);
	if(!x && d.getElementById) x=d.getElementById(n);
	
	return x;
}

function bN_findObjNum(cObj, nNum)
{
	var obj = bN_findObj(cObj);
	if(!obj) return null;
	// if i've found multiple objects with this name...
	if(obj.type == undefined)
	{
		if(typeof(nNum) == "number")
		{
			if(nNum < obj.length) return obj[nNum];
			else if(nNum < 0) return obj.length;
			else return null;
		}
	}

	return obj;
}

function bN_swapImage() { //v3.0
  var i,j=0,x,a=bN_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=bN_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function bN_swapImageEn() { //v3.0
	var i, j=0, x, a=bN_swapImageEn.arguments;

	document.MM_sr=new Array;
	for(i=0;i<(a.length-2);i+=3)
	{
		if((x=bN_findObj(a[i]))!=null)
		{
			document.MM_sr[j++] = x;
			if(!x.oSrc) x.oSrc = x.src;
			var n = x.src.lastIndexOf(".");
			x.src = x.src.substr(0, n) + a[i+2] + x.src.substr(n);
		}
	}
}

function bN_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function bN_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=bN_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function bN_showHideLayers() { //v6.0
  var i,p,v,obj,args=bN_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=bN_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function bN_openBrWindow(theURL,winName,features, flagNoReturn) { //v3.0
	var objWin;
//	setTimeout("window.open('" + theURL + "','"+winName+"','"+features+"')", 0);
	objWin = window.open(theURL, winName, features);
	if(!objWin)
	{
		alert("ATTENTION...\n\nYour browser is blocking popups!\nPlease, to give us rights for this website to open popup windows or you could not be able to use many parts of it.");
		return null;
	}
	
	if(!flagNoReturn)
		return objWin;
}

function bN_goToURL() { //v3.0
	var a = bN_goToURL.arguments;
	var obj, cUrl;
	
	if(typeof(a[0]) == "string")
	{
		if(a[0] != "window")
			obj = bN_findObj(a[0]);
		else
			obj = window;
	}
	else obj = a[0];

	cUrl = a[1];

	if(typeof(obj.src) == "string") {
		if(cUrl.length == 0)
		{
			if(obj.Document)
				cUrl = obj.Document.location;
			else {
				if(obj.document) cUrl = obj.document.location;
				else cUrl = obj.contentDocument.location;
			}
		}
		obj.src = cUrl;
	}
	else {
		if(cUrl.length == 0)
			obj.document.reload();
		else
			obj.location.href = cUrl;
	}
}


function bN_GetFrameLocation(frameName)
{
	var obj;

	if(frameName != "window")
		obj = bN_findObj(frameName);
	else
		obj = window;
	
	if(obj.Document && bN_isIE())
	{
		return obj.Document.location;
	}
	else {
		if(obj.document) return obj.document.location;
		else return obj.contentDocument.location;
	}
	
	return "";
}

function bN_setDisplay(objName, theValue) {
	var obj;
	if(typeof(objName) != "object")
		obj = bN_findObj(objName);
	else obj = objName;

	if(!obj) return;
	if(obj.style) obj.style.display = theValue;
	else {
		for(var i=0;obj[i];i++)
			if(obj[i].style)
			{
				obj[i].style.display = theValue;
				break;
			}
	}
}

function bN_verifyObject(obj) {
	if(obj.style) return obj;
	for(var i=0;obj[i];i++)
		if(obj[i].style)
			return obj[i];
}

function bN_changeProp(objName,x,theProp,theValue) { //v6.0
	var c, obj;
	
	if(typeof(objName) != "object")
		obj = bN_findObj(objName);
	else obj = objName;

	if(obj && (theProp.indexOf("style.")==-1 || obj.style))
	{
		if(typeof(theValue) == "boolean")
		{
			eval("obj."+theProp+"="+theValue);
		}
		else {
			c = theProp.substr(theProp.indexOf(".") + 1);
			
			//
			if(c.toUpperCase() == "COLOR" && theValue != gbl_LINKOldColor)
				gbl_LINKOldColor = eval("obj."+theProp);
			
			eval("obj."+theProp+"='"+theValue+"'");
		}
	}
}

function bN_GetAttribute(objName, cAttribute)
{
	var obj;

	if(typeof(objName) != "object")
		obj = bN_findObj(objName);
	else obj = objName;
	
	if(obj.getAttribute)
		return obj.getAttribute(cAttribute);
	else
		return eval("obj."+cAttribute);
}

function bN_SetAttribute(objName, cAttribute, xNewValue)
{
	var obj;

	if(typeof(objName) != "object")
		obj = bN_findObj(objName);
	else obj = objName;
	
	if(obj.setAttribute)
		return obj.setAttribute(cAttribute, xNewValue);
	else
		return eval("obj."+cAttribute+"='"+xNewValue+"'");
}

function bN_testFormObj(objName,testValue)
{
	var obj = bN_findObj(objName);
	
	if(obj)
	{
		if(testValue && testValue != "undefined")
			if(obj.value.Trim() == testValue) return true;
		
		if(obj.type == "select-one")
		{
			if(obj.value.Trim() == "")
				return obj.options[obj.selectedIndex].text;
		}
		
		if(obj.type == "checkbox")
			return obj.checked;

		if(obj.length && obj.length > 0)
		{
			for(var i=0; i<obj.length; i++) if(obj[i].checked) return obj[i].value;
			return false;
		}

		return obj.value.Trim();
	}
	
	return "";
}

function bN_setFieldValue(objName, cValue)
{
	var obj = bN_findObj(objName);
	if(!obj) return;

	switch(obj.type)
	{
		case "select-one":
			for(var i=0; i<obj.options.length; i++)
				if(obj.options[i].value == cValue)
				{
					obj.selectedIndex = i;
					break;
				}
			break;
	}
}

function bN_getSelectedItem(objName)
{
	var obj;
	
	if(typeof(objName) != "object")
		obj = bN_findObj(objName);
	else obj = objName;
	
	if(!obj) return null;
	for(var i=0; i<obj.length; i++)
	{
		if(obj[i].checked)
		{
			return obj[i];
			break;
		}
	}
	
	return null;
}

function bN_testEmailAddress(email)
{
	var cEmail, nFirstAt, nLastAt, nLastPunto;

	cEmail = email.Trim();

	nFirstAt   = cEmail.indexOf("@");
	nLastAt    = cEmail.lastIndexOf("@");
	nLastPunto = cEmail.lastIndexOf(".");
	
	if(nFirstAt < 3 || nFirstAt != nLastAt || nFirstAt <= 0 || nFirstAt > nLastPunto || (cEmail.length - nFirstAt) < 3 || (nLastPunto - nFirstAt) < 3 || (cEmail.length - nLastPunto) < 2)
		return false;
	
	return true;
}

function bN_isNumber(xVal)
{
	var val = xVal.toString();
	
	if(!isNaN(parseInt(val)) && parseInt(val).toString() == val && parseInt(val).toString().length == val.length)
	{
		return true;
	}

	return false;
}

/////////////////////////////////////////////////////////////////////////////
// FLASH FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
//
function bN_FlashCallEIFunction(objName, funcName, cParams)
{
	var IE = bN_isIE() || bN_isOpera() || bN_isSafari();
	var obj;

	if(typeof(objName) != "object")
		obj=bN_findObj(objName);
	else {
		obj = objName;
	}

	if(IE ? obj.PercentLoaded() < 100 : obj[1].PercentLoaded() < 100) {
		setTimeout("bN_FlashCallEIFunction('" + objName + "', '" + funcName + "', '" + cParams + "')", 1000);
		return;
	}

	if(IE)
	{
		if(typeof(cParams) != 'string')
			eval("obj." + funcName + "()");
		else
			eval("obj." + funcName + "(" + cParams + ")");
	}
	else {
		if(typeof(cParams) != 'string')
			eval("obj[1]." + funcName + "()");
		else
			eval("obj[1]." + funcName + "(" + cParams + ")");
	}
}

//
function bN_FlashIsLoaded(objName)
{
	var IE = bN_isIE() || bN_isOpera() || bN_isSafari();
	var obj;
	
	if(typeof(objName) != "object")
		obj=bN_findObj(objName);
	else {
		obj = objName;
	}
	
	if(IE ? obj.PercentLoaded() < 100 : obj[1].PercentLoaded() < 100)
		return false;
	
	return true;
}

//
//
function bN_FlashGotoLabel(objName, levelName, label)
{
	var IE = bN_isIE() || bN_isOpera() || bN_isSafari();
	var obj;
	
	if(typeof(objName) != "object")
		obj=bN_findObj(objName);
	else {
		obj = objName;
	}
	
	if(IE ? obj.PercentLoaded() < 100 : obj[1].PercentLoaded() < 100) {
		setTimeout("bN_FlashGotoLabel('" + objName + "', '" + levelName + "', '" + label + "')", 1000);
		return;
	}

	if(IE) obj.TGotoLabel(levelName,label);
	else obj[1].TGotoLabel(levelName,label);
}

//
//
function bN_FlashCallLabel(objName, levelName, label)
{
	var IE = bN_isIE() || bN_isOpera() || bN_isSafari();
	var obj;
	
	if(typeof(objName) != "object")
		obj=bN_findObj(objName);
	else {
		obj = objName;
	}
	
	if(IE ? obj.PercentLoaded() < 100 : obj[1].PercentLoaded() < 100) {
		setTimeout("bN_FlashGotoLabel('" + objName + "', '" + levelName + "', '" + label + "')", 1000);
		return;
	}

	if(IE) obj.TCallLabel(levelName,label);
	else obj[1].TCallLabel(levelName,label);
}

//
//
function bN_FlashSetVariable(objName, levelName, label)
{
	var IE  = bN_isIE() || bN_isOpera() || bN_isSafari();
	var obj;

	if(typeof(objName) != "object")
		obj=bN_findObj(objName);
	else {
		obj = objName;
	}

	if(IE ? obj.PercentLoaded() < 100 : obj[1].PercentLoaded() < 100) {
		setTimeout("bN_FlashSetVariable('" + objName + "', '" + levelName + "', '" + label + "')", 1000);
		return;
	}

	if(IE) obj.SetVariable(levelName,label);
	else obj[1].SetVariable(levelName,label);
}


/////////////////////////////////////////////////////////////////////////////
// HIGHLIGHT FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
//
// How to use:
// <form onKeyUp="bN_HLhighlight(event);" onClick="bN_HLhighlight(event);">
//
var bN_HLhighlightColor = "rgb(255, 204, 204)";
var bN_HLprevious = '';
var bN_HLeventObj;

//Regular expression to highlight only form elements
var bN_HLintended = /INPUT|TEXTAREA|SELECT|OPTION/;

// Function to check whether element clicked is form element
function bN_HLcheckElem(which)
{
	var ns6 = document.getElementById && !document.all;
	
	if(which.style && bN_HLintended.test(which.tagName))
	{
		if(ns6 && bN_HLeventObj.nodeType==3)
			bN_HLeventObj = bN_HLeventObj.parentNode.parentNode;
		return true;
	}

	return false;
}

// Function to highlight form element
// Use this function as an OnFocus event...
function bN_HLhighlight(e)
{
	var ns6 = document.getElementById && !document.all;

	bN_HLeventObj = ns6 ? e.target : event.srcElement;
	if(bN_HLprevious != '')
	{
		if(bN_HLcheckElem(bN_HLprevious))
			bN_HLprevious.style.backgroundColor = '';
			
		bN_HLprevious = bN_HLeventObj;
		
		if(bN_HLcheckElem(bN_HLeventObj))
			bN_HLeventObj.style.backgroundColor = bN_HLhighlightColor;
	}
	else {
		if(bN_HLcheckElem(bN_HLeventObj))
			bN_HLeventObj.style.backgroundColor = bN_HLhighlightColor;
		bN_HLprevious = bN_HLeventObj;
	}
}

// Highlight an arbitrary field...
function bN_HLhighlightField(fieldObj)
{
	if(!fieldObj) return;
	
	bN_HLeventObj = fieldObj;
	
	var nObjs, n=0;
	if(fieldObj[0] != undefined)
		if((nObjs = fieldObj.length) != undefined)
			n = nObjs-1;


	for(;n>=0;n--)
	{
		if(nObjs != undefined) bN_HLeventObj = fieldObj[n];
		
		if(bN_HLcheckElem(bN_HLeventObj))
			bN_HLeventObj.style.backgroundColor = bN_HLhighlightColor;
	}
}


/////////////////////////////////////////////////////////////////////////////
// IFRAME FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
//
//
function bN_CallIFrameFunction(objIFrame, funcName)
{
	var IE = bN_isIE();
	var  n, obj;

	if(funcName.length <= 0) return -1;
	n = funcName.indexOf("(");
	
	if(IE)
	{
		if(n != -1)
		{
			obj = eval("objIFrame." + funcName.substr(0, n));
			if(obj==null || obj=='undefined')
				return -1;
		}
		return eval("objIFrame." + funcName);
	}
	else {
		if(n != -1)
		{
			obj = eval("objIFrame.contentWindow." + funcName.substr(0, n));
			if(obj==null || obj=='undefined')
				return -1;
		}
		return eval("objIFrame.contentWindow." + funcName);
	}
}

//
//
function bN_getElement(id, objIframeContainer) {
	return document.getElementById ? objIframeContainer.document.getElementById(id) : objIframeContainer.document.all ? objIframeContainer.document.all(id) : null;
}

//
//
function IFRAME_size_to_content(iframe_id, objIframeContainer, userHeight)
{
	var IE = bN_isIE();
	var obj_iframe = bN_getElement(iframe_id, objIframeContainer);
	
	var ht = parseInt(IE ? obj_iframe.Document.body.scrollHeight : obj_iframe.contentDocument.documentElement.offsetHeight);
	ht = parseInt(IE ? obj_iframe.Document.body.scrollHeight : obj_iframe.contentDocument.documentElement.offsetHeight);
	
	bN_iFRAME_countResizing++;
	
	if(userHeight > 0) ht = userHeight;
	if(bN_last_iFRAME_HT == ht) return;
	bN_last_iFRAME_HT = ht;
	if(IE) obj_iframe.style.height = ht;
	else obj_iframe.height = ht;
}

//
//
function IFRAME_sizer(frameName, parentFrame, flagSizeToFrame, htDelta)
{
	var IE = bN_isIE();

	if(typeof(parentFrame) != 'object')
		parentFrame = top;
	if(typeof(frameName) != 'string')
		frameName = 'content';

	bN_last_iFRAME_frameName = frameName;
	bN_last_iFRAME_parent = parentFrame;
	bN_last_iFRAME_htDelta = htDelta;
	bN_last_iFRAME_flagSizeToFrame = flagSizeToFrame;

	if(flagSizeToFrame) {
		ht = (IE ? parentFrame.Document.body.clientHeight : parentFrame.document.height);
		ht -=  (typeof(htDelta) == 'number' ? htDelta : 0);
	}
	else ht = 0;

//	IFRAME_size_to_content(frameName, parentFrame, 1);
	IFRAME_size_to_content(frameName, parentFrame, ht);

	// Nascondo il Layer di caricamento presente nel frame padre...
	bN_IFRAME_ShowLoading(parentFrame, false);
}

//
//
function IFRAME_closeFrame(frameName, parentFrame)
{
	var IE = bN_isIE();

	if(typeof(parentFrame) != 'object')
		parentFrame = top;
	if(typeof(frameName) != 'string')
		frameName = 'content';

	bN_last_iFRAME_frameName = frameName;
	bN_last_iFRAME_parent = parentFrame;

	IFRAME_size_to_content(frameName, parentFrame, 1);

	// Nascondo il Layer di caricamento presente nel frame padre...
	bN_IFRAME_ShowLoading(parentFrame, false);
}

//
//
function IFRAME_resize()
{
/*
	if(bN_iFRAME_countResizing > 0)
	{
		alert(bN_iFRAME_countResizing);
		bN_iFRAME_countResizing--;
		return;
	}
*/
	if(bN_last_iFRAME_htDelta > 0) return;

	IFRAME_sizer(bN_last_iFRAME_frameName, bN_last_iFRAME_parent, bN_last_iFRAME_flagSizeToFrame, bN_last_iFRAME_htDelta);
}

//
//
function IFRAME_getScrollPosition(tipo)
{
	var ret;
	var IE = bN_isIE();
	var obj_iframe = window.parent;
	
	switch(tipo)
	{
		// Top...
		case 0:
			ret = parseInt(IE ? obj_iframe.document.documentElement.scrollTop : obj_iframe.pageYOffset);
			break;
	}
	
	return ret;
}

//
//
function IFRAME_setScrollPosition(tipo, val)
{
	var ret;
	var IE = bN_isIE();
	var obj_iframe = window.parent;
	
	switch(tipo)
	{
		// Top...
		case 0:
			obj_iframe.scroll(0,val);
//			if(IE) obj_iframe.document.documentElement.scrollTop = val;
//			else obj_iframe.pageYOffset = val;
			break;
	}
}

//
//
function bN_IFRAME_ShowLoading(parentFrame, flag)
{
	if(typeof(parentFrame.bN_ShowLoading) != "function") return;
//	if(flag) parentFrame.scroll(0,0);
	parentFrame.bN_ShowLoading(flag, bN_last_iFRAME_HT);
}


/////////////////////////////////////////////////////////////////////////////
// COOKIE FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
//
//
function bN_getCookieVal(offset)
{
	var endstr = document.cookie.indexOf(";", offset);
	
	if(endstr == -1)
		endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

//
//
function bN_getCookie(name)
{
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;

	while(i < clen)
	{
		var j = i + alen;

		if(document.cookie.substring(i, j) == arg)
			return getCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if(i == 0)
			break; 
	}
	return null;
}

//
//
function bN_setCookie(name, value)
{
	var argv = bN_setCookie.arguments;
	var argc = bN_setCookie.arguments.length;
	var expires = (2 < argc) ? argv[2] : null;
	var path = (3 < argc) ? argv[3] : null;
	var domain = (4 < argc) ? argv[4] : null;
	var secure = (5 < argc) ? argv[5] : false;
	document.cookie = name + "=" + escape(value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : "");
}



/////////////////////////////////////////////////////////////////////////////
// HTTP FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
//
//
function execOnSuccess(stateChangeCallback)
{
	return function(xmlHttpReq)
	{
		if(xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200)
			stateChangeCallback(xmlHttpReq);
//		alert(xmlHttpReq.readyState + " " + xmlHttpReq.status);
	};
}

//
//
function urlEncodeDict(dict)
{ 
	var result = "";
	for (var i=0; i<dict.length; i++) {
		result += "&" + encodeURIComponent(dict[i].name) + "=" + encodeURIComponent(dict[i].value);
	}
	return result;
}

//
//
function bN_getXmlHttpRequest()
{
	var httpRequest = null;
	try
	{
		httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e)
		{
			httpRequest = null;
		}
	}
	
	if (!httpRequest && typeof XMLHttpRequest != "undefined")
	{
		httpRequest = new XMLHttpRequest();
	}
	
	return httpRequest;
}

//
//
function bN_postUrl(szUrl, szData, flagAsync, fnStateChangeCallback, param)
{ 
	var xmlHttpReq = bN_getXmlHttpRequest(); 

	if (!xmlHttpReq)
		return -1;

	xmlHttpReq.open("POST", szUrl, flagAsync);
	xmlHttpReq.onreadystatechange = function()
	{
		if(fnStateChangeCallback != null)
			fnStateChangeCallback(xmlHttpReq, param);
	}
	xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpReq.send(szData);
	return 0;
}

//
//
function bN_postFormByForm(objForm, flagAsync, fnStateChangeCallback, param)
{
	var formVars = new Array();
	for(var i = 0; i < objForm.elements.length; i++)
	{
		var objFormElement = objForm.elements[i];

		// Special handling for checkboxes (we need an array of selected checkboxes..)!
		if(objFormElement.type=='checkbox' && !objFormElement.checked)
		{
			continue;
		}
		var v = new Object;
		v.name  = objFormElement.name;
		v.value = objFormElement.value;
		formVars.push(v);
	}
//	bN_postUrl(objForm.action, urlEncodeDict(formVars), flagAsync, execOnSuccess(fnStateChangeCallback));
	return bN_postUrl(objForm.action, urlEncodeDict(formVars), flagAsync, fnStateChangeCallback, param);
}

//
//
function bN_postForm(szFormName, flagAsync, fnStateChangeCallback, param)
{
	var objForm = document.forms[szFormName];
	return bN_postFormByForm(objForm, flagAsync, fnStateChangeCallback, param);
}


/////////////////////////////////////////////////////////////////////////////
// CONVERSION FUNCTIONS
/////////////////////////////////////////////////////////////////////////////
var base64 = {
	charmap : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
	encode  : function(str)
	{
		var ret = "";
		var c, i, acc = 0;
		var div = 1;
		for(i=0,c=0;i<str.length;i++,c++)
		{
			acc = acc*256 + str.charCodeAt(i);
			div = div*4;
			ret = ret + base64.charmap.charAt(parseInt(acc/div));
			acc = acc % div;
			if(div==64)
				ret = ret + base64.charmap.charAt(parseInt(acc)), acc = 0, div = 1,c++;
//			if(c>=75) c=-1, ret	= ret + "\n";
		}
		
		if(i%3)
		{
			ret = ret + base64.charmap.charAt(parseInt(acc*((i%3==1)?16:4)));
			ret = ret + ((i%3)==1?"==":"=");
		}
		return ret;
	},
	
	decode : function(str)
	{
		var ret = "";
		var i, acc = 0;
		var div = 1;
		for(i=0;i<str.length;i++)
		{
			if(str.charAt(i)=="=" || str.charAt(i)=='\n')
				break;
			acc = acc*64 + base64.charmap.indexOf(str.charAt(i));
			div = (div==1?64:div/4);
			if(div!=64)
			{
				ret = ret + String.fromCharCode(parseInt(acc/div));
				acc = acc % div;
			}
		}
		return ret;
	}
}


//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Codifica una stringa di caratteri in UTF-8...
//
function encode_utf8(rohtext)
{
	rohtext = rohtext.replace(/\r\n/g,"\n");

	var utftext = "";
	
	for(var n=0; n<rohtext.length; n++)
	{
		var c=bN_charCodeAt(rohtext, n);
		
		if (c<128)
		{
			utftext += bN_fromCharCode(c);
		}
		else if((c>127) && (c<2048)) {
			utftext += bN_fromCharCode((c>>6)|192);
			utftext += bN_fromCharCode((c&63)|128);
		}
		else {
			utftext += bN_fromCharCode((c>>12)|224);
			utftext += bN_fromCharCode(((c>>6)&63)|128);
			utftext += bN_fromCharCode((c&63)|128);
		}
	}

	return utftext;
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Decodifica una stringa di caratteri codificata in UTF-8...
//
function decode_utf8(utftext)
{
	var plaintext = "";
	var i=0;
	var c=c1=c2=0;

	while(i < utftext.length)
	{
		c = bN_charCodeAt(utftext, i);
		if(c < 128)
		{
			plaintext += String.fromCharCode(c);
			i++;
		}
		else if((c > 191) && (c < 224))
		{
			c2 = bN_charCodeAt(utftext, i+1);
			plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
			i+=2;
		}
		else {
			c2 = bN_charCodeAt(utftext, i+1);
			c3 = bN_charCodeAt(utftext, i+2);
			plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
			i+=3;
		}
	}

	return plaintext;
}


/////////////////////////////////////////////////////////////////////////////
// GENERAL SCRIPTS
/////////////////////////////////////////////////////////////////////////////
//
var bN_last_iFRAME_HT = 0;
var bN_iFRAME_countResizing = 0;

var bN_last_iFRAME_frameName = "";
var bN_last_iFRAME_parent = null;
var bN_last_iFRAME_flagSizeToFrame = false;
var bN_last_iFRAME_htDelta = 0;

var gbl_LINKOldColor = "#333333";

bN_IFRAME_ShowLoading(top, true);
