﻿Type.registerNamespace("MobileSystem.UI");

MobileSystem.UI.DemoEditorManager = function(){
    MobileSystem.UI.DemoEditorManager.initializeBase(this); 
    this._editorPanelBehavior;      //EditorパネルのBehaviorインスタンス
    this._editor = "";              //EditorFrame
    this._editorDocument = null;    //EditorDocument
    this._editorElement=null;
    this._imgElmList=null;          //絵文字エレメント格納リスト
    this._currentAlign;             //位置情報
    this._bInitOpen = false;        //エディタの初期Openフラグ（デバッグ用）
    this._bDebug = false;           //Debugフラグ
    
    this._onEditorBlurHandler=null;
    this._onSelectPicElmHandler=null;
    this._onClickContentsListHandler=null;
    this._onPropChangeHandler=null;
    
    this._nonSupportTag="";         //Editorでサポートしないタグ情報を格納
//    this._marqueeManager;           //MarqueeManager
//    this._linkManager;              //LinkManager
    this._alignManager;             //AlignManager
    this._editorMode;               //Editorモード
    this._colorPicker = null;       //カラーピッカー
    this._editorRange=null;
    this._ieIntervalID = null;
    
//    this._linkListWindow=null;      //Link用ContentsListWindow
    //property
    this.editorBehaviorID="";
};

