/**
  * Render block HTML
  *
  * @return string
  * @throws \Exception
  */
 protected function _toHtml()
 {
     if (!$this->_isPreparedToRender) {
         $this->_prepareToRender();
         $this->_isPreparedToRender = true;
     }
     if (empty($this->_columns)) {
         throw new \Exception('At least one column must be defined.');
     }
     return parent::_toHtml();
 }
 public function _toHtml()
 {
     $script = "<script type=\"text/javascript\">\n                document.observe('dom:loaded', function() {\n                    \$\$('tr#row_rule_condition tr td:first-child select').each(function(item) {\n                        doUpdateWithValues(item);\n                    });\n\n                    \$\$('tr#row_rule_condition tr td:first-child select').each(function(item) {\n                        Event.observe(item,'change', function(){\n                            doUpdate(item);\n                        });\n                    });\n\n                    \$\$('tr#row_rule_condition button.add').each(function(item) {\n                         Event.observe(item,'click', function(){\n                            \$\$('tr#row_rule_condition tr td:first-child select').each(function(item) {\n                                 Event.observe(item,'change', function(){\n                                    doUpdate(item);\n                                });\n                            });\n                            \$\$('tr#row_rule_condition tr td select').each(function(item) {\n                                Event.observe(item,'change', function(){\n                                     if(item.readAttribute('title') == 'conditions'){\n                                        doUpdateForCondition(item);\n                                     }\n                                });\n                            });\n                        });\n                    });\n\n                    function doUpdate(item){\n                        var url = '" . $this->getUrl('connector/rules/ajax') . "';\n                        var cond = item.up(1).down().next();\n                        var condName = cond.down().readAttribute('name');\n                        var value = item.up(1).down().next(1);\n                        var valueName = value.down().readAttribute('name');\n                        var attribute = item.value;\n                        new Ajax.Request(url, {\n                            method: 'post',\n                            parameters: {\n                                attribute: attribute,\n                                condition: condName,\n                                value: valueName\n                            },\n                            onSuccess: function(transport){\n                                var json = transport.responseJSON;\n                                cond.update(json.condition);\n                                value.update(json.cvalue);\n\n                                \$\$('tr#row_rule_condition tr td select').each(function(item) {\n                                    Event.observe(item,'change', function(){\n                                         if(item.readAttribute('title') == 'conditions'){\n                                            doUpdateForCondition(item);\n                                         }\n                                    });\n                                });\n                            }\n                        });\n                    }\n\n                    function doUpdateWithValues(item){\n                        var url = '" . $this->getUrl('connector/rules/selected') . "';\n                        var arrayKey = item.up(1).readAttribute('id');\n                        var cond = item.up(1).down().next();\n                        var condName = cond.down().readAttribute('name');\n                        var value = item.up(1).down().next(1);\n                        var valueName = value.down().readAttribute('name');\n                        var attribute = item.value;\n                        var ruleId = \$('rule_id').value;\n                        new Ajax.Request(url, {\n                            method: 'post',\n                            parameters: {\n                                attribute: attribute,\n                                condition: condName,\n                                value: valueName,\n                                arraykey: arrayKey,\n                                ruleid: ruleId\n                            },\n                            onSuccess: function(transport){\n                                var json = transport.responseJSON;\n                                cond.update(json.condition);\n                                value.update(json.cvalue);\n\n                                \$\$('tr#row_rule_condition tr td select').each(function(item) {\n                                    Event.observe(item,'change', function(){\n                                         if(item.readAttribute('title') == 'conditions'){\n                                            doUpdateForCondition(item);\n                                         }\n                                    });\n                                });\n                            }\n                        });\n                    }\n\n                    function doUpdateForCondition(item){\n                        var url = '" . $this->getUrl('connector/rules/value') . "';\n                        var attribute = item.up(1).down();\n                        var attributeValue = attribute.down().value;\n                        var value = item.up().next();\n                        var valueName = value.down().readAttribute('name');\n                        var condValue = item.value;\n                        new Ajax.Request(url, {\n                            method: 'post',\n                            parameters: {\n                                attributeValue: attributeValue,\n                                value: valueName,\n                                condValue: condValue\n                            },\n                            onSuccess: function(transport){\n                                var json = transport.responseJSON;\n                                value.update(json.cvalue);\n                            }\n                        });\n                    }\n                });\n            </script>";
     return '<input type="hidden" id="' . $this->getElement()->getHtmlId() . '"/>' . parent::_toHtml() . $script;
 }