void SimpleAudioEngine::unloadEffect(const char* pszFilePath)
	{
        std::string key = std::string(pszFilePath);
        if(!s_effects.count(key))
        {
            return;
        }

        struct soundData *sound = s_effects[key];

        Mix_FreeChunk(sound->chunk);
        delete sound;
        s_effects.erase(key);
	}
	void SimpleAudioEngine::unloadEffect(const char* pszFilePath)
	{
		EffectsMap::iterator iter = s_effects.find(pszFilePath);

		if (iter != s_effects.end())
	    {
	        alSourceStop(iter->second->source);
			alDeleteSources(1, &iter->second->source);
			alDeleteBuffers(1, &iter->second->buffer);
			delete iter->second;

			int err = alGetError();
			if (err != AL_NO_ERROR)
				printALError(err);

			s_effects.erase(iter);
	    }
	}
	void SimpleAudioEngine::unloadEffect(const char* pszFilePath)
	{
		EffectsMap::iterator iter = s_effects.find(pszFilePath);

		if (iter != s_effects.end())
	    {
			checkALError("unloadEffect");

	        alSourceStop(iter->second->source);
	        checkALError("unloadEffect");

			alDeleteSources(1, &iter->second->source);
			checkALError("unloadEffect");

			alDeleteBuffers(1, &iter->second->buffer);
			checkALError("unloadEffect");
			delete iter->second;

			s_effects.erase(iter);
	    }
	}
void SimpleAudioEngine::unloadEffect(const char* pszFilePath)
{
    // Changing file path to full path
    std::string fullPath = FileUtils::getInstance()->fullPathForFilename(pszFilePath);

    EffectsMap::iterator iter = s_effects.find(fullPath);

    if (iter != s_effects.end())
    {
        checkALError("unloadEffect:init");

        alSourceStop(iter->second->source);
        checkALError("unloadEffect:alSourceStop");

        alDeleteSources(1, &iter->second->source);
        checkALError("unloadEffect:DeletSources");

        alDeleteBuffers(1, &iter->second->buffer);
        checkALError("unloadEffect:alDeleteBuffers");
        delete iter->second;

        s_effects.erase(iter);
    }
}
void System<EffectsComp>::update(double elapsed)
{

    std::map<ObjectId,EffectsComp>::iterator iCom = components_.begin();

    while(iCom!=components_.end())
    {
        EffectsComp* effectsComp = &iCom->second;
        EffectsMap* effectsMap = effectsComp->getEffects();
//        std::cout << "Address of effectsMap: "<< effectsMap << std::endl;
//        std::cout << "copy of effects map size : "<< effectsMap->size() << std::endl;
//        std::cout << "orig effects map size : " << effectsComp->getEffects()->size() << std::endl;
        //update each effect in component as necessary
        EffectsMap::iterator iEffect = effectsMap->begin();
        while(iEffect!=effectsMap->end())
        {
             //update timer if necessary
            if(iEffect->second->hasDuration())
            {
                iEffect->second->updateDuration(elapsed);
                //check if timer has expired
                if (iEffect->second->hasExpired())
                {
                    //do on end messages
                    std::vector<Parameters> endParams = iEffect->second->getOnEnd();
                    std::vector<Parameters>::iterator iParams = endParams.begin();
                    while(iParams!= endParams.end())
                    {
                        if(iParams->size()>0)
                        {
                            Message msg(effectsComp->getId(), effectsComp->getId(), *iParams);
                            Telegram tel(effectsComp->getId(), effectsComp->getId(), 0.0, msg);
                            core_->getMessageCentre()->addTelegram(tel);
                        }
                        ++iParams;
                    }

                    //delete params
                    effectsMap->erase(iEffect++);
                    continue;
                }

            }

            //carry out onUpdate messages
            std::vector<Parameters> updateParams = iEffect->second->getOnUpdate();
            std::vector<Parameters>::iterator iParams = updateParams.begin();
            while(iParams!= updateParams.end())
            {
                if(iParams->size()>0)
                {
                    Message msg(effectsComp->getId(), effectsComp->getId(), *iParams);
                    Telegram tel(effectsComp->getId(), effectsComp->getId(), 0.0, msg);
                    core_->getMessageCentre()->addTelegram(tel);
                }
                ++iParams;
            }

            ++iEffect;

        }

        ++iCom;
    }


}