MobileSystem.UI.DemoEditorManager.prototype ={
    initialize:function(editor) {
        //Editorの初期化処理（引数はEditorエリア:iframeの$getしたもの）
        MobileSystem.UI.DemoEditorManager.callBaseMethod(this,'initialize');
        
        this._editorPanelBehavior=$find(this.editorBehaviorID);
        this._editorMode = MobileSystem.UI.EditorMode.EDITOR_LITERAL;//初期値を設定
        
        /*Firefoxではiframe非表示時に取得したDocumentは表示時のDocumentと異なり、
        且つDesignModeの変更もできません。
        よってここではdocumentの取得とデザインモードの変更は行いません。
        デザインモードの変更はエディタのOpen時に行います*/
        
//        //編集可能になるようにデザインモードを設定する。
//        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
//            //IEの場合
//            this._editor = frames.editor;//IFrameのIDがeditor
//            this._editorDocument = this._editor.document;
//            this._editorDocument.designMode = "On";
//            this._editorElement = $get("editor");
//            
//        }else if((Sys.Browser.agent === Sys.Browser.Firefox) ||
//                 (Sys.Browser.agent === Sys.Browser.Safari) ||
//                 (Sys.Browser.agent === Sys.Browser.Opera)){
//            //this._editor = editor;
//            this._editor =$get("editor").contentWindow;
//            if(Sys.Browser.agent === Sys.Browser.Firefox){
//                this._editorDocument = this._editor.document;
//                this._editorElement = this._editor.document;
//                //上記未検証
//                //動作しない場合はhttp://www.codeproject.com/useritems/HtmlEditor.asp?msg=1969090を参照
//            }else{
//                this._editorDocument = this._editor.contentDocument;
//            }
//            this._editorDocument.designMode = "on";
//        }
        //編集可能になるようにデザインモードを設定する。
        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            //IEの場合
            this._editor = frames.editor;//IFrameのIDがeditor
            this._editorElement = $get("editor");
            this._editorDocument = this._editor.document;
            this._editorDocument.designMode = "On";
            
        }else if((Sys.Browser.agent === Sys.Browser.Firefox) ||
                 (Sys.Browser.agent === Sys.Browser.Safari) ||
                 (Sys.Browser.agent === Sys.Browser.Opera)){
            this._editor =$get("editor").contentWindow;
            this._editorElement = $get("editor");
            //FirefoxはエディタがOpenになった後のDocumentを取得する必要があるので、ここでは設定しない
        }
        
        //イベントを定義
        this._onEditorBlurHandler = Function.createDelegate(this, this._onEditorBlur);
        $addHandler(this._editorElement, 'blur', this._onEditorBlurHandler);
        
        //絵文字データの設定処理
        this._initPictEditor();
        
        //Editorでサポートしないタグ情報を生成
        this._nonSupportTag=new Array("div","table","object");
//        //MarqueeManagerを作成
//        this._marqueeManager = $create(MobileSystem.UI.MarqueeManager, {"marqueeElmID" : "demoMarquee","direcL2RradID" : "radL2R","direcR2LradID" : "radR2L"}, null, null, null);
//        
        //カラーピッカーを生成する。
        this._colorPicker = $create(MobileSystem.UI.DemoColorPicker, 
                        {"popupBehaviorID":"editorColorPickerBehavior",
                        "pickerType":"1",
                        "parentIconAreaID":"ctl00_ContentPlaceHolder1_pnlEditorCPickerIcon",
                        "selectedAreaID":"selectedEditorColorArea",
                        "paretnAreaID":"ctl00_ContentPlaceHolder1_EditorColorPickerPanel"}, null, null, null);
        this._colorPicker.setCallBackFunc(Function.createDelegate(this,this._onSelectColor));
        this._colorPicker.setSelectedColor("#000000");//default color
        
//        //LinkManagerを作成
//        this._linkManager = $create(MobileSystem.UI.LinkManager, {"parentElmID" : "linkIcon",
//                                                                  "urlInputAreaID":"ctl00_ContentPlaceHolder1_ContentsTabContainer_mainTab_txtUrlLink",
//                                                                  "telInputAreaID":"ctl00_ContentPlaceHolder1_ContentsTabContainer_mainTab_txtTelLink",
//                                                                  "mailInputAreaID":"ctl00_ContentPlaceHolder1_ContentsTabContainer_mainTab_txtMailLink"},
//                                                                   null, null, null);
//        this._linkManager.setLinkCallback(Function.createDelegate(this, this._onLinkTypeSet));
        
        //AlignManagerを作成
        this._alignManager = $create(MobileSystem.UI.DemoAlignManager, {"parentElmID" : "alignIconArea"}, null, null, null);
        this._alignManager.seAlignCallback(Function.createDelegate(this, this._onSelectAlign));
        this._currentAlign = MobileSystem.UI.AlignType.NOSET;
        
//        //LinkContentsリストを開くイベントをボタンに設定
//        this._onClickContentsListHandler = Function.createDelegate(this, this._onClickContentsList);
//        $addHandler($get("btnLinkListOpen"), 'click', this._onClickContentsListHandler);
        
        
        //
//        if(!this._bDebug){
//            var debugTitleArea = $get("debugTitle");
//            var debugButtonArea = $get("debugButtonArea");
//            debugTitleArea.style.display="none";
//            debugButtonArea.style.display="none";
//        }
        
        //不具合113対応（2007/09/13追加）
        this._onPropChangeHandler = Function.createDelegate(this, this._onPropChange);
        $addHandler($get('chkbxReturnCode'), 'propertychange', this._onPropChangeHandler);
        $addHandler($get('chkbxAddRetCodeToEnd'), 'propertychange', this._onPropChangeHandler);
//        $addHandler($get('radR2L'), 'propertychange', this._onPropChangeHandler);
//        $addHandler($get('radL2R'), 'propertychange', this._onPropChangeHandler);
//      
        
    },
    _onPropChange : function(e){
        this.setFocus();
    },
    /******エディターのOPEN処理***
    editorMode  :MobileSystem.UI.EditorMode.EDITOR_LITERAL
                :MobileSystem.UI.EditorMode.EDITOR_MARQUEE
                :MobileSystem.UI.EditorMode.EDITOR_LINK
    */
