
		function MDrawSuite (id)
		{
			this.m_elementId = id;

			this.m_unserialized = false;
            this.m_displaySelects = true;
            
			this.m_objects = new Array ();
            this.m_pass = new Array ();
            this.m_selects = new Array ();
			
			this.controlAll = MDrawSuite_controlAll;
            this.hideSelects = MDrawSuite_hideSelects;
                this._hideSelects = _MDrawSuite_hideSelects;
            this.showSelects = MDrawSuite_showSelects;
                this._showSelects = _MDrawSuite_showSelects;
                
				this._unserialize = _MDrawSuite_unserialize;
                
            this.complete = MDrawSuite_complete;
            this.completeActiveControler = MDrawSuite_completeActiveControler;
            this.completeAcceptor = MDrawSuite_completeAcceptor;
                this._fillAcceptor = _MDrawSuite_fillAcceptor;
                this._checkControler = _MDrawSuite_checkControler;
		}
		
		
				function _MDrawSuite_unserialize ()
				{
//alert ('in: ' + this.m_elementId);
					if (!this.m_unserialized)
					{
                        if (document.all [this.m_elementId + '_objects'])
                        {
    						var objects = unescape (document.all [this.m_elementId + '_objects'].value);
    						this.m_objects = unserialize (objects);
                        }
                        
						if (!this.m_objects)
							this.m_objects = new Array ();
//debug (this.m_objects, 'this.m_objects');
                        
                        if (document.all [this.m_elementId + '_pass'])
                        {
    						var pass = unescape (document.all [this.m_elementId + '_pass'].value);
    						this.m_pass = unserialize (pass);
                        }
                        
						if (!this.m_pass)
							this.m_pass = new Array ();
//debug (this.m_pass, 'this.m_pass');
                        
                        if (document.all [this.m_elementId + '_selects'])
                        {
    						var selects = unescape (document.all [this.m_elementId + '_selects'].value);
    						this.m_selects = unserialize (selects);
                        }
                        
						if (!this.m_selects)
							this.m_selects = new Array ();
//debug (this.m_selects, 'this.m_selects');
                        
						this.m_unserialized = true;
					}
				}
		
		
		function MDrawSuite_controlAll (flag)
		{
			this._unserialize ();

            flag = (!flag) ? false : true;
            
			var result = true;
            var allowEmpty = false;
			for (var i in this.m_objects)
            {
                if (this.m_objects [i]['multiple'])
                {
                    eval ('allowEmpty = ' + this.m_objects [i]['name'] + '.controlEmptyMultiple(\'' + this.m_objects [i]['id'] + '\');');
                    eval ('result &= ' + this.m_objects [i]['name'] + '.controlAll(\'' + this.m_objects [i]['id'] + '\',' + flag + ',' + allowEmpty + ');');
                }
                else
				    eval ('result &= ' + this.m_objects [i]['name'] + '.controlAll(\'' + this.m_objects [i]['id'] + '\',' + flag + ');');
                    
                if (!result)
                    break;
            }
            
			return result;
		}
        
        
		function MDrawSuite_hideSelects (flag)
		{
			this._unserialize ();
		
			for (var i in this.m_objects)
				eval (this.m_objects [i]['name'] + '._hideSelects(' + flag + ');');
                
            this._hideSelects ();
		}


                function _MDrawSuite_hideSelects ()
                {
                	if (this.m_displaySelects)
                	{
                		for (var i = 0; i < this.m_selects.length; i++) {
                			if (document.all [this.m_selects [i]]) {
                				var object = document.all [this.m_selects [i]];
                
                				object.style.display = 'none';
                				var replaceObject = document.createElement('font');
                
                				replaceObject.id = this.m_selects [i] + 'f';
                				replaceObject.className = object.className;
                				replaceObject.style.width = object.style.width;
                				replaceObject.style.height = object.style.height;
        
                				object.insertAdjacentElement('afterEnd',replaceObject);
                			}
                        }
                
                		this.m_displaySelects = false;
                	}
                }        
       
        
		function MDrawSuite_showSelects (flag)
		{
			this._unserialize ();
		
			for (var i in this.m_objects)
				eval (this.m_objects [i]['name'] + '._showSelects(' + flag + ');');
                
            this._showSelects ();
		}
        
        
                function _MDrawSuite_showSelects ()
                {
                	if (!this.m_displaySelects)
                	{
                		for (var i = 0; i < this.m_selects.length; i++)
                			if (document.all [this.m_selects [i]])
                			{
                    			var object = document.all [this.m_selects [i]];
                    
        			            object.style.display = 'inline';
        
                    			var replaceObject = document.all [this.m_selects [i] + 'f'];
                                if (replaceObject)
        						    replaceObject.removeNode (true);
                			}
                
                		this.m_displaySelects = true;
                	}
                }
        
        
        function MDrawSuite_complete (refNo, object)
        {
            this._unserialize ();
            
            var name = object.name;
            
            if (this.m_pass [refNo] && this.m_pass [refNo]['d'] && this.m_pass [refNo]['d'][name])
            {
                var order = this.m_pass [refNo]['d'][name]['o'];

                if (this.m_pass [refNo] && this.m_pass [refNo]['a'] && object.value)
                {
                    if (!this.m_pass [refNo]['v'])
                        this.m_pass [refNo]['v'] = new Array ();
                    
                    this.m_pass [refNo]['v'][order] = object.value;
                    
                    if (!this._checkControler (refNo))
                        return;
                    
                   this._fillAcceptor (refNo);
                }
            }
        }
        
        
        function MDrawSuite_completeActiveControler (refNo)
        {
            if (this.m_pass [refNo] && this.m_pass [refNo]['_c'])   
            {
                var action = this._checkControler (refNo);
                
                if (action)
                {
                    if (this.m_pass [refNo] && this.m_pass [refNo]['d'])
                    {
                        for (var i in this.m_pass [refNo]['d'])
                        {
                            var object = document.all [i];
                            this.complete (refNo, object);
                        }
                    }
                }
                else
                {
                    this.m_pass [refNo]['v'] = new Array ();
                    this._fillAcceptor (refNo, true);
                }
            }
        }
        
        
        function MDrawSuite_completeAcceptor (refNo, name, flag, flag2)
        {
            this._unserialize ();

            if (this.m_pass [refNo] && this.m_pass [refNo]['a'])
            {
                if (!flag)
                    this.m_pass [refNo]['a'][name]['_e'] = null;
                else if (this.m_pass [refNo]['a'][name]['e'] == 'yes')
                    this.m_pass [refNo]['a'][name]['_e'] = true;
                else if (this.m_pass [refNo]['a'][name]['e'] == 'no' && !flag2)
                    this._fillAcceptor (refNo, true);
            }
        }
        
        
                function _MDrawSuite_fillAcceptor (refNo, flag)
                {
                    for (var i in this.m_pass [refNo]['a'])
                    {
                        var separator = ', ';
                        separator = unescape (this.m_pass [refNo]['a'][i]['s']);
                        
                        if (this.m_pass [refNo]['a'][i]['e'] == 'yes' && this.m_pass [refNo]['a'][i]['_e'])
                            continue;
                        
                        var result = '';
                        var iterator = '';

                        if (this.m_pass [refNo]['v'])
                        {
                            for (var n = 0; n < this.m_pass [refNo]['v'].length; n++)
                            {
                                var item = this.m_pass [refNo]['v'][n];
                                if (item && item != '')
                                {
                                    result += iterator + item;
                                    iterator = separator;
                                }
                            }
                        }
                        
                        if (flag || result != '')
                        {
                            document.all [i].value = result;
                            for (var r in this.m_pass)
                                if (this.m_pass [r]['d'] && this.m_pass [r]['d'][i])
                                    this.complete (r, document.all [i]);
                        }
                    }
                }
        
        
                function _MDrawSuite_checkControler (refNo)
                {
                    var allowFill = true;
                    
                    if (this.m_pass [refNo]['_c'])   
                    {
                        for (var i in this.m_pass [refNo]['_c'])
                        {
                            var controler = i;
                            var type = this.m_pass [refNo]['_c'][i]['_i'];
                            var object = document.all [i];

                            switch (type)
                            {
                                case 'text':
                                case 'textarea':
                                case 'hidden':
                                case 'file':
                                case 'image':
                                case 'password':
                                    if (!object.value || object.value == '')
                                        allowFill &= false;
                                    break;
                                
                                case 'select':
                                case 'multiselect':
                                    var empty = true;
                                    for (var i = 0; i < object.length; i++)
                                        if (object [i].selected == true)
                                        {
                                            empty = false;
                                            break;
                                        }
                                    
                                    if (empty)
                                        allowFill &= false;
                                    break;
                                    
                                case 'checkbox':
                                case 'radio': 
                                    if (object.length)
                                    {
                                        var empty = true;
                                        for (var i = 0; i < object.length; i++)
                                            if (object [i].checked == true)
                                            {
                                                empty = false;
                                                break;
                                            }
                                            
                                        if (empty)
                                            allowFill &= false;
                                    }
                                    else if (object.checked == false)
                                        allowFill &= false;
                                    break;
                            }
                        }
                    }
                    
                    return allowFill;
                }

