forked from: forked from: forked from: flash on 2013-11-9

by tepe forked from forked from: forked from: flash on 2013-11-9 (diff: 556)
private var yp:TubePlayer;
t2.height = 20;
t2.width = 120;
loadMylist();
t.text = "";
t.border=true;
t.text+=loader.idList[i].toString()+"\n";
t.height;
t.text+="\n";
t.scrollV = t.maxScrollV;
t.text += loader._xml;
var yp2:YoutubePlayer = new YoutubePlayer();
yp2.resize(e.currentTarget.width,e.currentTarget.height);
e.currentTarget.addChild(yp2);
save.add(id);
ブックマーク登録
id title author time 
動画ID取得
投稿者取得
動画タイトル取得
再生時間取得
キーワード検索
投稿者検索
前回の検索ワード
リクエスト回数
var str:String = "http://gdata.youtube.com/feeds/api/videos/-/";
gdata.youtube.com/feeds/api/videos?"
検索ワード
str += escapeMultiByte(_words)+"?";//検索ワード
件数
インデックス
var loader:URLLoader = new URLLoader();
const req:String = "http://www.ozworks.dip.jp/img/01/1426006.png";
i.ytimg.com/vi/";
youtubeプレイヤー読み込み
var str:String = "";
タイトル抽出
str += list3[j].text()+"\n";
ID抽出
var n:int = str3.indexOf("videos/")+7;
str += id+"\n";
投稿者名
再生時間

str += list3.elements("id").toXMLString()+"\n\n";
str += i.toString()+" "+list[i].localName()+"\n";
str += list[i]
♥0 | Line 698 | Modified 2013-12-19 17:58:20 | MIT License
play

ActionScript3 source code

/**
 * Copyright tepe ( http://wonderfl.net/user/tepe )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/pzz9
 */

// forked from tepe's forked from: forked from: flash on 2013-11-9
// forked from tepe's forked from: flash on 2013-11-9
// forked from tepe's flash on 2013-11-9
package {
    import flash.text.*;
    import flash.display.*;
    import flash.net.*;
    import flash.events.*;
    import flash.utils.*;
    import flash.system.*;
    public class FlashTest extends Sprite {
        private var loader:TubeLoader;
        private var t3:TextField = new TextField();
        private var t2:TextField = new TextField();
        //private var yp:TubePlayer;
        private var scrY:int=0;
        private var s1:Sprite =new Sprite();
        
        private var roomID:String = "aaa.chatroom";
        private var chat:MiniChat = new MiniChat(roomID);
        
        private var save:TubeMylist = new TubeMylist();
        
        public function FlashTest(){
            loader = new TubeLoader();
            loader.addEventListener(Event.COMPLETE,onComplete);
            addChild(t3);
            t3.height=300;
            t3.width = 400;
            t3.y =30;
            t3.x = 350;
            
            t2.border = true;
            t2.type ="input";
            t2.text = "初音ミク";
            //t2.height = 20;
            //t2.width = 120;
            t2.x = 350;
            t2.y = 20;
            t2.height = t2.textHeight+5;
            addChild(t2);
            addChild(s1);
            
            t2.addEventListener(KeyboardEvent.KEY_UP,onKey);
            stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey2);
            stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel);
            //loadMylist();
            
            
            chat.x = (465 - chat.width) / 2;
            chat.y = (465 - chat.height) / 2;
            addChild(chat);
            
        }
        
        private function onWheel(e:MouseEvent):void{
            var scr:int = e.delta*5;
            s1.y += scr;
            scrY += scr;
                if(scrY<200){
                    loader.requestWords(t2.text);
                }
        }

        
        private function onKey(e:KeyboardEvent):void{
            if(e.keyCode == 13){
                loader.requestWords(t2.text);
            }
        }
        private function onKey2(e:KeyboardEvent):void{
            if(e.keyCode==40){
                s1.y-=20;
                scrY-=20;
                if(scrY<200){
                    loader.requestWords(t2.text);
                }

            }
            if(e.keyCode==38){
                s1.y+=20;
                scrY+=20;
            }
            
            t3.text = scrY.toString();


        } 
         
        private var lastY:int=0;
        private var listCnt:int=0;
        private function onComplete(e:Event):void{            
            //t.text = "";
            if(loader.idList.length<listCnt){
                while(0<s1.numChildren)s1.removeChildAt(0);
                lastY=0;
                listCnt=0;
                scrY=0;
                s1.y=300;
            } 

            for(var i:int=listCnt;i<loader.idList.length;i++){ 
                
                var id:String = loader.idList[i].toString();
                var s:Sprite = loader.getImage(id);
                s1.addChild(s);
                s.y = lastY;
                var t:TextField = new TextField();
                //t.border=true;
                t.text+=loader.titleList[i]+"\n";
                t.text+= "投稿者:"+loader.authorList[i]+"\n";
                var n:int = loader.durationList[i];
                var h:int = n/3600;
                var min:int = (n/60)%60;
                var sec:int = n%60;
                if(0<h)t.text+=h.toString()+":";
                t.text+= min.toString()+":"+sec.toString()+"\n";

                //t.text+=loader.idList[i].toString()+"\n";
                t.width=t.textWidth+5;
                t.height=t.textHeight+5;
                t.selectable=false;
                t.y=lastY;
                t.x=130;
                s1.addChild(t);
                lastY+=100;//t.height;
                s.addEventListener(MouseEvent.CLICK,onClick);
                s.name = id;
                s.buttonMode = true;
                
                var t2:TextField = new TextField();
                
                
            }
            t = new TextField();
            t.text = loader.idList.length.toString();
            t.height = 20;
            t.y = lastY;
            s1.addChild(t);
            
            lastY+=20;
            scrY = lastY+s1.y-400;
            listCnt = loader.idList.length;
            //t.text+="\n";
            //t.scrollV = t.maxScrollV;
            //t.text += loader._xml;
        }
        
        private function loadMylist():void{
            var list:Array = save.mylist(); 
            for(var i:int=0;i<list.length;i++){
                var t:TextField = new TextField();
                t.border=true;
                t.text = list[i].toString();
                t.width=t.textWidth+5;
                t.height=t.textHeight+5;
                t.selectable=false;
                t.y=lastY;
                s1.addChild(t);
                lastY+=t.height;
                t.addEventListener(MouseEvent.CLICK,onClick);
                t.name = list[i].toString();
            }
            listCnt = s1.numChildren;

        }
        
        
        private function onClick(e:MouseEvent):void{ 
            var id:String = e.currentTarget.name;
            //var yp2:YoutubePlayer = new YoutubePlayer();
            //yp2.resize(e.currentTarget.width,e.currentTarget.height);
            //e.currentTarget.addChild(yp2);
            chat.player.play(id);
            //save.add(id);
        }
        

            
    }
}

