var PG_CONTROLS_DEBUG_LOW = 1;
var PG_CONTROLS_DEBUG_MEDIUM = 2;
var PG_CONTROLS_DEBUG_HIGH = 4;

var PG_CONTROLS_SCROLLDIV_DEFAULT_OVERLAY_ZINDEX = 100;

var PG_CONTROLS_TYPE_SCROLLDIV = 0;
var PG_CONTROLS_TYPE_PROGRESSBAR = 1;
var PG_CONTROLS_TYPE_FRAMESET = 2;
var PG_CONTROLS_TYPE_FRAME = 3;
var PG_CONTROLS_TYPE_INPUTFIELD = 4;
var PG_CONTROLS_TYPE_BUTTON = 5;

var PG_CONTROLS_SCROLLDIV_MODE_NONE = 0;
var PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR = 1;
var PG_CONTROLS_SCROLLDIV_MODE_HOVER = 2;
var PG_CONTROLS_SCROLLDIV_MODE_BORDERHOVER = 4;
var PG_CONTROLS_SCROLLDIV_MODE_DRAG = 8;
var PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_LEFT = 16;
var PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_RIGHT = 32;
var PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_TOP = 64;
var PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_BOTTOM = 128;
var PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR_LEFT = 256;
var PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR_RIGHT = 512;
var PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR_TOP = 1024;
var PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR_BOTTOM = 2048;

var PG_CONTROLS_PROGRESSBAR_TYPE_HORIZONTAL_BAR = 0;
var PG_CONTROLS_PROGRESSBAR_TYPE_VERTICAL_BAR = 1;

var PG_CONTROLS_FRAMES_FRAMESET_TYPE_COLS = 0;
var PG_CONTROLS_FRAMES_FRAMESET_TYPE_ROWS = 1;

var PG_CONTROLS_FRAMES_BEHAVIOR_DYNAMIC = 0;
var PG_CONTROLS_FRAMES_BEHAVIOR_STATIC = 1;
var PG_CONTROLS_FRAMES_BEHAVIOR_STRICT = 2;

var PG_CONTROLS_FRAMES_INDEX_SIZE = 0;
var PG_CONTROLS_FRAMES_INDEX_OVERFLOW = 1;
var PG_CONTROLS_FRAMES_INDEX_CONTENT = 2;
var PG_CONTROLS_FRAMES_INDEX_BEHAVIOR = 3;

var PG_CONTROLS_INPUTFIELD_AJAX_REQUEST_TYPE = 'PG_ControlsInputFieldAjaxRequest';
var PG_CONTROLS_CHECKBOX_AJAX_REQUEST_TYPE = 'PG_ControlsCheckboxAjaxRequest';
var PG_CONTROLS_TEXTAREA_AJAX_REQUEST_TYPE = 'PG_ControlsTextareaAjaxRequest';

var PG_CONTROLS_INPUTFIELD_MODE_NONE = 0;
var PG_CONTROLS_INPUTFIELD_MODE_AUTOCOMPLETE = 1;	// Default autocomplete from os system
var PG_CONTROLS_INPUTFIELD_MODE_DROPDOWN = 2;		// Dropdown button on right of field
var PG_CONTROLS_INPUTFIELD_MODE_SEARCH = 4;			// Input is also searching
var PG_CONTROLS_INPUTFIELD_MODE_AUTOSAVE = 8;		// Save on select data (and on lost focus if all needed fields are filled)
var PG_CONTROLS_INPUTFIELD_MODE_CREATE = 16;		// allow creating data
var PG_CONTROLS_INPUTFIELD_MODE_UPDATE = 32;		// allow changing data
var PG_CONTROLS_INPUTFIELD_MODE_DELETE = 64;		// allow deleting data
var PG_CONTROLS_INPUTFIELD_MODE_READONLY = 128;
var PG_CONTROLS_INPUTFIELD_MODE_AUTOCLOSE = 256;
var PG_CONTROLS_INPUTFIELD_MODE_RESETONBLUR = 512;
var PG_CONTROLS_INPUTFIELD_MODE_RESETONDROPDOWNCLOSE = 1024;

var PG_CONTROLS_INPUTFIELD_INDEX_WIDTH = 0;
var PG_CONTROLS_INPUTFIELD_INDEX_NAME = 1;
var PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT = 2;
var PG_CONTROLS_INPUTFIELD_INDEX_NODATA = 3;
var PG_CONTROLS_INPUTFIELD_INDEX_REQUIRED = 4;
var PG_CONTROLS_INPUTFIELD_INDEX_MAXLENGTH = 5;

var PG_CONTROLS_INPUTFIELD_DATASET_INDEX_ID = 0;
var PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD = 1;

var PG_CONTROLS_INPUTFIELD_ACTIONSTATUS_FAILED = 0;
var PG_CONTROLS_INPUTFIELD_ACTIONSTATUS_SUCCESS = 1;

var PG_CONTROLS_INPUTFIELD_EVENT_ONBLUR = 'OnBlur';
var PG_CONTROLS_INPUTFIELD_EVENT_ONSEARCH = 'OnSearch';
var PG_CONTROLS_INPUTFIELD_EVENT_ONSELECT_DATASET = 'OnSelectDataset';
var PG_CONTROLS_INPUTFIELD_EVENT_ONCREATE_DATASET = 'OnCreateDataset';
var PG_CONTROLS_INPUTFIELD_EVENT_ONUPDATE_DATASET = 'OnUpdateDataset';
var PG_CONTROLS_INPUTFIELD_EVENT_ONDELETE_DATASET = 'OnDeleteDataset';

var PG_CONTROLS_CHECKBOX_MODE_NONE = 0;
var PG_CONTROLS_CHECKBOX_MODE_AUTOSAVE = 1;

var PG_CONTROLS_CHECKBOX_STATUS_INDEX_STATUS = 0;
var PG_CONTROLS_CHECKBOX_STATUS_INDEX_VALUE = 1;
var PG_CONTROLS_CHECKBOX_STATUS_INDEX_IMAGE = 2;

var PG_CONTROLS_CHECKBOX_EVENT_ONCHANGE = 'OnChange';

var PG_CONTROLS_TEXTAREA_MODE_NONE = 0;
var PG_CONTROLS_TEXTAREA_MODE_AUTOSAVE = 1;

var PG_CONTROLS_TEXTAREA_EVENT_ONBLUR = 'OnBlur';

var PG_CONTROLS_TEXTAREA_ACTIONSTATUS_SUCCESS = 1;
var PG_CONTROLS_TEXTAREA_ACTIONSTATUS_FAILED = 0;

