﻿/** Тип объекта "ctrlОбъяво" */
var typeAd = "Ad";

/** Инстанциируем объект типа "ctrlОбъяво"
 * @returns {objAdControl} Экземпляр "класса" objAdControl
 */
function getAdControlInst()
{
    var inst = new Object();
    
    inst.Type = typeAd;
    
    inst.Id = getObjUniqueId();
    Objects[inst.Id] = inst;

    /** Родительский контроллер Ads */
    inst.ParentAds = null;
    
    /** Сигнатура рекламной системы */
    inst.AS = null;

    inst.SetAS = function (sAS)
    {
        inst.AS = sAS;
        //return;
        if (fDebug == true)
        {
            if (inst.jq != null)
            {
                $('.drop-appear', inst.jq).text(sAS);
            }
        }
        if (inst.AS == asElama)
        {
            if (inst.jqLockerInput !=null)
            {
                inst.jqLockerInput.remove();
                inst.UnlockGUI();
            }
            $('i.adcloseButton', inst.jq).removeClass('closeButtonOnOff');
        }
        else
        {
            inst.UninstallWordsDropArea();
            $('i.adcloseButton', inst.jq).addClass('closeButtonOnOff');
        }
    }
    
    inst.UninstallWordsDropArea = function()
    {
        $('.drop-appear', inst.jq).remove();
        $('.keywordInputContainer', inst.jq).remove();
        //$('.adInputsContainer', inst.jq).remove();
        $('.addcontainer', inst.jq).removeClass('drop');
    }

    inst._locked = true;
    inst.SetLocked = function (bState)
    {
        inst._locked = bState;
    }
    inst.GetLocked = function ()
    {
        return inst._locked;
    }
    
    inst.Parent = null;
    
    inst.Checked = false;
    inst.SetChecked = function (bValue)
    {
        this.Checked = bValue;

        if (this.Parent!=null)
        {
            this.Parent.ChildCheckChanged(this);
        }

        this.SpreadChanges2Ads(adUpdateValueTypeCheckState);
        
        if (this.Checked == true)
        {
            this.jq.addClass('adSelected');
        }
        else
        {
            this.jq.removeClass('adSelected');
        }
    }
    inst.ToggleChecked = function()
    {
        this.SetChecked(!this.Checked);
    }
    
    inst.FindParentPanel = function()
    {
        // STUB копипаст. Сделать прототайпом в фабрике или типа того
        var parent = this.Parent;
        if (parent.Type != typePanel)
        {
            return parent.FindParentPanel();
        }
                else
        {
            return parent;
        }

    }
    inst._queryFullSynchronizationCallback = null;
    inst.SetQueryFullSynchronizationCallback = function (fCallback)
    {
        inst._queryFullSynchronizationCallback = fCallback;
    }

    inst.Close = function(bSkipAdsCloseCall)
    {
        if (bSkipAdsCloseCall != true)
        {
            bSkipAdsCloseCall = false;
        }
        if (bSkipAdsCloseCall==false)
        {
            if (inst.ParentAds!=null)
            {
                if (inst.ParentAds._primarySrc == this) // STUB эту логику вообще в ads 
                {
                    inst.ParentAds.Close();
                }
            }
        }
        inst.Parent.RemoveAd(inst.Id);
    }
    
    inst._active = true;
    
    inst.ToggleDisabledState = function()
    {
        inst._active = !inst._active;
        if (inst._active == true)
        {
            inst.EnableGUI();
        }
        else
        {
            inst.DisableGUI();
        }
    }
    inst.Disable = function(bForceDisableWithoutCloseLogic)  // STUB bForceDisableWithoutCloseLogic
    {
        inst._active = false;
        if (bForceDisableWithoutCloseLogic != true)
        {
            bForceDisableWithoutCloseLogic = false;
        }
        inst.DisableGUI(bForceDisableWithoutCloseLogic);
    }
    inst.Enable = function()
    {
        inst._active = true;
        inst.EnableGUI();
    }
    
    inst._disableguisaivedjq = null;
    inst.DisableGUI = function(bForceDisableWithoutCloseLogic)
    {
        if (bForceDisableWithoutCloseLogic!=true)
        {
            bForceDisableWithoutCloseLogic = false;
        }
        if ((inst.ParentAds!=null) || (bForceDisableWithoutCloseLogic == true)) // STUB эта логика должна быть снаружи
        {
            if ((bForceDisableWithoutCloseLogic == true) || (inst.ParentAds._primarySrc != null))
            {
                if ((bForceDisableWithoutCloseLogic == true) || (inst.ParentAds._primarySrc != inst))
                {
                    inst.adHeaderInput.jq.addClass("invisible");
                    inst.adTextInput.jq.addClass("invisible");
                    inst.adUrlInput.jq.addClass("invisible");
                    inst.jqLockerInput.addClass("invisible");
                    $('<div class="disabledAdBanner">&nbsp;</div>').appendTo(inst.jq);
                    
                    $('i.adcloseButton', inst.jq).addClass('adcloseButtonInversed');
                    //inst._disableguisaivedjq = $('.adInputsContainer', inst.jq);
                    //$('.adInputsContainer', inst.jq).remove();
                    
                    
                    //inst.jq.addClass('adDisabled');
                }
                else
                {
                    inst.Close();
                }
            }
        }
    }
    
    inst.SetReinitNedded = function(bState)
    {
        inst.adHeaderInput.ReinitNedded = true;
        inst.adTextInput.ReinitNedded = true;
        inst.adUrlInput.ReinitNedded = true;
    }
    inst.ReinitEventHandlers = function()
    {
        inst.adHeaderInput.ReinitInputEventHandlers();
        inst.adTextInput.ReinitInputEventHandlers();
        inst.adUrlInput.ReinitInputEventHandlers();
        
        for(keyw in inst.Keywords) {
        	inst.Keywords[keyw].ReinitEventHandlers();
        }
        
        /*  onfocus="comparator(this,50,40,30)" onkeyup="comparator(this,50,40,30)" */
       jQuery(':text',inst.adTextInput.jq).bind('focus keyup click',function()
           {
               comparator(this,75,70,70);
           })
       jQuery(':text',inst.adHeaderInput.jq).bind('focus keyup click',function()
           {
               comparator(this,33,25,25);
           })
   /* */
   
    
    if (inst.jqLockerInput != null)
    {
        inst.jqLockerInput.click(function(e)
                                            {
                                                var adLocked = inst.IsLocked();
                                                
                                                if (adLocked == false)
                                                {
                                                    inst.LockGUI();
                                                    if (inst._queryFullSynchronizationCallback != null)
                                                    {
                                                        inst._queryFullSynchronizationCallback(inst);
                                                    }
                                                }
                                                else
                                                {
                                                    inst.UnlockGUI();
                                                }
                                                
                                            });
    }
        $('.galochka',inst.jq).each(function()
    {
        $(this).click(function()
        {
            inst.ToggleCollapse();
            /*
            $(this).parent('.ad').hasClass('openedd')?
            $(this).parent('.ad').removeClass('openedd') :
            $(this).parent('.ad').addClass('openedd');
            */
        })
    })
        return;
        inst.adHeaderInput = objGetSuperInputInst(false, "#2a3d9c");
        inst.adHeaderInput.TextEnteredCallback = inst.headerSupaInputChangeCallback;
        inst.adHeaderInput.SetValue("Кликните для редактирования заголовка");
        inst.adHeaderInput.SetReadonly(inputsMustStartAsReadonly);
    }
    inst.EnableGUI = function()
    {
        if (inst.ParentAds!=null) // STUB эта логика должна быть снаружи
        {
            if (inst.ParentAds._primarySrc != null)
            {
                if (inst.ParentAds._primarySrc != inst)
                {
                    inst.adHeaderInput.jq.removeClass("invisible");
                    inst.adTextInput.jq.removeClass("invisible");
                    inst.adUrlInput.jq.removeClass("invisible");
                    $('#lockedAd' + inst.Id).removeClass("invisible");
                    $('.disabledAdBanner', inst.jq).remove();
                    
                    $('i.adcloseButton', inst.jq).removeClass('adcloseButtonInversed');

                    //$(inst._disableguisaivedjq).appendTo(inst.jq);
                    
                    
                    //inst.jq.text("хуй");
                    //inst.jq.removeClass('adDisabled');
                }
            }
        }
    }
    
    inst.RemoveKeyword = function(keyId)
    {
        var key = getObjectById(keyId);
        key.jq.remove();
        for (x in this.Keywords)
        {
            var key2 = this.Keywords[x];
            if (key2.Id == key.Id) {
                delete this.Keywords[x];
                break;
            }
        }
    }
    
    inst.ValidateUrl = function(overwrite)
    {
        if (overwrite != true)
        {
            overwrite = false;
        }
        var oldUrl = inst.adUrlInput.Value;
        var regValidate = new RegExp("^http:\/\/[a-z0-9\.-]{3,255}\\.[a-z]{2,4}/?.*", "gi");
        var regCorrection = new RegExp("[^0-9a-zёйцукенгшщзхъфывапролджэячсмитьбю_:\/\\-?.,&=#()+%\\\\]", "gi"); //
        var currentUrl = oldUrl.replace(regCorrection, "");
        if (regValidate.test(currentUrl) == false)
        {
            return true;
        }
        if (oldUrl != currentUrl)
        {
            if (overwrite == true)
            {
                inst.adUrlInput.SetValue(currentUrl);
            }
            return true;
        }
        else
        {
            return false;
        }
    }
    
    inst.SpreadChanges2Ads = function(adUpdateValueType)
    {
        if (this.ParentAds!=null)
        {
            this.ParentAds.SpreadChanges2Ads(this, adUpdateValueType);
        }
    }

    inst.headerSupaInputChangeCallback = function(newSupaInputTextValue)
    {
        inst.SpreadChanges2Ads(adUpdateValueTypeHeader);
        SetNeed2BeSaved(true);
    }
    inst.textSupaInputChangeCallback = function(newSupaInputTextValue)
    {
        inst.SpreadChanges2Ads(adUpdateValueTypeText);
        SetNeed2BeSaved(true);
    }
    inst.urlSupaInputChangeCallback = function(newSupaInputTextValue)
    {
        inst.SpreadChanges2Ads(adUpdateValueTypeUrl);
        SetNeed2BeSaved(true);
    }
    
    inst.IsLocked = function()
    {
        var koicho = inst.jq;
        if (koicho == null)
        {
            return false;
        }
        if (koicho.hasClass("adLocked") == true)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    var LockedAttrCode = "";
    var LockedInputCode = "";
    var inputsMustStartAsReadonly = false;
    var OnOffButtonCode = "";
    if (inst.AS != asElama)
    {
        LockedAttrCode = " adLocked";
        LockedInputCode = '<a href="#" id="lockedAd' + inst.Id + '" style="color: #000; font-size: 11px">Как в Еламе. Персонализировать?</a>';// <input type="checkbox" id="lockedAd' + inst.Id + '" name="lockedAd' + inst.Id + '" checked="checked" />';
        inputsMustStartAsReadonly = true;
        OnOffButtonCode = " closeButtonOnOff";
    }
    else
    {
    }
    
    inst.adHeaderInput = objGetSuperInputInst(false, "#2a3d9c");
    inst.adHeaderInput.TextEnteredCallback = inst.headerSupaInputChangeCallback;
    inst.adHeaderInput.SetValue("Кликните для редактирования заголовка");
    inst.adHeaderInput.SetReadonly(inputsMustStartAsReadonly);
    
    inst.adTextInput = objGetSuperInputInst();
    inst.adTextInput.TextEnteredCallback = inst.textSupaInputChangeCallback;
    inst.adTextInput.SetValue("Кликните для редактирования текста объявления");
    inst.adTextInput.SetReadonly(inputsMustStartAsReadonly);
    
    inst.adUrlInput = objGetSuperInputInst(false, "#006600");
    inst.adUrlInput.TextEnteredCallback = inst.urlSupaInputChangeCallback;
    inst.adUrlInput.SetValue("http://domain.ru");
    inst.adUrlInput.SetReadonly(inputsMustStartAsReadonly);
    
    $(inst.adUrlInput).bind("onEditModeQuit", function (eventOrSmth, currentInputValue)
                            {
                                if (inst.ValidateUrl(false) == true)
                                {
                                    if (confirm("Внимание! Введенный адрес страницы кажется системе некорректным! Вы уверены, что хотите оставить его без изменений?") == true)
                                    {
                                        // Да
                                    }
                                    else
                                    {
                                        // Нет
                                        inst.adUrlInput.SetEditMode(true);
                                    }
                                }
                                else
                                {
                                    
                                }
                            }
                            );
    

    inst._keywordInputId = "addKeywordInput-" + inst.Id;

    var code = '<div class="ad openedd' + LockedAttrCode + '"><b class="galochka" title="Свернуть объявление"><!-- --></b><div class="addcontainer drop">'
            +   '<i href="#" class="closeButton adcloseButton' + OnOffButtonCode + '" onclick="var ad=getObjectById(\'' + inst.Id + '\'); ad.ToggleDisabledState(); oddShuffle();"></i>'
            +   '<div class="adInputsContainer"></div>'
            +   '<div class="drop-appear">Перетащите сюда выбранные слова из левой панели</div>'
            +   '<div class="keywordInputContainer"></div>'
            +   '</div>' + LockedInputCode + '</div>';
    
    var jq = $(code);
    
    inst.jq = jq;
    inst.jqContents = inst.jq;
    inst.jqKeywordInput = $('.keywordInputContainer', inst.jq);
    inst.jqAdInputs = $('.adInputsContainer', inst.jq);
    

        
    $(inst.jq).click(function(e){
        inst.SetChecked(true);
        //return false;
        });
    
    inst._collapsed = false;
    
    inst.IsCollapsed = function()
    {
        return inst._collapsed;
    }
    inst.ToggleCollapse = function()
    {
        inst.SetCollapsed(!inst._collapsed);
    }
    inst.SetCollapsed = function(bValue)
    {
        inst._collapsed = bValue;
        if (inst._collapsed == true)
        {
            inst.jq.removeClass('openedd');
            inst.SpreadChanges2Ads(adUpdateValueTypeCollapsedState);
        }
        else
        {
            inst.jq.addClass('openedd');
            inst.SpreadChanges2Ads(adUpdateValueTypeCollapsedState);
        }
    }
    
    inst.jqLockerInput = $('#lockedAd' + inst.Id, inst.jq);

    inst.LockGUI = function() // STUB задать параметр и сделать один метод вместо Lock/Unlock
    {
        inst.jq.addClass('adLocked');
        inst.adHeaderInput.SetReadonly(true);
        inst.adTextInput.SetReadonly(true);
        inst.adUrlInput.SetReadonly(true);
        inst.jqLockerInput.text("Как в Еламе. Персонализировать?");

    }
    
    inst.UnlockGUI = function()
    {
        inst.jq.removeClass('adLocked');
        inst.adHeaderInput.SetReadonly(false);
        inst.adTextInput.SetReadonly(false);
        inst.adUrlInput.SetReadonly(false);
        var asVinPadOlo = "Еламы";
        switch (inst.AS)
        {
            case asBegun:
                asVinPadOlo = "Бегуна";
                break;
            case asYandex:
                asVinPadOlo = "Яндекса";
                break;
            case asGoogle:
                asVinPadOlo = "Гугла";
                break;
            default:
                asVinPadOlo = "неизвестной рекламной системы (позовите программиста!)";
        }
        inst.jqLockerInput.text("Персонализированное для " + asVinPadOlo + " объявление. Отменить персонализацию?");
    }
    
    
    inst.MarkOdd = function()
    {
        jq.addClass("oddNode");
    }
    
    inst.IsDroppable = false;
    
    inst.MakeDroppable = function()
    {
        $(".drop", inst.jq).droppable({
            accept: "*", // STUB исправить звездочку (на .values (?))
            activeClass: 'droppable-active',
            hoverClass: 'droppable-hover',
            over: function (e, ui) {
                MarkDragHelperAsPlussed();
            },
            out: function (e, ui) {
                MarkDragHelperAsNormal();
            }, 

            drop: function(ev, ui) {
                if (ui.draggable.attr('id') == 'draggableindexPageHelp')
                {
                    // демовый дроп
                    inst.AddKeyword('Добавленные');
                    inst.AddKeyword('Вами');
                    inst.AddKeyword('ключевые');
                    inst.AddKeyword('слова');
                    SetNeed2BeSaved(true);
                }
                else
                {
                    var destPanel = inst.Parent; // STUB тут что-то не то, что в паренте лежит панель, бля, потому что должен таб (по аналогии с вордстатом), но тут вот так, или я что-то путаю. Короче, потом разобраться и привести к интерфейсу все эти .Parent и .Panel
                    var srcPanel = GetAnotherPanel(destPanel);
                    var nodeId = ui.draggable.parent().attr('id');
                    if (nodeId != null)
                    {
                        var node = getObjectById(nodeId);
                        if (node!=null)
                        {
                            var treeNode = node.ParentTreeNode;
                            if (treeNode!= null)
                            {
                                for (x in treeNode.SelectedNodes)
                                {
                                    var n = treeNode.SelectedNodes[x];
                                    if (n!=null) // STUB убрать это после того, как SelectedNodes начнет очищаться от невыделенных элементов вместо забивания их нуллами
                                    {
                                        if (n.Values)
                                        {   
                                            inst.AddKeyword(n.Values[0]);
                                            SetNeed2BeSaved(true);
                                        }
                                    }
                                }
                            }
                        }
                    }
            /*  
                document.getElementById("display").innerHTML =  $(ui.draggable).children("li:first").text(); 
    
                var lid = ($(ui.draggable).children("li:first"));
            
                var removeLink = document.createElement("a"); 
                removeLink.innerHTML = "remove";
                removeLink.href = "#";
                removeLink.onclick = function() 
                {     
                    $(".drop").children().remove("#"+lid[0].id);
                    $(this).remove();       
                }
  
                $(this).append($(ui.draggable).clone().children("li:first").addClass("blocker"));  
                $(this).append(removeLink);
                */
                }
            }
        });
        inst.IsDroppable = true;
    }
    
    
    inst.InputCallback = function(sValue)
    {
        sValue = sValue.replace(/^\s+|\s+$/g, '');
        if (sValue!="")
        {
            if (inst.KeywordExists(sValue) == false)
            {
                inst.AddKeyword(sValue);
                SetNeed2BeSaved(true);
            }
            else
            {
                alert("Ключевое слово \"" + sValue + "\" уже указанно для использования в данном объявлении.\r\n\r\nА здесь будет галочка \"Больше не раздражать этим сообщением\"")
            }
        }
    }
    
    inst._input = objGetFineInputInst("","", inst.InputCallback);
    inst._input.jq.appendTo(inst.jqKeywordInput);
    
    
    inst.adHeaderInput.jq.appendTo(inst.jqAdInputs);
    inst.adTextInput.jq.appendTo(inst.jqAdInputs);
    inst.adUrlInput.jq.appendTo(inst.jqAdInputs);
    
    inst.adHeaderInput.jq.addClass("adHeader");
    inst.adUrlInput.jq.addClass('domainName');
    
    /*  onfocus="comparator(this,50,40,30)" onkeyup="comparator(this,50,40,30)" */
       jQuery(':text',inst.adTextInput.jq).bind('focus keyup click',function()
           {
               comparator(this,75,70,70);
           })
       jQuery(':text',inst.adHeaderInput.jq).bind('focus keyup click',function()
           {
               comparator(this,33,25,25);
           })
   /* */
    inst.Keywords = new Array();
    // STUB сделать параметр объектом со всеми вытекающими
    inst.AddKeyword = function (sKeyword)
    {
        if (this.Keywords[sKeyword] == null)
        {
            var key = objGetKeywordInst();
            key.SetContextMenu(keywordContextMenu);
            this.Keywords[sKeyword] = key;// hui"; // STUB сделать кейворды объектами
            key.jq.appendTo(this.jqContents);
            key.SetParent(this);
            key.SetValue(sKeyword);
            key.MakeDroppable();
        }
        return this.Keywords[sKeyword];
    }
    inst.KeywordExists = function (sKeyword)
    {
        return (this.Keywords[sKeyword] != null);
    }
    
    // ad
    inst.LoadXML = function (xml)
    {
        //STUB опять та же хуйня если че
        //xml = GetJQXMLDoc(xml.outerHTML);
        $('adH', xml).each ( function (index, el)
                                {
                                    var a = xml;
                                    var value = $(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>","")
                                    //alert('val_outer : ' + this.outerHTML);
                                    //alert('val_inner : ' + this.innerHTML);
                                    inst.adHeaderInput.SetValue(value); // STUB мультибраузерный ололоколхоз
                                    return;
                                } );
        $('adT', xml).each ( function (index)
                                {
//618 в IE
                                    inst.adTextInput.SetValue($(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>","")); // STUB мультибраузерный ололоколхоз
                                    return;
                                } );
        $('aU', xml).each ( function (index)
                                {
                                    inst.adUrlInput.SetValue($(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>","")); // STUB мультибраузерный ололоколхоз
                                    return;
                                } );
        $('k', xml).each ( function (index)
                                {
                                    var tempStopKeywordsValues = new Array();
                                    $('ksK', this).each ( function (index)
                                                               {
                                                                    var stopKeyword = objGetKeywordInst();
                                                                    stopKeyword.LoadXML(this);
                                                                    //keyword.AddStopKeyword(stopKeyword.Value);
                                                                    tempStopKeywordsValues[tempStopKeywordsValues.length] = stopKeyword.Value;
                                                                } );
                                    var del = $('ksK', this);
                                    if ((del != null) && (del.remove != null))
                                    {
                                            try
                                            {
                                                del.remove();
                                            }
                                            catch (e)
                                            {
                                                
                                            }
                                    }
                                    var Value = $('v', this).text();
                                    var Stats = $('kS', this).text();
                                    if (Value.length>0)
                                    {
                                        keyword = inst.AddKeyword(Value);
                                        keyword.SetValue(Value, Stats);
                                        
                                        for (x in tempStopKeywordsValues)
                                        {
                                            var stopKeyVal = tempStopKeywordsValues[x];
                                            keyword.AddStopKeyword(stopKeyVal);
                                        }
                                        //inst.AddKeyword(el.text());
                                    }
                                    return;
                                } );
        $('adA', xml).each ( function (index, el)
                            {
                                inst._loadingTimeGroupId = $(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>","") ;
                                //alert("_loadingTimeGroupId: " + inst._loadingTimeGroupId);
                                return;
                            }
                            );
        $('as', xml).each ( function (index, el)
                            {
                                inst.SetAS($(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>",""));
                                return;
                            }
                            );
        $('aL', xml).each ( function (index, el)
                            {
                                var bState = $(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>","");
                                if (bState == "true") // STUB ололо
                                    bState = true;
                                else
                                    bState = false;
                                inst.SetLocked(bState);
                                if (bState == true)
                                {
                                    inst.LockGUI();
                                }
                                else
                                {
                                    inst.UnlockGUI();
                                }
                                //alert("_loadingTimeGroupId: " + inst._loadingTimeGroupId);
                                
                                return;
                            }
                            );
        $('aO', xml).each ( function (index, el)
                            {
                                var bState = $(this).text().replace("<!--[CDATA[", "").replace("]]-->", "").replace("<![CDATA[","").replace("]]>","");

                                if (bState == "true") // STUB ололо
                                    bState = true;
                                else
                                    bState = false;
                                if (bState == true)
                                {
                                    inst.Disable(true);
                                }
                                else
                                {
                                    inst.Enable();
                                }
                                //alert("_loadingTimeGroupId: " + inst._loadingTimeGroupId);
                                
                                return;
                            }
                            );
    }
    
    inst._loadingTimeGroupId = -1;

    inst.getOuterXML = function()
    {
        var ret = "<ad>";
        
        ret += "<adA><![CDATA[" + this.ParentAds.Id + "]]></adA>";
        ret += "<as><![CDATA[" + this.AS + "]]></as>";
        ret += "<adH><![CDATA[" + this.adHeaderInput.Value + "]]></adH>";
        ret += "<adT><![CDATA[" + this.adTextInput.Value + "]]></adT>";
        ret += "<aU><![CDATA[" + this.adUrlInput.Value + "]]></aU>";
        ret += "<aL><![CDATA[" + this.IsLocked() + "]]></aL>";
        ret += "<aO><![CDATA[" + !this._active + "]]></aO>";
        
        ret += "<adK>";
        
        for (x in this.Keywords)
        {
            var keyword = this.Keywords[x];
            ret += keyword.getOuterXML();
        }
        
        ret += "</adK>";
        
        ret += "</ad>";
        
        return ret;
    }
    
    inst.ReinitEventHandlers();
    
    return inst;
}


