let DOCUMENT: any;
let WINDOW: any;
let NODE_FILTER: any = {
    SHOW_ALL: -1,
    FILTER_ACCEPT: 1,
    FILTER_REJECT: 2
};
{
    try {
        if (document) {
            DOCUMENT = document;
        }

        if (window) {
            WINDOW = window;
        }

        if (NodeFilter) {
            NODE_FILTER = NodeFilter;
        }
    } catch (e) {
        // todo
    }
}

export class DOM {

    public static get document(): Document {
        return DOCUMENT;
    }

    public static get window(): Window {
        return WINDOW;
    }

    public static get nodeFilter(): NodeFilter | any {
        return <any>NODE_FILTER;
    }

    public static setConfig(win: Window, doc: Document) {
        DOCUMENT = doc;
        WINDOW = win;
    }

    public static waitFor(time = 30, intervals = 0): Promise<void> {
        return new Promise((resolve: Function) => {
            let no = 0;
            const waiter = () => {
                setTimeout(() => {
                    if (no === intervals) {
                        resolve();
                    } else {
                        no++;
                        waiter();
                    }

                }, time);
            };
            waiter();
        });

    }

}