function classPG_Controls()
{
	this.oWindow = window;
	this.oDocument = document;
	this.oKeyUpTimeout = null;
	
	this.iDebugMode = 0;
	this.sDebugString = '';

	this.sMouseOverControlID = '';
	this.sMouseDownControlID = '';
	this.sMouseOverDropdownID = '';

	// ScrollDiv...
	this.iScrollDivMoveSpeedX = 10;
	this.iScrollDivMoveSpeedY = 10;
	this.iScrollDivMoveInterval = 80;
	this.iScrollDivMoveBorderSizeTop = 10;
	this.iScrollDivMoveBorderSizeBottom = 10;
	this.iScrollDivMoveBorderSizeLeft = 10;
	this.iScrollDivMoveBorderSizeRight = 10;
	this.iScrollDivMoveWithMouseStartPosX = 0;
	this.iScrollDivMoveWithMouseStartPosY = 0;
	this.bScrollDivDragModeEnabled = true;
	this.sScrollDivMoveCursor = '';

	this.sScrollDivActiveID = '';
	this.sScrollDivMoveWithMouseID = '';
	this.asScrollDivIgnoreMouseOverOnElement = new Array();
	
	// GFX...
	this.oGFXPack = null;
	this.sImagePath = '';

	this.sImageButtonLeft = 'button_left.gif';
	this.sImageButtonFiller = 'button_filler.gif';
	this.sImageButtonRight = 'button_right.gif';
	this.sImageButtonLeftHover = 'button_left_hover.gif';
	this.sImageButtonFillerHover = 'button_filler_hover.gif';
	this.sImageButtonRightHover = 'button_right_hover.gif';
	this.sImageButtonLeftDown = 'button_left_down.gif';
	this.sImageButtonFillerDown = 'button_filler_down.gif';
	this.sImageButtonRightDown = 'button_right_down.gif';
	
	this.sImageInputFieldDropdownButton = 'button_dropdown.gif';
	this.sImageInputFieldDropdownButtonHover = 'button_dropdown_hover.gif';
	this.sImageInputFieldDropdownButtonHide = 'button_dropdown_hide.gif';
	this.sImageInputFieldDropdownButtonHideHover = 'button_dropdown_hide_hover.gif';

	this.sCssStyleInputFieldDatasetHover = 'background-color:#A1C6F0; color:#000000;';
	this.sCssStyleInputField = 'background-color:#FFFFFF; color:#000000; border:solid 1px #707070; height:14px;';
	this.sCssStyleInputFieldDataSaved = 'background-color:#CCFFCC; color:#006600; border:solid 1px #006600; height:14px;';
	this.sCssStyleInputFieldDataWrong = 'background-color:#FFCCCC; color:#660000; border:solid 1px #660000; height:14px;';
	this.sCssStyleInputFieldDataNotSaved = 'background-color:#FFE99B; color:#654100; border:solid 1px #654100; height:14px;';
	this.sCssStyleInputFieldNoData = 'background-color:#FFFFFF; color:#CCCCCC; border:solid 1px #000000; height:14px;';
	
	this.sInputFieldAjaxFile = 'ajax_inputfield.php';
	this.sInputFieldLastOpenedDropdownID = '';
	this.iInputFieldKeyResponseWaitToSearch = 800;
	this.oInputFieldResetOnBlurTimeout = null;
	
	this.sCheckboxAjaxFile = 'ajax_checkbox.php';

	this.sTextareaAjaxFile = 'ajax_textarea.php';
	this.sCssStyleTextarea = 'background-color:#FFFFFF; color:#000000; border:solid 1px #707070;';
	this.sCssStyleTextareaDataSaved = 'background-color:#CCFFCC; color:#006600; border:solid 1px #006600;';
	this.sCssStyleTextareaDataWrong = 'background-color:#FFCCCC; color:#660000; border:solid 1px #660000;';
	this.sCssStyleTextareaDataNotSaved = 'background-color:#FFE99B; color:#654100; border:solid 1px #654100;';
	this.sCssStyleTextareaNoData = 'background-color:#FFFFFF; color:#CCCCCC; border:solid 1px #000000;';
	
	this.oAjaxObject = null;
	this.oAjaxRequestObject = null;
	this.oXMLRead = null;
	
	this.destroy = function()
	{
		// set all properties to null...
		this.oDocument = null;
		this.sScrollDivActiveID = null;
		this.sScrollDivMoveWithMouseID = null;
		this.iScrollDivMoveSpeedX = null;
		this.iScrollDivMoveSpeedY = null;
		this.iScrollDivMoveInterval = null;
		this.iScrollDivMoveBorderSizeTop = null;
		this.iScrollDivMoveBorderSizeBottom = null;
		this.iScrollDivMoveBorderSizeLeft = null;
		this.iScrollDivMoveBorderSizeRight = null;
		this.iScrollDivMoveWithMouseStartPosX = null;
		this.iScrollDivMoveWithMouseStartPosY = null;

		// cleanup all properties...
		delete this.oDocument;
		delete this.sScrollDivActiveID;
		delete this.sScrollDivMoveWithMouseID;
		delete this.iScrollDivMoveSpeedX;
		delete this.iScrollDivMoveSpeedY;
		delete this.iScrollDivMoveInterval;
		delete this.iScrollDivMoveBorderSizeTop;
		delete this.iScrollDivMoveBorderSizeBottom;
		delete this.iScrollDivMoveBorderSizeLeft;
		delete this.iScrollDivMoveBorderSizeRight;
		delete this.iScrollDivMoveWithMouseStartPosX;
		delete this.iScrollDivMoveWithMouseStartPosY;

		// cleanup all methods...
		delete this.getRelativeMousePosX;
		delete this.getRelativeMousePosY;
		delete this.getRelativeMousePercentX;
		delete this.getRelativeMousePercentY;
		delete this.buildProgressBar;
		delete this.progressBarRefresh;
		delete this.progressBarRefresh2;
		delete this.changeScrollDivType;
		delete this.changeScrollDivZIndex;
		delete this.changeScrollDivContent;
		delete this.enableScrollDivOverlay;
		delete this.disableScrollDivOverlay;
		delete this.buildScrollDiv;
		delete this.setScrollDivMoveBorderSizeTop;
		delete this.setScrollDivMoveBorderSizeBottom;
		delete this.setScrollDivMoveBorderSizeLeft;
		delete this.setScrollDivMoveBorderSizeRight;
		delete this.setScrollDivMoveBorderSize;
		delete this.setScrollDivMoveInterval;
		delete this.setSrollDivMoveSpeedX;
		delete this.setSrollDivMoveSpeedY;
		delete this.setSrollDivMoveSpeed;
		delete this.setScrollDivActiveID;
		delete this.unsetScrollDivActiveID;
		delete this.scrollDivOnMouseMove;
		delete this.isMouseOverScrollDiv;
		delete this.scrollDivMoveRelativeToMouse;
		delete this.scrollDivMoveByMouseOnBorder;
		delete this.scrollDivMoveWithMouse;
		delete this.scrollDivMovePercent;
		delete this.scrollDivMove;
		delete this.setScrollDivScrollPos;
		delete this.destroy;
	}
	
	this.setDebugMode = function(_iDebugMode) {this.iDebugMode |= (_iDebugMode);}
	this.unsetDebugMode = function(_iDebugMode) {this.iDebugMode &= ~(_iDebugMode);}
	this.toggleDebugMode = function(_iDebugMode) {this.iDebugMode ^= (_iDebugMode);}
	this.isDebugMode = function(_iDebugMode) {return (this.iDebugMode & (_iDebugMode));}
	this.getDebugString = function()
	{
		if ((this.iDebugMode > 0) && (this.sDebugString != ''))
		{
			var _sDebugString = this.sDebugString;
			this.sDebugString = '';
			return _sDebugString;
		}
		return '';
	}

	this.setGFXPack = function(_oGFX) {this.oGFXPack = _oGFX;}
	this.setImagePath = function(_sPath) {this.sImagePath = _sPath;}

	this.setImageButtonLeft = function(_sImage) {this.sImageButtonLeft = _sImage;}
	this.setImageButtonFiller = function(_sImage) {this.sImageButtonFiller = _sImage;}
	this.setImageButtonRight = function(_sImage) {this.sImageButtonRight = _sImage;}
	this.setImageButtonLeftHover = function(_sImage) {this.sImageButtonLeftHover = _sImage;}
	this.setImageButtonFillerHover = function(_sImage) {this.sImageButtonFillerHover = _sImage;}
	this.setImageButtonRightHover = function(_sImage) {this.sImageButtonRightHover = _sImage;}

	this.setAjaxObject = function(_oAjaxObject) {this.oAjaxObject = _oAjaxObject;}
	this.getAjaxObject = function() {return this.oAjaxObject;}
	
	this.setXMLReadObject = function(_oXMLRead) {this.oXMLRead = _oXMLRead;}
	this.getXMLReadObject = function() {return this.oXMLRead;}

	this.getRelativeMousePosX = function(_sElementID)
	{
		if (typeof(oPGMouse) != 'undefined')
		{
			var _oControlsType = this.oDocument.getElementById(_sElementID+'ControlsType');
			if (_oControlsType)
			{
				var _iControlsType = parseInt(_oControlsType.value);
				if (_iControlsType == PG_CONTROLS_TYPE_SCROLLDIV)
				{
					var _oDivContainer = this.oDocument.getElementById(_sElementID+'Container');
					if (_oDivContainer)
					{
						var _iDivContainerPosX = 0;
						if (typeof(oPGBrowser) != 'undefined') {_iDivContainerPosX = oPGBrowser.getDocumentOffsetX(_oDivContainer);}
						else {_iDivContainerPosX = parseInt(_oDivContainer.offsetLeft);}
						var _iMouseDocPosX = oPGMouse.getDocPosX();
						return _iMouseDocPosX-_iDivContainerPosX;
					}
				}
			}
			
			var _oElement = this.oDocument.getElementById(_sElementID);
			if (_oElement)
			{
				var _iElementPosX = 0;
				if (typeof(oPGBrowser) != 'undefined') {_iElementPosX = oPGBrowser.getDocumentOffsetX(_oElement);}
				else {_iElementPosX = parseInt(_oDivContainer.offsetLeft);}
				var _iMouseDocPosX = oPGMouse.getDocPosX();
				return _iMouseDocPosX-_iElementPosX;
			}
		}
		return null;
	}

	this.getRelativeMousePosY = function(_sElementID)
	{
		if (typeof(oPGMouse) != 'undefined')
		{
			var _oControlsType = this.oDocument.getElementById(_sElementID+'ControlsType');
			if (_oControlsType)
			{
				var _iControlsType = parseInt(_oControlsType.value);
				if (_iControlsType == PG_CONTROLS_TYPE_SCROLLDIV)
				{
					var _oDivContainer = this.oDocument.getElementById(_sElementID+'Container');
					if (_oDivContainer)
					{
						var _iDivContainerPosY = 0;
						if (typeof(oPGBrowser) != 'undefined') {_iDivContainerPosY = oPGBrowser.getDocumentOffsetY(_oDivContainer);}
						else {_iDivContainerPosY = parseInt(_oDivContainer.offsetTop);}
						var _iMouseDocPosY = oPGMouse.getDocPosY();
						return _iMouseDocPosY-_iDivContainerPosY;
					}
				}
			}

			var _oElement = this.oDocument.getElementById(_sElementID);
			if (_oElement)
			{
				var _iElementPosY = 0;
				if (typeof(oPGBrowser) != 'undefined') {_iElementPosY = oPGBrowser.getDocumentOffsetY(_oElement);}
				else {_iElementPosY = parseInt(_oElement.offsetTop);}
				var _iMouseDocPosY = oPGMouse.getDocPosY();
				return _iMouseDocPosY-_iElementPosY;
			}
		}
		return null;
	}

	this.getRelativeMousePercentX = function(_sElementID)
	{
		if (typeof oPGMouse != 'undefined')
		{
			var _oControlsType = this.oDocument.getElementById(_sElementID+'ControlsType');
			if (_oControlsType)
			{
				var _iControlsType = parseInt(_oControlsType.value);
				if (_iControlsType == PG_CONTROLS_TYPE_SCROLLDIV)
				{
					var _oDivContainer = this.oDocument.getElementById(_sElementID+'Container');
					if (_oDivContainer)
					{
						if (typeof(oPGBrowser) != 'undefined') {var _iDivContainerPosX = oPGBrowser.getDocumentOffsetX(_oDivContainer);}
						else {var _iDivContainerPosX = parseInt(_oDivContainer.offsetLeft);}
						var _iDivContainerSizeX = parseInt(_oDivContainer.offsetWidth);
						var _iMouseDocPosX = oPGMouse.getDocPosX();
						return 100/_iDivContainerSizeX*(_iMouseDocPosX-_iDivContainerPosX);
					}
				}
			}

			var _oElement = this.oDocument.getElementById(_sElementID);
			if (_oElement)
			{
				var _iElementPosX = 0;
				if (typeof(oPGBrowser) != 'undefined') {_iElementPosX = oPGBrowser.getDocumentOffsetX(_oElement);}
				else {_iElementPosX = parseInt(_oElement.offsetLeft);}
				var _iElementSizeX = parseInt(_oElement.offsetWidth);
				var _iMouseDocPosX = oPGMouse.getDocPosX();
				return 100/_iElementSizeX*(_iMouseDocPosX-_iElementPosX);
			}
		}
		return null;
	}

	this.getRelativeMousePercentY = function(_sElementID)
	{
		if (typeof oPGMouse != 'undefined')
		{
			var _oControlsType = this.oDocument.getElementById(_sElementID+'ControlsType');
			if (_oControlsType)
			{
				var _iControlsType = parseInt(_oControlsType.value);
				if (_iControlsType == PG_CONTROLS_TYPE_SCROLLDIV)
				{
					var _oDivContainer = this.oDocument.getElementById(_sElementID+'Container');
					if (_oDivContainer)
					{
						var _iDivContainerPosY = 0;
						if (typeof(oPGBrowser) != 'undefined') {_iDivContainerPosY = oPGBrowser.getDocumentOffsetY(_oDivContainer);}
						else {_iDivContainerPosY = parseInt(_oDivContainer.offsetTop);}
						var _iDivContainerSizeY = parseInt(_oDivContainer.offsetHeight);
						var _iMouseDocPosY = oPGMouse.getDocPosY();
						return 100/_iDivContainerSizeY*(_iMouseDocPosY-_iDivContainerPosY);
					}
				}
			}
			
			var _oElement = this.oDocument.getElementById(_sElementID);
			if (_oElement)
			{
				var _iElementPosY = 0;
				if (typeof(oPGBrowser) != 'undefined') {_iElementPosY = oPGBrowser.getDocumentOffsetY(_oElement);}
				else {_iElementPosY = parseInt(_oElement.offsetTop);}
				var _iElementSizeY = parseInt(_oElement.offsetHeight);
				var _iMouseDocPosY = oPGMouse.getDocPosY();
				return 100/_iElementSizeY*(_iMouseDocPosY-_iElementPosY);
			}
		}
		return null;
	}
	
	// ProgressBar...
	this.buildProgressBar = function(_sContainerID, _sBarID, _iProgressBarType, _sWidth, _sHeight, _sBackgroundCssClass, _sBackgroundCssStyle, _sBarCssClass, _sBarCssStyle)
	{
		var _sHTML = '';
		
		if (_iProgressBarType == null) {_iProgressBarType = PG_CONTROLS_PROGRESSBAR_TYPE_HORIZONTAL_BAR;}
		if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_HORIZONTAL_BAR)
		{
			if (_sWidth == null) {_sWidth = '100%';}
			if (_sHeight == null) {_sHeight = '25px';}
		}
		else if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_VERTICAL_BAR)
		{
			if (_sWidth == null) {_sWidth = '45px';}
			if (_sHeight == null) {_sHeight = '100%';}
		}
		
		_sHTML += '<table cellpadding="0" cellspacing="0" style="border-width:0px;">';
		_sHTML += '<tr>';
			_sHTML += '<td id="'+_sBarID+'Container" style="width:'+_sWidth+'; height:'+_sHeight+'; ';
			if ((_sBackgroundCssStyle != '') && (_sBackgroundCssStyle != null)) {_sHTML += _sBackgroundCssStyle+' ';}
			if (((_sBackgroundCssStyle == '') || (_sBackgroundCssStyle == null))
			&& ((_sBackgroundCssClass == '') || (_sBackgroundCssClass == null)))
			{
				_sHTML += 'background-color:#808080; ';
				_sHTML += 'color:#000000; ';
				_sHTML += 'font-weight:bold; ';
				_sHTML += 'font-size:12px; ';
				_sHTML += 'font-family:Arial, Verdana; ';
				_sHTML += 'border:solid 1px #000000; ';
				_sHTML += 'padding:0px; ';
				if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_VERTICAL_BAR) {_sHTML += 'vertical-align:bottom; ';}
			}
			_sHTML += '" ';
			if ((_sBackgroundCssClass != '') && (_sBackgroundCssClass != null)) {_sHTML += 'class="'+_sBackgroundCssClass+'" ';}
			_sHTML += '>';
			_sHTML += '<table cellpadding="0" cellspacing="0" style="border-width:0px;">';
			_sHTML += '<tr>';
				_sHTML += '<td id="'+_sBarID+'" ';
				if ((_sBarCssClass != '') && (_sBarCssClass != null)) {_sHTML += 'class="'+_sBarCssClass+'" ';}
				_sHTML += 'style="';
				if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_HORIZONTAL_BAR) {_sHTML += 'height:'+_sHeight+'; width:1px; ';}
				else if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_VERTICAL_BAR) {_sHTML += 'width:'+_sWidth+'; height:1px; ';}
				if ((_sBarCssStyle != '') && (_sBarCssStyle != null)) {_sHTML += _sBarCssStyle+' ';}
				if (((_sBarCssStyle == '') || (_sBarCssStyle == null))
				&& ((_sBarCssClass == '') || (_sBarCssClass == null)))
				{
					_sHTML += 'background-color:#150185; ';
					_sHTML += 'color:#FFFFFF; ';
					_sHTML += 'font-weight:bold; ';
					_sHTML += 'padding:5px; ';
					if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_HORIZONTAL_BAR)
					{
						_sHTML += 'vertical-align:middle; ';
						_sHTML += 'text-align:right; ';
					}
					else if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_VERTICAL_BAR)
					{
						_sHTML += 'vertical-align:top; ';
						_sHTML += 'text-align:center; ';
					}
				}
				_sHTML += '"></td>';
			_sHTML += '</tr>';
			_sHTML += '</table>';
			_sHTML += '</td>';
		_sHTML	+= '</tr>';
		_sHTML += '</table>';
		_sHTML += '<input type="hidden" id="'+_sBarID+'ControlsType" value="'+PG_CONTROLS_TYPE_PROGRESSBAR+'" />';
		_sHTML += '<input type="hidden" id="'+_sBarID+'ProgressBarType" value="'+_iProgressBarType+'" />';
		
		if ((_sContainerID != '') && (_sContainerID != null))
		{
			var _oContainer = this.oDocument.getElementById(_sContainerID);
			if (_oContainer) {_oContainer.innerHTML += _sHTML;}
		}
		
		return _sHTML;
	}
	
	this.progressBarRefresh = function(_sBarID, _iPercent)
	{
		_iPercent = Math.min(Math.max(_iPercent, 1), 100);
		
		var _oProgressBar = this.oDocument.getElementById(_sBarID);
		var _oProgressBarContainer = this.oDocument.getElementById(_sBarID+'Container');
		var _oProgressBarType = this.oDocument.getElementById(_sBarID+'ProgressBarType');
		if ((_oProgressBar) && (_oProgressBarContainer) && (_oProgressBarType))
		{
			var _iBarMaxSizeX = 0;
			var _iProgressBarType = parseInt(_oProgressBarType.value);
			if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_HORIZONTAL_BAR)
			{
				_iBarMaxSizeX = parseInt(_oProgressBarContainer.offsetWidth);
				var _iNewSizeX = Math.min(Math.round(_iBarMaxSizeX*_iPercent/100), _iBarMaxSizeX-2);
				if (_iNewSizeX != Number.NaN) {if (_iNewSizeX >= 0) {_oProgressBar.style.width = _iNewSizeX+'px';}}
			}
			else if (_iProgressBarType == PG_CONTROLS_PROGRESSBAR_TYPE_VERTICAL_BAR)
			{
				_iBarMaxSizeX = parseInt(_oProgressBarContainer.offsetWidth);
				var _iBarMaxSizeY = parseInt(_oProgressBarContainer.offsetHeight);
				var _iNewSizeY = Math.min(Math.round(_iBarMaxSizeY*_iPercent/100), _iBarMaxSizeY-2);
				if (_iNewSizeY != Number.NaN) {if (_iNewSizeY >= 0) {_oProgressBar.style.height = _iNewSizeY+'px';}}
			}
			if (_iBarMaxSizeY >= 45)
			{
				if (_iPercent != Number.NaN)
				{
					_iPercent = Math.max(Math.min(Math.round(_iPercent),100), 0);
					_oProgressBar.innerHTML = _iPercent+'%';
				}
			}
		}
	}
	
	this.progressBarRefresh2 = function(_sBarID, _iCurrent, _iMax)
	{
		var _iPercent = _iMax*100/_iCurrent;
		this.progressBarRefresh(_sBarID, _iPercent);
		return _iPercent;
	}
	
	// ScrollDiv...
	this.setScrollDivMoveInterval = function(_iMilliseconds) {this.iScrollDivMoveInterval = _iMilliseconds;}
	this.initScrollDiv = function(_sDivID) {this.recalculateScrollDivElements(_sDivID);}
	
	this.isScrollDivMode = function(_iCurrentScrollDivMode, _iIsScrollDivMode) {return (_iCurrentScrollDivMode & (_iIsScrollDivMode));}
	
	this.setScrollDivMoveCursor = function(_sCursor) {this.sScrollDivMoveCursor = _sCursor;}
	this.getScrollDivMoveCursor = function() {return this.sScrollDivMoveCursor;}
	
	this.enableScrollDivDragMode = function(_bEnable) {this.bScrollDivDragModeEnabled = _bEnable;}
	this.isScrollDivDragModeEnabled = function() {return this.bScrollDivDragModeEnabled;}
	
	this.changeScrollDivMode = function(_sDivID, _iScrollDivMode)
	{
		var _oControlsType = this.oDocument.getElementById(_sDivID+'ControlsType');
		if (_oControlsType)
		{
			var _iControlsType = parseInt(_oControlsType.value);
			if (_iControlsType == PG_CONTROLS_TYPE_SCROLLDIV)
			{
				var _oScrollDiv = this.oDocument.getElementById(_sDivID);
				var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
				if ((_oScrollDiv) && (_oScrollDivContainer))
				{
					var _oUseOverlay = this.oDocument.getElementById(_sDivID+'UseOverlay');
					var _oScrollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
					var _oScrollDivOverlay = this.oDocument.getElementById(_sDivID+'Overlay');
					if ((_oScrollMode) && (_oScrollDivOverlay) && (_oUseOverlay))
					{
						_oScrollMode.value = _iScrollDivMode;
						var _iUseOverlay = parseInt(_oUseOverlay.value);
						if (this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR))
						{
							_oScrollDivContainer.style.overflow = 'auto';
							_oScrollDivContainer.scrollTop = 0;
							_oScrollDivContainer.scrollLeft = 0;
							_oScrollDiv.style.top = '0px';
							_oScrollDiv.style.left = '0px';
							if ((_iUseOverlay == 1) || (this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_DRAG)))
							{
								_oScrollDivOverlay.style.display = 'block';
								if (this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_DRAG))
								{
									_oScrollDivOverlay.style.width = parseInt(_oScrollDiv.offsetWidth)+'px';
									_oScrollDivOverlay.style.height = parseInt(_oScrollDiv.offsetHeight)+'px';
								}
								else
								{
									_oScrollDivOverlay.style.width = parseInt(_oScrollDiv.offsetWidth)+'px';
									_oScrollDivOverlay.style.height = parseInt(_oScrollDiv.offsetHeight)+'px';
								}
							}
							else {_oScrollDivOverlay.style.display = 'none';}
						}
						else if (this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_HOVER))
						{
							_oScrollDivContainer.style.overflow = 'hidden';
							_oScrollDivContainer.scrollTop = 0;
							_oScrollDivContainer.scrollLeft = 0;
							if (_iUseOverlay == 1)
							{
								_oScrollDivOverlay.style.display = 'block';
								_oScrollDivOverlay.style.width = parseInt(_oScrollDivContainer.offsetWidth)+'px';
								_oScrollDivOverlay.style.height = parseInt(_oScrollDivContainer.offsetHeight)+'px';
							}
							else {_oScrollDivOverlay.style.display = 'none';}
						}
						else if (this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_BORDERHOVER))
						{
							_oScrollDivContainer.style.overflow = 'hidden';
							_oScrollDivContainer.scrollTop = 0;
							_oScrollDivContainer.scrollLeft = 0;
							if (_iUseOverlay == 1)
							{
								_oScrollDivOverlay.style.display = 'block';
								_oScrollDivOverlay.style.width = parseInt(_oScrollDivContainer.offsetWidth)+'px';
								_oScrollDivOverlay.style.height = parseInt(_oScrollDivContainer.offsetHeight)+'px';
							}
							else {_oScrollDivOverlay.style.display = 'none';}
						}
						else if ((this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_DRAG))
						|| (this.isScrollDivMode(_iScrollDivMode, PG_CONTROLS_SCROLLDIV_MODE_DRAG_AND_BORDERHOVER)))
						{
							_oScrollDivContainer.style.overflow = 'hidden';
							_oScrollDivContainer.scrollTop = 0;
							_oScrollDivContainer.scrollLeft = 0;
							_oScrollDivOverlay.style.top = '0px';
							_oScrollDivOverlay.style.left = '0px';
							_oScrollDivOverlay.style.display = 'block';
							_oScrollDivOverlay.style.width = parseInt(_oScrollDivContainer.offsetWidth)+'px';
							_oScrollDivOverlay.style.height = parseInt(_oScrollDivContainer.offsetHeight)+'px';
						}
					}
				}
			}
		}
	}
	
	this.changeScrollDivZIndex = function(_sDivID, _iZIndex, _iOverlayZIndex)
	{
		var _oDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		var _oDivOverlay = this.oDocument.getElementById(_sDivID+'Overlay');
		if ((_oDivContainer) && (_oDivOverlay))
		{
			if (_iZIndex != null) {_oDivContainer.style.zIndex = _iZIndex;}
			if (_iOverlayZIndex != null) {_oDivOverlay.style.zIndex = _iOverlayZIndex;}
		}
	}
	
	this.changeScrollDivContent = function(_sDivID, _sContent)
	{
		var _oScrollDiv = this.oDocument.getElementById(_sDivID);
		if (_oScrollDiv) {_oScrollDiv.innerHTM = _sContent;}
	}
	
	this.enableScrollDivOverlay = function(_sDivID)
	{
		var _oUseOverlay = this.oDocument.getElementById(_sDivID+'UseOverlay');
		var _oScrollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
		if ((_oUseOverlay) && (_oScrollMode))
		{
			_oUseOverlay.value = 1;
			this.changeScrollDivMode(_sDivID, parseInt(_oScrollMode.value));
		}
	}
	
	this.disableScrollDivOverlay = function(_sDivID)
	{
		var _oUseOverlay = this.oDocument.getElementById(_sDivID+'UseOverlay');
		var _oScrollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
		if ((_oUseOverlay) && (_oScrollMode))
		{
			_oUseOverlay.value = 0;
			this.changeScrollDivMode(_sDivID, parseInt(_oScrollMode.value));
		}
	}
	
	// TODO: show php version!
	this.buildScrollDiv = function(_sContainerID, _sDivID, _sWidth, _sHeight, _sContent, _iZIndex, _iOverlayZIndex, _iScrollMode, _bUseOverlay, _sCssClass, _sCssStyle)
	{
		_sHTML = '';
		
		if (_iZIndex == null) {_iZIndex = 1;}
		if (_iOverlayZIndex == null) {_iOverlayZIndex = _iZIndex+PG_CONTROLS_SCROLLDIV_DEFAULT_OVERLAY_ZINDEX;}
		_sHTML += '<div style="position:relative; width:'+_sWidth+'; height:'+_sHeight+'; z-index:'+_iZIndex+'; display:block; '; // border:solid 1px #000000;
		if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR)) {_sHTML += 'overflow:auto; ';}
		else {_sHTML += 'overflow:hidden; ';}
		if ((_sCssStyle != '') && (_sCssStyle != null)) {_sHTML += _sCssStyle;}
		_sHTML += '" ';
		if ((_sCssClass != '') && (_sCssClass != null)) {_sHTML += 'class="'+_sCssClass+'" ';}
		_sHTML += 'id="'+_sDivID+'Container">';
		_sHTML += '<div id="'+_sDivID+'Overlay" ';
		_sHTML += 'onmousedown="oPGControls.scrollDivOnMouseDown(\''+_sDivID+'\');" ';
		_sHTML += 'onmouseup="oPGControls.scrollDivOnMouseUp(\''+_sDivID+'\');" ';
		_sHTML += 'style="position:absolute; width:'+_sWidth+'; height:'+_sHeight+'; cursor:default; ';
		if (typeof oPGBrowser != 'undefined')
		{
			if (oPGBrowser.getName(null) == PG_BROWSER_INTERNET_EXPLORER) {_sHTML += 'filter:alpha(opacity=90); ';}
			else {_sHTML += 'opacity:0.9; ';}
		}
		if (_bUseOverlay == true) {_sHTML += 'display:block; ';} else {_sHTML += 'display:none; ';}
		_sHTML += 'left:0px; top:0px; z-index:'+_iOverlayZIndex+'; background-color:#000000;"></div>';
		_sHTML += '<div id="'+_sDivID+'" style="position:absolute; left:0px; top:0px; display:block;">';
		_sHTML += _sContent;
		_sHTML += '</div>';
		_sHTML += '<input type="hidden" id="'+_sDivID+'ControlsType" value="'+PG_CONTROLS_TYPE_SCROLLDIV+'" />';
		_sHTML += '<input type="hidden" id="'+_sDivID+'ScrollMode" value="'+_iScrollType+'" />';
		_sHTML += '<input type="hidden" id="'+_sDivID+'UseOverlay" value="';
		if (_bUseOverlay == true) {_sHTML += '1';} else {_sHTML += '0';}
		_sHTML += '" />';
		_sHTML += '</div>';
		
		if (_sContainerID != null)
		{
			var _oContainer = this.oDocument.getElementById(_sContainerID);
			if (_oContainer) {_oContainer.innerHTML += _sHTML;}
		}
		
		return _sHTML;
	}

	this.setScrollDivMoveBorderSizeTop = function(_iSizeY) {this.iScrollDivMoveBorderSizeTop = _iSizeY;}
	this.setScrollDivMoveBorderSizeBottom = function(_iSizeY) {this.iScrollDivMoveBorderSizeBottom = _iSizeY;}
	this.setScrollDivMoveBorderSizeLeft = function(_iSizeX) {this.iScrollDivMoveBorderSizeLeft = _iSizeX;}
	this.setScrollDivMoveBorderSizeRight = function(_iSizeX) {this.iScrollDivMoveBorderSizeRight = _iSizeX;}
	this.setScrollDivMoveBorderSize = function(_iTopSizeY, _iBottomSizeY, _iLeftSizeX, _iRightSizeX)
	{
		this.setScrollDivMoveBorderSizeTop(_iTopSizeY);
		this.setScrollDivMoveBorderSizeBottom(_iBottomSizeY);
		this.setScrollDivMoveBorderSizeLeft(_iLeftSizeX);
		this.setScrollDivMoveBorderSizeRight(_iRightSizeX);
	}
	
	this.setScrollDivMoveInterval = function(_iMilliseconds) {this.iScrollDivMoveInterval = _iMilliseconds;}
	this.setSrollDivMoveSpeedX = function(_iSpeedX) {this.iScrollDivMoveSpeedX = _iSpeedX;}
	this.setSrollDivMoveSpeedY = function(_iSpeedY) {this.iScrollDivMoveSpeedY = _iSpeedY;}
	this.setSrollDivMoveSpeed = function(_iSpeedX, _iSpeedY)
	{
		if (_iSpeedX != null) {this.setSrollDivMoveSpeedX(_iSpeedX);}
		if (_iSpeedY != null) {this.setSrollDivMoveSpeedY(_iSpeedY);}
	}
	
	this.setScrollDivActiveID = function(_sDivID)
	{
		if (this.sScrollDivActiveID == '')
		{
			this.sScrollDivActiveID = _sDivID;
			var _oScollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
			if (_oScollMode)
			{
				var _iScrollMode = parseInt(_oScollMode.value);
				if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_HOVER)) {this.scrollDivMoveRelativeToMouse();}
				else if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_BORDERHOVER))
				{
					if (this.sScrollDivMoveWithMouseID == '') {this.scrollDivMoveByMouseOnBorder();}
					else {this.scrollDivMoveRelativeToMouse();}
				}
			}
		}
	}
	
	this.unsetScrollDivActiveID = function() {this.sScrollDivActiveID = '';}
	
	this.scrollDivOnMouseDown = function(_sDivID)
	{
		if (this.sScrollDivActiveID != '')
		{
			var _oScollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
			if (_oScollMode)
			{
				var _iScrollMode = parseInt(_oScollMode.value);
				if ((this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_DRAG)) && (this.bScrollDivDragModeEnabled == true))
				{
					if (typeof(oPGBrowser) != 'undefined') {oPGBrowser.disableSelect();}
					this.sScrollDivMoveWithMouseID = this.sScrollDivActiveID;
					var _oScrollDivOverlay = this.oDocument.getElementById(this.sScrollDivMoveWithMouseID+'Overlay');
					if (_oScrollDivOverlay)
					{
						if (this.sScrollDivMoveCursor != '')
						{
							var _sCursor = '';
							_sCursor += 'url(\''+this.sScrollDivMoveCursor+'.png\'), ';
							_sCursor += 'url(\''+this.sScrollDivMoveCursor+'.gif\'), ';
							_sCursor += 'url(\''+this.sScrollDivMoveCursor+'.ico\'), ';
							_sCursor += 'url(\''+this.sScrollDivMoveCursor+'.ani\'), ';
							_sCursor += 'url(\''+this.sScrollDivMoveCursor+'.cur\'), ';
							_sCursor += 'move';
							_oScrollDivOverlay.style.cursor = _sCursor;
						}
						else {_oScrollDivOverlay.style.cursor = 'move';}
					}
					
					var _oScrollDiv = this.oDocument.getElementById(this.sScrollDivMoveWithMouseID);
					if (_oScrollDiv)
					{
						this.iScrollDivMoveWithMouseStartPosX = this.getRelativeMousePosX(this.sScrollDivMoveWithMouseID)-parseInt(_oScrollDiv.offsetLeft);
						this.iScrollDivMoveWithMouseStartPosY = this.getRelativeMousePosY(this.sScrollDivMoveWithMouseID)-parseInt(_oScrollDiv.offsetTop);
					}

					return false;
				}
			}
		}
	}
	
	this.scrollDivOnMouseUp = function(_sDivID)
	{
		this.sScrollDivMoveWithMouseID = '';
		var _oScrollDivOverlay = this.oDocument.getElementById(_sDivID+'Overlay');
		if (_oScrollDivOverlay) {_oScrollDivOverlay.style.cursor = 'default';}
	}
	
	this.scrollDivOnMouseMove = function(_sDivID)
	{
		if (this.isMouseOverScrollDiv(_sDivID) == true)
		{
			this.setScrollDivActiveID(_sDivID);
			if (this.sScrollDivMoveWithMouseID == _sDivID) {this.scrollDivMoveWithMouse();}
		}
		else
		{
			this.unsetScrollDivActiveID();
			var _oScrollDivOverlay = this.oDocument.getElementById(this.sScrollDivMoveWithMouseID+'Overlay');
			if (_oScrollDivOverlay) {_oScrollDivOverlay.style.cursor = 'default';}
			this.sScrollDivMoveWithMouseID = '';
		}
	}
	
	this.addScrollDivIgnoreMouseOverOnElement = function(_sElementID) {this.asScrollDivIgnoreMouseOverOnElement.push(_sElementID);}
	
	this.isMouseOverScrollDiv = function(_sDivID)
	{
		if (typeof(oPGMouse) != 'undefined')
		{
			var _oDivContainer = this.oDocument.getElementById(_sDivID+'Container');
			if (_oDivContainer)
			{
				var _iPosX = this.getRelativeMousePosX(_sDivID);
				var _iPosY = this.getRelativeMousePosY(_sDivID);
				
				if ((_iPosX >= 0) && (_iPosY >= 0)
				&& (_iPosX <= parseInt(_oDivContainer.offsetWidth))
				&& (_iPosY <= parseInt(_oDivContainer.offsetHeight)))
				{
					for (var i=0; i<this.asScrollDivIgnoreMouseOverOnElement.length; i++)
					{
						_sDivID = this.asScrollDivIgnoreMouseOverOnElement[i];
						_oDivContainer = this.oDocument.getElementById(_sDivID);
						if (_oDivContainer)
						{
							_iPosX = this.getRelativeMousePosX(_sDivID);
							_iPosY = this.getRelativeMousePosY(_sDivID);
							if ((_iPosX < 0) && (_iPosY < 0)
							&& (_iPosX > parseInt(_oDivContainer.offsetWidth))
							&& (_iPosY > parseInt(_oDivContainer.offsetHeight))) {return false;}
						}
					}
					return true;
				}
				return false;
			}
		}
		return null;
	}
	
	this.scrollDivMoveRelativeToMouse = function()
	{
		if (this.sScrollDivActiveID != '')
		{
			var _iPercentX = this.getRelativeMousePercentX(this.sScrollDivActiveID);
			var _iPercentY = this.getRelativeMousePercentY(this.sScrollDivActiveID);
			this.scrollDivMovePercent(this.sScrollDivActiveID, this.iScrollDivMoveSpeedX, this.iScrollDivMoveSpeedY, _iPercentX, _iPercentY);
			this.oWindow.setTimeout('oPGControls.scrollDivMoveRelativeToMouse()', this.iScrollDivMoveInterval);
		}
	}
	
	this.scrollDivMoveByMouseOnBorder = function()
	{
		if (this.sScrollDivActiveID != '')
		{
			var _oDivContainer = this.oDocument.getElementById(this.sScrollDivActiveID+'Container');
			if (_oDivContainer)
			{
				var _iPosX = this.getRelativeMousePosX(this.sScrollDivActiveID);
				var _iPosY = this.getRelativeMousePosY(this.sScrollDivActiveID);
				if ((_iPosX) && (_iPosY))
				{
					if (_iPosY <= this.iScrollDivMoveBorderSizeTop) {this.scrollDivMove(this.sScrollDivActiveID, null, -this.iScrollDivMoveSpeedY);}
					if (_iPosY >= parseInt(_oDivContainer.offsetHeight)-this.iScrollDivMoveBorderSizeBottom) {this.scrollDivMove(this.sScrollDivActiveID, null, this.iScrollDivMoveSpeedY);}
					if (_iPosX <= this.iScrollDivMoveBorderSizeLeft) {this.scrollDivMove(this.sScrollDivActiveID, -this.iScrollDivMoveSpeedX, null);}
					if (_iPosX >= parseInt(_oDivContainer.offsetWidth)-this.iScrollDivMoveBorderSizeRight) {this.scrollDivMove(this.sScrollDivActiveID, this.iScrollDivMoveSpeedX, null);}
				}
				this.oWindow.setTimeout('oPGControls.scrollDivMoveByMouseOnBorder()', this.iScrollDivMoveInterval);
			}
		}
	}

	this.scrollDivMoveWithMouse = function()
	{
		if ((this.sScrollDivMoveWithMouseID != '') && (typeof(oPGMouse) != 'undefined'))
		{
			var _oDivContainer = this.oDocument.getElementById(this.sScrollDivMoveWithMouseID+'Container');
			var _oDiv = this.oDocument.getElementById(this.sScrollDivMoveWithMouseID);
			if ((_oDivContainer) && (_oDiv))
			{
				// var _iPosX = oPGMouse.getDocPosX();
				var _iPosX = this.getRelativeMousePosX(this.sScrollDivMoveWithMouseID);
				if (_iPosX != null)
				{
					var _iDivSizeX = parseInt(_oDiv.offsetWidth);
					var _iDivContainerSizeX = parseInt(_oDivContainer.offsetWidth);
					_oDiv.style.left = Math.max(Math.min(_iPosX-this.iScrollDivMoveWithMouseStartPosX, 0), _iDivContainerSizeX-_iDivSizeX)+'px';
				}
				
				// var _iPosY = oPGMouse.getDocPosY();
				var _iPosY = this.getRelativeMousePosY(this.sScrollDivMoveWithMouseID);
				if (_iPosY != null)
				{
					var _iDivSizeY = parseInt(_oDiv.offsetHeight);
					var _iDivContainerSizeY = parseInt(_oDivContainer.offsetHeight);
					_oDiv.style.top = Math.max(Math.min(_iPosY-this.iScrollDivMoveWithMouseStartPosY, 0), _iDivContainerSizeY-_iDivSizeY)+'px';
				}
			}
		}
	}

	this.scrollDivMovePercent = function(_sDivID, _iMoveX, _iMoveY, _iPercentX, _iPercentY)
	{
		_iPercentX = (_iPercentX-50)*2;
		_iPercentY = (_iPercentY-50)*2;
		var _iNewMoveX = Math.ceil(_iMoveX*_iPercentX/100);
		var _iNewMoveY = Math.ceil(_iMoveY*_iPercentY/100);
		this.scrollDivMove(_sDivID, _iNewMoveX, _iNewMoveY);
	}

	this.scrollDivMove = function(_sDivID, _iMoveX, _iMoveY)
	{
		// var _oScrollDivScrollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
		var _oDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		var _oDiv = this.oDocument.getElementById(_sDivID);
		if ((_oDivContainer) && (_oDiv))
		{
			if (_iMoveX != null)
			{
				var _iDivPosX = parseInt(_oDiv.offsetLeft);
				var _iDivSizeX = parseInt(_oDiv.offsetWidth);
				var _iDivContainerSizeX = parseInt(_oDivContainer.offsetWidth);
				_oDiv.style.left = Math.max(Math.min(_iDivPosX-_iMoveX, 0), _iDivContainerSizeX-_iDivSizeX)+'px';
			}
			
			if (_iMoveY != null)
			{
				var _iDivPosY = parseInt(_oDiv.offsetTop);
				var _iDivSizeY = parseInt(_oDiv.offsetHeight);
				var _iDivContainerSizeY = parseInt(_oDivContainer.offsetHeight);
				_oDiv.style.top = Math.max(Math.min(_iDivPosY-_iMoveY, 0), _iDivContainerSizeY-_iDivSizeY)+'px';
			}
		}
	}
	
	this.setScrollDivCenterPos = function(_sDivID, _iPosX, _iPosY)
	{
		var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		if (_oScrollDivContainer)
		{
			_iPosX = Math.floor(_iPosX - (parseInt(_oScrollDivContainer.offsetWidth)/2));
			_iPosY = Math.floor(_iPosY - (parseInt(_oScrollDivContainer.offsetHeight)/2));
			this.setScrollDivScrollPos(_sDivID, _iPosX, _iPosY);
		}
	}
	
	this.setScrollDivScrollPos = function(_sDivID, _iPosX, _iPosY)
	{
		var _oScrollDiv = this.oDocument.getElementById(_sDivID);
		var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		var _oScrollDivScrollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
		if ((_oScrollDiv) && (_oScrollDivContainer) && (_oScrollDivScrollMode))
		{
			var _iScrollMode = parseInt(_oScrollDivScrollMode.value);
			if (_iScrollMode != Number.NaN)
			{
				if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_SCROLLBAR))
				{
					if (_iPosX != null) {_oScrollDivContainer.scrollLeft = _iPosX;}
					if (_iPosY != null) {_oScrollDivContainer.scrollTop = _iPosY;}
				}
				else
				{
					if (_iPosX != null)
					{
						var _iMinX = -parseInt(_oScrollDiv.offsetWidth)+parseInt(_oScrollDivContainer.offsetWidth);
						_oScrollDiv.style.left = Math.min(Math.max(-_iPosX, _iMinX), 0)+'px';
					}
					
					if (_iPosY != null)
					{
						var _iMinY = -parseInt(_oScrollDiv.offsetHeight)+parseInt(_oScrollDivContainer.offsetHeight);
						_oScrollDiv.style.top = Math.min(Math.max(-_iPosY, _iMinY), 0)+'px';
					}
				}
			}
		}
	}
	
	this.recalculateScrollDivElements = function(_sDivID)
	{
		var _oScrollMode = this.oDocument.getElementById(_sDivID+'ScrollMode');
		var _oScrollDiv = this.oDocument.getElementById(_sDivID+'Container');
		if ((_oScrollMode) && (_oScrollDiv))
		{
			var _iScrollDivSizeX = parseInt(_oScrollDiv.offsetWidth);
			var _iScrollDivSizeY = parseInt(_oScrollDiv.offsetHeight);
			var _iScrollMode = parseInt(_oScrollMode.value);
			if ((_iScrollMode != Number.NaN) && (_iScrollDivSizeX != Number.NaN) && (_iScrollDivSizeY != Number.NaN))
			{
				var _oCharactersbar = null;
				if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_LEFT))
				{
					_oCharactersbar = this.oDocument.getElementById(_sDivID+'Charactersbar'+PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_LEFT);
					if (_oCharactersbar)
					{
						_oCharactersbar.style.top = '0px';
						_oCharactersbar.style.left = '0px';
						_oCharactersbar.style.height = _iScrollDivSizeY+'px';
					}
				}
				if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_RIGHT))
				{
					_oCharactersbar = this.oDocument.getElementById(_sDivID+'Charactersbar'+PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_RIGHT);
					if (_oCharactersbar)
					{
						_oCharactersbar.style.top = '0px';
						_oCharactersbar.style.left = (_iScrollDivSizeX-15)+'px';
						_oCharactersbar.style.height = _iScrollDivSizeY+'px';
					}
				}
				if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_TOP))
				{
					_oCharactersbar = this.oDocument.getElementById(_sDivID+'Charactersbar'+PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_TOP);
					if (_oCharactersbar)
					{
						_oCharactersbar.style.top = '0px';
						_oCharactersbar.style.left = '0px';
						_oCharactersbar.style.width = _iScrollDivSizeX+'px';
					}
				}
				if (this.isScrollDivMode(_iScrollMode, PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_BOTTOM))
				{
					_oCharactersbar = this.oDocument.getElementById(_sDivID+'Charactersbar'+PG_CONTROLS_SCROLLDIV_MODE_CHARACTERSBAR_BOTTOM);
					if (_oCharactersbar)
					{
						_oCharactersbar.style.top = (_iScrollDivSizeY-15)+'px';
						_oCharactersbar.style.left = '0px';
						_oCharactersbar.style.width = _iScrollDivSizeX+'px';
					}
				}
			}
		}
	}
	
	this.getScrollDivSizeX = function(_sDivID)
	{
		var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		return parseInt(_oScrollDivContainer.offsetWidth);
	}
	
	this.getScrollDivSizeY = function(_sDivID)
	{
		var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		return parseInt(_oScrollDivContainer.offsetHeight);
	}
	
	this.setScrollDivSizeX = function(_sDivID, _sSizeX)
	{
		var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		if (_oScrollDivContainer) {_oScrollDivContainer.style.width = _sSizeX;}

		var _oScrollDivOverlay = this.oDocument.getElementById(_sDivID+'Overlay');
		if (_oScrollDivOverlay) {_oScrollDivOverlay.style.width = _sSizeX;}
		
		this.recalculateScrollDivElements(_sDivID);
	}
	
	this.setScrollDivSizeY = function(_sDivID, _sSizeY)
	{
		var _oScrollDivContainer = this.oDocument.getElementById(_sDivID+'Container');
		if (_oScrollDivContainer) {_oScrollDivContainer.style.height = _sSizeY;}
		
		var _oScrollDivOverlay = this.oDocument.getElementById(_sDivID+'Overlay');
		if (_oScrollDivOverlay) {_oScrollDivOverlay.style.height = _sSizeY;}
		
		this.recalculateScrollDivElements(_sDivID);
	}
	
	this.setScrollDivSize = function(_sDivID, _sSizeX, _sSizeY)
	{
		if (_sSizeX != null) {this.setScrollDivSizeX(_sDivID, _sSizeX);}
		if (_sSizeY != null) {this.setScrollDivSizeY(_sDivID, _sSizeY);}
		
		this.recalculateScrollDivElements(_sDivID);
	}
	
	this.scrollDivJumpToCharacter = function(_sDivID, _sCharacter)
	{
		var _oScrollDivCharacter = this.oDocument.getElementById(_sDivID+'CharactersContainer'+_sCharacter);
		if (_oScrollDivCharacter)
		{
			var _iNewPosX = parseInt(_oScrollDivCharacter.offsetLeft);
			var _iNewPosY = parseInt(_oScrollDivCharacter.offsetTop);
			if ((_iNewPosX != Number.NaN) && (_iNewPosY != Number.NaN))
			{
				this.setScrollDivScrollPos(_sDivID, _iNewPosX, _iNewPosY);
			}
		}
	}
	
	// Frames...
	this.sFramesetDragFramesetID = '';
	this.iFramesetDragFrameID = -1;
	this.iFramesetDragDoubleFrameSize = 0;
	this.iFramesetDragMouseStartX = 0;
	this.iFramesetDragMouseStartY = 0;
	
	this.initFrameset = function(_sFramesetID)
	{
		var _oFrameCount = this.oDocument.getElementById(_sFramesetID+'FrameCount');
		if (_oFrameCount)
		{
			var _iFrameCount = parseInt(_oFrameCount.value);
			if (_iFrameCount != Number.NaN)
			{
				for (var i=0; i<_iFrameCount; i++)
				{
					this.initScrollDiv(_sFramesetID+'Frame'+i);
				}
			}
		}
	}
	
	this.buildFrameset = function(_sContainerID, _sFramesetID, _sWidth, _sHeight, _axFrames, _iFramesetType, _sCssClassFrame, _sCssClassBorder)
	{
		var _sFrameWidth = '';
		var _sFrameHeight = '';
		var _sContent = '';
		var _iZIndex = 1;
		var _iOverlayZIndex = 2;
		var _iScrollMode = 0;
		var _bUseOverlay = false;
		var _sCssClassFrame = '';
		var _sFrameCssStyle = '';
		
		var _sHTML = '';
		_sHTML += '<div id="'+_sFramesetID+'" style="width:'+_sWidth+'; height:'+_sHeight+'; overflow:hidden;">';
			for (var i=0; i<_axFrames.length; i++)
			{
				// Border...
				if (i>0)
				{
					var _bStrict = false;
					if ((_axFrames[i][PG_CONTROLS_FRAMES_INDEX_BEHAVIOR] == PG_CONTROLS_FRAMES_BEHAVIOR_STRICT)
					|| (_axFrames[i-1][PG_CONTROLS_FRAMES_INDEX_BEHAVIOR] == PG_CONTROLS_FRAMES_BEHAVIOR_STRICT)) {_bStrict = true;}
					
					_sHTML += '<div ';
					if ((_sCssClassBorder != null) && (_sCssClassBorder != '')) {_sHTML += 'class="'+_sCssClassFrame+'" ';}
					_sHTML += 'style="';
					if ((_sCssClassBorder == null) || (_sCssClassBorder == '')) {_sHTML += 'background-color:#000000; ';}
					if (_iFramesetType == PG_CONTROLS_FRAMES_FRAMESET_TYPE_COLS)
					{
						if (_bStrict == true) {_sHTML += 'cursor:default; ';} else {_sHTML += 'cursor:col-resize; ';}
						if ((_sCssClassBorder == null) || (_sCssClassBorder == '')) {_sHTML += 'width:5px; ';}
						_sHTML += 'height:100%; ';
						_sHTML += 'float:left; ';
					}
					else
					{
						if (_bStrict == true) {_sHTML += 'cursor:default; ';} else {_sHTML += 'cursor:row-resize; ';}
						_sHTML += 'width:100%; ';
						if ((_sCssClassBorder == null) || (_sCssClassBorder == '')) {_sHTML += 'height:5px; ';}
					}
					_sHTML += '" onmousedown="oPGControls.framesetFrameOnMouseDown(\''+_sFramesetID+'\', '+(i-1)+');"></div>';
				}
				
				// Frame...
				_bUseOverlay = false;
				_iScrollMode = _axFrames[i][PG_CONTROLS_FRAMES_INDEX_SCROLLDIVMODE];
				_iZIndex = 1;
				_iOverlayZIndex = 2;
				_sContent = _axFrames[i][PG_CONTROLS_FRAMES_INDEX_CONTENT];
				if (_iFramesetType == PG_CONTROLS_FRAMES_FRAMESET_TYPE_COLS)
				{
					_sFrameWidth = _axFrames[i][PG_CONTROLS_FRAMES_INDEX_SIZE];
					_sFrameHeight = '100%';
					_sFrameCssStyle = 'float:left; ';
				}
				else
				{
					_sFrameWidth = '100%';
					_sFrameHeight = _axFrames[i][PG_CONTROLS_FRAMES_INDEX_SIZE];
					_sFrameCssStyle = 'float:none; ';
				}
				_sHTML += this.buildScrollDiv(_sFramesetID+'Frame'+i, _sFrameWidth, _sFrameHeight, _sContent, _iZIndex, _iOverlayZIndex, _iScrollMode, _bUseOverlay, _sCssClassFrame, _sFrameCssStyle);
				/*_sHTML += '<div id="'+_sFramesetID+'Frame'+i+'" ';
				if ((_sCssClassFrame != null) && (_sCssClassFrame != '')) {_sHTML += 'class="'+_sCssClassFrame+'" ';}
				_sHTML += 'style="';
				_sHTML += 'overflow:'+_axFrames[i][PG_CONTROLS_FRAMES_INDEX_OVERFLOW]+'; ';
				if ((_sCssClassFrame == null) || (_sCssClassFrame == '')) {_sHTML += 'background-color:#FFFFFF; ';}
				if (_iFramesetType == PG_CONTROLS_FRAMES_FRAMESET_TYPE_COLS)
				{
					_sHTML += 'width:'+_axFrames[i][PG_CONTROLS_FRAMES_INDEX_SIZE]+'; ';
					_sHTML += 'height:100%; ';
					_sHTML += 'float:left; ';
				}
				else
				{
					_sHTML += 'width:100%; ';
					_sHTML += 'height:'+_axFrames[i][PG_CONTROLS_FRAMES_INDEX_SIZE]+'; ';
					_sHTML += 'float:none; ';
				}
				_sHTML += '">'+_axFrames[i][PG_CONTROLS_FRAMES_INDEX_CONTENT]+'</div>';*/
			}
		_sHTML += '</div>';
		if ((_sContainerID != '') && (_sContainerID != null))
		{
			var _oContainer = this.oDocument.getElementById(_sContainerID);
			if (_oContainer) {_oContainer.innerHTML += _sHTML;}
		}
		return _sHTML;
	}
	
	this.buildFrameArray = function(_sSize, _sOverflow, _sContent) {return new Array(_sSize, _sOverflow, _sContent);}
	
	this.framesetFrameOnMouseDown = function(_sFramesetID, _iFrameID)
	{
		var _oFrameBehavior = this.oDocument.getElementById(_sFramesetID+'Frame'+_iFrameID+'Behavior');
		var _oNextFrameBehavior = this.oDocument.getElementById(_sFramesetID+'Frame'+(_iFrameID+1)+'Behavior');
		if ((_oFrameBehavior) && (_oNextFrameBehavior))
		{
			var _iFrameBehavior = parseInt(_oFrameBehavior.value);
			var _iNextFrameBehavior = parseInt(_oNextFrameBehavior.value);
			if ((_iFrameBehavior != PG_CONTROLS_FRAMES_BEHAVIOR_STRICT) && (_iNextFrameBehavior != PG_CONTROLS_FRAMES_BEHAVIOR_STRICT))
			{
				this.iFramesetDragFrameID = _iFrameID;
				this.sFramesetDragFramesetID = _sFramesetID;
				if (typeof(oPGMouse) != 'undefined')
				{
					this.iFramesetDragMouseStartX = parseInt(oPGMouse.getDocPosX());
					this.iFramesetDragMouseStartY = parseInt(oPGMouse.getDocPosY());
				}
				var _oFrame = this.oDocument.getElementById(this.sFramesetDragFramesetID+'Frame'+this.iFramesetDragFrameID+'Container');
				var _oNextFrame = this.oDocument.getElementById(this.sFramesetDragFramesetID+'Frame'+(this.iFramesetDragFrameID+1)+'Container');
				if ((_oFrame) && (_oNextFrame))
				{
					var _sFloat = '';
					if (typeof(_oFrame.style.cssFloat) != 'undefined') {_sFloat = _oFrame.style.cssFloat;}
					else if (typeof(_oFrame.style.styleFloat) != 'undefined') {_sFloat = _oFrame.style.styleFloat;}
					else {_sFloat = _oFrame.style.float;}
					if (_sFloat == 'left') {this.iFramesetDragDoubleFrameSize = parseInt(_oFrame.offsetWidth)+parseInt(_oNextFrame.offsetWidth);}
					else {this.iFramesetDragDoubleFrameSize = parseInt(_oFrame.offsetHeight)+parseInt(_oNextFrame.offsetHeight);}
				}
				if (typeof(oPGBrowser) != 'undefined') {oPGBrowser.disableSelect();}
			}
		}
	}
	
	this.framesetFrameOnMouseUp = function(_eEvent)
	{
		this.iFramesetDragFrameID = -1;
		this.sFramesetDragFramesetID = '';
	}
	
	this.framesetFrameOnMouseMove = function(_eEvent)
	{
		if ((this.iFramesetDragFrameID >= 0) && (this.sFramesetDragFrameID != '')
		&& (typeof(oPGMouse) != 'undefined') && (typeof(oPGBrowser) != 'undefined'))
		{
			var _sFrame = this.sFramesetDragFramesetID+'Frame'+this.iFramesetDragFrameID;
			var _sNextFrame = this.sFramesetDragFramesetID+'Frame'+(this.iFramesetDragFrameID+1);
			var _oFrame = this.oDocument.getElementById(_sFrame+'Container');
			var _oNextFrame = this.oDocument.getElementById(_sNextFrame+'Container');
			if (_oFrame)
			{
				var _sFloat = '';
				if (typeof(_oFrame.style.cssFloat) != 'undefined') {_sFloat = _oFrame.style.cssFloat;}
				else if (typeof(_oFrame.style.styleFloat) != 'undefined') {_sFloat = _oFrame.style.styleFloat;}
				else {_sFloat = _oFrame.style.float;}
				if (_sFloat == 'left')
				{
					var _iMousePosX = parseInt(oPGMouse.getDocPosX());
					var _iSizeX = _iMousePosX-parseInt(oPGBrowser.getDocumentOffsetX(_oFrame));
					if ((_oNextFrame) && (_iMousePosX >= 0))
					{
						var _iNextSizeX = this.iFramesetDragDoubleFrameSize-_iSizeX;
						_iNextSizeX = Math.min(Math.max(_iNextSizeX, 0), this.iFramesetDragDoubleFrameSize);
						_iSizeX = Math.min(Math.max(_iSizeX, 0), this.iFramesetDragDoubleFrameSize);
						this.setScrollDivSizeX(_sNextFrame, _iNextSizeX+'px');
						this.setScrollDivSizeX(_sFrame, _iSizeX+'px');
						// _oNextFrame.style.width = _iNextSizeX+'px';
						// _oFrame.style.width = _iSizeX+'px';
					}
				}
				else
				{
					var _iMousePosY = parseInt(oPGMouse.getDocPosY());
					var _iSizeY = _iMousePosY-parseInt(oPGBrowser.getDocumentOffsetY(_oFrame));
					if ((_oNextFrame) && (_iMousePosY >= 0))
					{
						var _iNextSizeY = this.iFramesetDragDoubleFrameSize-_iSizeY;
						_iNextSizeY = Math.min(Math.max(_iNextSizeY, 0), this.iFramesetDragDoubleFrameSize);
						_iSizeY = Math.min(Math.max(_iSizeY, 0), this.iFramesetDragDoubleFrameSize);
						this.setScrollDivSizeY(_sNextFrame, _iNextSizeY+'px');
						this.setScrollDivSizeY(_sFrame, _iSizeY+'px');
						// _oNextFrame.style.height = _iNextSizeY+'px';
						// _oFrame.style.height = _iSizeY+'px';
					}
				}
			}
		}
	}
	
	this.framesetMoveBorderRelative = function(_sFramesetID, _iBorderID, _iMoveDist, _iSpeedTimeout)
	{
		if (typeof(_iSpeedTimeout) == 'undefined') {var _iSpeedTimeout = null;}
		if (_iSpeedTimeout < 1) {_iSpeedTimeout = null;}
		
		var _iCurrentDist = 0;
		if (_iSpeedTimeout != null)
		{
			if ((_iMoveDist > 5) || (_iMoveDist < -5)) {_iCurrentDist = Math.round(_iMoveDist/2);}
			else {_iCurrentDist = _iMoveDist;}
			_iMoveDist -= _iCurrentDist;
		}
		else {_iCurrentDist = _iMoveDist;}
		
		var _sFrame = _sFramesetID+'Frame'+_iBorderID;
		var _sNextFrame = _sFramesetID+'Frame'+(_iBorderID+1);
		var _oFrame = this.oDocument.getElementById(_sFrame+'Container');
		var _oNextFrame = this.oDocument.getElementById(_sNextFrame+'Container');
		if ((_oFrame) && (_oNextFrame))
		{
			var _sFloat = '';
			if (typeof(_oFrame.style.cssFloat) != 'undefined') {_sFloat = _oFrame.style.cssFloat;}
			else if (typeof(_oFrame.style.styleFloat) != 'undefined') {_sFloat = _oFrame.style.styleFloat;}
			else {_sFloat = _oFrame.style.float;}
			if (_sFloat == 'left')
			{
				var _iFrameSizeX = this.framesetGetFrameSizeX(_sFramesetID, _iBorderID);
				var _iNextFrameSizeX = this.framesetGetFrameSizeX(_sFramesetID, _iBorderID+1);
				var _iDoubleFrameSize = _iFrameSizeX+_iNextFrameSizeX;
				var _iSizeX = _iFrameSizeX+_iCurrentDist; // _iMoveDist;
				var _iNextSizeX = _iNextFrameSizeX-_iCurrentDist; // _iMoveDist;
				_iNextSizeX = Math.min(Math.max(_iNextSizeX, 0), _iDoubleFrameSize);
				_iSizeX = Math.min(Math.max(_iSizeX, 0), _iDoubleFrameSize);
				this.setScrollDivSizeX(_sNextFrame, _iNextSizeX+'px');
				this.setScrollDivSizeX(_sFrame, _iSizeX+'px');
			}
			else
			{
				var _iFrameSizeY = this.framesetGetFrameSizeY(_sFramesetID, _iBorderID);
				var _iNextFrameSizeY = this.framesetGetFrameSizeY(_sFramesetID, _iBorderID+1);
				var _iDoubleFrameSize = _iFrameSizeY+_iNextFrameSizeY;
				var _iSizeY = _iFrameSizeY+_iCurrentDist; // _iMoveDist;
				var _iNextSizeY = _iNextFrameSizeY-_iCurrentDist; // _iMoveDist;
				_iNextSizeY = Math.min(Math.max(_iNextSizeY, 0), _iDoubleFrameSize);
				_iSizeY = Math.min(Math.max(_iSizeY, 0), _iDoubleFrameSize);
				this.setScrollDivSizeY(_sNextFrame, _iNextSizeY+'px');
				this.setScrollDivSizeY(_sFrame, _iSizeY+'px');
			}
			if ((_iSpeedTimeout != null) && (_iMoveDist != 0))
			{
				this.oWindow.setTimeout("oPGControls.framesetMoveBorderRelative('"+_sFramesetID+"', "+_iBorderID+", "+_iMoveDist+", "+_iSpeedTimeout+")", _iSpeedTimeout);
			}
		}
	}
	
	this.framesetExecuteFrameOnResizing = function(_sFramesetID, _iFrameID, _sJavaScriptToExecute)
	{
		if
		(
			(oPGControls.sFramesetDragFramesetID == _sFramesetID)
			&& (oPGControls.iFramesetDragFrameID > -1)
			&&
			(
				(oPGControls.iFramesetDragFrameID == _iFrameID)
				|| (oPGControls.iFramesetDragFrameID == _iFrameID-1)
				|| (oPGControls.iFramesetDragFrameID == _iFrameID+1)
			)
		)
		{
			eval(_sJavaScriptToExecute);
		}
	}
	
	this.framesetExecuteOnResizing = function(_sFramesetID, _sJavaScriptToExecute)
	{
		if ((oPGControls.sFramesetDragFramesetID == _sFramesetID) && (oPGControls.iFramesetDragFrameID == -1))
		{
			eval(_sJavaScriptToExecute);
		}
	}
	
	this.framesetGetFrameSizeX = function(_sFramesetID, _iFrameID)
	{
		var _oFrame = oPGControls.oDocument.getElementById(_sFramesetID+'Frame'+_iFrameID+'Container');
		if (_oFrame) {return parseInt(_oFrame.offsetWidth);}
		return null;
	}
	
	this.framesetGetFrameSizeY = function(_sFramesetID, _iFrameID)
	{
		var _oFrame = oPGControls.oDocument.getElementById(_sFramesetID+'Frame'+_iFrameID+'Container');
		if (_oFrame) {return parseInt(_oFrame.offsetHeight);}
		return null;
	}
	
	this.framesetSetSizeX = function(_sFramesetID, _iSizeX)
	{
		var _oFrameset = oPGControls.oDocument.getElementById(_sFramesetID);
		if (_oFrameset)
		{
			if (_iSizeX != null)
			{
				if (_iSizeX >= 0)
				{
					_oFrameset.style.width = _iSizeX+'px';
					this.framesetResizeFramesSizes(_sFramesetID);
				}
			}
		}
	}
	
	this.framesetSetSizeY = function(_sFramesetID, _iSizeY)
	{
		var _oFrameset = oPGControls.oDocument.getElementById(_sFramesetID);
		if (_oFrameset)
		{
			if (_iSizeY != null)
			{
				if (_iSizeY >= 0)
				{
					_oFrameset.style.height = _iSizeY+'px';
					this.framesetResizeFramesSizes(_sFramesetID);
				}
			}
		}
	}
	
	this.framesetSetSize = function(_sFramesetID, _iSizeX, _iSizeY)
	{
		var _oFrameset = oPGControls.oDocument.getElementById(_sFramesetID);
		if (_oFrameset)
		{
			if (_iSizeX != null) {if (_iSizeX >= 0) {_oFrameset.style.width = _iSizeX+'px';}}
			if (_iSizeY != null) {if (_iSizeY >= 0) {_oFrameset.style.height = _iSizeY+'px';}}
			this.framesetResizeFramesSizes(_sFramesetID);
		}
	}
	
	this.framesetResizeFramesSizes = function(_sFramesetID)
	{
		var _oFrame = null;
		var _oFrameBehavior = null;
		var _iFrameBehavior = 0;
		var _oFramesetFrameCount = this.oDocument.getElementById(_sFramesetID+'FrameCount');
		var _oFramesetFrameDynamicCount = this.oDocument.getElementById(_sFramesetID+'FrameDynamicCount');
		var _oFrameset = this.oDocument.getElementById(_sFramesetID);
		if ((_oFrameset) && (_oFramesetFrameCount) && (_oFramesetFrameDynamicCount))
		{
			var _iFramesetSizeX = parseInt(_oFrameset.offsetWidth);
			var _iFramesetSizeY = parseInt(_oFrameset.offsetHeight);
			var _iFramesetFrameCount = parseInt(_oFramesetFrameCount.value);
			var _iFramesetFrameDynamicCount = parseInt(_oFramesetFrameDynamicCount.value);
			
			if ((_iFramesetSizeX != Number.NaN) && (_iFramesetSizeY != Number.NaN)
			&& (_iFramesetFrameCount != Number.NaN) && (_iFramesetFrameDynamicCount != Number.NaN))
			{
				var i = 0;
				var _iAllStaticSizeX = 0;
				var _iAllStaticSizeY = 0;
				var _iAllDynamicSizeX = 0;
				var _iAllDynamicSizeY = 0;
				var _iAllStrictSizeX = 0;
				var _iAllStrictSizeY = 0;
				for (i=0; i<_iFramesetFrameCount; i++)
				{
					_oFrame = this.oDocument.getElementById(_sFramesetID+'Frame'+i+'Container');
					_oFrameBehavior = this.oDocument.getElementById(_sFramesetID+'Frame'+i+'Behavior');
					if ((_oFrame) && (_oFrameBehavior))
					{
						_iFrameBehavior = parseInt(_oFrameBehavior.value);
						if (_iFrameBehavior == PG_CONTROLS_FRAMES_BEHAVIOR_DYNAMIC)
						{
							if (oPGCss.getStyleFloat(_oFrame) == 'left') {_iAllDynamicSizeX += this.framesetGetFrameSizeX(_sFramesetID, i);}
							else {_iAllDynamicSizeY += this.framesetGetFrameSizeY(_sFramesetID, i);}
						}
						else if (_iFrameBehavior == PG_CONTROLS_FRAMES_BEHAVIOR_STATIC)
						{
							if (oPGCss.getStyleFloat(_oFrame) == 'left') {_iAllStaticSizeX += this.framesetGetFrameSizeX(_sFramesetID, i);}
							else {_iAllStaticSizeY += this.framesetGetFrameSizeY(_sFramesetID, i);}
						}
						else if (_iFrameBehavior == PG_CONTROLS_FRAMES_BEHAVIOR_STRICT)
						{
							if (oPGCss.getStyleFloat(_oFrame) == 'left') {_iAllStrictSizeX += this.framesetGetFrameSizeX(_sFramesetID, i);}
							else {_iAllStrictSizeY += this.framesetGetFrameSizeY(_sFramesetID, i);}
						}
					}
				}
				
				var _iPercent = 0;
				var _iNewSizeX = 0;
				var _iNewSizeY = 0;
				var _iCureentSizeX = 0;
				var _iCureentSizeY = 0;
				for (i=0; i<_iFramesetFrameCount; i++)
				{
					_oFrame = this.oDocument.getElementById(_sFramesetID+'Frame'+i+'Container');
					_oFrameBehavior = this.oDocument.getElementById(_sFramesetID+'Frame'+i+'Behavior');
					if ((_oFrame) && (_oFrameBehavior))
					{
						_iPercent = 0;
						_iNewSizeX = -1;
						_iNewSizeY = -1;
						_iCureentSizeX = this.framesetGetFrameSizeX(_sFramesetID, i);
						_iCureentSizeY = this.framesetGetFrameSizeY(_sFramesetID, i);
						_iFrameBehavior = parseInt(_oFrameBehavior.value);
						
						if ((_iCureentSizeX != Number.NaN) && (_iCureentSizeY != Number.NaN))
						{
							if (oPGCss.getStyleFloat(_oFrame) == 'left')
							{
								if (_iFramesetSizeX-((_iFramesetFrameCount-1)*5)-_iAllStaticSizeX-_iAllStrictSizeX >= 0)
								{
									if (_iFrameBehavior == PG_CONTROLS_FRAMES_BEHAVIOR_DYNAMIC)
									{
										_iPercent = Math.round(_iCureentSizeX/_iAllDynamicSizeX*100);
										_iNewSizeX = Math.round((_iFramesetSizeX-_iAllStaticSizeX-_iAllStrictSizeX-((_iFramesetFrameCount-1)*5))/100*_iPercent);
									}
								}
								else if (_iFrameBehavior != PG_CONTROLS_FRAMES_BEHAVIOR_STRICT)
								{
									_iPercent = Math.round(_iCureentSizeX/(_iAllDynamicSizeX+_iAllStaticSizeX+_iAllStrictSizeX)*100);
									_iNewSizeX = Math.round((_iFramesetSizeX-((_iFramesetFrameCount-1)*5)-_iAllStrictSizeX)/100*_iPercent);
								}
							}
							else
							{
								if (_iFramesetSizeY-((_iFramesetFrameCount-1)*5)-_iAllStaticSizeY-_iAllStrictSizeY >= 0)
								{
									if (_iFrameBehavior == PG_CONTROLS_FRAMES_BEHAVIOR_DYNAMIC)
									{
										_iPercent = Math.round(_iCureentSizeY/_iAllDynamicSizeY*100);
										_iNewSizeY = Math.round((_iFramesetSizeY-_iAllStaticSizeY-_iAllStrictSizeY-((_iFramesetFrameCount-1)*5))/100*_iPercent);
									}
								}
								else if (_iFrameBehavior != PG_CONTROLS_FRAMES_BEHAVIOR_STRICT)
								{
									_iPercent = Math.round(_iCureentSizeY/(_iAllDynamicSizeY+_iAllStaticSizeY+_iAllStrictSizeY)*100);
									_iNewSizeY = Math.round((_iFramesetSizeY-((_iFramesetFrameCount-1)*5)-_iAllStrictSizeY)/100*_iPercent);
								}
							}
							
							if (_iFrameBehavior == PG_CONTROLS_FRAMES_BEHAVIOR_DYNAMIC)
							{
								if (_iNewSizeX >= 0) {this.setScrollDivSizeX(_sFramesetID+'Frame'+i, _iNewSizeX+'px');}
								if (_iNewSizeY >= 0) {this.setScrollDivSizeY(_sFramesetID+'Frame'+i, _iNewSizeY+'px');}
							}
							else if (_iFrameBehavior != PG_CONTROLS_FRAMES_BEHAVIOR_STRICT)
							{
								if (_iNewSizeX >= 0) {this.setScrollDivSizeX(_sFramesetID+'Frame'+i, _iNewSizeX+'px');}
								if (_iNewSizeY >= 0) {this.setScrollDivSizeY(_sFramesetID+'Frame'+i, _iNewSizeY+'px');}
							}
							this.recalculateScrollDivElements(_sFramesetID+'Frame'+i);
						}
					}
				}
			}
		}
	}
	
	// Tabs...
	this.buildTabs = function(_sContainerID, _sTabsID, _sWidth, _iHeight, _axTabs, _sOverflow, _bMultirow, _sCssClassTabs, _sCssClassFrame) {/*todo*/}
	this.buildTabArray = function(_sName, _sContent) {return new Array(_sName, _sContent);}
	this.tabsTabOnClick = function(_sTabsID, _iTabID) {/*todo*/}
	this.tabsTabMoveLeft = function() {/*todo*/}
	this.tabsTabMoveRight = function() {/*todo*/}
	
	// Button...
	this.buildButton = function(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick) {return this.buildButton2(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick, null);}
	this.buildButton2 = function(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick, _sSizeX) {return this.buildButton3(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick, _sSizeX, null);}
	this.buildButton3 = function(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick, _sSizeX, _bDisplay) {return this.buildButton4(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick, _sSizeX, _bDisplay, null);}
	this.buildButton4 = function(_sButtonID, _sText, _iButtonMode, _iTabIndex, _sJsExecuteOnClick, _sSizeX, _bDisplay, _sAjaxSendParameters)
	{
		var _sHTML = '';
		_sHTML += '<div id="'+_sButtonID+'" ';
		_sHTML += 'onmousedown="oPGControls.buttonOnMouseDown(\''+_sButtonID+'\'); " ';
		_sHTML += 'onmouseup="';
		if (_sJsExecuteOnClick != '') {_sHTML += _sJsExecuteOnClick.replace(/"/g, '\"')+' ';}
		_sHTML += 'oPGControls.buttonOnMouseUp(\''+_sButtonID+'\');" ';
		_sHTML += 'onmouseover="oPGControls.buttonOnMouseOver(\''+_sButtonID+'\');" ';
		_sHTML += 'onmouseout="oPGControls.buttonOnMouseOut(\''+_sButtonID+'\');" ';
		_sHTML += 'style="';
		if ((_sSizeX != null) && (_sSizeX != '')) {_sHTML += 'width:'+_sSizeX+'; ';}
		_sHTML += 'position:relative; cursor:default; float:left;">';
		_sHTML += '<table id="'+_sButtonID+'ButtonNormal" style="width:'+_sSizeX+'; display:block; border-width:0px;" cellpadding="0" cellspacing="0">';
		_sHTML += '<tr>';
			if (this.oGFXPack) {if (this.sImageButtonLeft != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeft)+'</td>';}}
			else {if (this.sCssClassButtonLeft != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonLeft+'" style="border-width:0px;" unselectable="on" /></td>';}}
			_sHTML += '<td background="';
			if (this.oGFXPack) {_sHTML += this.oGFXPack.getGfxPath()+this.oGFXPack.getGfxSubPathImages();}
			_sHTML += this.sImagePath+this.sImageButtonFiller+'" ';
			_sHTML += 'style="background-repeat:repeat-x; background-position:center center; background-color:transparent; text-align:center; vertical-align:middle; ';
			if ((_sSizeX != null) && (_sSizeX != '')) {_sHTML += 'width:100%; ';}
			_sHTML += '"><nobr>'+_sText+'</nobr></td>';
			if (this.oGFXPack) {if (this.sImageButtonRight != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRight)+'</td>';}}
			else {if (this.sCssClassButtonRight != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonRight+'" style="border-width:0px;" unselectable="on" /></td>';}}
		_sHTML += '</tr>';
		_sHTML += '</table>';
		_sHTML += '<table id="'+_sButtonID+'ButtonHover" style="display:none; border-width:0px;" cellpadding="0" cellspacing="0">';
		_sHTML += '<tr>';
			if (this.oGFXPack) {if (this.sImageButtonLeftHover != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeftHover)+'</td>';}}
			else {if (this.sCssClassButtonLeftHover != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonLeftHover+'" style="border-width:0px;" unselectable="on" /></td>';}}
			_sHTML += '<td background="';
			if (this.oGFXPack) {_sHTML += this.oGFXPack.getGfxPath()+this.oGFXPack.getGfxSubPathImages();}
			_sHTML += this.sImagePath+this.sImageButtonFillerHover+'" ';
			_sHTML += 'style="background-repeat:repeat-x; background-position:center center; background-color:transparent; text-align:center; vertical-align:middle; ';
			if ((_sSizeX != null) && (_sSizeX != '')) {_sHTML += 'width:100%; ';}
			_sHTML += '"><nobr>'+_sText+'</nobr></td>';
			if (this.oGFXPack) {if (this.sImageButtonRightHover != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRightHover)+'</td>';}}
			else {if (this.sCssClassButtonRightHover != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonRightHover+'" style="border-width:0px;" unselectable="on" /></td>';}}
		_sHTML += '</tr>';
		_sHTML += '</table>';
		_sHTML += '<table id="'+_sButtonID+'ButtonDown" style="display:none; border-width:0px;" cellpadding="0" cellspacing="0">';
		_sHTML += '<tr>';
			if (this.oGFXPack) {if (this.sImageButtonLeftDown != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeftDown)+'</td>';}}
			else {if (this.sCssClassButtonLeftDown != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonLeftDown+'" style="border-width:0px;" unselectable="on" /></td>';}}
			_sHTML += '<td background="';
			if (this.oGFXPack) {_sHTML += this.oGFXPack.getGfxPath()+this.oGFXPack.getGfxSubPathImages();}
			_sHTML += this.sImagePath+this.sImageButtonFillerDown+'" ';
			_sHTML += 'style="background-repeat:repeat-x; background-position:center center; background-color:transparent; text-align:center; vertical-align:middle; ';
			if ((_sSizeX != null) && (_sSizeX != '')) {_sHTML += 'width:100%; ';}
			_sHTML += '"><nobr>'+_sText+'</nobr></td>';
			if (this.oGFXPack) {if (this.sImageButtonRightDown != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRightDown)+'</td>';}}
			else {if (this.sCssClassButtonRightDown != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonRightDown+'" style="border-width:0px;" unselectable="on" /></td>';}}
		_sHTML += '</tr>';
		_sHTML += '</table>';
		_sHTML += '<input type="hidden" id="'+_sButtonID+'ControlsType" value="'+PG_CONTROLS_TYPE_BUTTON+'" />';
		_sHTML += '</div>';
		return _sHTML;
	}
	
	this.buttonHideAllStates = function(_sButtonID)
	{
		var _oButtonNormal = this.oDocument.getElementById(_sButtonID+'ButtonNormal');
		if (_oButtonNormal) {_oButtonNormal.style.display = 'none';}
		
		var _oButtonHover = this.oDocument.getElementById(_sButtonID+'ButtonHover');
		if (_oButtonHover) {_oButtonHover.style.display = 'none';}

		var _oButtonDown = this.oDocument.getElementById(_sButtonID+'ButtonDown');
		if (_oButtonDown) {_oButtonDown.style.display = 'none';}
	}
	
	this.buttonOnMouseOver = function(_sButtonID)
	{
		this.sMouseOverControlID = _sButtonID;
		this.buttonHideAllStates(_sButtonID);
		if (this.sMouseDownControlID == _sButtonID)
		{
			var _oButtonDown = this.oDocument.getElementById(_sButtonID+'ButtonDown');
			if (_oButtonDown) {_oButtonDown.style.display = 'block';}
		}
		else
		{
			var _oButtonHover = this.oDocument.getElementById(_sButtonID+'ButtonHover');
			if (_oButtonHover) {_oButtonHover.style.display = 'block';}
		}
	}
	
	this.buttonOnMouseOut = function(_sButtonID)
	{
		if (this.sMouseOverControlID == _sButtonID) {this.sMouseOverControlID = '';}
		this.buttonHideAllStates(_sButtonID);
		var _oButtonNormal = this.oDocument.getElementById(_sButtonID+'ButtonNormal');
		if (_oButtonNormal) {_oButtonNormal.style.display = 'block';}
	}
	
	this.buttonOnMouseDown = function(_sButtonID)
	{
		this.sMouseDownControlID = _sButtonID;
		this.buttonHideAllStates(_sButtonID);
		var _oButtonDown = this.oDocument.getElementById(_sButtonID+'ButtonDown');
		if (_oButtonDown) {_oButtonDown.style.display = 'block';}
		if (oPGBrowser) {oPGBrowser.disableSelect();}
		return false;
	}

	this.buttonOnMouseUp = function(_sButtonID)
	{
		if (this.sMouseDownControlID == _sButtonID) {this.sMouseDownControlID = '';}
		this.buttonHideAllStates(_sButtonID);
		var _oButtonHover = this.oDocument.getElementById(_sButtonID+'ButtonHover');
		if (_oButtonHover) {_oButtonHover.style.display = 'block';}
	}

	this.buttonGlobalOnMouseUp = function()
	{
		if (this.sMouseDownControlID != '')
		{
			var _oControlType = this.oDocument.getElementById(this.sMouseDownControlID+'ControlsType');
			if (_oControlType)
			{
				if (parseInt(_oControlType.value) == PG_CONTROLS_TYPE_BUTTON)
				{
					this.sMouseDownControlID = '';
					this.buttonHideAllStates(this.sMouseDownControlID);
					if (this.sMouseOverControlID == this.sMouseDownControlID)
					{
						var _oButtonHover = this.oDocument.getElementById(this.sMouseDownControlID+'ButtonHover');
						if (_oButtonHover) {_oButtonHover.style.display = 'block';}
					}
					else
					{
						var _oButtonNormal = this.oDocument.getElementById(this.sMouseDownControlID+'ButtonNormal');
						if (_oButtonNormal) {_oButtonNormal.style.display = 'block';}
					}
				}
			}
		}
	}

	// Input field...
	this.setInputFieldKeyResponseWaitToSearch = function(_iMilliseconds) {this.iInputFieldKeyResponseWaitToSearch = _iMilliseconds;}
	this.getInputFieldKeyResponseWaitToSearch = function() {return this.iInputFieldKeyResponseWaitToSearch;}
	
	this.setCssStyleInputFieldDatasetHover = function(_sCssStyle) {this.sCssStyleInputFieldDatasetHover = _sCssStyle;}
	this.getCssStyleInputFieldDatasetHover = function() {return this.sCssStyleInputFieldDatasetHover;}
	
	this.setCssStyleInputFieldDataSaved = function(_sCssStyle) {this.sCssStyleInputFieldDataSaved = _sCssStyle;}
	this.getCssStyleInputFieldDataSaved = function() {return this.sCssStyleInputFieldDataSaved;}
	
	this.setCssStyleInputFieldDataWrong = function(_sCssStyle) {this.sCssStyleInputFieldDataWrong = _sCssStyle;}
	this.getCssStyleInputFieldDataWrong = function() {return this.sCssStyleInputFieldDataWrong;}

	this.setCssStyleInputFieldDataNotSaved = function(_sCssStyle) {this.sCssStyleInputFieldDataNotSaved = _sCssStyle;}
	this.getCssStyleInputFieldDataNotSaved = function() {return this.sCssStyleInputFieldDataNotSaved;}
	
	this.setCssStyleInputFieldNoData = function(_sCssStyle) {this.sCssStyleInputFieldNoData = _sCssStyle;}
	this.getCssStyleInputFieldNoData = function() {return this.sCssStyleInputFieldNoData;}
	
	this.setInputFieldData = function(_sInputFieldID, _xDataID, _axDataFields)
	{
		var _oInputField = null;
		
		if (_xDataID != null)
		{
			_oInputField = this.oDocument.getElementById(_sInputFieldID+"DataID");
			if (_oInputField) {_oInputField.value = _xDataID;}
		}

		var _oIsNoData = null;
		for (var i=0; i<_axDataFields.length; i++)
		{
			_oIsNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+i+'IsNoData');
			_oInputField = this.oDocument.getElementById(_sInputFieldID+"Field"+i);
			if ((_oInputField) && (_oIsNoData))
			{
				_oInputField.value = _axDataFields[i];
				_oIsNoData.value = 0;
			}
		}
	}
	
	this.getInputFieldDataValues = function(_sInputFieldID)
	{
		var _axDataFields = new Array();
		var _oInputFieldCount = this.oDocument.getElementById(_sInputFieldID+"FieldCount");
		if (_oInputFieldCount)
		{
			var _oInputField = null;
			var _iFieldCount = parseInt(_oInputFieldCount.value);
			if (!isNaN(_iFieldCount))
			{
				for (var i=0; i<_iFieldCount; i++)
				{
					_oInputField = this.oDocument.getElementById(_sInputFieldID+"Field"+i);
					if (_oInputField) {_axDataFields.push(_oInputField.value);}
				}
			}
		}
		return _axDataFields;
	}
	
	this.getInputFieldDataID = function(_sInputFieldID)
	{
		var _oDataID = this.oDocument.getElementById(_sInputFieldID+'DataID');
		if (_oDataID) {return _oDataID.value;}
		return '';
	}
	
	this.buildInputField = function(_sContainerID, _sInputFieldID, _iInputFieldMode, _iTabIndex) {return this.buildInputField2(_sContainerID, _sInputFieldID, _iInputFieldMode, null, null, null, _iTabIndex);}
	this.buildInputField2 = function(_sContainerID, _sInputFieldID, _iInputFieldMode, _axInputField, _axInputFieldData, _xDefaultDataID, _iTabIndex, _iDropdownZIndex, _sAjaxSendParameters)
	{
		return this.buildInputField3(_sContainerID, _sInputFieldID, _iInputFieldMode, _axInputField, _axInputFieldData, _xDefaultDataID, _iTabIndex, _iDropdownZIndex, _sAjaxSendParameters, null, null, null, null);
	}
	this.buildInputField3 = function(_sContainerID, _sInputFieldID, _iInputFieldMode, _axInputField, _axInputFieldData, _xDefaultDataID, _iTabIndex, _iDropdownZIndex, _sAjaxSendParameters, _sOnDatasetSelect, _sOnDatasetCreate, _sOnDatasetUpdate, _sOnDatasetDelete)
	{
		var i=0;
		var t=0;
		if (_xDefaultDataID == null) {_xDefaultDataID = '';}
		if (_axInputField == null) {_axInputField = new Array(this.buildInputFieldArray(150, _sInputFieldID, null, null, 0));}
		var _iFullSizeX = 0;
		var _sHTML = '';
		_sHTML += '<div id="'+_sInputFieldID+'" style="float:left; position:relative;" onmouseover="oPGControls.inputFieldOnMouseOver(\''+_sInputFieldID+'\');" onmouseout="oPGControls.inputFieldOnMouseOut(\''+_sInputFieldID+'\');">';
		_sHTML += '<table style="border-width:0px;" cellpadding="0" cellspacing="0">';
		_sHTML += '<tr>';
			for (i=0; i<_axInputField.length; i++)
			{
				if (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NAME] == '') {_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NAME] = _sInputFieldID+'Field'+i;}
				if (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_WIDTH] < 1) {_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_WIDTH] = 150;}
				if (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] == null) {_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] = '';}
				if (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NODATA] == null) {_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NODATA] = '';}
				_iFullSizeX += _axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_WIDTH]+2;
				
				// Field...
				_sHTML += '<td>';
				_sHTML += '<input type="text" id="'+_sInputFieldID+'Field'+i+'" style="';
				if ((_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] != '') && (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] != null)) {_sHTML += this.sCssStyleInputField+' ';}
				else {_sHTML += this.sCssStyleInputFieldNoData+' ';}
				_sHTML += 'padding-left:0px; padding-right:0px; margin-left:0px; margin-right:0px; ';
				_sHTML += 'width:'+_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_WIDTH]+'px; ';
				_sHTML += '" name="'+_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NAME]+'" ';
				if (_iTabIndex > 0) {_sHTML += 'tabindex="'+(_iTabIndex+i)+'" ';}
				if (!this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_AUTOCOMPLETE)) {_sHTML += 'autocomplete="off" ';}
				if (this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_READONLY)) {_sHTML += 'readonly ';}
				if (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_MAXLENGTH] > 0) {_sHTML += 'maxlength="'+_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_MAXLENGTH]+'" ';}
				_sHTML += 'onkeydown="oPGControls.inputFieldOnKeyDown(\''+_sInputFieldID+'\');" ';
				_sHTML += 'onkeyup="oPGControls.inputFieldOnKeyUp(\''+_sInputFieldID+'\');" ';
				_sHTML += 'onblur="oPGControls.inputFieldOnBlur(\''+_sInputFieldID+'\', '+i+');" ';
				_sHTML += 'onfocus="oPGControls.inputFieldOnFocus(\''+_sInputFieldID+'\', '+i+');" ';
				_sHTML += 'value="';
				if ((_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] != '') && (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] != null)) {_sHTML += _axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT];}
				else {_sHTML += _axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NODATA];}
				_sHTML += '" />';
				
				// Required...
				_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Field'+i+'Required" ';
				if (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_REQUIRED] == true) {_sHTML += 'value="1" ';} else {_sHTML += 'value="0" ';}
				_sHTML += ' name="'+_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NAME]+'Required" />';
				
				// Is NoData...
				_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Field'+i+'NoData" value="'+_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_NODATA]+'" />';
				_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Field'+i+'IsNoData" value="';
				if ((_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] != '') && (_axInputField[i][PG_CONTROLS_INPUTFIELD_INDEX_DEFAULT] != null)) {_sHTML += '0';}
				else {_sHTML += '1';}
				_sHTML += '" />';

				_sHTML += '</td>';
			}
			
			// Dropdown...
			if (this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_DROPDOWN))
			{
				// Dropdown button...
				// TODO: austauschen durch controls button
				_sHTML += '<td>';
				_sHTML += '<div ';
				_sHTML += 'onmouseover="oPGControls.inputFieldChangeDropdownButton(\''+_sInputFieldID+'\', \'Hover\');" ';
				_sHTML += 'onmouseout="oPGControls.inputFieldChangeDropdownButton(\''+_sInputFieldID+'\', \'Normal\');" ';
				_sHTML += 'class="'+this.sCssClassButton+'">';
				_sHTML += '<table id="'+_sInputFieldID+'DropdownButtonNormal" onclick="oPGControls.inputFieldShowDropdown(\''+_sInputFieldID+'\');" style="display:block; border-width:0px;" cellpadding="0" cellspacing="0">';
				_sHTML += '<tr>';
					if (this.oGFXPack)
					{
						if (this.sImageButtonLeft != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeft)+'</td>';}
						_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageInputFieldDropdownButton)+'</td>';
						if (this.sImageButtonRight != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRight)+'</td>';}
					}
					else
					{
						if (this.sImageButtonLeft != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sImageButtonLeft+'" style="border-width:0px;" unselectable="on" /></td>';}
						_sHTML += '<td><img src="'+this.sImagePath+this.sImageInputFieldDropdownButton+'" style="border-width:0px;" unselectable="on" /></td>';
						if (this.sImageButtonRight != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sImageButtonRight+'" style="border-width:0px;" unselectable="on" /></td>';}
					}
				_sHTML += '</tr>';
				_sHTML += '</table>';
				_sHTML += '<table id="'+_sInputFieldID+'DropdownButtonHover" onclick="oPGControls.inputFieldShowDropdown(\''+_sInputFieldID+'\');" style="display:none; border-width:0px;" cellpadding="0" cellspacing="0">';
				_sHTML += '<tr>';
					if (this.oGFXPack)
					{
						if (this.sImageButtonLeftHover != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeftHover)+'</td>';}
						_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageInputFieldDropdownButtonHover)+'</td>';
						if (this.sImageButtonRightHover != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRightHover)+'</td>';}
					}
					else
					{
						if (this.sCssClassButtonLeftHover != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonLeftHover+'" style="border-width:0px;" unselectable="on" /></td>';}
						_sHTML += '<td><img src="'+this.sImagePath+this.sImageInputFieldDropdownButtonHover+'" style="border-width:0px;" unselectable="on" /></td>';
						if (this.sCssClassButtonRightHover != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonRightHover+'" style="border-width:0px;" unselectable="on" /></td>';}
					}
				_sHTML += '</tr>';
				_sHTML += '</table>';
				_sHTML += '<table id="'+_sInputFieldID+'DropdownButtonHideNormal" onclick="oPGControls.inputFieldHideDropdown(\''+_sInputFieldID+'\');" style="display:none; border-width:0px;" cellpadding="0" cellspacing="0">';
				_sHTML += '<tr>';
					if (this.oGFXPack)
					{
						if (this.sImageButtonLeft != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeft)+'</td>';}
						_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageInputFieldDropdownButtonHide)+'</td>';
						if (this.sImageButtonRight != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRight)+'</td>';}
					}
					else
					{
						if (this.sImageButtonLeft != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sImageButtonLeft+'" style="border-width:0px;" unselectable="on" /></td>';}
						_sHTML += '<td><img src="'+this.sImagePath+this.sImageInputFieldDropdownButtonHide+'" style="border-width:0px;" unselectable="on" /></td>';
						if (this.sImageButtonRight != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sImageButtonRight+'" style="border-width:0px;" unselectable="on" /></td>';}
					}
				_sHTML += '</tr>';
				_sHTML += '</table>';
				_sHTML += '<table id="'+_sInputFieldID+'DropdownButtonHideHover" onclick="oPGControls.inputFieldHideDropdown(\''+_sInputFieldID+'\');" style="display:none; border-width:0px;" cellpadding="0" cellspacing="0">';
				_sHTML += '<tr>';
					if (this.oGFXPack)
					{
						if (this.sImageButtonLeftHover != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonLeftHover)+'</td>';}
						_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageInputFieldDropdownButtonHideHover)+'</td>';
						if (this.sImageButtonRightHover != '') {_sHTML += '<td>'+this.oGFXPack.img(this.sImagePath+this.sImageButtonRightHover)+'</td>';}
					}
					else
					{
						if (this.sCssClassButtonLeftHover != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonLeftHover+'" style="border-width:0px;" unselectable="on" /></td>';}
						_sHTML += '<td><img src="'+this.sImagePath+this.sImageInputFieldDropdownButtonHideHover+'" style="border-width:0px;" unselectable="on" /></td>';
						if (this.sCssClassButtonRightHover != '') {_sHTML += '<td><img src="'+this.sImagePath+this.sCssClassButtonRightHover+'" style="border-width:0px;" unselectable="on" /></td>';}
					}
				_sHTML += '</tr>';
				_sHTML += '</table>';
				_sHTML += '</div>';
				_sHTML += '</td>';
			}
			
		_sHTML += '</tr>';
		_sHTML += '</table>';
		
		// Dropdown...
		if (this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_DROPDOWN))
		{
			// Dropdown div...
			_sHTML += '<div id="'+_sInputFieldID+'DropdownDiv" style="position:absolute; top:0px; left:0px; display:none; ';
			if (_iDropdownZIndex != null) {_sHTML += 'z-index:'+_iDropdownZIndex+'; ';}
			_sHTML += 'width:'+(_iFullSizeX+22)+'px; border:solid 1px #000000; background-color:#FFFFFF;">';
				_sHTML += '<div id="'+_sInputFieldID+'DropdownDataDiv" style="overflow:auto; width:'+(_iFullSizeX+22)+'px; height:150px;">';
				for (i=0; i<_axInputFieldData.length; i++)
				{
					_sHighlightArray = 'new Array(\''+_sInputFieldID+'Dataset'+i+'\')';
					
					_sHTML += '<table id="'+_sInputFieldID+'Dataset'+i+'" style="border-collapse:collapse; cursor:default;" ';
					_sHTML += 'onmouseover="if (typeof(oPGHover) != \'undefined\') {oPGHover.showHighlight('+_sHighlightArray+', \'border-collapse:collapse; cursor:default; '+this.sCssStyleInputFieldDatasetHover+'\');}" ';
					_sHTML += 'onmouseout="if (typeof(oPGHover) != \'undefined\') {oPGHover.hideHighlight();}" ';
					_sHTML += 'cellpadding="0" cellspacing="0">';
					_sHTML += '<tr>';
						_sHTML += '<td id="'+_sInputFieldID+'Dataset'+i+'Panel" style="display:none; border-style:solid; border-color:#CCCCCC; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px; padding:0px;">';
						// _sHTML += '<span onclick="oPGControls.inputFieldShowDatasetQuestion(\''+_sInputFieldID+'\', \'delete?\', \'oPGControls.inputFieldOnDeleteDatasetWithIndex(\\\''+_sInputFieldID+'\\\', '+i+');\', \'\');">[del]</span>';
						_iButtonMode = 0;
// TODO!
//						_sHTML += this.buildButton2(_sInputFieldID+'Dataset'+i+'DeleteButton', 'delete', _iButtonMode, null, "oPGControls.inputFieldShowDatasetQuestion('"+_sInputFieldID+"', 'delete?', 'oPGControls.inputFieldOnDeleteDatasetWithIndex(\'"+_sInputFieldID+"\', "+i+");', '');", null);
						_sHTML += '</td>';
						for (t=PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD; t<_axInputFieldData[i].length; t++)
						{
							if (_axInputField.length > t-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD) {_iWidth = _axInputField[t-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD][PG_CONTROLS_INPUTFIELD_INDEX_WIDTH]+1;}
							else {_iWidth = 151;}
							_sHTML += '<td onclick="';
							_sHTML += 'oPGControls.inputFieldOnSelectDataset(\''+_sInputFieldID+'\', '+i+'); ';
							if ((_sOnDatasetSelect != '') && (_sOnDatasetSelect != null)) {_sHTML += _sOnDatasetSelect.replace(/"/g, '\"');}
							_sHTML += '" ';
							_sHTML += 'style="border-style:solid; border-color:#CCCCCC; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px; padding:0px;">';
							_sHTML += '<div style="width:'+_iWidth+'px; overflow:hidden; cursor:default; background-color:transparent;">';
							_sHTML += _axInputFieldData[i][t];
							_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Dataset'+i+'Field'+(t-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD)+'" value="'+_axInputFieldData[i][t]+'" />';
							_sHTML += '</div>';
							_sHTML += '</td>';
						}
					_sHTML += '</tr>';
					_sHTML += '</table>';
					_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Dataset'+i+'ID" value="'+_axInputFieldData[i][PG_CONTROLS_INPUTFIELD_DATASET_INDEX_ID]+'" />';
					_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Dataset'+i+'FieldCount" value="'+(_axInputFieldData[i].length-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD)+'" />';
				}
				_sHTML += '</div>';
				_sHTML += '<div style="text-align:center; overflow:hidden; width:'+(_iFullSizeX+22)+'px;">';
				if (this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_CREATE))
				{
					_iButtonMode = 0;
					_sHTML += this.buildButton2(_sInputFieldID+'DatasetCreateButton', 'create dataset', _iButtonMode, null, "oPGControls.inputFieldOnCreateDataset('"+_sInputFieldID+"'); "+_sOnDatasetCreate+" window.setTimeout('oPGControls.inputFieldShowDropdown(\'"+_sInputFieldID+"\')', 100);", '100%');
				}

				if (this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_UPDATE))
				{
					_iButtonMode = 0;
					_sHTML += this.buildButton2(_sInputFieldID+'DatasetUpdateButton', 'update dataset', _iButtonMode, null, "oPGControls.inputFieldOnUpdateDataset('"+_sInputFieldID+"'); "+_sOnDatasetUpdate+" window.setTimeout('oPGControls.inputFieldShowDropdown(\'"+_sInputFieldID+"\')', 100);", '100%');
				}

				if (this.isInputFieldMode(_iInputFieldMode, PG_CONTROLS_INPUTFIELD_MODE_DELETE))
				{
					_iButtonMode = 0;
					_sHTML += this.buildButton2(_sInputFieldID+'SwitchEditModeButton', 'switch edit mode', _iButtonMode, null, "oPGControls.inputFieldOnSwitchDatasetEditMode('"+_sInputFieldID+"'); window.setTimeout('oPGControls.inputFieldShowDropdown(\'"+_sInputFieldID+"\')', 100);", '100%');
				}
				_sHTML += '</div>';
			_sHTML += '<div id="'+_sInputFieldID+'DropdownOverlay" style="display:none; position:absolute; top:0px; left:0px; width:'+(_iFullSizeX+22)+'px; height:150px; background-color:#000000;">&nbsp;</div>';
			_sHTML += '</div>';
		}
		
		_sHiddenType = 'hidden';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH))
		{
			_sHiddenType = 'text';
			_sHTML += '<table>';
		}
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '<tr><td>OldFieldValue:</td><td>';}			_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'OldFieldValue" name="'+_sInputFieldID+'OldFieldValue" value="" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>OldFieldID:</td><td>';}		_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'OldFieldID" name="'+_sInputFieldID+'OldFieldID" value="" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>SelectedIndex:</td><td>';}	_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'SelectedIndex" name="'+_sInputFieldID+'SelectedIndex" value="" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>DataID:</td><td>';}			_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'DataID" name="'+_sInputFieldID+'DataID" value="'+_xDefaultDataID+'" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>Mode:</td><td>';}			_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'Mode" name="'+_sInputFieldID+'Mode" value="'+_iInputFieldMode+'" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>FieldCount:</td><td>';}		_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'FieldCount" name="'+_sInputFieldID+'FieldCount" value="'+_axInputField.length+'" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>DatasetCount:</td><td>';}	_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'DatasetCount" name="'+_sInputFieldID+'DatasetCount" value="'+_axInputFieldData.length+'" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH)) {_sHTML += '</td></tr><tr><td>AjaxSendParams:</td><td>';}	_sHTML += '<input type="'+_sHiddenType+'" id="'+_sInputFieldID+'AjaxSendParams" name="'+_sInputFieldID+'AjaxSendParams" value="'+_sAjaxSendParameters+'" />';
		if (this.isDebugMode(PG_CONTROLS_DEBUG_HIGH))
		{
			_sHTML += '</td></tr>';
			_sHTML += '</table>';
		}

		_sHTML += '</div>';
		
		if ((_sContainerID != null) && (_sContainerID != ''))
		{
			var _oContainer = this.oDocument.getElementById(_sContainerID);
			if (_oContainer) {_oContainer += _sHTML;}
		}

		return _sHTML;
	}
	
	this.inputFieldChangeDropdownButton = function(_sInputFieldID, _sToDisplay)
	{
		var _oDropdownButtonNormal = this.oDocument.getElementById(_sInputFieldID+'DropdownButtonNormal');
		if (_oDropdownButtonNormal) {_oDropdownButtonNormal.style.display = 'none';}
		
		var _oDropdownButtonHover = this.oDocument.getElementById(_sInputFieldID+'DropdownButtonHover');
		if (_oDropdownButtonHover) {_oDropdownButtonHover.style.display = 'none';}
		
		var _oDropdownButtonHideNormal = this.oDocument.getElementById(_sInputFieldID+'DropdownButtonHideNormal');
		if (_oDropdownButtonHideNormal) {_oDropdownButtonHideNormal.style.display = 'none';}
		
		var _oDropdownButtonHideHover = this.oDocument.getElementById(_sInputFieldID+'DropdownButtonHideHover');
		if (_oDropdownButtonHideHover) {_oDropdownButtonHideHover.style.display = 'none';}
		
		var _oDropdownDiv = this.oDocument.getElementById(_sInputFieldID+'DropdownDiv');
		if (_oDropdownDiv)
		{
			if (_oDropdownDiv.style.display == 'none')
			{
				var _oDropdownButtonToDisplay = this.oDocument.getElementById(_sInputFieldID+'DropdownButton'+_sToDisplay);
				if (_oDropdownButtonToDisplay) {_oDropdownButtonToDisplay.style.display = 'block';}
			}
			else
			{
				var _oDropdownButtonToDisplay = this.oDocument.getElementById(_sInputFieldID+'DropdownButtonHide'+_sToDisplay);
				if (_oDropdownButtonToDisplay) {_oDropdownButtonToDisplay.style.display = 'block';}
			}
		}
	}

	this.inputFieldShowDropdown = function(_sInputFieldID)
	{
		var _oDropdownDiv = this.oDocument.getElementById(_sInputFieldID+'DropdownDiv');
		var _oInputField = this.oDocument.getElementById(_sInputFieldID+'Field0');
		if ((_oDropdownDiv) && (_oInputField))
		{
			_oDropdownDiv.style.top = parseInt(_oInputField.offsetHeight)+'px';
			_oDropdownDiv.style.display = 'block';
			this.inputFieldChangeDropdownButton(_sInputFieldID, 'Normal');
			this.sInputFieldLastOpenedDropdownID = _sInputFieldID;
		}
	}
	
	this.inputFieldHideDropdown = function(_sInputFieldID)
	{
		var _oDropdownDiv = this.oDocument.getElementById(_sInputFieldID+'DropdownDiv');
		if (_oDropdownDiv)
		{
			_oDropdownDiv.style.display = 'none';
			this.inputFieldChangeDropdownButton(_sInputFieldID, 'Normal');
			if (this.sInputFieldLastOpenedDropdownID == _sInputFieldID) {this.sInputFieldLastOpenedDropdownID = '';}
			
			var _oFieldMode = this.oDocument.getElementById(_sInputFieldID+'Mode');
			if (_oFieldMode)
			{
				var _iFieldMode = parseInt(_oFieldMode.value);
				if (this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_RESETONDROPDOWNCLOSE)) {this.inputFieldReset(_sInputFieldID);}
			}
		}
	}
	
	this.inputFieldSwitchDropdown = function(_sInputFieldID)
	{
		var _oDropdownDiv = this.oDocument.getElementById(_sInputFieldID+'DropdownDiv');
		if (_oDropdownDiv)
		{
			if (_oDropdownDiv.style.display == 'none') {this.inputFieldShowDropdown(_sInputFieldID);}
			else {this.inputFieldHideDropdown(_sInputFieldID);}
		}
	}
	
	this.inputFieldOnSelectDataset = function(_sInputFieldID, _iDatasetIndex)
	{
		this.inputFieldStopReset();
		var _oDataID = this.oDocument.getElementById(_sInputFieldID+'DataID');
		var _oFieldMode = this.oDocument.getElementById(_sInputFieldID+'Mode');
		var _oFieldCount = this.oDocument.getElementById(_sInputFieldID+'FieldCount');
		var _oDatasetID = this.oDocument.getElementById(_sInputFieldID+'Dataset'+_iDatasetIndex+'ID');
		var _oDatasetFieldCount = this.oDocument.getElementById(_sInputFieldID+'Dataset'+_iDatasetIndex+'FieldCount');
		var _oSelectedIndex = this.oDocument.getElementById(_sInputFieldID+'SelectedIndex');
		var _oIsNoData = null;
		if ((_oDataID) && (_oFieldMode) && (_oFieldCount) && (_oDatasetID) && (_oDatasetFieldCount) && (_oSelectedIndex))
		{
			_oSelectedIndex.value = _iDatasetIndex;
			_oDataID.value = _oDatasetID.value;
			var _oField = null;
			var _iFieldMode = parseInt(_oFieldMode.value);
			var _oDatasetField = null;
			var _iFieldCount = parseInt(_oFieldCount.value);
			var _iDatasetFieldCount = parseInt(_oDatasetFieldCount.value);
			if (_iFieldCount > _iDatasetFieldCount) {_iFieldCount = _iDatasetFieldCount;}
			if (!isNaN(_iFieldCount))
			{
				for (var i=0; i<_iFieldCount; i++)
				{
					_oIsNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+i+'IsNoData');
					_oField = this.oDocument.getElementById(_sInputFieldID+'Field'+i);
					_oDatasetField = this.oDocument.getElementById(_sInputFieldID+'Dataset'+_iDatasetIndex+'Field'+i);
					if ((_oField) && (_oDatasetField) && (_oIsNoData))
					{
						_oField.value = _oDatasetField.value;
						_oIsNoData.value = 0;
					}
				}
			}
			this.inputFieldHideDropdown(_sInputFieldID);
			if (this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_AUTOSAVE)) {this.inputFieldAjaxSend(_sInputFieldID, 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONSELECT_DATASET, false);}
		}
	}
	
	this.setInputFieldAjaxFile = function(_sFilePath) {this.sInputFieldAjaxFile = _sFilePath;}
	this.getInputFieldAjaxFile = function() {return this.sInputFieldAjaxFile;}
	
	this.inputFieldAjaxSend = function(_sInputFieldID, _sParameters, _bIgnoreRequired)
	{
		var _oDataID = this.oDocument.getElementById(_sInputFieldID+'DataID');
		var _oFieldCount = this.oDocument.getElementById(_sInputFieldID+'FieldCount');
		if ((_oDataID) && (_oFieldCount))
		{
			var _oField = null;
			var _oFieldRequired = null;
			var _bRequiredField = true;
			var _sDataID = encodeURIComponent(_oDataID.value);
			var _iFieldCount = parseInt(_oFieldCount.value);
			var _oFieldIsNoData = null;
			
			if (_sParameters != '') {_sParameters += '&';}
			_sParameters += 'sInputFieldID='+_sInputFieldID
			_sParameters += '&sDataID='+_sDataID;
			if (_iFieldCount != Number.NaN)
			{
				for (var i=0; i<_iFieldCount; i++)
				{
					_oField = this.oDocument.getElementById(_sInputFieldID+'Field'+i);
					_oFieldRequired = this.oDocument.getElementById(_sInputFieldID+'Field'+i+'Required');
					_oFieldIsNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+i+'IsNoData');
					if ((_oField) && (_oFieldRequired) && (_oFieldIsNoData))
					{
						if (parseInt(_oFieldIsNoData.value) == 1)
						{
							_sParameters += '&asFieldName['+i+']='+encodeURIComponent(_oField.name);
							_sParameters += '&asFieldValue['+i+']=';
						}
						else
						{
							_sParameters += '&asFieldName['+i+']='+encodeURIComponent(_oField.name);
							_sParameters += '&asFieldValue['+i+']='+encodeURIComponent(_oField.value.trim());
						}
						if ((parseInt(_oFieldRequired.value) == 1) && ((_oField.value.trim() == '') || (parseInt(_oFieldIsNoData.value) == 1)))
						{
							_bRequiredField = false;
							if (this.sCssStyleInputFieldDataWrong != '') {this.inputFieldChangeStyle(_sInputFieldID+'Field'+i, this.sCssStyleInputFieldDataWrong);}
						}
					}
				}
			}
			
			var _oAjaxSendParams = this.oDocument.getElementById(_sInputFieldID+'AjaxSendParams');
			if (_oAjaxSendParams) {if (_oAjaxSendParams.value != '') {_sParameters += '&'+_oAjaxSendParams.value;}}
			
			if ((_bRequiredField == true) || (_bIgnoreRequired == true))
			{
				if (this.oAjaxObject != null)
				{
					this.oAjaxRequestObject = this.oAjaxObject.openRequest(this.oAjaxRequestObject, this.sInputFieldAjaxFile, null, null, function() {oPGControls.inputFieldAjaxResult();});
					if (this.oAjaxRequestObject) {this.oAjaxObject.sendRequest(this.oAjaxRequestObject, _sParameters);}
				}
			}
		}
	}
	
	this.inputFieldAjaxResult = function()
	{
		var _sDebug = this.oAjaxObject.getResultDebug(this.oAjaxRequestObject);
		if (_sDebug)
		{
			var _oDebugDiv = this.oDocument.getElementById("DebugDiv");
			if(_oDebugDiv) {_oDebugDiv.innerHTML = _sDebug.replace(/></g, "&gt;\n&lt;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/\n/g, "<br />");}
		}
		var _oXML = this.oAjaxObject.getResultXMLObject(this.oAjaxRequestObject);
		if (_oXML)
		{
			if (typeof(_oXML) == 'string') {alert('ERROR:\n'+_oXML.replace(/></g, ">\n<").replace(/>\n<!\[/g, "><![").replace(/\]\]>\n</g, "]]><"));}
			else
			{
				var _sRequestType = this.oAjaxObject.getResultRequestType(_oXML);
				var _sInputFieldID = this.oAjaxObject.getResultRequestObjectID(_oXML);
				var _sJavaScriptToExecute = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldJavaScriptToExecute'));
				if (_sRequestType == PG_CONTROLS_INPUTFIELD_AJAX_REQUEST_TYPE)
				{
					var _sEvent = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldEvent'));
					if (_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONSEARCH)
					{
						var _xDatasetDataID = '';
						var _axInputFieldData = new Array();
						var _axDatasetFieldValues = new Array();
						var _iDatasetFieldCount = 0;
						var _iDatasetCount = parseInt(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldDatasetCount')));
						if (_iDatasetCount != Number.NaN)
						{
							for (var i=0; i<_iDatasetCount; i++)
							{
								_xDatasetDataID = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldDataset'+i+'DataID'));
								_iDatasetFieldCount = parseInt(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldDataset'+i+'FieldCount')));
								_axDatasetFieldValues = new Array();
								_axDatasetFieldValues.push(_xDatasetDataID);
								for (var t=0; t<_iDatasetFieldCount; t++)
								{
									_axDatasetFieldValues.push(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldDataset'+i+'Field'+t)));
								}
								_axInputFieldData.push(_axDatasetFieldValues);
							}
						}
						
						var _oDropdownDataDiv = this.oDocument.getElementById(_sInputFieldID+'DropdownDataDiv');
						if (_oDropdownDataDiv)
						{
							var _oDatasetCount = this.oDocument.getElementById(_sInputFieldID+'DatasetCount');
							if (_oDatasetCount) {_oDatasetCount.value = _iDatasetCount;}
							_oDropdownDataDiv.innerHTML = this.buildInputFieldDatasets(_sInputFieldID, _axInputFieldData);
							this.inputFieldShowDropdown(_sInputFieldID);
						}
						this.oAjaxRequestObject = null;
					}
					else if ((_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONBLUR) || (_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONSELECT_DATASET))
					{
						if (this.sCssStyleInputFieldDataSaved != '')
						{
							var _iActionStatus = parseInt(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldActionStatus')));
							var _oFieldCount = this.oDocument.getElementById(_sInputFieldID+'FieldCount');
							if (_oFieldCount)
							{
								var _iFieldCount = parseInt(_oFieldCount.value);
								if (_iFieldCount != Number.NaN)
								{
									for (var i=0; i<_iFieldCount; i++)
									{
										if (_iActionStatus == PG_CONTROLS_INPUTFIELD_ACTIONSTATUS_SUCCESS)
										{
											this.inputFieldChangeStyle(_sInputFieldID+'Field'+i, this.sCssStyleInputFieldDataSaved);
										}
										else if (_iActionStatus == PG_CONTROLS_INPUTFIELD_ACTIONSTATUS_FAILED)
										{
											this.inputFieldChangeStyle(_sInputFieldID+'Field'+i, this.sCssStyleInputFieldDataNotSaved);
										}
									}
								}
							}
						}
						this.oAjaxRequestObject = null;
					}
					else if ((_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONCREATE_DATASET) || (_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONUPDATE_DATASET))
					{
						this.oAjaxRequestObject = null;
						if (_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONUPDATE_DATASET)
						{
							var _sDataID = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldDataID'));
							var _oDataID = this.oDocument.getElementById(_sInputFieldID+'DataID');
							if (_oDataID) {_oDataID.value = _sDataID;}
						}
						this.inputFieldOnSearch(_sInputFieldID);
					}
					else if (_sEvent == PG_CONTROLS_INPUTFIELD_EVENT_ONDELETE_DATASET)
					{
						var _iDatasetIndex = parseInt(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_InputFieldDatasetIndex')));
						var _oDatasetTable = this.oDocument.getElementById(_sInputFieldID+'Dataset'+_iDatasetIndex);
						if (_oDatasetTable)
						{
							/*var _oDatasetCount = this.oDocument.getElementById(_sInputFieldID+'DatasetCount');
							if (_oDatasetCount)
							{
								var _iDatasetCount = parseInt(_oDatasetCount.value);
								_oDatasetCount.value = _iDatasetCount-1;
							}*/
							_oDatasetTable.outerHTML = '';
						}
						this.oAjaxRequestObject = null;
					}
				}
				if (_sJavaScriptToExecute != '') {eval(_sJavaScriptToExecute);}
			}
		}
	}
	
	this.inputFieldChangeStyle = function(_sInputFieldID, _sCssStyle)
	{
		var _iWidth = 0;
		var _oField = this.oDocument.getElementById(_sInputFieldID);
		var _sDefaultStyle = 'padding-left:0px; padding-right:0px; margin-left:0px; margin-right:0px;';
		if (_oField)
		{
			_iWidth = parseInt(_oField.style.width);
			// _asHighlightArray = new Array(_sInputFieldID);
			if (typeof(oPGCss) != 'undefined')
			{
				oPGCss.setStyle(_oField, _sDefaultStyle+' width:'+_iWidth+'px; '+_sCssStyle);
				// oPGCss.setRoundCorner(_oField, '3px');
			}
		}
	}
	
	this.buildInputFieldArray = function(_iWidth, _sName, _xDefaultData, _xNoDataText, _bRequiredField, _iMaxLength) {return new Array(_iWidth, _sName, _xDefaultData, _xNoDataText, _bRequiredField, _iMaxLength);}
	this.buildInputFieldDataArray = function(_xDataID, _axDataFields) {return new Array(_xDataID, _axDataFields);}

	this.buildInputFieldDataset = function(_sInputFieldID, _axInputFieldData, _iDatasetIndex)
	{
		var _iWidth = 0;
		
		var _axInputField = new Array();
		var _oFieldWidth = null;
		var _iFieldWidth = 0;
		var _oFieldCount = this.oDocument.getElementById(_sInputFieldID+'FieldCount');
		if (_oFieldCount)
		{
			for (var g=0; g<parseInt(_oFieldCount.value); g++)
			{
				_oFieldWidth = this.oDocument.getElementById(_sInputFieldID+'Field'+g);
				if (_oFieldWidth) {_iFieldWidth = parseInt(_oFieldWidth.style.width);}
				_axInputField.push(_iFieldWidth);
			}
		}
		
		var _sHTML = '';
		var _sHighlightArray = 'new Array(\''+_sInputFieldID+'Dataset'+_iDatasetIndex+'\')';
		_sHTML += '<table id="'+_sInputFieldID+'Dataset'+_iDatasetIndex+'" style="border-collapse:collapse; cursor:default;" ';
		_sHTML += 'onmouseover="if (typeof(oPGHover) != \'undefined\') {oPGHover.showHighlight('+_sHighlightArray+', \'border-collapse:collapse; cursor:default; '+this.sCssStyleInputFieldDatasetHover+'\');}" ';
		_sHTML += 'onmouseout="if (typeof(oPGHover) != \'undefined\') {oPGHover.hideHighlight();}" ';
		_sHTML += 'cellpadding="0" cellspacing="0">';
		_sHTML += '<tr>';
			_sHTML += '<td id="'+_sInputFieldID+'Dataset'+_iDatasetIndex+'Panel" style="display:none; border-style:solid; border-color:#CCCCCC; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px; padding:0px;">';
			var _bEditable = true;
			if (parseInt(_axInputFieldData[PG_CONTROLS_INPUTFIELD_DATASET_INDEX_ID]) != Number.NaN)
			{
				if (parseInt(_axInputFieldData[PG_CONTROLS_INPUTFIELD_DATASET_INDEX_ID]) < 0)
				{
					_bEditable = false;
				}
			}
			if (_bEditable == true)
			{
				var _iButtonMode = 0;
				// _sHTML += '<span onclick="oPGControls.inputFieldShowDatasetQuestion(\''+_sInputFieldID+'\', \'delete?\', \'oPGControls.inputFieldOnDeleteDatasetWithIndex(\\\''+_sInputFieldID+'\\\', '+_iDatasetIndex+');\', \'\');">[del]</span>';
				_sHTML += this.buildButton2(_sInputFieldID+'Dataset'+_iDatasetIndex+'DeleteButton', 'delete', _iButtonMode, null, "oPGControls.inputFieldShowDatasetQuestion('"+_sInputFieldID+"', 'delete?', 'oPGControls.inputFieldOnDeleteDatasetWithIndex(\\\'"+_sInputFieldID+"\\\', "+_iDatasetIndex+");', '');", null);
			}
			_sHTML += '</td>';
			for (var t=PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD; t<_axInputFieldData.length; t++)
			{
				if (_axInputField.length > t-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD) {_iWidth = _axInputField[t-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD]+1;}
				else {_iWidth = 151;}
				_sHTML += '<td onclick="';
				_sHTML += 'oPGControls.inputFieldOnSelectDataset(\''+_sInputFieldID+'\', '+_iDatasetIndex+'); ';
				// if (_sOnDatasetSelect != '') {_sHTML += _sOnDatasetSelect.replace(/"/, '\"');} // TODO
				_sHTML += '" ';
				_sHTML += 'style="border-style:solid; border-color:#CCCCCC; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px; padding:0px;">';
				_sHTML += '<div style="width:'+_iWidth+'px; overflow:hidden; cursor:default; background-color:transparent;">';
				_sHTML += _axInputFieldData[t];
				_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Dataset'+_iDatasetIndex+'Field'+(t-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD)+'" value="'+_axInputFieldData[t]+'" />';
				_sHTML += '</div>';
				_sHTML += '</td>';
			}
		_sHTML += '</tr>';
		_sHTML += '</table>';
		_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Dataset'+_iDatasetIndex+'ID" value="'+_axInputFieldData[PG_CONTROLS_INPUTFIELD_DATASET_INDEX_ID]+'" />';
		_sHTML += '<input type="hidden" id="'+_sInputFieldID+'Dataset'+_iDatasetIndex+'FieldCount" value="'+(_axInputFieldData.length-PG_CONTROLS_INPUTFIELD_DATASET_INDEX_FIRST_FIELD)+'" />';
		return _sHTML;
	}

	this.buildInputFieldDatasets = function(_sInputFieldID, _axInputFieldData)
	{
		var _sHTML = '';
		for (var i=0; i<_axInputFieldData.length; i++)
		{
			_sHTML += this.buildInputFieldDataset(_sInputFieldID, _axInputFieldData[i], i);
		}
		return _sHTML;
	}
	
	this.inputFieldOnMouseOver = function(_sInputFieldID) {this.sMouseOverDropdownID = _sInputFieldID;}
	this.inputFieldOnMouseOut = function(_sInputFieldID) {if (this.sMouseOverDropdownID == _sInputFieldID) {this.sMouseOverDropdownID = '';}}
	
	this.inputFieldGlobalOnMouseUp = function()
	{
		if (this.sInputFieldLastOpenedDropdownID != '')
		{
			if ((this.sMouseOverDropdownID != this.sInputFieldLastOpenedDropdownID)
			&& (this.sMouseOverControlID != this.sInputFieldLastOpenedDropdownID+'DatasetCreateButton')
			&& (this.sMouseOverControlID != this.sInputFieldLastOpenedDropdownID+'DatasetUpdateButton')
			&& (this.sMouseOverControlID != this.sInputFieldLastOpenedDropdownID+'SwitchEditModeButton'))
			{
				var _oFieldMode = this.oDocument.getElementById(this.sInputFieldLastOpenedDropdownID+'Mode');
				if (_oFieldMode)
				{
					var _iFieldMode = parseInt(_oFieldMode.value);
					if (this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_AUTOCLOSE))
					{
						this.inputFieldHideDropdown(this.sInputFieldLastOpenedDropdownID);
					}
				}
			}
		}
	}

	this.inputFieldOnKeyDown = function(_sInputFieldID)
	{
		if ((this.oKeyUpTimeout == null) && (this.sCssStyleInputFieldDataNotSaved != ''))
		{
			var _oFieldCount = this.oDocument.getElementById(_sInputFieldID+'FieldCount');
			if (_oFieldCount)
			{
				for (var i=0; i<parseInt(_oFieldCount.value); i++)
				{
					this.inputFieldChangeStyle(_sInputFieldID+'Field'+i, this.sCssStyleInputFieldDataNotSaved);
				}
			}
		}
		if (this.oKeyUpTimeout != null) {this.oWindow.clearInterval(this.oKeyUpTimeout); this.oKeyUpTimeout = null;}
	}
	
	this.inputFieldOnKeyUp = function(_sInputFieldID)
	{
		if (this.oKeyUpTimeout == null)
		{
			this.oKeyUpTimeout = this.oWindow.setInterval("oPGControls.inputFieldOnSearch('"+_sInputFieldID+"')", this.iInputFieldKeyResponseWaitToSearch);
		}
	}
	
	this.inputFieldOnFocus = function(_sInputFieldID, _iFieldIndex)
	{
		var _oFieldMode = this.oDocument.getElementById(_sInputFieldID+'Mode');
		var _oFieldNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+_iFieldIndex+'NoData');
		var _oFieldIsNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+_iFieldIndex+'IsNoData');
		var _oField = this.oDocument.getElementById(_sInputFieldID+'Field'+_iFieldIndex);
		if ((_oFieldMode) && (_oFieldNoData) && (_oFieldIsNoData) && (_oField))
		{
			var _iFieldMode = parseInt(_oFieldMode.value);
			if ((parseInt(_oFieldIsNoData.value) == 1) && (!this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_READONLY)))
			{
				_oField.value = '';
				_oFieldIsNoData.value = 0;
				// _oField.value = _oFieldNoData.value;
				// this.inputFieldChangeStyle(_sInputFieldID+'Field'+_iFieldIndex, this.sCssStyleInputFieldNoData);
			}
			this.inputFieldChangeStyle(_sInputFieldID+'Field'+_iFieldIndex, this.sCssStyleInputField);

			if (this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_RESETONBLUR))
			{
				var _oOldFieldValue = this.oDocument.getElementById(_sInputFieldID+'OldFieldValue');
				var _oOldFieldID = this.oDocument.getElementById(_sInputFieldID+'OldFieldID');
				if ((_oOldFieldID) && (_oOldFieldValue))
				{
					if (_oOldFieldID.value != _sInputFieldID+'Field'+_iFieldIndex)
					{
						if (_oField)
						{
							_oOldFieldValue.value = _oField.value;
							_oOldFieldID.value = _sInputFieldID+'Field'+_iFieldIndex;
						}
					}
				}
			}
		}
	}
	
	this.inputFieldReset = function(_sInputFieldID)
	{
		var _oOldFieldValue = this.oDocument.getElementById(_sInputFieldID+'OldFieldValue');
		var _oOldFieldID = this.oDocument.getElementById(_sInputFieldID+'OldFieldID');
		if ((_oOldFieldID) && (_oOldFieldValue))
		{
			var _sOldFieldID = _oOldFieldID.value;
			if (_sOldFieldID != '')
			{
				var _oField = this.oDocument.getElementById(_sOldFieldID);
				if (_oField)
				{
					_oField.value = _oOldFieldValue.value;
					_oOldFieldID.value = '';
					_oOldFieldValue.value = '';
				}
			}
		}
		this.inputFieldStopReset();
	}
	
	this.inputFieldOnBlur = function(_sInputFieldID, _iFieldIndex)
	{
		var _oFieldMode = this.oDocument.getElementById(_sInputFieldID+'Mode');
		var _oFieldNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+_iFieldIndex+'NoData');
		var _oFieldIsNoData = this.oDocument.getElementById(_sInputFieldID+'Field'+_iFieldIndex+'IsNoData');
		var _oField = this.oDocument.getElementById(_sInputFieldID+'Field'+_iFieldIndex);
		if ((_oFieldMode) && (_oFieldNoData) && (_oFieldIsNoData) && (_oField))
		{
			var _iFieldMode = parseInt(_oFieldMode.value);
			if ((_oFieldNoData.value != '') && (_oField.value == '') && (!this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_READONLY)))
			{
				_oField.value = _oFieldNoData.value;
				_oFieldIsNoData.value = '1';
				this.inputFieldChangeStyle(_sInputFieldID+'Field'+_iFieldIndex, this.sCssStyleInputFieldNoData);
			}
			
			if (this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_RESETONBLUR)) {this.oInputFieldResetOnBlurTimeout = this.oWindow.setInterval('oPGControls.inputFieldReset(\''+_sInputFieldID+'\')', 200);}
			else if ((this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_AUTOSAVE))
			&& (!this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_READONLY)))
			{
				this.inputFieldAjaxSend(_sInputFieldID, 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONBLUR, false);
			}
		}
	}
	
	this.inputFieldOnSearch = function(_sInputFieldID)
	{
		var _oFieldMode = this.oDocument.getElementById(_sInputFieldID+'Mode');
		if (_oFieldMode)
		{
			var _iFieldMode = parseInt(_oFieldMode.value);
			if ((this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_SEARCH))
			&& (!this.isInputFieldMode(_iFieldMode, PG_CONTROLS_INPUTFIELD_MODE_READONLY)))
			{
				this.inputFieldAjaxSend(_sInputFieldID, 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONSEARCH, true);
			}
		}
		if (this.oKeyUpTimeout != null) {this.oWindow.clearInterval(this.oKeyUpTimeout); this.oKeyUpTimeout = null;}
	}
	
	this.inputFieldStopReset = function()
	{
		if (this.oInputFieldResetOnBlurTimeout != null) {this.oWindow.clearInterval(this.oInputFieldResetOnBlurTimeout); this.oInputFieldResetOnBlurTimeout = null;}
	}
	
	this.inputFieldOnCreateDataset = function(_sInputFieldID)
	{
		this.inputFieldStopReset();
		this.inputFieldAjaxSend(_sInputFieldID, 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONCREATE_DATASET, false);
	}
	
	this.inputFieldOnUpdateDataset = function(_sInputFieldID)
	{
		this.inputFieldStopReset();
		var _oDataID = this.oDocument.getElementById(_sInputFieldID+'DataID');
		var _oSelectedIndex = this.oDocument.getElementById(_sInputFieldID+'SelectedIndex');
		if ((_oDataID) && (_oSelectedIndex))
		{
			if (_oDataID.value != '')
			{
				var _sParameters = '';
				_sParameters += 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONUPDATE_DATASET;
				_sParameters += '&iDatasetIndex='+_oSelectedIndex.value
				this.inputFieldAjaxSend(_sInputFieldID, _sParameters, false);
			}
		}
	}
	
	this.inputFieldOnDeleteDataset = function(_sInputFieldID)
	{
		var _oDataID = this.oDocument.getElementById(_sInputFieldID+'DataID');
		if (_oDataID) {if (_oDataID.value != '') {this.inputFieldAjaxSend(_sInputFieldID, 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONDELETE_DATASET, false);}}
	}
	
	this.inputFieldOnDeleteDatasetWithIndex = function(_sInputFieldID, _iIndex)
	{
		if (this.oAjaxObject != null)
		{
			var _sParameters = '';
			_sParameters += 'sEvent='+PG_CONTROLS_INPUTFIELD_EVENT_ONDELETE_DATASET;
			_sParameters += '&sInputFieldID='+_sInputFieldID;
			_sParameters += '&iDatasetIndex='+_iIndex;
			var _oDataID = this.oDocument.getElementById(_sInputFieldID+'Dataset'+_iIndex+'ID');
			if (_oDataID) {_sParameters += '&sDataID='+encodeURIComponent(_oDataID.value);}
			
			var _oAjaxSendParams = this.oDocument.getElementById(_sInputFieldID+'AjaxSendParams');
			if (_oAjaxSendParams) {if (_oAjaxSendParams.value != '') {_sParameters += '&'+_oAjaxSendParams.value;}}
			
			this.oAjaxRequestObject = this.oAjaxObject.openRequest(this.oAjaxRequestObject, this.sInputFieldAjaxFile, null, null, function() {oPGControls.inputFieldAjaxResult();});
			if (this.oAjaxRequestObject) {this.oAjaxObject.sendRequest(this.oAjaxRequestObject, _sParameters);}
		}
	}
	
	this.inputFieldHideDatasetQuestion = function(_sInputFieldID)
	{
		var _oDatasetQuestion = this.oDocument.getElementById(_sInputFieldID+'DatasetQuestion');
		if (_oDatasetQuestion) {_oDatasetQuestion.outerHTML = '';}
		
		var _oDropdownOverlay = this.oDocument.getElementById(_sInputFieldID+'DropdownOverlay');
		if (_oDropdownOverlay) {_oDropdownOverlay.style.display = 'none';}
	}
	
	this.inputFieldShowDatasetQuestion = function(_sInputFieldID, _sQuestion, _sExecuteOnYes, _sExecuteOnNo)
	{
		var _sHTML = '';
		var _oDropdownDiv = this.oDocument.getElementById(_sInputFieldID+'DropdownDiv');
		var _oDropdownOverlay = this.oDocument.getElementById(_sInputFieldID+'DropdownOverlay');
		if ((_oDropdownDiv) && (_oDropdownOverlay))
		{
			var _iDropdownDivSizeX = parseInt(_oDropdownDiv.offsetWidth);
			var _iDropdownDivSizeY = parseInt(_oDropdownDiv.offsetHeight);
			
			_oDropdownOverlay.style.width = _iDropdownDivSizeX+'px';
			_oDropdownOverlay.style.height = _iDropdownDivSizeY+'px';
			if (typeof(oPGGFX) != 'undefined') {oPGGFX.setElementOpacity(_oDropdownOverlay, 50);}
			_oDropdownOverlay.style.display = 'block';
			
			_sHTML += '<table id="'+_sInputFieldID+'DatasetQuestion" style="position:absolute; width:100px; height:60px; left:'+(Math.floor(_iDropdownDivSizeX/2)-50)+'px; top:'+(Math.floor(_iDropdownDivSizeY/2)-30)+'px; border-width:0px; background-color:#FFFFFF; cursor:default;">';
			_sHTML += '<tr>';
				_sHTML += '<td colspan="2" style="text-align:center;">'+_sQuestion+'</td>';
			_sHTML += '</tr>';
			_sHTML += '<tr>';
				var _iButtonMode = 0;
				_sHTML += '<td style="text-align:right; width:50%;">';
				_sHTML += this.buildButton2(_sInputFieldID+'QuestionButtonYes', 'yes', _iButtonMode, null, 'oPGControls.inputFieldHideDatasetQuestion(\''+_sInputFieldID+'\'); '+_sExecuteOnYes, '45px');
				_sHTML += '</td>';
				_sHTML += '<td style="text-align:left; width:50%;">';
				_sHTML += this.buildButton2(_sInputFieldID+'QuestionButtonNo', 'no', _iButtonMode, null, 'oPGControls.inputFieldHideDatasetQuestion(\''+_sInputFieldID+'\'); '+_sExecuteOnNo, '45px');
				_sHTML += '</td>';
			_sHTML += '</tr>';
			_sHTML += '</table>';
			_oDropdownDiv.innerHTML += _sHTML;
		}
	}
	
	this.inputFieldOnSwitchDatasetEditMode = function(_sInputFieldID)
	{
		var _oDatasetPanel = null;
		var _oDatasetCount = this.oDocument.getElementById(_sInputFieldID+'DatasetCount');
		if (_oDatasetCount)
		{
			var _iDatasetCount = parseInt(_oDatasetCount.value);
			for (var i=0; i<_iDatasetCount; i++)
			{
				_oDatasetPanel = this.oDocument.getElementById(_sInputFieldID+'Dataset'+i+'Panel');
				if (_oDatasetPanel)
				{
					if (_oDatasetPanel.style.display == 'none') {_oDatasetPanel.style.display = 'block';}
					else {_oDatasetPanel.style.display = 'none';}
				}
			}
		}
	}
	
	this.isInputFieldMode = function(_iCurrentInputFieldMode, _iIsInputFieldMode) {return (_iCurrentInputFieldMode & (_iIsInputFieldMode));}
	
	// Checkbox...
	this.setCheckboxAjaxFile = function(_sAjaxFile) {this.sCheckboxAjaxFile = _sAjaxFile;}
	this.getCheckboxAjaxFile = function() {return this.sCheckboxAjaxFile;}
	
	this.isCheckboxMode = function(_iCurrentCheckboxMode, _iIsCheckboxMode) {return (_iCurrentCheckboxMode & (_iIsCheckboxMode));}
	
	this.checkboxOnClick = function(_sCheckboxID, _iStatus)
	{
		var _oCheckboxSymbol = null;
		var _oCheckboxLabel = null;
		// var _oCheckbox = this.oDocument.getElementById(_sCheckboxID);
		var _oCheckboxMode = this.oDocument.getElementById(_sCheckboxID+'Mode');
		var _oCheckboxMaxStatus = this.oDocument.getElementById(_sCheckboxID+'MaxStatus');
		if ((_oCheckboxMode) && (_oCheckboxMaxStatus))
		{
			var _iCheckboxMode = parseInt(_oCheckboxMode.value);
			var _iCheckboxMaxStatus = parseInt(_oCheckboxMaxStatus.value);
			if ((!isNaN(_iCheckboxMode)) && (!isNaN(_iCheckboxMaxStatus)))
			{
				_oCheckboxSymbol = this.oDocument.getElementById(_sCheckboxID+'Symbol'+_iStatus);
				if (_oCheckboxSymbol) {_oCheckboxSymbol.style.display = 'none';}
				
				_oCheckboxLabel = this.oDocument.getElementById(_sCheckboxID+'Value'+_iStatus);
				if (_oCheckboxLabel) {_oCheckboxLabel.style.display = 'none';}
				
				_iStatus++;
				if (_iStatus >= _iCheckboxMaxStatus) {_iStatus = 0;}

				if (this.isCheckboxMode(_iCheckboxMode, PG_CONTROLS_CHECKBOX_MODE_AUTOSAVE))
				{
					var _oCheckboxStatus = this.oDocument.getElementById(_sCheckboxID+'Status'+_iStatus);
					var _oCheckboxValue = this.oDocument.getElementById(_sCheckboxID+'Value'+_iStatus);
					if ((_oCheckboxStatus) && (_oCheckboxValue))
					{
						var _sParameters = '';
						_sParameters += 'sCheckboxID='+_sCheckboxID;
						_sParameters += '&iStatus='+_iStatus;
						_sParameters += '&sStatus='+encodeURIComponent(_oCheckboxStatus.value);
						_sParameters += '&sValue='+encodeURIComponent(_oCheckboxValue.innerHTML);
						this.checkboxSendAjax(_sCheckboxID, PG_CONTROLS_CHECKBOX_EVENT_ONCHANGE, _sParameters);
					}
				}
				else {this.changeCheckboxStatus(_sCheckboxID, _iStatus);}
			}
		}
	}
	
	this.changeCheckboxStatus = function(_sCheckboxID, _iStatus)
	{
		var _oCheckboxSymbol = this.oDocument.getElementById(_sCheckboxID+'Symbol'+_iStatus);
		var _oCheckboxLabel = this.oDocument.getElementById(_sCheckboxID+'Value'+_iStatus);
		var _oCheckboxCurrentStatus = this.oDocument.getElementById(_sCheckboxID+'CurrentStatus');
		if (_oCheckboxSymbol) {_oCheckboxSymbol.style.display = 'block';}
		if (_oCheckboxLabel) {_oCheckboxLabel.style.display = 'block';}
		if (_oCheckboxCurrentStatus) {_oCheckboxCurrentStatus = _iStatus;}
	}
	
	this.checkboxSendAjax = function(_sCheckboxID, _sEvent, _sParameters)
	{
		if (this.oAjaxObject != null)
		{
			var _sParameters2 = '';
			_sParameters2 += 'sEvent='+_sEvent;
			if ((_sParameters != '') && (_sParameters != null)) {_sParameters2 += '&'+_sParameters;}

			var _oAjaxSendParams = this.oDocument.getElementById(_sCheckboxID+'AjaxSendParams');
			if (_oAjaxSendParams) {if (_oAjaxSendParams.value != '') {_sParameters2 += '&'+_oAjaxSendParams.value;}}
			
			this.oAjaxRequestObject = this.oAjaxObject.openRequest(this.oAjaxRequestObject, this.sCheckboxAjaxFile, null, null, function() {oPGControls.checkboxAjaxResult();});
			if (this.oAjaxRequestObject) {this.oAjaxObject.sendRequest(this.oAjaxRequestObject, _sParameters2);}
		}
	}
	
	this.checkboxAjaxResult = function()
	{
		var _oXML = this.oAjaxObject.getResultXMLObject(this.oAjaxRequestObject);
		if (_oXML)
		{
			if (typeof(_oXML) == 'string') {alert('ERROR:\n'+_oXML.replace(/></g, ">\n<").replace(/>\n<!\[/g, "><![").replace(/\]\]>\n</g, "]]><"));}
			else
			{
				var _sRequestType = this.oAjaxObject.getResultRequestType(_oXML);
				var _sCheckboxID = this.oAjaxObject.getResultRequestObjectID(_oXML);
				var _sJavaScriptToExecute = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_CheckboxJavaScriptToExecute'));
				if (_sRequestType == PG_CONTROLS_CHECKBOX_AJAX_REQUEST_TYPE)
				{
					var _sEvent = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_CheckboxEvent'));
					if (_sEvent == PG_CONTROLS_CHECKBOX_EVENT_ONCHANGE)
					{
						var _iStatus = parseInt(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_CheckboxStatus')));
						if (_iStatus != Number.NaN) {this.changeCheckboxStatus(_sCheckboxID, _iStatus);}
					}
					this.oAjaxRequestObject = null;
					if (_sJavaScriptToExecute != '') {eval(_sJavaScriptToExecute);}
				}
			}
		}
	}
	
	// Textarea...
	this.setTextareaAjaxFile = function(_sAjaxFile) {this.sTextareaAjaxFile = _sAjaxFile;}
	this.getTextareaAjaxFile = function() {return this.sTextareaAjaxFile;}
	
	this.setCssStyleTextareaDataSaved = function(_sCssStyle) {this.sCssStyleTextareaDataSaved = _sCssStyle;}
	this.setCssStyleTextareaDataWrong = function(_sCssStyle) {this.sCssStyleTextareaDataWrong = _sCssStyle;}
	this.setCssStyleTextareaDataNotSaved = function(_sCssStyle) {this.sCssStyleTextareaDataNotSaved = _sCssStyle;}
	
	this.isTextareaMode = function(_iCurrentTextareaMode, _iIsTextareaMode) {return (_iCurrentTextareaMode & (_iIsTextareaMode));}

	this.textareaOnKeyDown = function(_sTextareaID)
	{
		// if ((this.oKeyUpTimeout == null) && (this.sCssStyleTextareaDataNotSaved != ''))
		if (this.sCssStyleTextareaDataNotSaved != '')
		{
			this.textareaChangeStyle(_sTextareaID, this.sCssStyleTextareaDataNotSaved);
		}
		// if (this.oKeyUpTimeout != null) {this.oWindow.clearInterval(this.oKeyUpTimeout); this.oKeyUpTimeout = null;}
	}
	
	this.textareaOnFocus = function(_sTextareaID)
	{
		var _oTextarea = this.oDocument.getElementById(_sTextareaID);
		var _oTextareaIsNoData = this.oDocument.getElementById(_sTextareaID+'IsNoData');
		if ((_oTextarea) && (_oTextareaIsNoData))
		{
			if (_oTextareaIsNoData.value == '1')
			{
				_oTextarea.value = '';
				_oTextareaIsNoData.value = '0';
			}
			this.textareaChangeStyle(_sTextareaID, this.sCssStyleTextarea);
		}
	}

	this.textareaOnBlur = function(_sTextareaID)
	{
		var _oTextarea = this.oDocument.getElementById(_sTextareaID);
		var _oTextareaNoData = this.oDocument.getElementById(_sTextareaID+'NoData');
		var _oTextareaIsNoData = this.oDocument.getElementById(_sTextareaID+'IsNoData');
		var _oTextareaMode = this.oDocument.getElementById(_sTextareaID+'Mode');
		if ((_oTextarea) && (_oTextareaNoData) && (_oTextareaIsNoData) && (_oTextareaMode))
		{
			var _iTextareaMode = parseInt(_oTextareaMode.value);
			if (_iTextareaMode != Number.NaN)
			{
				if ((_oTextareaNoData.value != '') && (_oTextarea.value == ''))
				{
					_oTextarea.value = _oTextareaNoData.value;
					_oTextareaIsNoData.value = '1';
					this.textareaChangeStyle(_sTextareaID, this.sCssStyleTextareaNoData);
				}
				else if (this.isTextareaMode(_iTextareaMode, PG_CONTROLS_TEXTAREA_MODE_AUTOSAVE))
				{
					this.textareaAjaxSend(_sTextareaID, 'sEvent='+PG_CONTROLS_TEXTAREA_EVENT_ONBLUR);
				}
			}
		}
	}
	
	this.textareaAjaxSend = function(_sTextareaID, _sParameters)
	{
		if (this.oAjaxObject != null)
		{
			var _sParameters2 = 'sTextareaID='+_sTextareaID;
			var _oTextarea = this.oDocument.getElementById(_sTextareaID);
			if (_oTextarea) {_sParameters2 += '&sText='+encodeURIComponent(_oTextarea.value);}

			if (_sParameters != '') {_sParameters2 += '&'+_sParameters;}

			var _oAjaxSendParams = this.oDocument.getElementById(_sTextareaID+'AjaxSendParams');
			if (_oAjaxSendParams) {if (_oAjaxSendParams.value != '') {_sParameters2 += '&'+_oAjaxSendParams.value;}}
			
			this.oAjaxRequestObject = this.oAjaxObject.openRequest(this.oAjaxRequestObject, this.sTextareaAjaxFile, null, null, function() {oPGControls.textareaAjaxResult();});
			if (this.oAjaxRequestObject) {this.oAjaxObject.sendRequest(this.oAjaxRequestObject, _sParameters2);}
		}
	}
	
	this.textareaAjaxResult = function()
	{
		var _oXML = this.oAjaxObject.getResultXMLObject(this.oAjaxRequestObject);
		if (_oXML)
		{
			if (typeof(_oXML) == 'string') {alert('ERROR:\n'+_oXML.replace(/></g, ">\n<").replace(/>\n<!\[/g, "><![").replace(/\]\]>\n</g, "]]><"));}
			else
			{
				var _sRequestType = this.oAjaxObject.getResultRequestType(_oXML);
				var _sTextareaID = this.oAjaxObject.getResultRequestObjectID(_oXML);
				var _sJavaScriptToExecute = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_CheckboxJavaScriptToExecute'));
				if (_sRequestType == PG_CONTROLS_TEXTAREA_AJAX_REQUEST_TYPE)
				{
					var _sEvent = this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_TextareaEvent'));
					if (_sEvent == PG_CONTROLS_TEXTAREA_EVENT_ONBLUR)
					{
						if (this.sCssStyleTextareaDataSaved != '')
						{
							var _iActionStatus = parseInt(this.oXMLRead.getTagPathContent2(_oXML, new Array('PG_TextareaActionStatus')));
							if (_iActionStatus == PG_CONTROLS_TEXTAREA_ACTIONSTATUS_SUCCESS)
							{
								this.textareaChangeStyle(_sTextareaID, this.sCssStyleTextareaDataSaved);
							}
							else if (_iActionStatus == PG_CONTROLS_TEXTAREA_ACTIONSTATUS_FAILED)
							{
								this.textareaChangeStyle(_sTextareaID, this.sCssStyleTextareaDataNotSaved);
							}
						}
					}
					this.oAjaxRequestObject = null;
					if (_sJavaScriptToExecute != '') {eval(_sJavaScriptToExecute);}
				}
			}
		}
	}
	
	this.textareaChangeStyle = function(_sTextareaID, _sCssStyle)
	{
		var _iWidth = 0;
		var _oTextarea = this.oDocument.getElementById(_sTextareaID);
		var _sDefaultStyle = 'padding-left:0px; padding-right:0px; margin-left:0px; margin-right:0px;';
		if (_oTextarea)
		{
			_iWidth = parseInt(_oTextarea.style.width);
			if (typeof(oPGCss) != 'undefined') {oPGCss.setStyle(_oTextarea, _sDefaultStyle+' width:'+_iWidth+'px; '+_sCssStyle);}
		}
	}
	
	// Popup...
	this.buildPopup = function(_sContainerID, _sPopupID, _sContent, _iWidth, _iHeight, _iZIndex, _iOverlayAlpha, _iOverlayAlphaSpeedTimeout)
	{
		if (typeof(_iOverlayAlphaSpeedTimeout) == 'undefined') {var _iOverlayAlphaSpeedTimeout = null;}
		if (_iOverlayAlphaSpeedTimeout == null) {_iOverlayAlphaSpeedTimeout = 0;}
		
		var _sHTML = '';
		_sHTML += '<div id="'+_sPopupID+'Overlay" style="position:fixed; display:none; top:0px; left:0px; width:0px; height:0px; background-color:#000000; z-index:'+_iZIndex+';"></div>';
		_sHTML += '<div id="'+_sPopupID+'" style="position:fixed; overflow:auto; display:none; width:'+_iWidth+'px; height:'+_iHeight+'px; z-index:'+(_iZIndex+1)+';">';
		_sHTML += _sContent;
		_sHTML += '</div>';
		_sHTML += '<input type="hidden" id="'+_sPopupID+'ContainerID" value="'+_sContainerID+'" />';
		_sHTML += '<input type="hidden" id="'+_sPopupID+'OverlayAlpha" value="'+_iOverlayAlpha+'" />';
		_sHTML += '<input type="hidden" id="'+_sPopupID+'OverlayAlphaSpeedTimeout" value="'+_iOverlayAlphaSpeedTimeout+'" />';
		var _oContainer = null;
		if ((_sContainerID != '') && (_sContainerID != null)) {_oContainer = this.oDocument.getElementById(_sContainerID);}
		else {_oContainer = this.oDocument.body;}
		if (_oContainer) {_oContainer.innerHTML += _sHTML;}
		return _sHTML;
	}
	
	this.setPopupContent = function(_sPopupID, _sContent)
	{
		var _oPopup = this.oDocument.getElementById(_sPopupID);
		if (_oPopup) {_oPopup.innerHTML = _sContent;}
	}
	
	this.setPopupSize = function(_sPopupID, _iSizeX, _iSizeY)
	{
		var _oPopup = this.oDocument.getElementById(_sPopupID);
		if (_oPopup)
		{
			if (_iSizeX != null) {_oPopup.style.width = _iSizeX+'px';}
			if (_iSizeY != null) {_oPopup.style.height = _iSizeY+'px';}
		}
	}
	
	this.isPopupVisible = function(_sPopupID)
	{
		var _oPopup = this.oDocument.getElementById(_sPopupID);
		if (_oPopup) {if (_oPopup.style.display == 'block') {return true;}}
		return false;
	}
	
	this.hidePopup = function(_sPopupID, _iOverlayAlphaSpeedTimeout)
	{
		if (typeof(_iOverlayAlphaSpeedTimeout) == 'undefined') {var _iOverlayAlphaSpeedTimeout = null;}
		if (_iOverlayAlphaSpeedTimeout < 1) {_iOverlayAlphaSpeedTimeout = null;}
		
		var _oPopup = this.oDocument.getElementById(_sPopupID);
		if (_oPopup) {_oPopup.style.display = 'none';}

		var _oOverlay = this.oDocument.getElementById(_sPopupID+'Overlay');
		if (_oOverlay)
		{
			if (_iOverlayAlphaSpeedTimeout == null)
			{
				var _oOverlayAlphaSpeedTimeout = this.oDocument.getElementById(_sPopupID+'OverlayAlphaSpeedTimeout');
				if (_oOverlayAlphaSpeedTimeout)
				{
					_iOverlayAlphaSpeedTimeout = parseInt(_oOverlayAlphaSpeedTimeout.value);
					if (_iOverlayAlphaSpeedTimeout <= 0) {_iOverlayAlphaSpeedTimeout = null;}
				}
			}
			
			if (_iOverlayAlphaSpeedTimeout == null) {_iCurrentAlpha = 1;}
			else
			{
				if (typeof(oPGGFX) != 'undefined')
				{
					var _iCurrentAlpha = oPGGFX.getElementOpacity(_oOverlay);
					if (!isNaN(_iCurrentAlpha))
					{
						if (_iCurrentAlpha <= 5) {_iCurrentAlpha = 1;}
						else {_iCurrentAlpha = Math.round(_iCurrentAlpha/2);}
						oPGGFX.setElementOpacity(_oOverlay, _iCurrentAlpha);
					}
				}
			}
			if (_iCurrentAlpha == 1) {_oOverlay.style.display = 'none';}
			else if (_iOverlayAlphaSpeedTimeout != null) {this.oWindow.setTimeout("oPGControls.hidePopup('"+_sPopupID+"', "+_iOverlayAlphaSpeedTimeout+")", _iOverlayAlphaSpeedTimeout);}
		}
	}
	
	// TODO...
	this.showPopup = function(_sPopupID, _iOverlayAlpha, _iOverlayAlphaSpeedTimeout)
	{
		if (typeof(_iOverlayAlpha) == 'undefined') {var _iOverlayAlpha = null;}
		if (typeof(_iOverlayAlphaSpeedTimeout) == 'undefined') {var _iOverlayAlphaSpeedTimeout = null;}
		if (_iOverlayAlphaSpeedTimeout < 1) {_iOverlayAlphaSpeedTimeout = null;}
			
		var _oContainer = null;
		var _oContainerID = this.oDocument.getElementById(_sPopupID+'ContainerID');
		if (_oContainerID)
		{
			if (_iOverlayAlpha == null)
			{
				_iOverlayAlpha = 1;
				var _oOverlayAlpha = this.oDocument.getElementById(_sPopupID+'OverlayAlpha');
				if (_oOverlayAlpha) {_iOverlayAlpha = parseInt(_oOverlayAlpha.value);}
			}
			
			if (_iOverlayAlphaSpeedTimeout == null)
			{
				var _oOverlayAlphaSpeedTimeout = this.oDocument.getElementById(_sPopupID+'OverlayAlphaSpeedTimeout');
				if (_oOverlayAlphaSpeedTimeout)
				{
					_iOverlayAlphaSpeedTimeout = parseInt(_oOverlayAlphaSpeedTimeout.value);
					if (_iOverlayAlphaSpeedTimeout <= 0) {_iOverlayAlphaSpeedTimeout = null;}
				}
			}
			
			var _oOverlay = this.oDocument.getElementById(_sPopupID+'Overlay');
			var _iCurrentOverlayAlpha = 0;
			if (_iOverlayAlphaSpeedTimeout != null)
			{
				if ((_iOverlayAlpha > 5) || (_iOverlayAlpha < -5)) {_iCurrentOverlayAlpha = Math.round(_iOverlayAlpha/2);}
				else {_iCurrentOverlayAlpha = _iOverlayAlpha;}
				_iOverlayAlpha -= _iCurrentOverlayAlpha;
				
				if ((_oOverlay) && (typeof(oPGGFX) != 'undefined'))
				{
					var _iAlphaToAdd = oPGGFX.getElementOpacity(_oOverlay);
					if (!isNaN(_iAlphaToAdd)) {_iCurrentOverlayAlpha += _iAlphaToAdd;}
				}
			}
			else {_iCurrentOverlayAlpha = _iOverlayAlpha;}
			
			var _iPosX = 0;
			var _iPosY = 0;
			var _iContainerSizeX = 0;
			var _iContainerSizeY = 0;
			var _sContainerID = _oContainerID.value;
			if (_sContainerID != '')
			{
				_oContainer = this.oDocument.getElementById(_sContainerID);
				if (_oContainer)
				{
					_iContainerSizeX = parseInt(_oContainer.offsetWidth);
					_iContainerSizeY = parseInt(_oContainer.offsetHeight);
				}
			}
			else
			{
				var _oScreenSize = oPGBrowser.getScreenSize();
				_oContainer = this.oDocument.body;
				if (_oContainer)
				{
					_iContainerSizeX = _oScreenSize.x;
					_iContainerSizeY = _oScreenSize.y;
				}
			}

			if (_oOverlay)
			{
				if (typeof(oPGGFX) != 'undefined') {oPGGFX.setElementOpacity(_oOverlay, _iCurrentOverlayAlpha);}
				_oOverlay.style.display = 'block';
				if (_oContainer)
				{
					if (_sContainerID != '')
					{
						_oOverlay.style.width = _iContainerSizeX;
						_oOverlay.style.height = _iContainerSizeY;
					}
					else
					{
						_oOverlay.style.width = '100%';
						_oOverlay.style.height = '100%';
					}
				}
			}
			
			if ((_iOverlayAlphaSpeedTimeout == null) || (_iOverlayAlpha == 0))
			{
				var _oPopup = this.oDocument.getElementById(_sPopupID);
				if (_oPopup)
				{
					_oPopup.style.display = 'block';
					if (_oContainer)
					{
						_iPosX = Math.round((_iContainerSizeX-parseInt(_oPopup.offsetWidth))/2);
						if (!isNaN(_iPosX)) {_oPopup.style.left = _iPosX+'px';}
	
						_iPosY = Math.round((_iContainerSizeY-parseInt(_oPopup.offsetHeight))/2);
						if (!isNaN(_iPosY)) {_oPopup.style.top = _iPosY+'px';}
					}
				}
			}
			
			if ((_iOverlayAlphaSpeedTimeout != null) && (_iOverlayAlpha != 0))
			{
				this.oWindow.setTimeout("oPGControls.showPopup('"+_sPopupID+"', "+_iOverlayAlpha+", "+_iOverlayAlphaSpeedTimeout+")", _iOverlayAlphaSpeedTimeout);
			}
		}
	}
	
	// ...
	this.onMouseUp = function(_eEvent)
	{
		this.buttonGlobalOnMouseUp();
		this.inputFieldGlobalOnMouseUp();
	}
}

var oPGControls = new classPG_Controls();