//ブックマーク登録
//id title author time 
class TubeMylist{
    private var so:SharedObject;
    
    public function TubeMylist():void{
        so = SharedObject.getLocal("tubeMylist");
    }
    
    public function mylist():Array{ 
        var list:Array = new Array();
        if(so){ 
            var obj:Object = so.data;
            for(var str:String in obj){
                list.push(str);
            }
        }
        return list;
    }
        public function add(id:String,title:String=""):void{
            var obj:Object = so.data;
            var n:String="";
            if(obj.hasOwnProperty(id) == false) obj[id] = n; 
        }
        public function remove(id:String):void{ 
            var obj:Object = so.data;
            if(obj.hasOwnProperty(id) == true) obj[id] = null;
        }
}



import flash.text.*;
import flash.display.*;
import flash.net.*;
import flash.events.*;
import flash.utils.*;
import flash.system.*;
class TubeLoader extends Sprite{

        //動画ID取得
        //投稿者取得
        //動画タイトル取得
        //再生時間取得
        
        //キーワード検索
        //投稿者検索
        
        private var loader:URLLoader;
        public var idList:Array;
        public var titleList:Array;
        public var authorList:Array;
        public var durationList:Array;
        private var _words:String = "";//前回の検索ワード
        private var cnt:int=0;//リクエスト回数
        private var _results:int = 20;
        
        public function TubeLoader() {
            idList = new Array();
            titleList = new Array();
            authorList = new Array();
            durationList = new Array();
        }
        
        public function clear():void{
            idList = new Array();
            titleList = new Array();
            authorList = new Array();
            durationList = new Array();
            cnt=0;
        }
        
        public function set results(n:int):void{
            _results = n;
            clear();
        }
        
