## I2CE Window

Given a node, or node id, create a window object that can be opened, closed, and dragged.

- Class Options:
  The following are the options that can be set in the window's constuctor
  - windowShow: false, a function to call on the window when you want to show it. if false, it will set the display style to block. the function should take one argument, the window element
  - windowHide: false, a function to call on the window when you want to show it. if false, it will set the display style to none the function should take one argument, the window element
  - windowCheck: false, a function to call on The window when see if it is 'hidden' or 'shown' if false, it will checkthe display style state to work with the default (false) windowHide and windowShow
  - the function should take one argument, the window wlement. It should also return true (if 'visible') or false (if not 'visible') windowDraggable: true, make the window draggable. only applies if windowHide/Show/Check are false
  - windowDragButtonClass: 'window_drag', the class of an element to idenfity a dragging handle for a floating draggable window. Defaults to 'window_drag_handle'. only matches elements contained within the window
  - windowDragContainer: false, the container to limit dragging to. Defaults to false meaning there is no containment
  - windowFloats: false, make the window a floater (if no function is specifed) otherwise affects the style.visible propert. if false, then the window is not draggable. You can also make a window not floatable by setting the class not_floats
  - windowShowClass: false, defaults to false. if set to a string, it is the class we set a window to if the window is not a floater nor a function when we show the class. To set the class, both windowShowClass and windowHideClass need to be strings (possibly empty)
  - windowHideClass: false, defaults to false. if set to a string, it is the class we set window to if the window is not a floater nor a function
  - windowPositionVert: 'upper_viewable', where to place the windowmake the window vertically. only applies if windowShow is false valid options 'upper_viewable' (defaul) , 'lower_viewable', 'center_viewable', 'upper', 'lower' 'center' 'mouse_above' 'mouse_below' or none of these which means we dont do anything
  - windowPositionHoriz: 'center_viewable', where to place the windowmake the window vertically. only applies if windowShow is false valid options 'center_viewable' (default), 'left_viewable', 'right_viewable' , 'left', 'right' 'center' or none of these which means we dont do anything
  - windowZIndex: 50000, the default z-index set for a floating window
  - windowRepositions: false, set to true to reposition a floating window on a scroll/pgup event
  - windowRepositionMorphDuration: 50,
  - windowLeftPad: 10,
  - windowRightPad: 10,
  - windowTopPad: 10,
  - windowBottomPad: 10,
  - windowHideOnKeys: [], For example, 27=escape, 18=CTRL-W
  - windowHideButtonClass: 'window_hide' applies to floating windows and defaults to 'window_hide'. If set, it is a class we check within the window element to attach a hide on click event
- Optional: I2CE_ClassHash.js. If present, window options can be loaded from the class hash values.

## Tests

- Default Window
  The content of the default window
  - You should be able to close me.
  - You should be able to also close me.
  - You should be able to close 3 me.
- Floating Window by option The content of the floating window -- 1 You should be able to me.
- Floating Window by class value The content of the floating window -- 2
  You should be able to close me. You should NOT be able to drag me.
- Floating Draggable Window by class value You should be able to drag me.
  The content of the floating draggable window.
  This window should reposition on a scroll/resize.
  You should be able to close me.
- Floating Draggable Window by class value. Does not reposition You should be able to drag me.
  The content of the floating draggable window
  You should be able to close me.
  Hitting escape should also close me