/*************************************************************************
    $Id: yeti.js 3915 2010-03-05 11:58:15Z jcigar $
**************************************************************************/

(function(window) {

    var Yeti = window.Yeti = new Object();

    // o must be an instanciated object
    Yeti.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };

    Yeti.utils = new Object();
    Yeti.DOM = new Object();

    /*************************************************************************
        XMLHttpRequest object
    **************************************************************************/

    Yeti.XMLHttpRequest = function() {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            return new ActiveXObject('Microsoft.XMLHTTP');
        } else {
            throw 'Cannot get XMLHttpRequest :(';
        }
    };


    /*************************************************************************
        QueryString object
    **************************************************************************/

    Yeti.utils.QueryString = function(obj) {
        this.qs = [];

        for (var key in obj) {
            var value = obj[key];

            if (value !== undefined) {
                this._encodeValue(key, value);
            }
        }
    }

    Yeti.utils.QueryString.prototype.toString = function() {
        return this.qs.join('&');
    }

    Yeti.utils.QueryString.prototype._encodeValue = function(key, value) {
        switch (value.constructor) {
            case Array:
                this._encodeArray(key, value);
                break;
            default:
                this._encodeString(key, value);
                break;
        }
    }

    Yeti.utils.QueryString.prototype._encodeArray = function(key, value) {
        for (var cpt = 0 ; cpt < value.length ; cpt ++) {
            this._encodeValue(key, value[cpt]);
        }
    }

    Yeti.utils.QueryString.prototype._encodeString = function(key, value) {
        this.qs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
    }


    /*************************************************************************
        DOM functions
    **************************************************************************/

    Yeti.DOM.removeChildren = function(element) {
        var removed = 0;
        while(element.hasChildNodes()) {
            element.removeChild(element.lastChild);
            removed++;
        }
        return removed;
    }

    Yeti.DOM.importNode = function(node, deep) {
        if (document.importNode) {
            return document.importNode(node, deep);
        } else if (document._importNode) {
            return document._importNode(node, deep);
        }
    }

})(window);
