
_NULL = null;
_UNDEFINED = 'undefined';
_OBJECT = 'object';
_FUNCTION = 'function';

_Windows = 'Windows';
_Mac = 'Mac';
_Unix = 'Unix';
_Linux = 'Linux';

_appName = navigator.appName;
_userAgent = navigator.userAgent;
_version = navigator.appVersion;
_ver = parseInt( _version );
_fullVersion = parseFloat( _version );
_majorVersion = parseInt( _version );

_IE = _appName.indexOf( 'Microsoft' ) != -1 ? true:false;
_NS = _appName.indexOf( 'Netscape' ) != -1 ? true:false;
_NS4x = ( _NS && _ver < 5 );
_NS5 = ( _NS && _ver >= 5 );
_isOpera = _userAgent.indexOf( 'Opera' ) != -1 ? true:false;
_browser = ( _IE || _NS );

_imagesPath = "../xbrick/images/";

_windowStatus = window.defaultStatus;
_property = _NULL;

_ENTER_KEYCODE = 13;

if ( ( _verOffset = _userAgent.indexOf( 'MSIE' ) ) != -1 )
{
	_fullVersion = parseFloat( _userAgent.substring( _verOffset + 5, _userAgent.length ) );
	_majorVersion = parseInt( '' + _fullVersion );
}

if ( ( _verOffset = _userAgent.indexOf( 'Opera' ) ) != -1 )
{
	_fullVersion = parseFloat( _userAgent.substring( _verOffset + 6, _userAgent.length ) );
	_majorVersion = parseInt( '' + _fullVersion );
}

_OSName = _UNDEFINED;
if ( _version.indexOf( 'Win' ) != -1 ) _OSName = _Windows;
if ( _version.indexOf( 'Mac' ) != -1 ) _OSName = _Mac;
if ( _version.indexOf( 'X11' ) != -1 ) _OSName = _Unix;
if ( _version.indexOf( 'Linux' ) != -1 ) _OSName = _Linux;

function dump( pObject, pWindow )
{
	var lDump = '';
	var lWin;
	var lDoc;
	var lCrLf;
	
	lCrLf = iif( pWindow, '<br>', '\n' );
	
	for ( prop in pObject )
		lDump = lDump + lCrLf + prop + "=" + eval('pObject.' + prop);
	
	if ( pWindow )
	{
		lWin = window.open();
		lDoc = lWin.document;
		
		lDoc.open();
		lDoc.writeln( lDump );
		lDoc.close();
	}
	else
		alert( lDump );
}

function check( pObject, pWindow )
{
	if ( pObject )
	{
		if ( typeof( pObject ) == 'string' )
			alert( pObject );
		else
			dump( pObject, pWindow );
	}
}

function handleError( pText, pURL, pLine )
{
	var lMessage;
	
	lMessage = 'Error';
	lMessage = lMessage + '\n\nError: ' + pText;
	lMessage = lMessage +   '\nURL: ' + pURL;
	lMessage = lMessage +   '\nLine: ' + pLine;
	
	alert( lMessage );
	
	return true;
}

function findValue( pKey, pValues, pSep )
{
	var lValue = null;
	var lStart = pValues.indexOf( pKey );
	var lEnd;
	
	if ( lStart != -1 )
	{
		lStart += pKey.length;
		lEnd = pValues.indexOf( pSep, lStart );
		lEnd = iif( lEnd == -1, pValues.length, lEnd );
		
		lValue = pValues.substring(lStart, lEnd);
	}
	
	return lValue;
}

function init()
{
	var lFunction;
	
	window.onerror = handleError;
	
	lFunction = 'handleCurrentElement';
	
	if ( eval( 'typeof(' + lFunction + ')' ) == _FUNCTION )
	{
		lFunction = lFunction + "()";
		
		eval( lFunction );
	}
}

function setWindowSize()
{
	if ( _IE )
	{
		_winW = document.body.offsetWidth;
		_winH = document.body.offsetHeight;
	}
	
	if ( _NS )
	{
		_winW = window.innerWidth;
		_winH = window.innerHeight;
	}
}

function setWindowStatus( pText )
{
	_windowStatus = window.status;
	
	window.status = pText;
	
	return true;
}

function resetWindowStatus()
{
	window.status = _windowStatus;
}

function getHTMLElement( pElementId, pWindow )
{
	var lElement;
	var lWindow;
	
	lWindow = iif( pWindow, pWindow, window );
	
	if ( _IE )
		lElement = lWindow.document.all[pElementId];
	
	if ( _NS )
	{
		if ( _ver < 5 )
			lElement = findObject( lWindow, pElementId, 'document' );
		else
			lElement = lWindow.document.getElementById( pElementId );
	}
	
	return lElement;
}

function setInnerHTML( pElement, pHTML )
{
	if ( pElement )
	{
		if ( _IE || ( _NS5 ) )
			pElement.innerHTML = pHTML;
		
		if ( _NS4x )
		{
			pElement.document.open();
			pElement.document.writeln( pHTML );
			pElement.document.close();
			
			slideLayers( pElement, 'document' );
		}
	}
}

