/*
 * HDBox.BG feeder module v1.1b
 */
var brDetect = {
    'agent' : navigator.userAgent.toLowerCase(),
    'b' : parseInt(navigator.appVersion)
}

var HDBoxFeed = {
    proxy: '/hdbox_feed.php',
    rqs: 0,
    requests: [ ],

    install: function(obj, props, no_cache, template, callback) {
        var obj = this.getEl(obj);
        if (!obj) return;
        var qstring = this.proxy+"?fmt=json";
        for (var var_name in props) {
            qstring += "&"+var_name+"="+(encodeURIComponent ? encodeURIComponent(props[var_name]) : escape(props[var_name]));
        }
        this.aQuery(obj, qstring, no_cache, template, callback);
    },

    inner: function(obj, url, no_cache) {
        var obj = this.getEl(obj);
        if (!obj) return;
        this.aQuery(obj, url, no_cache, null, null, true);
    },

    aQuery: function(container, url, no_cache, template, callback, is_html) {
        if (typeof url == 'undefined' || url == '') return false;

        if (no_cache) url = url+"ts="+(new Date().getTime());

        var async_req = null;

        if (!async_req) {
            if (typeof XMLHttpRequest != "undefined") {
                try { async_req = new XMLHttpRequest(); }
                catch (oc) { async_req = null; }
            }
        }
        if (!async_req) {
            try { async_req = new ActiveXObject("Msxml2.XMLHTTP"); }
            catch(e) {
                try { async_req = new ActiveXObject("Microsoft.XMLHTTP"); }
                catch (oc) { async_req = null; }
            }
        }

        if (async_req) {
            var obj = this;
            this.rqs++;
            this.requests[this.rqs] = { request: async_req, container: container, template: template, callback: callback, is_html: is_html };
            async_req.onreadystatechange = function() { obj.aQuery_onLoad(obj.rqs); };
            async_req.open('GET', url, true);
            async_req.send(null);

            return true;
        } else {
            return false;
        }
    },
    aQuery_onLoad: function(req_id) {
        if (!this.requests[req_id]) return;

        var async_req = this.requests[req_id].request;

        if (async_req && async_req.readyState == 4) {
            var req_success = false;
            var req_response = "";
            if (async_req.status == 200 || async_req.status == 304) {
                if (this.requests[req_id].is_html) {
                    this.requests[req_id].container.innerHTML = async_req.responseText;
                    this.node_ExecJS(this.requests[req_id].container);
                } else {
                    req_response = async_req.responseText;
                    req_success = true;
                    var str = "var info = "+async_req.responseText;
                    eval(str);
                    if (!this.empty(info)) {
                        this.fillTemplate(req_id, info);
                    }
                }
            }

            if (this.requests[req_id].callback && typeof this.requests[req_id].callback != 'string') {
                this.requests[req_id].callback(req_response, req_success);
            }

            async_req = null;
            delete this.requests[req_id];
        }
    },
    fillTemplate: function(req_id, info) {
        var tpl = this.getEl(this.requests[req_id].template ? this.requests[req_id].template : 'hdboxfeed_template');
        var cont = this.getEl(this.requests[req_id].container);
        if (!tpl || !cont) return false;

        for (var i=0; i<info.length; i++) {
            var new_info = tpl.cloneNode(true);
            for (var prop in info[i]) {
                var elms = this.getByClass('field_'+prop, new_info, true);
                if (this.empty(elms)) continue;
                for (var j=0; j<elms.length; j++) {
                    if (elms[j].nodeName && elms[j].nodeName.toUpperCase() == 'IMG') {
                        elms[j].src = info[i][prop];
                    } else if (elms[j].nodeName && elms[j].nodeName.toUpperCase() == 'A') {
                        elms[j].href = info[i][prop];
                    } else {
                        elms[j].innerHTML = info[i][prop];
                    }
                }
            }
            cont.appendChild(new_info);
        }
        return true;
    },


    arraySearch: function(arr, prop, val) {
        var reg_str = "(^|\\s)" + val.replace(/\-/g, "\\-") + "(\\s|$)";
        var matches = new Array(), reg = new RegExp(reg_str);
        if (typeof val == 'undefined' || val === null) {
            val = prop;
            prop = null;
        }
        for (var i = 0; i < arr.length; i++) {
            if (!this.empty(arr[i])) {
                var cmp_val = ((typeof prop != 'undefined' && prop !== null) ? arr[i][prop] : arr[i]);
                if (!this.empty(cmp_val) && (cmp_val == val || reg.test(cmp_val))) {
                    matches.push(arr[i]);
                }
            }
        }
        return matches;
    },
    empty: function(mixed_var, skip_str) {
        if (typeof mixed_var == 'undefined' || mixed_var === null || mixed_var === false || (!skip_str && mixed_var === "")) return true;
        if (typeof mixed_var == 'object') {
            for (var key in mixed_var) { return false; }
            return true;
        }
        return false;
    },
    getEl: function(id) {
        if (!this.empty(id) && typeof id == 'string') {
            if (id.substring(0, 1) == '#') return document.getElementById(id.substring(1));
            if (id.substring(0, 1) == '.') return this.getByClass(id.substring(1))
            return document.getElementById(id);
        } else {
            return id;
        }
    },
    findCtx: function(ctx) {
        return (!this.empty(ctx) ? this.getEl(ctx) : document);
    },
    getByTagClass: function(tag, klass, ctx, ret_all) {
        if (klass.substring(0,1) == '.') klass = klass.substring(1);
        var tag = tag || "*";
        var ctx = this.findCtx(ctx);
        var arr = ctx.getElementsByTagName(tag);
        var matches = this.arraySearch(arr, "className", klass);
        return (ret_all ? matches : matches[0]);;
    },
    getByClass: function(klass, ctx, ret_all) {
        if (klass.substring(0,1) == '.') klass = klass.substring(1);
        return this.getByTagClass("*", klass, ctx, ret_all);
    },


    node_ExecJS: function(node) {
	if (this.Browser.opera) return;
        var scripts = node.getElementsByTagName('SCRIPT');
        var strExec;
        for (var i=0; i<scripts.length; i++) {
            if (this.Browser.safari) strExec = scripts[i].innerHTML;
            else if (this.Browser.opera) strExec = scripts[i].text;
            else if (this.Browser.moz) strExec = scripts[i].textContent;
            else strExec = scripts[i].text;

            try { this.evalScript(strExec.split("<!--").join("").split("-->").join(""), scripts[i].src); }
            catch(e) { alert(e); }
        }
    },

    evalScript: function(str, url) {
        var head = document.getElementsByTagName("head")[0] || document.getElementsByTagName("*")[0];
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.text = str;
        if (typeof url != 'undefined' && url) script.src = (url ? url : "");
        head.appendChild(script);
        if (this.empty(url)) {
            head.removeChild(script);
            delete script;
        }
    },

    Browser: {
        'ie' : /*@cc_on true || @*/ false,
        'ie6' : brDetect.agent.indexOf('msie 6') >= 0,
        'ie7' : brDetect.agent.indexOf('msie 7') >= 0,
        'ie8' : brDetect.agent.indexOf('msie 8') >= 0,
        'moz' : ((brDetect.agent.indexOf('mozilla') >= 0) && (brDetect.agent.indexOf('spoofer') < 0) && (brDetect.agent.indexOf('compatible') < 0)
        && (brDetect.agent.indexOf('opera') < 0) && (brDetect.agent.indexOf('webtv') < 0) && (brDetect.agent.indexOf('hotjava') < 0)),
        'opera' : !!window.opera,
        'opera7' : ((brDetect.agent.indexOf('opera 7') >= 0) || (brDetect.agent.indexOf('opera/7') >= 0)
        || (brDetect.agent.indexOf('opera 8') >= 0) || (brDetect.agent.indexOf('opera/8') >= 0)
        || (brDetect.agent.indexOf('opera 9') >= 0) || (brDetect.agent.indexOf('opera/9') >= 0)),
        'chrome' : brDetect.agent.indexOf('chrome') >= 0,
        'safari' : (brDetect.agent.indexOf('safari') >= 0 && brDetect.agent.indexOf('chrome') < 0),
        'safari3' : brDetect.agent.indexOf('applewebkit/5') >= 0,
        'win' : ((brDetect.agent.indexOf("win") >= 0) || (brDetect.agent.indexOf("16bit") >= 0)),
        'mac' : brDetect.agent.indexOf('mac') >= 0,
    	'ver' : (brDetect.agent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1]
    }
}