        public function requestWords(key:String):void{            
            //var str:String = "http://gdata.youtube.com/feeds/api/videos/-/";
            var str:String = "http://gdata.youtube.com/feeds/api/videos?"
            if(_words != key){ 
                _words = key;
                clear();
            }
            str += "q="+escapeMultiByte(_words);//検索ワード
            //str += escapeMultiByte(_words)+"?";//検索ワード
            str += "&max-results="+_results.toString();//件数
            str += "&start-index="+(cnt*_results+1).toString();//インデックス
            str += "&v=2";
            //var loader:URLLoader = new URLLoader();
            
            loader = new URLLoader();
            loader.addEventListener(Event.COMPLETE,onComplete);
            var url:URLRequest = new URLRequest(str);
            loader.load(url);
            cnt++;
        }
        
        public function getImage(id:String,num:int=1):Sprite{
            var loader:Loader;
            loader = new Loader();
            //const req:String = "http://www.ozworks.dip.jp/img/01/1426006.png";
            const str1:String = "http://i.ytimg.com/vi/";
            const str3:String = "/default.jpg";
            const str4:String = "/0.jpg";
            var req2:String;
            switch(num){
                case 0:
                    req2 = str1+id+str4;
                    break;
                case 1:
                    req2 = str1+id+"/default.jpg";
                    break;
                
            }

            
            loader.load(new URLRequest(req2));//youtubeプレイヤー読み込み
            var s:Sprite = new Sprite();
            s.addChild(loader);
            return s;
        }


        
        public var _xml:String;
        private function onComplete(e:Event):void{
            loader.removeEventListener(Event.COMPLETE,onComplete);
            var res:XML = new XML(e.target.data);
            var list:XMLList = res.children();
            //var str:String = "";
            var cnt:int=0;
            
            for(var i:int=0;i<list.length();i++){
                if(list[i].localName()!="entry")continue;
                var list3:XMLList = list[i].elements();
                for(var j:int=0;j<list3.length();j++){
                    if(list3[j].localName()=="title"){ //タイトル抽出
                        //str += list3[j].text()+"\n";
                        var title:String = new String();
                        title += list3[j].text();
                        titleList.push(title);
                    }
                    else if(list3[j].localName()=="id"){ //ID抽出
                        var str3:String = list3[j].text();
                        var n:int = str3.indexOf("video:")+6;
                        //var n:int = str3.indexOf("videos/")+7;
                        var id:String = str3.substring(n);
                        //str += id+"\n";
                        idList.push(id);
                    }
                    else if(list3[j].localName()=="author"){//投稿者名
                        var str4:String;
                        var list2:XMLList = list3[j].elements();
                        str4 = list2[0].text();
                        authorList.push(str4);
                    }    
                    else if(list3[j].localName()=="group"){//再生時間
                        var str5:String = list3[j].toXMLString();
                        var n2:int = str5.indexOf('duration="')+10;
                        var n3:int = str5.indexOf('"',n2);
                        var n4:int = parseInt(str5.substring(n2,n3));
                        durationList.push(n4);
                    }//*/
                    
                }

                //str += list3.elements("id").toXMLString()+"\n\n";
                //str += i.toString()+" "+list[i].localName()+"\n";
                //str += list[i].toXMLString()+"\n\n";
                //str += "\n";
                _xml = res.toXMLString();
            }
            
            //コンプリートイベント発行
            var event:Event = new Event(Event.COMPLETE);
            this.dispatchEvent(event);
        }
    }
//}





import flash.display.*;
import flash.net.*;
import flash.system.*;
import flash.events.*;
import flash.text.*;
class TubePlayer extends Sprite{
    
    private var WIDTH:int = 320;
    private var HEIGHT:int= 240;
    private var player:Object;
    //private var players:Array;
    private var _state:int = -1;//プレイヤー状態
    private var txt:TextField;
    public function TubePlayer():void{
        var loader:Loader;
            loader = new Loader();
            Security.loadPolicyFile('http://www.youtube.com/crossdomain.xml');            
            loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
            const req:String = "http://www.youtube.com/apiplayer?enablejsapi=1&version=3";
            loader.load(new URLRequest(req));//youtubeプレイヤー読み込み
            
            txt = new TextField();
            txt.textColor = 0x00ff00;
            
    }
    
