﻿//dependent on jquery 1.3.2+

var Drawing = { //namespace
    ///<summary>Draw a div on the x axis</summary>
    XLineTo: function(startingXY, endingXY) {
        var lineEl = $('<div style="position:absolute; padding: 1px; line-height: 0px; font-size: 0; height: 0px; background: #676767" />');
        lineEl.css({ left: startingXY.x, top: startingXY.y });
        var w = Math.abs(startingXY.x - endingXY.x);
        lineEl.width(w);
        $(document.body).append(lineEl);
        return lineEl;
    },
    YLineTo: function(startingXY, endingXY) {
        var lineEl = $('<div style="position:absolute; padding: 1px; background: #676767" />');
        lineEl.css({ left: startingXY.x, top: startingXY.y });
        var h = Math.abs(startingXY.y - endingXY.y);
        lineEl.height(h);
        $(document.body).append(lineEl);
        return lineEl;
    },
    SmartLineOptions: function() {
        this.StartingElementLinePosition = Drawing.LineRegistration.LeftMid;
        this.EndingElementLinePosition = Drawing.LineRegistration.LeftMid;
        this.LineMargin = { Top: 0, Right: 0, Left: 0, Bottom: 0 }; //the ammount of 'corner' added to the line... no corner would look like [EL]-----[EL]...
    },
    LineRegistration: { TopLeft: 0, TopMid: 1, TopRight: 2, LeftMid: 3, RightMid: 4, BottomLeft: 5, BottomMid: 6, BottomRight: 7 },
    SmartLine: function(axis) {
        var __self = this;
        var _startingElement = null;
        this.SetStartingElement = function(el) { _startingElement = el };
        this.GetStartingElement = function() { return _startingElement };
        var _endingElement = null;
        this.SetEndingElement = function(el) { _endingElement = el };
        this.GetEndingElement = function() { return _endingElement };
        this.Options = new Drawing.SmartLineOptions();
        var _lineElement = null;
        this.GetLineElement = function() {
            return _lineElement;
        }
        function _doDrawing() {
            //get options and draw lines...
            var start = Drawing.GetRegistrationPointFromElement(__self.Options.StartingElementLinePosition, _startingElement);
            var end = Drawing.GetRegistrationPointFromElement(__self.Options.EndingElementLinePosition, _endingElement);
            if (__self.Options.LineMargin.Right != 0) {
                start.x -= __self.Options.LineMargin.Right;
            }
            if (__self.Options.LineMargin.Top != 0) {
                start.y -= __self.Options.LineMargin.Top;
            }

            _lineElement = Drawing.YLineTo(start, end);
        }
        this.Draw = _doDrawing;
    },
    GetRegistrationPointFromElement: function(lineRegistration, el) {
        var xy = { x: 0, y: 0 };
        var _el = $(el);
        switch (lineRegistration) {
            case Drawing.LineRegistration.LeftMid:
                xy.x = _el.offset().left;
                xy.y = _el.offset().top + (_el.height() / 2);
                break;
            //todo add more...
        }
        return xy;
    }

}
