     
     // MARK: - Cell Reuse
     
+    /// Called before instance is returned from the reuse queue.
+    /// Subclasses must call super.
     public override func prepareForReuse() {
         super.prepareForReuse()
         

        }
    }
    
    
    private var _selectedBackgroundView: UIView?
    public var selectedBackgroundView:UIView? {
        get {
            return _selectedBackgroundView
        }
        set(selectedBackgroundView) {
            _selectedBackgroundView?.removeFromSuperview()
            _selectedBackgroundView = nil
            _selectedBackgroundView = selectedBackgroundView!
            _selectedBackgroundView!.hidden = true
            
            _selectedBackgroundView!.translatesAutoresizingMaskIntoConstraints = false
            self.insertSubview(_selectedBackgroundView!, belowSubview: self.contentView)
            
            let views = ["sbV": _selectedBackgroundView!]
            self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[sbV]|",
                options: NSLayoutFormatOptions.DirectionLeftToRight, metrics: nil, views: views))
            self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[sbV]|",
                options: NSLayoutFormatOptions.DirectionLeftToRight, metrics: nil, views: views))
            
        }
    }
    
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

 `SwiftGridReusableView` is the primary reusable view used for headers and footers in the `SwiftGridView`
 */
public class SwiftGridReusableView: UICollectionReusableView {
    
    // MARK: - Properties
    
    internal var delegate:SwiftGridReusableViewDelegate?
    internal var elementKind: String = ""
    internal var indexPath:NSIndexPath = NSIndexPath.init() // TODO: Is there a better way to handle this?
    
    /// Views become highlighted when the user touches them.
    public var highlighted:Bool = false{
        didSet {
            self.selectedBackgroundView?.hidden = !highlighted
        }
    }
    
    // The selected state is toggled when the user lifts up from a highlighted view.
    public var selected:Bool = false {
        didSet {
            self.selectedBackgroundView?.hidden = !selected
        }
    }
    
    /// Add custom subviews to the reusable view's content view.
    public var contentView:UIView = UIView()
    
    /// The background view is a subview behind all other views.
    public var backgroundView:UIView? {
        willSet {
            self.backgroundView?.removeFromSuperview()
            self.backgroundView = nil
        }
        didSet {
            self.backgroundView!.translatesAutoresizingMaskIntoConstraints = false
            
            if(self.selectedBackgroundView != nil) { // TODO: Simplify this logic?
                self.insertSubview(self.backgroundView!, belowSubview: self.selectedBackgroundView!)
            } else {
                self.insertSubview(self.backgroundView!, belowSubview: self.contentView)
            }
            
            let views = ["bV": self.backgroundView!]
            self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[bV]|",
                options: NSLayoutFormatOptions.DirectionLeftToRight, metrics: nil, views: views))
            self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[bV]|",
