text: /*
   * jquery.coords
   * https://github.com/ducksboard/gridster.js
   *
   * Copyright (c) 2012 ducksboard
   * Licensed under the MIT licenses.
   */
  
  ;(function(root, factory) {
  	'use strict';
      if(typeof exports === 'object') {
          module.exports = factory(require('jquery'));
      }
      else if (typeof define === 'function' && define.amd) {
          define('gridster-coords', ['jquery'], factory);
      } else {
         root.GridsterCoords = factory(root.$ || root.jQuery);
      }
  
  }(this, function($) {
  	'use strict';
      /**
      * Creates objects with coordinates (x1, y1, x2, y2, cx, cy, width, height)
      * to simulate DOM elements on the screen.
      * Coords is used by Gridster to create a faux grid with any DOM element can
      * collide.
      *
      * @class Coords
      * @param {HTMLElement|Object} obj The jQuery HTMLElement or a object with: left,
      * top, width and height properties.
      * @return {Object} Coords instance.
      * @constructor
      */
      function Coords(obj) {
          if (obj[0] && $.isPlainObject(obj[0])) {
              this.data = obj[0];
          }else {
              this.el = obj;
          }
  
          this.isCoords = true;
          this.coords = {};
          this.init();
          return this;
      }
  
  
      var fn = Coords.prototype;
  
  
      fn.init = function(){
          this.set();
          this.original_coords = this.get();
      };
  
  
      fn.set = function(update, not_update_offsets) {
          var el = this.el;
  
          if (el && !update) {
              this.data = el.offset();
              this.data.width = el[0].scrollWidth;
              this.data.height = el[0].scrollHeight;
          }
  
          if (el && update && !not_update_offsets) {
              var offset = el.offset();
              this.data.top = offset.top;
              this.data.left = offset.left;
          }
  
          var d = this.data;
  
          if ( d.left === undefined ) {
              d.left = d.x1;
          }
  
          if ( d.top === undefined ) {
              d.top = d.y1;
          }
  
          this.coords.x1 = d.left;
          this.coords.y1 = d.top;
          this.coords.x2 = d.left + d.width;
          this.coords.y2 = d.top + d.height;
          this.coords.cx = d.left + (d.width / 2);
          this.coords.cy = d.top + (d.height / 2);
          this.coords.width  = d.width;
          this.coords.height = d.height;
          this.coords.el  = el || false ;
  
          return this;
      };
  
  
      fn.update = function(data){
          if (!data && !this.el) {
              return this;
          }
  
          if (data) {
              var new_data = $.extend({}, this.data, data);
              this.data = new_data;
              return this.set(true, true);
          }
  
          this.set(true);
          return this;
      };
  
  
      fn.get = function(){
          return this.coords;
      };
  
      fn.destroy = function() {
          this.el.removeData('coords');
          delete this.el;
      };
  
      //jQuery adapter
      $.fn.coords = function() {
          if (this.data('coords') ) {
              return this.data('coords');
          }
  
          var ins = new Coords(this);
          this.data('coords', ins);
          return ins;
      };
  
      return Coords;
  
  }));
  