/*

        USED TO INTERFACE ZINC
        http://www.multidmedia.com/software/zinc/downloads/

*/


class com.jgraup.rad.MDM
{
        //
        //       PROPS
        //

        private static var _instance:MDM;
        private var mdm;
        private var mdminit:Function;

        //
        //       CONTRUCTOR
        //

        public function MDM ( ){}

        // ----------------------------
        //      PUBLIC FUNCTIONS
        // ----------------------------

        // ------------------------------------------- // Shortcuts

        public static function mailTo ( email:String ):Void
        {
                //mdm.System.exec("mailto:support@multidmedia.com")
                instance.mdm.System.exec ( "mailto:" + email )
        }

        public static function exec ( program:String, relativeToApp:Boolean, traceOutput:Boolean ):Void
        {
                program = webToLocal ( program );

                if ( relativeToApp )
                {
                        program = relativeToAbsolute ( program );
                }

                instance.mdm.System.exec ( program );

                if ( traceOutput ) {  instance.mdm.prompt ( program ); trace( program ) }

        }
        public static function exit ():Void
        {
                instance.mdm.exit();

                // instance.mdm.prompt ( 'quit' );
                // instance.mdm.Application.exit();
                // fscommand ( "mdm.Application.exit" );
        }

        public static function startDrag ():Void
        {
                instance.mdm.Forms.MainForm.startDrag();
        }

        public static function stopDrag ():Void
        {
                instance.mdm.Forms.MainForm.stopDrag();
        }


        // ------------------------------------------- // Any Function

        public static  function custom ( type:String )
        {
                instance.customCmd.apply ( instance, arguments );
        }

        public  function customCmd ( type:String )
        {
                /*

                <code>

                        com.jgraup.rad.MDM.instance.custom ( 'prompt', 'This is a Message!' );

                </code>

                */

                var a:Array = arguments.slice ( 1, arguments.length);
                mdm [ type ].apply ( mdm, a );
        }

        // ------------------------------------------- // Test Function

        public  function test():Void
        {
                var path = instance.mdm.Application.path;
                mdm.prompt( path );

        }

        public function foo():Void
        {
                mdm.prompt( "foo message");
        }

        // ----------------------------
        //      PRIVATE FUNCTIONS
        // ----------------------------

        // -------------------------------------------- //  UTILITIES

        private static  function relativeToAbsolute ( str ) : String
        {
                return instance.mdm.Application.path + str;;
        }

        private static function webToLocal ( str ) : String
        {
                var strArray = str.split ( "/" );
                return strArray.join ( String.fromCharCode ( 92 )  );
        }

        // -------------------------------------------- //  SINGLETON

        public static function get instance( ):MDM
        {
                if ( _instance == undefined )
                {
                        _instance = new MDM ( );
                        _instance._intiate ( );
                }
                return _instance;
        }

        public function _intiate():Void
        {
                mdminit();
                mdm = _global [ 'mdm' ];
        }
}