    public function resize(w:int,h:int):void{
        WIDTH = w;
        HEIGHT = h;
        if(player != null){
            player.setSize(WIDTH, HEIGHT);//サイズ
        }
    }

   
    //ローダー初期化
        private function onLoaderInit(e:Event):void{
            var loader:Loader = e.currentTarget.loader;
            loader.content.addEventListener("onReady", onPlayerReady);
            loader.content.addEventListener("onStateChange",onChangeState);
            addChild(loader);
            //addChild(txt);
        }
        public function load(id:String):void{
            player.clearVideo();
            player.cueVideoById(id);//動画ID
            txt.appendText(id);
        }
        
        public function play(id:String=null):void{
            if(id!=null)load(id);
            player.playVideo();//再生
        }
        
        public function pause():void{
            player.pauseVideo();
        }
        
        public function stop():void{
            player.clearVideo();
        }

        public function get seek():Number{
            return player.getDuration();
        }
        
        public function set seek(time:Number):void{
            player.seekTo(time);
        }
        
        public function get length():Number{
            return player.getDuration();
        }
        
        public function get state():int{
            return _state;
        }




        //プレイヤー設定
        private function onPlayerReady(e:Event):void{
            player = e.currentTarget;
            player.setSize(WIDTH, HEIGHT);//サイズ
            graphics.beginFill(0x000000);
            graphics.drawRect(0,0,WIDTH,HEIGHT);
            graphics.endFill();
        }
        
        //動画ステータス変化
        private function onChangeState(e:Event):void{            
            _state = player.getPlayerState()
            txt.appendText(_state.toString()+":");
          //動画終了
            if(state == 0){   
                txt.appendText("stop");         
            }
            else if(_state == 1){
                txt.appendText("play");
            }
            else if(_state == 2){
                txt.appendText("pause");
            }
            //バッファリング中
            else if(_state == 3){
                txt.appendText("loading.....");
            }

            else if(_state == 5){//頭出し済み  
                txt.appendText("loading.....");
            }  
            txt.appendText("\n");
            txt.scrollV = txt.maxScrollV;
        }
}//class
//}//package


/* ------------------------------------------------------------------------------------------------
 * MiniChat
 * ------------------------------------------------------------------------------------------------
 */