function findObject( pWindow, pElementId, pParentName )
{
	var lElement;
	
	if ( _NS4x )
	{
		var lLayers;
		
		pParentName += '.layers';
		
		lElement = eval( pParentName + '.' + pElementId );
		lLayers = eval( pParentName );
		
		if ( lElement == _NULL && lLayers.length > 0 )
		{
			var lIdx;
			var lParentName;
			
			for ( lIdx = 0; lIdx < lLayers.length; lIdx++ )
			{
				lParentName = lLayers[lIdx].name;
				
				lElement = findObject( pElementId, pParentName + '.' + lParentName );
				if ( lElement != null )
					break;
			}
		}
	}
	
	return lElement;
}

function reloadPage()
{
	if ( _NS4x )
	{
		if ( _winH != window.innerWidth || _winW != window.innerHeight )
			location.reload();
	}
}

function slideLayers( pLayer, pParentName )
{
	if ( _NS4x )
	{
		var lIdx;
		var lLayers;
		var lLayer;
		
		lLayers = eval( pParentName + '.layers' );
		
		for ( lIdx = 0; lIdx < lLayers.length; lIdx++ )
		{
			lLayer = lLayers[lIdx];
			
			if ( lLayer != pLayer )
			{
				if ( lLayer.pageX >= pLayer.pageX && lLayer.pageX <= ( pLayer.pageX + pLayer.clip.width ) )
					lLayer.moveTo( lLayer.x, pLayer.y + pLayer.clip.height );
			}
		}
	}
}

function wrap( pString, pMax )
{
	var lWrap = '';
	var lSubstr;
	var lPos;
	var lLength;
	
	while ( pString != '' )
	{
		lLength = ( pString.length >= pMax ) ? pMax:pString.length;
		lSubstr = pString.substr( 0, lLength );
		lPos = lSubstr.lastIndexOf( ' ' );
		lPos = iif( lPos == -1 || lPos <= lLength, lLength, lPos++);
		
		lWrap = lWrap + lSubstr.substr( 0, lPos ) + '\n';
		
		while (true)
		{
			if ( pString.charAt(lPos) == ' ' )
				lPos++;
			else
				break;
		}
		
		pString = pString.substr( lPos, pString.length );
	}
	
	return lWrap;
}

function iif( pCond, pTrue, pFalse)
{
	var lRet;
	
	if ( pCond )
		lRet = pTrue;
	else
		lRet = pFalse;
	
	return lRet;
}

function setProperty( pId, pProperty, pValue )
{
	var lElement;
	var lProperty;
	
	lElement = getHTMLElement( pId );
	
	if ( _IE )
	{
		//dump( lElement );
		lProperty = eval( lElement + '.' + pProperty );
		//alert( eval(lProperty) );
		
		eval( lElement + '.' + pProperty + '=\'' + pValue + '\'' );
	}
	
	_property = lProperty;
}

function resetProperty( pId, pProperty )
{
	var lElement;
	
	lElement = getHTMLElement( pId );
	
	if ( _IE )
		eval( lElement + '.' + pProperty + '=\'' + _property + '\'' );
}

function keyCode( pEvent )
{
	var lKeyCode;
	
	if ( _IE )
		lKeyCode = window.event.keyCode;
	else
		lKeyCode = pEvent.which;
	
	return lKeyCode;
}

function fillNumber( pValue, pSize )
{
	return fillString( new String( pValue ), pSize, "0", true );
}

function fillString( pValue, pSize, pChar, pIsNumeric )
{
	var lIdx;
	var lStr;
	
	lStr = iif( pIsNumeric == false, pValue, '' );
	
	for( lIdx = 0; lIdx < ( pSize - pValue.length ); lIdx++ )
		lStr = lStr + pChar;
	
	lStr = lStr + iif( pIsNumeric == true, pValue, '' );
	
	if ( lStr.length > pSize )
	{
		alert( "fillString(): value too large" );
		
		lStr = lStr.substring( 0, pSize );
	}
	
	return lStr;
}

function replaceChar( pStr, pOld, pNew )
{
	var lIdx;
	var lStr;
	
	// In attesa di utilizzare RegExp e attributo /g nella ricerca, la replaceChar viene implementata come
	// un loop dal quale si esce appena il carattere da sostituire non viene trovato
	
	lStr = pStr;
	
	while ( true )
	{
		lIdx = lStr.indexOf( pOld );
		if ( lIdx != -1 )
			lStr = lStr.replace( pOld, pNew );
		else
			break;
	}
	
	return lStr;
}

function setFocus( pElement )
{
	var lElement;
	var lFunction;
	
	if ( typeof( pElement ) == _OBJECT )
	{
		lElement = eval( pElement );
		
		if ( lElement )
			lElement.focus();
	}
	else
	{
		if ( eval( 'typeof(' + pElement + ')' ) == _FUNCTION )
		{
			lFunction = pElement + "()";
			
			eval( lFunction );
		}
	}
}

