/**
 * SWFSize - fix stage size dynamically.
 *
 * Copyright (c) 2008 - 2010 Spark project (www.libspark.org)
 *
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 */
var SWFSize = function (id, minW, minH, maxW, maxH) {
    var STATE_UNKNOWN = 0,
        STATE_MIN = 1,
        STATE_LIQUID = 2,
        STATE_MAX = 3;

    var win = window,
        doc = document,
        state = STATE_UNKNOWN,
        el,
        __load__,
        __resize__,
        __unload__;

    //  retrieve target object.
    el = (function () {
        var r = doc.getElementById(id);
        //  FIXME: fallback for `AC_FL_RunContent`.
        if (!r) {
            var nodes = doc.getElementsByTagName('embed'),
                len = nodes.length;

            for (var i=0; i<len; i++) {
                r = nodes[i];
                if (r.name == id) break;
            }
        }
        return r;
    })();

    __load__ = function () {
        __resize__.apply(null, arguments);
    };
    __resize__ = function () {
        var s = STATE_UNKNOWN,
            w = doc.body.offsetWidth,
            h = doc.body.offsetHeight;

        if (w < minW || h < minH)
            s = STATE_MIN;
        else if (w > maxW && h > maxH)
            s = STATE_MAX;
        else
            s = STATE_LIQUID;

        w = w < minW ? minW+'px' : (w > maxW ? maxW + 'px' : '100%');
        h = h < minH ? minH+'px' : (h > maxH ? maxH + 'px' : '100%');
        el.style.width = w;
        el.style.height = h;
        if (doc.all)
            doc.body.scroll = s < STATE_LIQUID ? 'auto' : 'no';
        if (s != state)
            el.changeState(s);
        state = s;
    };

    if (doc.all) {
        __unload__ = function () {
            win.detachEvent('onload', __load__);
            win.detachEvent('onresize', __resize__);
            win.detachEvent('onunload', __unload__);
        };
        win.attachEvent('onresize', __resize__);
        win.attachEvent('onunload', __unload__);
        if (!doc.body) {
            win.attachEvent('onload', __load__);
        } else {
            __load__();
        }
    } else {
        __unload__ = function () {
            win.removeEventListener('resize', __resize__, false);
            win.removeEventListener('unload', __unload__, false);
            doc.removeEventListener('onload', __load__, false);
        };
        win.addEventListener('resize', __resize__, false);
        win.addEventListener('unload', __unload__, false);
        if (!doc.body) {
            doc.addEventListener('onload', __load__, false);
        } else {
            __load__();
        }
    }
}