//package {
    import com.bit101.components.PushButton;
    import com.bit101.components.Style;
    import flash.display.*;
    import flash.events.*;
    import flash.filters.*;
    import flash.net.*;
    import flash.media.*;
    import flash.text.*;
    import flash.ui.Keyboard;
    import net.user1.logger.Logger;
    import net.user1.reactor.IClient;
    import net.user1.reactor.Reactor;
    import net.user1.reactor.ReactorEvent;
    import net.user1.reactor.Room;
    import net.user1.reactor.RoomEvent;
    import net.user1.reactor.UpdateLevels;
    
    //public 
    class MiniChat extends Sprite {
        private var _so:SharedObject;
        private var _isReactorShared:Boolean;
        private var _reactor:Reactor;
        private var _roomID:String;
        private var _room:Room;
        private var _messageLogSize:int;
        private var _messages:Vector.<String>;
        // ステータスバー
        private var _title:String;
        private var _statusBar:TextField;
        private var _minimizeButton:PushButton;
        // ウインドウ
        private var _window:Sprite;
        private var _messageDisplay:TextField;
        private var _nameInput:TextField;
        private var _messageInput:TextField;
        private var _bar:ScrollBar;
        
        private var color1:uint = 0x00aaff;
        public var player:TubePlayer;
        
        public function MiniChat(roomID:String, args:Object = null) {

            var now:Date = new Date();
            updateTime = now.getTime();
            
            
            _so = SharedObject.getLocal("MiniChat");
            if (!_so.data.name) { _so.data.name = "名無し"; }
            
            if (!args) { args = { }; }
            var logSize:int = ("logSize" in args) ? args["logSize"] : 10;
            var textColor:uint = ("textColor" in args) ? args["textColor"] : 0xFFFFFF;
            var backgroundColor:uint = ("backgroundColor" in args) ? args["backgroundColor"] : 0x404040;
            var defaultUserName:String = ("defaultUserName" in args) ? args["defaultUserName"] : _so.data.name;
            var initiallyMinimized:Boolean = ("initiallyMinimized" in args) ? args["initiallyMinimized"] : false;
            var draggable:Boolean = ("draggable" in args) ? args["draggable"] : true;
            var minimizable:Boolean = ("minimizable" in args) ? args["minimizable"] : true;
            var renamable:Boolean = ("renamable" in args) ? args["renamable"] : true;
            
            _isReactorShared = ("reactor" in args) ? true : false;
            _reactor = (_isReactorShared) ? args["reactor"] : new Reactor();
            _roomID = roomID;
            _messageLogSize = Math.max(1, logSize);
            _messages = new Vector.<String>();
            _title = ("title" in args) ? args["title"] : "現在の閲覧者数";
            
            // MinimalcompsのStyleを一時保存してから変更する
            var tempEmbedFonts:Boolean = Style.embedFonts;
            var tempFontName:String = Style.fontName;
            var tempFontSize:Number = Style.fontSize;
            Style.embedFonts = false;
            Style.fontName = "_sans";
            Style.fontSize = 12;
            
            
            
            // UIの作成
            
            _messageDisplay = createMessageDisplay(logSize);
            _window = createWindow(_messageDisplay.height);
            
            player = new TubePlayer();
            _window.addChild(player);
            player.y = -20;
            addChild(_window);
            _window.addChild(_messageDisplay);
            addChild(_statusBar = createStatusBar(draggable, textColor, backgroundColor));
            _nameInput = createInputText(0, _window.height - 40, 60, 8, defaultUserName);
            if (renamable) {
                _window.addChild(_nameInput);
                _window.addChild(_messageInput = createInputText(60, _nameInput.y, 170, 50, ""));
            }else {
                _window.addChild(createSayLabel(_window.height - 19));
                _window.addChild(_messageInput = createInputText(31, _window.height - 19, 200, 50, ""));
            }
            
            player.resize(_window.width,_window.height);
            
            _messageInput.addEventListener(KeyboardEvent.KEY_DOWN, sendMessage);
            // MinimalcompsのStyleを元に戻す
            Style.embedFonts = tempEmbedFonts;
            Style.fontName = tempFontName;
            Style.fontSize = tempFontSize;
            if (minimizable) { addChild(_minimizeButton = createMinimizeButton()); }
            if (initiallyMinimized) { minimize(); }
            addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
            addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
            _bar = new ScrollBar();
            _bar.setTF(_messageDisplay); 
            //_window.addChild(_bar);
        }
        
        //ステータスバー
        private function createStatusBar(draggable:Boolean, textColor:uint, backgroundColor:uint):TextField {
            var result:TextField = new TextField();
            result.width = 232; result.height = 20;
            var format:TextFormat = new TextFormat("_sans", 10, color1);
            format.align = TextFormatAlign.CENTER;
            result.defaultTextFormat = format;
            //result.background = true; result.backgroundColor = backgroundColor;
            result.filters = [new BevelFilter(1, 45, 0xFFFFFF, 0.8, 0x000000, 0.8, 1, 1)];
            result.mouseEnabled = result.selectable = false;
            if (draggable) {
                result.mouseEnabled = true;
                result.addEventListener(MouseEvent.MOUSE_DOWN, startDragHandler);
                result.addEventListener(MouseEvent.MOUSE_UP, stopDragHandler);
            }
            return result;
        }
        private function startDragHandler(e:MouseEvent):void { startDrag(); }
        private function stopDragHandler(e:MouseEvent):void { stopDrag(); }
        
        //最小化ボタン
        private function createMinimizeButton():PushButton {
            var result:PushButton = new PushButton(null, 215, 3, "-", minimize);
            result.width = result.height = 14; result.draw();
            return result;
        }
        
        //ウィンドウ
        private function createWindow(messageDisplayHeight:int):Sprite {
            var result:Sprite = new Sprite();
            result.y = 20;
            result.graphics.beginFill(0x000080, 0.1);
            result.graphics.drawRect(0, 0, 232-20, messageDisplayHeight + 20);
            result.graphics.endFill();
            var glow:Shape = new Shape();
            glow.graphics.beginFill(0x0);
            glow.graphics.drawRect(0,-20,232,messageDisplayHeight + 40);
            glow.graphics.endFill();
            glow.filters = [new GlowFilter(color1, 0.5, 2, 1, 5, 8, false, true)];
            result.addChild(glow);
            
            result.mouseEnabled = true;
            //result.addEventListener(MouseEvent.MOUSE_DOWN, startDragHandler);
            //result.addEventListener(MouseEvent.MOUSE_UP, stopDragHandler);

            return result;
        }
        private var mesBase:Sprite;
        //メッセージ欄
        private function createMessageDisplay(logSize:int):TextField {
            var result:TextField = new TextField();
            
            result.width = 232;
            result.defaultTextFormat = new TextFormat("_sans", 12, color1);
            result.filters = [new DropShadowFilter(0, 0, 0x000055, 3,3,2,2)];
            result.mouseEnabled = result.selectable = false;
            result.wordWrap = true;
            for (var i:int = 0; i < logSize; i++) { 
                result.appendText(i + "\n"); 
            }
            result.height = result.textHeight + 4; result.text = "";
            mesBase = new Sprite();
            mesBase.graphics.beginFill(0x000000);
            mesBase.graphics.drawRect(0,0,result.width,result.height);
            mesBase.graphics.endFill();
            
            return result;
        }
        //入力ボックス
        private function createInputText(x:int, y:int, width:int, maxChars:int, text:String):TextField {
            var result:TextField = new TextField();
            result.x = x; result.y = y;
            result.width = width; result.height = 18;
            result.defaultTextFormat = new TextFormat("_sans", 10, 0x00aaff);
            //result.background = true; result.backgroundColor = 0x0033aa;
            result.border = true;result.borderColor=0x00aaff;
            result.filters = [new BevelFilter(1, 225, 0xC0C0C0, 1, 0x404040, 1, 1, 1)];
            result.maxChars = maxChars;
            result.selectable = true;
            result.type = TextFieldType.INPUT;
            result.text = text;
            return result;
        }
        
        private function createSayLabel(y:int):TextField {
            var result:TextField = new TextField();
            result.x = 1; result.y = y;
            result.width = 30; result.height = 18;
            result.defaultTextFormat = new TextFormat("_sans", 10, 0xFFFFFF, null, null, null, null, null, TextFormatAlign.CENTER);
            result.filters = [new GlowFilter(0x000000, 1, 2, 2)];
            result.mouseEnabled = result.selectable = false;
            result.text = "発言:";
            return result;
        }
        
        private function addedToStageHandler(event:Event):void {
            _reactor.addEventListener(ReactorEvent.READY, joinRoom);
            _reactor.addEventListener(ReactorEvent.CLOSE, leaveRoom);
            leaveRoom();
            
            if (_isReactorShared) {
                if (_reactor.isReady()) { joinRoom(); }
            } else {
                _reactor.getConnectionMonitor().setAutoReconnectFrequency(5000);
                _reactor.getLog().setLevel(Logger.FATAL);
                _reactor.connect("ozworks.dip.jp", 9100);
            }
        }
        
        private function removedFromStageHandler(event:Event):void {
            _reactor.removeEventListener(ReactorEvent.READY, joinRoom);
            _reactor.removeEventListener(ReactorEvent.CLOSE, leaveRoom);
            leaveRoom();
            
            if (!_isReactorShared) { _reactor.disconnect(); }
        }
        
        private function joinRoom(event:ReactorEvent = null):void {
            var updateLevels:UpdateLevels = new UpdateLevels();
            updateLevels.clearAll();
            updateLevels.occupantCount = updateLevels.roomMessages = true;
            
            _room = _reactor.getRoomManager().createRoom(_roomID);
            roomOccupantCountHandler();
            _room.addEventListener(RoomEvent.OCCUPANT_COUNT, roomOccupantCountHandler);
            _room.addMessageListener("CHAT_MESSAGE", receiveMessage);
            _room.join(null, updateLevels);
            
        }
        
        private function roomOccupantCountHandler(event:RoomEvent = null):void {
            _statusBar.text = _title + " " + _room.getNumOccupants() + "人";
            alart1();
        }
       
        private function leaveRoom(event:ReactorEvent = null):void {
            if (_room) {
                _room.removeEventListener(RoomEvent.OCCUPANT_COUNT, roomOccupantCountHandler);
                _room.removeMessageListener("CHAT_MESSAGE", receiveMessage);
                _room.leave();
            }
            
            _statusBar.text = "サーバーに接続中...";
        }
        
        //メッセージ送信
        private function sendMessage(event:KeyboardEvent):void {
            
            var now:Date = new Date();
            updateTime = now.getTime();
            
            if (!_reactor.isReady() || event.keyCode != Keyboard.ENTER || _messageInput.text == "") { return; }
            _room.sendMessage("CHAT_MESSAGE", true, null, _nameInput.text, _messageInput.text);
            _so.data.name = _nameInput.text;
            _messageInput.text = "";
        }
        
        //メッセージ受信
        private function receiveMessage(from:IClient, senderName:String, messageText:String):void {
            _messages.push(senderName + ": " + messageText);
            if (_messages.length > _messageLogSize) { _messages.shift(); }
            _messageDisplay.appendText(senderName + ": " + messageText + "\n");
            _messageDisplay.scrollV = _messageDisplay.maxScrollV;
            //_messageDisplay.text = "";
            /*var messagesLength:int = _messages.length;
            for (var i:int = 0; i < messagesLength; i++) {
                _messageDisplay.appendText(_messages[i] + "\n");
            }*/
            _bar.onKey();
            alart1();
        }
        
        private function minimize(event:MouseEvent = null):void {
            _window.visible = !_window.visible;
            if (_minimizeButton) { _minimizeButton.label = (_window.visible) ? "-" : "+"; }
        }
        
        
        private function alart1():void{
            var now:Date = new Date();
            if(updateTime+1000*120 < now.getTime()){
                playSnd("http://ozworks.dip.jp/sound/l.mp3");
                updateTime = now.getTime();
            }
        }

        private var updateTime:Number;
        private var sndList:Array = new Array();
        private function playSnd(url:String):void{
            if(sndList[url]==null){
                var req:URLRequest = new URLRequest(url)
                var sound:Sound = new Sound(req);
                sndList[url]=sound;
            }
            sndList[url].play();
        }
    }
