void releaseEvent(MusicEvent e)
    {
//		Debug.Log (e);

        if (noteTrails.ContainsKey(e))
        {
            activeHolds.Remove(e);
            NoteTrail trail = noteTrails [e];
            Destroy(trail.gameObject);
            noteTrails.Remove(e);
        }
    }
    public void addEvent(MusicEvent e)
    {
//		Debug.Log (Instantiate(Resources.Load("Pokeball1")));
        GameObject ball = generateBall(e);

        musicEvents.Add(e, ball);
        if (e.isHeldEvent())
        {
            activeHolds[e] = false;

            NoteTrail trail = (Instantiate(Resources.Load("Trail")) as GameObject).GetComponent <NoteTrail>();
            noteTrails [e] = trail;
            trail.setX(xForEvent(e));
//			Debug.Log (trail);

//			GameObject newBall = prefabForEvent(e);
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (patternMaster.isPlaying())
        {
            List <MusicEvent> outOfRange = new List <MusicEvent> ();

            foreach (KeyValuePair <MusicEvent, GameObject> pair in musicEvents)
            {
                MusicEvent e        = pair.Key;
                GameObject pokeball = pair.Value;

                float delta = timeToDelta(e.startTime);
                float y     = timeToY(e.startTime);

                //if objects are past pad point
                if (delta < -ttl)
                {
                    outOfRange.Add(e);
                }

                //if objects are visible
                if (delta < scale)
                {
                    pokeball.transform.position = new Vector3(pokeball.transform.position.x, y, pokeball.transform.position.z);
                }
            }

            foreach (MusicEvent e in outOfRange)
            {
//				Destroy (musicEvents [e]);

//				removeMusicEvent (e);
//				GameObject musicEventObj = musicEvents [e];
                removeMusicEvent(e);
                releaseEvent(e);

                Messenger <MusicEvent> .Invoke(MessengerKeys.EVENT_OUT_OF_RANGE, e);
            }

            foreach (MusicEvent e in activeHolds.Keys)
            {
                bool      active = activeHolds [e];
                NoteTrail trail  = noteTrails [e];

                if (active)
                {
                    trail.setTopY(padList[0].transform.position.y);
                    trail.setBottomY(timeToY(e.endTime));
                }
                else
                {
                    trail.setTopY(timeToY(e.startTime));
                    trail.setBottomY(timeToY(e.endTime));

//					NoteTrail trail = noteTrails [laneForEvent (e)];
//					trail.setTopY (timeToY(e.startTime));
//					trail.setBottomY(timeToY(e.endTime));
                }
            }



//			foreach (MusicEvent e in activeHolds.K) {
//				NoteTrail trail = noteTrails [laneForEvent (e)];
//				trail.setTopY (timeToY(e.startTime));
//				trail.setBottomY(timeToY(e.endTime));
//			}

            //clean up
            foreach (GameObject obj in destoryQueue)
            {
//				Destroy (obj);
                arrowPool.Decommision(obj);
            }
            destoryQueue.Clear();


            //		foreach (var e in musicEvents) {
            //			long delta = e.startTime + patternMaster.startTime - timeMaster.GetTime ();
            //
        }
//		}
    }