/*
*	
*	multiForm.script.js		2001.05.30
*	Victor A.Spirin,	victor_aspirin@mail.ru
*/



function layerStack( PlaceHolderName, LayerNames )
	{
	var PlaceHolder;
	var Layers;
	var SelectedLayer;
	var This = this;


		if( false )//document.getElementById != null )
		{
		}
		else if( document.all != null )
		{
		document.getElementById = function ( ID )
			{
			return document.all[ID];
			}
		}
		else if( document.layers != null )
		{
		document.getElementById = function ( ID )
			{
			return document.layers[ID];
			}
		}

	this.select = function ( Name )
		{
			if( PlaceHolder == null && Layers == null ) init();
		var NewSelected = Layers[Name];
			if( NewSelected == null ) return;
			if( SelectedLayer != null ) SelectedLayer.hide();
		SelectedLayer = NewSelected;
		This.update();
		SelectedLayer.show( true );
		}

	this.update = function ()
		{
		var Origin = PlaceHolder.getAbsolutePosition();
		SelectedLayer.moveToAbsolute( Origin.X, Origin.Y );
		var Size = PlaceHolder.getSize()
		SelectedLayer.resizeTo( Size.Width, Size.Height );
		}

	function init()
		{
		PlaceHolder = new baseElement( document.getElementById(PlaceHolderName) );
		Layers = {};
			for( var i = 0 ; i < LayerNames.length ; i++ )
			{
			var l = new baseElement( document.getElementById(LayerNames[i]) );
			l.hide();
			Layers[LayerNames[i]] = l;
			}
		}
	}



function baseElement( Element )
	{
		if( false )//document.getElementById != null )
		{
		////////////////////////////////////////////////
		}
		else if( document.all != null )
		{
		Element.show = function ( Strongly )
			{
			Element.style.visibility = Strongly ? 'visible' : 'inherit';
			}

		Element.hide = function ()
			{
			Element.style.visibility = 'hidden';
			}

		Element.moveToAbsolute = function ( X, Y )
			{
			var X0 = 0;
			var Y0 = 0;
			var P = Element.offsetParent;
				while( P != null )
				{
				X0 += P.offsetLeft;
				Y0 += P.offsetTop;
				P = P.offsetParent;
				}
			Element.style.pixelLeft = X - X0;
			Element.style.pixelTop = Y - Y0;
			}

		Element.getAbsolutePosition = function ()
			{
			var PageX = 0;
			var PageY = 0;
			var E = Element;
				while( E != null )
				{
				PageX += E.offsetLeft;
				PageY += E.offsetTop;
				E = E.offsetParent;
				}
			return {X: PageX, Y: PageY};
			}

		Element.resizeTo = function ( Width, Height )
			{
			Element.style.width = Math.abs( Width );
			Element.style.height = Math.abs( Height );
			Element.style.clip = 'rect( 0px, ' + Width + 'px, ' + Height + 'px, 0px)';
			}

		Element.getSize = function ()
			{
			return {Width: (Element.style.posWidth != 0 ? Element.style.pixelWidth : Element.offsetWidth), Height: (Element.style.posHeight != 0 ? Element.style.pixelHeight : Element.offsetHeight)};
			}
		}
		else if( window.document.layers != null )
		{
		Element.show = function ( Strongly )
			{
			Element.visibility = Strongly ? 'show' : 'inherit';
			}

		Element.hide = function ()
			{
			Element.visibility = 'hide';
			}

		Element.getAbsolutePosition = function ()
			{
			return {X: Element.pageX, Y: Element.pageY};
			}

		Element.getSize = function ()
			{
			return {Width: Element.clip.width, Height: Element.clip.height};
			}
		}

	return Element;
	}



function dataSubmiter( ActionURL )
	{
	var Forms;
	var FormLayer;

	function createFormLayer()
		{
			if( false )//document.getElementById != null )
			{
			////////////////////////////////////////////////
			}
			else if( document.all != null )
			{
			var ID = '_js_layer_' + Math.round( 1000000*Math.random() );
			document.body.insertAdjacentHTML( 'AfterBegin', '<div id="' + ID + '" style="position: absolute;"></div>' );
			FormLayer = document.all[ID];
			FormLayer.visibility = 'hidden';

			FormLayer.setContent = function ( Hypertext )
				{
				FormLayer.innerHTML = Hypertext;
				}

			FormLayer.getCommand = function ()
				{
				return 'window.document.all[\'' + FormLayer.id + '\'].all.tags(\'form\')[0].submit();';
				}
			}
			else if( document.layers != null )
			{
			FormLayer = new Layer( 0, window );
			FormLayer.visibility = 'hide';

			FormLayer.setContent = function ( Hypertext )
				{
					with( FormLayer.document )
					{
					open();
					write( Hypertext );
					close();
					}
				}

			FormLayer.getCommand = function ()
				{
				return 'window.document.layers[\'' + FormLayer.id + '\'].document.forms[0].submit();';
				}
			}
		}

	this.addForm = function ( Container, FormName )
		{
			if( FormLayer == null ) createFormLayer();
			if( Forms == null ) Forms = [];
		Forms[Forms.length] = new form( Container, FormName );
		}

	this.sendData = function ()
		{
		var Hypertext = '<form action="' + ActionURL + '" method="post">\n';
			for( var i = 0 ; i < Forms.length ; i++ )
			{
			var Data = Forms[i].getData();
				for( var name in Data )
				{
				Hypertext += '<input type="hidden" name="' + name + '" value="' + Data[name] + '">\n';
				}
			}
		Hypertext += '</form>\n';
		FormLayer.setContent( Hypertext );

		setTimeout( FormLayer.getCommand(), 400 );
		}

	this.removeData = function ()
		{
			for( var i = 0 ; i < Forms.length ; i++ )
			Forms[i].getElement().reset();
		}
	}



function form( Container, FormName )
	{
	var Names;
	var This = this;

	this.getElement = function ()
		{
		return Container.document.forms[FormName];
		}

	function initNames()
		{
		var Form = This.getElement();
		Names = [];
			if( document.layers != null )
			{
			var NaNRE = /[^0-9]/g;
				for( var n in Form.elements )
				{
					if( (n + '').search(NaNRE) == -1 ) continue;
					if( Form.elements[n].type == null ) continue;
				var N = Form.elements[n].name;
					if( N != null && N != '' ) Names[Names.length] = N;
				}
			}
			else if( document.all != null )
			{
				for( var i = 0 ; i < Form.elements.length ; i++ )
				{
					if( Form.elements[i].type == null ) continue;
				var N = Form.elements[i].name;
					if( N != null && N != '' ) Names[Names.length] = N;
				}
			}
		}

	this.getData = function ()
		{
			if( Names == null ) initNames();

		var Form = This.getElement();
		var FormData = {};
			for( var i = 0 ; i < Names.length ; i++ )
			{
			var Elem = Form.elements[Names[i]];
				switch( Elem.type )
				{
				case 'checkbox':
					FormData[Elem.name] = Elem.checked;
					break;
				case 'text':
				case 'textarea':
					FormData[Elem.name] = Elem.value;
					break;
				case 'select-one':
					var Items = Elem.options;
						for( var j = 0 ; j < Items.length ; j++ )
						{
							if( Items[j].selected )
							{
							FormData[Elem.name] = Items[j].value;
							break;
							}
						}
					break;
				}
			}
		return FormData;
		}
	}