//}

////////////////////////////////////////////////////////////////////////////////
//  ScrollBarクラス
////////////////////////////////////////////////////////////////////////////////

import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
class ScrollBar extends Sprite {
    public var id:uint;
    private static var _width:uint = 16;
    private var _height:uint;
    private var track:Sprite;
    private var thumb:Sprite;
    private var base:Shape;
    private var handle:Shape;
    private static var bColor:uint = 0x333333;
    private static var tColor:uint = 0x000000;
    private static var hColor:uint = 0x999999;
    private static var upColor:uint = 0x333333;
    private static var overColor:uint = 0x444444;
    private static var offColor:uint = 0xCCCCCC;
    private static var upColorTrans:ColorTransform;
    private static var overColorTrans:ColorTransform;
    private static var offColorTrans:ColorTransform;
    private static var minHeight:uint = 20;

    private var maxHeight:uint;
    private var thumbHeight:uint = minHeight;
    private var target:DisplayObject;
    private var rect:DisplayObject;
    private var clickPos:Number;
    private var basePos:int;
    private var _enabled:Boolean = true;
    private var txt:TextField;
    
    public function ScrollBar() {
        init();
    }

    
    
    public function setTF(tf:TextField):void{
        txt = tf;
        txt.addEventListener(Event.CHANGE,onChange);
        txt.addEventListener(KeyboardEvent.KEY_DOWN,onKey);
        txt.addEventListener(KeyboardEvent.KEY_UP,onKey);
        tf.parent.addChild(this);
        onChange();
        
    }
    public function onKey(e:KeyboardEvent=null):void{
        onChange();
        var pos:Number =  maxHeight*(txt.scrollV / txt.maxScrollV);
        if (txt.scrollV == 1) pos = 0;
        if (txt.maxScrollV == txt.scrollV) pos = maxHeight;
        thumb.y = pos;
        e.updateAfterEvent();
    }

