/* */
static VALUE Event_Initialize( VALUE self, VALUE aType )
{
        sf::Event * object = NULL;
        Data_Get_Struct( self, sf::Event, object );
        
        int typeNum = FIX2INT( aType );
        if(typeNum >= 0 && typeNum < sf::Event::Count)
        {
                rb_iv_set( self, "@type", aType );
                object->Type = static_cast< sf::Event::EventType >( typeNum );
        }
        else
        {
                rb_raise( rb_eTypeError, "expected Fixnum in range of 0...SFML::Event::Count" );
        }
        
        bool noSpecialType = false;
        VALUE eventType;
        const char * name = NULL;
        switch( object->Type )
        {
                case sf::Event::JoyButtonPressed:
                case sf::Event::JoyButtonReleased:
                        eventType = Data_Wrap_Struct( globalJoyButtonEventClass, 0, 0, &object->JoyButton );
                        name = "@joyButton";
                        break;
                case sf::Event::JoyMoved:
                        eventType = Data_Wrap_Struct( globalJoyMoveEventClass, 0, 0, &object->JoyMove );
                        name = "@joyMove";
                        break;
                case sf::Event::KeyPressed:
                case sf::Event::KeyReleased:
                        eventType = Data_Wrap_Struct( globalKeyEventClass, 0, 0, &object->Key );
                        name = "@key";
                        break;
                case sf::Event::MouseButtonPressed:
                case sf::Event::MouseButtonReleased:
                        eventType = Data_Wrap_Struct( globalMouseButtonEventClass, 0, 0, &object->MouseButton );
                        name = "@mouseButton";
                        break;
                case sf::Event::MouseMoved:
                        eventType = Data_Wrap_Struct( globalMouseMoveEventClass, 0, 0, &object->MouseMove );
                        name = "@mouseMove";
                        break;
                case sf::Event::MouseWheelMoved:
                        eventType = Data_Wrap_Struct( globalMouseWheelEventClass, 0, 0, &object->MouseWheel );
                        name = "@mouseWheel";
                        break;
                case sf::Event::Resized:
                        eventType = Data_Wrap_Struct( globalSizeEventClass, 0, 0, &object->Size );
                        name = "@resized";
                        break;
                case sf::Event::TextEntered:
                        eventType = Data_Wrap_Struct( globalTextEventClass, 0, 0, &object->Text );
                        name = "@text";
                        break;
                default:
                        noSpecialType = true;
        };
        
        if( noSpecialType == false )
        {
                rb_obj_call_init( eventType, 0, 0 );
                rb_iv_set( eventType, "@internal__parent_ref", self );
                rb_iv_set( self, name, eventType );
        }
}