﻿(function ($s) {
    $s.fn.embed = function (_options) {
        if (!(this instanceof $s.fn.embed))
            return new $s.fn.embed(_options);

        var _self = this;

        var options = {
            slateid: ''
            , baseApiUrl: 'http://api.slatebox.com'
            , loadUrl: '/Slates/Search?page=1&rpp=1&slateid={slateid}&apikey={apikey}&callback=?'
            , apikey: ''
            , container: ''
            , size: 0
            , initOpts: {}
            , onSlateLoaded: null
            , showLinks: true
        }
        $s.extend(options, _options);

        var _slateHolder, _id;
        function init() {
            var _opts = $s.extend({ container: options.container }, options.initOpts);
            $s.getJSON(options.baseApiUrl + options.loadUrl.replace(/{slateid}/gi, options.slateid).replace(/{apikey}/gi, options.apikey), function (embed) {
                var results = [];
                options.slate = $s.instance.slate(_opts).canvas.init();
                var _slate = embed.response.Return[0];
                if (!options.showLinks) {
                    $s.each(_slate.nodes, function () {
                        if (this.options.link) this.options.link = false;
                    });
                }
                options.slate.loadJSON(JSON.stringify(embed.response.Return[0]));
                if (!$s.isElement(options.container))
                    options.container = $s.el(options.container);
                post();
            });
        };

        function post() {

            //position
            var _w, _h;
            var orx = options.slate.getOrientation();

            if (options.size > 0) {
                options.container.style.width = options.size + "px";
                options.container.style.height = options.size + "px";
                var _size = $s.getDimensions(options.container);
                var m = (Math.max(_size.width, _size.height) - options.size) / 2;
                options.slate.resize(options.size, 0, m);

                _w = options.size / (Math.max(orx.width, orx.height)) * orx.width;
                _h = options.size / (Math.max(orx.width, orx.height)) * orx.height;

            } else {
                options.slate.canvas.move({ x: orx.left, y: orx.top, dur: 0, isAbsolute: true });
                _w = orx.width;
                _h = orx.height;
            }
            options.container.style.width = _w + "px";
            options.container.style.height = _h + "px";

            if ($s.isFunction(options.onSlateLoaded)) {
                options.onSlateLoaded.apply(this, [options.slate]);
            }
        };

        init();
        return _self;
    }
})(Slatebox);