    public function onChange(e:Event = null):void{
        this.x = txt.x+txt.width -_width;
        this.y = txt.y;
        _height = txt.height;
        var n:Number;
        if(txt.height<txt.textHeight){ 
            n = txt.height/txt.textHeight;
            txt.parent.addChild(this);
        }
        else{ 
            n = 1;
            txt.parent.removeChild(this);
        }
        thumbHeight = Math.max(minHeight,_height*n);
        maxHeight = _height - thumbHeight;
        if (thumb.y < 0) thumb.y = 0;
        if (thumb.y > maxHeight) thumb.y = maxHeight;
        createTrack(_width,_height);
        createThumb(_width,thumbHeight);  
    }
    private function init():void {
        
        upColorTrans = new ColorTransform();
        upColorTrans.color = upColor;
        overColorTrans = new ColorTransform();
        overColorTrans.color = overColor;
        offColorTrans = new ColorTransform();
        offColorTrans.color = offColor;
        //*/
        track = new Sprite();
        thumb = new Sprite();
        base = new Shape();
        handle = new Shape();
        
        addChild(track);
        addChild(thumb);
        enabled = true;
        thumb.mouseChildren = false;
    }
    
    private function rollOver(evt:MouseEvent):void {
        _over();
    }
    private function rollOut(evt:MouseEvent):void {
        _up();
    }
    private function press(evt:MouseEvent):void {
        _down();
        thumb.addEventListener(MouseEvent.MOUSE_UP, release, false, 0, true);
        stage.addEventListener(MouseEvent.MOUSE_UP, releaseOutside, false, 0, true);
        stage.addEventListener(Event.MOUSE_LEAVE, leave, false, 0, true);
        clickPos = thumb.mouseY;
        stage.addEventListener(MouseEvent.MOUSE_MOVE, drag, false, 0, true);
    }
    private function release(evt:MouseEvent):void {
        _up();
        thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
        stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
        stage.removeEventListener(Event.MOUSE_LEAVE, leave);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
    }
    private function releaseOutside(evt:MouseEvent):void {
        _up();
        thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
        stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
        stage.removeEventListener(Event.MOUSE_LEAVE, leave);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
    }
    private function leave(evt:MouseEvent):void {
        _up();
        thumb.removeEventListener(MouseEvent.MOUSE_UP, release);
        stage.removeEventListener(MouseEvent.MOUSE_UP, releaseOutside);
        stage.removeEventListener(Event.MOUSE_LEAVE, leave);
        stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
    }
    