//    openEditor:function(editorMode){
//        
//        this._editorMode=editorMode;
//        var editorMainArea = $get("ctl00_ContentPlaceHolder1_ContentsTabContainer_mainTab_EditorPanel");
//        var marqueArea = $get("marqueeArea");
//        var urlLinkArea = $get("urlLinkArea");
//        var telLinkArea = $get("telLinkArea");
//        var mailLinkArea = $get("mailLinkArea");
//        var alignIconArea = $get("alignIconArea");
//        var alignIconTitleArea = $get("alignIconTitle");
//        var alignIconColArea = $get("alignIconColArea");
//        var header = $get("ctl00_ContentPlaceHolder1_ContentsTabContainer_mainTab_pnlHeader");
//        
//        alignIconArea.style.display="";
//        alignIconTitleArea.style.display="";
//        alignIconColArea.style.display="";
//        
//        urlLinkArea.className="urlAreaInVisible";
//        telLinkArea.className="urlAreaInVisible";
//        mailLinkArea.className="urlAreaInVisible";
//        
//        var linkIconHeader = $get("linkHeader");   
//        var linkIconArea = $get("linkItem");
//        linkIconHeader.style.display="none";
//        linkIconArea.style.display="none";
//        
//        var retcodeHeader =$get("retcodeHeader");
//        var retcodeItem = $get("retcodeItem");
//        retcodeHeader.style.display="";
//        retcodeItem.style.display="";
//        
//        if(editorMode==MobileSystem.UI.EditorMode.EDITOR_LITERAL){
//            //Normalのスタイルを定義
//            editorMainArea.className="editormain";
//            marqueArea.className="marqueeAreaInVisible";
//            header.innerHTML = "文字入力エディタ";
//        }else if(editorMode==MobileSystem.UI.EditorMode.EDITOR_MARQUEE){
//            //Marquee用のスタイルを定義
//            editorMainArea.className="editormainWithMarquee";
//            marqueArea.className="marqueeAreaVisible";
//            alignIconArea.style.display="none";
//            alignIconTitleArea.style.display="none";
//            alignIconColArea.style.display = "none";
//            retcodeHeader.style.display="none";
//            retcodeItem.style.display="none";
//            header.innerHTML = "流れ文字入力エディタ";
//        }else if(editorMode==MobileSystem.UI.EditorMode.EDITOR_LINK){
//            editorMainArea.className="editormainWithLink";
//            marqueArea.className="marqueeAreaInVisible";
//            linkIconHeader.style.display="inline";
//            linkIconArea.style.display="inline";
//            //URLエリアの表示設定はLinkManagerが行う
//            header.innerHTML = "リンク入力エディタ";
//        }
//        //フォントの色を黒に設定（起動時は常に黒にするか）
//        //this._colorPicker.setSelectedColor("#000000");//default color
//        
//        this._editorPanelBehavior.show();
//        this._bInitOpen = true;//デバッグ用フラグ
//        
//        if((Sys.Browser.agent === Sys.Browser.Firefox) ||
//                 (Sys.Browser.agent === Sys.Browser.Safari) ||
//                 (Sys.Browser.agent === Sys.Browser.Opera)){
//            /*FirefoxではIFrameが表示している状態で取得したDocumentでないとデザインモードが変更できないのでここで実装する。*/
//            //編集可能になるようにデザインモードを設定する。
//            var mode = "on";
//            var doc = this.getEditorDocument();
//            if(doc.designMode!=mode){
//                doc.designMode = mode;
//            }
//        }
//        
//        this.setFocus();
//        
//    },
//    closeEditor:function(){
//        this.closeContentsLinkListWindow();
//        this._editorPanelBehavior.hide();
//    },
    /**デモ用**/
    openEditorForDemo : function(){
        if((Sys.Browser.agent === Sys.Browser.Firefox) ||
                 (Sys.Browser.agent === Sys.Browser.Safari) ||
                 (Sys.Browser.agent === Sys.Browser.Opera)){
            /*FirefoxではIFrameが表示している状態で取得したDocumentでないとデザインモードが変更できないのでここで実装する。*/
            //編集可能になるようにデザインモードを設定する。
            var mode = "on";
            var doc = this.getEditorDocument();
            if(doc.designMode!=mode){
                doc.designMode = mode;
            }
            this.setFocus();
        }else if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            this._IESetFocus();
        }
        //初期データを登録
        //this.setHTMLData('ここに文字や絵文字を入力してください。');
    },
    //IEではデモ画面起動時にdocumentが生成しきれてないので正常にフォーカス設定できないので少し時間をおいて処理する。
    _IESetFocus : function(){
        var editorMan = CDManager.getEditorManager();
        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            //IEのみ
            if(editorMan._editor.document.readyState!='complete'){
                if(null==editorMan._ieIntervalID){
                    editorMan._ieIntervalID = setInterval("CDManager.getEditorManager()._IESetFocus()",100);
                }
            }else{
                if(editorMan._ieIntervalID!=null){
                    clearInterval(editorMan._ieIntervalID);
                    editorMan._ieIntervalID = null;
                }
                editorMan.setFocus();
            }
        }
    },
    /***********EditorのFocusアウト時処理**************/
    _onEditorBlur : function(e){
        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            var range = this._editor.document.selection.createRange();
            if(null!=range){
                this._editorRange = range;
            }
        }
    },
    /******カラーパレット選択時処理*******/
    _onSelectColor :function(value){
        
        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            if(this._editorRange!=null){
                this.setFocus();
                this._editorRange.select();
                this._editorRange.execCommand('forecolor', false, value);
                //this._editorDocument.execCommand('forecolor', false, value);
                this.getEditorDocument().execCommand('forecolor', false, value);
                //文末の文字未選択状態で色を変更する場合は、上記のメソッドを実行しないと動作しません。
            }
        }else{
            //Firefoxの場合、エディタがOpenしていない状態のDocumentにコマンドを発生するとエラーが発生するので、
            //documentがない場合は処理を行わないようにする。（このような状況でコールされるのは初期処理時のみと思います）
            if(null!=this._editorDocument){
                this.setForeColor(value);
            }
        }
        
    },
    /*文字色設定処理）*/
    setForeColor:function(color){
        //this._execEditorCommand(this._editorDocument,'forecolor', false, color);
        this._execEditorCommand(this.getEditorDocument(),'forecolor', false, color);
    },
    /******************画像設定処理*************
    execCommandコマンドを発行する前に必ずエディタにフォーカスを設定する必要があります。
    _execEditorCommand()内部にてフォーカス設定処理を実装
    */
    setImage :function(imgID){
        var doc = this.getEditorDocument();
        //挿入時の範囲を作成しておく 
        var tr = "";
        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            //tr = this._editorDocument.selection.createRange();
            tr = doc.selection.createRange();
        }
        
        var imgurl = CDManager.getPictDataManager().getImageUrl() + 'i/' + imgID + '.gif';
	    //画像の挿入(Full URLでないと正常に動作しない)
	    //this._execEditorCommand(this._editorDocument,'insertimage', false, imgurl);
	    this._execEditorCommand(doc,'insertimage', false, imgurl);
	    
        if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
            //IEの場合、挿入画像が選択状態になるので選択位置を一つずらして選択状態を解除する。（重要）
            try{
            tr.moveStart("character", 1);
            tr.select();
            }catch(err){};
            //絵文字が選択状態の場合、moveStartメソッドがないので落ちてしまうのでエラーをキャッチする。
        }
    },
    /*HTMLの表示処理*/
    viewHTML: function(){
        //alert(this._editorDocument.body.innerHTML);
        alert(this.getEditorDocument().body.innerHTML);
    },
    /*初期データの設定処理（OnLoad処理以降で呼ぶこと）*/
    setHTMLData :function(html){
        //初期表示データの設定処理
        //Load時にコールするとbodyがnullになる現象が発生（designModeを変更した後は一度画面を表示しないとnullのままになっている）
        //初期化処理終了後にボタン等でこの処理をコールした場合は正常に動作します。
        //this._editorDocument.body.innerHTML = html;
        this.getEditorDocument().body.innerHTML = html;
    },
    /******************Editorへのデータ設定処理*********************
    データの設定処理（Node版）ContentsDataManagerよりコールされます。
    ※一度保存したデータをNodeデータとして登録した場合、
    　絵文字データのコピー時に不具合（不具合番号12）が発生する(IE)ので
    　HTMLデータとして登録するように変更（07/05/30）。
    ****************************************************************/
    setHTMLNode :function(nodes){
        if(null==nodes)return;
        
        if(Sys.Browser.agent === Sys.Browser.Firefox){
            //Firefoxの場合、outerHTMLをサポートされていないのでNodeを追加する。
            //body.childNodesの先頭にbrエレメントが入っているので、それを削除する。
            var doc = this.getEditorDocument();
            if(doc.body.childNodes.length!=0){
                doc.body.removeChild(doc.body.childNodes[0]);
            }
            
            //そのままのNodeを渡すとEditorで編集後のCancelでもWidgetのNodeデータが変更されるのでCloneを渡す
            for(var i=0;i<nodes.length;i++){
                doc.body.appendChild(nodes[i].cloneNode(true));
            }
        }else{
            var html = "";
            for(var i=0;i<nodes.length;i++){
                if(nodes[i].nodeType=="3"){//TextNodeの場合
                    //html+=nodes[i].nodeValue;
                    html+=this._escapeHtml(nodes[i].nodeValue);
                }else{
                    //Pタグの中身がない場合は&nbsp;をセットする。（セットしなければエディタで改行のみのデータが表示されないので）
                    //不具合110対応
                    if(nodes[i].tagName=='P' && nodes[i].innerHTML==''){
                        nodes[i].innerHTML="&nbsp;";
                    }
                    html += nodes[i].outerHTML;
                }
            }
            this.setHTMLData(html);
        }
    },
    /*******特殊文字のエスケープ処理****************/
    _escapeHtml : function(orgStr){
        var retStr = orgStr.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
        return retStr;
    },
    /******Marqueeデータの設定処理************/
    setMarqueeData2MarqueeManager :function(direction,backColor){
        this._marqueeManager.setMarqueeData(direction,backColor);
    },
    /******Linkデータの設定処理************/
    setLinkData2LinkManager : function(linkType,linkData){
        this._linkManager.setLinkData(linkType,linkData);
    },
    /*EditorのNode全削除処理*/
    clearHTMLNode: function(){
        var doc = this.getEditorDocument();
        //var editorNodes = this._editorDocument.body.childNodes;
        var editorNodes = doc.body.childNodes;
        for(var i=editorNodes.length;i>0;i--){
            //this._editorDocument.body.removeChild(editorNodes[i-1])
            doc.body.removeChild(editorNodes[i-1]);
        }
    },
    /*Editorへのフォーカス設定処理*/
    setFocus:function(){
        if(Sys.Browser.agent === Sys.Browser.Opera){
            this._editorElement.focus();
        }else{
            this._editor.focus();
        }
    },
    /***********絵文字エディタ領域の初期化処理****************/
    _initPictEditor :function(){
        if(null==this._imgElmList){
            this._imgElmList = new Array();
            this._onSelectPicElmHandler = Function.createDelegate(this, this._select);
        }
        //絵文字情報格納リストを取得する。
        //このリストは配列の添え字に絵文字ID（ドコモ画像のファイル名部）を利用しています。
        var pictlist = CDManager.getPictDataManager().getPictDataList();
        var pictCount = CDManager.getPictDataManager().getPictDataCount();
        var i=0;
        while(pictCount>0){
            if(pictlist[i]!=null){
                //ファイル名より拡張子を除外した名前がID
                var dName = pictlist[i].d;
                dName.match(/([^.]+)/);
                id = RegExp.$1;
                //絵文字エレメントの作成
                var imgelm = document.createElement("img");
                filename = pictlist[i].d;
                imgelm.setAttribute("id",id);
                imgelm.setAttribute("src","./img/i/"+pictlist[i].d);
                imgelm.setAttribute("height","20");
                imgelm.setAttribute("width","20");
                imgelm.setAttribute("border","0");
                imgelm.setAttribute("align","texttop");
                imgelm.setAttribute("title",pictlist[i].title);
                imgelm.className='pictchar';
                
                //不具合76対応
                var pictElm = document.createElement("a");
                pictElm.setAttribute('href',"javascript:void(0)");
                pictElm.className='pictchar';
                pictElm.appendChild(imgelm);
                
                this._imgElmList.push(imgelm);
                //$get("emojieditor").appendChild(imgelm);
                $get("emojieditor").appendChild(pictElm);
                //イベントの追加
                //不具合3対応に伴いイベント種類を変更
                //$addHandler(imgelm, "mousedown", this._onSelectPicElmHandler);
                $addHandler(imgelm, "mouseup", this._onSelectPicElmHandler);
                
                pictCount--;
            }
            i++;
        }
    },
    /*************絵文字選択時処理*************/
    _select:function(e){
        if(e.button!=0)return;//左クリック以外は処理中断
        e = e || window.event;
	    var element = e.target || e.srcElement;
	    var selectID = element.id;
	    this.setImage(selectID);
//	    //不具合83対応
//	    CDManager.setNoCloseFlg(true);
	},
    /*エディタのDocumentの取得処理
    ※FirefoxではIFreme非表示時のDocumentではデザインモードが変更できません
    */
    getEditorDocument : function(){
        if(null==this._editorDocument){
            if(Sys.Browser.agent === Sys.Browser.InternetExplorer){
                //IEの場合
                //this._editorDocument = this._editor.document;
                //this._editorElement = $get("editor");
                
            }else if((Sys.Browser.agent === Sys.Browser.Firefox) ||
                     (Sys.Browser.agent === Sys.Browser.Safari) ||
                     (Sys.Browser.agent === Sys.Browser.Opera)){
                if(Sys.Browser.agent === Sys.Browser.Firefox || Sys.Browser.agent === Sys.Browser.Opera){
                    //if(!this._bInitOpen)alert("エディタのDocumetを利用するタイミングが間違っています。エディタのOpen後に利用して下さい。");
                    this._editorDocument = this._editor.document;
                    //動作しない場合はhttp://www.codeproject.com/useritems/HtmlEditor.asp?msg=1969090を参照
                }else{
                    this._editorDocument = this._editor.contentDocument;
                }
            }
        }
        return this._editorDocument;
    },
    /*EditorDocumentに書式設定を実行します*/
    _execEditorCommand:function(editordocument,cmd, ui, val){
        //エディタにフォーカスを移動する。（フォーカスが他に移動している場合、命令が発行されません）
        this.setFocus();
        if(val != null) {
	        editordocument.execCommand(cmd, ui, val);
	    }
	    else {
	        editordocument.execCommand(cmd);
	    }
	    //this.setFocus();
    },
    /******エディタで入力されたデータのチェック処理処理********/
    checkEditorData:function(){
        //エディタのbodyを取得
        //var editorbody = this._editorDocument.body;
        var editorbody = this.getEditorDocument().body;
        //エディタで入力されたデータを精査し、不正な情報は削除或いは修正する。。
        this._modifyEditorInputData(editorbody);
        
    },/********エディタで入力されたデータをチェックし不正なデータは修正・削除する ********/
    _modifyEditorInputData:function(editorbody){
        /*
        Editorで入力されたデータの中で以下に該当するデータは修正或いは削除する。
        ・imgのサイズ（幅、高さ）が変更されている場合、Default値に修正
        ・imgのsrcが自ドメインのURLでない場合、該当データを削除
        ・サポートデータ以外が登録されている場合、削除
        */
        //var regurl = new RegExp(this._imgUrl);
        var regurl = new RegExp(CDManager.getPictDataManager().getImageUrl());
        var dellist = new Array();
        //画像データをチェックする。
        var imgNodes = editorbody.getElementsByTagName("img");
        for(var i = 0;i<imgNodes.length;i++){
            src = imgNodes[i].getAttribute("src");
            if(!src.match(regurl)){
                //不正なURLは削除対象とする。
                dellist.push(imgNodes[i]);
            }
            //サイズが変更されている場合は、初期値に修正する。
            width = imgNodes[i].getAttribute("width");
            height= imgNodes[i].getAttribute("height");
            if(width!=MobileSystem.UI.PictCharImgSize.Width){
                imgNodes[i].setAttribute("width",MobileSystem.UI.PictCharImgSize.Width);
                imgNodes[i].style.width = MobileSystem.UI.PictCharImgSize.Width;
            }
            if(height!=MobileSystem.UI.PictCharImgSize.Height){
                imgNodes[i].setAttribute("height",MobileSystem.UI.PictCharImgSize.Height);
                imgNodes[i].style.height = MobileSystem.UI.PictCharImgSize.Height;
            }
        }
        //削除対象画像データを削除する。
        for(var i = 0;i<dellist.length;i++){
            editorbody.removeChild(dellist[i]);
        }
        /*サポート外のタグを削除する*/
        for(var index = 0;index<this._nonSupportTag.length;index++){
            var nonSupportNode = editorbody.getElementsByTagName(this._nonSupportTag[index]);
            for(var i=0;i<nonSupportNode.length;i++){
                try{
                    nonSupportNode[i].parentNode.removeChild(nonSupportNode[i]);
                }catch(err){
                }
            }
        }
        /*Pタグの中で子Nodeがないものを削除する（Marqueeモードの場合のみ削除するように変更）*/
        if(this._editorMode==MobileSystem.UI.EditorMode.EDITOR_MARQUEE){
            pNodes = editorbody.getElementsByTagName("p");
            for(var i=0;i<pNodes.length;i++){
                if(pNodes[i].childNodes.length==0){
                   pNodes[i].parentNode.removeChild(pNodes[i]);
                }
            }
        }
    },
    getMarqueeDirection :function(){
        return this._marqueeManager.getDirection();
    },
    getMarqueeBackColor :function(){
        return this._marqueeManager.getBackColor();
    },
    setMarqueInfo2Elm:function(marqueeElement){
        this._marqueeManager.setMarqueeInfo(marqueeElement);
    },
    getLinkType : function(){
        return this._linkManager.getLinkType();
    },
    getLinkNavigateData : function(){
        return this._linkManager.getLinkNavigateData();
    },
    /******************LinkType設定時にコールLinkManagerよりされます******/
    _onLinkTypeSet : function(type){
        //err メッセージ表示パネルを閉じておく
        //CDManager.getValidatorManager().closeAllCalloutPanel();
        var vm = CDManager.getValidatorManager();
        vm.closeCalloutPanel("EditorLinkUrl");
        vm.closeCalloutPanel("EditorLinkTel");
        vm.closeCalloutPanel("EditorLinkMail");
        
        
        var urlLinkArea = $get("urlLinkArea");
        var telLinkArea = $get("telLinkArea");
        var mailLinkArea = $get("mailLinkArea");
        
        urlLinkArea.className="urlAreaInVisible";
        telLinkArea.className="urlAreaInVisible";
        mailLinkArea.className="urlAreaInVisible";
        
        if(type==MobileSystem.UI.LinkType.URL){
            urlLinkArea.className="urlAreaVisible";
        }else if(type==MobileSystem.UI.LinkType.TEL){
            telLinkArea.className="urlAreaVisible";    
        }else if(type==MobileSystem.UI.LinkType.MAIL){
            mailLinkArea.className="urlAreaVisible";    
        }
        if(type!=MobileSystem.UI.LinkType.URL){
            this.closeContentsLinkListWindow();
        }
        //不具合113対応
        this.setFocus();
    },
    /***************Editorで入力された有効なデータの数を取得します**********************/
    getEditorDataCount : function(){
        //var nodes = this._editorDocument.body.children;
        
        //var nodes = this._editorDocument.body.childNodes;
        var nodes = this.getEditorDocument().body.childNodes;
        
        return this._countInputData(nodes);
    },
    /**********Editorで入力されたデータの数をカウントします*****
    ・Textデータは文字数をカウントします。
    ・絵文字は1としてカウントします
    ※このメソッドはエディタで入力されたデータの中でサポート対象外のデータは除外されている事を
    前提にしています。(checkEditorDataメソッド処理が実行されているデータを対象としています)
    */
    _countInputData:function(nodes){
        var count=0;
        if(null!= nodes && nodes!=""){
            for(var i=0;i<nodes.length;i++){
                if(nodes[i].nodeType==3){
                    //Textデータの場合
                    count += nodes[i].length;
                }else{
                    if(nodes[i].tagName=='IMG'){
                        count++;
                    }else{
                        //子情報を解析し、その情報も登録する。
                        if(null!=nodes[i].childNodes){
                            var childCount = this._countInputData(nodes[i].childNodes);
                            count += childCount;
                        }
                    }    
                }   
            }
        }
        return count;
    },
    /**ALIGN設定時にAlignManagerからコールされるコールバック処理****/
    _onSelectAlign :function(alignType){
        this._currentAlign = alignType;
        
        if(alignType!=MobileSystem.UI.AlignType.NOSET){
            this._setIsEnableAddRCckbx(false);
        }else{
            this._setIsEnableAddRCckbx(true);
        }
        //不具合113対応
        this.setFocus();
    },
    _setIsEnableAddRCckbx :function(bEnable){
        var chkAddRCAreaElm =$get("addRetCDArea");
        chkAddRCAreaElm.disabled = !bEnable;
    },
    getEditorAlign : function(){
        return this._currentAlign;
    },
    setEditorAlign :function(align){
        if(null!=align && align!="" && align!=MobileSystem.UI.AlignType.NOSET){
            this._alignManager.setAlign(align);
            this._currentAlign=align;
            this._setIsEnableAddRCckbx(false);
        }else if(align==MobileSystem.UI.AlignType.NOSET){
            this._alignManager.cleareAlignInfo();
            this._currentAlign=align;
            this._setIsEnableAddRCckbx(true);
        }
    },
    /************改行コードの可否設定***********************/
    setReturnCodeEnable :function(bEnable){
        var chkelelm = $get("chkbxReturnCode");
        chkelelm.checked = bEnable;
    },
    /*************改行コードの可否を取得する************/
    isEnableReturnCode : function(){
        var chkelelm = $get("chkbxReturnCode");
        if(null==chkelelm || chkelelm=='undefined'){
            return false;
        }
        if(this._editorMode==MobileSystem.UI.EditorMode.EDITOR_MARQUEE){
            return false;
        }
        return chkelelm.checked;
    },
    /************末尾に改行コードを付加するか否かの設定***********************/
    setReturnCodeToEnd :function(bAdd){
        var chkelelm = $get("chkbxAddRetCodeToEnd");
        chkelelm.checked = bAdd;
    },
    /********末尾に改行を付加するが設定されているかの問い合わせ処理******************
    位置設定がされている場合は常にfalseを返却します。
    */
    isAddReturnCodeToEnd : function(){
        //位置設定がされている場合は、チェックの有無に関わらずfalseとする。
        if(this._currentAlign!=MobileSystem.UI.AlignType.NOSET){
            return false;
        }
        var chkelelm = $get("chkbxAddRetCodeToEnd");
        if(null==chkelelm || chkelelm=='undefined'){
            return false;
        }
        if(this._editorMode==MobileSystem.UI.EditorMode.EDITOR_MARQUEE){
            return false;
        }
        return chkelelm.checked;
    },
    _onClickContentsList : function(e){
        this._openContentsLinkListWindow();
    },
    /*****リンク用コンテンツ画面の表示(Open)処理********/
    _openContentsLinkListWindow :function(){
        if(null==this._linkListWindow || this._linkListWindow.closed){
            //this._linkListWindow=window.open('../authfrm/MyContentsList.aspx',null,'left=100, top=100, height=500, width= 570, status=no, resizable= no, scrollbars= no, toolbar= no,location= no, menubar= no,directories=no');
            this._linkListWindow=window.open('../authsubfrm/MyContentsList.aspx',null,'left=100, top=100, height=500, width= 570, status=no, resizable= no, scrollbars= no, toolbar= no,location= no, menubar= no,directories=no');
        
        }
        //Windowを前面に移動する。
        this._linkListWindow.focus();
    },
    closeContentsLinkListWindow :function(){
        if(null!=this._linkListWindow && !this._linkListWindow.closed){
            this._linkListWindow.close();
        }
    },
    /*********自コンテンツ一覧より選択された時にコールされます**********/
    selectContentsListItem :function(fileName,title){
        this._linkManager.setURLLinkNavigateData(fileName);
        
    },
    dispose: function() {
        MobileSystem.UI.DemoEditorManager.callBaseMethod(this, 'dispose');
        for(var i=0;i<this._imgElmList.length;i++){
            //不具合3対応に伴いイベント種類を変更
            //$removeHandler(this._imgElmList[i], "mousedown", this._onSelectPicElmHandler);
            $removeHandler(this._imgElmList[i], "mouseup", this._onSelectPicElmHandler);
        }
        
        $removeHandler(this._editorElement, 'blur', this._onEditorBlurHandler);
//        $removeHandler($get("btnLinkListOpen"), 'click', this._onClickContentsListHandler);
        
        //不具合113対応（2007/09/13追加）
        $removeHandler($get('chkbxReturnCode'), 'propertychange', this._onPropChangeHandler);
        $removeHandler($get('chkbxAddRetCodeToEnd'), 'propertychange', this._onPropChangeHandler);
//        $removeHandler($get('radR2L'), 'propertychange', this._onPropChangeHandler);
//        $removeHandler($get('radL2R'), 'propertychange', this._onPropChangeHandler);
        
    }
};

MobileSystem.UI.DemoEditorManager.registerClass('MobileSystem.UI.DemoEditorManager', Sys.Component);


/*EditoのModeを定義*/
MobileSystem.UI.EditorMode = function(){
    throw Error.invalidOperation();
};
MobileSystem.UI.EditorMode.prototype = {
    EDITOR_LITERAL:0,
    EDITOR_MARQUEE: 1,
    EDITOR_LINK:2
};
MobileSystem.UI.EditorMode.registerEnum('MobileSystem.UI.EditorMode');


if (typeof(Sys) !== 'undefined')
   Sys.Application.notifyScriptLoaded(); 
   
