var Lists = Class.create();

Lists.prototype = {
	
	initialize: function (formName) {
		this.Form     	= $(formName);
	}, 
	
	setListControl: function (element,is_multiple)
	{
		var ListControl	= this.Form.elements[element];
		ListControl.multiple = is_multiple;
		var Variable 	= window[element];
		ListControl.length = 0;
		Variable.each (
			function ( obj )
			{
				if ( obj )
				{
					ListControl.length++;
					ListControl.options[ListControl.length-1].value		= obj.value;
		        	ListControl.options[ListControl.length-1].text		= obj.text;
		        	ListControl.options[ListControl.length-1].selected 	= obj.defaultVal;
	        	}
			}
		);
	},
	
	setOnChange : function ( element )
	{
		var ListControl			= this.Form.elements[element];
		ListControl.onchange	= this.onChangeSelect;
		ListControl.onchange();
	},
	
	onChangeSelect : function ()
	{
		var Form 			= this.form;
		var selectedValues 	= Array();
		var variable		= window[this.name];
		var name			= this.name;
		
		var childrenVars	= Array();
		
		for ( var i=0; i<this.options.length; i++ )
		{
			if ( this.options[i].selected )
			{
				selectedValues.push(this.options[i].value);				
			}
		}
		 
		variable.each(
			function ( obj )
			{
				if ( obj )
				{
					var sel = selectedValues.find(
						function ( value )
						{
							return (obj.value == value);	
						}
					);
					
					var child = false;
					if( sel )
					{
						obj.children.each(
							function ( v )
							{
								child = childrenVars.find(
									function ( value )
									{
										return (v == value);	
									}
								);
								
								if ( !child )
								{
									childrenVars.push(v);
								}
							}
						);
					}
				}
			}
		);
		
		childrenVars.each(
			function ( arr, index )
			{
				var vars 	= window[arr];
				var ListControl	= Form.elements[arr];
				ListControl.length = 0;
				window[arr].each (
					function ( obj )
					{
						if ( obj && List.isListElement (obj.parent, name, selectedValues) )
						{
							ListControl.length++;
							ListControl.options[ListControl.length-1].value		= obj.value;
							ListControl.options[ListControl.length-1].text		= obj.text;	
							ListControl.options[ListControl.length-1].selected	= obj.defaultVal;
						}
					}
				);
				
				if ( ListControl.onchange )
				{
					ListControl.onchange();
				}
			}
		); 
	},
	
	isListElement: function ( arr, name, value)
	{
		var flag = false;
		arr.each(
			function ( obj, index )
			{
				var eq = false;
				eq = value.find(
					function ( v )
					{
						return (obj.value == v);	
					}
				);
				if ( obj.name == name && ( !obj.value || eq ) ) flag = true;
			}
		);
		return flag;
	}
	
};

