<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html">
    
    <mx:HBox>    
        <mx:Label text="YouTube URL:" />
        <mx:VBox>
            <mx:TextInput id="siteUrl" />
            <mx:Button id="getBtn" label="Download" click="download()" />
        </mx:VBox>
    </mx:HBox>
    
    
    <mx:Script>
        <![CDATA[
            import flash.net.navigateToURL;
            import phi.controls.phiBusy;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.http.HTTPService;
            
            private const GET_VIDEO      :String = "http://youtube.com/get_video.php";
            private const GET_VIDEO_INFO :String = "http://youtube.com/get_video_info.php";
            
            private var videoID :String = "";
            
            private function download():void
            {
                var service :HTTPService = new HTTPService();
                
                videoID = parseURL(siteUrl.text);
                
                service.url = GET_VIDEO_INFO + "?video_id=" + videoID;
                service.resultFormat = 'object';
                
                phiBusy.showBusy();
                
                service.addEventListener(ResultEvent.RESULT, onLoadVideoInfoComplete);
                service.send();
            }
            
            private function parseURL(url:String):String
            {
                var reg :RegExp = /youtube\.com\/watch\?v=([^&\/]+)/;
                var res    :Object = reg.exec(url);
            
                return res[1];
            }
            
            private function onLoadVideoInfoComplete(evt:ResultEvent):void
            {
                phiBusy.removeBusy();
                
                var tmp :Array = evt.result.toString().split("&");
                var token :String = tmp[8].toString().split("=")[1];
                
                downloadVideo(token);
            }
            
            private function downloadVideo(token:String):void
            {
                navigateToURL(new URLRequest(GET_VIDEO + "?video_id="+ videoID +"&t="+ token));
            }
            
        ]]>
    </mx:Script>
    
</mx:Application>