    private function drag(evt:MouseEvent):void {
        var position:Number = mouseY - clickPos;
        if (position < 0) position = 0;
        if (position > maxHeight) position = maxHeight;
        thumb.y = position;
        txt.scrollV = Math.round(txt.maxScrollV*(position/maxHeight));
        evt.updateAfterEvent();
    }
    private function click(evt:MouseEvent):void {}
    
    private function _up():void {
        base.transform.colorTransform = upColorTrans;
    }
    private function _over():void {
        base.transform.colorTransform = overColorTrans;
    }
    private function _down():void {
        base.transform.colorTransform = overColorTrans;
    }
    private function _off():void {
        base.transform.colorTransform = offColorTrans;
    }
    public function get enabled():Boolean {
        return _enabled;
    }
    public function set enabled(param:Boolean):void {
        _enabled = param;
        thumb.buttonMode = _enabled;
        thumb.mouseEnabled = _enabled;
        thumb.useHandCursor = _enabled;
        track.mouseEnabled = _enabled;
        if (_enabled) {
            _up();
            thumb.addEventListener(MouseEvent.MOUSE_OVER, rollOver, false, 0, true);
            thumb.addEventListener(MouseEvent.MOUSE_OUT, rollOut, false, 0, true);
            thumb.addEventListener(MouseEvent.MOUSE_DOWN, press, false, 0, true);
            track.addEventListener(MouseEvent.CLICK, click, false, 0, true);
        } else {
            _off();
            thumb.removeEventListener(MouseEvent.MOUSE_OVER, rollOver);
            thumb.removeEventListener(MouseEvent.MOUSE_OUT, rollOut);
            thumb.removeEventListener(MouseEvent.MOUSE_DOWN, press);
            track.removeEventListener(MouseEvent.CLICK, click);
        }
    }
    
    private function createThumb(w:uint, h:uint):void {
        thumb.addChild(base);
        thumb.addChild(handle);
        handle.y = uint(h/2);
        
        base.graphics.clear();
        base.graphics.beginFill(tColor);
        base.graphics.drawRect(0, 0, w, h);
        base.graphics.endFill();
        
        handle.graphics.clear();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, -4, w/2, 1);
        handle.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, -2, w/2, 1);
        handle.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, 0, w/2, 1);
        handle.graphics.endFill();
        handle.graphics.beginFill(hColor);
        handle.graphics.drawRect(w/4, 2, w/2, 1);
        handle.graphics.endFill();
    }
    
    private function createTrack(w:uint, h:uint):void {
        track.graphics.clear();
        track.graphics.beginFill(bColor,0.5);
        track.graphics.drawRect(0, 0, w, h);
        track.graphics.endFill();
    }

}