function dateFormat( pDate )
{
	var lDay, lDate, lMonth, lYear, lHours, lMinutes, lSeconds;
	var lFormatDate;
	
	lDay = pDate.getDay();
	lDate = pDate.getDate();
	lMonth = pDate.getMonth();
	lYear = pDate.getFullYear();
	lHours = pDate.getHours();
	lMinutes = pDate.getMinutes();
	lSeconds = pDate.getSeconds();
	
	lFormatDate = iif( lDay == 0, 'Dom', '');
	lFormatDate = iif( lDay == 1, 'Lun', lFormatDate);
	lFormatDate = iif( lDay == 2, 'Mar', lFormatDate);
	lFormatDate = iif( lDay == 3, 'Mer', lFormatDate);
	lFormatDate = iif( lDay == 4, 'Gio', lFormatDate);
	lFormatDate = iif( lDay == 5, 'Ven', lFormatDate);
	lFormatDate = iif( lDay == 6, 'Sab', lFormatDate);
	
	lMonth = iif( lMonth == 0, 'gennaio', lMonth );
	lMonth = iif( lMonth == 1, 'febbraio', lMonth );
	lMonth = iif( lMonth == 2, 'marzo', lMonth );
	lMonth = iif( lMonth == 3, 'aprile', lMonth );
	lMonth = iif( lMonth == 4, 'maggio', lMonth );
	lMonth = iif( lMonth == 5, 'giugno', lMonth );
	lMonth = iif( lMonth == 6, 'luglio', lMonth );
	lMonth = iif( lMonth == 7, 'agosto', lMonth );
	lMonth = iif( lMonth == 8, 'settembre', lMonth );
	lMonth = iif( lMonth == 9, 'ottobre', lMonth );
	lMonth = iif( lMonth == 10, 'novembre', lMonth );
	lMonth = iif( lMonth == 11, 'dicembre', lMonth );
	
	lFormatDate = lFormatDate + ', ' + lDate + ' ' + lMonth + ' ' + lYear + ' ' + fillNumber( lHours, 2 ) + ':' + fillNumber( lMinutes, 2 ) + ':' + fillNumber( lSeconds, 2 );
	
	return lFormatDate;
}

function LTrim( pStr, pChr )
{
	var lStr;
	var lChr
	
	lStr = pStr;
	lChr = iif( pChr, pChr, ' ' );
	
	while( true )
	{
		if ( lStr.indexOf( lChr ) == 0 )
			lStr = lStr.substring( 1, lStr.length );
		else
			break;
	}
	
	return lStr;
}

function RTrim( pStr, pChr )
{
	var lStr;
	var lChr;
	
	lStr = pStr;
	lChr = iif( pChr, pChr, ' ' );
	
	while( true )
	{
		if ( lStr.lastIndexOf( lChr ) == lStr.length )
			lStr = lStr.substring( 1, lStr.length );
		else
			break;
	}
	
	return lStr;
}

function getParameters( pURL, pUnescape )
{
	var lIdx;
	var lSearch;
	var lParms;
	var lParm;
	var lName;
	var lValue
	
	if ( pURL == null )
		lSearch = document.location.search;
	else
		lSearch = getURLSearch( pURL );
	
	lSearch = lSearch.substring( 1, lSearch.length );
	lParms = lSearch.split( '&' );
	
	for ( lIdx = 0; lIdx < lParms.length; lIdx++ )
	{
		lParm = lParms[lIdx];
		lPos = lParm.indexOf( '=' );
		
		lName = lParm.substring( 0, lPos );
		lValue = lParm.substring( lPos + 1, lParm.length );
		lValue = iif( pUnescape == null, lValue, unescapeString( lValue ) );
		
		lParms[lIdx] = new ParameterItem( lName, lValue );
	}
	
	return lParms;
}

function getURLSearch( pURL )
{
	var lPos;
	var lSearch;
	
	lPos = pURL.indexOf( '?' );
	lSearch = iif( lPos != -1, pURL.substring( lPos, pURL.length ), '' );
	
	return lSearch;
}

function ParameterItem( pName, pValue )
{
	this.name = pName;
	this.value = pValue;
}

function getParameter( pParm, pDefault, pURL, pUnescape )
{
	var lIdx;
	var lParms;
	var lParm;
	var lValue;
	
	lParms = getParameters( pURL, pUnescape );
	lValue = pDefault;
	
	for ( lIdx = 0; lIdx < lParms.length; lIdx++ )
	{
		lParm = lParms[lIdx];
		
		if ( lParm.name == pParm )
		{
			lValue = lParm.value;
			
			break;
		}
	}
	
	return lValue;
}

function escapeString( pStr )
{
	return escape( pStr );
}

function unescapeString( pStr )
{
	return unescape( pStr );
}
